summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/crypto/rsa.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/crypto/rsa.c b/src/crypto/rsa.c
index a0bf39eb8..6aa6e8971 100644
--- a/src/crypto/rsa.c
+++ b/src/crypto/rsa.c
@@ -236,12 +236,13 @@ static int rsa_init ( void *ctx, const void *key, size_t key_len ) {
/* Check and skip unused-bits byte of bit string */
bit_string = cursor.data;
- if ( cursor.len < 1 ) {
+ if ( ( cursor.len < sizeof ( *bit_string ) ) ||
+ ( bit_string->unused != 0 ) ) {
rc = -EINVAL;
goto err_parse;
}
- cursor.data++;
- cursor.len--;
+ cursor.data = &bit_string->data;
+ cursor.len -= offsetof ( typeof ( *bit_string ), data );
/* Enter RSAPublicKey */
asn1_enter ( &cursor, ASN1_SEQUENCE );