summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOthmar Gsenger <otti@anytun.org>2014-09-30 19:47:25 +0000
committerOthmar Gsenger <otti@anytun.org>2014-09-30 19:47:25 +0000
commit2ca5c8503f46b3c17336faa6b547a30d695aec73 (patch)
tree36fbfe858d16879fa3d5254c45a3ffafe1e02c88
parentadded openssl crypto class (diff)
refactored crypto interface. linking fails, needs fixing
-rw-r--r--src/crypto/interface.cpp16
-rw-r--r--src/crypto/interface.h14
-rw-r--r--src/crypto/openssl.cpp17
-rw-r--r--src/crypto/openssl.h9
4 files changed, 35 insertions, 21 deletions
diff --git a/src/crypto/interface.cpp b/src/crypto/interface.cpp
index a38ad48..fab3565 100644
--- a/src/crypto/interface.cpp
+++ b/src/crypto/interface.cpp
@@ -47,6 +47,22 @@
namespace crypto {
+void Interface::encrypt(PlainPacket& in, EncryptedPacket& out, const Buffer& masterkey, const Buffer& mastersalt, role_t role, seq_nr_t seq_nr, sender_id_t sender_id, mux_t mux)
+{
+ uint32_t len = cipher(in, in.getLength(), out.getPayload(), out.getPayloadLength(), masterkey, mastersalt, role, seq_nr, sender_id, mux);
+ out.setSenderId(sender_id);
+ out.setSeqNr(seq_nr);
+ out.setMux(mux);
+ out.setPayloadLength(len);
+}
+
+void Interface::decrypt(EncryptedPacket& in, PlainPacket& out, const Buffer& masterkey, const Buffer& mastersalt, role_t role)
+{
+ uint32_t len = decipher(in.getPayload() , in.getPayloadLength(), out, out.getLength(), masterkey, mastersalt, role, in.getSeqNr(), in.getSenderId(), in.getMux());
+ out.setLength(len);
+}
+
+
satp_prf_label_t Interface::convertLabel(kd_dir_t dir, role_t role, satp_prf_label_t label)
{
switch(label) {
diff --git a/src/crypto/interface.h b/src/crypto/interface.h
index 40e605a..9438912 100644
--- a/src/crypto/interface.h
+++ b/src/crypto/interface.h
@@ -71,14 +71,18 @@ namespace crypto {
{
public:
virtual ~Interface() {};
+ // implemented
+ void encrypt(PlainPacket& in, EncryptedPacket& out, const Buffer& masterkey, const Buffer& mastersalt, role_t role, seq_nr_t seq_nr, sender_id_t sender_id, mux_t mux);
+ void decrypt(EncryptedPacket& in, PlainPacket& out, const Buffer& masterkey, const Buffer& mastersalt, role_t role);
+
// pure virtual
- virtual bool generatePacketKey( kd_dir_t dir, satp_prf_label_t label, seq_nr_t seq_nr, const Buffer& masterkey , const Buffer& mastersalt, Buffer& key) = 0;
- virtual void calcMasterKey(std::string passphrase, uint16_t length, Buffer& masterkey ) = 0;
- virtual void calcMasterSalt(std::string passphrase, uint16_t length, Buffer& mastersalt ) = 0;
- virtual void encrypt(const Buffer& key, PlainPacket& in, EncryptedPacket& out) = 0;
- virtual void decrypt(const Buffer& key, EncryptedPacket& in, PlainPacket& out) = 0;
+ virtual void calcMasterKeySalt(std::string passphrase, uint16_t length, Buffer& masterkey , Buffer& mastersalt) = 0;
+ virtual uint32_t cipher(uint8_t* in, uint32_t ilen, uint8_t* out, uint32_t olen, const Buffer& masterkey, const Buffer& mastersalt, role_t role, seq_nr_t seq_nr, sender_id_t sender_id, mux_t mux) = 0;
+ virtual uint32_t decipher(uint8_t* in, uint32_t ilen, uint8_t* out, uint32_t olen, const Buffer& masterkey, const Buffer& mastersalt, role_t role, seq_nr_t seq_nr, sender_id_t sender_id, mux_t mux) = 0;
+
// virtual
virtual std::string printType();
+
//static
static satp_prf_label_t convertLabel(kd_dir_t dir, role_t role, satp_prf_label_t label);
static bool init();
diff --git a/src/crypto/openssl.cpp b/src/crypto/openssl.cpp
index f433a3d..cde1d24 100644
--- a/src/crypto/openssl.cpp
+++ b/src/crypto/openssl.cpp
@@ -44,28 +44,23 @@
*/
#include "openssl.h"
+#include <openssl/aes.h>
namespace crypto {
-bool Openssl::generatePacketKey( kd_dir_t dir, satp_prf_label_t label, seq_nr_t seq_nr, const Buffer& masterkey , const Buffer& mastersalt, Buffer& key)
+void Openssl::calcMasterKeySalt(std::string passphrase, uint16_t length, Buffer& masterkey , Buffer& mastersalt)
{
- return true;
-}
-
-void Openssl::calcMasterKey(std::string passphrase, uint16_t length, Buffer& masterkey )
-{
-}
-void Openssl::calcMasterSalt(std::string passphrase, uint16_t length, Buffer& mastersalt )
-{
}
-void Openssl::encrypt(const Buffer& key, PlainPacket& in, EncryptedPacket& out)
+uint32_t Openssl::cipher(uint8_t* in, uint32_t ilen, uint8_t* out, uint32_t olen, const Buffer& masterkey, const Buffer& mastersalt, role_t role, seq_nr_t seq_nr, sender_id_t sender_id, mux_t mux)
{
+ return ilen>olen ? ilen : olen;
}
-void Openssl::decrypt(const Buffer& key, EncryptedPacket& in, PlainPacket& out)
+uint32_t Openssl::decipher(uint8_t* in, uint32_t ilen, uint8_t* out, uint32_t olen, const Buffer& masterkey, const Buffer& mastersalt, role_t role, seq_nr_t seq_nr, sender_id_t sender_id, mux_t mux)
{
+ return ilen>olen ? ilen : olen;
}
std::string Openssl::printType()
diff --git a/src/crypto/openssl.h b/src/crypto/openssl.h
index ba5a340..b86550e 100644
--- a/src/crypto/openssl.h
+++ b/src/crypto/openssl.h
@@ -55,11 +55,10 @@ namespace crypto {
public:
virtual ~Openssl() {};
// pure virtual
- virtual bool generatePacketKey( kd_dir_t dir, satp_prf_label_t label, seq_nr_t seq_nr, const Buffer& masterkey , const Buffer& mastersalt, Buffer& key);
- virtual void calcMasterKey(std::string passphrase, uint16_t length, Buffer& masterkey );
- virtual void calcMasterSalt(std::string passphrase, uint16_t length, Buffer& mastersalt );
- virtual void encrypt(const Buffer& key, PlainPacket& in, EncryptedPacket& out);
- virtual void decrypt(const Buffer& key, EncryptedPacket& in, PlainPacket& out);
+ virtual void calcMasterKeySalt(std::string passphrase, uint16_t length, Buffer& masterkey , Buffer& mastersalt);
+ virtual uint32_t cipher(uint8_t* in, uint32_t ilen, uint8_t* out, uint32_t olen, const Buffer& masterkey, const Buffer& mastersalt, role_t role, seq_nr_t seq_nr, sender_id_t sender_id, mux_t mux);
+ virtual uint32_t decipher(uint8_t* in, uint32_t ilen, uint8_t* out, uint32_t olen, const Buffer& masterkey, const Buffer& mastersalt, role_t role, seq_nr_t seq_nr, sender_id_t sender_id, mux_t mux);
+
// virtual
virtual std::string printType();
//static