summaryrefslogtreecommitdiffstats
path: root/src/crypto/rsa.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/crypto/rsa.c')
-rw-r--r--src/crypto/rsa.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/crypto/rsa.c b/src/crypto/rsa.c
index a3895574..16c67d82 100644
--- a/src/crypto/rsa.c
+++ b/src/crypto/rsa.c
@@ -164,7 +164,7 @@ static int rsa_parse_mod_exp ( struct asn1_cursor *modulus,
int is_private;
int rc;
- /* Enter subjectPublicKeyInfo/RSAPrivateKey */
+ /* Enter subjectPublicKeyInfo/privateKeyInfo/RSAPrivateKey */
memcpy ( &cursor, raw, sizeof ( cursor ) );
asn1_enter ( &cursor, ASN1_SEQUENCE );
@@ -177,6 +177,23 @@ static int rsa_parse_mod_exp ( struct asn1_cursor *modulus,
/* Skip version */
asn1_skip_any ( &cursor );
+ /* Enter privateKey, if present */
+ if ( asn1_check_algorithm ( &cursor,
+ &rsa_encryption_algorithm ) == 0 ) {
+
+ /* Skip privateKeyAlgorithm */
+ asn1_skip_any ( &cursor );
+
+ /* Enter privateKey */
+ asn1_enter ( &cursor, ASN1_OCTET_STRING );
+
+ /* Enter RSAPrivateKey */
+ asn1_enter ( &cursor, ASN1_SEQUENCE );
+
+ /* Skip version */
+ asn1_skip ( &cursor, ASN1_INTEGER );
+ }
+
} else {
/* Public key */