Codebase list libcryptx-perl / 398db77
rsa pkcs8 cosmetics Karel Miko 7 years ago
1 changed file(s) with 12 addition(s) and 13 deletion(s). Raw diff Collapse all Expand all
3030 * - PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
3131 * - PrivateKey ::= OCTET STRING
3232 * - Attributes ::= SET OF Attribute
33 *
33 *
3434 * EncryptedPrivateKeyInfo ::= SEQUENCE {
3535 * encryptionAlgorithm EncryptionAlgorithmIdentifier,
3636 * encryptedData EncryptedData }
6262 unsigned char *buf1=NULL, *buf2=NULL;
6363 unsigned long buf1len, buf2len;
6464 unsigned long oid[16];
65 oid_st rsaoid;
65 oid_st rsaoid;
6666 ltc_asn1_list alg_seq[2], top_seq[3];
6767 ltc_asn1_list alg_seq_e[2], key_seq_e[2], top_seq_e[2];
6868 unsigned char *decrypted=NULL;
6969 unsigned long decryptedlen;
70
70
7171 LTC_ARGCHK(in != NULL);
7272 LTC_ARGCHK(key != NULL);
7373 LTC_ARGCHK(ltc_mp.name != NULL);
7575 /* get RSA alg oid */
7676 err = pk_get_oid(PKA_RSA, &rsaoid);
7777 if (err != CRYPT_OK) { return err; }
78
78
7979 /* alloc buffers */
80 buf1len = 10000; /* XXX-TODO LTC_DER_MAX_PUBKEY_SIZE*8 nebo inlen*/
80 buf1len = inlen; /* approx. */
8181 buf1 = XCALLOC(1, buf1len);
8282 if (buf1 == NULL) { err = CRYPT_MEM; goto LBL_FREE; }
83 buf2len = 10000; /* XXX-TODO LTC_DER_MAX_PUBKEY_SIZE*8 nebo inlen */
83 buf2len = inlen; /* approx. */
8484 buf2 = XCALLOC(1, buf2len);
8585 if (buf2 == NULL) { err = CRYPT_MEM; goto LBL_FREE; }
8686
9494 LTC_SET_ASN1(alg_seq_e, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, 16UL);
9595 LTC_SET_ASN1(alg_seq_e, 1, LTC_ASN1_SEQUENCE, key_seq_e, 2UL);
9696 LTC_SET_ASN1(top_seq_e, 0, LTC_ASN1_SEQUENCE, alg_seq_e, 2UL);
97 LTC_SET_ASN1(top_seq_e, 1, LTC_ASN1_OCTET_STRING, buf2, buf2len);
97 LTC_SET_ASN1(top_seq_e, 1, LTC_ASN1_OCTET_STRING, buf2, buf2len);
9898 err=der_decode_sequence(in, inlen, top_seq_e, 2UL);
9999 if (err == CRYPT_OK) {
100 /* unsigned long icount = mp_get_int(iter); */
101 /* XXX: TODO */
102 /* fprintf(stderr, "XXX-DEBUG: gonna decrypt: iter=%ld salt.len=%ld encdata.len=%ld\n", icount, key_seq_e[0].size, top_seq_e[1].size); */
100 /* XXX: TODO encrypted pkcs8 not supported */
101 /* fprintf(stderr, "decrypt: iter=%ld salt.len=%ld encdata.len=%ld\n", mp_get_int(iter), key_seq_e[0].size, top_seq_e[1].size); */
103102 err = CRYPT_PK_INVALID_TYPE;
104103 goto LBL_ERR;
105104 }
113112 LTC_SET_ASN1(alg_seq, 1, LTC_ASN1_NULL, NULL, 0UL);
114113 LTC_SET_ASN1(top_seq, 0, LTC_ASN1_INTEGER, zero, 1UL);
115114 LTC_SET_ASN1(top_seq, 1, LTC_ASN1_SEQUENCE, alg_seq, 2UL);
116 LTC_SET_ASN1(top_seq, 2, LTC_ASN1_OCTET_STRING, buf1, buf1len);
115 LTC_SET_ASN1(top_seq, 2, LTC_ASN1_OCTET_STRING, buf1, buf1len);
117116 err=der_decode_sequence(decrypted, decryptedlen, top_seq, 3UL);
118117 if (err != CRYPT_OK) { goto LBL_ERR; }
119
118
120119 /* check alg oid */
121120 if ((alg_seq[0].size != rsaoid.OIDlen) ||
122121 XMEMCMP(rsaoid.OID, alg_seq[0].data, rsaoid.OIDlen * sizeof(rsaoid.OID[0]))) {
123122 err = CRYPT_PK_INVALID_TYPE;
124123 goto LBL_ERR;
125 }
124 }
126125
127126 err = der_decode_sequence_multi(buf1, top_seq[2].size,
128127 LTC_ASN1_INTEGER, 1UL, zero,