/************************************************* * Public Key Interface Header File * * (C) 1999-2008 The Botan Project * *************************************************/ #ifndef BOTAN_PUBKEY_H__ #define BOTAN_PUBKEY_H__ #include #include #include namespace Botan { /************************************************* * Public Key Encryptor * *************************************************/ class PK_Encryptor { public: SecureVector encrypt(const byte[], u32bit) const; SecureVector encrypt(const MemoryRegion&) const; virtual u32bit maximum_input_size() const = 0; virtual ~PK_Encryptor() {} private: virtual SecureVector enc(const byte[], u32bit) const = 0; }; /************************************************* * Public Key Decryptor * *************************************************/ class PK_Decryptor { public: SecureVector decrypt(const byte[], u32bit) const; SecureVector decrypt(const MemoryRegion&) const; virtual ~PK_Decryptor() {} private: virtual SecureVector dec(const byte[], u32bit) const = 0; }; /************************************************* * Public Key Signer * *************************************************/ class PK_Signer { public: SecureVector sign_message(const byte[], u32bit); SecureVector sign_message(const MemoryRegion&); void update(byte); void update(const byte[], u32bit); void update(const MemoryRegion&); SecureVector signature(); void set_output_format(Signature_Format); PK_Signer(const PK_Signing_Key&, const std::string&); ~PK_Signer() { delete emsa; } private: const PK_Signing_Key& key; Signature_Format sig_format; EMSA* emsa; }; /************************************************* * Public Key Verifier * *************************************************/ class PK_Verifier { public: bool verify_message(const byte[], u32bit, const byte[], u32bit); bool verify_message(const MemoryRegion&, const MemoryRegion&); void update(byte); void update(const byte[], u32bit); void update(const MemoryRegion&); bool check_signature(const byte[], u32bit); bool check_signature(const MemoryRegion&); void set_input_format(Signature_Format); PK_Verifier(const std::string&); virtual ~PK_Verifier(); protected: virtual bool validate_signature(const MemoryRegion&, const byte[], u32bit) = 0; virtual u32bit key_message_parts() const = 0; virtual u32bit key_message_part_size() const = 0; Signature_Format sig_format; EMSA* emsa; }; /************************************************* * Key Agreement * *************************************************/ class PK_Key_Agreement { public: SymmetricKey derive_key(u32bit, const byte[], u32bit, const std::string& = "") const; SymmetricKey derive_key(u32bit, const byte[], u32bit, const byte[], u32bit) const; PK_Key_Agreement(const PK_Key_Agreement_Key&, const std::string&); private: const PK_Key_Agreement_Key& key; const std::string kdf_name; }; /************************************************* * Encryption with an MR algorithm and an EME * *************************************************/ class PK_Encryptor_MR_with_EME : public PK_Encryptor { public: u32bit maximum_input_size() const; PK_Encryptor_MR_with_EME(const PK_Encrypting_Key&, const std::string&); ~PK_Encryptor_MR_with_EME() { delete encoder; } private: SecureVector enc(const byte[], u32bit) const; const PK_Encrypting_Key& key; const EME* encoder; }; /************************************************* * Decryption with an MR algorithm and an EME * *************************************************/ class PK_Decryptor_MR_with_EME : public PK_Decryptor { public: PK_Decryptor_MR_with_EME(const PK_Decrypting_Key&, const std::string&); ~PK_Decryptor_MR_with_EME() { delete encoder; } private: SecureVector dec(const byte[], u32bit) const; const PK_Decrypting_Key& key; const EME* encoder; }; /************************************************* * Public Key Verifier with Message Recovery * *************************************************/ class PK_Verifier_with_MR : public PK_Verifier { public: PK_Verifier_with_MR(const PK_Verifying_with_MR_Key&, const std::string&); private: bool validate_signature(const MemoryRegion&, const byte[], u32bit); u32bit key_message_parts() const { return key.message_parts(); } u32bit key_message_part_size() const { return key.message_part_size(); } const PK_Verifying_with_MR_Key& key; }; /************************************************* * Public Key Verifier without Message Recovery * *************************************************/ class PK_Verifier_wo_MR : public PK_Verifier { public: PK_Verifier_wo_MR(const PK_Verifying_wo_MR_Key&, const std::string&); private: bool validate_signature(const MemoryRegion&, const byte[], u32bit); u32bit key_message_parts() const { return key.message_parts(); } u32bit key_message_part_size() const { return key.message_part_size(); } const PK_Verifying_wo_MR_Key& key; }; } #endif