DSA wycheproof
Karel Miko
6 years ago
97 | 97 | { |
98 | 98 | int err; |
99 | 99 | void *r, *s; |
100 | ltc_asn1_list sig_seq[2]; | |
101 | unsigned long reallen = 0; | |
100 | 102 | |
101 | 103 | if ((err = mp_init_multi(&r, &s, NULL)) != CRYPT_OK) { |
102 | 104 | return err; |
103 | 105 | } |
104 | 106 | |
105 | /* decode the sequence */ | |
106 | if ((err = der_decode_sequence_multi(sig, siglen, | |
107 | LTC_ASN1_INTEGER, 1UL, r, | |
108 | LTC_ASN1_INTEGER, 1UL, s, | |
109 | LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { | |
107 | LTC_SET_ASN1(sig_seq, 0, LTC_ASN1_INTEGER, r, 1UL); | |
108 | LTC_SET_ASN1(sig_seq, 1, LTC_ASN1_INTEGER, s, 1UL); | |
109 | ||
110 | err = der_decode_sequence(sig, siglen, sig_seq, 2); | |
111 | if (err != CRYPT_OK) { | |
112 | goto LBL_ERR; | |
113 | } | |
114 | ||
115 | err = der_length_sequence(sig_seq, 2, &reallen); | |
116 | if (err != CRYPT_OK || reallen != siglen) { | |
110 | 117 | goto LBL_ERR; |
111 | 118 | } |
112 | 119 |