diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/crypto/interface.cpp | 16 | ||||
-rw-r--r-- | src/crypto/interface.h | 14 | ||||
-rw-r--r-- | src/crypto/openssl.cpp | 17 | ||||
-rw-r--r-- | src/crypto/openssl.h | 9 |
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 |