diff options
Diffstat (limited to 'src/x509_ca.cpp')
-rw-r--r-- | src/x509_ca.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/x509_ca.cpp b/src/x509_ca.cpp index 7e556f164..e7a463e18 100644 --- a/src/x509_ca.cpp +++ b/src/x509_ca.cpp @@ -33,16 +33,7 @@ X509_CA::X509_CA(const X509_Certificate& c, if(!cert.is_CA_cert()) throw Invalid_Argument("X509_CA: This certificate is not for a CA"); - std::string padding; - Signature_Format format; - - Config::choose_sig_format(key.algo_name(), padding, format); - - ca_sig_algo.oid = OIDS::lookup(key.algo_name() + "/" + padding); - ca_sig_algo.parameters = key.DER_encode_params(); - - const PK_Signing_Key& sig_key = dynamic_cast<const PK_Signing_Key&>(key); - signer = get_pk_signer(sig_key, padding, format); + signer = choose_sig_format(key, ca_sig_algo); } /************************************************* @@ -249,4 +240,22 @@ X509_CA::~X509_CA() delete signer; } +/************************************************* +* Choose a signing format for the key * +*************************************************/ +PK_Signer* choose_sig_format(const PKCS8_PrivateKey& key, + AlgorithmIdentifier& sig_algo) + { + std::string padding; + Signature_Format format; + Config::choose_sig_format(key.algo_name(), padding, format); + + sig_algo.oid = OIDS::lookup(key.algo_name() + "/" + padding); + sig_algo.parameters = key.DER_encode_params(); + + const PK_Signing_Key& sig_key = dynamic_cast<const PK_Signing_Key&>(key); + + return get_pk_signer(sig_key, padding, format); + } + } |