X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilccrypt%2Fsilcpkcs1.c;fp=lib%2Fsilccrypt%2Fsilcpkcs1.c;h=88355e76349da013288da55aa1f0bc3298313562;hb=f2ebe2380fa2dc8014f4409ce509c4de13661d8d;hp=5820861d9fd36774b421dbf704d87b9728162588;hpb=4d3cb39c710fcaa6d7c85dfeee3dfb49429e36fb;p=silc.git diff --git a/lib/silccrypt/silcpkcs1.c b/lib/silccrypt/silcpkcs1.c index 5820861d..88355e76 100644 --- a/lib/silccrypt/silcpkcs1.c +++ b/lib/silccrypt/silcpkcs1.c @@ -354,6 +354,7 @@ SilcBool silc_pkcs1_import_private_key(unsigned char *key, SilcAsn1 asn1; SilcBufferStruct alg_key; RsaPrivateKey *privkey; + SilcUInt32 ver; if (!ret_private_key) return FALSE; @@ -372,7 +373,7 @@ SilcBool silc_pkcs1_import_private_key(unsigned char *key, if (!silc_asn1_decode(asn1, &alg_key, SILC_ASN1_OPTS(SILC_ASN1_ALLOC), SILC_ASN1_SEQUENCE, - SILC_ASN1_INT(NULL), + SILC_ASN1_SHORT_INT(&ver), SILC_ASN1_INT(&privkey->n), SILC_ASN1_INT(&privkey->e), SILC_ASN1_INT(&privkey->d), @@ -384,6 +385,9 @@ SilcBool silc_pkcs1_import_private_key(unsigned char *key, SILC_ASN1_END, SILC_ASN1_END)) goto err; + if (ver != 0) + goto err; + /* Set key length */ privkey->bits = silc_mp_sizeinbase(&privkey->n, 2); @@ -404,7 +408,6 @@ unsigned char *silc_pkcs1_export_private_key(void *private_key, RsaPrivateKey *key = private_key; SilcAsn1 asn1; SilcBufferStruct alg_key; - SilcMPInt version; unsigned char *ret; asn1 = silc_asn1_alloc(); @@ -412,13 +415,11 @@ unsigned char *silc_pkcs1_export_private_key(void *private_key, return FALSE; /* Encode to PKCS #1 private key */ - silc_mp_init(&version); - silc_mp_set_ui(&version, 0); memset(&alg_key, 0, sizeof(alg_key)); if (!silc_asn1_encode(asn1, &alg_key, SILC_ASN1_OPTS(SILC_ASN1_ALLOC), SILC_ASN1_SEQUENCE, - SILC_ASN1_INT(&version), + SILC_ASN1_SHORT_INT(0), SILC_ASN1_INT(&key->n), SILC_ASN1_INT(&key->e), SILC_ASN1_INT(&key->d), @@ -429,7 +430,6 @@ unsigned char *silc_pkcs1_export_private_key(void *private_key, SILC_ASN1_INT(&key->qP), SILC_ASN1_END, SILC_ASN1_END)) goto err; - silc_mp_uninit(&version); ret = silc_buffer_steal(&alg_key, ret_len); silc_asn1_free(asn1);