summaryrefslogtreecommitdiffstats
path: root/botan/src/pubkey
diff options
context:
space:
mode:
authorDavid Clark <david.a.clark@nokia.com>2010-11-18 16:20:48 +1000
committerDavid Clark <david.a.clark@nokia.com>2010-11-18 16:20:48 +1000
commitc223232bc15106750da632598047a35ad3762723 (patch)
tree403f7aa2c3a5a912edce6feae869046c89d29178 /botan/src/pubkey
parentb984b0b62076067f1f75db5a7eda5aaa2cdaad2a (diff)
Mark repository as deprecatedHEADmaster
Diffstat (limited to 'botan/src/pubkey')
-rw-r--r--botan/src/pubkey/dh/dh.cpp119
-rw-r--r--botan/src/pubkey/dh/dh.h80
-rw-r--r--botan/src/pubkey/dh/dh_core.cpp69
-rw-r--r--botan/src/pubkey/dh/dh_core.h38
-rw-r--r--botan/src/pubkey/dh/dh_op.h45
-rw-r--r--botan/src/pubkey/dh/info.txt20
-rw-r--r--botan/src/pubkey/dl_algo/dl_algo.cpp167
-rw-r--r--botan/src/pubkey/dl_algo/dl_algo.h116
-rw-r--r--botan/src/pubkey/dl_algo/info.txt18
-rw-r--r--botan/src/pubkey/dl_group/dl_group.cpp333
-rw-r--r--botan/src/pubkey/dl_group/dl_group.h162
-rw-r--r--botan/src/pubkey/dl_group/info.txt19
-rw-r--r--botan/src/pubkey/dlies/dlies.cpp137
-rw-r--r--botan/src/pubkey/dlies/dlies.h69
-rw-r--r--botan/src/pubkey/dlies/info.txt16
-rw-r--r--botan/src/pubkey/dsa/dsa.cpp134
-rw-r--r--botan/src/pubkey/dsa/dsa.h62
-rw-r--r--botan/src/pubkey/dsa/dsa_core.cpp63
-rw-r--r--botan/src/pubkey/dsa/dsa_core.h37
-rw-r--r--botan/src/pubkey/dsa/dsa_op.cpp73
-rw-r--r--botan/src/pubkey/dsa/dsa_op.h53
-rw-r--r--botan/src/pubkey/dsa/info.txt22
-rw-r--r--botan/src/pubkey/ec_dompar/ec_dompar.cpp573
-rw-r--r--botan/src/pubkey/ec_dompar/ec_dompar.h121
-rw-r--r--botan/src/pubkey/ec_dompar/info.txt18
-rw-r--r--botan/src/pubkey/ecc_key/ecc_key.cpp269
-rw-r--r--botan/src/pubkey/ecc_key/ecc_key.h154
-rw-r--r--botan/src/pubkey/ecc_key/info.txt20
-rw-r--r--botan/src/pubkey/ecdsa/ecdsa.cpp230
-rw-r--r--botan/src/pubkey/ecdsa/ecdsa.h145
-rw-r--r--botan/src/pubkey/ecdsa/ecdsa_core.cpp55
-rw-r--r--botan/src/pubkey/ecdsa/ecdsa_core.h47
-rw-r--r--botan/src/pubkey/ecdsa/ecdsa_op.cpp129
-rw-r--r--botan/src/pubkey/ecdsa/ecdsa_op.h64
-rw-r--r--botan/src/pubkey/ecdsa/info.txt25
-rw-r--r--botan/src/pubkey/eckaeg/eckaeg.cpp152
-rw-r--r--botan/src/pubkey/eckaeg/eckaeg.h137
-rw-r--r--botan/src/pubkey/eckaeg/eckaeg_core.cpp59
-rw-r--r--botan/src/pubkey/eckaeg/eckaeg_core.h44
-rw-r--r--botan/src/pubkey/eckaeg/eckaeg_op.cpp36
-rw-r--r--botan/src/pubkey/eckaeg/eckaeg_op.h49
-rw-r--r--botan/src/pubkey/eckaeg/info.txt24
-rw-r--r--botan/src/pubkey/elgamal/elg_core.cpp97
-rw-r--r--botan/src/pubkey/elgamal/elg_core.h44
-rw-r--r--botan/src/pubkey/elgamal/elg_op.cpp56
-rw-r--r--botan/src/pubkey/elgamal/elg_op.h52
-rw-r--r--botan/src/pubkey/elgamal/elgamal.cpp124
-rw-r--r--botan/src/pubkey/elgamal/elgamal.h59
-rw-r--r--botan/src/pubkey/elgamal/info.txt22
-rw-r--r--botan/src/pubkey/if_algo/if_algo.cpp215
-rw-r--r--botan/src/pubkey/if_algo/if_algo.h85
-rw-r--r--botan/src/pubkey/if_algo/if_core.cpp87
-rw-r--r--botan/src/pubkey/if_algo/if_core.h45
-rw-r--r--botan/src/pubkey/if_algo/if_op.cpp47
-rw-r--r--botan/src/pubkey/if_algo/if_op.h52
-rw-r--r--botan/src/pubkey/if_algo/info.txt22
-rw-r--r--botan/src/pubkey/info.txt30
-rw-r--r--botan/src/pubkey/keypair/info.txt14
-rw-r--r--botan/src/pubkey/keypair/keypair.cpp73
-rw-r--r--botan/src/pubkey/keypair/keypair.h47
-rw-r--r--botan/src/pubkey/nr/info.txt22
-rw-r--r--botan/src/pubkey/nr/nr.cpp134
-rw-r--r--botan/src/pubkey/nr/nr.h63
-rw-r--r--botan/src/pubkey/nr/nr_core.cpp62
-rw-r--r--botan/src/pubkey/nr/nr_core.h37
-rw-r--r--botan/src/pubkey/nr/nr_op.cpp71
-rw-r--r--botan/src/pubkey/nr/nr_op.h53
-rw-r--r--botan/src/pubkey/pk_algs.cpp112
-rw-r--r--botan/src/pubkey/pk_algs.h31
-rw-r--r--botan/src/pubkey/pk_codecs/info.txt18
-rw-r--r--botan/src/pubkey/pk_codecs/pkcs8.cpp313
-rw-r--r--botan/src/pubkey/pk_codecs/pkcs8.h177
-rw-r--r--botan/src/pubkey/pk_codecs/x509_key.cpp176
-rw-r--r--botan/src/pubkey/pk_codecs/x509_key.h110
-rw-r--r--botan/src/pubkey/pk_filts.cpp115
-rw-r--r--botan/src/pubkey/pk_filts.h91
-rw-r--r--botan/src/pubkey/pk_keys.cpp54
-rw-r--r--botan/src/pubkey/pk_keys.h180
-rw-r--r--botan/src/pubkey/pubkey.cpp396
-rw-r--r--botan/src/pubkey/pubkey.h392
-rw-r--r--botan/src/pubkey/pubkey_enums.cpp42
-rw-r--r--botan/src/pubkey/pubkey_enums.h77
-rw-r--r--botan/src/pubkey/rsa/info.txt17
-rw-r--r--botan/src/pubkey/rsa/rsa.cpp164
-rw-r--r--botan/src/pubkey/rsa/rsa.h88
-rw-r--r--botan/src/pubkey/rw/info.txt17
-rw-r--r--botan/src/pubkey/rw/rw.cpp148
-rw-r--r--botan/src/pubkey/rw/rw.h56
88 files changed, 0 insertions, 8590 deletions
diff --git a/botan/src/pubkey/dh/dh.cpp b/botan/src/pubkey/dh/dh.cpp
deleted file mode 100644
index 0c9d02f..0000000
--- a/botan/src/pubkey/dh/dh.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-* Diffie-Hellman
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/dh.h>
-#include <botan/numthry.h>
-#include <botan/util.h>
-
-namespace Botan {
-
-/*
-* DH_PublicKey Constructor
-*/
-DH_PublicKey::DH_PublicKey(const DL_Group& grp, const BigInt& y1)
- {
- group = grp;
- y = y1;
- X509_load_hook();
- }
-
-/*
-* Algorithm Specific X.509 Initialization Code
-*/
-void DH_PublicKey::X509_load_hook()
- {
- }
-
-/*
-* Return the maximum input size in bits
-*/
-u32bit DH_PublicKey::max_input_bits() const
- {
- return group_p().bits();
- }
-
-/*
-* Return the public value for key agreement
-*/
-MemoryVector<byte> DH_PublicKey::public_value() const
- {
- return BigInt::encode_1363(y, group_p().bytes());
- }
-
-/*
-* Create a DH private key
-*/
-DH_PrivateKey::DH_PrivateKey(RandomNumberGenerator& rng,
- const DL_Group& grp,
- const BigInt& x_arg)
- {
- group = grp;
- x = x_arg;
-
- if(x == 0)
- {
- const BigInt& p = group_p();
- x.randomize(rng, 2 * dl_work_factor(p.bits()));
- PKCS8_load_hook(rng, true);
- }
- else
- PKCS8_load_hook(rng, false);
- }
-
-/*
-* Algorithm Specific PKCS #8 Initialization Code
-*/
-void DH_PrivateKey::PKCS8_load_hook(RandomNumberGenerator& rng,
- bool generated)
- {
- if(y == 0)
- y = power_mod(group_g(), x, group_p());
- core = DH_Core(rng, group, x);
-
- if(generated)
- gen_check(rng);
- else
- load_check(rng);
- }
-
-/*
-* Return the public value for key agreement
-*/
-MemoryVector<byte> DH_PrivateKey::public_value() const
- {
- return DH_PublicKey::public_value();
- }
-
-/*
-* Derive a key
-*/
-SecureVector<byte> DH_PrivateKey::derive_key(const byte w[],
- u32bit w_len) const
- {
- return derive_key(BigInt::decode(w, w_len));
- }
-
-/*
-* Derive a key
-*/
-SecureVector<byte> DH_PrivateKey::derive_key(const DH_PublicKey& key) const
- {
- return derive_key(key.get_y());
- }
-
-/*
-* Derive a key
-*/
-SecureVector<byte> DH_PrivateKey::derive_key(const BigInt& w) const
- {
- const BigInt& p = group_p();
- if(w <= 1 || w >= p-1)
- throw Invalid_Argument(algo_name() + "::derive_key: Invalid key input");
- return BigInt::encode_1363(core.agree(w), p.bytes());
- }
-
-}
diff --git a/botan/src/pubkey/dh/dh.h b/botan/src/pubkey/dh/dh.h
deleted file mode 100644
index fa558bc..0000000
--- a/botan/src/pubkey/dh/dh.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-* Diffie-Hellman
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_DIFFIE_HELLMAN_H__
-#define BOTAN_DIFFIE_HELLMAN_H__
-
-#include <botan/dl_algo.h>
-#include <botan/dh_core.h>
-
-namespace Botan {
-
-/**
-* This class represents Diffie-Hellman public keys.
-*/
-class BOTAN_DLL DH_PublicKey : public virtual DL_Scheme_PublicKey
- {
- public:
- std::string algo_name() const { return "DH"; }
-
- MemoryVector<byte> public_value() const;
- u32bit max_input_bits() const;
-
- DL_Group::Format group_format() const { return DL_Group::ANSI_X9_42; }
-
- /**
- * Construct an uninitialized key. Use this constructor if you wish
- * to decode an encoded key into the new instance.
- */
- DH_PublicKey() {}
-
- /**
- * Construct a public key with the specified parameters.
- * @param grp the DL group to use in the key
- * @param y the public value y
- */
- DH_PublicKey(const DL_Group& grp, const BigInt& y);
- private:
- void X509_load_hook();
- };
-
-/**
-* This class represents Diffie-Hellman private keys.
-*/
-class BOTAN_DLL DH_PrivateKey : public DH_PublicKey,
- public PK_Key_Agreement_Key,
- public virtual DL_Scheme_PrivateKey
- {
- public:
- SecureVector<byte> derive_key(const byte other[], u32bit length) const;
- SecureVector<byte> derive_key(const DH_PublicKey& other) const;
- SecureVector<byte> derive_key(const BigInt& other) const;
-
- MemoryVector<byte> public_value() const;
-
- /**
- * Construct an uninitialized key. Use this constructor if you wish
- * to decode an encoded key into the new instance.
- */
- DH_PrivateKey() {}
-
- /**
- * Construct a private key with predetermined value.
- * @param rng random number generator to use
- * @param grp the group to be used in the key
- * @param x the key's secret value (or if zero, generate a new key)
- */
- DH_PrivateKey(RandomNumberGenerator& rng, const DL_Group& grp,
- const BigInt& x = 0);
- private:
- void PKCS8_load_hook(RandomNumberGenerator& rng, bool = false);
- DH_Core core;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/dh/dh_core.cpp b/botan/src/pubkey/dh/dh_core.cpp
deleted file mode 100644
index 78a26a8..0000000
--- a/botan/src/pubkey/dh/dh_core.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-* PK Algorithm Core
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/dh_core.h>
-#include <botan/numthry.h>
-#include <botan/pk_engine.h>
-#include <botan/parsing.h>
-#include <algorithm>
-
-namespace Botan {
-
-namespace {
-
-const u32bit BLINDING_BITS = BOTAN_PRIVATE_KEY_OP_BLINDING_BITS;
-
-}
-
-/*
-* DH_Core Constructor
-*/
-DH_Core::DH_Core(RandomNumberGenerator& rng,
- const DL_Group& group, const BigInt& x)
- {
- op = Engine_Core::dh_op(group, x);
-
- const BigInt& p = group.get_p();
-
- BigInt k(rng, std::min(p.bits()-1, BLINDING_BITS));
-
- if(k != 0)
- blinder = Blinder(k, power_mod(inverse_mod(k, p), x, p), p);
- }
-
-/*
-* DH_Core Copy Constructor
-*/
-DH_Core::DH_Core(const DH_Core& core)
- {
- op = 0;
- if(core.op)
- op = core.op->clone();
- blinder = core.blinder;
- }
-
-/*
-* DH_Core Assignment Operator
-*/
-DH_Core& DH_Core::operator=(const DH_Core& core)
- {
- delete op;
- if(core.op)
- op = core.op->clone();
- blinder = core.blinder;
- return (*this);
- }
-
-/*
-* DH Operation
-*/
-BigInt DH_Core::agree(const BigInt& i) const
- {
- return blinder.unblind(op->agree(blinder.blind(i)));
- }
-
-}
diff --git a/botan/src/pubkey/dh/dh_core.h b/botan/src/pubkey/dh/dh_core.h
deleted file mode 100644
index 91b50a2..0000000
--- a/botan/src/pubkey/dh/dh_core.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-* DH Core
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_DH_CORE_H__
-#define BOTAN_DH_CORE_H__
-
-#include <botan/dh_op.h>
-#include <botan/blinding.h>
-
-namespace Botan {
-
-/*
-* DH Core
-*/
-class BOTAN_DLL DH_Core
- {
- public:
- BigInt agree(const BigInt&) const;
-
- DH_Core& operator=(const DH_Core&);
-
- DH_Core() { op = 0; }
- DH_Core(const DH_Core&);
- DH_Core(RandomNumberGenerator& rng,
- const DL_Group&, const BigInt&);
- ~DH_Core() { delete op; }
- private:
- DH_Operation* op;
- Blinder blinder;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/dh/dh_op.h b/botan/src/pubkey/dh/dh_op.h
deleted file mode 100644
index 50f3d78..0000000
--- a/botan/src/pubkey/dh/dh_op.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-* DH Operations
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_DH_OPS_H__
-#define BOTAN_DH_OPS_H__
-
-#include <botan/dl_group.h>
-#include <botan/reducer.h>
-#include <botan/pow_mod.h>
-
-namespace Botan {
-
-/*
-* DH Operation Interface
-*/
-class BOTAN_DLL DH_Operation
- {
- public:
- virtual BigInt agree(const BigInt&) const = 0;
- virtual DH_Operation* clone() const = 0;
- virtual ~DH_Operation() {}
- };
-
-/*
-* Botan's Default DH Operation
-*/
-class BOTAN_DLL Default_DH_Op : public DH_Operation
- {
- public:
- BigInt agree(const BigInt& i) const { return powermod_x_p(i); }
- DH_Operation* clone() const { return new Default_DH_Op(*this); }
-
- Default_DH_Op(const DL_Group& group, const BigInt& x) :
- powermod_x_p(x, group.get_p()) {}
- private:
- Fixed_Exponent_Power_Mod powermod_x_p;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/dh/info.txt b/botan/src/pubkey/dh/info.txt
deleted file mode 100644
index 33af9a8..0000000
--- a/botan/src/pubkey/dh/info.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-realname "Diffie-Hellman Key Agreement"
-
-define DIFFIE_HELLMAN
-
-load_on auto
-
-<add>
-dh.cpp
-dh.h
-dh_core.cpp
-dh_core.h
-dh_op.h
-</add>
-
-<requires>
-dl_algo
-dl_group
-libstate
-numbertheory
-</requires>
diff --git a/botan/src/pubkey/dl_algo/dl_algo.cpp b/botan/src/pubkey/dl_algo/dl_algo.cpp
deleted file mode 100644
index 8ce3446..0000000
--- a/botan/src/pubkey/dl_algo/dl_algo.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-* DL Scheme
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/dl_algo.h>
-#include <botan/numthry.h>
-#include <botan/der_enc.h>
-#include <botan/ber_dec.h>
-
-namespace Botan {
-
-/*
-* Return the X.509 public key encoder
-*/
-X509_Encoder* DL_Scheme_PublicKey::x509_encoder() const
- {
- class DL_Scheme_Encoder : public X509_Encoder
- {
- public:
- AlgorithmIdentifier alg_id() const
- {
- MemoryVector<byte> group =
- key->group.DER_encode(key->group_format());
-
- return AlgorithmIdentifier(key->get_oid(), group);
- }
-
- MemoryVector<byte> key_bits() const
- {
- return DER_Encoder().encode(key->y).get_contents();
- }
-
- DL_Scheme_Encoder(const DL_Scheme_PublicKey* k) : key(k) {}
- private:
- const DL_Scheme_PublicKey* key;
- };
-
- return new DL_Scheme_Encoder(this);
- }
-
-/*
-* Return the X.509 public key decoder
-*/
-X509_Decoder* DL_Scheme_PublicKey::x509_decoder()
- {
- class DL_Scheme_Decoder : public X509_Decoder
- {
- public:
- void alg_id(const AlgorithmIdentifier& alg_id)
- {
- DataSource_Memory source(alg_id.parameters);
- key->group.BER_decode(source, key->group_format());
- }
-
- void key_bits(const MemoryRegion<byte>& bits)
- {
- BER_Decoder(bits).decode(key->y);
- key->X509_load_hook();
- }
-
- DL_Scheme_Decoder(DL_Scheme_PublicKey* k) : key(k) {}
- private:
- DL_Scheme_PublicKey* key;
- };
-
- return new DL_Scheme_Decoder(this);
- }
-
-/*
-* Return the PKCS #8 private key encoder
-*/
-PKCS8_Encoder* DL_Scheme_PrivateKey::pkcs8_encoder() const
- {
- class DL_Scheme_Encoder : public PKCS8_Encoder
- {
- public:
- AlgorithmIdentifier alg_id() const
- {
- MemoryVector<byte> group =
- key->group.DER_encode(key->group_format());
-
- return AlgorithmIdentifier(key->get_oid(), group);
- }
-
- MemoryVector<byte> key_bits() const
- {
- return DER_Encoder().encode(key->x).get_contents();
- }
-
- DL_Scheme_Encoder(const DL_Scheme_PrivateKey* k) : key(k) {}
- private:
- const DL_Scheme_PrivateKey* key;
- };
-
- return new DL_Scheme_Encoder(this);
- }
-
-/*
-* Return the PKCS #8 private key decoder
-*/
-PKCS8_Decoder* DL_Scheme_PrivateKey::pkcs8_decoder(RandomNumberGenerator& rng)
- {
- class DL_Scheme_Decoder : public PKCS8_Decoder
- {
- public:
- void alg_id(const AlgorithmIdentifier& alg_id)
- {
- DataSource_Memory source(alg_id.parameters);
- key->group.BER_decode(source, key->group_format());
- }
-
- void key_bits(const MemoryRegion<byte>& bits)
- {
- BER_Decoder(bits).decode(key->x);
- key->PKCS8_load_hook(rng);
- }
-
- DL_Scheme_Decoder(DL_Scheme_PrivateKey* k, RandomNumberGenerator& r) :
- key(k), rng(r) {}
- private:
- DL_Scheme_PrivateKey* key;
- RandomNumberGenerator& rng;
- };
-
- return new DL_Scheme_Decoder(this, rng);
- }
-
-/*
-* Check Public DL Parameters
-*/
-bool DL_Scheme_PublicKey::check_key(RandomNumberGenerator& rng,
- bool strong) const
- {
- if(y < 2 || y >= group_p())
- return false;
- if(!group.verify_group(rng, strong))
- return false;
- return true;
- }
-
-/*
-* Check DL Scheme Private Parameters
-*/
-bool DL_Scheme_PrivateKey::check_key(RandomNumberGenerator& rng,
- bool strong) const
- {
- const BigInt& p = group_p();
- const BigInt& g = group_g();
-
- if(y < 2 || y >= p || x < 2 || x >= p)
- return false;
- if(!group.verify_group(rng, strong))
- return false;
-
- if(!strong)
- return true;
-
- if(y != power_mod(g, x, p))
- return false;
-
- return true;
- }
-
-}
diff --git a/botan/src/pubkey/dl_algo/dl_algo.h b/botan/src/pubkey/dl_algo/dl_algo.h
deleted file mode 100644
index 256ce96..0000000
--- a/botan/src/pubkey/dl_algo/dl_algo.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-* DL Scheme
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_DL_ALGO_H__
-#define BOTAN_DL_ALGO_H__
-
-#include <botan/dl_group.h>
-#include <botan/x509_key.h>
-#include <botan/pkcs8.h>
-#include <botan/rng.h>
-
-namespace Botan {
-
-/**
-* This class represents discrete logarithm (DL) public keys.
-*/
-class BOTAN_DLL DL_Scheme_PublicKey : public virtual Public_Key
- {
- public:
- bool check_key(RandomNumberGenerator& rng, bool) const;
-
- /**
- * Get the DL domain parameters of this key.
- * @return the DL domain parameters of this key
- */
- const DL_Group& get_domain() const { return group; }
-
- /**
- * Get the public value y with y = g^x mod p where x is the secret key.
- */
- const BigInt& get_y() const { return y; }
-
- /**
- * Get the prime p of the underlying DL group.
- * @return the prime p
- */
- const BigInt& group_p() const { return group.get_p(); }
-
- /**
- * Get the prime q of the underlying DL group.
- * @return the prime q
- */
- const BigInt& group_q() const { return group.get_q(); }
-
- /**
- * Get the generator g of the underlying DL group.
- * @return the generator g
- */
- const BigInt& group_g() const { return group.get_g(); }
-
- /**
- * Get the underlying groups encoding format.
- * @return the encoding format
- */
- virtual DL_Group::Format group_format() const = 0;
-
- /**
- * Get an X509 encoder for this key.
- * @return an encoder usable to encode this key.
- */
- X509_Encoder* x509_encoder() const;
-
- /**
- * Get an X509 decoder for this key.
- * @return an decoder usable to decode a DL key and store the
- * values in this instance.
- */
- X509_Decoder* x509_decoder();
- protected:
- BigInt y;
- DL_Group group;
- private:
- virtual void X509_load_hook() {}
- };
-
-/**
-* This class represents discrete logarithm (DL) private keys.
-*/
-class BOTAN_DLL DL_Scheme_PrivateKey : public virtual DL_Scheme_PublicKey,
- public virtual Private_Key
- {
- public:
- bool check_key(RandomNumberGenerator& rng, bool) const;
-
- /**
- * Get the secret key x.
- * @return the secret key
- */
- const BigInt& get_x() const { return x; }
-
- /**
- * Get an PKCS#8 encoder for this key.
- * @return an encoder usable to encode this key.
- */
- PKCS8_Encoder* pkcs8_encoder() const;
-
- /**
- * Get an PKCS#8 decoder for this key.
- * @param rng the rng to use
- * @return an decoder usable to decode a DL key and store the
- * values in this instance.
- */
- PKCS8_Decoder* pkcs8_decoder(RandomNumberGenerator& rng);
- protected:
- BigInt x;
- private:
- virtual void PKCS8_load_hook(RandomNumberGenerator&, bool = false) {}
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/dl_algo/info.txt b/botan/src/pubkey/dl_algo/info.txt
deleted file mode 100644
index 15a7751..0000000
--- a/botan/src/pubkey/dl_algo/info.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-realname "Discrete Logarithm PK Algorithms"
-
-define DL_PUBLIC_KEY_FAMILY
-
-load_on auto
-
-<add>
-dl_algo.cpp
-dl_algo.h
-</add>
-
-<requires>
-asn1
-dl_group
-numbertheory
-pk_codecs
-rng
-</requires>
diff --git a/botan/src/pubkey/dl_group/dl_group.cpp b/botan/src/pubkey/dl_group/dl_group.cpp
deleted file mode 100644
index 81c5d5e..0000000
--- a/botan/src/pubkey/dl_group/dl_group.cpp
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
-* Discrete Logarithm Parameters
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/dl_group.h>
-#include <botan/libstate.h>
-#include <botan/parsing.h>
-#include <botan/numthry.h>
-#include <botan/der_enc.h>
-#include <botan/ber_dec.h>
-#include <botan/pipe.h>
-#include <botan/util.h>
-#include <botan/pem.h>
-
-namespace Botan {
-
-/*
-* DL_Group Constructor
-*/
-DL_Group::DL_Group()
- {
- initialized = false;
- }
-
-/*
-* DL_Group Constructor
-*/
-DL_Group::DL_Group(const std::string& type)
- {
- std::string grp_contents = global_state().get("dl", type);
-
- if(grp_contents == "")
- throw Invalid_Argument("DL_Group: Unknown group " + type);
-
- DataSource_Memory pem(grp_contents);
- PEM_decode(pem);
- }
-
-/*
-* DL_Group Constructor
-*/
-DL_Group::DL_Group(RandomNumberGenerator& rng,
- PrimeType type, u32bit pbits, u32bit qbits)
- {
- if(pbits < 512)
- throw Invalid_Argument("DL_Group: prime size " + to_string(pbits) +
- " is too small");
-
- if(type == Strong)
- {
- p = random_safe_prime(rng, pbits);
- q = (p - 1) / 2;
- g = 2;
- }
- else if(type == Prime_Subgroup || type == DSA_Kosherizer)
- {
- if(type == Prime_Subgroup)
- {
- if(!qbits)
- qbits = 2 * dl_work_factor(pbits);
-
- q = random_prime(rng, qbits);
- BigInt X;
- while(p.bits() != pbits || !is_prime(p, rng))
- {
- X.randomize(rng, pbits);
- p = X - (X % (2*q) - 1);
- }
- }
- else
- {
- qbits = qbits ? qbits : ((pbits == 1024) ? 160 : 256);
- generate_dsa_primes(rng,
- global_state().algorithm_factory(),
- p, q, pbits, qbits);
- }
-
- g = make_dsa_generator(p, q);
- }
-
- initialized = true;
- }
-
-/*
-* DL_Group Constructor
-*/
-DL_Group::DL_Group(RandomNumberGenerator& rng,
- const MemoryRegion<byte>& seed, u32bit pbits, u32bit qbits)
- {
- if(!generate_dsa_primes(rng,
- global_state().algorithm_factory(),
- p, q, pbits, qbits, seed))
- throw Invalid_Argument("DL_Group: The seed given does not "
- "generate a DSA group");
-
- g = make_dsa_generator(p, q);
-
- initialized = true;
- }
-
-/*
-* DL_Group Constructor
-*/
-DL_Group::DL_Group(const BigInt& p1, const BigInt& g1)
- {
- initialize(p1, 0, g1);
- }
-
-/*
-* DL_Group Constructor
-*/
-DL_Group::DL_Group(const BigInt& p1, const BigInt& q1, const BigInt& g1)
- {
- initialize(p1, q1, g1);
- }
-
-/*
-* DL_Group Initializer
-*/
-void DL_Group::initialize(const BigInt& p1, const BigInt& q1, const BigInt& g1)
- {
- if(p1 < 3)
- throw Invalid_Argument("DL_Group: Prime invalid");
- if(g1 < 2 || g1 >= p1)
- throw Invalid_Argument("DL_Group: Generator invalid");
- if(q1 < 0 || q1 >= p1)
- throw Invalid_Argument("DL_Group: Subgroup invalid");
-
- p = p1;
- g = g1;
- q = q1;
-
- initialized = true;
- }
-
-/*
-* Verify that the group has been set
-*/
-void DL_Group::init_check() const
- {
- if(!initialized)
- throw Invalid_State("DLP group cannot be used uninitialized");
- }
-
-/*
-* Verify the parameters
-*/
-bool DL_Group::verify_group(RandomNumberGenerator& rng,
- bool strong) const
- {
- init_check();
-
- if(g < 2 || p < 3 || q < 0)
- return false;
- if((q != 0) && ((p - 1) % q != 0))
- return false;
-
- if(!strong)
- return true;
-
- if(!check_prime(p, rng))
- return false;
- if((q > 0) && !check_prime(q, rng))
- return false;
- return true;
- }
-
-/*
-* Return the prime
-*/
-const BigInt& DL_Group::get_p() const
- {
- init_check();
- return p;
- }
-
-/*
-* Return the generator
-*/
-const BigInt& DL_Group::get_g() const
- {
- init_check();
- return g;
- }
-
-/*
-* Return the subgroup
-*/
-const BigInt& DL_Group::get_q() const
- {
- init_check();
- if(q == 0)
- throw Format_Error("DLP group has no q prime specified");
- return q;
- }
-
-/*
-* DER encode the parameters
-*/
-SecureVector<byte> DL_Group::DER_encode(Format format) const
- {
- init_check();
-
- if((q == 0) && (format != PKCS_3))
- throw Encoding_Error("The ANSI DL parameter formats require a subgroup");
-
- if(format == ANSI_X9_57)
- {
- return DER_Encoder()
- .start_cons(SEQUENCE)
- .encode(p)
- .encode(q)
- .encode(g)
- .end_cons()
- .get_contents();
- }
- else if(format == ANSI_X9_42)
- {
- return DER_Encoder()
- .start_cons(SEQUENCE)
- .encode(p)
- .encode(g)
- .encode(q)
- .end_cons()
- .get_contents();
- }
- else if(format == PKCS_3)
- {
- return DER_Encoder()
- .start_cons(SEQUENCE)
- .encode(p)
- .encode(g)
- .end_cons()
- .get_contents();
- }
-
- throw Invalid_Argument("Unknown DL_Group encoding " + to_string(format));
- }
-
-/*
-* PEM encode the parameters
-*/
-std::string DL_Group::PEM_encode(Format format) const
- {
- SecureVector<byte> encoding = DER_encode(format);
- if(format == PKCS_3)
- return PEM_Code::encode(encoding, "DH PARAMETERS");
- else if(format == ANSI_X9_57)
- return PEM_Code::encode(encoding, "DSA PARAMETERS");
- else if(format == ANSI_X9_42)
- return PEM_Code::encode(encoding, "X942 DH PARAMETERS");
- else
- throw Invalid_Argument("Unknown DL_Group encoding " + to_string(format));
- }
-
-/*
-* Decode BER encoded parameters
-*/
-void DL_Group::BER_decode(DataSource& source, Format format)
- {
- BigInt new_p, new_q, new_g;
-
- BER_Decoder decoder(source);
- BER_Decoder ber = decoder.start_cons(SEQUENCE);
-
- if(format == ANSI_X9_57)
- {
- ber.decode(new_p)
- .decode(new_q)
- .decode(new_g)
- .verify_end();
- }
- else if(format == ANSI_X9_42)
- {
- ber.decode(new_p)
- .decode(new_g)
- .decode(new_q)
- .discard_remaining();
- }
- else if(format == PKCS_3)
- {
- ber.decode(new_p)
- .decode(new_g)
- .discard_remaining();
- }
- else
- throw Invalid_Argument("Unknown DL_Group encoding " + to_string(format));
-
- initialize(new_p, new_q, new_g);
- }
-
-/*
-* Decode PEM encoded parameters
-*/
-void DL_Group::PEM_decode(DataSource& source)
- {
- std::string label;
- DataSource_Memory ber(PEM_Code::decode(source, label));
-
- if(label == "DH PARAMETERS")
- BER_decode(ber, PKCS_3);
- else if(label == "DSA PARAMETERS")
- BER_decode(ber, ANSI_X9_57);
- else if(label == "X942 DH PARAMETERS")
- BER_decode(ber, ANSI_X9_42);
- else
- throw Decoding_Error("DL_Group: Invalid PEM label " + label);
- }
-
-/*
-* Create a random DSA-style generator
-*/
-BigInt DL_Group::make_dsa_generator(const BigInt& p, const BigInt& q)
- {
- BigInt g, e = (p - 1) / q;
-
- for(u32bit j = 0; j != PRIME_TABLE_SIZE; ++j)
- {
- g = power_mod(PRIMES[j], e, p);
- if(g != 1)
- break;
- }
-
- if(g == 1)
- throw Exception("DL_Group: Couldn't create a suitable generator");
-
- return g;
- }
-
-}
diff --git a/botan/src/pubkey/dl_group/dl_group.h b/botan/src/pubkey/dl_group/dl_group.h
deleted file mode 100644
index a84a85f..0000000
--- a/botan/src/pubkey/dl_group/dl_group.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-* Discrete Logarithm Group
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_DL_PARAM_H__
-#define BOTAN_DL_PARAM_H__
-
-#include <botan/bigint.h>
-#include <botan/data_src.h>
-
-namespace Botan {
-
-/**
-* This class represents discrete logarithm groups. It holds a prime p,
-* a prime q = (p-1)/2 and g = x^((p-1)/q) mod p.
-*/
-class BOTAN_DLL DL_Group
- {
- public:
- /**
- * Get the prime p.
- * @return the prime p
- */
- const BigInt& get_p() const;
-
- /**
- * Get the prime q.
- * @return the prime q
- */
- const BigInt& get_q() const;
-
- /**
- * Get the base g.
- * @return the base g
- */
- const BigInt& get_g() const;
-
- /**
- * The DL group encoding format variants.
- */
- enum Format {
- ANSI_X9_42,
- ANSI_X9_57,
- PKCS_3,
-
- DSA_PARAMETERS = ANSI_X9_57,
- DH_PARAMETERS = ANSI_X9_42,
- X942_DH_PARAMETERS = ANSI_X9_42,
- PKCS3_DH_PARAMETERS = PKCS_3
- };
-
- /**
- * Determine the prime creation for DL groups.
- */
- enum PrimeType { Strong, Prime_Subgroup, DSA_Kosherizer };
-
- /**
- * Perform validity checks on the group.
- * @param rng the rng to use
- * @param strong whether to perform stronger by lengthier tests
- * @return true if the object is consistent, false otherwise
- */
- bool verify_group(RandomNumberGenerator& rng, bool strong) const;
-
- /**
- * Encode this group into a string using PEM encoding.
- * @param format the encoding format
- * @return the string holding the PEM encoded group
- */
- std::string PEM_encode(Format format) const;
-
- /**
- * Encode this group into a string using DER encoding.
- * @param format the encoding format
- * @return the string holding the DER encoded group
- */
- SecureVector<byte> DER_encode(Format format) const;
-
- /**
- * Decode a DER/BER encoded group into this instance.
- * @param src a DataSource providing the encoded group
- * @param format the format of the encoded group
- */
- void BER_decode(DataSource& src, Format format);
-
- /**
- * Decode a PEM encoded group into this instance.
- * @param src a DataSource providing the encoded group
- */
- void PEM_decode(DataSource& src);
-
- /**
- * Construct a DL group with uninitialized internal value.
- * Use this constructor is you wish to set the groups values
- * from a DER or PEM encoded group.
- */
- DL_Group();
-
- /**
- * Construct a DL group that is registered in the configuration.
- * @param name the name that is configured in the global configuration
- * for the desired group. If no configuration file is specified,
- * the default values from the file policy.cpp will be used. For instance,
- * use "modp/ietf/768" as name.
- */
- DL_Group(const std::string& name);
-
- /**
- * Create a new group randomly.
- * @param rng the random number generator to use
- * @param type specifies how the creation of primes p and q shall
- * be performed. If type=Strong, then p will be determined as a
- * safe prime, and q will be chosen as (p-1)/2. If
- * type=Prime_Subgroup and qbits = 0, then the size of q will be
- * determined according to the estimated difficulty of the DL
- * problem. If type=DSA_Kosherizer, DSA primes will be created.
- * @param pbits the number of bits of p
- * @param qbits the number of bits of q. Leave it as 0 to have
- * the value determined according to pbits.
- */
- DL_Group(RandomNumberGenerator& rng, PrimeType type,
- u32bit pbits, u32bit qbits = 0);
-
- /**
- * Create a DSA group with a given seed.
- * @param rng the random number generator to use
- * @param seed the seed to use to create the random primes
- * @param pbits the desired bit size of the prime p
- * @param qbits the desired bit size of the prime q.
- */
- DL_Group(RandomNumberGenerator& rng, const MemoryRegion<byte>& seed,
- u32bit pbits = 1024, u32bit qbits = 0);
-
- /**
- * Create a DL group. The prime q will be determined according to p.
- * @param p the prime p
- * @param g the base g
- */
- DL_Group(const BigInt& p, const BigInt& g);
-
- /**
- * Create a DL group.
- * @param p the prime p
- * @param q the prime q
- * @param g the base g
- */
- DL_Group(const BigInt& p, const BigInt& q, const BigInt& g);
- private:
- static BigInt make_dsa_generator(const BigInt&, const BigInt&);
-
- void init_check() const;
- void initialize(const BigInt&, const BigInt&, const BigInt&);
- bool initialized;
- BigInt p, q, g;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/dl_group/info.txt b/botan/src/pubkey/dl_group/info.txt
deleted file mode 100644
index 6b9884a..0000000
--- a/botan/src/pubkey/dl_group/info.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-realname "DL Group"
-
-load_on auto
-
-define DL_GROUP
-
-<add>
-dl_group.cpp
-dl_group.h
-</add>
-
-<requires>
-asn1
-bigint
-filters
-libstate
-numbertheory
-pem
-</requires>
diff --git a/botan/src/pubkey/dlies/dlies.cpp b/botan/src/pubkey/dlies/dlies.cpp
deleted file mode 100644
index c441ed1..0000000
--- a/botan/src/pubkey/dlies/dlies.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-* DLIES
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/dlies.h>
-#include <botan/look_pk.h>
-#include <botan/xor_buf.h>
-
-namespace Botan {
-
-/*
-* DLIES_Encryptor Constructor
-*/
-DLIES_Encryptor::DLIES_Encryptor(const PK_Key_Agreement_Key& k,
- KDF* kdf_obj,
- MessageAuthenticationCode* mac_obj,
- u32bit mac_kl) :
- key(k), kdf(kdf_obj), mac(mac_obj), mac_keylen(mac_kl)
- {
- }
-
-DLIES_Encryptor::~DLIES_Encryptor()
- {
- delete kdf;
- delete mac;
- }
-
-/*
-* DLIES Encryption
-*/
-SecureVector<byte> DLIES_Encryptor::enc(const byte in[], u32bit length,
- RandomNumberGenerator&) const
- {
- if(length > maximum_input_size())
- throw Invalid_Argument("DLIES: Plaintext too large");
- if(other_key.is_empty())
- throw Invalid_State("DLIES: The other key was never set");
-
- MemoryVector<byte> v = key.public_value();
-
- SecureVector<byte> out(v.size() + length + mac->OUTPUT_LENGTH);
- out.copy(v, v.size());
- out.copy(v.size(), in, length);
-
- SecureVector<byte> vz(v, key.derive_key(other_key, other_key.size()));
-
- const u32bit K_LENGTH = length + mac_keylen;
- OctetString K = kdf->derive_key(K_LENGTH, vz, vz.size());
- if(K.length() != K_LENGTH)
- throw Encoding_Error("DLIES: KDF did not provide sufficient output");
- byte* C = out + v.size();
-
- xor_buf(C, K.begin() + mac_keylen, length);
- mac->set_key(K.begin(), mac_keylen);
-
- mac->update(C, length);
- for(u32bit j = 0; j != 8; ++j)
- mac->update(0);
-
- mac->final(C + length);
-
- return out;
- }
-
-/*
-* Set the other parties public key
-*/
-void DLIES_Encryptor::set_other_key(const MemoryRegion<byte>& ok)
- {
- other_key = ok;
- }
-
-/*
-* Return the max size, in bytes, of a message
-*/
-u32bit DLIES_Encryptor::maximum_input_size() const
- {
- return 32;
- }
-
-/*
-* DLIES_Decryptor Constructor
-*/
-DLIES_Decryptor::DLIES_Decryptor(const PK_Key_Agreement_Key& k,
- KDF* kdf_obj,
- MessageAuthenticationCode* mac_obj,
- u32bit mac_kl) :
- key(k), kdf(kdf_obj), mac(mac_obj), mac_keylen(mac_kl)
- {
- }
-
-DLIES_Decryptor::~DLIES_Decryptor()
- {
- delete kdf;
- delete mac;
- }
-
-/*
-* DLIES Decryption
-*/
-SecureVector<byte> DLIES_Decryptor::dec(const byte msg[], u32bit length) const
- {
- const u32bit public_len = key.public_value().size();
-
- if(length < public_len + mac->OUTPUT_LENGTH)
- throw Decoding_Error("DLIES decryption: ciphertext is too short");
-
- const u32bit CIPHER_LEN = length - public_len - mac->OUTPUT_LENGTH;
-
- SecureVector<byte> v(msg, public_len);
- SecureVector<byte> C(msg + public_len, CIPHER_LEN);
- SecureVector<byte> T(msg + public_len + CIPHER_LEN, mac->OUTPUT_LENGTH);
-
- SecureVector<byte> vz(v, key.derive_key(v, v.size()));
-
- const u32bit K_LENGTH = C.size() + mac_keylen;
- OctetString K = kdf->derive_key(K_LENGTH, vz, vz.size());
- if(K.length() != K_LENGTH)
- throw Encoding_Error("DLIES: KDF did not provide sufficient output");
-
- mac->set_key(K.begin(), mac_keylen);
- mac->update(C);
- for(u32bit j = 0; j != 8; ++j)
- mac->update(0);
- SecureVector<byte> T2 = mac->final();
- if(T != T2)
- throw Integrity_Failure("DLIES: message authentication failed");
-
- xor_buf(C, K.begin() + mac_keylen, C.size());
-
- return C;
- }
-
-}
diff --git a/botan/src/pubkey/dlies/dlies.h b/botan/src/pubkey/dlies/dlies.h
deleted file mode 100644
index 88a22b9..0000000
--- a/botan/src/pubkey/dlies/dlies.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-* DLIES
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_DLIES_H__
-#define BOTAN_DLIES_H__
-
-#include <botan/pubkey.h>
-#include <botan/mac.h>
-#include <botan/kdf.h>
-
-namespace Botan {
-
-/*
-* DLIES Encryption
-*/
-class BOTAN_DLL DLIES_Encryptor : public PK_Encryptor
- {
- public:
- DLIES_Encryptor(const PK_Key_Agreement_Key&,
- KDF* kdf,
- MessageAuthenticationCode* mac,
- u32bit mac_key_len = 20);
-
- ~DLIES_Encryptor();
-
- void set_other_key(const MemoryRegion<byte>&);
- private:
- SecureVector<byte> enc(const byte[], u32bit,
- RandomNumberGenerator&) const;
- u32bit maximum_input_size() const;
-
- const PK_Key_Agreement_Key& key;
- SecureVector<byte> other_key;
-
- KDF* kdf;
- MessageAuthenticationCode* mac;
- u32bit mac_keylen;
- };
-
-/*
-* DLIES Decryption
-*/
-class BOTAN_DLL DLIES_Decryptor : public PK_Decryptor
- {
- public:
- DLIES_Decryptor(const PK_Key_Agreement_Key&,
- KDF* kdf,
- MessageAuthenticationCode* mac,
- u32bit mac_key_len = 20);
-
- ~DLIES_Decryptor();
-
- private:
- SecureVector<byte> dec(const byte[], u32bit) const;
-
- const PK_Key_Agreement_Key& key;
-
- KDF* kdf;
- MessageAuthenticationCode* mac;
- u32bit mac_keylen;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/dlies/info.txt b/botan/src/pubkey/dlies/info.txt
deleted file mode 100644
index 5138aaf..0000000
--- a/botan/src/pubkey/dlies/info.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-realname "DLIES"
-
-define DLIES
-
-load_on auto
-
-<add>
-dlies.cpp
-dlies.h
-</add>
-
-<requires>
-kdf
-libstate
-mac
-</requires>
diff --git a/botan/src/pubkey/dsa/dsa.cpp b/botan/src/pubkey/dsa/dsa.cpp
deleted file mode 100644
index b0688ae..0000000
--- a/botan/src/pubkey/dsa/dsa.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-* DSA
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/dsa.h>
-#include <botan/numthry.h>
-#include <botan/keypair.h>
-#include <botan/look_pk.h>
-
-namespace Botan {
-
-/*
-* DSA_PublicKey Constructor
-*/
-DSA_PublicKey::DSA_PublicKey(const DL_Group& grp, const BigInt& y1)
- {
- group = grp;
- y = y1;
- X509_load_hook();
- }
-
-/*
-* Algorithm Specific X.509 Initialization Code
-*/
-void DSA_PublicKey::X509_load_hook()
- {
- core = DSA_Core(group, y);
- }
-
-/*
-* DSA Verification Function
-*/
-bool DSA_PublicKey::verify(const byte msg[], u32bit msg_len,
- const byte sig[], u32bit sig_len) const
- {
- return core.verify(msg, msg_len, sig, sig_len);
- }
-
-/*
-* Return the maximum input size in bits
-*/
-u32bit DSA_PublicKey::max_input_bits() const
- {
- return group_q().bits();
- }
-
-/*
-* Return the size of each portion of the sig
-*/
-u32bit DSA_PublicKey::message_part_size() const
- {
- return group_q().bytes();
- }
-
-/*
-* Create a DSA private key
-*/
-DSA_PrivateKey::DSA_PrivateKey(RandomNumberGenerator& rng,
- const DL_Group& grp,
- const BigInt& x_arg)
- {
- group = grp;
- x = x_arg;
-
- if(x == 0)
- {
- x = BigInt::random_integer(rng, 2, group_q() - 1);
- PKCS8_load_hook(rng, true);
- }
- else
- PKCS8_load_hook(rng, false);
- }
-
-/*
-* Algorithm Specific PKCS #8 Initialization Code
-*/
-void DSA_PrivateKey::PKCS8_load_hook(RandomNumberGenerator& rng,
- bool generated)
- {
- y = power_mod(group_g(), x, group_p());
- core = DSA_Core(group, y, x);
-
- if(generated)
- gen_check(rng);
- else
- load_check(rng);
- }
-
-/*
-* DSA Signature Operation
-*/
-SecureVector<byte> DSA_PrivateKey::sign(const byte in[], u32bit length,
- RandomNumberGenerator& rng) const
- {
- const BigInt& q = group_q();
-
- BigInt k;
- do
- k.randomize(rng, q.bits());
- while(k >= q);
-
- return core.sign(in, length, k);
- }
-
-/*
-* Check Private DSA Parameters
-*/
-bool DSA_PrivateKey::check_key(RandomNumberGenerator& rng, bool strong) const
- {
- if(!DL_Scheme_PrivateKey::check_key(rng, strong) || x >= group_q())
- return false;
-
- if(!strong)
- return true;
-
- try
- {
- KeyPair::check_key(rng,
- get_pk_signer(*this, "EMSA1(SHA-1)"),
- get_pk_verifier(*this, "EMSA1(SHA-1)")
- );
- }
- catch(Self_Test_Failure)
- {
- return false;
- }
-
- return true;
- }
-
-}
diff --git a/botan/src/pubkey/dsa/dsa.h b/botan/src/pubkey/dsa/dsa.h
deleted file mode 100644
index 4c9b708..0000000
--- a/botan/src/pubkey/dsa/dsa.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-* DSA
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_DSA_H__
-#define BOTAN_DSA_H__
-
-#include <botan/dl_algo.h>
-#include <botan/dsa_core.h>
-
-namespace Botan {
-
-/*
-* DSA Public Key
-*/
-class BOTAN_DLL DSA_PublicKey : public PK_Verifying_wo_MR_Key,
- public virtual DL_Scheme_PublicKey
- {
- public:
- std::string algo_name() const { return "DSA"; }
-
- DL_Group::Format group_format() const { return DL_Group::ANSI_X9_57; }
- u32bit message_parts() const { return 2; }
- u32bit message_part_size() const;
-
- bool verify(const byte[], u32bit, const byte[], u32bit) const;
- u32bit max_input_bits() const;
-
- DSA_PublicKey() {}
- DSA_PublicKey(const DL_Group&, const BigInt&);
- protected:
- DSA_Core core;
- private:
- void X509_load_hook();
- };
-
-/*
-* DSA Private Key
-*/
-class BOTAN_DLL DSA_PrivateKey : public DSA_PublicKey,
- public PK_Signing_Key,
- public virtual DL_Scheme_PrivateKey
- {
- public:
- SecureVector<byte> sign(const byte[], u32bit,
- RandomNumberGenerator& rng) const;
-
- bool check_key(RandomNumberGenerator& rng, bool) const;
-
- DSA_PrivateKey() {}
- DSA_PrivateKey(RandomNumberGenerator&, const DL_Group&,
- const BigInt& = 0);
- private:
- void PKCS8_load_hook(RandomNumberGenerator& rng, bool = false);
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/dsa/dsa_core.cpp b/botan/src/pubkey/dsa/dsa_core.cpp
deleted file mode 100644
index e5a23a5..0000000
--- a/botan/src/pubkey/dsa/dsa_core.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-* DSA Core
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/dsa_core.h>
-#include <botan/numthry.h>
-#include <botan/pk_engine.h>
-#include <botan/parsing.h>
-#include <algorithm>
-
-namespace Botan {
-
-/*
-* DSA_Core Constructor
-*/
-DSA_Core::DSA_Core(const DL_Group& group, const BigInt& y, const BigInt& x)
- {
- op = Engine_Core::dsa_op(group, y, x);
- }
-
-/*
-* DSA_Core Copy Constructor
-*/
-DSA_Core::DSA_Core(const DSA_Core& core)
- {
- op = 0;
- if(core.op)
- op = core.op->clone();
- }
-
-/*
-* DSA_Core Assignment Operator
-*/
-DSA_Core& DSA_Core::operator=(const DSA_Core& core)
- {
- delete op;
- if(core.op)
- op = core.op->clone();
- return (*this);
- }
-
-/*
-* DSA Verification Operation
-*/
-bool DSA_Core::verify(const byte msg[], u32bit msg_length,
- const byte sig[], u32bit sig_length) const
- {
- return op->verify(msg, msg_length, sig, sig_length);
- }
-
-/*
-* DSA Signature Operation
-*/
-SecureVector<byte> DSA_Core::sign(const byte in[], u32bit length,
- const BigInt& k) const
- {
- return op->sign(in, length, k);
- }
-
-}
diff --git a/botan/src/pubkey/dsa/dsa_core.h b/botan/src/pubkey/dsa/dsa_core.h
deleted file mode 100644
index 8bb1621..0000000
--- a/botan/src/pubkey/dsa/dsa_core.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-* DSA Core
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_DSA_CORE_H__
-#define BOTAN_DSA_CORE_H__
-
-#include <botan/dsa_op.h>
-#include <botan/dl_group.h>
-
-namespace Botan {
-
-/*
-* DSA Core
-*/
-class BOTAN_DLL DSA_Core
- {
- public:
- SecureVector<byte> sign(const byte[], u32bit, const BigInt&) const;
- bool verify(const byte[], u32bit, const byte[], u32bit) const;
-
- DSA_Core& operator=(const DSA_Core&);
-
- DSA_Core() { op = 0; }
- DSA_Core(const DSA_Core&);
- DSA_Core(const DL_Group&, const BigInt&, const BigInt& = 0);
- ~DSA_Core() { delete op; }
- private:
- DSA_Operation* op;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/dsa/dsa_op.cpp b/botan/src/pubkey/dsa/dsa_op.cpp
deleted file mode 100644
index 5b92144..0000000
--- a/botan/src/pubkey/dsa/dsa_op.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-* DSA Operations
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/dsa_op.h>
-
-namespace Botan {
-
-/*
-* Default_DSA_Op Constructor
-*/
-Default_DSA_Op::Default_DSA_Op(const DL_Group& grp, const BigInt& y1,
- const BigInt& x1) : x(x1), y(y1), group(grp)
- {
- powermod_g_p = Fixed_Base_Power_Mod(group.get_g(), group.get_p());
- powermod_y_p = Fixed_Base_Power_Mod(y, group.get_p());
- mod_p = Modular_Reducer(group.get_p());
- mod_q = Modular_Reducer(group.get_q());
- }
-
-/*
-* Default DSA Verify Operation
-*/
-bool Default_DSA_Op::verify(const byte msg[], u32bit msg_len,
- const byte sig[], u32bit sig_len) const
- {
- const BigInt& q = group.get_q();
-
- if(sig_len != 2*q.bytes() || msg_len > q.bytes())
- return false;
-
- BigInt r(sig, q.bytes());
- BigInt s(sig + q.bytes(), q.bytes());
- BigInt i(msg, msg_len);
-
- if(r <= 0 || r >= q || s <= 0 || s >= q)
- return false;
-
- s = inverse_mod(s, q);
- s = mod_p.multiply(powermod_g_p(mod_q.multiply(s, i)),
- powermod_y_p(mod_q.multiply(s, r)));
-
- return (mod_q.reduce(s) == r);
- }
-
-/*
-* Default DSA Sign Operation
-*/
-SecureVector<byte> Default_DSA_Op::sign(const byte in[], u32bit length,
- const BigInt& k) const
- {
- if(x == 0)
- throw Internal_Error("Default_DSA_Op::sign: No private key");
-
- const BigInt& q = group.get_q();
- BigInt i(in, length);
-
- BigInt r = mod_q.reduce(powermod_g_p(k));
- BigInt s = mod_q.multiply(inverse_mod(k, q), mul_add(x, r, i));
-
- if(r.is_zero() || s.is_zero())
- throw Internal_Error("Default_DSA_Op::sign: r or s was zero");
-
- SecureVector<byte> output(2*q.bytes());
- r.binary_encode(output + (output.size() / 2 - r.bytes()));
- s.binary_encode(output + (output.size() - s.bytes()));
- return output;
- }
-
-}
diff --git a/botan/src/pubkey/dsa/dsa_op.h b/botan/src/pubkey/dsa/dsa_op.h
deleted file mode 100644
index 0b112c6..0000000
--- a/botan/src/pubkey/dsa/dsa_op.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-* DSA Operations
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_DSA_OPS_H__
-#define BOTAN_DSA_OPS_H__
-
-#include <botan/numthry.h>
-#include <botan/pow_mod.h>
-#include <botan/reducer.h>
-#include <botan/dl_group.h>
-
-namespace Botan {
-
-/*
-* DSA Operation
-*/
-class BOTAN_DLL DSA_Operation
- {
- public:
- virtual bool verify(const byte[], u32bit,
- const byte[], u32bit) const = 0;
- virtual SecureVector<byte> sign(const byte[], u32bit,
- const BigInt&) const = 0;
- virtual DSA_Operation* clone() const = 0;
- virtual ~DSA_Operation() {}
- };
-
-/*
-* Botan's Default DSA Operation
-*/
-class BOTAN_DLL Default_DSA_Op : public DSA_Operation
- {
- public:
- bool verify(const byte[], u32bit, const byte[], u32bit) const;
- SecureVector<byte> sign(const byte[], u32bit, const BigInt&) const;
-
- DSA_Operation* clone() const { return new Default_DSA_Op(*this); }
-
- Default_DSA_Op(const DL_Group&, const BigInt&, const BigInt&);
- private:
- const BigInt x, y;
- const DL_Group group;
- Fixed_Base_Power_Mod powermod_g_p, powermod_y_p;
- Modular_Reducer mod_p, mod_q;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/dsa/info.txt b/botan/src/pubkey/dsa/info.txt
deleted file mode 100644
index c70e02d..0000000
--- a/botan/src/pubkey/dsa/info.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-realname "DSA"
-
-define DSA
-
-load_on auto
-
-<add>
-dsa.cpp
-dsa.h
-dsa_core.cpp
-dsa_core.h
-dsa_op.cpp
-dsa_op.h
-</add>
-
-<requires>
-dl_algo
-dl_group
-keypair
-libstate
-numbertheory
-</requires>
diff --git a/botan/src/pubkey/ec_dompar/ec_dompar.cpp b/botan/src/pubkey/ec_dompar/ec_dompar.cpp
deleted file mode 100644
index 6cfcc06..0000000
--- a/botan/src/pubkey/ec_dompar/ec_dompar.cpp
+++ /dev/null
@@ -1,573 +0,0 @@
-
-#include <botan/ec_dompar.h>
-#include <botan/pubkey_enums.h>
-#include <botan/parsing.h>
-#include <botan/hex.h>
-#include <botan/pipe.h>
-
-namespace Botan {
-
-namespace {
-
-std::vector<std::string> get_standard_domain_parameter(const std::string& oid)
- {
- // using a linear search here is pretty nasty... revisit
-
- /* SEC2 */
-
- if(oid == "1.3.132.0.6")
- {
- /* secp112r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xdb7c2abf62e35e668076bead208b"); //p
- dom_par.push_back("0xDB7C2ABF62E35E668076BEAD2088"); // a
- dom_par.push_back("0x659EF8BA043916EEDE8911702B22"); // b
- dom_par.push_back("0409487239995A5EE76B55F9C2F098A89CE5AF8724C0A23E0E0ff77500"); // G
- dom_par.push_back("0xDB7C2ABF62E35E7628DFAC6561C5"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.7")
- {
- /* secp112r2; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xdb7c2abf62e35e668076bead208b"); //p
- dom_par.push_back("0x6127C24C05F38A0AAAF65C0EF02C"); // a
- dom_par.push_back("0x51DEF1815DB5ED74FCC34C85D709"); // b
- dom_par.push_back("044BA30AB5E892B4E1649DD0928643ADCD46F5882E3747DEF36E956E97"); // G
- dom_par.push_back("0x36DF0AAFD8B8D7597CA10520D04B"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.28")
- {
- /* secp128r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffdffffffffffffffffffffffff"); //p
- dom_par.push_back("0xffffffFDffffffffffffffffffffffFC"); // a
- dom_par.push_back("0xE87579C11079F43DD824993C2CEE5ED3"); // b
- dom_par.push_back("04161ff7528B899B2D0C28607CA52C5B86CF5AC8395BAFEB13C02DA292DDED7A83"); // G
- dom_par.push_back("0xffffffFE0000000075A30D1B9038A115"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.29")
- {
- /* secp128r2; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffdffffffffffffffffffffffff"); //p
- dom_par.push_back("0xD6031998D1B3BBFEBF59CC9BBff9AEE1"); // a
- dom_par.push_back("0x5EEEFCA380D02919DC2C6558BB6D8A5D"); // b
- dom_par.push_back("047B6AA5D85E572983E6FB32A7CDEBC14027B6916A894D3AEE7106FE805FC34B44"); // G
- dom_par.push_back("0x3ffffffF7ffffffFBE0024720613B5A3"); // order
- dom_par.push_back("4"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.9")
- {
- /* secp160k1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffffffffffffffffffffffffffeffffac73"); //p
- dom_par.push_back("0x0000000000000000000000000000000000000000"); // a
- dom_par.push_back("0x0000000000000000000000000000000000000007"); // b
- dom_par.push_back("043B4C382CE37AA192A4019E763036F4F5DD4D7EBB938CF935318FDCED6BC28286531733C3F03C4FEE"); // G
- dom_par.push_back("0x0100000000000000000001B8FA16DFAB9ACA16B6B3"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.30")
- {
- /* secp160r2; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffffffffffffffffffffffffffeffffac73"); //p
- dom_par.push_back("0xffffffffffffffffffffffffffffffFEffffAC70"); // a
- dom_par.push_back("0xB4E134D3FB59EB8BAB57274904664D5AF50388BA"); // b
- dom_par.push_back("0452DCB034293A117E1F4ff11B30F7199D3144CE6DFEAffEF2E331F296E071FA0DF9982CFEA7D43F2E"); // G
- dom_par.push_back("0x0100000000000000000000351EE786A818F3A1A16B"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.31")
- {
- /* secp192k1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffffffffffffffffffffffffffffffffffeffffee37"); //p
- dom_par.push_back("0x000000000000000000000000000000000000000000000000"); // a
- dom_par.push_back("0x000000000000000000000000000000000000000000000003"); // b
- dom_par.push_back("04DB4ff10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D"); // G
- dom_par.push_back("0xffffffffffffffffffffffFE26F2FC170F69466A74DEFD8D"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.32")
- {
- /* secp224k1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffffffffffffffffffffffffffffffffffffffffffeffffe56d"); //p
- dom_par.push_back("0x00000000000000000000000000000000000000000000000000000000"); // a
- dom_par.push_back("0x00000000000000000000000000000000000000000000000000000005"); // b
- dom_par.push_back("04A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5"); // G
- dom_par.push_back("0x010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.33")
- {
- /* secp224r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xffffffffffffffffffffffffffffffff000000000000000000000001"); //p
- dom_par.push_back("0xffffffffffffffffffffffffffffffFEffffffffffffffffffffffFE"); // a
- dom_par.push_back("0xB4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355ffB4"); // b
- dom_par.push_back("04B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34"); // G
- dom_par.push_back("0xffffffffffffffffffffffffffff16A2E0B8F03E13DD29455C5C2A3D"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.10")
- {
- /* secp256k1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"); //p
- dom_par.push_back("0x0000000000000000000000000000000000000000000000000000000000000000"); // a
- dom_par.push_back("0x0000000000000000000000000000000000000000000000000000000000000007"); // b
- dom_par.push_back("0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8"); // G
- dom_par.push_back("0xffffffffffffffffffffffffffffffFEBAAEDCE6AF48A03BBFD25E8CD0364141"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.34")
- {
- /* secp384r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff"); //p
- dom_par.push_back("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFEffffffff0000000000000000ffffffFC"); // a
- dom_par.push_back("0xB3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF"); // b
- dom_par.push_back("04AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB73617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F"); // G
- dom_par.push_back("0xffffffffffffffffffffffffffffffffffffffffffffffffC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.35")
- {
- /* secp521r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0x01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); //p
- dom_par.push_back("0x01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFC"); // a
- dom_par.push_back("0x0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00"); // b
- dom_par.push_back("0400C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2ffA8DE3348B3C1856A429BF97E7E31C2E5BD66011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650"); // G
- dom_par.push_back("0x01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- /* NIS */
-
- if(oid == "1.3.6.1.4.1.8301.3.1.2.9.0.38")
- {
- /* NIST curve P-521; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); //p
- dom_par.push_back("0x01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFC"); // a
- dom_par.push_back("0x051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00"); // b
- dom_par.push_back("0400C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2ffA8DE3348B3C1856A429BF97E7E31C2E5BD66011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650"); // G
- dom_par.push_back("0x01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- /* BrainPool */
-
- if(oid == "1.3.36.3.3.2.8.1.1.1")
- {
- /* brainpoolP160r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xE95E4A5F737059DC60DFC7AD95B3D8139515620F"); //p
- dom_par.push_back("0x340E7BE2A280EB74E2BE61BADA745D97E8F7C300"); // a
- dom_par.push_back("0x1E589A8595423412134FAA2DBDEC95C8D8675E58"); // b
- dom_par.push_back("04BED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC31667CB477A1A8EC338F94741669C976316DA6321"); // G
- dom_par.push_back("0xE95E4A5F737059DC60DF5991D45029409E60FC09"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.36.3.3.2.8.1.1.3")
- {
- /* brainpoolP192r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xC302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297"); //p
- dom_par.push_back("0x6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EF"); // a
- dom_par.push_back("0x469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9"); // b
- dom_par.push_back("04C0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD614B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8F"); // G
- dom_par.push_back("0xC302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.36.3.3.2.8.1.1.5")
- {
- /* brainpoolP224r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF"); //p
- dom_par.push_back("0x68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43"); // a
- dom_par.push_back("0x2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B"); // b
- dom_par.push_back("040D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD"); // G
- dom_par.push_back("0xD7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.36.3.3.2.8.1.1.7")
- {
- /* brainpoolP256r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xA9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377"); //p
- dom_par.push_back("0x7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9"); // a
- dom_par.push_back("0x26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6"); // b
- dom_par.push_back("048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997"); // G
- dom_par.push_back("0xA9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.36.3.3.2.8.1.1.9")
- {
- /* brainpoolP320r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xD35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27"); //p
- dom_par.push_back("0x3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375A97D860EB4"); // a
- dom_par.push_back("0x520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4AC8FB1F1A6"); // b
- dom_par.push_back("0443BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C710AF8D0D39E2061114FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7D35245D1692E8EE1"); // G
- dom_par.push_back("0xD35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.36.3.3.2.8.1.1.11")
- {
- /* brainpoolP384r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53"); //p
- dom_par.push_back("0x7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503AD4EB04A8C7DD22CE2826"); // a
- dom_par.push_back("0x4A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DBC9943AB78696FA504C11"); // b
- dom_par.push_back("041D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315"); // G
- dom_par.push_back("0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.36.3.3.2.8.1.1.13")
- {
- /* brainpoolP512r1; source: Flexiprovider */
- std::vector<std::string> dom_par;
- dom_par.push_back("0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3"); //p
- dom_par.push_back("0x7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA"); // a
- dom_par.push_back("0x3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723"); // b
- dom_par.push_back("0481AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F8227DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892"); // G
- dom_par.push_back("0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069"); // order
- dom_par.push_back("1"); // cofactor
-
- return dom_par;
- }
-
- if(oid == "1.3.132.0.8")
- {
- std::vector<std::string> dom_par;
- dom_par.push_back("0xffffffffffffffffffffffffffffffff7fffffff"); //p
- dom_par.push_back("0xffffffffffffffffffffffffffffffff7ffffffc"); // a
- dom_par.push_back("0x1c97befc54bd7a8b65acf89f81d4d4adc565fa45"); // b
- dom_par.push_back("024a96b5688ef573284664698968c38bb913cbfc82"); // G
- dom_par.push_back("0x0100000000000000000001f4c8f927aed3ca752257"); // order
- dom_par.push_back("1"); // cofactor
- return dom_par;
- }
-
- if(oid == "1.2.840.10045.3.1.1") // prime192v1 Flexiprovider
- {
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffffffffffffffffffffffffffeffffffffffffffff"); //p
- dom_par.push_back("0xfffffffffffffffffffffffffffffffefffffffffffffffc"); // a
- dom_par.push_back("0x64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1"); // b
- dom_par.push_back("03188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012"); // G
- dom_par.push_back("0xffffffffffffffffffffffff99def836146bc9b1b4d22831"); // order
- dom_par.push_back("1"); // cofactor
- return dom_par;
- }
-
- /* prime192v2; source: Flexiprovider */
- if(oid == "1.2.840.10045.3.1.2")
- {
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffffffffffffffffffffffffffeffffffffffffffff"); //p
- dom_par.push_back("0xffffffffffffffffffffffffffffffFeffffffffffffffFC"); // a
- dom_par.push_back("0xcc22d6dfb95c6b25e49c0d6364a4e5980c393aa21668d953"); // b
- dom_par.push_back("03eea2bae7e1497842f2de7769cfe9c989c072ad696f48034a"); // G
- dom_par.push_back("0xfffffffffffffffffffffffe5fb1a724dc80418648d8dd31"); // order
- dom_par.push_back("1"); // cofactor
- return dom_par;
- }
-
- /* prime192v3; source: Flexiprovider */
- if(oid == "1.2.840.10045.3.1.3")
- {
- std::vector<std::string> dom_par;
- dom_par.push_back("0xfffffffffffffffffffffffffffffffeffffffffffffffff"); //p
- dom_par.push_back("0xfffffffffffffffffffffffffffffffefffffffffffffffc"); // a
- dom_par.push_back("0x22123dc2395a05caa7423daeccc94760a7d462256bd56916"); // b
- dom_par.push_back("027d29778100c65a1da1783716588dce2b8b4aee8e228f1896"); // G
- dom_par.push_back("0xffffffffffffffffffffffff7a62d031c83f4294f640ec13"); // order
- dom_par.push_back("1"); // cofactor
- return dom_par;
- }
-
- /* prime239v1; source: Flexiprovider */
- if(oid == "1.2.840.10045.3.1.4")
- {
- std::vector<std::string> dom_par;
- dom_par.push_back("0x7fffffffffffffffffffffff7fffffffffff8000000000007fffffffffff"); //p
- dom_par.push_back("0x7ffFffffffffffffffffffff7fffffffffff8000000000007ffffffffffc"); // a
- dom_par.push_back("0x6B016C3BDCF18941D0D654921475CA71A9DB2FB27D1D37796185C2942C0A"); // b
- dom_par.push_back("020ffA963CDCA8816CCC33B8642BEDF905C3D358573D3F27FBBD3B3CB9AAAF"); // G
- dom_par.push_back("0x7fffffffffffffffffffffff7fffff9e5e9a9f5d9071fbd1522688909d0b"); // order
- dom_par.push_back("1"); // cofactor
- return dom_par;
- }
-
- /* prime239v2; source: Flexiprovider */
- if(oid == "1.2.840.10045.3.1.5")
- {
- std::vector<std::string> dom_par;
- dom_par.push_back("0x7fffffffffffffffffffffff7fffffffffff8000000000007fffffffffff"); //p
- dom_par.push_back("0x7ffFffffffffffffffffffff7ffFffffffff8000000000007ffFffffffFC"); // a
- dom_par.push_back("0x617FAB6832576CBBFED50D99F0249C3FEE58B94BA0038C7AE84C8C832F2C"); // b
- dom_par.push_back("0238AF09D98727705120C921BB5E9E26296A3CDCF2F35757A0EAFD87B830E7"); // G
- dom_par.push_back("0x7fffffffffffffffffffffff800000CFA7E8594377D414C03821BC582063"); // order
- dom_par.push_back("1"); // cofactor
- return dom_par;
- }
-
- /* prime239v3; source: Flexiprovider */
- if(oid == "1.2.840.10045.3.1.6")
- {
- std::vector<std::string> dom_par;
- dom_par.push_back("0x7fffffffffffffffffffffff7fffffffffff8000000000007fffffffffff"); //p
- dom_par.push_back("0x7ffFffffffffffffffffffff7ffFffffffff8000000000007ffFffffffFC"); // a
- dom_par.push_back("0x255705FA2A306654B1F4CB03D6A750A30C250102D4988717D9BA15AB6D3E"); // b
- dom_par.push_back("036768AE8E18BB92CFCF005C949AA2C6D94853D0E660BBF854B1C9505FE95A"); // G
- dom_par.push_back("0x7fffffffffffffffffffffff7fffff975DEB41B3A6057C3C432146526551"); // order
- dom_par.push_back("1"); // cofactor
- return dom_par;
- }
-
- /* prime256v1; source: Flexiprovider */
- if(oid == "1.2.840.10045.3.1.7")
- {
- std::vector<std::string> dom_par;
- dom_par.push_back("0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff"); //p
- dom_par.push_back("0xffffffff00000001000000000000000000000000ffffffffffffffffffffffFC"); // a
- dom_par.push_back("0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"); // b
- dom_par.push_back("036B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296"); // G
- dom_par.push_back("0xffffffff00000000ffffffffffffffffBCE6FAADA7179E84F3B9CAC2FC632551"); // order
- dom_par.push_back("1"); // cofactor
- return dom_par;
- }
-
- throw Invalid_Argument("No such ECC curve " + oid);
- }
-
-EC_Domain_Params get_ec_dompar(const std::string& oid)
- {
- std::vector<std::string> dom_par = get_standard_domain_parameter(oid);
-
- BigInt p(dom_par[0]); // give as 0x...
- GFpElement a(p, BigInt(dom_par[1]));
- GFpElement b(p, BigInt(dom_par[2]));
-
- Pipe pipe(new Hex_Decoder);
- pipe.process_msg(dom_par[3]);
- SecureVector<byte> sv_g = pipe.read_all();
-
- CurveGFp curve(a, b, p);
- PointGFp G = OS2ECP ( sv_g, curve );
- G.check_invariants();
- BigInt order(dom_par[4]);
- BigInt cofactor(dom_par[5]);
- EC_Domain_Params result(curve, G, order, cofactor);
- return result;
- }
-
-}
-
-EC_Domain_Params get_EC_Dom_Pars_by_oid(std::string oid)
- {
- EC_Domain_Params result = get_ec_dompar(oid);
- result.m_oid = oid;
- return result;
- }
-
-EC_Domain_Params::EC_Domain_Params(const CurveGFp& curve, const PointGFp& base_point,
- const BigInt& order, const BigInt& cofactor)
- : m_curve(curve),
- m_base_point(base_point),
- m_order(order),
- m_cofactor(cofactor),
- m_oid("")
- { }
-
-namespace {
-
-SecureVector<byte> encode_der_ec_dompar_explicit(EC_Domain_Params const& dom_pars)
- {
- u32bit ecpVers1 = 1;
- OID curve_type_oid("1.2.840.10045.1.1");
-
- DER_Encoder der;
-
- der.start_cons(SEQUENCE)
- .encode(ecpVers1)
- .start_cons(SEQUENCE)
- .encode(curve_type_oid)
- .encode(dom_pars.get_curve().get_p())
- .end_cons()
- .start_cons(SEQUENCE)
- .encode(FE2OSP ( dom_pars.get_curve().get_a() ), OCTET_STRING)
- .encode(FE2OSP ( dom_pars.get_curve().get_b() ), OCTET_STRING)
- .end_cons()
- .encode(EC2OSP ( dom_pars.get_base_point(), PointGFp::UNCOMPRESSED), OCTET_STRING)
- .encode(dom_pars.get_order())
- .encode(dom_pars.get_cofactor())
- .end_cons();
-
- return der.get_contents();
- }
-
-EC_Domain_Params decode_ber_ec_dompar_explicit(SecureVector<byte> const& encoded)
- {
- BigInt ecpVers1(1);
- OID curve_type_oid;
- SecureVector<byte> sv_a;
- SecureVector<byte> sv_b;
- BigInt p;
- SecureVector<byte> sv_base_point;
- BigInt order;
- BigInt cofactor;
- BER_Decoder dec(encoded);
- dec
- .start_cons(SEQUENCE)
- .decode(ecpVers1)
- .start_cons(SEQUENCE)
- .decode(curve_type_oid)
- .decode(p)
- .end_cons()
- .start_cons(SEQUENCE)
- .decode(sv_a, OCTET_STRING)
- .decode(sv_b, OCTET_STRING)
- .end_cons()
- .decode(sv_base_point, OCTET_STRING)
- .decode(order)
- .decode(cofactor)
- .verify_end()
- .end_cons();
- if(ecpVers1 != 1)
- {
- throw Decoding_Error("wrong ecpVers");
- }
- // Set the domain parameters
- if(curve_type_oid.as_string() != "1.2.840.10045.1.1") // NOTE: hardcoded: prime field type
- {
- throw Decoding_Error("wrong curve type oid where prime field was expected");
- }
- GFpElement a(p,BigInt::decode(sv_a, sv_a.size()));
- GFpElement b(p,BigInt::decode(sv_b, sv_b.size()));
- CurveGFp curve(a,b,p);
- PointGFp G = OS2ECP ( sv_base_point, curve );
- G.check_invariants();
- return EC_Domain_Params(curve, G, order, cofactor);
- }
-
-} // end anonymous namespace
-
-SecureVector<byte> encode_der_ec_dompar(EC_Domain_Params const& dom_pars, EC_dompar_enc enc_type)
- {
- SecureVector<byte> result;
-
- if(enc_type == ENC_EXPLICIT)
- {
- result = encode_der_ec_dompar_explicit(dom_pars);
- }
- else if(enc_type == ENC_OID)
- {
- OID dom_par_oid(dom_pars.get_oid());
- result = DER_Encoder().encode(dom_par_oid).get_contents();
- }
- else if(enc_type == ENC_IMPLICITCA)
- {
- result = DER_Encoder().encode_null().get_contents();
- }
- else
- {
- throw Internal_Error("encountered illegal value for ec parameter encoding type");
- }
- return result;
- }
-
-EC_Domain_Params decode_ber_ec_dompar(SecureVector<byte> const& encoded)
- {
- BER_Decoder dec(encoded);
- BER_Object obj = dec.get_next_object();
- ASN1_Tag tag = obj.type_tag;
- std::auto_ptr<EC_Domain_Params> p_result;
-
- if(tag == OBJECT_ID)
- {
- OID dom_par_oid;
- BER_Decoder(encoded).decode(dom_par_oid);
- return EC_Domain_Params(get_ec_dompar(dom_par_oid.as_string()));
- }
- else if(tag == SEQUENCE)
- return EC_Domain_Params(decode_ber_ec_dompar_explicit(encoded));
- else if(tag == NULL_TAG)
- throw Decoding_Error("cannot decode ECDSA parameters that are ImplicitCA");
-
- throw Decoding_Error("encountered unexpected when trying to decode domain parameters");
- }
-
-bool operator==(EC_Domain_Params const& lhs, EC_Domain_Params const& rhs)
- {
- return ((lhs.get_curve() == rhs.get_curve()) &&
- (lhs.get_base_point() == rhs.get_base_point()) &&
- (lhs.get_order() == rhs.get_order()) &&
- (lhs.get_cofactor() == rhs.get_cofactor()));
- }
-
-}
-
diff --git a/botan/src/pubkey/ec_dompar/ec_dompar.h b/botan/src/pubkey/ec_dompar/ec_dompar.h
deleted file mode 100644
index 47971d8..0000000
--- a/botan/src/pubkey/ec_dompar/ec_dompar.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-* ECDSA Domain Parameters
-* (C) 2007 Falko Strenzke, FlexSecure GmbH
-* 2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ECC_DOMAIN_PARAMETERS_H__
-#define BOTAN_ECC_DOMAIN_PARAMETERS_H__
-
-#include <botan/point_gfp.h>
-#include <botan/gfp_element.h>
-#include <botan/curve_gfp.h>
-#include <botan/bigint.h>
-#include <botan/der_enc.h>
-#include <botan/ber_dec.h>
-#include <botan/alg_id.h>
-#include <botan/pubkey_enums.h>
-
-namespace Botan {
-
-/**
-* This class represents elliptic curce domain parameters
-*/
-class BOTAN_DLL EC_Domain_Params
- {
- public:
-
- /**
- * Construct Domain paramers from specified parameters
- * @param curve elliptic curve
- * @param base_point a base point
- * @param order the order of the base point
- * @param cofactor the cofactor
- */
- EC_Domain_Params(const CurveGFp& curve,
- const PointGFp& base_point,
- const BigInt& order,
- const BigInt& cofactor);
-
- /**
- * Return domain parameter curve
- * @result domain parameter curve
- */
- const CurveGFp& get_curve() const
- {
- return m_curve;
- }
-
- /**
- * Return domain parameter curve
- * @result domain parameter curve
- */
- const PointGFp& get_base_point() const
- {
- return m_base_point;
- }
-
- /**
- * Return the order of the base point
- * @result order of the base point
- */
- const BigInt& get_order() const
- {
- return m_order;
- }
-
- /**
- * Return the cofactor
- * @result the cofactor
- */
- const BigInt& get_cofactor() const
- {
- return m_cofactor;
- }
-
- /**
- * Return the OID of these domain parameters
- * @result the OID
- */
- std::string get_oid() const { return m_oid; }
-
- private:
- friend EC_Domain_Params get_EC_Dom_Pars_by_oid(std::string oid);
-
- CurveGFp m_curve;
- PointGFp m_base_point;
- BigInt m_order;
- BigInt m_cofactor;
- std::string m_oid;
- };
-
-bool operator==(EC_Domain_Params const& lhs, EC_Domain_Params const& rhs);
-
-inline bool operator!=(const EC_Domain_Params& lhs,
- const EC_Domain_Params& rhs)
- {
- return !(lhs == rhs);
- }
-
-enum EC_dompar_enc { ENC_EXPLICIT = 0, ENC_IMPLICITCA = 1, ENC_OID = 2 };
-
-SecureVector<byte> encode_der_ec_dompar(EC_Domain_Params const& dom_pars,
- EC_dompar_enc enc_type);
-
-EC_Domain_Params decode_ber_ec_dompar(SecureVector<byte> const& encoded);
-
-/**
-* Factory function, the only way to obtain EC domain parameters with
-* an OID. The demanded OID has to be registered in the InSiTo
-* configuration. Consult the file ec_dompar.cpp for the default
-* configuration.
-* @param oid the oid of the demanded EC domain parameters
-* @result the EC domain parameters associated with the OID
-*/
-EC_Domain_Params get_EC_Dom_Pars_by_oid(std::string oid);
-
-}
-
-#endif
diff --git a/botan/src/pubkey/ec_dompar/info.txt b/botan/src/pubkey/ec_dompar/info.txt
deleted file mode 100644
index 2127837..0000000
--- a/botan/src/pubkey/ec_dompar/info.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-realname "ECC Domain Parameters"
-
-define ECC_DOMAIN_PARAMATERS
-
-load_on auto
-
-<add>
-ec_dompar.cpp
-ec_dompar.h
-</add>
-
-<requires>
-asn1
-bigint
-filters
-gfpmath
-hex
-</requires>
diff --git a/botan/src/pubkey/ecc_key/ecc_key.cpp b/botan/src/pubkey/ecc_key/ecc_key.cpp
deleted file mode 100644
index 615efec..0000000
--- a/botan/src/pubkey/ecc_key/ecc_key.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
-* ECC Key implemenation
-* (C) 2007 Manuel Hartl, FlexSecure GmbH
-* Falko Strenzke, FlexSecure GmbH
-* 2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/ecc_key.h>
-#include <botan/x509_key.h>
-#include <botan/numthry.h>
-#include <botan/util.h>
-#include <botan/der_enc.h>
-#include <botan/ber_dec.h>
-#include <botan/secmem.h>
-#include <botan/point_gfp.h>
-
-namespace Botan {
-
-/*
-* EC_PublicKey
-*/
-void EC_PublicKey::affirm_init() const // virtual
- {
- if((mp_dom_pars.get() == 0) || (mp_public_point.get() == 0))
- throw Invalid_State("cannot use uninitialized EC_Key");
- }
-
-const EC_Domain_Params& EC_PublicKey::domain_parameters() const
- {
- if(!mp_dom_pars.get())
- throw Invalid_State("EC_PublicKey::domain_parameters(): "
- "ec domain parameters are not yet set");
-
- return *mp_dom_pars;
- }
-
-const PointGFp& EC_PublicKey::public_point() const
- {
- if(!mp_public_point.get())
- throw Invalid_State("EC_PublicKey::public_point(): public point not set");
-
- return *mp_public_point;
- }
-
-bool EC_PublicKey::domain_parameters_set()
- {
- return mp_dom_pars.get();
- }
-
-void EC_PublicKey::X509_load_hook()
- {
- try
- {
- // the base point is checked to be on curve already when decoding it
- affirm_init();
- mp_public_point->check_invariants();
- }
- catch(Illegal_Point)
- {
- throw Decoding_Error("decoded public point was found not to lie on curve");
- }
- }
-
-X509_Encoder* EC_PublicKey::x509_encoder() const
- {
- class EC_Key_Encoder : public X509_Encoder
- {
- public:
- AlgorithmIdentifier alg_id() const
- {
- key->affirm_init();
-
- SecureVector<byte> params =
- encode_der_ec_dompar(key->domain_parameters(), key->m_param_enc);
-
- return AlgorithmIdentifier(key->get_oid(), params);
- }
-
- MemoryVector<byte> key_bits() const
- {
- key->affirm_init();
- return EC2OSP(*(key->mp_public_point), PointGFp::COMPRESSED);
- }
-
- EC_Key_Encoder(const EC_PublicKey* k): key(k) {}
- private:
- const EC_PublicKey* key;
- };
-
- return new EC_Key_Encoder(this);
- }
-
-X509_Decoder* EC_PublicKey::x509_decoder()
- {
- class EC_Key_Decoder : public X509_Decoder
- {
- public:
- void alg_id(const AlgorithmIdentifier& alg_id)
- {
- key->mp_dom_pars.reset(new EC_Domain_Params(decode_ber_ec_dompar(alg_id.parameters)));
- }
-
- void key_bits(const MemoryRegion<byte>& bits)
- {
- key->mp_public_point.reset(
- new PointGFp(
- OS2ECP(bits, key->domain_parameters().get_curve())
- ));
-
- key->X509_load_hook();
- }
-
- EC_Key_Decoder(EC_PublicKey* k): key(k) {}
- private:
- EC_PublicKey* key;
- };
-
- return new EC_Key_Decoder(this);
- }
-
-void EC_PublicKey::set_parameter_encoding(EC_dompar_enc type)
- {
- if((type != ENC_EXPLICIT) && (type != ENC_IMPLICITCA) && (type != ENC_OID))
- throw Invalid_Argument("Invalid encoding type for EC-key object specified");
-
- affirm_init();
-
- if((type == ENC_OID) && (mp_dom_pars->get_oid() == ""))
- throw Invalid_Argument("Invalid encoding type ENC_OID specified for "
- "EC-key object whose corresponding domain "
- "parameters are without oid");
-
- m_param_enc = type;
- }
-
-/********************************
-* EC_PrivateKey
-********************************/
-void EC_PrivateKey::affirm_init() const // virtual
- {
- if(m_private_value == 0)
- throw Invalid_State("cannot use EC_PrivateKey when private key is uninitialized");
-
- EC_PublicKey::affirm_init();
- }
-
-const BigInt& EC_PrivateKey::private_value() const
- {
- if(m_private_value == 0)
- throw Invalid_State("cannot use EC_PrivateKey when private key is uninitialized");
-
- return m_private_value;
- }
-
-/**
-* EC_PrivateKey generator
-**/
-void EC_PrivateKey::generate_private_key(RandomNumberGenerator& rng)
- {
- if(mp_dom_pars.get() == 0)
- {
- throw Invalid_State("cannot generate private key when domain parameters are not set");
- }
-
- BigInt tmp_private_value(0);
- tmp_private_value = BigInt::random_integer(rng, 1, mp_dom_pars->get_order());
- mp_public_point = std::auto_ptr<PointGFp>( new PointGFp (mp_dom_pars->get_base_point()));
- mp_public_point->mult_this_secure(tmp_private_value,
- mp_dom_pars->get_order(),
- mp_dom_pars->get_order()-1);
-
- //assert(mp_public_point.get() != 0);
- tmp_private_value.swap(m_private_value);
- }
-
-/**
-* Return the PKCS #8 public key encoder
-**/
-PKCS8_Encoder* EC_PrivateKey::pkcs8_encoder() const
- {
- class EC_Key_Encoder : public PKCS8_Encoder
- {
- public:
- AlgorithmIdentifier alg_id() const
- {
- key->affirm_init();
-
- SecureVector<byte> params =
- encode_der_ec_dompar(key->domain_parameters(), ENC_EXPLICIT);
-
- return AlgorithmIdentifier(key->get_oid(), params);
- }
-
- MemoryVector<byte> key_bits() const
- {
- key->affirm_init();
- SecureVector<byte> octstr_secret =
- BigInt::encode_1363(key->m_private_value, key->m_private_value.bytes());
-
- return DER_Encoder()
- .start_cons(SEQUENCE)
- .encode(BigInt(1))
- .encode(octstr_secret, OCTET_STRING)
- .end_cons()
- .get_contents();
- }
-
- EC_Key_Encoder(const EC_PrivateKey* k): key(k) {}
- private:
- const EC_PrivateKey* key;
- };
-
- return new EC_Key_Encoder(this);
- }
-
-/**
-* Return the PKCS #8 public key decoder
-*/
-PKCS8_Decoder* EC_PrivateKey::pkcs8_decoder(RandomNumberGenerator&)
- {
- class EC_Key_Decoder : public PKCS8_Decoder
- {
- public:
- void alg_id(const AlgorithmIdentifier& alg_id)
- {
- key->mp_dom_pars.reset(new EC_Domain_Params(decode_ber_ec_dompar(alg_id.parameters)));
- }
-
- void key_bits(const MemoryRegion<byte>& bits)
- {
- u32bit version;
- SecureVector<byte> octstr_secret;
-
- BER_Decoder(bits)
- .start_cons(SEQUENCE)
- .decode(version)
- .decode(octstr_secret, OCTET_STRING)
- .verify_end()
- .end_cons();
-
- key->m_private_value = BigInt::decode(octstr_secret, octstr_secret.size());
-
- if(version != 1)
- throw Decoding_Error("Wrong PKCS #1 key format version for EC key");
-
- key->PKCS8_load_hook();
- }
-
- EC_Key_Decoder(EC_PrivateKey* k): key(k) {}
- private:
- EC_PrivateKey* key;
- };
-
- return new EC_Key_Decoder(this);
- }
-
-void EC_PrivateKey::PKCS8_load_hook(bool)
- {
- // we cannot use affirm_init() here because mp_public_point might still be null
- if(mp_dom_pars.get() == 0)
- throw Invalid_State("attempt to set public point for an uninitialized key");
-
- mp_public_point.reset(new PointGFp(m_private_value * mp_dom_pars->get_base_point()));
- mp_public_point->check_invariants();
- }
-
-}
diff --git a/botan/src/pubkey/ecc_key/ecc_key.h b/botan/src/pubkey/ecc_key/ecc_key.h
deleted file mode 100644
index 0ca9a0e..0000000
--- a/botan/src/pubkey/ecc_key/ecc_key.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-* ECDSA
-* (C) 2007 Falko Strenzke, FlexSecure GmbH
-* Manuel Hartl, FlexSecure GmbH
-* (C) 2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ECC_PUBLIC_KEY_BASE_H__
-#define BOTAN_ECC_PUBLIC_KEY_BASE_H__
-
-#include <botan/bigint.h>
-#include <botan/curve_gfp.h>
-#include <botan/pk_keys.h>
-#include <botan/ec_dompar.h>
-#include <botan/x509_key.h>
-#include <botan/pkcs8.h>
-
-namespace Botan {
-
-/**
-* This class represents abstract EC Public Keys. When encoding a key
-* via an encoder that can be accessed via the corresponding member
-* functions, the key will decide upon its internally stored encoding
-* information whether to encode itself with or without domain
-* parameters, or using the domain parameter oid. Furthermore, a public
-* key without domain parameters can be decoded. In that case, it
-* cannot be used for verification until its domain parameters are set
-* by calling the corresponding member function.
-*/
-class BOTAN_DLL EC_PublicKey : public virtual Public_Key
- {
- public:
-
- /**
- * Tells whether this key knows his own domain parameters.
- * @result true if the domain parameters are set, false otherwise
- */
- bool domain_parameters_set();
-
- /**
- * Get the public point of this key.
- * @throw Invalid_State is thrown if the
- * domain parameters of this point are not set
- * @result the public point of this key
- */
- const PointGFp& public_point() const;
-
- /**
- * Get the domain parameters of this key.
- * @throw Invalid_State is thrown if the
- * domain parameters of this point are not set
- * @result the domain parameters of this key
- */
- const EC_Domain_Params& domain_parameters() const;
-
- /**
- * Set the domain parameter encoding to be used when encoding this key.
- * @param enc the encoding to use
- */
- void set_parameter_encoding(EC_dompar_enc enc);
-
- /**
- * Get the domain parameter encoding to be used when encoding this key.
- * @result the encoding to use
- */
- inline int get_parameter_encoding() const
- {
- return m_param_enc;
- }
-
- //ctors
- EC_PublicKey()
- : m_param_enc(ENC_EXPLICIT)
- {
- //assert(mp_dom_pars.get() == 0);
- //assert(mp_public_point.get() == 0);
- }
-
- /**
- * Get an x509_encoder that can be used to encode this key.
- * @result an x509_encoder for this key
- */
- X509_Encoder* x509_encoder() const;
-
- /**
- * Get an x509_decoder that can be used to decode a stored key into
- * this key.
- * @result an x509_decoder for this key
- */
- X509_Decoder* x509_decoder();
-
- /**
- * Make sure that the public point and domain parameters of this key are set.
- * @throw Invalid_State if either of the two data members is not set
- */
- virtual void affirm_init() const;
-
- virtual ~EC_PublicKey() {}
- protected:
- virtual void X509_load_hook();
-
- SecureVector<byte> m_enc_public_point; // stores the public point
-
- std::auto_ptr<EC_Domain_Params> mp_dom_pars;
- std::auto_ptr<PointGFp> mp_public_point;
- EC_dompar_enc m_param_enc;
- };
-
-/**
-* This abstract class represents general EC Private Keys
-*/
-class BOTAN_DLL EC_PrivateKey : public virtual EC_PublicKey, public virtual Private_Key
- {
- public:
-
- /**
- * Get an PKCS#8 encoder that can be used to encoded this key.
- * @result an PKCS#8 encoder for this key
- */
- PKCS8_Encoder* pkcs8_encoder() const;
-
- /**
- * Get an PKCS#8 decoder that can be used to decoded a stored key into
- * this key.
- * @result an PKCS#8 decoder for this key
- */
- PKCS8_Decoder* pkcs8_decoder(RandomNumberGenerator&);
-
- /**
- * Get the private key value of this key object.
- * @result the private key value of this key object
- */
- const BigInt& private_value() const;
-
- /**
- * Make sure that the public key parts of this object are set
- * (calls EC_PublicKey::affirm_init()) as well as the private key
- * value.
- * @throw Invalid_State if the above conditions are not satisfied
- */
- virtual void affirm_init() const;
-
- virtual ~EC_PrivateKey() {}
- protected:
- virtual void PKCS8_load_hook(bool = false);
- void generate_private_key(RandomNumberGenerator&);
- BigInt m_private_value;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/ecc_key/info.txt b/botan/src/pubkey/ecc_key/info.txt
deleted file mode 100644
index 2a3c9a3..0000000
--- a/botan/src/pubkey/ecc_key/info.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-realname "ECC Public Key"
-
-define ECC_PUBLIC_KEY_CRYPTO
-
-load_on auto
-
-<add>
-ecc_key.cpp
-ecc_key.h
-</add>
-
-<requires>
-alloc
-asn1
-bigint
-ec_dompar
-gfpmath
-numbertheory
-pk_codecs
-</requires>
diff --git a/botan/src/pubkey/ecdsa/ecdsa.cpp b/botan/src/pubkey/ecdsa/ecdsa.cpp
deleted file mode 100644
index 9640c63..0000000
--- a/botan/src/pubkey/ecdsa/ecdsa.cpp
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
-* ECDSA implemenation
-* (C) 2007 Manuel Hartl, FlexSecure GmbH
-* 2007 Falko Strenzke, FlexSecure GmbH
-* 2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/ecdsa.h>
-#include <botan/numthry.h>
-#include <botan/util.h>
-#include <botan/der_enc.h>
-#include <botan/ber_dec.h>
-#include <botan/secmem.h>
-#include <botan/point_gfp.h>
-
-namespace Botan {
-
-ECDSA_PrivateKey::ECDSA_PrivateKey(RandomNumberGenerator& rng,
- const EC_Domain_Params& dom_pars)
- {
- mp_dom_pars = std::auto_ptr<EC_Domain_Params>(new EC_Domain_Params(dom_pars));
- generate_private_key(rng);
-
- try
- {
- mp_public_point->check_invariants();
- }
- catch(Illegal_Point& e)
- {
- throw Invalid_State("ECDSA key generation failed");
- }
-
- m_ecdsa_core = ECDSA_Core(*mp_dom_pars, m_private_value, *mp_public_point);
- }
-
-/*
-* ECDSA_PublicKey
-*/
-void ECDSA_PublicKey::affirm_init() const // virtual
- {
- EC_PublicKey::affirm_init();
- }
-
-void ECDSA_PublicKey::set_domain_parameters(const EC_Domain_Params& dom_pars)
- {
- if(mp_dom_pars.get())
- {
- // they are already set, we must ensure that they are equal to the arg
- if(dom_pars != *mp_dom_pars.get())
- throw Invalid_Argument("EC_PublicKey::set_domain_parameters - cannot reset to a new value");
-
- return;
- }
-
- if(m_enc_public_point.size() == 0)
- throw Invalid_State("EC_PublicKey::set_domain_parameters(): encoded public point isn't set");
-
- // now try to decode the public key ...
- PointGFp tmp_pp(OS2ECP(m_enc_public_point, dom_pars.get_curve()));
- try
- {
- tmp_pp.check_invariants();
- }
- catch(Illegal_Point e)
- {
- throw Invalid_State("EC_PublicKey::set_domain_parameters(): point does not lie on provided curve");
- }
-
- std::auto_ptr<EC_Domain_Params> p_tmp_pars(new EC_Domain_Params(dom_pars));
- ECDSA_Core tmp_ecdsa_core(*p_tmp_pars, BigInt(0), tmp_pp);
- mp_public_point.reset(new PointGFp(tmp_pp));
- m_ecdsa_core = tmp_ecdsa_core;
- mp_dom_pars = p_tmp_pars;
- }
-
-void ECDSA_PublicKey::set_all_values(const ECDSA_PublicKey& other)
- {
- m_param_enc = other.m_param_enc;
- m_ecdsa_core = other.m_ecdsa_core;
- m_enc_public_point = other.m_enc_public_point;
- if(other.mp_dom_pars.get())
- mp_dom_pars.reset(new EC_Domain_Params(other.domain_parameters()));
-
- if(other.mp_public_point.get())
- mp_public_point.reset(new PointGFp(other.public_point()));
- }
-
-ECDSA_PublicKey::ECDSA_PublicKey(const ECDSA_PublicKey& other)
- : Public_Key(),
- EC_PublicKey(),
- PK_Verifying_wo_MR_Key()
- {
- set_all_values(other);
- }
-
-const ECDSA_PublicKey& ECDSA_PublicKey::operator=(const ECDSA_PublicKey& rhs)
- {
- set_all_values(rhs);
- return *this;
- }
-
-bool ECDSA_PublicKey::verify(const byte message[],
- u32bit mess_len,
- const byte signature[],
- u32bit sig_len) const
- {
- affirm_init();
-
- BigInt r, s;
-
- BER_Decoder(signature, sig_len)
- .start_cons(SEQUENCE)
- .decode(r)
- .decode(s)
- .end_cons()
- .verify_end();
-
- u32bit enc_len = std::max(r.bytes(), s.bytes());
-
- SecureVector<byte> sv_plain_sig;
-
- sv_plain_sig.append(BigInt::encode_1363(r, enc_len));
- sv_plain_sig.append(BigInt::encode_1363(s, enc_len));
-
- return m_ecdsa_core.verify(sv_plain_sig, sv_plain_sig.size(),
- message, mess_len);
- }
-
-ECDSA_PublicKey::ECDSA_PublicKey(const EC_Domain_Params& dom_par,
- const PointGFp& public_point)
- {
- mp_dom_pars = std::auto_ptr<EC_Domain_Params>(new EC_Domain_Params(dom_par));
- mp_public_point = std::auto_ptr<PointGFp>(new PointGFp(public_point));
- m_param_enc = ENC_EXPLICIT;
- m_ecdsa_core = ECDSA_Core(*mp_dom_pars, BigInt(0), *mp_public_point);
- }
-
-void ECDSA_PublicKey::X509_load_hook()
- {
- EC_PublicKey::X509_load_hook();
- EC_PublicKey::affirm_init();
- m_ecdsa_core = ECDSA_Core ( *mp_dom_pars, BigInt ( 0 ), *mp_public_point );
- }
-
-u32bit ECDSA_PublicKey::max_input_bits() const
- {
- if(!mp_dom_pars.get())
- {
- throw Invalid_State("ECDSA_PublicKey::max_input_bits(): domain parameters not set");
- }
- return mp_dom_pars->get_order().bits();
- }
-
-/*************************
-* ECDSA_PrivateKey
-*************************/
-void ECDSA_PrivateKey::affirm_init() const // virtual
- {
- EC_PrivateKey::affirm_init();
- }
-
-void ECDSA_PrivateKey::PKCS8_load_hook(bool generated)
- {
- EC_PrivateKey::PKCS8_load_hook(generated);
- EC_PrivateKey::affirm_init();
- m_ecdsa_core = ECDSA_Core(*mp_dom_pars, m_private_value, *mp_public_point);
- }
-
-void ECDSA_PrivateKey::set_all_values(const ECDSA_PrivateKey& other)
- {
- m_private_value = other.m_private_value;
- m_param_enc = other.m_param_enc;
- m_ecdsa_core = other.m_ecdsa_core;
- m_enc_public_point = other.m_enc_public_point;
-
- if(other.mp_dom_pars.get())
- mp_dom_pars.reset(new EC_Domain_Params(other.domain_parameters()));
-
- if(other.mp_public_point.get())
- mp_public_point.reset(new PointGFp(other.public_point()));
- }
-
-ECDSA_PrivateKey::ECDSA_PrivateKey(ECDSA_PrivateKey const& other)
- : Public_Key(),
- EC_PublicKey(),
- Private_Key(),
- ECDSA_PublicKey(),
- EC_PrivateKey(),
- PK_Signing_Key()
- {
- set_all_values(other);
- }
-
-
-const ECDSA_PrivateKey& ECDSA_PrivateKey::operator=(const ECDSA_PrivateKey& rhs)
- {
- set_all_values(rhs);
- return *this;
- }
-
-SecureVector<byte> ECDSA_PrivateKey::sign(const byte message[],
- u32bit mess_len,
- RandomNumberGenerator& rng) const
- {
- affirm_init();
-
- SecureVector<byte> sv_sig = m_ecdsa_core.sign(message, mess_len, rng);
-
- if(sv_sig.size() % 2 != 0)
- throw Invalid_Argument("Erroneous length of signature");
-
- u32bit rs_len = sv_sig.size() / 2;
- SecureVector<byte> sv_r, sv_s;
- sv_r.set(sv_sig.begin(), rs_len);
- sv_s.set(&sv_sig[rs_len], rs_len);
-
- BigInt r = BigInt::decode(sv_r, sv_r.size());
- BigInt s = BigInt::decode(sv_s, sv_s.size());
-
- return DER_Encoder()
- .start_cons(SEQUENCE)
- .encode(r)
- .encode(s)
- .end_cons()
- .get_contents();
- }
-
-}
diff --git a/botan/src/pubkey/ecdsa/ecdsa.h b/botan/src/pubkey/ecdsa/ecdsa.h
deleted file mode 100644
index 3794457..0000000
--- a/botan/src/pubkey/ecdsa/ecdsa.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-* ECDSA
-* (C) 2007 Falko Strenzke, FlexSecure GmbH
-* Manuel Hartl, FlexSecure GmbH
-* (C) 2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ECDSA_KEY_H__
-#define BOTAN_ECDSA_KEY_H__
-
-#include <botan/ecc_key.h>
-#include <botan/ecdsa_core.h>
-
-namespace Botan {
-
-/**
-* This class represents ECDSA Public Keys.
-*/
-class BOTAN_DLL ECDSA_PublicKey : public virtual EC_PublicKey,
- public PK_Verifying_wo_MR_Key
- {
- public:
-
- /**
- * Get this keys algorithm name.
- * @result this keys algorithm name ("ECDSA")
- */
- std::string algo_name() const { return "ECDSA"; }
-
- /**
- * Get the maximum number of bits allowed to be fed to this key.
- * This is the bitlength of the order of the base point.
-
- * @result the maximum number of input bits
- */
- u32bit max_input_bits() const;
-
- /**
- * Verify a message with this key.
- * @param message the byte array containing the message
- * @param mess_len the number of bytes in the message byte array
- * @param signature the byte array containing the signature
- * @param sig_len the number of bytes in the signature byte array
- */
- bool verify(const byte message[], u32bit mess_len,
- const byte signature[], u32bit sig_len) const;
-
- /**
- * Default constructor. Use this one if you want to later fill
- * this object with data from an encoded key.
- */
- ECDSA_PublicKey() {}
-
- /**
- * Construct a public key from a given public point.
- * @param dom_par the domain parameters associated with this key
- * @param public_point the public point defining this key
- */
- ECDSA_PublicKey(const EC_Domain_Params& dom_par,
- const PointGFp& public_point); // sets core
-
- ECDSA_PublicKey const& operator=(const ECDSA_PublicKey& rhs);
-
- ECDSA_PublicKey(const ECDSA_PublicKey& other);
-
- /**
- * Set the domain parameters of this key. This function has to be
- * used when a key encoded without domain parameters was decoded into
- * this key. Otherwise it will not be able to verify a signature.
- * @param dom_pars the domain_parameters associated with this key
- * @throw Invalid_Argument if the point was found not to be satisfying the
- * curve equation of the provided domain parameters
- * or if this key already has domain parameters set
- * and these are differing from those given as the parameter
- */
- void set_domain_parameters(const EC_Domain_Params& dom_pars);
-
- /**
- * Ensure that the public point and domain parameters of this key are set.
- * @throw Invalid_State if either of the two data members is not set
- */
- virtual void affirm_init() const;
-
- protected:
- void X509_load_hook();
- virtual void set_all_values(const ECDSA_PublicKey& other);
-
- ECDSA_Core m_ecdsa_core;
- };
-
-/**
-* This class represents ECDSA Private Keys
-*/
-class BOTAN_DLL ECDSA_PrivateKey : public ECDSA_PublicKey,
- public EC_PrivateKey,
- public PK_Signing_Key
- {
- public:
- //ctors
-
- /**
- * Default constructor. Use this one if you want to later fill
- * this object with data from an encoded key.
- */
- ECDSA_PrivateKey() {}
-
- /**
- * Generate a new private key
- * @param the domain parameters to used for this key
- */
- ECDSA_PrivateKey(RandomNumberGenerator& rng,
- const EC_Domain_Params& domain);
-
- ECDSA_PrivateKey(const ECDSA_PrivateKey& other);
- ECDSA_PrivateKey const& operator=(const ECDSA_PrivateKey& rhs);
-
- /**
- * Sign a message with this key.
- * @param message the byte array representing the message to be signed
- * @param mess_len the length of the message byte array
- * @result the signature
- */
-
- SecureVector<byte> sign(const byte message[], u32bit mess_len,
- RandomNumberGenerator& rng) const;
-
- /**
- * Make sure that the public key parts of this object are set
- * (calls EC_PublicKey::affirm_init()) as well as the private key
- * value.
- * @throw Invalid_State if the above conditions are not satisfied
- */
- virtual void affirm_init() const;
-
- protected:
- virtual void set_all_values(const ECDSA_PrivateKey& other);
- private:
- void PKCS8_load_hook(bool = false);
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/ecdsa/ecdsa_core.cpp b/botan/src/pubkey/ecdsa/ecdsa_core.cpp
deleted file mode 100644
index 93808cc..0000000
--- a/botan/src/pubkey/ecdsa/ecdsa_core.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-* ECDSA Core
-* (C) 1999-2007 Jack Lloyd
-* (C) 2007 FlexSecure GmbH
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/ecdsa_core.h>
-#include <botan/numthry.h>
-#include <botan/pk_engine.h>
-#include <botan/parsing.h>
-#include <algorithm>
-
-namespace Botan {
-
-/*
-* ECDSA Operation
-*/
-bool ECDSA_Core::verify(const byte signature[], u32bit sig_len,
- const byte message[], u32bit mess_len) const
- {
- //assert(op.get());
- return op->verify(signature, sig_len, message, mess_len);
- }
-
-SecureVector<byte> ECDSA_Core::sign(const byte message[],
- u32bit mess_len,
- RandomNumberGenerator& rng) const
- {
- //assert(op.get());
- return op->sign(message, mess_len, rng);
- }
-
-ECDSA_Core& ECDSA_Core::operator=(const ECDSA_Core& core)
- {
- delete op;
- if(core.op)
- op = core.op->clone();
- return (*this);
- }
-
-ECDSA_Core::ECDSA_Core(const ECDSA_Core& core)
- {
- op = 0;
- if(core.op)
- op = core.op->clone();
- }
-
-ECDSA_Core::ECDSA_Core(EC_Domain_Params const& dom_pars, const BigInt& priv_key, PointGFp const& pub_key)
- {
- op = Engine_Core::ecdsa_op(dom_pars, priv_key, pub_key);
- }
-
-}
diff --git a/botan/src/pubkey/ecdsa/ecdsa_core.h b/botan/src/pubkey/ecdsa/ecdsa_core.h
deleted file mode 100644
index ceccc94..0000000
--- a/botan/src/pubkey/ecdsa/ecdsa_core.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-* ECDSA Core
-* (C) 1999-2007 Jack Lloyd
-* (C) 2007 FlexSecure GmbH
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ECDSA_CORE_H__
-#define BOTAN_ECDSA_CORE_H__
-
-#include <botan/ecdsa_op.h>
-#include <botan/blinding.h>
-#include <botan/ec_dompar.h>
-
-namespace Botan {
-
-/*
-* ECDSA Core
-*/
-class BOTAN_DLL ECDSA_Core
- {
- public:
- bool verify(const byte signature[], u32bit sig_len,
- const byte message[], u32bit mess_len) const;
-
- SecureVector<byte> sign(const byte message[], u32bit mess_len,
- RandomNumberGenerator& rng) const;
-
- ECDSA_Core& operator=(const ECDSA_Core&);
-
- ECDSA_Core() { op = 0; }
-
- ECDSA_Core(const ECDSA_Core&);
-
- ECDSA_Core(const EC_Domain_Params& dom_pars,
- const BigInt& priv_key,
- const PointGFp& pub_key);
-
- ~ECDSA_Core() { delete op; }
- private:
- ECDSA_Operation* op;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/ecdsa/ecdsa_op.cpp b/botan/src/pubkey/ecdsa/ecdsa_op.cpp
deleted file mode 100644
index 986043e..0000000
--- a/botan/src/pubkey/ecdsa/ecdsa_op.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-* ECDSA Operation
-* (C) 2007 FlexSecure GmbH
-* 2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/ecdsa_op.h>
-#include <botan/numthry.h>
-
-namespace Botan {
-
-bool Default_ECDSA_Op::verify(const byte signature[], u32bit sig_len,
- const byte message[], u32bit mess_len) const
- {
- if(sig_len % 2 != 0)
- throw Invalid_Argument("Erroneous length of signature");
-
- //NOTE: it is not checked whether the public point is set
- if(m_dom_pars.get_curve().get_p() == 0)
- throw Internal_Error("domain parameters not set");
-
- BigInt e(message, mess_len);
-
- u32bit rs_len = sig_len/2;
- SecureVector<byte> sv_r;
- SecureVector<byte> sv_s;
- sv_r.set(signature, rs_len);
- sv_s.set(signature+rs_len, rs_len);
- BigInt r = BigInt::decode ( sv_r, sv_r.size());
- BigInt s = BigInt::decode (sv_s, sv_s.size());
-
- if(r < 0 || r >= m_dom_pars.get_order())
- throw Invalid_Argument("r in ECDSA signature has an illegal value");
-
- if(s < 0 || s >= m_dom_pars.get_order())
- throw Invalid_Argument("s in ECDSA signature has an illegal value");
-
- BigInt w = inverse_mod(s, m_dom_pars.get_order());
-
- PointGFp R = w*(e*m_dom_pars.get_base_point() + r*m_pub_key);
- if(R.is_zero())
- return false;
-
- BigInt x = R.get_affine_x().get_value();
- bool result = (x % m_dom_pars.get_order() == r);
- return result;
- }
-
-SecureVector<byte> Default_ECDSA_Op::sign(const byte message[],
- u32bit mess_len,
- RandomNumberGenerator& rng) const
- {
- if(m_priv_key == 0)
- throw Internal_Error("Default_ECDSA_Op::sign(): no private key");
-
- if(m_dom_pars.get_curve().get_p() == 0)
- throw Internal_Error("Default_ECDSA_Op::sign(): domain parameters not set");
-
- BigInt e(message, mess_len);
-
- // generate k
- BigInt k;
- BigInt r(0);
- const BigInt n(m_dom_pars.get_order());
- while(r == 0)
- {
- k = BigInt::random_integer(rng, 1, n);
-
- PointGFp k_times_P(m_dom_pars.get_base_point());
- k_times_P.mult_this_secure(k, n, n-1);
- k_times_P.check_invariants();
- r = k_times_P.get_affine_x().get_value() % n;
- }
- BigInt k_inv = inverse_mod(k, n);
-
- // use randomization against attacks on s:
- // a = k_inv * (r*(d + x) + e) mod n
- // b = k_inv * r * x mod n
- // s = a - b mod n
- // where x is a random integer
-
-#if defined(CMS_RAND)
- BigInt x = BigInt::random_integer(0, n);
- BigInt s = m_priv_key + x; // obscure the secret from the beginning
- // all following operations thus are randomized
- s *= r;
- s += e;
- s *= k_inv;
- s %= n;
-
- BigInt b = x; // again, start with the random number
- b *= r;
- b *= k_inv;
- b %= n;
- s -= b; // s = a - b
- if(s <= 0) // s %= n
- {
- s += n;
- }
-#else // CMS_RAND
- // no countermeasure here
- BigInt s(r);
- s *= m_priv_key;
- s += e;
- s *= k_inv;
- s %= n;
-
-#endif // CMS_RAND
-
- SecureVector<byte> sv_r = BigInt::encode_1363 ( r, m_dom_pars.get_order().bytes() );
- SecureVector<byte> sv_s = BigInt::encode_1363 ( s, m_dom_pars.get_order().bytes() );
-
- SecureVector<byte> result(sv_r);
- result.append(sv_s);
- return result;
- }
-
-Default_ECDSA_Op::Default_ECDSA_Op(const EC_Domain_Params& dom_pars, const BigInt& priv_key, const PointGFp& pub_key)
- : m_dom_pars(dom_pars),
- m_pub_key(pub_key),
- m_priv_key(priv_key)
- {
-
- }
-
-}
-
diff --git a/botan/src/pubkey/ecdsa/ecdsa_op.h b/botan/src/pubkey/ecdsa/ecdsa_op.h
deleted file mode 100644
index 25831a9..0000000
--- a/botan/src/pubkey/ecdsa/ecdsa_op.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-* ECDSA Operations
-* (C) 1999-2008 Jack Lloyd
-* (C) 2007 FlexSecure GmbH
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ECDSA_OPERATIONS_H__
-#define BOTAN_ECDSA_OPERATIONS_H__
-
-#include <botan/ec_dompar.h>
-#include <botan/rng.h>
-
-namespace Botan {
-
-/*
-* ECDSA Operation
-*/
-class BOTAN_DLL ECDSA_Operation
- {
- public:
- virtual bool verify(const byte sig[], u32bit sig_len,
- const byte msg[], u32bit msg_len) const = 0;
-
- virtual SecureVector<byte> sign(const byte message[],
- u32bit mess_len,
- RandomNumberGenerator&) const = 0;
-
- virtual ECDSA_Operation* clone() const = 0;
-
- virtual ~ECDSA_Operation() {}
- };
-
-
-/*
-* Default ECDSA operation
-*/
-class BOTAN_DLL Default_ECDSA_Op : public ECDSA_Operation
- {
- public:
- bool verify(const byte signature[], u32bit sig_len,
- const byte message[], u32bit mess_len) const;
-
- SecureVector<byte> sign(const byte message[], u32bit mess_len,
- RandomNumberGenerator& rng) const;
-
- ECDSA_Operation* clone() const
- {
- return new Default_ECDSA_Op(*this);
- }
-
- Default_ECDSA_Op(const EC_Domain_Params& dom_pars,
- const BigInt& priv_key,
- const PointGFp& pub_key);
- private:
- EC_Domain_Params m_dom_pars;
- PointGFp m_pub_key;
- BigInt m_priv_key;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/ecdsa/info.txt b/botan/src/pubkey/ecdsa/info.txt
deleted file mode 100644
index 743440f..0000000
--- a/botan/src/pubkey/ecdsa/info.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-realname "ECDSA"
-
-define ECDSA
-
-load_on auto
-
-<add>
-ecdsa.cpp
-ecdsa.h
-ecdsa_core.cpp
-ecdsa_core.h
-ecdsa_op.cpp
-ecdsa_op.h
-</add>
-
-<requires>
-alloc
-asn1
-ec_dompar
-ecc_key
-gfpmath
-libstate
-numbertheory
-rng
-</requires>
diff --git a/botan/src/pubkey/eckaeg/eckaeg.cpp b/botan/src/pubkey/eckaeg/eckaeg.cpp
deleted file mode 100644
index b8ff75d..0000000
--- a/botan/src/pubkey/eckaeg/eckaeg.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
-* ECKAEG implemenation
-* (C) 2007 Manuel Hartl, FlexSecure GmbH
-* 2007 Falko Strenzke, FlexSecure GmbH
-* 2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/eckaeg.h>
-#include <botan/numthry.h>
-#include <botan/util.h>
-#include <botan/der_enc.h>
-#include <botan/ber_dec.h>
-#include <botan/secmem.h>
-#include <botan/point_gfp.h>
-
-namespace Botan {
-
-/*********************************
-* ECKAEG_PublicKey
-*********************************/
-
-void ECKAEG_PublicKey::affirm_init() const // virtual
- {
- EC_PublicKey::affirm_init();
- }
-
-void ECKAEG_PublicKey::set_all_values(ECKAEG_PublicKey const& other)
- {
- m_param_enc = other.m_param_enc;
- m_eckaeg_core = other.m_eckaeg_core;
- m_enc_public_point = other.m_enc_public_point;
- if(other.mp_dom_pars.get())
- {
- mp_dom_pars.reset(new EC_Domain_Params(*(other.mp_dom_pars)));
- }
- if(other.mp_public_point.get())
- {
- mp_public_point.reset(new PointGFp(*(other.mp_public_point)));
- }
- }
-
-ECKAEG_PublicKey::ECKAEG_PublicKey(ECKAEG_PublicKey const& other)
- : Public_Key(),
- EC_PublicKey()
- {
- set_all_values(other);
- }
-
-ECKAEG_PublicKey const& ECKAEG_PublicKey::operator=(ECKAEG_PublicKey const& rhs)
- {
- set_all_values(rhs);
- return *this;
- }
-
-void ECKAEG_PublicKey::X509_load_hook()
- {
- EC_PublicKey::X509_load_hook();
- EC_PublicKey::affirm_init();
- m_eckaeg_core = ECKAEG_Core(*mp_dom_pars, BigInt(0), *mp_public_point);
- }
-
-ECKAEG_PublicKey::ECKAEG_PublicKey(EC_Domain_Params const& dom_par, PointGFp const& public_point)
- {
- mp_dom_pars = std::auto_ptr<EC_Domain_Params>(new EC_Domain_Params(dom_par));
- mp_public_point = std::auto_ptr<PointGFp>(new PointGFp(public_point));
- if(mp_public_point->get_curve() != mp_dom_pars->get_curve())
- {
- throw Invalid_Argument("ECKAEG_PublicKey(): curve of arg. point and curve of arg. domain parameters are different");
- }
- EC_PublicKey::affirm_init();
- m_eckaeg_core = ECKAEG_Core(*mp_dom_pars, BigInt(0), *mp_public_point);
- }
-
-/*********************************
-* ECKAEG_PrivateKey
-*********************************/
-void ECKAEG_PrivateKey::affirm_init() const // virtual
- {
- EC_PrivateKey::affirm_init();
- }
-
-void ECKAEG_PrivateKey::PKCS8_load_hook(bool generated)
- {
- EC_PrivateKey::PKCS8_load_hook(generated);
- EC_PrivateKey::affirm_init();
- m_eckaeg_core = ECKAEG_Core(*mp_dom_pars, m_private_value, *mp_public_point);
- }
-
-void ECKAEG_PrivateKey::set_all_values(ECKAEG_PrivateKey const& other)
- {
- m_private_value = other.m_private_value;
- m_param_enc = other.m_param_enc;
- m_eckaeg_core = other.m_eckaeg_core;
- m_enc_public_point = other.m_enc_public_point;
- if(other.mp_dom_pars.get())
- {
- mp_dom_pars.reset(new EC_Domain_Params(*(other.mp_dom_pars)));
- }
- if(other.mp_public_point.get())
- {
- mp_public_point.reset(new PointGFp(*(other.mp_public_point)));
- }
- }
-
-ECKAEG_PrivateKey::ECKAEG_PrivateKey(ECKAEG_PrivateKey const& other)
- : Public_Key(),
- EC_PublicKey(),
- Private_Key(),
- ECKAEG_PublicKey(),
- EC_PrivateKey(),
- PK_Key_Agreement_Key()
- {
- set_all_values(other);
- }
-
-ECKAEG_PrivateKey const& ECKAEG_PrivateKey::operator= (ECKAEG_PrivateKey const& rhs)
- {
- set_all_values(rhs);
- return *this;
- }
-
-MemoryVector<byte> ECKAEG_PrivateKey::public_value() const
- {
- return EC2OSP(public_point(), PointGFp::UNCOMPRESSED);
- }
-
-/**
-* Derive a key
-*/
-SecureVector<byte> ECKAEG_PrivateKey::derive_key(const byte key[],
- u32bit key_len) const
- {
- MemoryVector<byte> key_x(key, key_len); // FIXME: nasty/slow
- PointGFp point = OS2ECP(key_x, public_point().get_curve());
-
- return m_eckaeg_core.agree(point);
- }
-
-/**
-* Derive a key
-*/
-SecureVector<byte> ECKAEG_PrivateKey::derive_key(const ECKAEG_PublicKey& key) const
- {
- affirm_init();
- key.affirm_init();
-
- return m_eckaeg_core.agree(key.public_point());
- }
-
-}
diff --git a/botan/src/pubkey/eckaeg/eckaeg.h b/botan/src/pubkey/eckaeg/eckaeg.h
deleted file mode 100644
index 31b6574..0000000
--- a/botan/src/pubkey/eckaeg/eckaeg.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-* ECKAEG
-* (C) 2007 Falko Strenzke, FlexSecure GmbH
-* Manuel Hartl, FlexSecure GmbH
-* (C) 2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ECKAEG_KEY_H__
-#define BOTAN_ECKAEG_KEY_H__
-
-#include <botan/ecc_key.h>
-#include <botan/eckaeg_core.h>
-
-namespace Botan {
-
-/**
-* This class represents ECKAEG Public Keys.
-*/
-class BOTAN_DLL ECKAEG_PublicKey : public virtual EC_PublicKey
- {
- public:
-
- /**
- * Default constructor. Use this one if you want to later fill
- * this object with data from an encoded key.
- */
- ECKAEG_PublicKey() {}
-
- /**
- * Construct a public key from a given public point.
- * @param dom_par the domain parameters associated with this key
- * @param public_point the public point defining this key
- */
- ECKAEG_PublicKey(const EC_Domain_Params& dom_par,
- const PointGFp& public_point);
-
- /**
- * Get this keys algorithm name.
- * @result this keys algorithm name
- */
- std::string algo_name() const { return "ECKAEG"; }
-
- /**
- * Get the maximum number of bits allowed to be fed to this key.
- * This is the bitlength of the order of the base point.
-
- * @result the maximum number of input bits
- */
- u32bit max_input_bits() const
- {
- if(!mp_dom_pars.get())
- throw Invalid_State("ECKAEG_PublicKey::max_input_bits(): domain parameters not set");
-
- return mp_dom_pars->get_order().bits();
- }
-
- ECKAEG_PublicKey(ECKAEG_PublicKey const& other);
- ECKAEG_PublicKey const& operator= (ECKAEG_PublicKey const& rhs);
-
- /**
- * Make sure that the public point and domain parameters of this
- * key are set.
- * @throw Invalid_State if either of the two data members is not set
- */
- virtual void affirm_init() const;
-
- protected:
- void X509_load_hook();
- virtual void set_all_values(const ECKAEG_PublicKey& other);
-
- ECKAEG_Core m_eckaeg_core;
- };
-
-/**
-* This class represents ECKAEG Private Keys.
-*/
-class BOTAN_DLL ECKAEG_PrivateKey : public ECKAEG_PublicKey,
- public EC_PrivateKey,
- public PK_Key_Agreement_Key
- {
- public:
-
- /**
- * Generate a new private key
- * @param the domain parameters to used for this key
- */
- ECKAEG_PrivateKey(RandomNumberGenerator& rng,
- const EC_Domain_Params& dom_pars)
- {
- mp_dom_pars = std::auto_ptr<EC_Domain_Params>(new EC_Domain_Params(dom_pars));
- generate_private_key(rng);
- mp_public_point->check_invariants();
- m_eckaeg_core = ECKAEG_Core(*mp_dom_pars, m_private_value, *mp_public_point);
- }
-
- /**
- * Default constructor. Use this one if you want to later fill this object with data
- * from an encoded key.
- */
- ECKAEG_PrivateKey() {}
- ECKAEG_PrivateKey(ECKAEG_PrivateKey const& other);
- ECKAEG_PrivateKey const& operator=(ECKAEG_PrivateKey const& rhs);
-
- MemoryVector<byte> public_value() const;
-
- void PKCS8_load_hook(bool = false);
-
- /**
- * Derive a shared key with the other partys public key.
- * @param key the other partys public key
- * @param key_len the other partys public key
- */
- SecureVector<byte> derive_key(const byte key[], u32bit key_len) const;
-
- /**
- * Derive a shared key with the other partys public key.
- * @param other the other partys public key
- */
- SecureVector<byte> derive_key(const ECKAEG_PublicKey& other) const;
-
- /**
- * Make sure that the public key parts of this object are set
- * (calls EC_PublicKey::affirm_init()) as well as the private key
- * value.
- * @throw Invalid_State if the above conditions are not satisfied
- */
- virtual void affirm_init() const;
-
- protected:
- virtual void set_all_values(const ECKAEG_PrivateKey& other);
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/eckaeg/eckaeg_core.cpp b/botan/src/pubkey/eckaeg/eckaeg_core.cpp
deleted file mode 100644
index dc89a87..0000000
--- a/botan/src/pubkey/eckaeg/eckaeg_core.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-* ECKAEG Core
-* (C) 1999-2007 Jack Lloyd
-* (C) 2007 FlexSecure GmbH
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/eckaeg_core.h>
-#include <botan/numthry.h>
-#include <botan/pk_engine.h>
-#include <botan/parsing.h>
-#include <algorithm>
-
-namespace Botan {
-
-/*
-* ECKAEG_Core Constructor
-*/
-ECKAEG_Core::ECKAEG_Core(const EC_Domain_Params& dom_pars,
- const BigInt& priv_key,
- const PointGFp& pub_key)
- {
- op = Engine_Core::eckaeg_op(dom_pars, priv_key, pub_key);
- }
-
-/*
-* ECKAEG_Core Copy Constructor
-*/
-ECKAEG_Core::ECKAEG_Core(const ECKAEG_Core& core)
- {
- op = 0;
- if(core.op)
- op = core.op->clone();
- blinder = core.blinder;
- }
-
-/*
-* ECKAEG_Core Assignment Operator
-*/
-ECKAEG_Core& ECKAEG_Core::operator=(const ECKAEG_Core& core)
- {
- delete op;
- if(core.op)
- op = core.op->clone();
- blinder = core.blinder;
- return (*this);
- }
-
-/*
-* ECKAEG Operation
-*/
-SecureVector<byte> ECKAEG_Core::agree(const PointGFp& otherKey) const
- {
- //assert(op.get());
- return op->agree(otherKey);
- }
-
-}
diff --git a/botan/src/pubkey/eckaeg/eckaeg_core.h b/botan/src/pubkey/eckaeg/eckaeg_core.h
deleted file mode 100644
index d632c94..0000000
--- a/botan/src/pubkey/eckaeg/eckaeg_core.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-* ECKAEG Core
-* (C) 1999-2007 Jack Lloyd
-* (C) 2007 FlexSecure GmbH
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ECKAEG_CORE_H__
-#define BOTAN_ECKAEG_CORE_H__
-
-#include <botan/eckaeg_op.h>
-#include <botan/blinding.h>
-#include <botan/ec_dompar.h>
-
-namespace Botan {
-
-/*
-* ECKAEG Core
-*/
-class BOTAN_DLL ECKAEG_Core
- {
- public:
- SecureVector<byte> agree(const PointGFp&) const;
-
- ECKAEG_Core& operator=(const ECKAEG_Core&);
-
- ECKAEG_Core() { op = 0; }
-
- ECKAEG_Core(const ECKAEG_Core&);
-
- ECKAEG_Core(const EC_Domain_Params& dom_pars,
- const BigInt& priv_key,
- PointGFp const& pub_key);
-
- ~ECKAEG_Core() { delete op; }
- private:
- ECKAEG_Operation* op;
- Blinder blinder;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/eckaeg/eckaeg_op.cpp b/botan/src/pubkey/eckaeg/eckaeg_op.cpp
deleted file mode 100644
index 0cb5c3d..0000000
--- a/botan/src/pubkey/eckaeg/eckaeg_op.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-* ECKAEG Operation
-* (C) 2007 FlexSecure GmbH
-* 2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/eckaeg_op.h>
-#include <botan/numthry.h>
-
-namespace Botan {
-
-Default_ECKAEG_Op::Default_ECKAEG_Op(const EC_Domain_Params& dom_pars,
- const BigInt& priv_key,
- const PointGFp& pub_key)
- : m_dom_pars(dom_pars),
- m_pub_key(pub_key),
- m_priv_key(priv_key)
- {
- }
-
-SecureVector<byte> Default_ECKAEG_Op::agree(const PointGFp& i) const
- {
- BigInt cofactor(m_dom_pars.get_cofactor());
- BigInt n = m_dom_pars.get_order();
- BigInt l(inverse_mod(cofactor,n)); // l=h^-1 mod n
- PointGFp Q(cofactor*i); // q = h*Pb
- PointGFp S(Q);
- BigInt group_order = m_dom_pars.get_cofactor() * n;
- S.mult_this_secure((m_priv_key*l)%n, group_order, n-1);
- S.check_invariants();
- return FE2OSP(S.get_affine_x()); // fe2os(xs)
- }
-
-}
diff --git a/botan/src/pubkey/eckaeg/eckaeg_op.h b/botan/src/pubkey/eckaeg/eckaeg_op.h
deleted file mode 100644
index 27cf4f3..0000000
--- a/botan/src/pubkey/eckaeg/eckaeg_op.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-* ECKAEG Operations
-* (C) 1999-2008 Jack Lloyd
-* 2007 FlexSecure GmbH
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ECKAEG_OPERATIONS_H__
-#define BOTAN_ECKAEG_OPERATIONS_H__
-
-#include <botan/ec_dompar.h>
-
-namespace Botan {
-
-/*
-* ECKAEG Operation
-*/
-class BOTAN_DLL ECKAEG_Operation
- {
- public:
- virtual SecureVector<byte> agree(const PointGFp&) const = 0;
- virtual ECKAEG_Operation* clone() const = 0;
- virtual ~ECKAEG_Operation() {}
- };
-
-/*
-* Default ECKAEG operation
-*/
-class BOTAN_DLL Default_ECKAEG_Op : public ECKAEG_Operation
- {
- public:
- SecureVector<byte> agree(const PointGFp& i) const;
-
- ECKAEG_Operation* clone() const { return new Default_ECKAEG_Op(*this); }
-
- Default_ECKAEG_Op(const EC_Domain_Params& dom_pars,
- const BigInt& priv_key,
- const PointGFp& pub_key);
- private:
- EC_Domain_Params m_dom_pars;
- PointGFp m_pub_key;
- BigInt m_priv_key;
- };
-
-
-}
-
-#endif
diff --git a/botan/src/pubkey/eckaeg/info.txt b/botan/src/pubkey/eckaeg/info.txt
deleted file mode 100644
index 6b78f7d..0000000
--- a/botan/src/pubkey/eckaeg/info.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-realname "ECKAEG"
-
-define ECKAEG
-
-load_on auto
-
-<add>
-eckaeg.cpp
-eckaeg.h
-eckaeg_core.cpp
-eckaeg_core.h
-eckaeg_op.cpp
-eckaeg_op.h
-</add>
-
-<requires>
-alloc
-asn1
-ec_dompar
-ecc_key
-gfpmath
-libstate
-numbertheory
-</requires>
diff --git a/botan/src/pubkey/elgamal/elg_core.cpp b/botan/src/pubkey/elgamal/elg_core.cpp
deleted file mode 100644
index 8b8c8f5..0000000
--- a/botan/src/pubkey/elgamal/elg_core.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-* ElGamal Core
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/elg_core.h>
-#include <botan/numthry.h>
-#include <botan/pk_engine.h>
-#include <botan/parsing.h>
-#include <algorithm>
-
-namespace Botan {
-
-namespace {
-
-const u32bit BLINDING_BITS = BOTAN_PRIVATE_KEY_OP_BLINDING_BITS;
-
-}
-
-/*
-* ELG_Core Constructor
-*/
-ELG_Core::ELG_Core(const DL_Group& group, const BigInt& y)
- {
- op = Engine_Core::elg_op(group, y, 0);
- p_bytes = 0;
- }
-
-/*
-* ELG_Core Constructor
-*/
-ELG_Core::ELG_Core(RandomNumberGenerator& rng,
- const DL_Group& group, const BigInt& y, const BigInt& x)
- {
- op = Engine_Core::elg_op(group, y, x);
-
- const BigInt& p = group.get_p();
- p_bytes = p.bytes();
-
- if(BLINDING_BITS)
- {
- BigInt k(rng, std::min(p.bits()-1, BLINDING_BITS));
- blinder = Blinder(k, power_mod(k, x, p), p);
- }
- }
-
-/*
-* ELG_Core Copy Constructor
-*/
-ELG_Core::ELG_Core(const ELG_Core& core)
- {
- op = 0;
- if(core.op)
- op = core.op->clone();
- blinder = core.blinder;
- p_bytes = core.p_bytes;
- }
-
-/*
-* ELG_Core Assignment Operator
-*/
-ELG_Core& ELG_Core::operator=(const ELG_Core& core)
- {
- delete op;
- if(core.op)
- op = core.op->clone();
- blinder = core.blinder;
- p_bytes = core.p_bytes;
- return (*this);
- }
-
-/*
-* ElGamal Encrypt Operation
-*/
-SecureVector<byte> ELG_Core::encrypt(const byte in[], u32bit length,
- const BigInt& k) const
- {
- return op->encrypt(in, length, k);
- }
-
-/*
-* ElGamal Decrypt Operation
-*/
-SecureVector<byte> ELG_Core::decrypt(const byte in[], u32bit length) const
- {
- if(length != 2*p_bytes)
- throw Invalid_Argument("ELG_Core::decrypt: Invalid message");
-
- BigInt a(in, p_bytes);
- BigInt b(in + p_bytes, p_bytes);
-
- return BigInt::encode(blinder.unblind(op->decrypt(blinder.blind(a), b)));
- }
-
-}
diff --git a/botan/src/pubkey/elgamal/elg_core.h b/botan/src/pubkey/elgamal/elg_core.h
deleted file mode 100644
index a7768a6..0000000
--- a/botan/src/pubkey/elgamal/elg_core.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-* ElGamal Core
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ELGAMAL_CORE_H__
-#define BOTAN_ELGAMAL_CORE_H__
-
-#include <botan/elg_op.h>
-#include <botan/blinding.h>
-#include <botan/dl_group.h>
-
-namespace Botan {
-
-/*
-* ElGamal Core
-*/
-class BOTAN_DLL ELG_Core
- {
- public:
- SecureVector<byte> encrypt(const byte[], u32bit, const BigInt&) const;
- SecureVector<byte> decrypt(const byte[], u32bit) const;
-
- ELG_Core& operator=(const ELG_Core&);
-
- ELG_Core() { op = 0; }
- ELG_Core(const ELG_Core&);
-
- ELG_Core(const DL_Group&, const BigInt&);
- ELG_Core(RandomNumberGenerator&, const DL_Group&,
- const BigInt&, const BigInt&);
-
- ~ELG_Core() { delete op; }
- private:
- ELG_Operation* op;
- Blinder blinder;
- u32bit p_bytes;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/elgamal/elg_op.cpp b/botan/src/pubkey/elgamal/elg_op.cpp
deleted file mode 100644
index 1e476ab..0000000
--- a/botan/src/pubkey/elgamal/elg_op.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-* ElGamal Operations
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/elg_op.h>
-
-namespace Botan {
-
-/*
-* Default_ELG_Op Constructor
-*/
-Default_ELG_Op::Default_ELG_Op(const DL_Group& group, const BigInt& y,
- const BigInt& x) : p(group.get_p())
- {
- powermod_g_p = Fixed_Base_Power_Mod(group.get_g(), p);
- powermod_y_p = Fixed_Base_Power_Mod(y, p);
- mod_p = Modular_Reducer(p);
-
- if(x != 0)
- powermod_x_p = Fixed_Exponent_Power_Mod(x, p);
- }
-
-/*
-* Default ElGamal Encrypt Operation
-*/
-SecureVector<byte> Default_ELG_Op::encrypt(const byte in[], u32bit length,
- const BigInt& k) const
- {
- BigInt m(in, length);
- if(m >= p)
- throw Invalid_Argument("Default_ELG_Op::encrypt: Input is too large");
-
- BigInt a = powermod_g_p(k);
- BigInt b = mod_p.multiply(m, powermod_y_p(k));
-
- SecureVector<byte> output(2*p.bytes());
- a.binary_encode(output + (p.bytes() - a.bytes()));
- b.binary_encode(output + output.size() / 2 + (p.bytes() - b.bytes()));
- return output;
- }
-
-/*
-* Default ElGamal Decrypt Operation
-*/
-BigInt Default_ELG_Op::decrypt(const BigInt& a, const BigInt& b) const
- {
- if(a >= p || b >= p)
- throw Invalid_Argument("Default_ELG_Op: Invalid message");
-
- return mod_p.multiply(b, inverse_mod(powermod_x_p(a), p));
- }
-
-}
diff --git a/botan/src/pubkey/elgamal/elg_op.h b/botan/src/pubkey/elgamal/elg_op.h
deleted file mode 100644
index 39ed897..0000000
--- a/botan/src/pubkey/elgamal/elg_op.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-* ElGamal Operations
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ELGAMAL_OPS_H__
-#define BOTAN_ELGAMAL_OPS_H__
-
-#include <botan/pow_mod.h>
-#include <botan/numthry.h>
-#include <botan/reducer.h>
-#include <botan/dl_group.h>
-
-namespace Botan {
-
-/*
-* ElGamal Operation
-*/
-class BOTAN_DLL ELG_Operation
- {
- public:
- virtual SecureVector<byte> encrypt(const byte[], u32bit,
- const BigInt&) const = 0;
- virtual BigInt decrypt(const BigInt&, const BigInt&) const = 0;
- virtual ELG_Operation* clone() const = 0;
- virtual ~ELG_Operation() {}
- };
-
-/*
-* Botan's Default ElGamal Operation
-*/
-class BOTAN_DLL Default_ELG_Op : public ELG_Operation
- {
- public:
- SecureVector<byte> encrypt(const byte[], u32bit, const BigInt&) const;
- BigInt decrypt(const BigInt&, const BigInt&) const;
-
- ELG_Operation* clone() const { return new Default_ELG_Op(*this); }
-
- Default_ELG_Op(const DL_Group&, const BigInt&, const BigInt&);
- private:
- const BigInt p;
- Fixed_Base_Power_Mod powermod_g_p, powermod_y_p;
- Fixed_Exponent_Power_Mod powermod_x_p;
- Modular_Reducer mod_p;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/elgamal/elgamal.cpp b/botan/src/pubkey/elgamal/elgamal.cpp
deleted file mode 100644
index 1f79df5..0000000
--- a/botan/src/pubkey/elgamal/elgamal.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
-* ElGamal
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/elgamal.h>
-#include <botan/numthry.h>
-#include <botan/keypair.h>
-#include <botan/look_pk.h>
-#include <botan/util.h>
-
-namespace Botan {
-
-/*
-* ElGamal_PublicKey Constructor
-*/
-ElGamal_PublicKey::ElGamal_PublicKey(const DL_Group& grp, const BigInt& y1)
- {
- group = grp;
- y = y1;
- X509_load_hook();
- }
-
-/*
-* Algorithm Specific X.509 Initialization Code
-*/
-void ElGamal_PublicKey::X509_load_hook()
- {
- core = ELG_Core(group, y);
- }
-
-/*
-* ElGamal Encryption Function
-*/
-SecureVector<byte>
-ElGamal_PublicKey::encrypt(const byte in[], u32bit length,
- RandomNumberGenerator& rng) const
- {
- BigInt k(rng, 2 * dl_work_factor(group_p().bits()));
- return core.encrypt(in, length, k);
- }
-
-/*
-* Return the maximum input size in bits
-*/
-u32bit ElGamal_PublicKey::max_input_bits() const
- {
- return (group_p().bits() - 1);
- }
-
-/*
-* ElGamal_PrivateKey Constructor
-*/
-ElGamal_PrivateKey::ElGamal_PrivateKey(RandomNumberGenerator& rng,
- const DL_Group& grp,
- const BigInt& x_arg)
- {
- group = grp;
- x = x_arg;
-
- if(x == 0)
- {
- x.randomize(rng, 2 * dl_work_factor(group_p().bits()));
- PKCS8_load_hook(rng, true);
- }
- else
- PKCS8_load_hook(rng, false);
- }
-
-/*
-* Algorithm Specific PKCS #8 Initialization Code
-*/
-void ElGamal_PrivateKey::PKCS8_load_hook(RandomNumberGenerator& rng,
- bool generated)
- {
- if(y == 0)
- y = power_mod(group_g(), x, group_p());
- core = ELG_Core(rng, group, y, x);
-
- if(generated)
- gen_check(rng);
- else
- load_check(rng);
- }
-
-/*
-* ElGamal Decryption Function
-*/
-SecureVector<byte> ElGamal_PrivateKey::decrypt(const byte in[],
- u32bit length) const
- {
- return core.decrypt(in, length);
- }
-
-/*
-* Check Private ElGamal Parameters
-*/
-bool ElGamal_PrivateKey::check_key(RandomNumberGenerator& rng,
- bool strong) const
- {
- if(!DL_Scheme_PrivateKey::check_key(rng, strong))
- return false;
-
- if(!strong)
- return true;
-
- try
- {
- KeyPair::check_key(rng,
- get_pk_encryptor(*this, "EME1(SHA-1)"),
- get_pk_decryptor(*this, "EME1(SHA-1)")
- );
- }
- catch(Self_Test_Failure)
- {
- return false;
- }
-
- return true;
- }
-
-}
diff --git a/botan/src/pubkey/elgamal/elgamal.h b/botan/src/pubkey/elgamal/elgamal.h
deleted file mode 100644
index 93e640f..0000000
--- a/botan/src/pubkey/elgamal/elgamal.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-* ElGamal
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ELGAMAL_H__
-#define BOTAN_ELGAMAL_H__
-
-#include <botan/dl_algo.h>
-#include <botan/elg_core.h>
-
-namespace Botan {
-
-/*
-* ElGamal Public Key
-*/
-class BOTAN_DLL ElGamal_PublicKey : public PK_Encrypting_Key,
- public virtual DL_Scheme_PublicKey
- {
- public:
- std::string algo_name() const { return "ElGamal"; }
- DL_Group::Format group_format() const { return DL_Group::ANSI_X9_42; }
-
- SecureVector<byte> encrypt(const byte[], u32bit,
- RandomNumberGenerator& rng) const;
- u32bit max_input_bits() const;
-
- ElGamal_PublicKey() {}
- ElGamal_PublicKey(const DL_Group&, const BigInt&);
- protected:
- ELG_Core core;
- private:
- void X509_load_hook();
- };
-
-/*
-* ElGamal Private Key
-*/
-class BOTAN_DLL ElGamal_PrivateKey : public ElGamal_PublicKey,
- public PK_Decrypting_Key,
- public virtual DL_Scheme_PrivateKey
- {
- public:
- SecureVector<byte> decrypt(const byte[], u32bit) const;
-
- bool check_key(RandomNumberGenerator& rng, bool) const;
-
- ElGamal_PrivateKey() {}
- ElGamal_PrivateKey(RandomNumberGenerator&, const DL_Group&,
- const BigInt& = 0);
- private:
- void PKCS8_load_hook(RandomNumberGenerator&, bool = false);
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/elgamal/info.txt b/botan/src/pubkey/elgamal/info.txt
deleted file mode 100644
index d7ae614..0000000
--- a/botan/src/pubkey/elgamal/info.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-realname "ElGamal"
-
-define ELGAMAL
-
-load_on auto
-
-<add>
-elgamal.cpp
-elgamal.h
-elg_core.cpp
-elg_core.h
-elg_op.cpp
-elg_op.h
-</add>
-
-<requires>
-dl_algo
-dl_group
-keypair
-libstate
-numbertheory
-</requires>
diff --git a/botan/src/pubkey/if_algo/if_algo.cpp b/botan/src/pubkey/if_algo/if_algo.cpp
deleted file mode 100644
index 556c86f..0000000
--- a/botan/src/pubkey/if_algo/if_algo.cpp
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-* IF Scheme
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/if_algo.h>
-#include <botan/numthry.h>
-#include <botan/der_enc.h>
-#include <botan/ber_dec.h>
-
-namespace Botan {
-
-/*
-* Return the X.509 public key encoder
-*/
-X509_Encoder* IF_Scheme_PublicKey::x509_encoder() const
- {
- class IF_Scheme_Encoder : public X509_Encoder
- {
- public:
- AlgorithmIdentifier alg_id() const
- {
- return AlgorithmIdentifier(key->get_oid(),
- AlgorithmIdentifier::USE_NULL_PARAM);
- }
-
- MemoryVector<byte> key_bits() const
- {
- return DER_Encoder()
- .start_cons(SEQUENCE)
- .encode(key->n)
- .encode(key->e)
- .end_cons()
- .get_contents();
- }
-
- IF_Scheme_Encoder(const IF_Scheme_PublicKey* k) : key(k) {}
- private:
- const IF_Scheme_PublicKey* key;
- };
-
- return new IF_Scheme_Encoder(this);
- }
-
-/*
-* Return the X.509 public key decoder
-*/
-X509_Decoder* IF_Scheme_PublicKey::x509_decoder()
- {
- class IF_Scheme_Decoder : public X509_Decoder
- {
- public:
- void alg_id(const AlgorithmIdentifier&) {}
-
- void key_bits(const MemoryRegion<byte>& bits)
- {
- BER_Decoder(bits)
- .start_cons(SEQUENCE)
- .decode(key->n)
- .decode(key->e)
- .verify_end()
- .end_cons();
-
- key->X509_load_hook();
- }
-
- IF_Scheme_Decoder(IF_Scheme_PublicKey* k) : key(k) {}
- private:
- IF_Scheme_PublicKey* key;
- };
-
- return new IF_Scheme_Decoder(this);
- }
-
-/*
-* Return the PKCS #8 public key encoder
-*/
-PKCS8_Encoder* IF_Scheme_PrivateKey::pkcs8_encoder() const
- {
- class IF_Scheme_Encoder : public PKCS8_Encoder
- {
- public:
- AlgorithmIdentifier alg_id() const
- {
- return AlgorithmIdentifier(key->get_oid(),
- AlgorithmIdentifier::USE_NULL_PARAM);
- }
-
- MemoryVector<byte> key_bits() const
- {
- return DER_Encoder()
- .start_cons(SEQUENCE)
- .encode(static_cast<u32bit>(0))
- .encode(key->n)
- .encode(key->e)
- .encode(key->d)
- .encode(key->p)
- .encode(key->q)
- .encode(key->d1)
- .encode(key->d2)
- .encode(key->c)
- .end_cons()
- .get_contents();
- }
-
- IF_Scheme_Encoder(const IF_Scheme_PrivateKey* k) : key(k) {}
- private:
- const IF_Scheme_PrivateKey* key;
- };
-
- return new IF_Scheme_Encoder(this);
- }
-
-/*
-* Return the PKCS #8 public key decoder
-*/
-PKCS8_Decoder* IF_Scheme_PrivateKey::pkcs8_decoder(RandomNumberGenerator& rng)
- {
- class IF_Scheme_Decoder : public PKCS8_Decoder
- {
- public:
- void alg_id(const AlgorithmIdentifier&) {}
-
- void key_bits(const MemoryRegion<byte>& bits)
- {
- u32bit version;
-
- BER_Decoder(bits)
- .start_cons(SEQUENCE)
- .decode(version)
- .decode(key->n)
- .decode(key->e)
- .decode(key->d)
- .decode(key->p)
- .decode(key->q)
- .decode(key->d1)
- .decode(key->d2)
- .decode(key->c)
- .end_cons();
-
- if(version != 0)
- throw Decoding_Error("Unknown PKCS #1 key format version");
-
- key->PKCS8_load_hook(rng);
- }
-
- IF_Scheme_Decoder(IF_Scheme_PrivateKey* k, RandomNumberGenerator& r) :
- key(k), rng(r) {}
- private:
- IF_Scheme_PrivateKey* key;
- RandomNumberGenerator& rng;
- };
-
- return new IF_Scheme_Decoder(this, rng);
- }
-
-/*
-* Algorithm Specific X.509 Initialization Code
-*/
-void IF_Scheme_PublicKey::X509_load_hook()
- {
- core = IF_Core(e, n);
- }
-
-/*
-* Algorithm Specific PKCS #8 Initialization Code
-*/
-void IF_Scheme_PrivateKey::PKCS8_load_hook(RandomNumberGenerator& rng,
- bool generated)
- {
- if(n == 0) n = p * q;
- if(d1 == 0) d1 = d % (p - 1);
- if(d2 == 0) d2 = d % (q - 1);
- if(c == 0) c = inverse_mod(q, p);
-
- core = IF_Core(rng, e, n, d, p, q, d1, d2, c);
-
- if(generated)
- gen_check(rng);
- else
- load_check(rng);
- }
-
-/*
-* Check IF Scheme Public Parameters
-*/
-bool IF_Scheme_PublicKey::check_key(RandomNumberGenerator&, bool) const
- {
- if(n < 35 || n.is_even() || e < 2)
- return false;
- return true;
- }
-
-/*
-* Check IF Scheme Private Parameters
-*/
-bool IF_Scheme_PrivateKey::check_key(RandomNumberGenerator& rng,
- bool strong) const
- {
- if(n < 35 || n.is_even() || e < 2 || d < 2 || p < 3 || q < 3 || p*q != n)
- return false;
-
- if(!strong)
- return true;
-
- if(d1 != d % (p - 1) || d2 != d % (q - 1) || c != inverse_mod(q, p))
- return false;
- if(!check_prime(p, rng) || !check_prime(q, rng))
- return false;
- return true;
- }
-
-}
diff --git a/botan/src/pubkey/if_algo/if_algo.h b/botan/src/pubkey/if_algo/if_algo.h
deleted file mode 100644
index 32a29be..0000000
--- a/botan/src/pubkey/if_algo/if_algo.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
-* IF Scheme
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_IF_ALGO_H__
-#define BOTAN_IF_ALGO_H__
-
-#include <botan/if_core.h>
-#include <botan/x509_key.h>
-#include <botan/pkcs8.h>
-
-namespace Botan {
-
-/**
-* This class represents public keys
-* of integer factorization based (IF) public key schemes.
-*/
-class BOTAN_DLL IF_Scheme_PublicKey : public virtual Public_Key
- {
- public:
- bool check_key(RandomNumberGenerator& rng, bool) const;
-
- /**
- * Get n = p * q.
- * @return n
- */
- const BigInt& get_n() const { return n; }
-
- /**
- * Get the public exponent used by the key.
- * @return the public exponent
- */
- const BigInt& get_e() const { return e; }
-
- u32bit max_input_bits() const { return (n.bits() - 1); }
-
- X509_Encoder* x509_encoder() const;
- X509_Decoder* x509_decoder();
- protected:
- virtual void X509_load_hook();
- BigInt n, e;
- IF_Core core;
- };
-
-/**
-* This class represents public keys
-* of integer factorization based (IF) public key schemes.
-*/
-class BOTAN_DLL IF_Scheme_PrivateKey : public virtual IF_Scheme_PublicKey,
- public virtual Private_Key
- {
- public:
- bool check_key(RandomNumberGenerator& rng, bool) const;
-
- /**
- * Get the first prime p.
- * @return the prime p
- */
- const BigInt& get_p() const { return p; }
-
- /**
- * Get the second prime q.
- * @return the prime q
- */
- const BigInt& get_q() const { return q; }
-
- /**
- * Get d with exp * d = 1 mod (p - 1, q - 1).
- * @return d
- */
- const BigInt& get_d() const { return d; }
-
- PKCS8_Encoder* pkcs8_encoder() const;
- PKCS8_Decoder* pkcs8_decoder(RandomNumberGenerator&);
- protected:
- virtual void PKCS8_load_hook(RandomNumberGenerator&, bool = false);
- BigInt d, p, q, d1, d2, c;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/if_algo/if_core.cpp b/botan/src/pubkey/if_algo/if_core.cpp
deleted file mode 100644
index 8cc6a81..0000000
--- a/botan/src/pubkey/if_algo/if_core.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-* IF Algorithm Core
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/if_core.h>
-#include <botan/numthry.h>
-#include <botan/pk_engine.h>
-#include <botan/parsing.h>
-#include <algorithm>
-
-namespace Botan {
-
-namespace {
-
-const u32bit BLINDING_BITS = BOTAN_PRIVATE_KEY_OP_BLINDING_BITS;
-
-}
-
-/*
-* IF_Core Constructor
-*/
-IF_Core::IF_Core(const BigInt& e, const BigInt& n)
- {
- op = Engine_Core::if_op(e, n, 0, 0, 0, 0, 0, 0);
- }
-
-
-/*
-* IF_Core Constructor
-*/
-IF_Core::IF_Core(RandomNumberGenerator& rng,
- const BigInt& e, const BigInt& n, const BigInt& d,
- const BigInt& p, const BigInt& q,
- const BigInt& d1, const BigInt& d2, const BigInt& c)
- {
- op = Engine_Core::if_op(e, n, d, p, q, d1, d2, c);
-
- if(BLINDING_BITS)
- {
- BigInt k(rng, std::min(n.bits()-1, BLINDING_BITS));
- blinder = Blinder(power_mod(k, e, n), inverse_mod(k, n), n);
- }
- }
-
-/*
-* IF_Core Copy Constructor
-*/
-IF_Core::IF_Core(const IF_Core& core)
- {
- op = 0;
- if(core.op)
- op = core.op->clone();
- blinder = core.blinder;
- }
-
-/*
-* IF_Core Assignment Operator
-*/
-IF_Core& IF_Core::operator=(const IF_Core& core)
- {
- delete op;
- if(core.op)
- op = core.op->clone();
- blinder = core.blinder;
- return (*this);
- }
-
-/*
-* IF Public Operation
-*/
-BigInt IF_Core::public_op(const BigInt& i) const
- {
- return op->public_op(i);
- }
-
-/*
-* IF Private Operation
-*/
-BigInt IF_Core::private_op(const BigInt& i) const
- {
- return blinder.unblind(op->private_op(blinder.blind(i)));
- }
-
-}
diff --git a/botan/src/pubkey/if_algo/if_core.h b/botan/src/pubkey/if_algo/if_core.h
deleted file mode 100644
index b7f4877..0000000
--- a/botan/src/pubkey/if_algo/if_core.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-* IF Algorithm Core
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_IF_CORE_H__
-#define BOTAN_IF_CORE_H__
-
-#include <botan/if_op.h>
-#include <botan/blinding.h>
-
-namespace Botan {
-
-/*
-* IF Core
-*/
-class BOTAN_DLL IF_Core
- {
- public:
- BigInt public_op(const BigInt&) const;
- BigInt private_op(const BigInt&) const;
-
- IF_Core& operator=(const IF_Core&);
-
- IF_Core() { op = 0; }
- IF_Core(const IF_Core&);
-
- IF_Core(const BigInt&, const BigInt&);
-
- IF_Core(RandomNumberGenerator& rng,
- const BigInt&, const BigInt&,
- const BigInt&, const BigInt&, const BigInt&,
- const BigInt&, const BigInt&, const BigInt&);
-
- ~IF_Core() { delete op; }
- private:
- IF_Operation* op;
- Blinder blinder;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/if_algo/if_op.cpp b/botan/src/pubkey/if_algo/if_op.cpp
deleted file mode 100644
index 27aef45..0000000
--- a/botan/src/pubkey/if_algo/if_op.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-* IF (RSA/RW) Operation
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/if_op.h>
-#include <botan/numthry.h>
-
-namespace Botan {
-
-/*
-* Default_IF_Op Constructor
-*/
-Default_IF_Op::Default_IF_Op(const BigInt& e, const BigInt& n, const BigInt&,
- const BigInt& p, const BigInt& q,
- const BigInt& d1, const BigInt& d2,
- const BigInt& c)
- {
- powermod_e_n = Fixed_Exponent_Power_Mod(e, n);
-
- if(d1 != 0 && d2 != 0 && p != 0 && q != 0)
- {
- powermod_d1_p = Fixed_Exponent_Power_Mod(d1, p);
- powermod_d2_q = Fixed_Exponent_Power_Mod(d2, q);
- reducer = Modular_Reducer(p);
- this->c = c;
- this->q = q;
- }
- }
-
-/*
-* Default IF Private Operation
-*/
-BigInt Default_IF_Op::private_op(const BigInt& i) const
- {
- if(q == 0)
- throw Internal_Error("Default_IF_Op::private_op: No private key");
-
- BigInt j1 = powermod_d1_p(i);
- BigInt j2 = powermod_d2_q(i);
- j1 = reducer.reduce(sub_mul(j1, j2, c));
- return mul_add(j1, q, j2);
- }
-
-}
diff --git a/botan/src/pubkey/if_algo/if_op.h b/botan/src/pubkey/if_algo/if_op.h
deleted file mode 100644
index 516902f..0000000
--- a/botan/src/pubkey/if_algo/if_op.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-* IF Operations
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_IF_OP_H__
-#define BOTAN_IF_OP_H__
-
-#include <botan/bigint.h>
-#include <botan/pow_mod.h>
-#include <botan/reducer.h>
-
-namespace Botan {
-
-/*
-* IF Operation
-*/
-class BOTAN_DLL IF_Operation
- {
- public:
- virtual BigInt public_op(const BigInt&) const = 0;
- virtual BigInt private_op(const BigInt&) const = 0;
- virtual IF_Operation* clone() const = 0;
- virtual ~IF_Operation() {}
- };
-
-/*
-* Default IF Operation
-*/
-class BOTAN_DLL Default_IF_Op : public IF_Operation
- {
- public:
- BigInt public_op(const BigInt& i) const
- { return powermod_e_n(i); }
- BigInt private_op(const BigInt&) const;
-
- IF_Operation* clone() const { return new Default_IF_Op(*this); }
-
- Default_IF_Op(const BigInt&, const BigInt&, const BigInt&,
- const BigInt&, const BigInt&, const BigInt&,
- const BigInt&, const BigInt&);
- private:
- Fixed_Exponent_Power_Mod powermod_e_n, powermod_d1_p, powermod_d2_q;
- Modular_Reducer reducer;
- BigInt c, q;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/if_algo/info.txt b/botan/src/pubkey/if_algo/info.txt
deleted file mode 100644
index d2142f4..0000000
--- a/botan/src/pubkey/if_algo/info.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-realname "Integer Factorization Algorithms"
-
-define IF_PUBLIC_KEY_FAMILY
-
-load_on dep
-
-<add>
-if_algo.cpp
-if_algo.h
-if_core.cpp
-if_core.h
-if_op.cpp
-if_op.h
-</add>
-
-<requires>
-asn1
-bigint
-libstate
-numbertheory
-pk_codecs
-</requires>
diff --git a/botan/src/pubkey/info.txt b/botan/src/pubkey/info.txt
deleted file mode 100644
index ee8da5b..0000000
--- a/botan/src/pubkey/info.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-realname "Public Key Base"
-
-define PUBLIC_KEY_CRYPTO
-
-load_on auto
-
-<add>
-pk_algs.cpp
-pk_algs.h
-pk_filts.cpp
-pk_filts.h
-pk_keys.cpp
-pk_keys.h
-pubkey.cpp
-pubkey.h
-pubkey_enums.cpp
-pubkey_enums.h
-</add>
-
-<requires>
-alloc
-asn1
-bigint
-filters
-kdf
-oid_lookup
-pk_pad
-rng
-sym_algo
-</requires>
diff --git a/botan/src/pubkey/keypair/info.txt b/botan/src/pubkey/keypair/info.txt
deleted file mode 100644
index 9e75864..0000000
--- a/botan/src/pubkey/keypair/info.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-realname "Keypair Testing"
-
-define KEYPAIR_TESTING
-
-load_on auto
-
-<add>
-keypair.cpp
-keypair.h
-</add>
-
-<requires>
-libstate
-</requires>
diff --git a/botan/src/pubkey/keypair/keypair.cpp b/botan/src/pubkey/keypair/keypair.cpp
deleted file mode 100644
index 486577f..0000000
--- a/botan/src/pubkey/keypair/keypair.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-* Keypair Checks
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/keypair.h>
-#include <botan/look_pk.h>
-#include <memory>
-
-namespace Botan {
-
-namespace KeyPair {
-
-/*
-* Check an encryption key pair for consistency
-*/
-void check_key(RandomNumberGenerator& rng,
- PK_Encryptor* encryptor, PK_Decryptor* decryptor)
- {
- if(encryptor->maximum_input_size() == 0)
- return;
-
- std::auto_ptr<PK_Encryptor> enc(encryptor);
- std::auto_ptr<PK_Decryptor> dec(decryptor);
-
- SecureVector<byte> message(enc->maximum_input_size() - 1);
- rng.randomize(message, message.size());
-
- SecureVector<byte> ciphertext = enc->encrypt(message, rng);
- if(ciphertext == message)
- throw Self_Test_Failure("Encryption key pair consistency failure");
-
- SecureVector<byte> message2 = dec->decrypt(ciphertext);
- if(message != message2)
- throw Self_Test_Failure("Encryption key pair consistency failure");
- }
-
-/*
-* Check a signature key pair for consistency
-*/
-void check_key(RandomNumberGenerator& rng,
- PK_Signer* signer, PK_Verifier* verifier)
- {
- std::auto_ptr<PK_Signer> sig(signer);
- std::auto_ptr<PK_Verifier> ver(verifier);
-
- SecureVector<byte> message(16);
- rng.randomize(message, message.size());
-
- SecureVector<byte> signature;
-
- try
- {
- signature = sig->sign_message(message, rng);
- }
- catch(Encoding_Error)
- {
- return;
- }
-
- if(!ver->verify_message(message, signature))
- throw Self_Test_Failure("Signature key pair consistency failure");
-
- ++message[0];
- if(ver->verify_message(message, signature))
- throw Self_Test_Failure("Signature key pair consistency failure");
- }
-
-}
-
-}
diff --git a/botan/src/pubkey/keypair/keypair.h b/botan/src/pubkey/keypair/keypair.h
deleted file mode 100644
index b1d5c2d..0000000
--- a/botan/src/pubkey/keypair/keypair.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-* Keypair Checks
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_KEYPAIR_H__
-#define BOTAN_KEYPAIR_H__
-
-#include <botan/pubkey.h>
-
-namespace Botan {
-
-namespace KeyPair {
-
-/**
-* Tests whether the specified encryptor and decryptor are related to each other,
-* i.e. whether encrypting with the encryptor and consecutive decryption leads to
-* the original plaintext.
-* @param rng the rng to use
-* @param enc the encryptor to test
-* @param dec the decryptor to test
-* @throw Self_Test_Failure if the arguments are not related to each other
-*/
-BOTAN_DLL void check_key(RandomNumberGenerator& rng,
- PK_Encryptor* enc,
- PK_Decryptor* dec);
-
-/**
-* Tests whether the specified signer and verifier are related to each other,
-* i.e. whether a signature created with the signer and can be
-* successfully verified with the verifier.
-* @param rng the rng to use
-* @param sig the signer to test
-* @param ver the verifier to test
-* @throw Self_Test_Failure if the arguments are not related to each other
-*/
-BOTAN_DLL void check_key(RandomNumberGenerator& rng,
- PK_Signer* sig,
- PK_Verifier* ver);
-
-}
-
-}
-
-#endif
diff --git a/botan/src/pubkey/nr/info.txt b/botan/src/pubkey/nr/info.txt
deleted file mode 100644
index c89820a..0000000
--- a/botan/src/pubkey/nr/info.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-realname "Nyberg-Rueppel"
-
-define NYBERG_RUEPPEL
-
-load_on auto
-
-<add>
-nr.cpp
-nr.h
-nr_core.cpp
-nr_core.h
-nr_op.cpp
-nr_op.h
-</add>
-
-<requires>
-dl_algo
-dl_group
-keypair
-libstate
-numbertheory
-</requires>
diff --git a/botan/src/pubkey/nr/nr.cpp b/botan/src/pubkey/nr/nr.cpp
deleted file mode 100644
index ad4ae78..0000000
--- a/botan/src/pubkey/nr/nr.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-* Nyberg-Rueppel
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/nr.h>
-#include <botan/numthry.h>
-#include <botan/keypair.h>
-#include <botan/look_pk.h>
-
-namespace Botan {
-
-/*
-* NR_PublicKey Constructor
-*/
-NR_PublicKey::NR_PublicKey(const DL_Group& grp, const BigInt& y1)
- {
- group = grp;
- y = y1;
- X509_load_hook();
- }
-
-/*
-* Algorithm Specific X.509 Initialization Code
-*/
-void NR_PublicKey::X509_load_hook()
- {
- core = NR_Core(group, y);
- }
-
-/*
-* Nyberg-Rueppel Verification Function
-*/
-SecureVector<byte> NR_PublicKey::verify(const byte sig[], u32bit sig_len) const
- {
- return core.verify(sig, sig_len);
- }
-
-/*
-* Return the maximum input size in bits
-*/
-u32bit NR_PublicKey::max_input_bits() const
- {
- return (group_q().bits() - 1);
- }
-
-/*
-* Return the size of each portion of the sig
-*/
-u32bit NR_PublicKey::message_part_size() const
- {
- return group_q().bytes();
- }
-
-/*
-* Create a NR private key
-*/
-NR_PrivateKey::NR_PrivateKey(RandomNumberGenerator& rng,
- const DL_Group& grp,
- const BigInt& x_arg)
- {
- group = grp;
- x = x_arg;
-
- if(x == 0)
- {
- x = BigInt::random_integer(rng, 2, group_q() - 1);
- PKCS8_load_hook(rng, true);
- }
- else
- PKCS8_load_hook(rng, false);
- }
-
-/*
-* Algorithm Specific PKCS #8 Initialization Code
-*/
-void NR_PrivateKey::PKCS8_load_hook(RandomNumberGenerator& rng,
- bool generated)
- {
- if(y == 0)
- y = power_mod(group_g(), x, group_p());
- core = NR_Core(group, y, x);
-
- if(generated)
- gen_check(rng);
- else
- load_check(rng);
- }
-
-/*
-* Nyberg-Rueppel Signature Operation
-*/
-SecureVector<byte> NR_PrivateKey::sign(const byte in[], u32bit length,
- RandomNumberGenerator& rng) const
- {
- const BigInt& q = group_q();
-
- BigInt k;
- do
- k.randomize(rng, q.bits());
- while(k >= q);
-
- return core.sign(in, length, k);
- }
-
-/*
-* Check Private Nyberg-Rueppel Parameters
-*/
-bool NR_PrivateKey::check_key(RandomNumberGenerator& rng, bool strong) const
- {
- if(!DL_Scheme_PrivateKey::check_key(rng, strong) || x >= group_q())
- return false;
-
- if(!strong)
- return true;
-
- try
- {
- KeyPair::check_key(rng,
- get_pk_signer(*this, "EMSA1(SHA-1)"),
- get_pk_verifier(*this, "EMSA1(SHA-1)")
- );
- }
- catch(Self_Test_Failure)
- {
- return false;
- }
-
- return true;
- }
-
-}
diff --git a/botan/src/pubkey/nr/nr.h b/botan/src/pubkey/nr/nr.h
deleted file mode 100644
index 144c5ec..0000000
--- a/botan/src/pubkey/nr/nr.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-* Nyberg-Rueppel
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_NYBERG_RUEPPEL_H__
-#define BOTAN_NYBERG_RUEPPEL_H__
-
-#include <botan/dl_algo.h>
-#include <botan/nr_core.h>
-
-namespace Botan {
-
-/*
-* Nyberg-Rueppel Public Key
-*/
-class BOTAN_DLL NR_PublicKey : public PK_Verifying_with_MR_Key,
- public virtual DL_Scheme_PublicKey
- {
- public:
- std::string algo_name() const { return "NR"; }
-
- SecureVector<byte> verify(const byte[], u32bit) const;
- u32bit max_input_bits() const;
-
- DL_Group::Format group_format() const { return DL_Group::ANSI_X9_57; }
- u32bit message_parts() const { return 2; }
- u32bit message_part_size() const;
-
- NR_PublicKey() {}
- NR_PublicKey(const DL_Group&, const BigInt&);
- protected:
- NR_Core core;
- private:
- void X509_load_hook();
- };
-
-/*
-* Nyberg-Rueppel Private Key
-*/
-class BOTAN_DLL NR_PrivateKey : public NR_PublicKey,
- public PK_Signing_Key,
- public virtual DL_Scheme_PrivateKey
- {
- public:
- SecureVector<byte> sign(const byte[], u32bit,
- RandomNumberGenerator& rng) const;
-
- bool check_key(RandomNumberGenerator& rng, bool) const;
-
- NR_PrivateKey() {}
-
- NR_PrivateKey(RandomNumberGenerator&, const DL_Group&,
- const BigInt& = 0);
- private:
- void PKCS8_load_hook(RandomNumberGenerator&, bool = false);
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/nr/nr_core.cpp b/botan/src/pubkey/nr/nr_core.cpp
deleted file mode 100644
index afa1115..0000000
--- a/botan/src/pubkey/nr/nr_core.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-* NR Core
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/nr_core.h>
-#include <botan/numthry.h>
-#include <botan/pk_engine.h>
-#include <botan/parsing.h>
-#include <algorithm>
-
-namespace Botan {
-
-/*
-* NR_Core Constructor
-*/
-NR_Core::NR_Core(const DL_Group& group, const BigInt& y, const BigInt& x)
- {
- op = Engine_Core::nr_op(group, y, x);
- }
-
-/*
-* NR_Core Copy Constructor
-*/
-NR_Core::NR_Core(const NR_Core& core)
- {
- op = 0;
- if(core.op)
- op = core.op->clone();
- }
-
-/*
-* NR_Core Assignment Operator
-*/
-NR_Core& NR_Core::operator=(const NR_Core& core)
- {
- delete op;
- if(core.op)
- op = core.op->clone();
- return (*this);
- }
-
-/*
-* NR Verification Operation
-*/
-SecureVector<byte> NR_Core::verify(const byte in[], u32bit length) const
- {
- return op->verify(in, length);
- }
-
-/*
-* NR Signature Operation
-*/
-SecureVector<byte> NR_Core::sign(const byte in[], u32bit length,
- const BigInt& k) const
- {
- return op->sign(in, length, k);
- }
-
-}
diff --git a/botan/src/pubkey/nr/nr_core.h b/botan/src/pubkey/nr/nr_core.h
deleted file mode 100644
index 4837736..0000000
--- a/botan/src/pubkey/nr/nr_core.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-* NR Core
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_NR_CORE_H__
-#define BOTAN_NR_CORE_H__
-
-#include <botan/nr_op.h>
-#include <botan/dl_group.h>
-
-namespace Botan {
-
-/*
-* NR Core
-*/
-class BOTAN_DLL NR_Core
- {
- public:
- SecureVector<byte> sign(const byte[], u32bit, const BigInt&) const;
- SecureVector<byte> verify(const byte[], u32bit) const;
-
- NR_Core& operator=(const NR_Core&);
-
- NR_Core() { op = 0; }
- NR_Core(const NR_Core&);
- NR_Core(const DL_Group&, const BigInt&, const BigInt& = 0);
- ~NR_Core() { delete op; }
- private:
- NR_Operation* op;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/nr/nr_op.cpp b/botan/src/pubkey/nr/nr_op.cpp
deleted file mode 100644
index b5efa3d..0000000
--- a/botan/src/pubkey/nr/nr_op.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-* NR Operations
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/nr_op.h>
-
-namespace Botan {
-
-/*
-* Default_NR_Op Constructor
-*/
-Default_NR_Op::Default_NR_Op(const DL_Group& grp, const BigInt& y1,
- const BigInt& x1) : x(x1), y(y1), group(grp)
- {
- powermod_g_p = Fixed_Base_Power_Mod(group.get_g(), group.get_p());
- powermod_y_p = Fixed_Base_Power_Mod(y, group.get_p());
- mod_p = Modular_Reducer(group.get_p());
- mod_q = Modular_Reducer(group.get_q());
- }
-
-/*
-* Default NR Verify Operation
-*/
-SecureVector<byte> Default_NR_Op::verify(const byte in[], u32bit length) const
- {
- const BigInt& q = group.get_q();
-
- if(length != 2*q.bytes())
- return false;
-
- BigInt c(in, q.bytes());
- BigInt d(in + q.bytes(), q.bytes());
-
- if(c.is_zero() || c >= q || d >= q)
- throw Invalid_Argument("Default_NR_Op::verify: Invalid signature");
-
- BigInt i = mod_p.multiply(powermod_g_p(d), powermod_y_p(c));
- return BigInt::encode(mod_q.reduce(c - i));
- }
-
-/*
-* Default NR Sign Operation
-*/
-SecureVector<byte> Default_NR_Op::sign(const byte in[], u32bit length,
- const BigInt& k) const
- {
- if(x == 0)
- throw Internal_Error("Default_NR_Op::sign: No private key");
-
- const BigInt& q = group.get_q();
-
- BigInt f(in, length);
-
- if(f >= q)
- throw Invalid_Argument("Default_NR_Op::sign: Input is out of range");
-
- BigInt c = mod_q.reduce(powermod_g_p(k) + f);
- if(c.is_zero())
- throw Internal_Error("Default_NR_Op::sign: c was zero");
- BigInt d = mod_q.reduce(k - x * c);
-
- SecureVector<byte> output(2*q.bytes());
- c.binary_encode(output + (output.size() / 2 - c.bytes()));
- d.binary_encode(output + (output.size() - d.bytes()));
- return output;
- }
-
-}
diff --git a/botan/src/pubkey/nr/nr_op.h b/botan/src/pubkey/nr/nr_op.h
deleted file mode 100644
index cba1465..0000000
--- a/botan/src/pubkey/nr/nr_op.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-* NR Operations
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_NR_OPS_H__
-#define BOTAN_NR_OPS_H__
-
-#include <botan/pow_mod.h>
-#include <botan/numthry.h>
-#include <botan/reducer.h>
-#include <botan/dl_group.h>
-
-namespace Botan {
-
-/*
-* NR Operation
-*/
-class BOTAN_DLL NR_Operation
- {
- public:
- virtual SecureVector<byte> verify(const byte[], u32bit) const = 0;
- virtual SecureVector<byte> sign(const byte[], u32bit,
- const BigInt&) const = 0;
- virtual NR_Operation* clone() const = 0;
- virtual ~NR_Operation() {}
- };
-
-/*
-* Botan's Default NR Operation
-*/
-class BOTAN_DLL Default_NR_Op : public NR_Operation
- {
- public:
- SecureVector<byte> verify(const byte[], u32bit) const;
- SecureVector<byte> sign(const byte[], u32bit, const BigInt&) const;
-
- NR_Operation* clone() const { return new Default_NR_Op(*this); }
-
- Default_NR_Op(const DL_Group&, const BigInt&, const BigInt&);
- private:
- const BigInt x, y;
- const DL_Group group;
- Fixed_Base_Power_Mod powermod_g_p, powermod_y_p;
- Modular_Reducer mod_p, mod_q;
- };
-
-
-}
-
-#endif
diff --git a/botan/src/pubkey/pk_algs.cpp b/botan/src/pubkey/pk_algs.cpp
deleted file mode 100644
index 99d7294..0000000
--- a/botan/src/pubkey/pk_algs.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-* PK Key
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/pk_algs.h>
-
-#if defined(BOTAN_HAS_RSA)
- #include <botan/rsa.h>
-#endif
-
-#if defined(BOTAN_HAS_DSA)
- #include <botan/dsa.h>
-#endif
-
-#if defined(BOTAN_HAS_DIFFIE_HELLMAN)
- #include <botan/dh.h>
-#endif
-
-#if defined(BOTAN_HAS_ECDSA)
- #include <botan/ecdsa.h>
-#endif
-
-#if defined(BOTAN_HAS_NYBERG_RUEPPEL)
- #include <botan/nr.h>
-#endif
-
-#if defined(BOTAN_HAS_RW)
- #include <botan/rw.h>
-#endif
-
-#if defined(BOTAN_HAS_ELGAMAL)
- #include <botan/elgamal.h>
-#endif
-
-namespace Botan {
-
-/*
-* Get an PK public key object
-*/
-Public_Key* get_public_key(const std::string& alg_name)
- {
-#if defined(BOTAN_HAS_RSA)
- if(alg_name == "RSA") return new RSA_PublicKey;
-#endif
-
-#if defined(BOTAN_HAS_DSA)
- if(alg_name == "DSA") return new DSA_PublicKey;
-#endif
-
-#if defined(BOTAN_HAS_DIFFIE_HELLMAN)
- if(alg_name == "DH") return new DH_PublicKey;
-#endif
-
-#if defined(BOTAN_HAS_NYBERG_RUEPPEL)
- if(alg_name == "NR") return new NR_PublicKey;
-#endif
-
-#if defined(BOTAN_HAS_RW)
- if(alg_name == "RW") return new RW_PublicKey;
-#endif
-
-#if defined(BOTAN_HAS_ELG)
- if(alg_name == "ELG") return new ElGamal_PublicKey;
-#endif
-
-#if defined(BOTAN_HAS_ECDSA)
- if(alg_name == "ECDSA") return new ECDSA_PublicKey;
-#endif
-
- return 0;
- }
-
-/*
-* Get an PK private key object
-*/
-Private_Key* get_private_key(const std::string& alg_name)
- {
-#if defined(BOTAN_HAS_RSA)
- if(alg_name == "RSA") return new RSA_PrivateKey;
-#endif
-
-#if defined(BOTAN_HAS_DSA)
- if(alg_name == "DSA") return new DSA_PrivateKey;
-#endif
-
-#if defined(BOTAN_HAS_DIFFIE_HELLMAN)
- if(alg_name == "DH") return new DH_PrivateKey;
-#endif
-
-#if defined(BOTAN_HAS_NYBERG_RUEPPEL)
- if(alg_name == "NR") return new NR_PrivateKey;
-#endif
-
-#if defined(BOTAN_HAS_RW)
- if(alg_name == "RW") return new RW_PrivateKey;
-#endif
-
-#if defined(BOTAN_HAS_ELG)
- if(alg_name == "ELG") return new ElGamal_PrivateKey;
-#endif
-
-#if defined(BOTAN_HAS_ECDSA)
- if(alg_name == "ECDSA") return new ECDSA_PrivateKey;
-#endif
-
- return 0;
- }
-
-}
diff --git a/botan/src/pubkey/pk_algs.h b/botan/src/pubkey/pk_algs.h
deleted file mode 100644
index c41bf1a..0000000
--- a/botan/src/pubkey/pk_algs.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-* PK Key Factory
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_PK_KEY_FACTORY_H__
-#define BOTAN_PK_KEY_FACTORY_H__
-
-#include <botan/pk_keys.h>
-
-namespace Botan {
-
-/**
-* Get an empty public key object.
-* @param name the name of the desired public key algorithm
-* @return the public key object
-*/
-BOTAN_DLL Public_Key* get_public_key(const std::string&);
-
-/**
-* Get an empty private key object.
-* @param name the name of the desired public key algorithm
-* @return the private key object
-*/
-BOTAN_DLL Private_Key* get_private_key(const std::string&);
-
-}
-
-#endif
diff --git a/botan/src/pubkey/pk_codecs/info.txt b/botan/src/pubkey/pk_codecs/info.txt
deleted file mode 100644
index 96511a6..0000000
--- a/botan/src/pubkey/pk_codecs/info.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-realname "PK codecs (PKCS8, X.509)"
-
-load_on auto
-
-<add>
-pkcs8.h
-pkcs8.cpp
-x509_key.h
-x509_key.cpp
-</add>
-
-<requires>
-asn1
-filters
-oid_lookup
-pbe
-pem
-</requires>
diff --git a/botan/src/pubkey/pk_codecs/pkcs8.cpp b/botan/src/pubkey/pk_codecs/pkcs8.cpp
deleted file mode 100644
index 8a464ec..0000000
--- a/botan/src/pubkey/pk_codecs/pkcs8.cpp
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
-* PKCS #8
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/pkcs8.h>
-#include <botan/get_pbe.h>
-#include <botan/der_enc.h>
-#include <botan/ber_dec.h>
-#include <botan/asn1_obj.h>
-#include <botan/pk_algs.h>
-#include <botan/oids.h>
-#include <botan/pem.h>
-#include <memory>
-
-namespace Botan {
-
-namespace PKCS8 {
-
-namespace {
-
-/*
-* Get info from an EncryptedPrivateKeyInfo
-*/
-SecureVector<byte> PKCS8_extract(DataSource& source,
- AlgorithmIdentifier& pbe_alg_id)
- {
- SecureVector<byte> key_data;
-
- BER_Decoder(source)
- .start_cons(SEQUENCE)
- .decode(pbe_alg_id)
- .decode(key_data, OCTET_STRING)
- .verify_end();
-
- return key_data;
- }
-
-/*
-* PEM decode and/or decrypt a private key
-*/
-SecureVector<byte> PKCS8_decode(DataSource& source, const User_Interface& ui,
- AlgorithmIdentifier& pk_alg_id)
- {
- AlgorithmIdentifier pbe_alg_id;
- SecureVector<byte> key_data, key;
- bool is_encrypted = true;
-
- try {
- if(ASN1::maybe_BER(source) && !PEM_Code::matches(source))
- key_data = PKCS8_extract(source, pbe_alg_id);
- else
- {
- std::string label;
- key_data = PEM_Code::decode(source, label);
- if(label == "PRIVATE KEY")
- is_encrypted = false;
- else if(label == "ENCRYPTED PRIVATE KEY")
- {
- DataSource_Memory key_source(key_data);
- key_data = PKCS8_extract(key_source, pbe_alg_id);
- }
- else
- throw PKCS8_Exception("Unknown PEM label " + label);
- }
-
- if(key_data.is_empty())
- throw PKCS8_Exception("No key data found");
- }
- catch(Decoding_Error)
- {
- throw Decoding_Error("PKCS #8 private key decoding failed");
- }
-
- if(!is_encrypted)
- key = key_data;
-
- const u32bit MAX_TRIES = 3;
-
- u32bit tries = 0;
- while(true)
- {
- try {
- if(MAX_TRIES && tries >= MAX_TRIES)
- break;
-
- if(is_encrypted)
- {
- DataSource_Memory params(pbe_alg_id.parameters);
- std::auto_ptr<PBE> pbe(get_pbe(pbe_alg_id.oid, params));
-
- User_Interface::UI_Result result = User_Interface::OK;
- const std::string passphrase =
- ui.get_passphrase("PKCS #8 private key", source.id(), result);
-
- if(result == User_Interface::CANCEL_ACTION)
- break;
-
- pbe->set_key(passphrase);
- Pipe decryptor(pbe.release());
-
- decryptor.process_msg(key_data, key_data.size());
- key = decryptor.read_all();
- }
-
- u32bit version;
-
- BER_Decoder(key)
- .start_cons(SEQUENCE)
- .decode(version)
- .decode(pk_alg_id)
- .decode(key, OCTET_STRING)
- .discard_remaining()
- .end_cons();
-
- if(version != 0)
- throw Decoding_Error("PKCS #8: Unknown version number");
-
- break;
- }
- catch(Decoding_Error)
- {
- ++tries;
- }
- }
-
- if(key.is_empty())
- throw Decoding_Error("PKCS #8 private key decoding failed");
- return key;
- }
-
-}
-
-/*
-* DER or PEM encode a PKCS #8 private key
-*/
-void encode(const Private_Key& key, Pipe& pipe, X509_Encoding encoding)
- {
- std::auto_ptr<PKCS8_Encoder> encoder(key.pkcs8_encoder());
- if(!encoder.get())
- throw Encoding_Error("PKCS8::encode: Key does not support encoding");
-
- const u32bit PKCS8_VERSION = 0;
-
- SecureVector<byte> contents =
- DER_Encoder()
- .start_cons(SEQUENCE)
- .encode(PKCS8_VERSION)
- .encode(encoder->alg_id())
- .encode(encoder->key_bits(), OCTET_STRING)
- .end_cons()
- .get_contents();
-
- if(encoding == PEM)
- pipe.write(PEM_Code::encode(contents, "PRIVATE KEY"));
- else
- pipe.write(contents);
- }
-
-/*
-* Encode and encrypt a PKCS #8 private key
-*/
-void encrypt_key(const Private_Key& key,
- Pipe& pipe,
- RandomNumberGenerator& rng,
- const std::string& pass, const std::string& pbe_algo,
- X509_Encoding encoding)
- {
- const std::string DEFAULT_PBE = "PBE-PKCS5v20(SHA-1,TripleDES/CBC)";
-
- Pipe raw_key;
- raw_key.start_msg();
- encode(key, raw_key, RAW_BER);
- raw_key.end_msg();
-
- std::auto_ptr<PBE> pbe(get_pbe(((pbe_algo != "") ? pbe_algo : DEFAULT_PBE)));
-
- pbe->new_params(rng);
- pbe->set_key(pass);
-
- AlgorithmIdentifier pbe_algid(pbe->get_oid(), pbe->encode_params());
-
- Pipe key_encrytor(pbe.release());
- key_encrytor.process_msg(raw_key);
-
- SecureVector<byte> enc_key =
- DER_Encoder()
- .start_cons(SEQUENCE)
- .encode(pbe_algid)
- .encode(key_encrytor.read_all(), OCTET_STRING)
- .end_cons()
- .get_contents();
-
- if(encoding == PEM)
- pipe.write(PEM_Code::encode(enc_key, "ENCRYPTED PRIVATE KEY"));
- else
- pipe.write(enc_key);
- }
-
-/*
-* PEM encode a PKCS #8 private key
-*/
-std::string PEM_encode(const Private_Key& key)
- {
- Pipe pem;
- pem.start_msg();
- encode(key, pem, PEM);
- pem.end_msg();
- return pem.read_all_as_string();
- }
-
-/*
-* Encrypt and PEM encode a PKCS #8 private key
-*/
-std::string PEM_encode(const Private_Key& key,
- RandomNumberGenerator& rng,
- const std::string& pass,
- const std::string& pbe_algo)
- {
- if(pass == "")
- return PEM_encode(key);
-
- Pipe pem;
- pem.start_msg();
- encrypt_key(key, pem, rng, pass, pbe_algo, PEM);
- pem.end_msg();
- return pem.read_all_as_string();
- }
-
-/*
-* Extract a private key and return it
-*/
-Private_Key* load_key(DataSource& source,
- RandomNumberGenerator& rng,
- const User_Interface& ui)
- {
- AlgorithmIdentifier alg_id;
- SecureVector<byte> pkcs8_key = PKCS8_decode(source, ui, alg_id);
-
- const std::string alg_name = OIDS::lookup(alg_id.oid);
- if(alg_name == "" || alg_name == alg_id.oid.as_string())
- throw PKCS8_Exception("Unknown algorithm OID: " +
- alg_id.oid.as_string());
-
- std::auto_ptr<Private_Key> key(get_private_key(alg_name));
-
- if(!key.get())
- throw PKCS8_Exception("Unknown PK algorithm/OID: " + alg_name + ", " +
- alg_id.oid.as_string());
-
- std::auto_ptr<PKCS8_Decoder> decoder(key->pkcs8_decoder(rng));
-
- if(!decoder.get())
- throw Decoding_Error("Key does not support PKCS #8 decoding");
-
- decoder->alg_id(alg_id);
- decoder->key_bits(pkcs8_key);
-
- return key.release();
- }
-
-/*
-* Extract a private key and return it
-*/
-Private_Key* load_key(const std::string& fsname,
- RandomNumberGenerator& rng,
- const User_Interface& ui)
- {
- DataSource_Stream source(fsname, true);
- return PKCS8::load_key(source, rng, ui);
- }
-
-/*
-* Extract a private key and return it
-*/
-Private_Key* load_key(DataSource& source,
- RandomNumberGenerator& rng,
- const std::string& pass)
- {
- return PKCS8::load_key(source, rng, User_Interface(pass));
- }
-
-/*
-* Extract a private key and return it
-*/
-Private_Key* load_key(const std::string& fsname,
- RandomNumberGenerator& rng,
- const std::string& pass)
- {
- return PKCS8::load_key(fsname, rng, User_Interface(pass));
- }
-
-/*
-* Make a copy of this private key
-*/
-Private_Key* copy_key(const Private_Key& key,
- RandomNumberGenerator& rng)
- {
- Pipe bits;
-
- bits.start_msg();
- PKCS8::encode(key, bits);
- bits.end_msg();
-
- DataSource_Memory source(bits.read_all());
- return PKCS8::load_key(source, rng);
- }
-
-}
-
-}
diff --git a/botan/src/pubkey/pk_codecs/pkcs8.h b/botan/src/pubkey/pk_codecs/pkcs8.h
deleted file mode 100644
index 28008bd..0000000
--- a/botan/src/pubkey/pk_codecs/pkcs8.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
-* PKCS #8
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_PKCS8_H__
-#define BOTAN_PKCS8_H__
-
-#include <botan/x509_key.h>
-#include <botan/ui.h>
-
-namespace Botan {
-
-/**
-* PKCS #8 Private Key Encoder.
-*/
-class BOTAN_DLL PKCS8_Encoder
- {
- public:
- /**
- * Get the algorithm identifier associated with the scheme
- * this encoders key is part of.
- * @return the algorithm identifier
- */
- virtual AlgorithmIdentifier alg_id() const = 0;
-
- /**
- * Get the DER encoded key.
- * @return the DER encoded key
- */
- // FIXME: Why not SecureVector?
- virtual MemoryVector<byte> key_bits() const = 0;
- virtual ~PKCS8_Encoder() {}
- };
-
-/*
-* PKCS #8 Private Key Decoder
-*/
-class BOTAN_DLL PKCS8_Decoder
- {
- public:
- /**
- * Set the algorithm identifier associated with the scheme
- * this decoders key is part of.
- * @param alg_id the algorithm identifier
- */
- virtual void alg_id(const AlgorithmIdentifier&) = 0;
-
- /**
- * Set the DER encoded key.
- * @param key the DER encoded key
- */
- virtual void key_bits(const MemoryRegion<byte>&) = 0;
- virtual ~PKCS8_Decoder() {}
- };
-
-/**
-* PKCS #8 General Exception
-*/
-struct BOTAN_DLL PKCS8_Exception : public Decoding_Error
- {
- PKCS8_Exception(const std::string& error) :
- Decoding_Error("PKCS #8: " + error) {}
- };
-
-namespace PKCS8 {
-
-/**
-* Encode a private key into a pipe.
-* @param key the private key to encode
-* @param pipe the pipe to feed the encoded key into
-* @param enc the encoding type to use
-*/
-BOTAN_DLL void encode(const Private_Key& key, Pipe& pipe,
- X509_Encoding enc = PEM);
-
-/**
-* Encode and encrypt a private key into a pipe.
-* @param key the private key to encode
-* @param pipe the pipe to feed the encoded key into
-* @param pass the password to use for encryption
-* @param rng the rng to use
-* @param pbe_algo the name of the desired password-based encryption algorithm.
-* Provide an empty string to use the default PBE defined in the configuration
-* under base/default_pbe.
-* @param enc the encoding type to use
-*/
-BOTAN_DLL void encrypt_key(const Private_Key& key,
- Pipe& pipe,
- RandomNumberGenerator& rng,
- const std::string& pass,
- const std::string& pbe_algo = "",
- X509_Encoding enc = PEM);
-
-
-/**
-* Get a string containing a PEM encoded private key.
-* @param key the key to encode
-* @return the encoded key
-*/
-BOTAN_DLL std::string PEM_encode(const Private_Key& key);
-
-/**
-* Get a string containing a PEM encoded private key, encrypting it with a
-* password.
-* @param key the key to encode
-* @param rng the rng to use
-* @param pass the password to use for encryption
-* @param pbe_algo the name of the desired password-based encryption algorithm.
-* Provide an empty string to use the default PBE defined in the configuration
-* under base/default_pbe.
-*/
-BOTAN_DLL std::string PEM_encode(const Private_Key& key,
- RandomNumberGenerator& rng,
- const std::string& pass,
- const std::string& pbe_algo = "");
-
-/**
-* Load a key from a data source.
-* @param source the data source providing the encoded key
-* @param rng the rng to use
-* @param ui the user interface to be used for passphrase dialog
-* @return the loaded private key object
-*/
-BOTAN_DLL Private_Key* load_key(DataSource& source,
- RandomNumberGenerator& rng,
- const User_Interface& ui);
-
-/** Load a key from a data source.
-* @param source the data source providing the encoded key
-* @param rng the rng to use
-* @param pass the passphrase to decrypt the key. Provide an empty
-* string if the key is not encoded.
-* @return the loaded private key object
-*/
-BOTAN_DLL Private_Key* load_key(DataSource& source,
- RandomNumberGenerator& rng,
- const std::string& pass = "");
-
-/**
-* Load a key from a file.
-* @param filename the path to the file containing the encoded key
-* @param rng the rng to use
-* @param ui the user interface to be used for passphrase dialog
-* @return the loaded private key object
-*/
-BOTAN_DLL Private_Key* load_key(const std::string& filename,
- RandomNumberGenerator& rng,
- const User_Interface& ui);
-
-/** Load a key from a file.
-* @param filename the path to the file containing the encoded key
-* @param rng the rng to use
-* @param pass the passphrase to decrypt the key. Provide an empty
-* string if the key is not encoded.
-* @return the loaded private key object
-*/
-BOTAN_DLL Private_Key* load_key(const std::string& filename,
- RandomNumberGenerator& rng,
- const std::string& pass = "");
-
-/**
-* Copy an existing encoded key object.
-* @param key the key to copy
-* @param rng the rng to use
-* @return the new copy of the key
-*/
-BOTAN_DLL Private_Key* copy_key(const Private_Key& key,
- RandomNumberGenerator& rng);
-
-}
-
-}
-
-#endif
diff --git a/botan/src/pubkey/pk_codecs/x509_key.cpp b/botan/src/pubkey/pk_codecs/x509_key.cpp
deleted file mode 100644
index 455e627..0000000
--- a/botan/src/pubkey/pk_codecs/x509_key.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
-* X.509 Public Key
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/x509_key.h>
-#include <botan/filters.h>
-#include <botan/asn1_obj.h>
-#include <botan/der_enc.h>
-#include <botan/ber_dec.h>
-#include <botan/pk_algs.h>
-#include <botan/oids.h>
-#include <botan/pem.h>
-#include <memory>
-
-namespace Botan {
-
-namespace X509 {
-
-/*
-* DER or PEM encode a X.509 public key
-*/
-void encode(const Public_Key& key, Pipe& pipe, X509_Encoding encoding)
- {
- std::auto_ptr<X509_Encoder> encoder(key.x509_encoder());
- if(!encoder.get())
- throw Encoding_Error("X509::encode: Key does not support encoding");
-
- MemoryVector<byte> der =
- DER_Encoder()
- .start_cons(SEQUENCE)
- .encode(encoder->alg_id())
- .encode(encoder->key_bits(), BIT_STRING)
- .end_cons()
- .get_contents();
-
- if(encoding == PEM)
- pipe.write(PEM_Code::encode(der, "PUBLIC KEY"));
- else
- pipe.write(der);
- }
-
-/*
-* PEM encode a X.509 public key
-*/
-std::string PEM_encode(const Public_Key& key)
- {
- Pipe pem;
- pem.start_msg();
- encode(key, pem, PEM);
- pem.end_msg();
- return pem.read_all_as_string();
- }
-
-/*
-* Extract a public key and return it
-*/
-Public_Key* load_key(DataSource& source)
- {
- try {
- AlgorithmIdentifier alg_id;
- MemoryVector<byte> key_bits;
-
- if(ASN1::maybe_BER(source) && !PEM_Code::matches(source))
- {
- BER_Decoder(source)
- .start_cons(SEQUENCE)
- .decode(alg_id)
- .decode(key_bits, BIT_STRING)
- .verify_end()
- .end_cons();
- }
- else
- {
- DataSource_Memory ber(
- PEM_Code::decode_check_label(source, "PUBLIC KEY")
- );
-
- BER_Decoder(ber)
- .start_cons(SEQUENCE)
- .decode(alg_id)
- .decode(key_bits, BIT_STRING)
- .verify_end()
- .end_cons();
- }
-
- if(key_bits.is_empty())
- throw Decoding_Error("X.509 public key decoding failed");
-
- const std::string alg_name = OIDS::lookup(alg_id.oid);
- if(alg_name == "")
- throw Decoding_Error("Unknown algorithm OID: " +
- alg_id.oid.as_string());
-
- std::auto_ptr<Public_Key> key_obj(get_public_key(alg_name));
- if(!key_obj.get())
- throw Decoding_Error("Unknown PK algorithm/OID: " + alg_name + ", " +
- alg_id.oid.as_string());
-
- std::auto_ptr<X509_Decoder> decoder(key_obj->x509_decoder());
-
- if(!decoder.get())
- throw Decoding_Error("Key does not support X.509 decoding");
-
- decoder->alg_id(alg_id);
- decoder->key_bits(key_bits);
-
- return key_obj.release();
- }
- catch(Decoding_Error)
- {
- throw Decoding_Error("X.509 public key decoding failed");
- }
- }
-
-/*
-* Extract a public key and return it
-*/
-Public_Key* load_key(const std::string& fsname)
- {
- DataSource_Stream source(fsname, true);
- return X509::load_key(source);
- }
-
-/*
-* Extract a public key and return it
-*/
-Public_Key* load_key(const MemoryRegion<byte>& mem)
- {
- DataSource_Memory source(mem);
- return X509::load_key(source);
- }
-
-/*
-* Make a copy of this public key
-*/
-Public_Key* copy_key(const Public_Key& key)
- {
- Pipe bits;
- bits.start_msg();
- X509::encode(key, bits, RAW_BER);
- bits.end_msg();
- DataSource_Memory source(bits.read_all());
- return X509::load_key(source);
- }
-
-/*
-* Find the allowable key constraints
-*/
-Key_Constraints find_constraints(const Public_Key& pub_key,
- Key_Constraints limits)
- {
- const Public_Key* key = &pub_key;
- u32bit constraints = 0;
-
- if(dynamic_cast<const PK_Encrypting_Key*>(key))
- constraints |= KEY_ENCIPHERMENT | DATA_ENCIPHERMENT;
-
- if(dynamic_cast<const PK_Key_Agreement_Key*>(key))
- constraints |= KEY_AGREEMENT;
-
- if(dynamic_cast<const PK_Verifying_wo_MR_Key*>(key) ||
- dynamic_cast<const PK_Verifying_with_MR_Key*>(key))
- constraints |= DIGITAL_SIGNATURE | NON_REPUDIATION;
-
- if(limits)
- constraints &= limits;
-
- return Key_Constraints(constraints);
- }
-
-}
-
-}
diff --git a/botan/src/pubkey/pk_codecs/x509_key.h b/botan/src/pubkey/pk_codecs/x509_key.h
deleted file mode 100644
index 9404b7e..0000000
--- a/botan/src/pubkey/pk_codecs/x509_key.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-* X.509 Public Key
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_X509_PUBLIC_KEY_H__
-#define BOTAN_X509_PUBLIC_KEY_H__
-
-#include <botan/pipe.h>
-#include <botan/pk_keys.h>
-#include <botan/alg_id.h>
-#include <botan/pubkey_enums.h>
-
-namespace Botan {
-
-/**
-* This class represents abstract X.509 public key encoders.
-*/
-class BOTAN_DLL X509_Encoder
- {
- public:
- virtual AlgorithmIdentifier alg_id() const = 0;
- virtual MemoryVector<byte> key_bits() const = 0;
- virtual ~X509_Encoder() {}
- };
-
-/**
-* This class represents abstract X.509 public key decoders.
-*/
-class BOTAN_DLL X509_Decoder
- {
- public:
- virtual void alg_id(const AlgorithmIdentifier&) = 0;
- virtual void key_bits(const MemoryRegion<byte>&) = 0;
- virtual ~X509_Decoder() {}
- };
-
-/**
-* This namespace contains functions for handling X509 objects.
-*/
-namespace X509 {
-
-/*
-* X.509 Public Key Encoding/Decoding
-*/
-
-/**
-* Encode a key into a pipe.
-* @param key the public key to encode
-* @param pipe the pipe to feed the encoded key into
-* @param enc the encoding type to use
-*/
-BOTAN_DLL void encode(const Public_Key& key, Pipe& pipe,
- X509_Encoding enc = PEM);
-
-/**
-* PEM encode a public key into a string.
-* @param key the key to encode
-* @return the PEM encoded key
-*/
-BOTAN_DLL std::string PEM_encode(const Public_Key& key);
-
-/**
-* Create a public key from a data source.
-* @param source the source providing the DER or PEM encoded key
-* @return the new public key object
-*/
-BOTAN_DLL Public_Key* load_key(DataSource& source);
-
-/**
-* Create a public key from a string.
-* @param enc the string containing the PEM encoded key
-* @return the new public key object
-*/
-BOTAN_DLL Public_Key* load_key(const std::string& enc);
-
-/**
-* Create a public key from a memory region.
-* @param enc the memory region containing the DER or PEM encoded key
-* @return the new public key object
-*/
-BOTAN_DLL Public_Key* load_key(const MemoryRegion<byte>& enc);
-
-/**
-* Copy a key.
-* @param key the public key to copy
-* @return the new public key object
-*/
-BOTAN_DLL Public_Key* copy_key(const Public_Key& key);
-
-/**
-* Create the key constraints for a specific public key.
-* @param pub_key the public key from which the basic set of
-* constraints to be placed in the return value is derived
-* @param limits additional limits that will be incorporated into the
-* return value
-* @return the combination of key type specific constraints and
-* additional limits
-*/
-
-BOTAN_DLL Key_Constraints find_constraints(const Public_Key& pub_key,
- Key_Constraints limits);
-
-}
-
-}
-
-#endif
diff --git a/botan/src/pubkey/pk_filts.cpp b/botan/src/pubkey/pk_filts.cpp
deleted file mode 100644
index 18da9c1..0000000
--- a/botan/src/pubkey/pk_filts.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-* PK Filters
-* (C) 1999-2009 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/pk_filts.h>
-
-namespace Botan {
-
-/*
-* Append to the buffer
-*/
-void PK_Encryptor_Filter::write(const byte input[], u32bit length)
- {
- buffer.append(input, length);
- }
-
-/*
-* Encrypt the message
-*/
-void PK_Encryptor_Filter::end_msg()
- {
- send(cipher->encrypt(buffer, buffer.size(), rng));
- buffer.destroy();
- }
-
-/*
-* Append to the buffer
-*/
-void PK_Decryptor_Filter::write(const byte input[], u32bit length)
- {
- buffer.append(input, length);
- }
-
-/*
-* Decrypt the message
-*/
-void PK_Decryptor_Filter::end_msg()
- {
- send(cipher->decrypt(buffer, buffer.size()));
- buffer.destroy();
- }
-
-/*
-* Add more data
-*/
-void PK_Signer_Filter::write(const byte input[], u32bit length)
- {
- signer->update(input, length);
- }
-
-/*
-* Sign the message
-*/
-void PK_Signer_Filter::end_msg()
- {
- send(signer->signature(rng));
- }
-
-/*
-* Add more data
-*/
-void PK_Verifier_Filter::write(const byte input[], u32bit length)
- {
- verifier->update(input, length);
- }
-
-/*
-* Verify the message
-*/
-void PK_Verifier_Filter::end_msg()
- {
- if(signature.is_empty())
- throw Exception("PK_Verifier_Filter: No signature to check against");
- bool is_valid = verifier->check_signature(signature, signature.size());
- send((is_valid ? 1 : 0));
- }
-
-/*
-* Set the signature to check
-*/
-void PK_Verifier_Filter::set_signature(const byte sig[], u32bit length)
- {
- signature.set(sig, length);
- }
-
-/*
-* Set the signature to check
-*/
-void PK_Verifier_Filter::set_signature(const MemoryRegion<byte>& sig)
- {
- signature = sig;
- }
-
-/*
-* PK_Verifier_Filter Constructor
-*/
-PK_Verifier_Filter::PK_Verifier_Filter(PK_Verifier* v, const byte sig[],
- u32bit length) :
- verifier(v), signature(sig, length)
- {
- }
-
-/*
-* PK_Verifier_Filter Constructor
-*/
-PK_Verifier_Filter::PK_Verifier_Filter(PK_Verifier* v,
- const MemoryRegion<byte>& sig) :
- verifier(v), signature(sig)
- {
- }
-
-}
diff --git a/botan/src/pubkey/pk_filts.h b/botan/src/pubkey/pk_filts.h
deleted file mode 100644
index 8bf3fc2..0000000
--- a/botan/src/pubkey/pk_filts.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-* PK Filters
-* (C) 1999-2009 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_PK_FILTERS_H__
-#define BOTAN_PK_FILTERS_H__
-
-#include <botan/filter.h>
-#include <botan/pubkey.h>
-
-namespace Botan {
-
-/*
-* PK_Encryptor Filter
-*/
-class BOTAN_DLL PK_Encryptor_Filter : public Filter
- {
- public:
- void write(const byte[], u32bit);
- void end_msg();
- PK_Encryptor_Filter(PK_Encryptor* c,
- RandomNumberGenerator& rng_ref) :
- cipher(c), rng(rng_ref) {}
- ~PK_Encryptor_Filter() { delete cipher; }
- private:
- PK_Encryptor* cipher;
- RandomNumberGenerator& rng;
- SecureVector<byte> buffer;
- };
-
-/*
-* PK_Decryptor Filter
-*/
-class BOTAN_DLL PK_Decryptor_Filter : public Filter
- {
- public:
- void write(const byte[], u32bit);
- void end_msg();
- PK_Decryptor_Filter(PK_Decryptor* c) : cipher(c) {}
- ~PK_Decryptor_Filter() { delete cipher; }
- private:
- PK_Decryptor* cipher;
- SecureVector<byte> buffer;
- };
-
-/*
-* PK_Signer Filter
-*/
-class BOTAN_DLL PK_Signer_Filter : public Filter
- {
- public:
- void write(const byte[], u32bit);
- void end_msg();
-
- PK_Signer_Filter(PK_Signer* s,
- RandomNumberGenerator& rng_ref) :
- signer(s), rng(rng_ref) {}
-
- ~PK_Signer_Filter() { delete signer; }
- private:
- PK_Signer* signer;
- RandomNumberGenerator& rng;
- };
-
-/*
-* PK_Verifier Filter
-*/
-class BOTAN_DLL PK_Verifier_Filter : public Filter
- {
- public:
- void write(const byte[], u32bit);
- void end_msg();
-
- void set_signature(const byte[], u32bit);
- void set_signature(const MemoryRegion<byte>&);
-
- PK_Verifier_Filter(PK_Verifier* v) : verifier(v) {}
- PK_Verifier_Filter(PK_Verifier*, const byte[], u32bit);
- PK_Verifier_Filter(PK_Verifier*, const MemoryRegion<byte>&);
- ~PK_Verifier_Filter() { delete verifier; }
- private:
- PK_Verifier* verifier;
- SecureVector<byte> signature;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/pk_keys.cpp b/botan/src/pubkey/pk_keys.cpp
deleted file mode 100644
index b931585..0000000
--- a/botan/src/pubkey/pk_keys.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-* PK Key Types
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/pk_keys.h>
-#include <botan/oids.h>
-
-namespace Botan {
-
-/*
-* Default OID access
-*/
-OID Public_Key::get_oid() const
- {
- try {
- return OIDS::lookup(algo_name());
- }
- catch(Lookup_Error)
- {
- throw Lookup_Error("PK algo " + algo_name() + " has no defined OIDs");
- }
- }
-
-/*
-* Run checks on a loaded public key
-*/
-void Public_Key::load_check(RandomNumberGenerator& rng) const
- {
- if(!check_key(rng, BOTAN_PUBLIC_KEY_STRONG_CHECKS_ON_LOAD))
- throw Invalid_Argument(algo_name() + ": Invalid public key");
- }
-
-/*
-* Run checks on a loaded private key
-*/
-void Private_Key::load_check(RandomNumberGenerator& rng) const
- {
- if(!check_key(rng, BOTAN_PRIVATE_KEY_STRONG_CHECKS_ON_LOAD))
- throw Invalid_Argument(algo_name() + ": Invalid private key");
- }
-
-/*
-* Run checks on a generated private key
-*/
-void Private_Key::gen_check(RandomNumberGenerator& rng) const
- {
- if(!check_key(rng, BOTAN_PRIVATE_KEY_STRONG_CHECKS_ON_GENERATE))
- throw Self_Test_Failure(algo_name() + " private key generation failed");
- }
-
-}
diff --git a/botan/src/pubkey/pk_keys.h b/botan/src/pubkey/pk_keys.h
deleted file mode 100644
index 5b61257..0000000
--- a/botan/src/pubkey/pk_keys.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-* PK Key Types
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_PK_KEYS_H__
-#define BOTAN_PK_KEYS_H__
-
-#include <botan/secmem.h>
-#include <botan/asn1_oid.h>
-#include <botan/rng.h>
-
-namespace Botan {
-
-/**
-* Public Key Base Class.
-*/
-class BOTAN_DLL Public_Key
- {
- public:
- /**
- * Get the name of the underlying public key scheme.
- * @return the name of the public key scheme
- */
- virtual std::string algo_name() const = 0;
-
- /**
- * Get the OID of the underlying public key scheme.
- * @return the OID of the public key scheme
- */
- virtual OID get_oid() const;
-
- /**
- * Test the key values for consistency.
- * @param rng rng to use
- * @param strong whether to perform strong and lengthy version
- * of the test
- * @return true if the test is passed
- */
- virtual bool check_key(RandomNumberGenerator&, bool) const
- { return true; }
-
- /**
- * Find out the number of message parts supported by this scheme.
- * @return the number of message parts
- */
- virtual u32bit message_parts() const { return 1; }
-
- /**
- * Find out the message part size supported by this scheme/key.
- * @return the size of the message parts
- */
- virtual u32bit message_part_size() const { return 0; }
-
- /**
- * Get the maximum message size in bits supported by this public key.
- * @return the maximum message in bits
- */
- virtual u32bit max_input_bits() const = 0;
-
- /**
- * Get an X509 encoder that can be used to encode this key in X509 format.
- * @return an X509 encoder for this key
- */
- virtual class X509_Encoder* x509_encoder() const = 0;
-
- /**
- * Get an X509 decoder that can be used to set the values of this
- * key based on an X509 encoded key object.
- * @return an X509 decoder for this key
- */
- virtual class X509_Decoder* x509_decoder() = 0;
-
- virtual ~Public_Key() {}
- protected:
- virtual void load_check(RandomNumberGenerator&) const;
- };
-
-/**
-* Private Key Base Class
-*/
-class BOTAN_DLL Private_Key : public virtual Public_Key
- {
- public:
- /**
- * Get a PKCS#8 encoder that can be used to encode this key in
- * PKCS#8 format.
- * @return an PKCS#8 encoder for this key
- */
- virtual class PKCS8_Encoder* pkcs8_encoder() const
- { return 0; }
-
- /**
- * Get an PKCS#8 decoder that can be used to set the values of this key
- * based on an PKCS#8 encoded key object.
- * @return an PKCS#8 decoder for this key
- */
- virtual class PKCS8_Decoder* pkcs8_decoder(RandomNumberGenerator&)
- { return 0; }
- protected:
- void load_check(RandomNumberGenerator&) const;
- void gen_check(RandomNumberGenerator&) const;
- };
-
-/**
-* PK Encrypting Key.
-*/
-class BOTAN_DLL PK_Encrypting_Key : public virtual Public_Key
- {
- public:
- virtual SecureVector<byte> encrypt(const byte[], u32bit,
- RandomNumberGenerator&) const = 0;
- virtual ~PK_Encrypting_Key() {}
- };
-
-/**
-* PK Decrypting Key
-*/
-class BOTAN_DLL PK_Decrypting_Key : public virtual Private_Key
- {
- public:
- virtual SecureVector<byte> decrypt(const byte[], u32bit) const = 0;
- virtual ~PK_Decrypting_Key() {}
- };
-
-/**
-* PK Signing Key
-*/
-class BOTAN_DLL PK_Signing_Key : public virtual Private_Key
- {
- public:
- virtual SecureVector<byte> sign(const byte[], u32bit,
- RandomNumberGenerator& rng) const = 0;
- virtual ~PK_Signing_Key() {}
- };
-
-/**
-* PK Verifying Key, Message Recovery Version
-*/
-class BOTAN_DLL PK_Verifying_with_MR_Key : public virtual Public_Key
- {
- public:
- virtual SecureVector<byte> verify(const byte[], u32bit) const = 0;
- virtual ~PK_Verifying_with_MR_Key() {}
- };
-
-/**
-* PK Verifying Key, No Message Recovery Version
-*/
-class BOTAN_DLL PK_Verifying_wo_MR_Key : public virtual Public_Key
- {
- public:
- virtual bool verify(const byte[], u32bit,
- const byte[], u32bit) const = 0;
- virtual ~PK_Verifying_wo_MR_Key() {}
- };
-
-/**
-* PK Secret Value Derivation Key
-*/
-class BOTAN_DLL PK_Key_Agreement_Key : public virtual Private_Key
- {
- public:
- virtual SecureVector<byte> derive_key(const byte[], u32bit) const = 0;
- virtual MemoryVector<byte> public_value() const = 0;
- virtual ~PK_Key_Agreement_Key() {}
- };
-
-/*
-* Typedefs
-*/
-typedef PK_Key_Agreement_Key PK_KA_Key;
-typedef Public_Key X509_PublicKey;
-typedef Private_Key PKCS8_PrivateKey;
-
-}
-
-#endif
diff --git a/botan/src/pubkey/pubkey.cpp b/botan/src/pubkey/pubkey.cpp
deleted file mode 100644
index 4ddaa6f..0000000
--- a/botan/src/pubkey/pubkey.cpp
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
-* Public Key Base
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/pubkey.h>
-#include <botan/der_enc.h>
-#include <botan/ber_dec.h>
-#include <botan/bigint.h>
-#include <botan/parsing.h>
-#include <botan/bit_ops.h>
-#include <memory>
-
-namespace Botan {
-
-/*
-* Encrypt a message
-*/
-SecureVector<byte> PK_Encryptor::encrypt(const byte in[], u32bit len,
- RandomNumberGenerator& rng) const
- {
- return enc(in, len, rng);
- }
-
-/*
-* Encrypt a message
-*/
-SecureVector<byte> PK_Encryptor::encrypt(const MemoryRegion<byte>& in,
- RandomNumberGenerator& rng) const
- {
- return enc(in.begin(), in.size(), rng);
- }
-
-/*
-* Decrypt a message
-*/
-SecureVector<byte> PK_Decryptor::decrypt(const byte in[], u32bit len) const
- {
- return dec(in, len);
- }
-
-/*
-* Decrypt a message
-*/
-SecureVector<byte> PK_Decryptor::decrypt(const MemoryRegion<byte>& in) const
- {
- return dec(in.begin(), in.size());
- }
-
-/*
-* PK_Encryptor_MR_with_EME Constructor
-*/
-PK_Encryptor_MR_with_EME::PK_Encryptor_MR_with_EME(const PK_Encrypting_Key& k,
- EME* eme_obj) :
- key(k), encoder(eme_obj)
- {
- }
-
-/*
-* Encrypt a message
-*/
-SecureVector<byte>
-PK_Encryptor_MR_with_EME::enc(const byte msg[],
- u32bit length,
- RandomNumberGenerator& rng) const
- {
- SecureVector<byte> message;
- if(encoder)
- message = encoder->encode(msg, length, key.max_input_bits(), rng);
- else
- message.set(msg, length);
-
- if(8*(message.size() - 1) + high_bit(message[0]) > key.max_input_bits())
- throw Exception("PK_Encryptor_MR_with_EME: Input is too large");
-
- return key.encrypt(message, message.size(), rng);
- }
-
-/*
-* Return the max size, in bytes, of a message
-*/
-u32bit PK_Encryptor_MR_with_EME::maximum_input_size() const
- {
- if(!encoder)
- return (key.max_input_bits() / 8);
- else
- return encoder->maximum_input_size(key.max_input_bits());
- }
-
-/*
-* PK_Decryptor_MR_with_EME Constructor
-*/
-PK_Decryptor_MR_with_EME::PK_Decryptor_MR_with_EME(const PK_Decrypting_Key& k,
- EME* eme_obj) :
- key(k), encoder(eme_obj)
- {
- }
-
-/*
-* Decrypt a message
-*/
-SecureVector<byte> PK_Decryptor_MR_with_EME::dec(const byte msg[],
- u32bit length) const
- {
- try {
- SecureVector<byte> decrypted = key.decrypt(msg, length);
- if(encoder)
- return encoder->decode(decrypted, key.max_input_bits());
- else
- return decrypted;
- }
- catch(Invalid_Argument)
- {
- throw Exception("PK_Decryptor_MR_with_EME: Input is invalid");
- }
- catch(Decoding_Error)
- {
- throw Exception("PK_Decryptor_MR_with_EME: Input is invalid");
- }
- }
-
-/*
-* PK_Signer Constructor
-*/
-PK_Signer::PK_Signer(const PK_Signing_Key& k, EMSA* emsa_obj) :
- key(k), emsa(emsa_obj)
- {
- sig_format = IEEE_1363;
- }
-
-/*
-* Set the signature format
-*/
-void PK_Signer::set_output_format(Signature_Format format)
- {
- if(key.message_parts() == 1 && format != IEEE_1363)
- throw Invalid_State("PK_Signer: Cannot set the output format for " +
- key.algo_name() + " keys");
- sig_format = format;
- }
-
-/*
-* Sign a message
-*/
-SecureVector<byte> PK_Signer::sign_message(const byte msg[], u32bit length,
- RandomNumberGenerator& rng)
- {
- update(msg, length);
- return signature(rng);
- }
-
-/*
-* Sign a message
-*/
-SecureVector<byte> PK_Signer::sign_message(const MemoryRegion<byte>& msg,
- RandomNumberGenerator& rng)
- {
- return sign_message(msg, msg.size(), rng);
- }
-
-/*
-* Add more to the message to be signed
-*/
-void PK_Signer::update(const byte in[], u32bit length)
- {
- emsa->update(in, length);
- }
-
-/*
-* Add more to the message to be signed
-*/
-void PK_Signer::update(byte in)
- {
- update(&in, 1);
- }
-
-/*
-* Add more to the message to be signed
-*/
-void PK_Signer::update(const MemoryRegion<byte>& in)
- {
- update(in, in.size());
- }
-
-/*
-* Create a signature
-*/
-SecureVector<byte> PK_Signer::signature(RandomNumberGenerator& rng)
- {
- SecureVector<byte> encoded = emsa->encoding_of(emsa->raw_data(),
- key.max_input_bits(),
- rng);
-
- SecureVector<byte> plain_sig = key.sign(encoded, encoded.size(), rng);
-
- if(key.message_parts() == 1 || sig_format == IEEE_1363)
- return plain_sig;
-
- if(sig_format == DER_SEQUENCE)
- {
- if(plain_sig.size() % key.message_parts())
- throw Encoding_Error("PK_Signer: strange signature size found");
- const u32bit SIZE_OF_PART = plain_sig.size() / key.message_parts();
-
- std::vector<BigInt> sig_parts(key.message_parts());
- for(u32bit j = 0; j != sig_parts.size(); ++j)
- sig_parts[j].binary_decode(plain_sig + SIZE_OF_PART*j, SIZE_OF_PART);
-
- return DER_Encoder()
- .start_cons(SEQUENCE)
- .encode_list(sig_parts)
- .end_cons()
- .get_contents();
- }
- else
- throw Encoding_Error("PK_Signer: Unknown signature format " +
- to_string(sig_format));
- }
-
-/*
-* PK_Verifier Constructor
-*/
-PK_Verifier::PK_Verifier(EMSA* emsa_obj)
- {
- emsa = emsa_obj;
- sig_format = IEEE_1363;
- }
-
-/*
-* PK_Verifier Destructor
-*/
-PK_Verifier::~PK_Verifier()
- {
- delete emsa;
- }
-
-/*
-* Set the signature format
-*/
-void PK_Verifier::set_input_format(Signature_Format format)
- {
- if(key_message_parts() == 1 && format != IEEE_1363)
- throw Invalid_State("PK_Verifier: This algorithm always uses IEEE 1363");
- sig_format = format;
- }
-
-/*
-* Verify a message
-*/
-bool PK_Verifier::verify_message(const MemoryRegion<byte>& msg,
- const MemoryRegion<byte>& sig)
- {
- return verify_message(msg, msg.size(), sig, sig.size());
- }
-
-/*
-* Verify a message
-*/
-bool PK_Verifier::verify_message(const byte msg[], u32bit msg_length,
- const byte sig[], u32bit sig_length)
- {
- update(msg, msg_length);
- return check_signature(sig, sig_length);
- }
-
-/*
-* Append to the message
-*/
-void PK_Verifier::update(const byte in[], u32bit length)
- {
- emsa->update(in, length);
- }
-
-/*
-* Append to the message
-*/
-void PK_Verifier::update(byte in)
- {
- update(&in, 1);
- }
-
-/*
-* Append to the message
-*/
-void PK_Verifier::update(const MemoryRegion<byte>& in)
- {
- update(in, in.size());
- }
-
-/*
-* Check a signature
-*/
-bool PK_Verifier::check_signature(const MemoryRegion<byte>& sig)
- {
- return check_signature(sig, sig.size());
- }
-
-/*
-* Check a signature
-*/
-bool PK_Verifier::check_signature(const byte sig[], u32bit length)
- {
- try {
- if(sig_format == IEEE_1363)
- return validate_signature(emsa->raw_data(), sig, length);
- else if(sig_format == DER_SEQUENCE)
- {
- BER_Decoder decoder(sig, length);
- BER_Decoder ber_sig = decoder.start_cons(SEQUENCE);
-
- u32bit count = 0;
- SecureVector<byte> real_sig;
- while(ber_sig.more_items())
- {
- BigInt sig_part;
- ber_sig.decode(sig_part);
- real_sig.append(BigInt::encode_1363(sig_part,
- key_message_part_size()));
- ++count;
- }
- if(count != key_message_parts())
- throw Decoding_Error("PK_Verifier: signature size invalid");
-
- return validate_signature(emsa->raw_data(),
- real_sig, real_sig.size());
- }
- else
- throw Decoding_Error("PK_Verifier: Unknown signature format " +
- to_string(sig_format));
- }
- catch(Invalid_Argument) { return false; }
- catch(Decoding_Error) { return false; }
- }
-
-/*
-* Verify a signature
-*/
-bool PK_Verifier_with_MR::validate_signature(const MemoryRegion<byte>& msg,
- const byte sig[], u32bit sig_len)
- {
- SecureVector<byte> output_of_key = key.verify(sig, sig_len);
- return emsa->verify(output_of_key, msg, key.max_input_bits());
- }
-
-/*
-* Verify a signature
-*/
-bool PK_Verifier_wo_MR::validate_signature(const MemoryRegion<byte>& msg,
- const byte sig[], u32bit sig_len)
- {
- Null_RNG rng;
-
- SecureVector<byte> encoded =
- emsa->encoding_of(msg, key.max_input_bits(), rng);
-
- return key.verify(encoded, encoded.size(), sig, sig_len);
- }
-
-/*
-* PK_Key_Agreement Constructor
-*/
-PK_Key_Agreement::PK_Key_Agreement(const PK_Key_Agreement_Key& k,
- KDF* kdf_obj) :
- key(k), kdf(kdf_obj)
- {
- }
-
-/*
-* Perform Key Agreement Operation
-*/
-SymmetricKey PK_Key_Agreement::derive_key(u32bit key_len,
- const byte in[], u32bit in_len,
- const std::string& params) const
- {
- return derive_key(key_len, in, in_len,
- reinterpret_cast<const byte*>(params.data()),
- params.length());
- }
-
-/*
-* Perform Key Agreement Operation
-*/
-SymmetricKey PK_Key_Agreement::derive_key(u32bit key_len, const byte in[],
- u32bit in_len, const byte params[],
- u32bit params_len) const
- {
- OctetString z = key.derive_key(in, in_len);
- if(!kdf)
- return z;
-
- return kdf->derive_key(key_len, z.bits_of(), params, params_len);
- }
-
-}
diff --git a/botan/src/pubkey/pubkey.h b/botan/src/pubkey/pubkey.h
deleted file mode 100644
index c73a54d..0000000
--- a/botan/src/pubkey/pubkey.h
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
-* Public Key Interface
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_PUBKEY_H__
-#define BOTAN_PUBKEY_H__
-
-#include <botan/pk_keys.h>
-#include <botan/symkey.h>
-#include <botan/rng.h>
-#include <botan/eme.h>
-#include <botan/emsa.h>
-#include <botan/kdf.h>
-
-namespace Botan {
-
-/**
-* The two types of signature format supported by Botan.
-*/
-enum Signature_Format { IEEE_1363, DER_SEQUENCE };
-
-/**
-* Public Key Encryptor
-*/
-class BOTAN_DLL PK_Encryptor
- {
- public:
-
- /**
- * Encrypt a message.
- * @param in the message as a byte array
- * @param length the length of the above byte array
- * @param rng the random number source to use
- * @return the encrypted message
- */
- SecureVector<byte> encrypt(const byte in[], u32bit length,
- RandomNumberGenerator& rng) const;
-
- /**
- * Encrypt a message.
- * @param in the message
- * @param rng the random number source to use
- * @return the encrypted message
- */
- SecureVector<byte> encrypt(const MemoryRegion<byte>& in,
- RandomNumberGenerator& rng) const;
-
- /**
- * Return the maximum allowed message size in bytes.
- * @return the maximum message size in bytes
- */
- virtual u32bit maximum_input_size() const = 0;
-
- virtual ~PK_Encryptor() {}
- private:
- virtual SecureVector<byte> enc(const byte[], u32bit,
- RandomNumberGenerator&) const = 0;
- };
-
-/**
-* Public Key Decryptor
-*/
-class BOTAN_DLL PK_Decryptor
- {
- public:
- /**
- * Decrypt a ciphertext.
- * @param in the ciphertext as a byte array
- * @param length the length of the above byte array
- * @return the decrypted message
- */
- SecureVector<byte> decrypt(const byte in[], u32bit length) const;
-
- /**
- * Decrypt a ciphertext.
- * @param in the ciphertext
- * @return the decrypted message
- */
- SecureVector<byte> decrypt(const MemoryRegion<byte>& in) const;
-
- virtual ~PK_Decryptor() {}
- private:
- virtual SecureVector<byte> dec(const byte[], u32bit) const = 0;
- };
-
-/**
-* Public Key Signer. Use the sign_message() functions for small
-* messages. Use multiple calls update() to process large messages and
-* generate the signature by finally calling signature().
-*/
-class BOTAN_DLL PK_Signer
- {
- public:
- /**
- * Sign a message.
- * @param in the message to sign as a byte array
- * @param length the length of the above byte array
- * @param rng the rng to use
- * @return the signature
- */
- SecureVector<byte> sign_message(const byte in[], u32bit length,
- RandomNumberGenerator& rng);
-
- /**
- * Sign a message.
- * @param in the message to sign
- * @param rng the rng to use
- * @return the signature
- */
- SecureVector<byte> sign_message(const MemoryRegion<byte>& in,
- RandomNumberGenerator& rng);
-
- /**
- * Add a message part (single byte).
- * @param the byte to add
- */
- void update(byte in);
-
- /**
- * Add a message part.
- * @param in the message part to add as a byte array
- * @param length the length of the above byte array
- */
- void update(const byte in[], u32bit length);
-
- /**
- * Add a message part.
- * @param in the message part to add
- */
- void update(const MemoryRegion<byte>& in);
-
- /**
- * Get the signature of the so far processed message (provided by the
- * calls to update()).
- * @param rng the rng to use
- * @return the signature of the total message
- */
- SecureVector<byte> signature(RandomNumberGenerator& rng);
-
- /**
- * Set the output format of the signature.
- * @param format the signature format to use
- */
- void set_output_format(Signature_Format format);
-
- /**
- * Construct a PK Signer.
- * @param key the key to use inside this signer
- * @param emsa the EMSA to use
- * An example would be "EMSA1(SHA-224)".
- */
- PK_Signer(const PK_Signing_Key& key, EMSA* emsa);
-
- ~PK_Signer() { delete emsa; }
- private:
- PK_Signer(const PK_Signer&);
- PK_Signer& operator=(const PK_Signer&);
-
- const PK_Signing_Key& key;
- Signature_Format sig_format;
- EMSA* emsa;
- };
-
-/**
-* Public Key Verifier. Use the verify_message() functions for small
-* messages. Use multiple calls update() to process large messages and
-* verify the signature by finally calling check_signature().
-*/
-class BOTAN_DLL PK_Verifier
- {
- public:
- /**
- * Verify a signature.
- * @param msg the message that the signature belongs to, as a byte array
- * @param msg_length the length of the above byte array msg
- * @param sig the signature as a byte array
- * @param sig_length the length of the above byte array sig
- * @return true if the signature is valid
- */
- bool verify_message(const byte msg[], u32bit msg_length,
- const byte sig[], u32bit sig_length);
- /**
- * Verify a signature.
- * @param msg the message that the signature belongs to
- * @param sig the signature
- * @return true if the signature is valid
- */
- bool verify_message(const MemoryRegion<byte>& msg,
- const MemoryRegion<byte>& sig);
-
- /**
- * Add a message part (single byte) of the message corresponding to the
- * signature to be verified.
- * @param msg_part the byte to add
- */
- void update(byte msg_part);
-
- /**
- * Add a message part of the message corresponding to the
- * signature to be verified.
- * @param msg_part the new message part as a byte array
- * @param length the length of the above byte array
- */
- void update(const byte msg_part[], u32bit length);
-
- /**
- * Add a message part of the message corresponding to the
- * signature to be verified.
- * @param msg_part the new message part
- */
- void update(const MemoryRegion<byte>& msg_part);
-
- /**
- * Check the signature of the buffered message, i.e. the one build
- * by successive calls to update.
- * @param sig the signature to be verified as a byte array
- * @param length the length of the above byte array
- * @return true if the signature is valid, false otherwise
- */
- bool check_signature(const byte sig[], u32bit length);
-
- /**
- * Check the signature of the buffered message, i.e. the one build
- * by successive calls to update.
- * @param sig the signature to be verified
- * @return true if the signature is valid, false otherwise
- */
- bool check_signature(const MemoryRegion<byte>& sig);
-
- /**
- * Set the format of the signatures fed to this verifier.
- * @param format the signature format to use
- */
- void set_input_format(Signature_Format format);
-
- /**
- * Construct a PK Verifier.
- * @param emsa the EMSA to use
- * An example would be new EMSA1(new SHA_224)
- */
- PK_Verifier(EMSA* emsa);
-
- virtual ~PK_Verifier();
- protected:
- virtual bool validate_signature(const MemoryRegion<byte>&,
- 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;
- private:
- PK_Verifier(const PK_Verifier&);
- PK_Verifier& operator=(const PK_Verifier&);
- };
-
-/*
-* Key Agreement
-*/
-class BOTAN_DLL 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;
-
- /**
- * Construct a PK Key Agreement.
- * @param key the key to use
- * @param kdf the KDF to use
- */
- PK_Key_Agreement(const PK_Key_Agreement_Key& key, KDF* kdf);
-
- ~PK_Key_Agreement() { delete kdf; }
- private:
- PK_Key_Agreement(const PK_Key_Agreement_Key&);
- PK_Key_Agreement& operator=(const PK_Key_Agreement&);
-
- const PK_Key_Agreement_Key& key;
- KDF* kdf;
- };
-
-/**
-* Encryption with an MR algorithm and an EME.
-*/
-class BOTAN_DLL PK_Encryptor_MR_with_EME : public PK_Encryptor
- {
- public:
- u32bit maximum_input_size() const;
-
- /**
- * Construct an instance.
- * @param key the key to use inside the decryptor
- * @param eme the EME to use
- */
- PK_Encryptor_MR_with_EME(const PK_Encrypting_Key& key,
- EME* eme);
-
- ~PK_Encryptor_MR_with_EME() { delete encoder; }
- private:
- PK_Encryptor_MR_with_EME(const PK_Encryptor_MR_with_EME&);
- PK_Encryptor_MR_with_EME& operator=(const PK_Encryptor_MR_with_EME&);
-
- SecureVector<byte> enc(const byte[], u32bit,
- RandomNumberGenerator& rng) const;
-
- const PK_Encrypting_Key& key;
- const EME* encoder;
- };
-
-/**
-* Decryption with an MR algorithm and an EME.
-*/
-class BOTAN_DLL PK_Decryptor_MR_with_EME : public PK_Decryptor
- {
- public:
- /**
- * Construct an instance.
- * @param key the key to use inside the encryptor
- * @param eme the EME to use
- */
- PK_Decryptor_MR_with_EME(const PK_Decrypting_Key& key,
- EME* eme);
-
- ~PK_Decryptor_MR_with_EME() { delete encoder; }
- private:
- PK_Decryptor_MR_with_EME(const PK_Decryptor_MR_with_EME&);
- PK_Decryptor_MR_with_EME& operator=(const PK_Decryptor_MR_with_EME&);
-
- SecureVector<byte> dec(const byte[], u32bit) const;
-
- const PK_Decrypting_Key& key;
- const EME* encoder;
- };
-
-/**
-* Public Key Verifier with Message Recovery.
-*/
-class BOTAN_DLL PK_Verifier_with_MR : public PK_Verifier
- {
- public:
- /**
- * Construct an instance.
- * @param key the key to use inside the verifier
- * @param emsa_name the name of the EMSA to use
- */
- PK_Verifier_with_MR(const PK_Verifying_with_MR_Key& k,
- EMSA* emsa_obj) : PK_Verifier(emsa_obj), key(k) {}
-
- private:
- PK_Verifier_with_MR(const PK_Verifying_with_MR_Key&);
- PK_Verifier_with_MR& operator=(const PK_Verifier_with_MR&);
-
- bool validate_signature(const MemoryRegion<byte>&, 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 BOTAN_DLL PK_Verifier_wo_MR : public PK_Verifier
- {
- public:
- /**
- * Construct an instance.
- * @param key the key to use inside the verifier
- * @param emsa_name the name of the EMSA to use
- */
- PK_Verifier_wo_MR(const PK_Verifying_wo_MR_Key& k,
- EMSA* emsa_obj) : PK_Verifier(emsa_obj), key(k) {}
-
- private:
- PK_Verifier_wo_MR(const PK_Verifying_wo_MR_Key&);
- PK_Verifier_wo_MR& operator=(const PK_Verifier_wo_MR&);
-
- bool validate_signature(const MemoryRegion<byte>&, 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
diff --git a/botan/src/pubkey/pubkey_enums.cpp b/botan/src/pubkey/pubkey_enums.cpp
deleted file mode 100644
index 327107d..0000000
--- a/botan/src/pubkey/pubkey_enums.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-* KeyUsage
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/pubkey_enums.h>
-#include <botan/ber_dec.h>
-
-namespace Botan {
-
-namespace BER {
-
-/*
-* Decode a BER encoded KeyUsage
-*/
-void decode(BER_Decoder& source, Key_Constraints& key_usage)
- {
- BER_Object obj = source.get_next_object();
-
- if(obj.type_tag != BIT_STRING || obj.class_tag != UNIVERSAL)
- throw BER_Bad_Tag("Bad tag for usage constraint",
- obj.type_tag, obj.class_tag);
- if(obj.value.size() != 2 && obj.value.size() != 3)
- throw BER_Decoding_Error("Bad size for BITSTRING in usage constraint");
- if(obj.value[0] >= 8)
- throw BER_Decoding_Error("Invalid unused bits in usage constraint");
-
- const byte mask = (0xFF << obj.value[0]);
- obj.value[obj.value.size()-1] &= mask;
-
- u16bit usage = 0;
- for(u32bit j = 1; j != obj.value.size(); ++j)
- usage = (obj.value[j] << 8) | usage;
-
- key_usage = Key_Constraints(usage);
- }
-
-}
-
-}
diff --git a/botan/src/pubkey/pubkey_enums.h b/botan/src/pubkey/pubkey_enums.h
deleted file mode 100644
index 53e319f..0000000
--- a/botan/src/pubkey/pubkey_enums.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-* Enumerations
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_ENUMS_H__
-#define BOTAN_ENUMS_H__
-
-#include <botan/ber_dec.h>
-
-namespace Botan {
-
-/**
-* X.509v3 Key Constraints.
-*/
-enum Key_Constraints {
- NO_CONSTRAINTS = 0,
- DIGITAL_SIGNATURE = 32768,
- NON_REPUDIATION = 16384,
- KEY_ENCIPHERMENT = 8192,
- DATA_ENCIPHERMENT = 4096,
- KEY_AGREEMENT = 2048,
- KEY_CERT_SIGN = 1024,
- CRL_SIGN = 512,
- ENCIPHER_ONLY = 256,
- DECIPHER_ONLY = 128
-};
-
-/**
-* BER Decoding Function for key constraints
-*/
-namespace BER {
-
-void BOTAN_DLL decode(BER_Decoder&, Key_Constraints&);
-
-}
-
-/**
-* X.509v2 CRL Reason Code.
-*/
-enum CRL_Code {
- UNSPECIFIED = 0,
- KEY_COMPROMISE = 1,
- CA_COMPROMISE = 2,
- AFFILIATION_CHANGED = 3,
- SUPERSEDED = 4,
- CESSATION_OF_OPERATION = 5,
- CERTIFICATE_HOLD = 6,
- REMOVE_FROM_CRL = 8,
- PRIVLEDGE_WITHDRAWN = 9,
- AA_COMPROMISE = 10,
-
- DELETE_CRL_ENTRY = 0xFF00,
- OCSP_GOOD = 0xFF01,
- OCSP_UNKNOWN = 0xFF02
-};
-
-/*
-* Various Other Enumerations
-*/
-
-/**
-* The two types of X509 encoding supported by Botan.
-*/
-enum X509_Encoding { RAW_BER, PEM };
-
-/**
-* Value to encode in case of no path limit in the X509
-* BasicConstraints extension.
-*/
-static const u32bit NO_CERT_PATH_LIMIT = 0xFFFFFFF0;
-
-}
-
-#endif
diff --git a/botan/src/pubkey/rsa/info.txt b/botan/src/pubkey/rsa/info.txt
deleted file mode 100644
index 7729fd8..0000000
--- a/botan/src/pubkey/rsa/info.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-realname "RSA"
-
-define RSA
-
-load_on auto
-
-<add>
-rsa.cpp
-rsa.h
-</add>
-
-<requires>
-if_algo
-keypair
-libstate
-numbertheory
-</requires>
diff --git a/botan/src/pubkey/rsa/rsa.cpp b/botan/src/pubkey/rsa/rsa.cpp
deleted file mode 100644
index 83e6e1b..0000000
--- a/botan/src/pubkey/rsa/rsa.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-* RSA
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/rsa.h>
-#include <botan/parsing.h>
-#include <botan/numthry.h>
-#include <botan/keypair.h>
-#include <botan/look_pk.h>
-
-namespace Botan {
-
-/*
-* RSA_PublicKey Constructor
-*/
-RSA_PublicKey::RSA_PublicKey(const BigInt& mod, const BigInt& exp)
- {
- n = mod;
- e = exp;
- X509_load_hook();
- }
-
-/*
-* RSA Public Operation
-*/
-BigInt RSA_PublicKey::public_op(const BigInt& i) const
- {
- if(i >= n)
- throw Invalid_Argument(algo_name() + "::public_op: input is too large");
- return core.public_op(i);
- }
-
-/*
-* RSA Encryption Function
-*/
-SecureVector<byte> RSA_PublicKey::encrypt(const byte in[], u32bit len,
- RandomNumberGenerator&) const
- {
- BigInt i(in, len);
- return BigInt::encode_1363(public_op(i), n.bytes());
- }
-
-/*
-* RSA Verification Function
-*/
-SecureVector<byte> RSA_PublicKey::verify(const byte in[], u32bit len) const
- {
- BigInt i(in, len);
- return BigInt::encode(public_op(i));
- }
-
-/*
-* Create a RSA private key
-*/
-RSA_PrivateKey::RSA_PrivateKey(RandomNumberGenerator& rng,
- u32bit bits, u32bit exp)
- {
- if(bits < 512)
- throw Invalid_Argument(algo_name() + ": Can't make a key that is only " +
- to_string(bits) + " bits long");
- if(exp < 3 || exp % 2 == 0)
- throw Invalid_Argument(algo_name() + ": Invalid encryption exponent");
-
- e = exp;
- p = random_prime(rng, (bits + 1) / 2, e);
- q = random_prime(rng, bits - p.bits(), e);
- d = inverse_mod(e, lcm(p - 1, q - 1));
-
- PKCS8_load_hook(rng, true);
-
- if(n.bits() != bits)
- throw Self_Test_Failure(algo_name() + " private key generation failed");
- }
-
-/*
-* RSA_PrivateKey Constructor
-*/
-RSA_PrivateKey::RSA_PrivateKey(RandomNumberGenerator& rng,
- const BigInt& prime1, const BigInt& prime2,
- const BigInt& exp, const BigInt& d_exp,
- const BigInt& mod)
- {
- p = prime1;
- q = prime2;
- e = exp;
- d = d_exp;
- n = mod;
-
- if(d == 0)
- d = inverse_mod(e, lcm(p - 1, q - 1));
-
- PKCS8_load_hook(rng);
- }
-
-/*
-* RSA Private Operation
-*/
-BigInt RSA_PrivateKey::private_op(const byte in[], u32bit length) const
- {
- BigInt i(in, length);
- if(i >= n)
- throw Invalid_Argument(algo_name() + "::private_op: input is too large");
-
- BigInt r = core.private_op(i);
- if(i != public_op(r))
- throw Self_Test_Failure(algo_name() + " private operation check failed");
- return r;
- }
-
-/*
-* RSA Decryption Operation
-*/
-SecureVector<byte> RSA_PrivateKey::decrypt(const byte in[], u32bit len) const
- {
- return BigInt::encode(private_op(in, len));
- }
-
-/*
-* RSA Signature Operation
-*/
-SecureVector<byte> RSA_PrivateKey::sign(const byte in[], u32bit len,
- RandomNumberGenerator&) const
- {
- return BigInt::encode_1363(private_op(in, len), n.bytes());
- }
-
-/*
-* Check Private RSA Parameters
-*/
-bool RSA_PrivateKey::check_key(RandomNumberGenerator& rng, bool strong) const
- {
- if(!IF_Scheme_PrivateKey::check_key(rng, strong))
- return false;
-
- if(!strong)
- return true;
-
- if((e * d) % lcm(p - 1, q - 1) != 1)
- return false;
-
- try
- {
- KeyPair::check_key(rng,
- get_pk_encryptor(*this, "EME1(SHA-1)"),
- get_pk_decryptor(*this, "EME1(SHA-1)")
- );
-
- KeyPair::check_key(rng,
- get_pk_signer(*this, "EMSA4(SHA-1)"),
- get_pk_verifier(*this, "EMSA4(SHA-1)")
- );
- }
- catch(Self_Test_Failure)
- {
- return false;
- }
-
- return true;
- }
-
-}
diff --git a/botan/src/pubkey/rsa/rsa.h b/botan/src/pubkey/rsa/rsa.h
deleted file mode 100644
index f07533a..0000000
--- a/botan/src/pubkey/rsa/rsa.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-* RSA
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_RSA_H__
-#define BOTAN_RSA_H__
-
-#include <botan/if_algo.h>
-
-namespace Botan {
-
-/**
-* RSA Public Key
-*/
-class BOTAN_DLL RSA_PublicKey : public PK_Encrypting_Key,
- public PK_Verifying_with_MR_Key,
- public virtual IF_Scheme_PublicKey
- {
- public:
- std::string algo_name() const { return "RSA"; }
-
- SecureVector<byte> encrypt(const byte[], u32bit,
- RandomNumberGenerator& rng) const;
-
- SecureVector<byte> verify(const byte[], u32bit) const;
-
- RSA_PublicKey() {}
- RSA_PublicKey(const BigInt&, const BigInt&);
- protected:
- BigInt public_op(const BigInt&) const;
- };
-
-/**
-* RSA Private Key class.
-*/
-class BOTAN_DLL RSA_PrivateKey : public RSA_PublicKey,
- public PK_Decrypting_Key,
- public PK_Signing_Key,
- public IF_Scheme_PrivateKey
- {
- public:
- SecureVector<byte> sign(const byte[], u32bit,
- RandomNumberGenerator&) const;
-
- SecureVector<byte> decrypt(const byte[], u32bit) const;
-
- bool check_key(RandomNumberGenerator& rng, bool) const;
-
- /**
- * Default constructor, does not set any internal values. Use this
- * constructor if you wish to decode a DER or PEM encoded key.
- */
- RSA_PrivateKey() {}
-
- /**
- * Construct a private key from the specified parameters.
- * @param rng the random number generator to use
- * @param prime1 the first prime
- * @param prime2 the second prime
- * @param exp the exponent
- * @param d_exp if specified, this has to be d with
- * exp * d = 1 mod (p - 1, q - 1). Leave it as 0 if you wish to
- * the constructor to calculate it.
- * @param n if specified, this must be n = p * q. Leave it as 0
- * if you wish to the constructor to calculate it.
- */
- RSA_PrivateKey(RandomNumberGenerator& rng,
- const BigInt& p, const BigInt& q, const BigInt& e,
- const BigInt& d = 0, const BigInt& n = 0);
-
- /**
- * Create a new private key with the specified bit length
- * @param rng the random number generator to use
- * @param bits the desired bit length of the private key
- * @param exp the public exponent to be used
- */
- RSA_PrivateKey(RandomNumberGenerator& rng,
- u32bit bits, u32bit exp = 65537);
- private:
- BigInt private_op(const byte[], u32bit) const;
- };
-
-}
-
-#endif
diff --git a/botan/src/pubkey/rw/info.txt b/botan/src/pubkey/rw/info.txt
deleted file mode 100644
index ada6c37..0000000
--- a/botan/src/pubkey/rw/info.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-realname "Rabin-Williams"
-
-define RW
-
-load_on auto
-
-<add>
-rw.cpp
-rw.h
-</add>
-
-<requires>
-if_algo
-keypair
-libstate
-numbertheory
-</requires>
diff --git a/botan/src/pubkey/rw/rw.cpp b/botan/src/pubkey/rw/rw.cpp
deleted file mode 100644
index def0ae6..0000000
--- a/botan/src/pubkey/rw/rw.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-* Rabin-Williams
-* (C) 1999-2008 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#include <botan/rw.h>
-#include <botan/numthry.h>
-#include <botan/keypair.h>
-#include <botan/look_pk.h>
-#include <botan/parsing.h>
-#include <algorithm>
-
-namespace Botan {
-
-/*
-* RW_PublicKey Constructor
-*/
-RW_PublicKey::RW_PublicKey(const BigInt& mod, const BigInt& exp)
- {
- n = mod;
- e = exp;
- X509_load_hook();
- }
-
-/*
-* Rabin-Williams Public Operation
-*/
-BigInt RW_PublicKey::public_op(const BigInt& i) const
- {
- if((i > (n >> 1)) || i.is_negative())
- throw Invalid_Argument(algo_name() + "::public_op: i > n / 2 || i < 0");
-
- BigInt r = core.public_op(i);
- if(r % 16 == 12) return r;
- if(r % 8 == 6) return 2*r;
-
- r = n - r;
- if(r % 16 == 12) return r;
- if(r % 8 == 6) return 2*r;
-
- throw Invalid_Argument(algo_name() + "::public_op: Invalid input");
- }
-
-/*
-* Rabin-Williams Verification Function
-*/
-SecureVector<byte> RW_PublicKey::verify(const byte in[], u32bit len) const
- {
- BigInt i(in, len);
- return BigInt::encode(public_op(i));
- }
-
-/*
-* Create a Rabin-Williams private key
-*/
-RW_PrivateKey::RW_PrivateKey(RandomNumberGenerator& rng,
- u32bit bits, u32bit exp)
- {
- if(bits < 512)
- throw Invalid_Argument(algo_name() + ": Can't make a key that is only " +
- to_string(bits) + " bits long");
- if(exp < 2 || exp % 2 == 1)
- throw Invalid_Argument(algo_name() + ": Invalid encryption exponent");
-
- e = exp;
- p = random_prime(rng, (bits + 1) / 2, e / 2, 3, 4);
- q = random_prime(rng, bits - p.bits(), e / 2, ((p % 8 == 3) ? 7 : 3), 8);
- d = inverse_mod(e, lcm(p - 1, q - 1) >> 1);
-
- PKCS8_load_hook(rng, true);
-
- if(n.bits() != bits)
- throw Self_Test_Failure(algo_name() + " private key generation failed");
- }
-
-/*
-* RW_PrivateKey Constructor
-*/
-RW_PrivateKey::RW_PrivateKey(RandomNumberGenerator& rng,
- const BigInt& prime1, const BigInt& prime2,
- const BigInt& exp, const BigInt& d_exp,
- const BigInt& mod)
- {
- p = prime1;
- q = prime2;
- e = exp;
- d = d_exp;
- n = mod;
-
- if(d == 0)
- d = inverse_mod(e, lcm(p - 1, q - 1) >> 1);
-
- PKCS8_load_hook(rng);
- }
-
-/*
-* Rabin-Williams Signature Operation
-*/
-SecureVector<byte> RW_PrivateKey::sign(const byte in[], u32bit len,
- RandomNumberGenerator&) const
- {
- BigInt i(in, len);
- if(i >= n || i % 16 != 12)
- throw Invalid_Argument(algo_name() + "::sign: Invalid input");
-
- BigInt r;
- if(jacobi(i, n) == 1) r = core.private_op(i);
- else r = core.private_op(i >> 1);
-
- r = std::min(r, n - r);
- if(i != public_op(r))
- throw Self_Test_Failure(algo_name() + " private operation check failed");
-
- return BigInt::encode_1363(r, n.bytes());
- }
-
-/*
-* Check Private Rabin-Williams Parameters
-*/
-bool RW_PrivateKey::check_key(RandomNumberGenerator& rng, bool strong) const
- {
- if(!IF_Scheme_PrivateKey::check_key(rng, strong))
- return false;
-
- if(!strong)
- return true;
-
- if((e * d) % (lcm(p - 1, q - 1) / 2) != 1)
- return false;
-
- try
- {
- KeyPair::check_key(rng,
- get_pk_signer(*this, "EMSA2(SHA-1)"),
- get_pk_verifier(*this, "EMSA2(SHA-1)")
- );
- }
- catch(Self_Test_Failure)
- {
- return false;
- }
-
- return true;
- }
-
-}
diff --git a/botan/src/pubkey/rw/rw.h b/botan/src/pubkey/rw/rw.h
deleted file mode 100644
index 900e5eb..0000000
--- a/botan/src/pubkey/rw/rw.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-* Rabin-Williams
-* (C) 1999-2007 Jack Lloyd
-*
-* Distributed under the terms of the Botan license
-*/
-
-#ifndef BOTAN_RW_H__
-#define BOTAN_RW_H__
-
-#include <botan/if_algo.h>
-
-namespace Botan {
-
-/*
-* Rabin-Williams Public Key
-*/
-class BOTAN_DLL RW_PublicKey : public PK_Verifying_with_MR_Key,
- public virtual IF_Scheme_PublicKey
- {
- public:
- std::string algo_name() const { return "RW"; }
-
- SecureVector<byte> verify(const byte[], u32bit) const;
-
- RW_PublicKey() {}
- RW_PublicKey(const BigInt&, const BigInt&);
- protected:
- BigInt public_op(const BigInt&) const;
- };
-
-/*
-* Rabin-Williams Private Key
-*/
-class BOTAN_DLL RW_PrivateKey : public RW_PublicKey,
- public PK_Signing_Key,
- public IF_Scheme_PrivateKey
- {
- public:
- SecureVector<byte> sign(const byte[], u32bit,
- RandomNumberGenerator& rng) const;
-
- bool check_key(RandomNumberGenerator& rng, bool) const;
-
- RW_PrivateKey() {}
-
- RW_PrivateKey(RandomNumberGenerator&,
- const BigInt&, const BigInt&, const BigInt&,
- const BigInt& = 0, const BigInt& = 0);
-
- RW_PrivateKey(RandomNumberGenerator& rng, u32bit bits, u32bit = 2);
- };
-
-}
-
-#endif