diff options
Diffstat (limited to 'src/cms')
-rw-r--r-- | src/cms/cms_dalg.cpp | 1 | ||||
-rw-r--r-- | src/cms/cms_ealg.cpp | 30 | ||||
-rw-r--r-- | src/cms/cms_enc.h | 2 | ||||
-rw-r--r-- | src/cms/info.txt | 2 |
4 files changed, 14 insertions, 21 deletions
diff --git a/src/cms/cms_dalg.cpp b/src/cms/cms_dalg.cpp index 8d559f9a9..2a380b596 100644 --- a/src/cms/cms_dalg.cpp +++ b/src/cms/cms_dalg.cpp @@ -10,7 +10,6 @@ #include <botan/ber_dec.h> #include <botan/oids.h> #include <botan/hash.h> -#include <botan/look_pk.h> #include <botan/bigint.h> #include <botan/libstate.h> #include <memory> diff --git a/src/cms/cms_ealg.cpp b/src/cms/cms_ealg.cpp index 60479a820..3ddf8a39e 100644 --- a/src/cms/cms_ealg.cpp +++ b/src/cms/cms_ealg.cpp @@ -6,15 +6,15 @@ */ #include <botan/cms_enc.h> -#include <botan/der_enc.h> -#include <botan/x509find.h> #include <botan/bigint.h> -#include <botan/oids.h> #include <botan/cbc.h> +#include <botan/der_enc.h> #include <botan/hash.h> -#include <botan/look_pk.h> #include <botan/libstate.h> +#include <botan/oids.h> #include <botan/pipe.h> +#include <botan/pubkey.h> +#include <botan/x509find.h> #include <memory> namespace Botan { @@ -107,12 +107,7 @@ void CMS_Encoder::encrypt(RandomNumberGenerator& rng, if(constraints != NO_CONSTRAINTS && !(constraints & KEY_ENCIPHERMENT)) throw Invalid_Argument("CMS: Constraints not set for encryption"); - PK_Encrypting_Key* enc_key = dynamic_cast<PK_Encrypting_Key*>(key.get()); - if(enc_key == 0) - throw Internal_Error("CMS_Encoder::encrypt: " + algo + - " can't encrypt"); - - encrypt_ktri(rng, to, enc_key, cipher); + encrypt_ktri(rng, to, key.get(), cipher); } else if(algo == "DH") { @@ -130,12 +125,13 @@ void CMS_Encoder::encrypt(RandomNumberGenerator& rng, */ void CMS_Encoder::encrypt_ktri(RandomNumberGenerator& rng, const X509_Certificate& to, - PK_Encrypting_Key* pub_key, + Public_Key* pub_key, const std::string& cipher) { const std::string padding = "EME-PKCS1-v1_5"; const std::string pk_algo = pub_key->algo_name(); - std::auto_ptr<PK_Encryptor> enc(get_pk_encryptor(*pub_key, padding)); + + PK_Encryptor_EME encryptor(*pub_key, padding); SymmetricKey cek = setup_key(rng, cipher); @@ -151,7 +147,7 @@ void CMS_Encoder::encrypt_ktri(RandomNumberGenerator& rng, .encode((u32bit)0); encode_si(encoder, to) .encode(alg_id) - .encode(enc->encrypt(cek.bits_of(), rng), OCTET_STRING) + .encode(encryptor.encrypt(cek.bits_of(), rng), OCTET_STRING) .end_cons() .end_cons() .raw_bytes(do_encrypt(rng, cek, cipher)) @@ -295,18 +291,16 @@ void CMS_Encoder::sign(const X509_Certificate& cert, { std::string padding = pad_algo + "(" + hash + ")"; - // FIXME: Add new get_format() func to PK_Signing_Key, PK_Verifying_*_Key Signature_Format format = IEEE_1363; - const PK_Signing_Key& sig_key = dynamic_cast<const PK_Signing_Key&>(key); - std::auto_ptr<PK_Signer> signer(get_pk_signer(sig_key, padding, format)); + PK_Signer signer(key, padding, format); AlgorithmIdentifier sig_algo(OIDS::lookup(key.algo_name() + "/" + padding), AlgorithmIdentifier::USE_NULL_PARAM); SecureVector<byte> signed_attr = encode_attr(data, type, hash); - signer->update(signed_attr); - SecureVector<byte> signature = signer->signature(rng); + signer.update(signed_attr); + SecureVector<byte> signature = signer.signature(rng); signed_attr[0] = 0xA0; const u32bit SI_VERSION = cert.subject_key_id().size() ? 3 : 1; diff --git a/src/cms/cms_enc.h b/src/cms/cms_enc.h index b1e18ef7d..ec2fdf3b3 100644 --- a/src/cms/cms_enc.h +++ b/src/cms/cms_enc.h @@ -59,7 +59,7 @@ class BOTAN_DLL CMS_Encoder void add_layer(const std::string&, DER_Encoder&); void encrypt_ktri(RandomNumberGenerator&, - const X509_Certificate&, PK_Encrypting_Key*, + const X509_Certificate&, Public_Key*, const std::string&); void encrypt_kari(RandomNumberGenerator&, const X509_Certificate&, Public_Key*, diff --git a/src/cms/info.txt b/src/cms/info.txt index 44c5811f8..b863a9a26 100644 --- a/src/cms/info.txt +++ b/src/cms/info.txt @@ -9,7 +9,7 @@ hash libstate oid_lookup pem -pk_codecs +pubkey sha1 sym_algo x509 |