1 /* 2 * DLIES 3 * (C) 1999-2007 Jack Lloyd 4 * 5 * Distributed under the terms of the Botan license 6 */ 7 8 #ifndef BOTAN_DLIES_H__ 9 #define BOTAN_DLIES_H__ 10 11 #include <botan/pubkey.h> 12 #include <botan/mac.h> 13 #include <botan/kdf.h> 14 15 namespace Botan { 16 17 /** 18 * DLIES Encryption 19 */ 20 class BOTAN_DLL DLIES_Encryptor : public PK_Encryptor 21 { 22 public: 23 DLIES_Encryptor(const PK_Key_Agreement_Key&, 24 KDF* kdf, 25 MessageAuthenticationCode* mac, 26 size_t mac_key_len = 20); 27 28 ~DLIES_Encryptor(); 29 30 void set_other_key(const MemoryRegion<byte>&); 31 private: 32 SecureVector<byte> enc(const byte[], size_t, 33 RandomNumberGenerator&) const; 34 size_t maximum_input_size() const; 35 36 SecureVector<byte> other_key, my_key; 37 38 PK_Key_Agreement ka; 39 KDF* kdf; 40 MessageAuthenticationCode* mac; 41 size_t mac_keylen; 42 }; 43 44 /** 45 * DLIES Decryption 46 */ 47 class BOTAN_DLL DLIES_Decryptor : public PK_Decryptor 48 { 49 public: 50 DLIES_Decryptor(const PK_Key_Agreement_Key&, 51 KDF* kdf, 52 MessageAuthenticationCode* mac, 53 size_t mac_key_len = 20); 54 55 ~DLIES_Decryptor(); 56 57 private: 58 SecureVector<byte> dec(const byte[], size_t) const; 59 60 SecureVector<byte> my_key; 61 62 PK_Key_Agreement ka; 63 KDF* kdf; 64 MessageAuthenticationCode* mac; 65 size_t mac_keylen; 66 }; 67 68 } 69 70 #endif 71