aboutsummaryrefslogtreecommitdiffstats
path: root/include/pubkey.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/pubkey.h')
-rw-r--r--include/pubkey.h169
1 files changed, 169 insertions, 0 deletions
diff --git a/include/pubkey.h b/include/pubkey.h
new file mode 100644
index 000000000..68abe290f
--- /dev/null
+++ b/include/pubkey.h
@@ -0,0 +1,169 @@
+/*************************************************
+* Public Key Interface Header File *
+* (C) 1999-2006 The Botan Project *
+*************************************************/
+
+#ifndef BOTAN_PUBKEY_H__
+#define BOTAN_PUBKEY_H__
+
+#include <botan/base.h>
+#include <botan/pk_keys.h>
+#include <botan/pk_util.h>
+
+namespace Botan {
+
+/*************************************************
+* Public Key Encryptor *
+*************************************************/
+class PK_Encryptor
+ {
+ public:
+ SecureVector<byte> encrypt(const byte[], u32bit) const;
+ SecureVector<byte> encrypt(const MemoryRegion<byte>&) const;
+ virtual u32bit maximum_input_size() const = 0;
+ virtual ~PK_Encryptor() {}
+ private:
+ virtual SecureVector<byte> enc(const byte[], u32bit) const = 0;
+ };
+
+/*************************************************
+* Public Key Decryptor *
+*************************************************/
+class PK_Decryptor
+ {
+ public:
+ SecureVector<byte> decrypt(const byte[], u32bit) const;
+ SecureVector<byte> decrypt(const MemoryRegion<byte>&) const;
+ virtual ~PK_Decryptor() {}
+ private:
+ virtual SecureVector<byte> dec(const byte[], u32bit) const = 0;
+ };
+
+/*************************************************
+* Public Key Signer *
+*************************************************/
+class PK_Signer
+ {
+ public:
+ SecureVector<byte> sign_message(const byte[], u32bit);
+ SecureVector<byte> sign_message(const MemoryRegion<byte>&);
+
+ void update(byte);
+ void update(const byte[], u32bit);
+ void update(const MemoryRegion<byte>&);
+
+ SecureVector<byte> 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<byte>&,
+ const MemoryRegion<byte>&);
+
+ void update(byte);
+ void update(const byte[], u32bit);
+ void update(const MemoryRegion<byte>&);
+
+ bool check_signature(const byte[], u32bit);
+ bool check_signature(const MemoryRegion<byte>&);
+
+ void set_input_format(Signature_Format);
+
+ PK_Verifier(const PK_Key&, const std::string&);
+ virtual ~PK_Verifier() { delete emsa; }
+ protected:
+ virtual bool validate_signature(const MemoryRegion<byte>&,
+ const byte[], u32bit) = 0;
+ Signature_Format sig_format;
+ EMSA* emsa;
+ private:
+ const PK_Key& key;
+ };
+
+/*************************************************
+* 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<byte> 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<byte> 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<byte>&, const byte[], u32bit);
+ 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<byte>&, const byte[], u32bit);
+ const PK_Verifying_wo_MR_Key& key;
+ };
+
+}
+
+#endif