aboutsummaryrefslogtreecommitdiffstats
path: root/src/x509_ca.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/x509_ca.cpp')
-rw-r--r--src/x509_ca.cpp29
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);
+ }
+
}