aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2009-09-15 09:17:04 +0200
committerMartin Willi <martin@strongswan.org>2009-09-15 09:33:00 +0200
commit012f62a820f0076315e27308adda01ea54cb9f9d (patch)
tree8028facc1051028b4bc6d22730de15c2f99b6994
parentb6b90b68a1caf2d18e28528d809a53dcd7ec175e (diff)
downloadstrongswan-012f62a820f0076315e27308adda01ea54cb9f9d.tar.bz2
strongswan-012f62a820f0076315e27308adda01ea54cb9f9d.tar.xz
Exponents of a RSA key in openssl are optional (for PGP)
-rw-r--r--src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c b/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c
index d944002e5..eefdfa6f5 100644
--- a/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c
+++ b/src/libstrongswan/plugins/openssl/openssl_rsa_private_key.c
@@ -378,8 +378,7 @@ openssl_rsa_private_key_t *openssl_rsa_private_key_load(key_type_t type,
return &this->public;
}
}
- else if (n.ptr && e.ptr && d.ptr && p.ptr && q.ptr &&
- exp1.ptr && exp2.ptr && coeff.ptr)
+ else if (n.ptr && e.ptr && d.ptr && p.ptr && q.ptr && coeff.ptr)
{
this->rsa = RSA_new();
this->rsa->n = BN_bin2bn((const u_char*)n.ptr, n.len, NULL);
@@ -387,8 +386,14 @@ openssl_rsa_private_key_t *openssl_rsa_private_key_load(key_type_t type,
this->rsa->d = BN_bin2bn((const u_char*)d.ptr, d.len, NULL);
this->rsa->p = BN_bin2bn((const u_char*)p.ptr, p.len, NULL);
this->rsa->q = BN_bin2bn((const u_char*)q.ptr, q.len, NULL);
- this->rsa->dmp1 = BN_bin2bn((const u_char*)exp1.ptr, exp1.len, NULL);
- this->rsa->dmq1 = BN_bin2bn((const u_char*)exp2.ptr, exp2.len, NULL);
+ if (exp1.ptr)
+ {
+ this->rsa->dmp1 = BN_bin2bn((const u_char*)exp1.ptr, exp1.len, NULL);
+ }
+ if (exp2.ptr)
+ {
+ this->rsa->dmq1 = BN_bin2bn((const u_char*)exp2.ptr, exp2.len, NULL);
+ }
this->rsa->iqmp = BN_bin2bn((const u_char*)coeff.ptr, coeff.len, NULL);
if (RSA_check_key(this->rsa))
{