Codebase list libcryptx-perl / c860346
New upstream version 0.062 gregor herrmann 5 years ago
267 changed file(s) with 4677 addition(s) and 13413 deletion(s). Raw diff Collapse all Expand all
00 Changes for CryptX
1
2 0.062 2018-10-30
3 - bundled libtommath update branch:develop (commit:8b9f98ba 2018-09-23) + stdint.h workaround
4 - bundled libtomcrypt update branch:develop (commit:f413335b 2018-10-29)
5 - fix #45 doc only - sign_message_rfc7518 / sign_message_rfc7518
6 - fix $46 tests only - t/mbi_ltm_bigintpm.t etc. started to fail with latest Math::BigInt
7 - fix #47 gcm_decrypt_verify + chacha20poly1305_decrypt_verify don't verify the tag - SERIOUS SECURITY BUG!
8 - improved CBC/ECB padding (using libtomcrypt's functions: padding_depad + padding_pad)
9 - enable pkcs#8 encrypted RSA keys (supported by the latest libtomcrypt)
10 - exclude wycheproof tests (too big) from dist tarball (via MANIFEST.SKIP)
111
212 0.061 2018-06-07
313 - bundled libtommath update (+stdint.h workaround)
280280 }
281281 }
282282
283 int _ecc_set_dp_from_SV(ecc_key *key, SV *curve)
283 int _ecc_set_curve_from_SV(ecc_key *key, SV *curve)
284284 {
285285 dTHX; /* fetch context */
286286 HV *hc, *h;
316316 /* string - curve name */
317317 const ltc_ecc_curve *cu;
318318 ptr_crv = SvPV(sv_crv, len_crv);
319 if (ecc_get_curve(ptr_crv, &cu) != CRYPT_OK) croak("FATAL: ecparams: unknown curve '%s'", ptr_crv);
320 return ecc_set_dp(cu, key);
319 if (ecc_find_curve(ptr_crv, &cu) != CRYPT_OK) croak("FATAL: ecparams: unknown curve '%s'", ptr_crv);
320 return ecc_set_curve(cu, key);
321321 }
322322 else {
323323 /* hashref */
352352 cu.Gy = SvPV_nolen(*sv_Gy);
353353 cu.cofactor = (unsigned long)SvUV(*sv_cofactor);
354354
355 if ((err = ecc_set_dp(&cu, key)) != CRYPT_OK) return err;
355 if ((err = ecc_set_curve(&cu, key)) != CRYPT_OK) return err;
356356 if (key->dp.oidlen == 0) _ecc_oid_lookup(key);
357357 return CRYPT_OK;
358358 }
356356 src/ltc/misc/mem_neq.c
357357 src/ltc/misc/padding/padding_depad.c
358358 src/ltc/misc/padding/padding_pad.c
359 src/ltc/misc/pk_get_oid.c
360 src/ltc/misc/pk_oid_str.c
359 src/ltc/misc/pbes/pbes.c
360 src/ltc/misc/pbes/pbes1.c
361 src/ltc/misc/pbes/pbes2.c
362 src/ltc/misc/pkcs12/pkcs12_kdf.c
363 src/ltc/misc/pkcs12/pkcs12_utf8_to_utf16.c
361364 src/ltc/misc/pkcs5/pkcs_5_1.c
362365 src/ltc/misc/pkcs5/pkcs_5_2.c
366 src/ltc/misc/ssh/ssh_decode_sequence_multi.c
367 src/ltc/misc/ssh/ssh_encode_sequence_multi.c
363368 src/ltc/misc/zeromem.c
364369 src/ltc/modes/cbc/cbc_decrypt.c
365370 src/ltc/modes/cbc/cbc_done.c
447452 src/ltc/pk/asn1/der/utf8/der_decode_utf8_string.c
448453 src/ltc/pk/asn1/der/utf8/der_encode_utf8_string.c
449454 src/ltc/pk/asn1/der/utf8/der_length_utf8_string.c
455 src/ltc/pk/asn1/oid/pk_get_oid.c
456 src/ltc/pk/asn1/oid/pk_oid_cmp.c
457 src/ltc/pk/asn1/oid/pk_oid_str.c
458 src/ltc/pk/asn1/pkcs8/pkcs8_decode_flexi.c
450459 src/ltc/pk/asn1/x509/x509_decode_subject_public_key_info.c
451460 src/ltc/pk/asn1/x509/x509_encode_subject_public_key_info.c
452461 src/ltc/pk/dh/dh.c
480489 src/ltc/pk/ecc/ecc_encrypt_key.c
481490 src/ltc/pk/ecc/ecc_export.c
482491 src/ltc/pk/ecc/ecc_export_openssl.c
492 src/ltc/pk/ecc/ecc_find_curve.c
483493 src/ltc/pk/ecc/ecc_free.c
484 src/ltc/pk/ecc/ecc_get_curve.c
485494 src/ltc/pk/ecc/ecc_get_key.c
486495 src/ltc/pk/ecc/ecc_get_oid_str.c
487496 src/ltc/pk/ecc/ecc_get_size.c
490499 src/ltc/pk/ecc/ecc_import_pkcs8.c
491500 src/ltc/pk/ecc/ecc_import_x509.c
492501 src/ltc/pk/ecc/ecc_make_key.c
493 src/ltc/pk/ecc/ecc_set_dp.c
494 src/ltc/pk/ecc/ecc_set_dp_internal.c
502 src/ltc/pk/ecc/ecc_recover_key.c
503 src/ltc/pk/ecc/ecc_set_curve.c
504 src/ltc/pk/ecc/ecc_set_curve_internal.c
495505 src/ltc/pk/ecc/ecc_set_key.c
496506 src/ltc/pk/ecc/ecc_shared_secret.c
497507 src/ltc/pk/ecc/ecc_sign_hash.c
498508 src/ltc/pk/ecc/ecc_sizes.c
509 src/ltc/pk/ecc/ecc_ssh_ecdsa_encode_name.c
499510 src/ltc/pk/ecc/ecc_verify_hash.c
500511 src/ltc/pk/ecc/ltc_ecc_export_point.c
501512 src/ltc/pk/ecc/ltc_ecc_import_point.c
545556 src/ltc/stream/chacha/chacha_ivctr32.c
546557 src/ltc/stream/chacha/chacha_ivctr64.c
547558 src/ltc/stream/chacha/chacha_keystream.c
559 src/ltc/stream/chacha/chacha_memory.c
548560 src/ltc/stream/chacha/chacha_setup.c
549561 src/ltc/stream/rabbit/rabbit.c
562 src/ltc/stream/rabbit/rabbit_memory.c
550563 src/ltc/stream/rc4/rc4_stream.c
564 src/ltc/stream/rc4/rc4_stream_memory.c
551565 src/ltc/stream/salsa20/salsa20_crypt.c
552566 src/ltc/stream/salsa20/salsa20_done.c
553567 src/ltc/stream/salsa20/salsa20_ivctr64.c
554568 src/ltc/stream/salsa20/salsa20_keystream.c
569 src/ltc/stream/salsa20/salsa20_memory.c
555570 src/ltc/stream/salsa20/salsa20_setup.c
571 src/ltc/stream/salsa20/xsalsa20_memory.c
556572 src/ltc/stream/salsa20/xsalsa20_setup.c
557573 src/ltc/stream/sober128/sober128_stream.c
574 src/ltc/stream/sober128/sober128_stream_memory.c
558575 src/ltc/stream/sober128/sober128tab.c
559576 src/ltc/stream/sosemanuk/sosemanuk.c
577 src/ltc/stream/sosemanuk/sosemanuk_memory.c
560578 src/ltm/bn_error.c
561579 src/ltm/bn_fast_mp_invmod.c
562580 src/ltm/bn_fast_mp_montgomery_reduce.c
576594 src/ltm/bn_mp_cmp_d.c
577595 src/ltm/bn_mp_cmp_mag.c
578596 src/ltm/bn_mp_cnt_lsb.c
597 src/ltm/bn_mp_complement.c
579598 src/ltm/bn_mp_copy.c
580599 src/ltm/bn_mp_count_bits.c
581600 src/ltm/bn_mp_div.c
663682 src/ltm/bn_mp_sub.c
664683 src/ltm/bn_mp_sub_d.c
665684 src/ltm/bn_mp_submod.c
685 src/ltm/bn_mp_tc_and.c
686 src/ltm/bn_mp_tc_div_2d.c
687 src/ltm/bn_mp_tc_or.c
688 src/ltm/bn_mp_tc_xor.c
666689 src/ltm/bn_mp_to_signed_bin.c
667690 src/ltm/bn_mp_to_signed_bin_n.c
668691 src/ltm/bn_mp_to_unsigned_bin.c
9931016 t/prng_sober128.t
9941017 t/prng_yarrow.t
9951018 t/sshkey.t
996 t/wycheproof.t
997 t/wycheproof/aes_gcm_test.json
998 t/wycheproof/dsa_test.json
999 t/wycheproof/ecdh_webcrypto_test.json
1000 t/wycheproof/ecdsa_test.json
1001 t/wycheproof/ecdsa_webcrypto_test.json
1002 t/wycheproof/rsa_signature_test.json
10031019 typemap
4444 "url" : "https://github.com/DCIT/perl-CryptX"
4545 }
4646 },
47 "version" : "0.061",
47 "version" : "0.062",
4848 "x_serialization_backend" : "JSON::PP version 2.94"
4949 }
2121 resources:
2222 bugtracker: https://github.com/DCIT/perl-CryptX/issues
2323 repository: https://github.com/DCIT/perl-CryptX
24 version: '0.061'
24 version: '0.062'
2525 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
100100 } if $^O eq 'MSWin32' && $Config{cc} =~ /gcc/;
101101
102102 $extra_targets .= q{
103 update-libtom:
104 $(NOECHO) perl src/update-libtom.pl
103105 versionsync:
104106 $(NOECHO) perl _generators/version_patch.pl sync
105107 versioninc:
210210 finish(Crypt::Mode::CBC self)
211211 CODE:
212212 {
213 unsigned char tmp_block[MAXBLOCKSIZE], ch;
214 int i, j, rv, blen = (&self->state)->blocklen;
213 unsigned char tmp_block[MAXBLOCKSIZE];
214 int rv;
215 unsigned long blen = (&self->state)->blocklen;
216 unsigned long padmode;
215217
216218 if (self->direction == 1) {
217 if (self->padlen<0 || self->padlen>=blen) croak("FATAL: invalid padlen");
218 if (self->padding_mode == 1) { /* pkcs5|7 padding */
219 i = blen - self->padlen;
220 if (i == 0) i = blen;
221 for(j=self->padlen; j<blen; j++) self->pad[j] = (unsigned char)i;
219 if (self->padlen < 0 || self->padlen >= (int)blen) croak("FATAL: invalid padlen");
220 if (self->padding_mode != 0) {
221 if (self->padding_mode == 1) { padmode = LTC_PAD_PKCS7 | (&self->state)->blocklen; }
222 else if (self->padding_mode == 2) { padmode = LTC_PAD_ONE_AND_ZERO | (&self->state)->blocklen; }
223 else if (self->padding_mode == 3) { padmode = LTC_PAD_ANSI_X923 | (&self->state)->blocklen; }
224 else if (self->padding_mode == 4) { padmode = LTC_PAD_ZERO | (&self->state)->blocklen; }
225 else if (self->padding_mode == 5) { padmode = LTC_PAD_ZERO_ALWAYS | (&self->state)->blocklen; }
226 else { croak("FATAL: unknown padding"); }
227 blen = sizeof(self->pad);
228 rv = padding_pad(self->pad, self->padlen, &blen, padmode);
229 if (rv != CRYPT_OK) croak("FATAL: padding_pad failed: %s", error_to_string(rv));
222230 rv = cbc_encrypt(self->pad, tmp_block, blen, &self->state);
223231 if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv));
224232 }
225 else if (self->padding_mode == 2) { /* oneandzeroes padding */
226 self->pad[self->padlen] = 0x80;
227 for(j=self->padlen+1; j<blen; j++) self->pad[j] = 0;
228 rv = cbc_encrypt(self->pad, tmp_block, blen, &self->state);
229 if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv));
230 }
231233 else {
232 if (self->padlen>0) croak("FATAL: cbc_encrypt, input data length not multiple of %d", blen);
234 if (self->padlen > 0) croak("FATAL: cbc_encrypt, input data length not multiple of %d", (int)blen);
233235 blen = 0;
234236 }
235237 }
236238 else if (self->direction == -1) {
237239 if (self->padlen > 0) {
238 if (self->padlen != blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", blen, self->padlen);
240 if (self->padlen != (int)blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", (int)blen, self->padlen);
239241 rv = cbc_decrypt(self->pad, tmp_block, blen, &self->state);
240242 if (rv != CRYPT_OK) croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv));
241 if (self->padding_mode == 0) { /* no padding */
242 /* we already have blen */
243 }
244 else if (self->padding_mode == 1) { /* pkcs5|7 padding */
245 ch = tmp_block[blen-1];
246 blen = blen - (ch > blen ? blen : ch);
247 }
248 else if (self->padding_mode == 2) { /* oneandzeroes padding */
249 while ((unsigned char)tmp_block[blen - 1] == 0x00) blen--;
250 if ((unsigned char)tmp_block[blen - 1] == 0x80) blen--;
251 if (blen < 0) blen = 0;
243 if (self->padding_mode != 0) {
244 if (self->padding_mode == 1) { padmode = LTC_PAD_PKCS7 | (&self->state)->blocklen; }
245 else if (self->padding_mode == 2) { padmode = LTC_PAD_ONE_AND_ZERO | (&self->state)->blocklen; }
246 else if (self->padding_mode == 3) { padmode = LTC_PAD_ANSI_X923 | (&self->state)->blocklen; }
247 else if (self->padding_mode == 4) { padmode = LTC_PAD_ZERO | (&self->state)->blocklen; }
248 else if (self->padding_mode == 5) { padmode = LTC_PAD_ZERO_ALWAYS | (&self->state)->blocklen; }
249 else { croak("FATAL: unknown padding"); }
250 rv = padding_depad(tmp_block, &blen, padmode);
251 if (rv != CRYPT_OK) croak("FATAL: padding_depad failed: %s", error_to_string(rv));
252 }
253 else {
254 /* "no padding" == there is no need to do anything */
252255 }
253256 }
254257 else {
256259 }
257260 }
258261 else {
259 XSRETURN_UNDEF;
262 croak("FATAL: invalid direction");
260263 }
261264
262265 self->direction = 0;
203203 finish(Crypt::Mode::ECB self)
204204 CODE:
205205 {
206 unsigned char tmp_block[MAXBLOCKSIZE], ch;
207 int i, j, rv, blen = (&self->state)->blocklen;
206 unsigned char tmp_block[MAXBLOCKSIZE];
207 int rv;
208 unsigned long blen = (&self->state)->blocklen;
209 unsigned long padmode;
208210
209211 if (self->direction == 1) {
210 if (self->padlen<0 || self->padlen>=blen) croak("FATAL: invalid padlen");
211 if (self->padding_mode == 1) { /* pkcs5|7 padding */
212 i = blen - self->padlen;
213 if (i == 0) i = blen;
214 for(j=self->padlen; j<blen; j++) self->pad[j] = (unsigned char)i;
212 if (self->padlen < 0 || self->padlen >= (int)blen) croak("FATAL: invalid padlen");
213 if (self->padding_mode != 0) {
214 if (self->padding_mode == 1) { padmode = LTC_PAD_PKCS7 | (&self->state)->blocklen; }
215 else if (self->padding_mode == 2) { padmode = LTC_PAD_ONE_AND_ZERO | (&self->state)->blocklen; }
216 else if (self->padding_mode == 3) { padmode = LTC_PAD_ANSI_X923 | (&self->state)->blocklen; }
217 else if (self->padding_mode == 4) { padmode = LTC_PAD_ZERO | (&self->state)->blocklen; }
218 else if (self->padding_mode == 5) { padmode = LTC_PAD_ZERO_ALWAYS | (&self->state)->blocklen; }
219 else { croak("FATAL: unknown padding"); }
220 blen = sizeof(self->pad);
221 rv = padding_pad(self->pad, self->padlen, &blen, padmode);
222 if (rv != CRYPT_OK) croak("FATAL: padding_pad failed: %s", error_to_string(rv));
215223 rv = ecb_encrypt(self->pad, tmp_block, blen, &self->state);
216224 if (rv != CRYPT_OK) croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv));
217225 }
218 else if (self->padding_mode == 2) { /* oneandzeroes padding */
219 self->pad[self->padlen] = 0x80;
220 for(j=self->padlen+1; j<blen; j++) self->pad[j] = 0;
221 rv = ecb_encrypt(self->pad, tmp_block, blen, &self->state);
222 if (rv != CRYPT_OK) croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv));
223 }
224226 else {
225 if (self->padlen>0) croak("FATAL: ecb_encrypt, input data length not multiple of %d", blen);
227 if (self->padlen > 0) croak("FATAL: ecb_encrypt, input data length not multiple of %d", (int)blen);
226228 blen = 0;
227229 }
228230 }
229231 else if (self->direction == -1) {
230232 if (self->padlen > 0) {
231 if (self->padlen != blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", blen, self->padlen);
233 if (self->padlen != (int)blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", (int)blen, self->padlen);
232234 rv = ecb_decrypt(self->pad, tmp_block, blen, &self->state);
233235 if (rv != CRYPT_OK) croak("FATAL: ecb_decrypt failed: %s", error_to_string(rv));
234 if (self->padding_mode == 0) { /* no padding */
235 /* we already have blen */
236 }
237 else if (self->padding_mode == 1) { /* pkcs5|7 padding */
238 ch = tmp_block[blen-1];
239 blen = blen - (ch > blen ? blen : ch);
240 }
241 else if (self->padding_mode == 2) { /* oneandzeroes padding */
242 while ((unsigned char)tmp_block[blen - 1] == 0x00) blen--;
243 if ((unsigned char)tmp_block[blen - 1] == 0x80) blen--;
244 if (blen < 0) blen = 0;
236 if (self->padding_mode != 0) {
237 if (self->padding_mode == 1) { padmode = LTC_PAD_PKCS7 | (&self->state)->blocklen; }
238 else if (self->padding_mode == 2) { padmode = LTC_PAD_ONE_AND_ZERO | (&self->state)->blocklen; }
239 else if (self->padding_mode == 3) { padmode = LTC_PAD_ANSI_X923 | (&self->state)->blocklen; }
240 else if (self->padding_mode == 4) { padmode = LTC_PAD_ZERO | (&self->state)->blocklen; }
241 else if (self->padding_mode == 5) { padmode = LTC_PAD_ZERO_ALWAYS | (&self->state)->blocklen; }
242 else { croak("FATAL: unknown padding"); }
243 rv = padding_depad(tmp_block, &blen, padmode);
244 if (rv != CRYPT_OK) croak("FATAL: padding_depad failed: %s", error_to_string(rv));
245 }
246 else {
247 /* "no padding" == there is no need to do anything */
245248 }
246249 }
247250 else {
249252 }
250253 }
251254 else {
252 XSRETURN_UNDEF;
255 croak("FATAL: invalid direction");
253256 }
254257
255258 self->direction = 0;
2929 {
3030 int rv;
3131 /* setup dp structure */
32 rv = _ecc_set_dp_from_SV(&self->key, curve); /* croaks on error */
33 if (rv != CRYPT_OK) croak("FATAL: ecc_set_dp failed: %s", error_to_string(rv));
32 rv = _ecc_set_curve_from_SV(&self->key, curve); /* croaks on error */
33 if (rv != CRYPT_OK) croak("FATAL: ecc_set_curve failed: %s", error_to_string(rv));
3434 /* gen the key */
3535 rv = ecc_generate_key(&self->pstate, self->pindex, &self->key);
3636 if (rv != CRYPT_OK) croak("FATAL: ecc_generate_key failed: %s", error_to_string(rv));
111111 data = (unsigned char *)SvPVbyte(key_data, data_len);
112112 if (self->key.type != -1) { ecc_free(&self->key); self->key.type = -1; }
113113 /* setup dp structure */
114 rv = _ecc_set_dp_from_SV(&self->key, curve); /* croaks on error */
115 if (rv != CRYPT_OK) croak("FATAL: ecc_set_dp failed: %s", error_to_string(rv));
114 rv = _ecc_set_curve_from_SV(&self->key, curve); /* croaks on error */
115 if (rv != CRYPT_OK) croak("FATAL: ecc_set_curve failed: %s", error_to_string(rv));
116116 /* import key */
117117 type = (data_len == (STRLEN)ecc_get_size(&self->key)) ? PK_PRIVATE : PK_PUBLIC;
118118 rv = ecc_set_key(data, (unsigned long)data_len, type, &self->key);
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw( ccm_encrypt_authenticate ccm_decrypt_verify )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw( chacha20poly1305_encrypt_authenticate chacha20poly1305_decrypt_verify )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw( eax_encrypt_authenticate eax_decrypt_verify )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw( gcm_encrypt_authenticate gcm_decrypt_verify )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw( ocb_encrypt_authenticate ocb_decrypt_verify )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 ### not used
77
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use base qw(Crypt::Checksum Exporter);
77 our %EXPORT_TAGS = ( all => [qw( adler32_data adler32_data_hex adler32_data_int adler32_file adler32_file_hex adler32_file_int )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use base qw(Crypt::Checksum Exporter);
77 our %EXPORT_TAGS = ( all => [qw( crc32_data crc32_data_hex crc32_data_int crc32_file crc32_file_hex crc32_file_int )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw/ adler32_data adler32_data_hex adler32_data_int adler32_file adler32_file_hex adler32_file_int
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Cipher);
99
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use Carp;
77 $Carp::Internal{(__PACKAGE__)}++;
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( blake2b_160 blake2b_160_hex blake2b_160_b64 blake2b_160_b64u blake2b_160_file blake2b_160_file_hex blake2b_160_file_b64 blake2b_160_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( blake2b_256 blake2b_256_hex blake2b_256_b64 blake2b_256_b64u blake2b_256_file blake2b_256_file_hex blake2b_256_file_b64 blake2b_256_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( blake2b_384 blake2b_384_hex blake2b_384_b64 blake2b_384_b64u blake2b_384_file blake2b_384_file_hex blake2b_384_file_b64 blake2b_384_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( blake2b_512 blake2b_512_hex blake2b_512_b64 blake2b_512_b64u blake2b_512_file blake2b_512_file_hex blake2b_512_file_b64 blake2b_512_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( blake2s_128 blake2s_128_hex blake2s_128_b64 blake2s_128_b64u blake2s_128_file blake2s_128_file_hex blake2s_128_file_b64 blake2s_128_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( blake2s_160 blake2s_160_hex blake2s_160_b64 blake2s_160_b64u blake2s_160_file blake2s_160_file_hex blake2s_160_file_b64 blake2s_160_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( blake2s_224 blake2s_224_hex blake2s_224_b64 blake2s_224_b64u blake2s_224_file blake2s_224_file_hex blake2s_224_file_b64 blake2s_224_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( blake2s_256 blake2s_256_hex blake2s_256_b64 blake2s_256_b64u blake2s_256_file blake2s_256_file_hex blake2s_256_file_b64 blake2s_256_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( chaes chaes_hex chaes_b64 chaes_b64u chaes_file chaes_file_hex chaes_file_b64 chaes_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( keccak224 keccak224_hex keccak224_b64 keccak224_b64u keccak224_file keccak224_file_hex keccak224_file_b64 keccak224_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( keccak256 keccak256_hex keccak256_b64 keccak256_b64u keccak256_file keccak256_file_hex keccak256_file_b64 keccak256_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( keccak384 keccak384_hex keccak384_b64 keccak384_b64u keccak384_file keccak384_file_hex keccak384_file_b64 keccak384_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( keccak512 keccak512_hex keccak512_b64 keccak512_b64u keccak512_file keccak512_file_hex keccak512_file_b64 keccak512_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( md2 md2_hex md2_b64 md2_b64u md2_file md2_file_hex md2_file_b64 md2_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( md4 md4_hex md4_b64 md4_b64u md4_file md4_file_hex md4_file_b64 md4_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( md5 md5_hex md5_b64 md5_b64u md5_file md5_file_hex md5_file_b64 md5_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( ripemd128 ripemd128_hex ripemd128_b64 ripemd128_b64u ripemd128_file ripemd128_file_hex ripemd128_file_b64 ripemd128_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( ripemd160 ripemd160_hex ripemd160_b64 ripemd160_b64u ripemd160_file ripemd160_file_hex ripemd160_file_b64 ripemd160_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( ripemd256 ripemd256_hex ripemd256_b64 ripemd256_b64u ripemd256_file ripemd256_file_hex ripemd256_file_b64 ripemd256_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( ripemd320 ripemd320_hex ripemd320_b64 ripemd320_b64u ripemd320_file ripemd320_file_hex ripemd320_file_b64 ripemd320_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha1 sha1_hex sha1_b64 sha1_b64u sha1_file sha1_file_hex sha1_file_b64 sha1_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha224 sha224_hex sha224_b64 sha224_b64u sha224_file sha224_file_hex sha224_file_b64 sha224_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha256 sha256_hex sha256_b64 sha256_b64u sha256_file sha256_file_hex sha256_file_b64 sha256_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha384 sha384_hex sha384_b64 sha384_b64u sha384_file sha384_file_hex sha384_file_b64 sha384_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha3_224 sha3_224_hex sha3_224_b64 sha3_224_b64u sha3_224_file sha3_224_file_hex sha3_224_file_b64 sha3_224_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha3_256 sha3_256_hex sha3_256_b64 sha3_256_b64u sha3_256_file sha3_256_file_hex sha3_256_file_b64 sha3_256_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha3_384 sha3_384_hex sha3_384_b64 sha3_384_b64u sha3_384_file sha3_384_file_hex sha3_384_file_b64 sha3_384_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha3_512 sha3_512_hex sha3_512_b64 sha3_512_b64u sha3_512_file sha3_512_file_hex sha3_512_file_b64 sha3_512_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha512 sha512_hex sha512_b64 sha512_b64u sha512_file sha512_file_hex sha512_file_b64 sha512_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha512_224 sha512_224_hex sha512_224_b64 sha512_224_b64u sha512_224_file sha512_224_file_hex sha512_224_file_b64 sha512_224_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( sha512_256 sha512_256_hex sha512_256_b64 sha512_256_b64u sha512_256_file sha512_256_file_hex sha512_256_file_b64 sha512_256_file_b64u )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use Carp;
77 $Carp::Internal{(__PACKAGE__)}++;
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( tiger192 tiger192_hex tiger192_b64 tiger192_b64u tiger192_file tiger192_file_hex tiger192_file_b64 tiger192_file_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Digest Exporter);
99 our %EXPORT_TAGS = ( all => [qw( whirlpool whirlpool_hex whirlpool_b64 whirlpool_b64u whirlpool_file whirlpool_file_hex whirlpool_file_b64 whirlpool_file_b64u )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw( digest_data digest_data_hex digest_data_b64 digest_data_b64u digest_file digest_file_hex digest_file_b64 digest_file_b64u )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw(pbkdf1 pbkdf2 hkdf hkdf_expand hkdf_extract)] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Mac Exporter);
99 our %EXPORT_TAGS = ( all => [qw( blake2b blake2b_hex blake2b_b64 blake2b_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Mac Exporter);
99 our %EXPORT_TAGS = ( all => [qw( blake2s blake2s_hex blake2s_b64 blake2s_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Mac Exporter);
99 our %EXPORT_TAGS = ( all => [qw( f9 f9_hex f9_b64 f9_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Mac Exporter);
99 our %EXPORT_TAGS = ( all => [qw( hmac hmac_hex hmac_b64 hmac_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Mac Exporter);
99 our %EXPORT_TAGS = ( all => [qw( omac omac_hex omac_b64 omac_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Mac Exporter);
99 our %EXPORT_TAGS = ( all => [qw( pmac pmac_hex pmac_b64 pmac_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Mac Exporter);
99 our %EXPORT_TAGS = ( all => [qw( pelican pelican_hex pelican_b64 pelican_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Mac Exporter);
99 our %EXPORT_TAGS = ( all => [qw( poly1305 poly1305_hex poly1305_b64 poly1305_b64u )] );
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use base qw(Crypt::Mac Exporter);
99 our %EXPORT_TAGS = ( all => [qw( xcbc xcbc_hex xcbc_b64 xcbc_b64u )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use Carp;
77 $Carp::Internal{(__PACKAGE__)}++;
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import';
77 use Carp 'croak';
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use Crypt::Cipher;
99
6969 # 'SAFERP', 'SAFER_K128', 'SAFER_K64', 'SAFER_SK128', 'SAFER_SK64',
7070 # 'SEED', 'Skipjack', 'Twofish', 'XTEA', 'IDEA', 'Serpent'
7171 # simply any <NAME> for which there exists Crypt::Cipher::<NAME>
72 # $padding .... 0 no padding (plaintext size has to be myltiple of block length)
72 # $padding .... 0 no padding (plaintext size has to be multiple of block length)
7373 # 1 PKCS5 padding, Crypt::CBC's "standard" - DEFAULT
7474 # 2 Crypt::CBC's "oneandzeroes"
75 # 3 ANSI X.923 padding
76 # 4 zero padding
77 # 5 zero padding (+a block of zeros if the output length is divisible by the blocksize)
7578 # $cipher_rounds ... optional num of rounds for given cipher
7679
7780 =head2 encrypt
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use Crypt::Cipher;
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use Crypt::Cipher;
99
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use Crypt::Cipher;
99
7070 # 'SAFERP', 'SAFER_K128', 'SAFER_K64', 'SAFER_SK128', 'SAFER_SK64',
7171 # 'SEED', 'Skipjack', 'Twofish', 'XTEA', 'IDEA', 'Serpent'
7272 # simply any <NAME> for which there exists Crypt::Cipher::<NAME>
73 # $padding .... 0 no padding (plaintext size has to be myltiple of block length)
73 # $padding .... 0 no padding (plaintext size has to be multiple of block length)
7474 # 1 PKCS5 padding, Crypt::CBC's "standard" - DEFAULT
7575 # 2 Crypt::CBC's "oneandzeroes"
76 # 3 ANSI X.923 padding
77 # 4 zero padding
78 # 5 zero padding (+a block of zeros if the output length is divisible by the blocksize)
7679 # $cipher_rounds ... optional num of rounds for given cipher
7780
7881 =head2 encrypt
33
44 use strict;
55 use warnings;
6 our $VERSION = '0.061';
6 our $VERSION = '0.062';
77
88 use Crypt::Cipher;
99
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 ### not used
77
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw( dh_shared_secret )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw( dsa_encrypt dsa_decrypt dsa_sign_message dsa_verify_message dsa_sign_hash dsa_verify_hash )] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw( ecc_encrypt ecc_decrypt ecc_sign_message ecc_verify_message ecc_sign_hash ecc_verify_hash ecc_shared_secret )] );
4141 "wap-wsg-idm-ecid-wtls6" => 'secp112r1',
4242 "wap-wsg-idm-ecid-wtls7" => 'secp160r2',
4343 "wap-wsg-idm-ecid-wtls12" => 'secp224r1',
44 # extra aliases
45 'P-256K' => 'secp256k1',
4446 );
4547
4648 our %curve_oid2name = ( # must be "our" as we use it from XS code
8688 '1.2.840.10045.3.1.1' => 'P-192', # secp192r1
8789 '1.3.132.0.33' => 'P-224', # secp224r1
8890 '1.2.840.10045.3.1.7' => 'P-256', # secp256r1
91 '1.3.132.0.10' => 'P-256K',# secp256k1
8992 '1.3.132.0.34' => 'P-384', # secp384r1
9093 '1.3.132.0.35' => 'P-521', # secp521r1
9194 'nistp192' => 'P-192',
98101 'secp192r1' => 'P-192',
99102 'secp224r1' => 'P-224',
100103 'secp256r1' => 'P-256',
104 'secp256k1' => 'P-256K',
101105 'secp384r1' => 'P-384',
102106 'secp521r1' => 'P-521',
103107 );
827831 Same as L<sign_message|/sign_message> only the signature format is as defined by L<https://tools.ietf.org/html/rfc7518>
828832 (JWA - JSON Web Algorithms).
829833
834 B<BEWARE:> This creates signatures according to the structure that RFC 7518 describes but does not apply
835 the RFC logic for the hashing algorithm selection. You'll still need to specify, e.g., SHA256 for a P-256 key
836 to get a fully RFC-7518-compliant signature.
837
830838 =head2 verify_message
831839
832840 my $pk = Crypt::PK::ECC->new($pub_key_filename);
842850
843851 Same as L<verify_message|/verify_message> only the signature format is as defined by L<https://tools.ietf.org/html/rfc7518>
844852 (JWA - JSON Web Algorithms).
853
854 B<BEWARE:> This verifies signatures according to the structure that RFC 7518 describes but does not apply
855 the RFC logic for the hashing algorithm selection. You'll still need to specify, e.g., SHA256 for a P-256 key
856 to get a fully RFC-7518-compliant signature.
845857
846858 =head2 sign_hash
847859
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw(rsa_encrypt rsa_decrypt rsa_sign_message rsa_verify_message rsa_sign_hash rsa_verify_hash)] );
127127 elsif ($data =~ /-----BEGIN PRIVATE KEY-----(.*?)-----END/sg) {
128128 # PKCS#8 PrivateKeyInfo (PEM header: BEGIN PRIVATE KEY)
129129 $data = pem_to_der($data, $password);
130 return $self->_import_pkcs8($data, $password) if $data;
130 return $self->_import_pkcs8($data, $password);
131131 }
132132 elsif ($data =~ /-----BEGIN ENCRYPTED PRIVATE KEY-----(.*?)-----END/sg) {
133 # XXX-TODO: PKCS#8 EncryptedPrivateKeyInfo (PEM header: BEGIN ENCRYPTED PRIVATE KEY)
134 croak "FATAL: encrypted pkcs8 RSA private keys are not supported";
133 # PKCS#8 PrivateKeyInfo (PEM header: BEGIN ENCRYPTED PRIVATE KEY)
134 $data = pem_to_der($data, $password);
135 return $self->_import_pkcs8($data, $password);
135136 }
136137 elsif ($data =~ /^\s*(\{.*?\})\s*$/s) {
137138 # JSON Web Key (JWK) - http://tools.ietf.org/html/draft-ietf-jose-json-web-key
417418 fyoy4t3yHT+/nw==
418419 -----END PRIVATE KEY-----
419420
420 =item * PKCS#8 encrypted private keys ARE NOT SUPPORTED YET!
421 =item * PKCS#8 encrypted private keys - password protected keys (supported since: CryptX-0.062)
421422
422423 -----BEGIN ENCRYPTED PRIVATE KEY-----
423424 MIICojAcBgoqhkiG9w0BDAEDMA4ECCQk+Rr1yzzcAgIIAASCAoD/mgpUFjxxM/Ty
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use Carp;
77
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use base qw(Crypt::PRNG Exporter);
77 our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use base qw(Crypt::PRNG Exporter);
77 our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use base qw(Crypt::PRNG Exporter);
77 our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use base qw(Crypt::PRNG Exporter);
77 our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use base qw(Crypt::PRNG Exporter);
77 our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import';
77 our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] );
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use CryptX;
77
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use CryptX;
77
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use CryptX;
77
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use CryptX;
77
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use CryptX;
77
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use CryptX;
77
11
22 use strict;
33 use warnings ;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 require XSLoader;
77 XSLoader::load('CryptX', $VERSION);
11
22 use strict;
33 use warnings;
4 our $VERSION = '0.061';
4 our $VERSION = '0.062';
55
66 use CryptX;
77
4040 ltc/mac/xcbc/xcbc_process.o ltc/math/ltm_desc.o ltc/math/multi.o ltc/math/radix_to_bin.o \
4141 ltc/math/rand_bn.o ltc/math/rand_prime.o ltc/math/tfm_desc.o ltc/math/fp/ltc_ecc_fp_mulmod.o \
4242 ltc/misc/adler32.o ltc/misc/burn_stack.o ltc/misc/compare_testvector.o ltc/misc/copy_or_zeromem.o \
43 ltc/misc/crc32.o ltc/misc/error_to_string.o ltc/misc/mem_neq.o ltc/misc/pk_get_oid.o \
44 ltc/misc/pk_oid_str.o ltc/misc/zeromem.o ltc/misc/base16/base16_decode.o ltc/misc/base16/base16_encode.o \
45 ltc/misc/base32/base32_decode.o ltc/misc/base32/base32_encode.o ltc/misc/base64/base64_decode.o \
46 ltc/misc/base64/base64_encode.o ltc/misc/crypt/crypt.o ltc/misc/crypt/crypt_argchk.o \
47 ltc/misc/crypt/crypt_cipher_descriptor.o ltc/misc/crypt/crypt_cipher_is_valid.o ltc/misc/crypt/crypt_constants.o \
48 ltc/misc/crypt/crypt_find_cipher.o ltc/misc/crypt/crypt_find_cipher_any.o ltc/misc/crypt/crypt_find_cipher_id.o \
49 ltc/misc/crypt/crypt_find_hash.o ltc/misc/crypt/crypt_find_hash_any.o ltc/misc/crypt/crypt_find_hash_id.o \
50 ltc/misc/crypt/crypt_find_hash_oid.o ltc/misc/crypt/crypt_find_prng.o ltc/misc/crypt/crypt_fsa.o \
51 ltc/misc/crypt/crypt_hash_descriptor.o ltc/misc/crypt/crypt_hash_is_valid.o ltc/misc/crypt/crypt_inits.o \
52 ltc/misc/crypt/crypt_ltc_mp_descriptor.o ltc/misc/crypt/crypt_prng_descriptor.o ltc/misc/crypt/crypt_prng_is_valid.o \
53 ltc/misc/crypt/crypt_prng_rng_descriptor.o ltc/misc/crypt/crypt_register_all_ciphers.o \
54 ltc/misc/crypt/crypt_register_all_hashes.o ltc/misc/crypt/crypt_register_all_prngs.o \
55 ltc/misc/crypt/crypt_register_cipher.o ltc/misc/crypt/crypt_register_hash.o ltc/misc/crypt/crypt_register_prng.o \
56 ltc/misc/crypt/crypt_sizes.o ltc/misc/crypt/crypt_unregister_cipher.o ltc/misc/crypt/crypt_unregister_hash.o \
57 ltc/misc/crypt/crypt_unregister_prng.o ltc/misc/hkdf/hkdf.o ltc/misc/padding/padding_depad.o \
58 ltc/misc/padding/padding_pad.o ltc/misc/pkcs5/pkcs_5_1.o ltc/misc/pkcs5/pkcs_5_2.o \
43 ltc/misc/crc32.o ltc/misc/error_to_string.o ltc/misc/mem_neq.o ltc/misc/zeromem.o \
44 ltc/misc/base16/base16_decode.o ltc/misc/base16/base16_encode.o ltc/misc/base32/base32_decode.o \
45 ltc/misc/base32/base32_encode.o ltc/misc/base64/base64_decode.o ltc/misc/base64/base64_encode.o \
46 ltc/misc/crypt/crypt.o ltc/misc/crypt/crypt_argchk.o ltc/misc/crypt/crypt_cipher_descriptor.o \
47 ltc/misc/crypt/crypt_cipher_is_valid.o ltc/misc/crypt/crypt_constants.o ltc/misc/crypt/crypt_find_cipher.o \
48 ltc/misc/crypt/crypt_find_cipher_any.o ltc/misc/crypt/crypt_find_cipher_id.o ltc/misc/crypt/crypt_find_hash.o \
49 ltc/misc/crypt/crypt_find_hash_any.o ltc/misc/crypt/crypt_find_hash_id.o ltc/misc/crypt/crypt_find_hash_oid.o \
50 ltc/misc/crypt/crypt_find_prng.o ltc/misc/crypt/crypt_fsa.o ltc/misc/crypt/crypt_hash_descriptor.o \
51 ltc/misc/crypt/crypt_hash_is_valid.o ltc/misc/crypt/crypt_inits.o ltc/misc/crypt/crypt_ltc_mp_descriptor.o \
52 ltc/misc/crypt/crypt_prng_descriptor.o ltc/misc/crypt/crypt_prng_is_valid.o ltc/misc/crypt/crypt_prng_rng_descriptor.o \
53 ltc/misc/crypt/crypt_register_all_ciphers.o ltc/misc/crypt/crypt_register_all_hashes.o \
54 ltc/misc/crypt/crypt_register_all_prngs.o ltc/misc/crypt/crypt_register_cipher.o \
55 ltc/misc/crypt/crypt_register_hash.o ltc/misc/crypt/crypt_register_prng.o ltc/misc/crypt/crypt_sizes.o \
56 ltc/misc/crypt/crypt_unregister_cipher.o ltc/misc/crypt/crypt_unregister_hash.o ltc/misc/crypt/crypt_unregister_prng.o \
57 ltc/misc/hkdf/hkdf.o ltc/misc/padding/padding_depad.o ltc/misc/padding/padding_pad.o \
58 ltc/misc/pbes/pbes.o ltc/misc/pbes/pbes1.o ltc/misc/pbes/pbes2.o ltc/misc/pkcs12/pkcs12_kdf.o \
59 ltc/misc/pkcs12/pkcs12_utf8_to_utf16.o ltc/misc/pkcs5/pkcs_5_1.o ltc/misc/pkcs5/pkcs_5_2.o \
60 ltc/misc/ssh/ssh_decode_sequence_multi.o ltc/misc/ssh/ssh_encode_sequence_multi.o \
5961 ltc/modes/cbc/cbc_decrypt.o ltc/modes/cbc/cbc_done.o ltc/modes/cbc/cbc_encrypt.o \
6062 ltc/modes/cbc/cbc_getiv.o ltc/modes/cbc/cbc_setiv.o ltc/modes/cbc/cbc_start.o ltc/modes/cfb/cfb_decrypt.o \
6163 ltc/modes/cfb/cfb_done.o ltc/modes/cfb/cfb_encrypt.o ltc/modes/cfb/cfb_getiv.o ltc/modes/cfb/cfb_setiv.o \
9294 ltc/pk/asn1/der/utctime/der_decode_utctime.o ltc/pk/asn1/der/utctime/der_encode_utctime.o \
9395 ltc/pk/asn1/der/utctime/der_length_utctime.o ltc/pk/asn1/der/utf8/der_decode_utf8_string.o \
9496 ltc/pk/asn1/der/utf8/der_encode_utf8_string.o ltc/pk/asn1/der/utf8/der_length_utf8_string.o \
95 ltc/pk/asn1/x509/x509_decode_subject_public_key_info.o ltc/pk/asn1/x509/x509_encode_subject_public_key_info.o \
96 ltc/pk/dh/dh.o ltc/pk/dh/dh_check_pubkey.o ltc/pk/dh/dh_export.o ltc/pk/dh/dh_export_key.o \
97 ltc/pk/dh/dh_free.o ltc/pk/dh/dh_generate_key.o ltc/pk/dh/dh_import.o ltc/pk/dh/dh_set.o \
98 ltc/pk/dh/dh_set_pg_dhparam.o ltc/pk/dh/dh_shared_secret.o ltc/pk/dsa/dsa_decrypt_key.o \
99 ltc/pk/dsa/dsa_encrypt_key.o ltc/pk/dsa/dsa_export.o ltc/pk/dsa/dsa_free.o ltc/pk/dsa/dsa_generate_key.o \
100 ltc/pk/dsa/dsa_generate_pqg.o ltc/pk/dsa/dsa_import.o ltc/pk/dsa/dsa_make_key.o ltc/pk/dsa/dsa_set.o \
101 ltc/pk/dsa/dsa_set_pqg_dsaparam.o ltc/pk/dsa/dsa_shared_secret.o ltc/pk/dsa/dsa_sign_hash.o \
102 ltc/pk/dsa/dsa_verify_hash.o ltc/pk/dsa/dsa_verify_key.o ltc/pk/ecc/ecc.o ltc/pk/ecc/ecc_ansi_x963_export.o \
103 ltc/pk/ecc/ecc_ansi_x963_import.o ltc/pk/ecc/ecc_decrypt_key.o ltc/pk/ecc/ecc_encrypt_key.o \
104 ltc/pk/ecc/ecc_export.o ltc/pk/ecc/ecc_export_openssl.o ltc/pk/ecc/ecc_free.o ltc/pk/ecc/ecc_get_curve.o \
97 ltc/pk/asn1/oid/pk_get_oid.o ltc/pk/asn1/oid/pk_oid_cmp.o ltc/pk/asn1/oid/pk_oid_str.o \
98 ltc/pk/asn1/pkcs8/pkcs8_decode_flexi.o ltc/pk/asn1/x509/x509_decode_subject_public_key_info.o \
99 ltc/pk/asn1/x509/x509_encode_subject_public_key_info.o ltc/pk/dh/dh.o ltc/pk/dh/dh_check_pubkey.o \
100 ltc/pk/dh/dh_export.o ltc/pk/dh/dh_export_key.o ltc/pk/dh/dh_free.o ltc/pk/dh/dh_generate_key.o \
101 ltc/pk/dh/dh_import.o ltc/pk/dh/dh_set.o ltc/pk/dh/dh_set_pg_dhparam.o ltc/pk/dh/dh_shared_secret.o \
102 ltc/pk/dsa/dsa_decrypt_key.o ltc/pk/dsa/dsa_encrypt_key.o ltc/pk/dsa/dsa_export.o \
103 ltc/pk/dsa/dsa_free.o ltc/pk/dsa/dsa_generate_key.o ltc/pk/dsa/dsa_generate_pqg.o \
104 ltc/pk/dsa/dsa_import.o ltc/pk/dsa/dsa_make_key.o ltc/pk/dsa/dsa_set.o ltc/pk/dsa/dsa_set_pqg_dsaparam.o \
105 ltc/pk/dsa/dsa_shared_secret.o ltc/pk/dsa/dsa_sign_hash.o ltc/pk/dsa/dsa_verify_hash.o \
106 ltc/pk/dsa/dsa_verify_key.o ltc/pk/ecc/ecc.o ltc/pk/ecc/ecc_ansi_x963_export.o ltc/pk/ecc/ecc_ansi_x963_import.o \
107 ltc/pk/ecc/ecc_decrypt_key.o ltc/pk/ecc/ecc_encrypt_key.o ltc/pk/ecc/ecc_export.o \
108 ltc/pk/ecc/ecc_export_openssl.o ltc/pk/ecc/ecc_find_curve.o ltc/pk/ecc/ecc_free.o \
105109 ltc/pk/ecc/ecc_get_key.o ltc/pk/ecc/ecc_get_oid_str.o ltc/pk/ecc/ecc_get_size.o ltc/pk/ecc/ecc_import.o \
106110 ltc/pk/ecc/ecc_import_openssl.o ltc/pk/ecc/ecc_import_pkcs8.o ltc/pk/ecc/ecc_import_x509.o \
107 ltc/pk/ecc/ecc_make_key.o ltc/pk/ecc/ecc_set_dp.o ltc/pk/ecc/ecc_set_dp_internal.o \
108 ltc/pk/ecc/ecc_set_key.o ltc/pk/ecc/ecc_shared_secret.o ltc/pk/ecc/ecc_sign_hash.o \
109 ltc/pk/ecc/ecc_sizes.o ltc/pk/ecc/ecc_verify_hash.o ltc/pk/ecc/ltc_ecc_export_point.o \
110 ltc/pk/ecc/ltc_ecc_import_point.o ltc/pk/ecc/ltc_ecc_is_point.o ltc/pk/ecc/ltc_ecc_is_point_at_infinity.o \
111 ltc/pk/ecc/ltc_ecc_map.o ltc/pk/ecc/ltc_ecc_mul2add.o ltc/pk/ecc/ltc_ecc_mulmod.o \
112 ltc/pk/ecc/ltc_ecc_mulmod_timing.o ltc/pk/ecc/ltc_ecc_points.o ltc/pk/ecc/ltc_ecc_projective_add_point.o \
113 ltc/pk/ecc/ltc_ecc_projective_dbl_point.o ltc/pk/ecc/ltc_ecc_verify_key.o ltc/pk/pkcs1/pkcs_1_i2osp.o \
114 ltc/pk/pkcs1/pkcs_1_mgf1.o ltc/pk/pkcs1/pkcs_1_oaep_decode.o ltc/pk/pkcs1/pkcs_1_oaep_encode.o \
115 ltc/pk/pkcs1/pkcs_1_os2ip.o ltc/pk/pkcs1/pkcs_1_pss_decode.o ltc/pk/pkcs1/pkcs_1_pss_encode.o \
116 ltc/pk/pkcs1/pkcs_1_v1_5_decode.o ltc/pk/pkcs1/pkcs_1_v1_5_encode.o ltc/pk/rsa/rsa_decrypt_key.o \
117 ltc/pk/rsa/rsa_encrypt_key.o ltc/pk/rsa/rsa_export.o ltc/pk/rsa/rsa_exptmod.o ltc/pk/rsa/rsa_free.o \
118 ltc/pk/rsa/rsa_get_size.o ltc/pk/rsa/rsa_import.o ltc/pk/rsa/rsa_import_pkcs8.o ltc/pk/rsa/rsa_import_x509.o \
111 ltc/pk/ecc/ecc_make_key.o ltc/pk/ecc/ecc_recover_key.o ltc/pk/ecc/ecc_set_curve.o \
112 ltc/pk/ecc/ecc_set_curve_internal.o ltc/pk/ecc/ecc_set_key.o ltc/pk/ecc/ecc_shared_secret.o \
113 ltc/pk/ecc/ecc_sign_hash.o ltc/pk/ecc/ecc_sizes.o ltc/pk/ecc/ecc_ssh_ecdsa_encode_name.o \
114 ltc/pk/ecc/ecc_verify_hash.o ltc/pk/ecc/ltc_ecc_export_point.o ltc/pk/ecc/ltc_ecc_import_point.o \
115 ltc/pk/ecc/ltc_ecc_is_point.o ltc/pk/ecc/ltc_ecc_is_point_at_infinity.o ltc/pk/ecc/ltc_ecc_map.o \
116 ltc/pk/ecc/ltc_ecc_mul2add.o ltc/pk/ecc/ltc_ecc_mulmod.o ltc/pk/ecc/ltc_ecc_mulmod_timing.o \
117 ltc/pk/ecc/ltc_ecc_points.o ltc/pk/ecc/ltc_ecc_projective_add_point.o ltc/pk/ecc/ltc_ecc_projective_dbl_point.o \
118 ltc/pk/ecc/ltc_ecc_verify_key.o ltc/pk/pkcs1/pkcs_1_i2osp.o ltc/pk/pkcs1/pkcs_1_mgf1.o \
119 ltc/pk/pkcs1/pkcs_1_oaep_decode.o ltc/pk/pkcs1/pkcs_1_oaep_encode.o ltc/pk/pkcs1/pkcs_1_os2ip.o \
120 ltc/pk/pkcs1/pkcs_1_pss_decode.o ltc/pk/pkcs1/pkcs_1_pss_encode.o ltc/pk/pkcs1/pkcs_1_v1_5_decode.o \
121 ltc/pk/pkcs1/pkcs_1_v1_5_encode.o ltc/pk/rsa/rsa_decrypt_key.o ltc/pk/rsa/rsa_encrypt_key.o \
122 ltc/pk/rsa/rsa_export.o ltc/pk/rsa/rsa_exptmod.o ltc/pk/rsa/rsa_free.o ltc/pk/rsa/rsa_get_size.o \
123 ltc/pk/rsa/rsa_import.o ltc/pk/rsa/rsa_import_pkcs8.o ltc/pk/rsa/rsa_import_x509.o \
119124 ltc/pk/rsa/rsa_make_key.o ltc/pk/rsa/rsa_set.o ltc/pk/rsa/rsa_sign_hash.o ltc/pk/rsa/rsa_sign_saltlen_get.o \
120125 ltc/pk/rsa/rsa_verify_hash.o ltc/prngs/chacha20.o ltc/prngs/fortuna.o ltc/prngs/rc4.o \
121126 ltc/prngs/rng_get_bytes.o ltc/prngs/rng_make_prng.o ltc/prngs/sober128.o ltc/prngs/sprng.o \
122127 ltc/prngs/yarrow.o ltc/stream/chacha/chacha_crypt.o ltc/stream/chacha/chacha_done.o \
123128 ltc/stream/chacha/chacha_ivctr32.o ltc/stream/chacha/chacha_ivctr64.o ltc/stream/chacha/chacha_keystream.o \
124 ltc/stream/chacha/chacha_setup.o ltc/stream/rabbit/rabbit.o ltc/stream/rc4/rc4_stream.o \
129 ltc/stream/chacha/chacha_memory.o ltc/stream/chacha/chacha_setup.o ltc/stream/rabbit/rabbit.o \
130 ltc/stream/rabbit/rabbit_memory.o ltc/stream/rc4/rc4_stream.o ltc/stream/rc4/rc4_stream_memory.o \
125131 ltc/stream/salsa20/salsa20_crypt.o ltc/stream/salsa20/salsa20_done.o ltc/stream/salsa20/salsa20_ivctr64.o \
126 ltc/stream/salsa20/salsa20_keystream.o ltc/stream/salsa20/salsa20_setup.o ltc/stream/salsa20/xsalsa20_setup.o \
127 ltc/stream/sober128/sober128_stream.o ltc/stream/sosemanuk/sosemanuk.o ltm/bncore.o \
128 ltm/bn_error.o ltm/bn_fast_mp_invmod.o ltm/bn_fast_mp_montgomery_reduce.o ltm/bn_fast_s_mp_mul_digs.o \
129 ltm/bn_fast_s_mp_mul_high_digs.o ltm/bn_fast_s_mp_sqr.o ltm/bn_mp_2expt.o ltm/bn_mp_abs.o \
130 ltm/bn_mp_add.o ltm/bn_mp_addmod.o ltm/bn_mp_add_d.o ltm/bn_mp_and.o ltm/bn_mp_clamp.o \
131 ltm/bn_mp_clear.o ltm/bn_mp_clear_multi.o ltm/bn_mp_cmp.o ltm/bn_mp_cmp_d.o ltm/bn_mp_cmp_mag.o \
132 ltm/bn_mp_cnt_lsb.o ltm/bn_mp_copy.o ltm/bn_mp_count_bits.o ltm/bn_mp_div.o ltm/bn_mp_div_2.o \
133 ltm/bn_mp_div_2d.o ltm/bn_mp_div_3.o ltm/bn_mp_div_d.o ltm/bn_mp_dr_is_modulus.o \
134 ltm/bn_mp_dr_reduce.o ltm/bn_mp_dr_setup.o ltm/bn_mp_exch.o ltm/bn_mp_export.o ltm/bn_mp_exptmod.o \
135 ltm/bn_mp_exptmod_fast.o ltm/bn_mp_expt_d.o ltm/bn_mp_expt_d_ex.o ltm/bn_mp_exteuclid.o \
136 ltm/bn_mp_fread.o ltm/bn_mp_fwrite.o ltm/bn_mp_gcd.o ltm/bn_mp_get_int.o ltm/bn_mp_get_long.o \
137 ltm/bn_mp_grow.o ltm/bn_mp_import.o ltm/bn_mp_init.o ltm/bn_mp_init_copy.o ltm/bn_mp_init_multi.o \
132 ltc/stream/salsa20/salsa20_keystream.o ltc/stream/salsa20/salsa20_memory.o ltc/stream/salsa20/salsa20_setup.o \
133 ltc/stream/salsa20/xsalsa20_memory.o ltc/stream/salsa20/xsalsa20_setup.o ltc/stream/sober128/sober128_stream.o \
134 ltc/stream/sober128/sober128_stream_memory.o ltc/stream/sosemanuk/sosemanuk.o ltc/stream/sosemanuk/sosemanuk_memory.o \
135 ltm/bncore.o ltm/bn_error.o ltm/bn_fast_mp_invmod.o ltm/bn_fast_mp_montgomery_reduce.o \
136 ltm/bn_fast_s_mp_mul_digs.o ltm/bn_fast_s_mp_mul_high_digs.o ltm/bn_fast_s_mp_sqr.o \
137 ltm/bn_mp_2expt.o ltm/bn_mp_abs.o ltm/bn_mp_add.o ltm/bn_mp_addmod.o ltm/bn_mp_add_d.o \
138 ltm/bn_mp_and.o ltm/bn_mp_clamp.o ltm/bn_mp_clear.o ltm/bn_mp_clear_multi.o ltm/bn_mp_cmp.o \
139 ltm/bn_mp_cmp_d.o ltm/bn_mp_cmp_mag.o ltm/bn_mp_cnt_lsb.o ltm/bn_mp_complement.o \
140 ltm/bn_mp_copy.o ltm/bn_mp_count_bits.o ltm/bn_mp_div.o ltm/bn_mp_div_2.o ltm/bn_mp_div_2d.o \
141 ltm/bn_mp_div_3.o ltm/bn_mp_div_d.o ltm/bn_mp_dr_is_modulus.o ltm/bn_mp_dr_reduce.o \
142 ltm/bn_mp_dr_setup.o ltm/bn_mp_exch.o ltm/bn_mp_export.o ltm/bn_mp_exptmod.o ltm/bn_mp_exptmod_fast.o \
143 ltm/bn_mp_expt_d.o ltm/bn_mp_expt_d_ex.o ltm/bn_mp_exteuclid.o ltm/bn_mp_fread.o \
144 ltm/bn_mp_fwrite.o ltm/bn_mp_gcd.o ltm/bn_mp_get_int.o ltm/bn_mp_get_long.o ltm/bn_mp_grow.o \
145 ltm/bn_mp_import.o ltm/bn_mp_init.o ltm/bn_mp_init_copy.o ltm/bn_mp_init_multi.o \
138146 ltm/bn_mp_init_set.o ltm/bn_mp_init_set_int.o ltm/bn_mp_init_size.o ltm/bn_mp_invmod.o \
139147 ltm/bn_mp_invmod_slow.o ltm/bn_mp_is_square.o ltm/bn_mp_jacobi.o ltm/bn_mp_karatsuba_mul.o \
140148 ltm/bn_mp_karatsuba_sqr.o ltm/bn_mp_lcm.o ltm/bn_mp_lshd.o ltm/bn_mp_mod.o ltm/bn_mp_mod_2d.o \
150158 ltm/bn_mp_reduce_setup.o ltm/bn_mp_rshd.o ltm/bn_mp_set.o ltm/bn_mp_set_int.o ltm/bn_mp_set_long.o \
151159 ltm/bn_mp_shrink.o ltm/bn_mp_signed_bin_size.o ltm/bn_mp_sqr.o ltm/bn_mp_sqrmod.o \
152160 ltm/bn_mp_sqrt.o ltm/bn_mp_sqrtmod_prime.o ltm/bn_mp_sub.o ltm/bn_mp_submod.o ltm/bn_mp_sub_d.o \
153 ltm/bn_mp_toom_mul.o ltm/bn_mp_toom_sqr.o ltm/bn_mp_toradix.o ltm/bn_mp_toradix_n.o \
154 ltm/bn_mp_to_signed_bin.o ltm/bn_mp_to_signed_bin_n.o ltm/bn_mp_to_unsigned_bin.o \
155 ltm/bn_mp_to_unsigned_bin_n.o ltm/bn_mp_unsigned_bin_size.o ltm/bn_mp_xor.o ltm/bn_mp_zero.o \
156 ltm/bn_prime_tab.o ltm/bn_reverse.o ltm/bn_s_mp_add.o ltm/bn_s_mp_exptmod.o ltm/bn_s_mp_mul_digs.o \
157 ltm/bn_s_mp_mul_high_digs.o ltm/bn_s_mp_sqr.o ltm/bn_s_mp_sub.o
161 ltm/bn_mp_tc_and.o ltm/bn_mp_tc_div_2d.o ltm/bn_mp_tc_or.o ltm/bn_mp_tc_xor.o ltm/bn_mp_toom_mul.o \
162 ltm/bn_mp_toom_sqr.o ltm/bn_mp_toradix.o ltm/bn_mp_toradix_n.o ltm/bn_mp_to_signed_bin.o \
163 ltm/bn_mp_to_signed_bin_n.o ltm/bn_mp_to_unsigned_bin.o ltm/bn_mp_to_unsigned_bin_n.o \
164 ltm/bn_mp_unsigned_bin_size.o ltm/bn_mp_xor.o ltm/bn_mp_zero.o ltm/bn_prime_tab.o \
165 ltm/bn_reverse.o ltm/bn_s_mp_add.o ltm/bn_s_mp_exptmod.o ltm/bn_s_mp_mul_digs.o ltm/bn_s_mp_mul_high_digs.o \
166 ltm/bn_s_mp_sqr.o ltm/bn_s_mp_sub.o
158167
159168 LIB_EXT =.a
160169 OBJ_EXT =.o
175184 .SUFFIXES: .o .c
176185
177186 .c$(OBJ_EXT):
178 $(CC) -Iltm -Iltc/headers -DLTC_SOURCE -DLTC_NO_TEST -DLTC_NO_PROTOTYPES -DLTM_DESC $(CFLAGS) -c $< -o $@
187 $(CC) -Iltm -Iltc/headers -DLTC_SOURCE -DLTC_NO_TEST -DLTC_NO_PROTOTYPES -DLTM_DESC $(CFLAGS) -DARGTYPE=4 -c $< -o $@
4343 ltc/mac/xcbc/xcbc_process.obj ltc/math/ltm_desc.obj ltc/math/multi.obj ltc/math/radix_to_bin.obj \
4444 ltc/math/rand_bn.obj ltc/math/rand_prime.obj ltc/math/tfm_desc.obj ltc/math/fp/ltc_ecc_fp_mulmod.obj \
4545 ltc/misc/adler32.obj ltc/misc/burn_stack.obj ltc/misc/compare_testvector.obj ltc/misc/copy_or_zeromem.obj \
46 ltc/misc/crc32.obj ltc/misc/error_to_string.obj ltc/misc/mem_neq.obj ltc/misc/pk_get_oid.obj \
47 ltc/misc/pk_oid_str.obj ltc/misc/zeromem.obj ltc/misc/base16/base16_decode.obj ltc/misc/base16/base16_encode.obj \
48 ltc/misc/base32/base32_decode.obj ltc/misc/base32/base32_encode.obj ltc/misc/base64/base64_decode.obj \
49 ltc/misc/base64/base64_encode.obj ltc/misc/crypt/crypt.obj ltc/misc/crypt/crypt_argchk.obj \
50 ltc/misc/crypt/crypt_cipher_descriptor.obj ltc/misc/crypt/crypt_cipher_is_valid.obj \
51 ltc/misc/crypt/crypt_constants.obj ltc/misc/crypt/crypt_find_cipher.obj ltc/misc/crypt/crypt_find_cipher_any.obj \
52 ltc/misc/crypt/crypt_find_cipher_id.obj ltc/misc/crypt/crypt_find_hash.obj ltc/misc/crypt/crypt_find_hash_any.obj \
53 ltc/misc/crypt/crypt_find_hash_id.obj ltc/misc/crypt/crypt_find_hash_oid.obj ltc/misc/crypt/crypt_find_prng.obj \
54 ltc/misc/crypt/crypt_fsa.obj ltc/misc/crypt/crypt_hash_descriptor.obj ltc/misc/crypt/crypt_hash_is_valid.obj \
55 ltc/misc/crypt/crypt_inits.obj ltc/misc/crypt/crypt_ltc_mp_descriptor.obj ltc/misc/crypt/crypt_prng_descriptor.obj \
46 ltc/misc/crc32.obj ltc/misc/error_to_string.obj ltc/misc/mem_neq.obj ltc/misc/zeromem.obj \
47 ltc/misc/base16/base16_decode.obj ltc/misc/base16/base16_encode.obj ltc/misc/base32/base32_decode.obj \
48 ltc/misc/base32/base32_encode.obj ltc/misc/base64/base64_decode.obj ltc/misc/base64/base64_encode.obj \
49 ltc/misc/crypt/crypt.obj ltc/misc/crypt/crypt_argchk.obj ltc/misc/crypt/crypt_cipher_descriptor.obj \
50 ltc/misc/crypt/crypt_cipher_is_valid.obj ltc/misc/crypt/crypt_constants.obj ltc/misc/crypt/crypt_find_cipher.obj \
51 ltc/misc/crypt/crypt_find_cipher_any.obj ltc/misc/crypt/crypt_find_cipher_id.obj \
52 ltc/misc/crypt/crypt_find_hash.obj ltc/misc/crypt/crypt_find_hash_any.obj ltc/misc/crypt/crypt_find_hash_id.obj \
53 ltc/misc/crypt/crypt_find_hash_oid.obj ltc/misc/crypt/crypt_find_prng.obj ltc/misc/crypt/crypt_fsa.obj \
54 ltc/misc/crypt/crypt_hash_descriptor.obj ltc/misc/crypt/crypt_hash_is_valid.obj ltc/misc/crypt/crypt_inits.obj \
55 ltc/misc/crypt/crypt_ltc_mp_descriptor.obj ltc/misc/crypt/crypt_prng_descriptor.obj \
5656 ltc/misc/crypt/crypt_prng_is_valid.obj ltc/misc/crypt/crypt_prng_rng_descriptor.obj \
5757 ltc/misc/crypt/crypt_register_all_ciphers.obj ltc/misc/crypt/crypt_register_all_hashes.obj \
5858 ltc/misc/crypt/crypt_register_all_prngs.obj ltc/misc/crypt/crypt_register_cipher.obj \
5959 ltc/misc/crypt/crypt_register_hash.obj ltc/misc/crypt/crypt_register_prng.obj ltc/misc/crypt/crypt_sizes.obj \
6060 ltc/misc/crypt/crypt_unregister_cipher.obj ltc/misc/crypt/crypt_unregister_hash.obj \
6161 ltc/misc/crypt/crypt_unregister_prng.obj ltc/misc/hkdf/hkdf.obj ltc/misc/padding/padding_depad.obj \
62 ltc/misc/padding/padding_pad.obj ltc/misc/pkcs5/pkcs_5_1.obj ltc/misc/pkcs5/pkcs_5_2.obj \
62 ltc/misc/padding/padding_pad.obj ltc/misc/pbes/pbes.obj ltc/misc/pbes/pbes1.obj ltc/misc/pbes/pbes2.obj \
63 ltc/misc/pkcs12/pkcs12_kdf.obj ltc/misc/pkcs12/pkcs12_utf8_to_utf16.obj ltc/misc/pkcs5/pkcs_5_1.obj \
64 ltc/misc/pkcs5/pkcs_5_2.obj ltc/misc/ssh/ssh_decode_sequence_multi.obj ltc/misc/ssh/ssh_encode_sequence_multi.obj \
6365 ltc/modes/cbc/cbc_decrypt.obj ltc/modes/cbc/cbc_done.obj ltc/modes/cbc/cbc_encrypt.obj \
6466 ltc/modes/cbc/cbc_getiv.obj ltc/modes/cbc/cbc_setiv.obj ltc/modes/cbc/cbc_start.obj \
6567 ltc/modes/cfb/cfb_decrypt.obj ltc/modes/cfb/cfb_done.obj ltc/modes/cfb/cfb_encrypt.obj \
98100 ltc/pk/asn1/der/utctime/der_decode_utctime.obj ltc/pk/asn1/der/utctime/der_encode_utctime.obj \
99101 ltc/pk/asn1/der/utctime/der_length_utctime.obj ltc/pk/asn1/der/utf8/der_decode_utf8_string.obj \
100102 ltc/pk/asn1/der/utf8/der_encode_utf8_string.obj ltc/pk/asn1/der/utf8/der_length_utf8_string.obj \
101 ltc/pk/asn1/x509/x509_decode_subject_public_key_info.obj ltc/pk/asn1/x509/x509_encode_subject_public_key_info.obj \
102 ltc/pk/dh/dh.obj ltc/pk/dh/dh_check_pubkey.obj ltc/pk/dh/dh_export.obj ltc/pk/dh/dh_export_key.obj \
103 ltc/pk/dh/dh_free.obj ltc/pk/dh/dh_generate_key.obj ltc/pk/dh/dh_import.obj ltc/pk/dh/dh_set.obj \
104 ltc/pk/dh/dh_set_pg_dhparam.obj ltc/pk/dh/dh_shared_secret.obj ltc/pk/dsa/dsa_decrypt_key.obj \
105 ltc/pk/dsa/dsa_encrypt_key.obj ltc/pk/dsa/dsa_export.obj ltc/pk/dsa/dsa_free.obj \
106 ltc/pk/dsa/dsa_generate_key.obj ltc/pk/dsa/dsa_generate_pqg.obj ltc/pk/dsa/dsa_import.obj \
107 ltc/pk/dsa/dsa_make_key.obj ltc/pk/dsa/dsa_set.obj ltc/pk/dsa/dsa_set_pqg_dsaparam.obj \
103 ltc/pk/asn1/oid/pk_get_oid.obj ltc/pk/asn1/oid/pk_oid_cmp.obj ltc/pk/asn1/oid/pk_oid_str.obj \
104 ltc/pk/asn1/pkcs8/pkcs8_decode_flexi.obj ltc/pk/asn1/x509/x509_decode_subject_public_key_info.obj \
105 ltc/pk/asn1/x509/x509_encode_subject_public_key_info.obj ltc/pk/dh/dh.obj ltc/pk/dh/dh_check_pubkey.obj \
106 ltc/pk/dh/dh_export.obj ltc/pk/dh/dh_export_key.obj ltc/pk/dh/dh_free.obj ltc/pk/dh/dh_generate_key.obj \
107 ltc/pk/dh/dh_import.obj ltc/pk/dh/dh_set.obj ltc/pk/dh/dh_set_pg_dhparam.obj ltc/pk/dh/dh_shared_secret.obj \
108 ltc/pk/dsa/dsa_decrypt_key.obj ltc/pk/dsa/dsa_encrypt_key.obj ltc/pk/dsa/dsa_export.obj \
109 ltc/pk/dsa/dsa_free.obj ltc/pk/dsa/dsa_generate_key.obj ltc/pk/dsa/dsa_generate_pqg.obj \
110 ltc/pk/dsa/dsa_import.obj ltc/pk/dsa/dsa_make_key.obj ltc/pk/dsa/dsa_set.obj ltc/pk/dsa/dsa_set_pqg_dsaparam.obj \
108111 ltc/pk/dsa/dsa_shared_secret.obj ltc/pk/dsa/dsa_sign_hash.obj ltc/pk/dsa/dsa_verify_hash.obj \
109112 ltc/pk/dsa/dsa_verify_key.obj ltc/pk/ecc/ecc.obj ltc/pk/ecc/ecc_ansi_x963_export.obj \
110113 ltc/pk/ecc/ecc_ansi_x963_import.obj ltc/pk/ecc/ecc_decrypt_key.obj ltc/pk/ecc/ecc_encrypt_key.obj \
111 ltc/pk/ecc/ecc_export.obj ltc/pk/ecc/ecc_export_openssl.obj ltc/pk/ecc/ecc_free.obj \
112 ltc/pk/ecc/ecc_get_curve.obj ltc/pk/ecc/ecc_get_key.obj ltc/pk/ecc/ecc_get_oid_str.obj \
114 ltc/pk/ecc/ecc_export.obj ltc/pk/ecc/ecc_export_openssl.obj ltc/pk/ecc/ecc_find_curve.obj \
115 ltc/pk/ecc/ecc_free.obj ltc/pk/ecc/ecc_get_key.obj ltc/pk/ecc/ecc_get_oid_str.obj \
113116 ltc/pk/ecc/ecc_get_size.obj ltc/pk/ecc/ecc_import.obj ltc/pk/ecc/ecc_import_openssl.obj \
114117 ltc/pk/ecc/ecc_import_pkcs8.obj ltc/pk/ecc/ecc_import_x509.obj ltc/pk/ecc/ecc_make_key.obj \
115 ltc/pk/ecc/ecc_set_dp.obj ltc/pk/ecc/ecc_set_dp_internal.obj ltc/pk/ecc/ecc_set_key.obj \
116 ltc/pk/ecc/ecc_shared_secret.obj ltc/pk/ecc/ecc_sign_hash.obj ltc/pk/ecc/ecc_sizes.obj \
117 ltc/pk/ecc/ecc_verify_hash.obj ltc/pk/ecc/ltc_ecc_export_point.obj ltc/pk/ecc/ltc_ecc_import_point.obj \
118 ltc/pk/ecc/ltc_ecc_is_point.obj ltc/pk/ecc/ltc_ecc_is_point_at_infinity.obj ltc/pk/ecc/ltc_ecc_map.obj \
119 ltc/pk/ecc/ltc_ecc_mul2add.obj ltc/pk/ecc/ltc_ecc_mulmod.obj ltc/pk/ecc/ltc_ecc_mulmod_timing.obj \
120 ltc/pk/ecc/ltc_ecc_points.obj ltc/pk/ecc/ltc_ecc_projective_add_point.obj ltc/pk/ecc/ltc_ecc_projective_dbl_point.obj \
118 ltc/pk/ecc/ecc_recover_key.obj ltc/pk/ecc/ecc_set_curve.obj ltc/pk/ecc/ecc_set_curve_internal.obj \
119 ltc/pk/ecc/ecc_set_key.obj ltc/pk/ecc/ecc_shared_secret.obj ltc/pk/ecc/ecc_sign_hash.obj \
120 ltc/pk/ecc/ecc_sizes.obj ltc/pk/ecc/ecc_ssh_ecdsa_encode_name.obj ltc/pk/ecc/ecc_verify_hash.obj \
121 ltc/pk/ecc/ltc_ecc_export_point.obj ltc/pk/ecc/ltc_ecc_import_point.obj ltc/pk/ecc/ltc_ecc_is_point.obj \
122 ltc/pk/ecc/ltc_ecc_is_point_at_infinity.obj ltc/pk/ecc/ltc_ecc_map.obj ltc/pk/ecc/ltc_ecc_mul2add.obj \
123 ltc/pk/ecc/ltc_ecc_mulmod.obj ltc/pk/ecc/ltc_ecc_mulmod_timing.obj ltc/pk/ecc/ltc_ecc_points.obj \
124 ltc/pk/ecc/ltc_ecc_projective_add_point.obj ltc/pk/ecc/ltc_ecc_projective_dbl_point.obj \
121125 ltc/pk/ecc/ltc_ecc_verify_key.obj ltc/pk/pkcs1/pkcs_1_i2osp.obj ltc/pk/pkcs1/pkcs_1_mgf1.obj \
122126 ltc/pk/pkcs1/pkcs_1_oaep_decode.obj ltc/pk/pkcs1/pkcs_1_oaep_encode.obj ltc/pk/pkcs1/pkcs_1_os2ip.obj \
123127 ltc/pk/pkcs1/pkcs_1_pss_decode.obj ltc/pk/pkcs1/pkcs_1_pss_encode.obj ltc/pk/pkcs1/pkcs_1_v1_5_decode.obj \
129133 ltc/prngs/rng_get_bytes.obj ltc/prngs/rng_make_prng.obj ltc/prngs/sober128.obj ltc/prngs/sprng.obj \
130134 ltc/prngs/yarrow.obj ltc/stream/chacha/chacha_crypt.obj ltc/stream/chacha/chacha_done.obj \
131135 ltc/stream/chacha/chacha_ivctr32.obj ltc/stream/chacha/chacha_ivctr64.obj ltc/stream/chacha/chacha_keystream.obj \
132 ltc/stream/chacha/chacha_setup.obj ltc/stream/rabbit/rabbit.obj ltc/stream/rc4/rc4_stream.obj \
136 ltc/stream/chacha/chacha_memory.obj ltc/stream/chacha/chacha_setup.obj ltc/stream/rabbit/rabbit.obj \
137 ltc/stream/rabbit/rabbit_memory.obj ltc/stream/rc4/rc4_stream.obj ltc/stream/rc4/rc4_stream_memory.obj \
133138 ltc/stream/salsa20/salsa20_crypt.obj ltc/stream/salsa20/salsa20_done.obj ltc/stream/salsa20/salsa20_ivctr64.obj \
134 ltc/stream/salsa20/salsa20_keystream.obj ltc/stream/salsa20/salsa20_setup.obj ltc/stream/salsa20/xsalsa20_setup.obj \
135 ltc/stream/sober128/sober128_stream.obj ltc/stream/sosemanuk/sosemanuk.obj ltm/bncore.obj \
136 ltm/bn_error.obj ltm/bn_fast_mp_invmod.obj ltm/bn_fast_mp_montgomery_reduce.obj ltm/bn_fast_s_mp_mul_digs.obj \
137 ltm/bn_fast_s_mp_mul_high_digs.obj ltm/bn_fast_s_mp_sqr.obj ltm/bn_mp_2expt.obj ltm/bn_mp_abs.obj \
138 ltm/bn_mp_add.obj ltm/bn_mp_addmod.obj ltm/bn_mp_add_d.obj ltm/bn_mp_and.obj ltm/bn_mp_clamp.obj \
139 ltm/bn_mp_clear.obj ltm/bn_mp_clear_multi.obj ltm/bn_mp_cmp.obj ltm/bn_mp_cmp_d.obj \
140 ltm/bn_mp_cmp_mag.obj ltm/bn_mp_cnt_lsb.obj ltm/bn_mp_copy.obj ltm/bn_mp_count_bits.obj \
139 ltc/stream/salsa20/salsa20_keystream.obj ltc/stream/salsa20/salsa20_memory.obj ltc/stream/salsa20/salsa20_setup.obj \
140 ltc/stream/salsa20/xsalsa20_memory.obj ltc/stream/salsa20/xsalsa20_setup.obj ltc/stream/sober128/sober128_stream.obj \
141 ltc/stream/sober128/sober128_stream_memory.obj ltc/stream/sosemanuk/sosemanuk.obj \
142 ltc/stream/sosemanuk/sosemanuk_memory.obj ltm/bncore.obj ltm/bn_error.obj ltm/bn_fast_mp_invmod.obj \
143 ltm/bn_fast_mp_montgomery_reduce.obj ltm/bn_fast_s_mp_mul_digs.obj ltm/bn_fast_s_mp_mul_high_digs.obj \
144 ltm/bn_fast_s_mp_sqr.obj ltm/bn_mp_2expt.obj ltm/bn_mp_abs.obj ltm/bn_mp_add.obj \
145 ltm/bn_mp_addmod.obj ltm/bn_mp_add_d.obj ltm/bn_mp_and.obj ltm/bn_mp_clamp.obj ltm/bn_mp_clear.obj \
146 ltm/bn_mp_clear_multi.obj ltm/bn_mp_cmp.obj ltm/bn_mp_cmp_d.obj ltm/bn_mp_cmp_mag.obj \
147 ltm/bn_mp_cnt_lsb.obj ltm/bn_mp_complement.obj ltm/bn_mp_copy.obj ltm/bn_mp_count_bits.obj \
141148 ltm/bn_mp_div.obj ltm/bn_mp_div_2.obj ltm/bn_mp_div_2d.obj ltm/bn_mp_div_3.obj ltm/bn_mp_div_d.obj \
142149 ltm/bn_mp_dr_is_modulus.obj ltm/bn_mp_dr_reduce.obj ltm/bn_mp_dr_setup.obj ltm/bn_mp_exch.obj \
143150 ltm/bn_mp_export.obj ltm/bn_mp_exptmod.obj ltm/bn_mp_exptmod_fast.obj ltm/bn_mp_expt_d.obj \
160167 ltm/bn_mp_rshd.obj ltm/bn_mp_set.obj ltm/bn_mp_set_int.obj ltm/bn_mp_set_long.obj \
161168 ltm/bn_mp_shrink.obj ltm/bn_mp_signed_bin_size.obj ltm/bn_mp_sqr.obj ltm/bn_mp_sqrmod.obj \
162169 ltm/bn_mp_sqrt.obj ltm/bn_mp_sqrtmod_prime.obj ltm/bn_mp_sub.obj ltm/bn_mp_submod.obj \
163 ltm/bn_mp_sub_d.obj ltm/bn_mp_toom_mul.obj ltm/bn_mp_toom_sqr.obj ltm/bn_mp_toradix.obj \
170 ltm/bn_mp_sub_d.obj ltm/bn_mp_tc_and.obj ltm/bn_mp_tc_div_2d.obj ltm/bn_mp_tc_or.obj \
171 ltm/bn_mp_tc_xor.obj ltm/bn_mp_toom_mul.obj ltm/bn_mp_toom_sqr.obj ltm/bn_mp_toradix.obj \
164172 ltm/bn_mp_toradix_n.obj ltm/bn_mp_to_signed_bin.obj ltm/bn_mp_to_signed_bin_n.obj \
165173 ltm/bn_mp_to_unsigned_bin.obj ltm/bn_mp_to_unsigned_bin_n.obj ltm/bn_mp_unsigned_bin_size.obj \
166174 ltm/bn_mp_xor.obj ltm/bn_mp_zero.obj ltm/bn_prime_tab.obj ltm/bn_reverse.obj ltm/bn_s_mp_add.obj \
177185 $(RM_F) $(OBJS) liballinone.lib
178186
179187 .c.obj:
180 cl /Iltm /Iltc/headers /DLTC_SOURCE /DLTC_NO_TEST /DLTC_NO_PROTOTYPES /DLTM_DESC $(CFLAGS) /c $< /Fo$@
188 cl /Iltm /Iltc/headers /DLTC_SOURCE /DLTC_NO_TEST /DLTC_NO_PROTOTYPES /DLTM_DESC /DARGTYPE=4 $(CFLAGS) /c $< /Fo$@
181189
9090
9191 static ulong32 setup_mix(ulong32 temp)
9292 {
93 return (Te4_3[byte(temp, 2)]) ^
94 (Te4_2[byte(temp, 1)]) ^
95 (Te4_1[byte(temp, 0)]) ^
96 (Te4_0[byte(temp, 3)]);
93 return (Te4_3[LTC_BYTE(temp, 2)]) ^
94 (Te4_2[LTC_BYTE(temp, 1)]) ^
95 (Te4_1[LTC_BYTE(temp, 0)]) ^
96 (Te4_0[LTC_BYTE(temp, 3)]);
9797 }
9898
9999 #ifndef ENCRYPT_ONLY
100100 #ifdef LTC_SMALL_CODE
101101 static ulong32 setup_mix2(ulong32 temp)
102102 {
103 return Td0(255 & Te4[byte(temp, 3)]) ^
104 Td1(255 & Te4[byte(temp, 2)]) ^
105 Td2(255 & Te4[byte(temp, 1)]) ^
106 Td3(255 & Te4[byte(temp, 0)]);
103 return Td0(255 & Te4[LTC_BYTE(temp, 3)]) ^
104 Td1(255 & Te4[LTC_BYTE(temp, 2)]) ^
105 Td2(255 & Te4[LTC_BYTE(temp, 1)]) ^
106 Td3(255 & Te4[LTC_BYTE(temp, 0)]);
107107 }
108108 #endif
109109 #endif
234234 #else
235235 temp = rrk[0];
236236 rk[0] =
237 Tks0[byte(temp, 3)] ^
238 Tks1[byte(temp, 2)] ^
239 Tks2[byte(temp, 1)] ^
240 Tks3[byte(temp, 0)];
237 Tks0[LTC_BYTE(temp, 3)] ^
238 Tks1[LTC_BYTE(temp, 2)] ^
239 Tks2[LTC_BYTE(temp, 1)] ^
240 Tks3[LTC_BYTE(temp, 0)];
241241 temp = rrk[1];
242242 rk[1] =
243 Tks0[byte(temp, 3)] ^
244 Tks1[byte(temp, 2)] ^
245 Tks2[byte(temp, 1)] ^
246 Tks3[byte(temp, 0)];
243 Tks0[LTC_BYTE(temp, 3)] ^
244 Tks1[LTC_BYTE(temp, 2)] ^
245 Tks2[LTC_BYTE(temp, 1)] ^
246 Tks3[LTC_BYTE(temp, 0)];
247247 temp = rrk[2];
248248 rk[2] =
249 Tks0[byte(temp, 3)] ^
250 Tks1[byte(temp, 2)] ^
251 Tks2[byte(temp, 1)] ^
252 Tks3[byte(temp, 0)];
249 Tks0[LTC_BYTE(temp, 3)] ^
250 Tks1[LTC_BYTE(temp, 2)] ^
251 Tks2[LTC_BYTE(temp, 1)] ^
252 Tks3[LTC_BYTE(temp, 0)];
253253 temp = rrk[3];
254254 rk[3] =
255 Tks0[byte(temp, 3)] ^
256 Tks1[byte(temp, 2)] ^
257 Tks2[byte(temp, 1)] ^
258 Tks3[byte(temp, 0)];
255 Tks0[LTC_BYTE(temp, 3)] ^
256 Tks1[LTC_BYTE(temp, 2)] ^
257 Tks2[LTC_BYTE(temp, 1)] ^
258 Tks3[LTC_BYTE(temp, 0)];
259259 #endif
260260
261261 }
310310 for (r = 0; ; r++) {
311311 rk += 4;
312312 t0 =
313 Te0(byte(s0, 3)) ^
314 Te1(byte(s1, 2)) ^
315 Te2(byte(s2, 1)) ^
316 Te3(byte(s3, 0)) ^
313 Te0(LTC_BYTE(s0, 3)) ^
314 Te1(LTC_BYTE(s1, 2)) ^
315 Te2(LTC_BYTE(s2, 1)) ^
316 Te3(LTC_BYTE(s3, 0)) ^
317317 rk[0];
318318 t1 =
319 Te0(byte(s1, 3)) ^
320 Te1(byte(s2, 2)) ^
321 Te2(byte(s3, 1)) ^
322 Te3(byte(s0, 0)) ^
319 Te0(LTC_BYTE(s1, 3)) ^
320 Te1(LTC_BYTE(s2, 2)) ^
321 Te2(LTC_BYTE(s3, 1)) ^
322 Te3(LTC_BYTE(s0, 0)) ^
323323 rk[1];
324324 t2 =
325 Te0(byte(s2, 3)) ^
326 Te1(byte(s3, 2)) ^
327 Te2(byte(s0, 1)) ^
328 Te3(byte(s1, 0)) ^
325 Te0(LTC_BYTE(s2, 3)) ^
326 Te1(LTC_BYTE(s3, 2)) ^
327 Te2(LTC_BYTE(s0, 1)) ^
328 Te3(LTC_BYTE(s1, 0)) ^
329329 rk[2];
330330 t3 =
331 Te0(byte(s3, 3)) ^
332 Te1(byte(s0, 2)) ^
333 Te2(byte(s1, 1)) ^
334 Te3(byte(s2, 0)) ^
331 Te0(LTC_BYTE(s3, 3)) ^
332 Te1(LTC_BYTE(s0, 2)) ^
333 Te2(LTC_BYTE(s1, 1)) ^
334 Te3(LTC_BYTE(s2, 0)) ^
335335 rk[3];
336336 if (r == Nr-2) {
337337 break;
348348 r = Nr >> 1;
349349 for (;;) {
350350 t0 =
351 Te0(byte(s0, 3)) ^
352 Te1(byte(s1, 2)) ^
353 Te2(byte(s2, 1)) ^
354 Te3(byte(s3, 0)) ^
351 Te0(LTC_BYTE(s0, 3)) ^
352 Te1(LTC_BYTE(s1, 2)) ^
353 Te2(LTC_BYTE(s2, 1)) ^
354 Te3(LTC_BYTE(s3, 0)) ^
355355 rk[4];
356356 t1 =
357 Te0(byte(s1, 3)) ^
358 Te1(byte(s2, 2)) ^
359 Te2(byte(s3, 1)) ^
360 Te3(byte(s0, 0)) ^
357 Te0(LTC_BYTE(s1, 3)) ^
358 Te1(LTC_BYTE(s2, 2)) ^
359 Te2(LTC_BYTE(s3, 1)) ^
360 Te3(LTC_BYTE(s0, 0)) ^
361361 rk[5];
362362 t2 =
363 Te0(byte(s2, 3)) ^
364 Te1(byte(s3, 2)) ^
365 Te2(byte(s0, 1)) ^
366 Te3(byte(s1, 0)) ^
363 Te0(LTC_BYTE(s2, 3)) ^
364 Te1(LTC_BYTE(s3, 2)) ^
365 Te2(LTC_BYTE(s0, 1)) ^
366 Te3(LTC_BYTE(s1, 0)) ^
367367 rk[6];
368368 t3 =
369 Te0(byte(s3, 3)) ^
370 Te1(byte(s0, 2)) ^
371 Te2(byte(s1, 1)) ^
372 Te3(byte(s2, 0)) ^
369 Te0(LTC_BYTE(s3, 3)) ^
370 Te1(LTC_BYTE(s0, 2)) ^
371 Te2(LTC_BYTE(s1, 1)) ^
372 Te3(LTC_BYTE(s2, 0)) ^
373373 rk[7];
374374
375375 rk += 8;
378378 }
379379
380380 s0 =
381 Te0(byte(t0, 3)) ^
382 Te1(byte(t1, 2)) ^
383 Te2(byte(t2, 1)) ^
384 Te3(byte(t3, 0)) ^
381 Te0(LTC_BYTE(t0, 3)) ^
382 Te1(LTC_BYTE(t1, 2)) ^
383 Te2(LTC_BYTE(t2, 1)) ^
384 Te3(LTC_BYTE(t3, 0)) ^
385385 rk[0];
386386 s1 =
387 Te0(byte(t1, 3)) ^
388 Te1(byte(t2, 2)) ^
389 Te2(byte(t3, 1)) ^
390 Te3(byte(t0, 0)) ^
387 Te0(LTC_BYTE(t1, 3)) ^
388 Te1(LTC_BYTE(t2, 2)) ^
389 Te2(LTC_BYTE(t3, 1)) ^
390 Te3(LTC_BYTE(t0, 0)) ^
391391 rk[1];
392392 s2 =
393 Te0(byte(t2, 3)) ^
394 Te1(byte(t3, 2)) ^
395 Te2(byte(t0, 1)) ^
396 Te3(byte(t1, 0)) ^
393 Te0(LTC_BYTE(t2, 3)) ^
394 Te1(LTC_BYTE(t3, 2)) ^
395 Te2(LTC_BYTE(t0, 1)) ^
396 Te3(LTC_BYTE(t1, 0)) ^
397397 rk[2];
398398 s3 =
399 Te0(byte(t3, 3)) ^
400 Te1(byte(t0, 2)) ^
401 Te2(byte(t1, 1)) ^
402 Te3(byte(t2, 0)) ^
399 Te0(LTC_BYTE(t3, 3)) ^
400 Te1(LTC_BYTE(t0, 2)) ^
401 Te2(LTC_BYTE(t1, 1)) ^
402 Te3(LTC_BYTE(t2, 0)) ^
403403 rk[3];
404404 }
405405
410410 * map cipher state to byte array block:
411411 */
412412 s0 =
413 (Te4_3[byte(t0, 3)]) ^
414 (Te4_2[byte(t1, 2)]) ^
415 (Te4_1[byte(t2, 1)]) ^
416 (Te4_0[byte(t3, 0)]) ^
413 (Te4_3[LTC_BYTE(t0, 3)]) ^
414 (Te4_2[LTC_BYTE(t1, 2)]) ^
415 (Te4_1[LTC_BYTE(t2, 1)]) ^
416 (Te4_0[LTC_BYTE(t3, 0)]) ^
417417 rk[0];
418418 STORE32H(s0, ct);
419419 s1 =
420 (Te4_3[byte(t1, 3)]) ^
421 (Te4_2[byte(t2, 2)]) ^
422 (Te4_1[byte(t3, 1)]) ^
423 (Te4_0[byte(t0, 0)]) ^
420 (Te4_3[LTC_BYTE(t1, 3)]) ^
421 (Te4_2[LTC_BYTE(t2, 2)]) ^
422 (Te4_1[LTC_BYTE(t3, 1)]) ^
423 (Te4_0[LTC_BYTE(t0, 0)]) ^
424424 rk[1];
425425 STORE32H(s1, ct+4);
426426 s2 =
427 (Te4_3[byte(t2, 3)]) ^
428 (Te4_2[byte(t3, 2)]) ^
429 (Te4_1[byte(t0, 1)]) ^
430 (Te4_0[byte(t1, 0)]) ^
427 (Te4_3[LTC_BYTE(t2, 3)]) ^
428 (Te4_2[LTC_BYTE(t3, 2)]) ^
429 (Te4_1[LTC_BYTE(t0, 1)]) ^
430 (Te4_0[LTC_BYTE(t1, 0)]) ^
431431 rk[2];
432432 STORE32H(s2, ct+8);
433433 s3 =
434 (Te4_3[byte(t3, 3)]) ^
435 (Te4_2[byte(t0, 2)]) ^
436 (Te4_1[byte(t1, 1)]) ^
437 (Te4_0[byte(t2, 0)]) ^
434 (Te4_3[LTC_BYTE(t3, 3)]) ^
435 (Te4_2[LTC_BYTE(t0, 2)]) ^
436 (Te4_1[LTC_BYTE(t1, 1)]) ^
437 (Te4_0[LTC_BYTE(t2, 0)]) ^
438438 rk[3];
439439 STORE32H(s3, ct+12);
440440
489489 for (r = 0; ; r++) {
490490 rk += 4;
491491 t0 =
492 Td0(byte(s0, 3)) ^
493 Td1(byte(s3, 2)) ^
494 Td2(byte(s2, 1)) ^
495 Td3(byte(s1, 0)) ^
492 Td0(LTC_BYTE(s0, 3)) ^
493 Td1(LTC_BYTE(s3, 2)) ^
494 Td2(LTC_BYTE(s2, 1)) ^
495 Td3(LTC_BYTE(s1, 0)) ^
496496 rk[0];
497497 t1 =
498 Td0(byte(s1, 3)) ^
499 Td1(byte(s0, 2)) ^
500 Td2(byte(s3, 1)) ^
501 Td3(byte(s2, 0)) ^
498 Td0(LTC_BYTE(s1, 3)) ^
499 Td1(LTC_BYTE(s0, 2)) ^
500 Td2(LTC_BYTE(s3, 1)) ^
501 Td3(LTC_BYTE(s2, 0)) ^
502502 rk[1];
503503 t2 =
504 Td0(byte(s2, 3)) ^
505 Td1(byte(s1, 2)) ^
506 Td2(byte(s0, 1)) ^
507 Td3(byte(s3, 0)) ^
504 Td0(LTC_BYTE(s2, 3)) ^
505 Td1(LTC_BYTE(s1, 2)) ^
506 Td2(LTC_BYTE(s0, 1)) ^
507 Td3(LTC_BYTE(s3, 0)) ^
508508 rk[2];
509509 t3 =
510 Td0(byte(s3, 3)) ^
511 Td1(byte(s2, 2)) ^
512 Td2(byte(s1, 1)) ^
513 Td3(byte(s0, 0)) ^
510 Td0(LTC_BYTE(s3, 3)) ^
511 Td1(LTC_BYTE(s2, 2)) ^
512 Td2(LTC_BYTE(s1, 1)) ^
513 Td3(LTC_BYTE(s0, 0)) ^
514514 rk[3];
515515 if (r == Nr-2) {
516516 break;
528528 for (;;) {
529529
530530 t0 =
531 Td0(byte(s0, 3)) ^
532 Td1(byte(s3, 2)) ^
533 Td2(byte(s2, 1)) ^
534 Td3(byte(s1, 0)) ^
531 Td0(LTC_BYTE(s0, 3)) ^
532 Td1(LTC_BYTE(s3, 2)) ^
533 Td2(LTC_BYTE(s2, 1)) ^
534 Td3(LTC_BYTE(s1, 0)) ^
535535 rk[4];
536536 t1 =
537 Td0(byte(s1, 3)) ^
538 Td1(byte(s0, 2)) ^
539 Td2(byte(s3, 1)) ^
540 Td3(byte(s2, 0)) ^
537 Td0(LTC_BYTE(s1, 3)) ^
538 Td1(LTC_BYTE(s0, 2)) ^
539 Td2(LTC_BYTE(s3, 1)) ^
540 Td3(LTC_BYTE(s2, 0)) ^
541541 rk[5];
542542 t2 =
543 Td0(byte(s2, 3)) ^
544 Td1(byte(s1, 2)) ^
545 Td2(byte(s0, 1)) ^
546 Td3(byte(s3, 0)) ^
543 Td0(LTC_BYTE(s2, 3)) ^
544 Td1(LTC_BYTE(s1, 2)) ^
545 Td2(LTC_BYTE(s0, 1)) ^
546 Td3(LTC_BYTE(s3, 0)) ^
547547 rk[6];
548548 t3 =
549 Td0(byte(s3, 3)) ^
550 Td1(byte(s2, 2)) ^
551 Td2(byte(s1, 1)) ^
552 Td3(byte(s0, 0)) ^
549 Td0(LTC_BYTE(s3, 3)) ^
550 Td1(LTC_BYTE(s2, 2)) ^
551 Td2(LTC_BYTE(s1, 1)) ^
552 Td3(LTC_BYTE(s0, 0)) ^
553553 rk[7];
554554
555555 rk += 8;
559559
560560
561561 s0 =
562 Td0(byte(t0, 3)) ^
563 Td1(byte(t3, 2)) ^
564 Td2(byte(t2, 1)) ^
565 Td3(byte(t1, 0)) ^
562 Td0(LTC_BYTE(t0, 3)) ^
563 Td1(LTC_BYTE(t3, 2)) ^
564 Td2(LTC_BYTE(t2, 1)) ^
565 Td3(LTC_BYTE(t1, 0)) ^
566566 rk[0];
567567 s1 =
568 Td0(byte(t1, 3)) ^
569 Td1(byte(t0, 2)) ^
570 Td2(byte(t3, 1)) ^
571 Td3(byte(t2, 0)) ^
568 Td0(LTC_BYTE(t1, 3)) ^
569 Td1(LTC_BYTE(t0, 2)) ^
570 Td2(LTC_BYTE(t3, 1)) ^
571 Td3(LTC_BYTE(t2, 0)) ^
572572 rk[1];
573573 s2 =
574 Td0(byte(t2, 3)) ^
575 Td1(byte(t1, 2)) ^
576 Td2(byte(t0, 1)) ^
577 Td3(byte(t3, 0)) ^
574 Td0(LTC_BYTE(t2, 3)) ^
575 Td1(LTC_BYTE(t1, 2)) ^
576 Td2(LTC_BYTE(t0, 1)) ^
577 Td3(LTC_BYTE(t3, 0)) ^
578578 rk[2];
579579 s3 =
580 Td0(byte(t3, 3)) ^
581 Td1(byte(t2, 2)) ^
582 Td2(byte(t1, 1)) ^
583 Td3(byte(t0, 0)) ^
580 Td0(LTC_BYTE(t3, 3)) ^
581 Td1(LTC_BYTE(t2, 2)) ^
582 Td2(LTC_BYTE(t1, 1)) ^
583 Td3(LTC_BYTE(t0, 0)) ^
584584 rk[3];
585585 }
586586 #endif
590590 * map cipher state to byte array block:
591591 */
592592 s0 =
593 (Td4[byte(t0, 3)] & 0xff000000) ^
594 (Td4[byte(t3, 2)] & 0x00ff0000) ^
595 (Td4[byte(t2, 1)] & 0x0000ff00) ^
596 (Td4[byte(t1, 0)] & 0x000000ff) ^
593 (Td4[LTC_BYTE(t0, 3)] & 0xff000000) ^
594 (Td4[LTC_BYTE(t3, 2)] & 0x00ff0000) ^
595 (Td4[LTC_BYTE(t2, 1)] & 0x0000ff00) ^
596 (Td4[LTC_BYTE(t1, 0)] & 0x000000ff) ^
597597 rk[0];
598598 STORE32H(s0, pt);
599599 s1 =
600 (Td4[byte(t1, 3)] & 0xff000000) ^
601 (Td4[byte(t0, 2)] & 0x00ff0000) ^
602 (Td4[byte(t3, 1)] & 0x0000ff00) ^
603 (Td4[byte(t2, 0)] & 0x000000ff) ^
600 (Td4[LTC_BYTE(t1, 3)] & 0xff000000) ^
601 (Td4[LTC_BYTE(t0, 2)] & 0x00ff0000) ^
602 (Td4[LTC_BYTE(t3, 1)] & 0x0000ff00) ^
603 (Td4[LTC_BYTE(t2, 0)] & 0x000000ff) ^
604604 rk[1];
605605 STORE32H(s1, pt+4);
606606 s2 =
607 (Td4[byte(t2, 3)] & 0xff000000) ^
608 (Td4[byte(t1, 2)] & 0x00ff0000) ^
609 (Td4[byte(t0, 1)] & 0x0000ff00) ^
610 (Td4[byte(t3, 0)] & 0x000000ff) ^
607 (Td4[LTC_BYTE(t2, 3)] & 0xff000000) ^
608 (Td4[LTC_BYTE(t1, 2)] & 0x00ff0000) ^
609 (Td4[LTC_BYTE(t0, 1)] & 0x0000ff00) ^
610 (Td4[LTC_BYTE(t3, 0)] & 0x000000ff) ^
611611 rk[2];
612612 STORE32H(s2, pt+8);
613613 s3 =
614 (Td4[byte(t3, 3)] & 0xff000000) ^
615 (Td4[byte(t2, 2)] & 0x00ff0000) ^
616 (Td4[byte(t1, 1)] & 0x0000ff00) ^
617 (Td4[byte(t0, 0)] & 0x000000ff) ^
614 (Td4[LTC_BYTE(t3, 3)] & 0xff000000) ^
615 (Td4[LTC_BYTE(t2, 2)] & 0x00ff0000) ^
616 (Td4[LTC_BYTE(t1, 1)] & 0x0000ff00) ^
617 (Td4[LTC_BYTE(t0, 0)] & 0x000000ff) ^
618618 rk[3];
619619 STORE32H(s3, pt+12);
620620
722722 {
723723 LTC_ARGCHK(keysize != NULL);
724724
725 if (*keysize < 16)
725 if (*keysize < 16) {
726726 return CRYPT_INVALID_KEYSIZE;
727 }
727728 if (*keysize < 24) {
728729 *keysize = 16;
729730 return CRYPT_OK;
730 } else if (*keysize < 32) {
731 }
732 if (*keysize < 32) {
731733 *keysize = 24;
732734 return CRYPT_OK;
733 } else {
734 *keysize = 32;
735 return CRYPT_OK;
736735 }
736 *keysize = 32;
737 return CRYPT_OK;
737738 }
738739
739740 #endif
2929 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
3030 };
3131
32 #define MIN_N 4
3332 #define MAX_N 10
34 #define MIN_ROUNDS (8 + MIN_N)
35 #define MAX_ROUNDS (8 + MAX_N)
36 #define MIN_KEYSIZEB (4*MIN_N)
37 #define MAX_KEYSIZEB (4*MAX_N)
38 #define BLOCKSIZE 128
39 #define BLOCKSIZEB (BLOCKSIZE/8)
40
4133
4234 /*
4335 * Though Anubis is endianness-neutral, the encryption tables are listed
372372 }
373373
374374 #ifndef __GNUC__
375 #define F(x) ((S1[byte(x,3)] + S2[byte(x,2)]) ^ S3[byte(x,1)]) + S4[byte(x,0)]
375 #define F(x) ((S1[LTC_BYTE(x,3)] + S2[LTC_BYTE(x,2)]) ^ S3[LTC_BYTE(x,1)]) + S4[LTC_BYTE(x,0)]
376376 #else
377 #define F(x) ((skey->blowfish.S[0][byte(x,3)] + skey->blowfish.S[1][byte(x,2)]) ^ skey->blowfish.S[2][byte(x,1)]) + skey->blowfish.S[3][byte(x,0)]
377 #define F(x) ((skey->blowfish.S[0][LTC_BYTE(x,3)] + skey->blowfish.S[1][LTC_BYTE(x,2)]) ^ skey->blowfish.S[2][LTC_BYTE(x,1)]) + skey->blowfish.S[3][LTC_BYTE(x,0)]
378378 #endif
379379
380380 /**
579579
580580 if (*keysize < 8) {
581581 return CRYPT_INVALID_KEYSIZE;
582 } else if (*keysize > 56) {
582 }
583 if (*keysize > 56) {
583584 *keysize = 56;
584585 }
585586 return CRYPT_OK;
507507 ulong32 I;
508508 I = (Km + R);
509509 I = ROL(I, Kr);
510 return ((S1[byte(I, 3)] ^ S2[byte(I,2)]) - S3[byte(I,1)]) + S4[byte(I,0)];
510 return ((S1[LTC_BYTE(I, 3)] ^ S2[LTC_BYTE(I,2)]) - S3[LTC_BYTE(I,1)]) + S4[LTC_BYTE(I,0)];
511511 }
512512
513513 INLINE static ulong32 FII(ulong32 R, ulong32 Km, ulong32 Kr)
515515 ulong32 I;
516516 I = (Km ^ R);
517517 I = ROL(I, Kr);
518 return ((S1[byte(I, 3)] - S2[byte(I,2)]) + S3[byte(I,1)]) ^ S4[byte(I,0)];
518 return ((S1[LTC_BYTE(I, 3)] - S2[LTC_BYTE(I,2)]) + S3[LTC_BYTE(I,1)]) ^ S4[LTC_BYTE(I,0)];
519519 }
520520
521521 INLINE static ulong32 FIII(ulong32 R, ulong32 Km, ulong32 Kr)
523523 ulong32 I;
524524 I = (Km - R);
525525 I = ROL(I, Kr);
526 return ((S1[byte(I, 3)] + S2[byte(I,2)]) ^ S3[byte(I,1)]) - S4[byte(I,0)];
526 return ((S1[LTC_BYTE(I, 3)] + S2[LTC_BYTE(I,2)]) ^ S3[LTC_BYTE(I,1)]) - S4[LTC_BYTE(I,0)];
527527 }
528528
529529 /**
706706 LTC_ARGCHK(keysize != NULL);
707707 if (*keysize < 5) {
708708 return CRYPT_INVALID_KEYSIZE;
709 } else if (*keysize > 16) {
709 }
710 if (*keysize > 16) {
710711 *keysize = 16;
711712 }
712713 return CRYPT_OK;
14311431 #else
14321432 {
14331433 ulong64 tmp;
1434 tmp = des_ip[0][byte(leftt, 0)] ^
1435 des_ip[1][byte(leftt, 1)] ^
1436 des_ip[2][byte(leftt, 2)] ^
1437 des_ip[3][byte(leftt, 3)] ^
1438 des_ip[4][byte(right, 0)] ^
1439 des_ip[5][byte(right, 1)] ^
1440 des_ip[6][byte(right, 2)] ^
1441 des_ip[7][byte(right, 3)];
1434 tmp = des_ip[0][LTC_BYTE(leftt, 0)] ^
1435 des_ip[1][LTC_BYTE(leftt, 1)] ^
1436 des_ip[2][LTC_BYTE(leftt, 2)] ^
1437 des_ip[3][LTC_BYTE(leftt, 3)] ^
1438 des_ip[4][LTC_BYTE(right, 0)] ^
1439 des_ip[5][LTC_BYTE(right, 1)] ^
1440 des_ip[6][LTC_BYTE(right, 2)] ^
1441 des_ip[7][LTC_BYTE(right, 3)];
14421442 leftt = (ulong32)(tmp >> 32);
14431443 right = (ulong32)(tmp & 0xFFFFFFFFUL);
14441444 }
14901490 #else
14911491 {
14921492 ulong64 tmp;
1493 tmp = des_fp[0][byte(leftt, 0)] ^
1494 des_fp[1][byte(leftt, 1)] ^
1495 des_fp[2][byte(leftt, 2)] ^
1496 des_fp[3][byte(leftt, 3)] ^
1497 des_fp[4][byte(right, 0)] ^
1498 des_fp[5][byte(right, 1)] ^
1499 des_fp[6][byte(right, 2)] ^
1500 des_fp[7][byte(right, 3)];
1493 tmp = des_fp[0][LTC_BYTE(leftt, 0)] ^
1494 des_fp[1][LTC_BYTE(leftt, 1)] ^
1495 des_fp[2][LTC_BYTE(leftt, 2)] ^
1496 des_fp[3][LTC_BYTE(leftt, 3)] ^
1497 des_fp[4][LTC_BYTE(right, 0)] ^
1498 des_fp[5][LTC_BYTE(right, 1)] ^
1499 des_fp[6][LTC_BYTE(right, 2)] ^
1500 des_fp[7][LTC_BYTE(right, 3)];
15011501 leftt = (ulong32)(tmp >> 32);
15021502 right = (ulong32)(tmp & 0xFFFFFFFFUL);
15031503 }
20672067 int des3_keysize(int *keysize)
20682068 {
20692069 LTC_ARGCHK(keysize != NULL);
2070 if (*keysize < 16)
2070 if (*keysize < 16) {
20712071 return CRYPT_INVALID_KEYSIZE;
2072 }
20722073 if (*keysize < 24) {
20732074 *keysize = 16;
20742075 return CRYPT_OK;
242242 if (*keysize >= 16) {
243243 *keysize = 16;
244244 return CRYPT_OK;
245 } else {
246 return CRYPT_INVALID_KEYSIZE;
247245 }
246 return CRYPT_INVALID_KEYSIZE;
248247 }
249248
250249 int kasumi_test(void)
2929 };
3030
3131 #define R 8
32 #define KEYSIZE 128
33 #define KEYSIZEB (KEYSIZE/8)
34 #define BLOCKSIZE 64
35 #define BLOCKSIZEB (BLOCKSIZE/8)
3632
3733 static const ulong64 T0[256] = {
3834 CONST64(0xbad3d268bbb96a01), CONST64(0x54fc4d19e59a66b1), CONST64(0x2f71bc93e26514cd), CONST64(0x749ccdb925871b51),
842838 if (*keysize >= 16) {
843839 *keysize = 16;
844840 return CRYPT_OK;
845 } else {
846 return CRYPT_INVALID_KEYSIZE;
847841 }
842 return CRYPT_INVALID_KEYSIZE;
848843 }
849844
850845 #endif
313313 LTC_ARGCHK(keysize != NULL);
314314 if (*keysize < 16) {
315315 return CRYPT_INVALID_KEYSIZE;
316 } else {
317 *keysize = 16;
318 return CRYPT_OK;
319 }
316 }
317 *keysize = 16;
318 return CRYPT_OK;
320319 }
321320
322321 #endif
400400 LTC_ARGCHK(keysize != NULL);
401401 if (*keysize < 1) {
402402 return CRYPT_INVALID_KEYSIZE;
403 } else if (*keysize > 128) {
403 }
404 if (*keysize > 128) {
404405 *keysize = 128;
405406 }
406407 return CRYPT_OK;
307307 LTC_ARGCHK(keysize != NULL);
308308 if (*keysize < 8) {
309309 return CRYPT_INVALID_KEYSIZE;
310 } else if (*keysize > 128) {
310 }
311 if (*keysize > 128) {
311312 *keysize = 128;
312313 }
313314 return CRYPT_OK;
317317 LTC_ARGCHK(keysize != NULL);
318318 if (*keysize < 8) {
319319 return CRYPT_INVALID_KEYSIZE;
320 } else if (*keysize > 128) {
320 }
321 if (*keysize > 128) {
321322 *keysize = 128;
322323 }
323324 return CRYPT_OK;
112112 unsigned char ka[LTC_SAFER_BLOCK_LEN + 1];
113113 unsigned char kb[LTC_SAFER_BLOCK_LEN + 1];
114114
115 if (LTC_SAFER_MAX_NOF_ROUNDS < nof_rounds)
115 if (LTC_SAFER_MAX_NOF_ROUNDS < nof_rounds) {
116116 nof_rounds = LTC_SAFER_MAX_NOF_ROUNDS;
117 }
117118 *key++ = (unsigned char)nof_rounds;
118119 ka[LTC_SAFER_BLOCK_LEN] = (unsigned char)0;
119120 kb[LTC_SAFER_BLOCK_LEN] = (unsigned char)0;
175176 }
176177 #endif
177178
178 int safer_k64_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey)
179 int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
179180 {
180181 LTC_ARGCHK(key != NULL);
181182 LTC_ARGCHK(skey != NULL);
182183
183 if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) {
184 if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) {
184185 return CRYPT_INVALID_ROUNDS;
185186 }
186187
188189 return CRYPT_INVALID_KEYSIZE;
189190 }
190191
191 Safer_Expand_Userkey(key, key, (unsigned int)(numrounds != 0 ?numrounds:LTC_SAFER_K64_DEFAULT_NOF_ROUNDS), 0, skey->safer.key);
192 return CRYPT_OK;
193 }
194
195 int safer_sk64_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey)
192 Safer_Expand_Userkey(key, key, (unsigned int)(num_rounds != 0 ?num_rounds:LTC_SAFER_K64_DEFAULT_NOF_ROUNDS), 0, skey->safer.key);
193 return CRYPT_OK;
194 }
195
196 int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
196197 {
197198 LTC_ARGCHK(key != NULL);
198199 LTC_ARGCHK(skey != NULL);
199200
200 if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) {
201 if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) {
201202 return CRYPT_INVALID_ROUNDS;
202203 }
203204
205206 return CRYPT_INVALID_KEYSIZE;
206207 }
207208
208 Safer_Expand_Userkey(key, key, (unsigned int)(numrounds != 0 ?numrounds:LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS), 1, skey->safer.key);
209 return CRYPT_OK;
210 }
211
212 int safer_k128_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey)
209 Safer_Expand_Userkey(key, key, (unsigned int)(num_rounds != 0 ?num_rounds:LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS), 1, skey->safer.key);
210 return CRYPT_OK;
211 }
212
213 int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
213214 {
214215 LTC_ARGCHK(key != NULL);
215216 LTC_ARGCHK(skey != NULL);
216217
217 if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) {
218 if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) {
218219 return CRYPT_INVALID_ROUNDS;
219220 }
220221
222223 return CRYPT_INVALID_KEYSIZE;
223224 }
224225
225 Safer_Expand_Userkey(key, key+8, (unsigned int)(numrounds != 0 ?numrounds:LTC_SAFER_K128_DEFAULT_NOF_ROUNDS), 0, skey->safer.key);
226 return CRYPT_OK;
227 }
228
229 int safer_sk128_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey)
226 Safer_Expand_Userkey(key, key+8, (unsigned int)(num_rounds != 0 ?num_rounds:LTC_SAFER_K128_DEFAULT_NOF_ROUNDS), 0, skey->safer.key);
227 return CRYPT_OK;
228 }
229
230 int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
230231 {
231232 LTC_ARGCHK(key != NULL);
232233 LTC_ARGCHK(skey != NULL);
233234
234 if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) {
235 if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) {
235236 return CRYPT_INVALID_ROUNDS;
236237 }
237238
239240 return CRYPT_INVALID_KEYSIZE;
240241 }
241242
242 Safer_Expand_Userkey(key, key+8, (unsigned int)(numrounds != 0?numrounds:LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS), 1, skey->safer.key);
243 return CRYPT_OK;
244 }
245
246 #ifdef LTC_CLEAN_STACK
247 static int _safer_ecb_encrypt(const unsigned char *block_in,
248 unsigned char *block_out,
243 Safer_Expand_Userkey(key, key+8, (unsigned int)(num_rounds != 0?num_rounds:LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS), 1, skey->safer.key);
244 return CRYPT_OK;
245 }
246
247 #ifdef LTC_CLEAN_STACK
248 static int _safer_ecb_encrypt(const unsigned char *pt,
249 unsigned char *ct,
249250 const symmetric_key *skey)
250251 #else
251 int safer_ecb_encrypt(const unsigned char *block_in,
252 unsigned char *block_out,
252 int safer_ecb_encrypt(const unsigned char *pt,
253 unsigned char *ct,
253254 const symmetric_key *skey)
254255 #endif
255256 { unsigned char a, b, c, d, e, f, g, h, t;
256257 unsigned int round;
257258 const unsigned char *key;
258259
259 LTC_ARGCHK(block_in != NULL);
260 LTC_ARGCHK(block_out != NULL);
260 LTC_ARGCHK(pt != NULL);
261 LTC_ARGCHK(ct != NULL);
261262 LTC_ARGCHK(skey != NULL);
262263
263264 key = skey->safer.key;
264 a = block_in[0]; b = block_in[1]; c = block_in[2]; d = block_in[3];
265 e = block_in[4]; f = block_in[5]; g = block_in[6]; h = block_in[7];
265 a = pt[0]; b = pt[1]; c = pt[2]; d = pt[3];
266 e = pt[4]; f = pt[5]; g = pt[6]; h = pt[7];
266267 if (LTC_SAFER_MAX_NOF_ROUNDS < (round = *key)) round = LTC_SAFER_MAX_NOF_ROUNDS;
267268 while(round-- > 0)
268269 {
279280 }
280281 a ^= *++key; b += *++key; c += *++key; d ^= *++key;
281282 e ^= *++key; f += *++key; g += *++key; h ^= *++key;
282 block_out[0] = a & 0xFF; block_out[1] = b & 0xFF;
283 block_out[2] = c & 0xFF; block_out[3] = d & 0xFF;
284 block_out[4] = e & 0xFF; block_out[5] = f & 0xFF;
285 block_out[6] = g & 0xFF; block_out[7] = h & 0xFF;
283 ct[0] = a & 0xFF; ct[1] = b & 0xFF;
284 ct[2] = c & 0xFF; ct[3] = d & 0xFF;
285 ct[4] = e & 0xFF; ct[5] = f & 0xFF;
286 ct[6] = g & 0xFF; ct[7] = h & 0xFF;
286287 return CRYPT_OK;
287288 }
288289
289290 #ifdef LTC_CLEAN_STACK
290 int safer_ecb_encrypt(const unsigned char *block_in,
291 unsigned char *block_out,
292 const symmetric_key *skey)
293 {
294 int err = _safer_ecb_encrypt(block_in, block_out, skey);
291 int safer_ecb_encrypt(const unsigned char *pt,
292 unsigned char *ct,
293 const symmetric_key *skey)
294 {
295 int err = _safer_ecb_encrypt(pt, ct, skey);
295296 burn_stack(sizeof(unsigned char) * 9 + sizeof(unsigned int) + sizeof(unsigned char *));
296297 return err;
297298 }
298299 #endif
299300
300301 #ifdef LTC_CLEAN_STACK
301 static int _safer_ecb_decrypt(const unsigned char *block_in,
302 unsigned char *block_out,
302 static int _safer_ecb_decrypt(const unsigned char *ct,
303 unsigned char *pt,
303304 const symmetric_key *skey)
304305 #else
305 int safer_ecb_decrypt(const unsigned char *block_in,
306 unsigned char *block_out,
306 int safer_ecb_decrypt(const unsigned char *ct,
307 unsigned char *pt,
307308 const symmetric_key *skey)
308309 #endif
309310 { unsigned char a, b, c, d, e, f, g, h, t;
310311 unsigned int round;
311312 const unsigned char *key;
312313
313 LTC_ARGCHK(block_in != NULL);
314 LTC_ARGCHK(block_out != NULL);
314 LTC_ARGCHK(ct != NULL);
315 LTC_ARGCHK(pt != NULL);
315316 LTC_ARGCHK(skey != NULL);
316317
317318 key = skey->safer.key;
318 a = block_in[0]; b = block_in[1]; c = block_in[2]; d = block_in[3];
319 e = block_in[4]; f = block_in[5]; g = block_in[6]; h = block_in[7];
319 a = ct[0]; b = ct[1]; c = ct[2]; d = ct[3];
320 e = ct[4]; f = ct[5]; g = ct[6]; h = ct[7];
320321 if (LTC_SAFER_MAX_NOF_ROUNDS < (round = *key)) round = LTC_SAFER_MAX_NOF_ROUNDS;
321322 key += LTC_SAFER_BLOCK_LEN * (1 + 2 * round);
322323 h ^= *key; g -= *--key; f -= *--key; e ^= *--key;
334335 d = LOG(d) ^ *--key; c = EXP(c) - *--key;
335336 b = EXP(b) - *--key; a = LOG(a) ^ *--key;
336337 }
337 block_out[0] = a & 0xFF; block_out[1] = b & 0xFF;
338 block_out[2] = c & 0xFF; block_out[3] = d & 0xFF;
339 block_out[4] = e & 0xFF; block_out[5] = f & 0xFF;
340 block_out[6] = g & 0xFF; block_out[7] = h & 0xFF;
338 pt[0] = a & 0xFF; pt[1] = b & 0xFF;
339 pt[2] = c & 0xFF; pt[3] = d & 0xFF;
340 pt[4] = e & 0xFF; pt[5] = f & 0xFF;
341 pt[6] = g & 0xFF; pt[7] = h & 0xFF;
341342 return CRYPT_OK;
342343 }
343344
344345 #ifdef LTC_CLEAN_STACK
345 int safer_ecb_decrypt(const unsigned char *block_in,
346 unsigned char *block_out,
347 const symmetric_key *skey)
348 {
349 int err = _safer_ecb_decrypt(block_in, block_out, skey);
346 int safer_ecb_decrypt(const unsigned char *ct,
347 unsigned char *pt,
348 const symmetric_key *skey)
349 {
350 int err = _safer_ecb_decrypt(ct, pt, skey);
350351 burn_stack(sizeof(unsigned char) * 9 + sizeof(unsigned int) + sizeof(unsigned char *));
351352 return err;
352353 }
357358 LTC_ARGCHK(keysize != NULL);
358359 if (*keysize < 8) {
359360 return CRYPT_INVALID_KEYSIZE;
360 } else {
361 *keysize = 8;
362 return CRYPT_OK;
363 }
361 }
362 *keysize = 8;
363 return CRYPT_OK;
364364 }
365365
366366 int safer_128_keysize(int *keysize)
368368 LTC_ARGCHK(keysize != NULL);
369369 if (*keysize < 16) {
370370 return CRYPT_INVALID_KEYSIZE;
371 } else {
372 *keysize = 16;
373 return CRYPT_OK;
374 }
371 }
372 *keysize = 16;
373 return CRYPT_OK;
375374 }
376375
377376 int safer_k64_test(void)
546546 {
547547 LTC_ARGCHK(keysize != NULL);
548548
549 if (*keysize < 16)
549 if (*keysize < 16) {
550550 return CRYPT_INVALID_KEYSIZE;
551 }
551552 if (*keysize < 24) {
552553 *keysize = 16;
553554 } else if (*keysize < 32) {
329329 LTC_ARGCHK(keysize != NULL);
330330 if (*keysize < 10) {
331331 return CRYPT_INVALID_KEYSIZE;
332 } else if (*keysize > 10) {
332 }
333 if (*keysize > 10) {
333334 *keysize = 10;
334335 }
335336 return CRYPT_OK;
3636 };
3737
3838 /* the two polynomials */
39 #ifndef LTC_TWOFISH_TABLES
3940 #define MDS_POLY 0x169
41 #endif
42 #ifndef LTC_TWOFISH_ALL_TABLES
4043 #define RS_POLY 0x14D
44 #endif
4145
4246 /* The 4x8 RS Linear Transform */
4347 static const unsigned char RS[4][8] = {
277281 #endif
278282
279283 /* the G function */
280 #define g_func(x, dum) (S1[byte(x,0)] ^ S2[byte(x,1)] ^ S3[byte(x,2)] ^ S4[byte(x,3)])
281 #define g1_func(x, dum) (S2[byte(x,0)] ^ S3[byte(x,1)] ^ S4[byte(x,2)] ^ S1[byte(x,3)])
284 #define g_func(x, dum) (S1[LTC_BYTE(x,0)] ^ S2[LTC_BYTE(x,1)] ^ S3[LTC_BYTE(x,2)] ^ S4[LTC_BYTE(x,3)])
285 #define g1_func(x, dum) (S2[LTC_BYTE(x,0)] ^ S3[LTC_BYTE(x,1)] ^ S4[LTC_BYTE(x,2)] ^ S1[LTC_BYTE(x,3)])
282286
283287 #else
284288
688692 int twofish_keysize(int *keysize)
689693 {
690694 LTC_ARGCHK(keysize);
691 if (*keysize < 16)
695 if (*keysize < 16) {
692696 return CRYPT_INVALID_KEYSIZE;
697 }
693698 if (*keysize < 24) {
694699 *keysize = 16;
695700 return CRYPT_OK;
696 } else if (*keysize < 32) {
701 }
702 if (*keysize < 32) {
697703 *keysize = 24;
698704 return CRYPT_OK;
699 } else {
700 *keysize = 32;
701 return CRYPT_OK;
702 }
703 }
704
705 #endif
706
707
705 }
706 *keysize = 32;
707 return CRYPT_OK;
708 }
709
710 #endif
708711
709712
710713 /* ref: $Format:%D$ */
2828
2929 LTC_ARGCHK(ccm != NULL);
3030 LTC_ARGCHK(key != NULL);
31 LTC_ARGCHK(taglen != 0);
3231
3332 XMEMSET(ccm, 0, sizeof(ccm_state));
3433
4039 return CRYPT_INVALID_CIPHER;
4140 }
4241
43 /* make sure the taglen is even and <= 16 */
44 ccm->taglen = taglen;
45 ccm->taglen &= ~1;
46 if (ccm->taglen > 16) {
47 ccm->taglen = 16;
48 }
49
50 /* can't use < 4 */
51 if (ccm->taglen < 4) {
42 /* make sure the taglen is valid */
43 if (taglen < 4 || taglen > 16 || (taglen % 2) == 1) {
5244 return CRYPT_INVALID_ARG;
5345 }
46 ccm->taglen = taglen;
5447
5548 /* schedule key */
5649 if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &ccm->K)) != CRYPT_OK) {
7979 return CRYPT_INVALID_CIPHER;
8080 }
8181
82 /* make sure the taglen is even and <= 16 */
83 *taglen &= ~1;
84 if (*taglen > 16) {
85 *taglen = 16;
86 }
87
88 /* can't use < 4 */
89 if (*taglen < 4) {
82 /* make sure the taglen is valid */
83 if (*taglen < 4 || *taglen > 16 || (*taglen % 2) == 1) {
9084 return CRYPT_INVALID_ARG;
9185 }
9286
2424 unsigned long padlen;
2525 int err;
2626
27 if (inlen == 0) return CRYPT_OK; /* nothing to do */
2827 LTC_ARGCHK(st != NULL);
2928
3029 if (st->aadflg) {
2424 unsigned long padlen;
2525 int err;
2626
27 if (inlen == 0) return CRYPT_OK; /* nothing to do */
2827 LTC_ARGCHK(st != NULL);
2928
3029 if ((err = chacha_crypt(&st->chacha, in, inlen, out)) != CRYPT_OK) return err;
4242 LTC_ARGCHK(in != NULL);
4343 LTC_ARGCHK(out != NULL);
4444 LTC_ARGCHK(tag != NULL);
45 LTC_ARGCHK(taglen != NULL);
4546
4647 if ((err = chacha20poly1305_init(&st, key, keylen)) != CRYPT_OK) { goto LBL_ERR; }
4748 if ((err = chacha20poly1305_setiv(&st, iv, ivlen)) != CRYPT_OK) { goto LBL_ERR; }
5051 }
5152 if (direction == CHACHA20POLY1305_ENCRYPT) {
5253 if ((err = chacha20poly1305_encrypt(&st, in, inlen, out)) != CRYPT_OK) { goto LBL_ERR; }
54 if ((err = chacha20poly1305_done(&st, tag, taglen)) != CRYPT_OK) { goto LBL_ERR; }
5355 }
5456 else if (direction == CHACHA20POLY1305_DECRYPT) {
57 unsigned char buf[MAXBLOCKSIZE];
58 unsigned long buflen = sizeof(buf);
5559 if ((err = chacha20poly1305_decrypt(&st, in, inlen, out)) != CRYPT_OK) { goto LBL_ERR; }
60 if ((err = chacha20poly1305_done(&st, buf, &buflen)) != CRYPT_OK) { goto LBL_ERR; }
61 if (buflen != *taglen || XMEM_NEQ(buf, tag, buflen) != 0) {
62 err = CRYPT_ERROR;
63 goto LBL_ERR;
64 }
5665 }
5766 else {
5867 err = CRYPT_INVALID_ARG;
5968 goto LBL_ERR;
6069 }
61 err = chacha20poly1305_done(&st, tag, taglen);
6270 LBL_ERR:
6371 #ifdef LTC_CLEAN_STACK
6472 zeromem(&st, sizeof(chacha20poly1305_state));
9292 if ((err = gcm_process(gcm, pt, ptlen, ct, direction)) != CRYPT_OK) {
9393 goto LTC_ERR;
9494 }
95 err = gcm_done(gcm, tag, taglen);
95 if (direction == GCM_ENCRYPT) {
96 if ((err = gcm_done(gcm, tag, taglen)) != CRYPT_OK) {
97 goto LTC_ERR;
98 }
99 }
100 else if (direction == GCM_DECRYPT) {
101 unsigned char buf[MAXBLOCKSIZE];
102 unsigned long buflen = sizeof(buf);
103 if ((err = gcm_done(gcm, buf, &buflen)) != CRYPT_OK) {
104 goto LTC_ERR;
105 }
106 if (buflen != *taglen || XMEM_NEQ(buf, tag, buflen) != 0) {
107 err = CRYPT_ERROR;
108 }
109 }
110 else {
111 err = CRYPT_INVALID_ARG;
112 }
96113 LTC_ERR:
97114 XFREE(orig);
98115 return err;
6565 /* Checksum_* = Checksum_m xor (P_* || 1 || zeros(127-bitlen(P_*))) */
6666 ocb3_int_xor_blocks(ocb->checksum, ocb->checksum, pt+full_blocks_len, last_block_len);
6767 for(x=last_block_len; x<ocb->block_len; x++) {
68 if (x == last_block_len)
68 if (x == last_block_len) {
6969 ocb->checksum[x] ^= 0x80;
70 else
70 } else {
7171 ocb->checksum[x] ^= 0x00;
72 }
7273 }
7374
7475 /* Tag = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) xor HASH(K,A) */
6767 /* Checksum_* = Checksum_m xor (P_* || 1 || zeros(127-bitlen(P_*))) */
6868 ocb3_int_xor_blocks(ocb->checksum, ocb->checksum, pt+full_blocks_len, last_block_len);
6969 for(x=last_block_len; x<ocb->block_len; x++) {
70 if (x == last_block_len)
70 if (x == last_block_len) {
7171 ocb->checksum[x] ^= 0x80;
72 else
72 } else {
7373 ocb->checksum[x] ^= 0x00;
74 }
7475 }
7576
7677 /* Tag = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) xor HASH(K,A) */
8182 if ((err = cipher_descriptor[ocb->cipher].ecb_encrypt(ocb->tag_part, ocb->tag_part, &ocb->key)) != CRYPT_OK) {
8283 goto LBL_ERR;
8384 }
84 }
85 else {
85 } else {
8686 /* Tag = ENCIPHER(K, Checksum_m xor Offset_m xor L_$) xor HASH(K,A) */
8787 /* at this point we calculate only: Tag_part = ENCIPHER(K, Checksum_m xor Offset_m xor L_$) */
8888 for(x=0; x<ocb->block_len; x++) {
159159
160160 static void blake2b_set_lastblock(hash_state *md)
161161 {
162 if (md->blake2b.last_node)
162 if (md->blake2b.last_node) {
163163 blake2b_set_lastnode(md);
164
164 }
165165 md->blake2b.f[0] = CONST64(0xffffffffffffffff);
166166 }
167167
176176 unsigned long i;
177177 XMEMSET(&md->blake2b, 0, sizeof(md->blake2b));
178178
179 for (i = 0; i < 8; ++i)
179 for (i = 0; i < 8; ++i) {
180180 md->blake2b.h[i] = blake2b_IV[i];
181 }
181182 }
182183
183184 /* init xors IV with input parameter block */
218219
219220 LTC_ARGCHK(md != NULL);
220221
221 if ((!outlen) || (outlen > BLAKE2B_OUTBYTES))
222 if ((!outlen) || (outlen > BLAKE2B_OUTBYTES)) {
222223 return CRYPT_INVALID_ARG;
223
224 if ((key && !keylen) || (keylen && !key) || (keylen > BLAKE2B_KEYBYTES))
224 }
225 if ((key && !keylen) || (keylen && !key) || (keylen > BLAKE2B_KEYBYTES)) {
225226 return CRYPT_INVALID_ARG;
227 }
226228
227229 XMEMSET(P, 0, sizeof(P));
228230
415417
416418 /* if(md->blakebs.outlen != outlen) return CRYPT_INVALID_ARG; */
417419
418 if (blake2b_is_lastblock(md))
420 if (blake2b_is_lastblock(md)) {
419421 return CRYPT_ERROR;
422 }
420423
421424 blake2b_increment_counter(md, md->blake2b.curlen);
422425 blake2b_set_lastblock(md);
423426 XMEMSET(md->blake2b.buf + md->blake2b.curlen, 0, BLAKE2B_BLOCKBYTES - md->blake2b.curlen); /* Padding */
424427 blake2b_compress(md, md->blake2b.buf);
425428
426 for (i = 0; i < 8; ++i) /* Output full hash to temp buffer */
429 for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */
427430 STORE64L(md->blake2b.h[i], buffer + i * 8);
431 }
428432
429433 XMEMCPY(out, buffer, md->blake2b.outlen);
430434 zeromem(md, sizeof(hash_state));
151151
152152 static void blake2s_set_lastblock(hash_state *md)
153153 {
154 if (md->blake2s.last_node)
154 if (md->blake2s.last_node) {
155155 blake2s_set_lastnode(md);
156
156 }
157157 md->blake2s.f[0] = 0xffffffffUL;
158158 }
159159
168168 int i;
169169 XMEMSET(&md->blake2s, 0, sizeof(struct blake2s_state));
170170
171 for (i = 0; i < 8; ++i)
171 for (i = 0; i < 8; ++i) {
172172 md->blake2s.h[i] = blake2s_IV[i];
173 }
173174
174175 return CRYPT_OK;
175176 }
212213
213214 LTC_ARGCHK(md != NULL);
214215
215 if ((!outlen) || (outlen > BLAKE2S_OUTBYTES))
216 if ((!outlen) || (outlen > BLAKE2S_OUTBYTES)) {
216217 return CRYPT_INVALID_ARG;
217
218 if ((key && !keylen) || (keylen && !key) || (keylen > BLAKE2S_KEYBYTES))
218 }
219 if ((key && !keylen) || (keylen && !key) || (keylen > BLAKE2S_KEYBYTES)) {
219220 return CRYPT_INVALID_ARG;
221 }
220222
221223 XMEMSET(P, 0, sizeof(P));
222224
307309 LOAD32L(m[i], buf + i * sizeof(m[i]));
308310 }
309311
310 for (i = 0; i < 8; ++i)
312 for (i = 0; i < 8; ++i) {
311313 v[i] = md->blake2s.h[i];
314 }
312315
313316 v[8] = blake2s_IV[0];
314317 v[9] = blake2s_IV[1];
330333 ROUND(8);
331334 ROUND(9);
332335
333 for (i = 0; i < 8; ++i)
336 for (i = 0; i < 8; ++i) {
334337 md->blake2s.h[i] = md->blake2s.h[i] ^ v[i] ^ v[i + 8];
335
338 }
336339 return CRYPT_OK;
337340 }
338341 #undef G
403406
404407 /* if(md->blake2s.outlen != outlen) return CRYPT_INVALID_ARG; */
405408
406 if (blake2s_is_lastblock(md))
409 if (blake2s_is_lastblock(md)) {
407410 return CRYPT_ERROR;
408
411 }
409412 blake2s_increment_counter(md, md->blake2s.curlen);
410413 blake2s_set_lastblock(md);
411414 XMEMSET(md->blake2s.buf + md->blake2s.curlen, 0, BLAKE2S_BLOCKBYTES - md->blake2s.curlen); /* Padding */
412415 blake2s_compress(md, md->blake2s.buf);
413416
414 for (i = 0; i < 8; ++i) /* Output full hash to temp buffer */
417 for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */
415418 STORE32L(md->blake2s.h[i], buffer + i * 4);
419 }
416420
417421 XMEMCPY(out, buffer, md->blake2s.outlen);
418422 zeromem(md, sizeof(hash_state));
159159 @param len The length of the data (octets)
160160 @return CRYPT_OK if successful
161161 */
162 static int _chc_process(hash_state * md, const unsigned char *buf, unsigned long len);
162 static int _chc_process(hash_state * md, const unsigned char *in, unsigned long inlen);
163163 static HASH_PROCESS(_chc_process, chc_compress, chc, (unsigned long)cipher_blocksize)
164164
165165 /**
166166
167167 for(round = 0; round < SHA3_KECCAK_ROUNDS; round++) {
168168 /* Theta */
169 for(i = 0; i < 5; i++)
169 for(i = 0; i < 5; i++) {
170170 bc[i] = s[i] ^ s[i + 5] ^ s[i + 10] ^ s[i + 15] ^ s[i + 20];
171
171 }
172172 for(i = 0; i < 5; i++) {
173173 t = bc[(i + 4) % 5] ^ ROL64(bc[(i + 1) % 5], 1);
174 for(j = 0; j < 25; j += 5)
174 for(j = 0; j < 25; j += 5) {
175175 s[j + i] ^= t;
176 }
176177 }
177178 /* Rho Pi */
178179 t = s[1];
184185 }
185186 /* Chi */
186187 for(j = 0; j < 25; j += 5) {
187 for(i = 0; i < 5; i++)
188 for(i = 0; i < 5; i++) {
188189 bc[i] = s[j + i];
189 for(i = 0; i < 5; i++)
190 }
191 for(i = 0; i < 5; i++) {
190192 s[j + i] ^= (~bc[(i + 1) % 5]) & bc[(i + 2) % 5];
193 }
191194 }
192195 /* Iota */
193196 s[0] ^= keccakf_rndc[round];
312315 }
313316
314317 #ifdef LTC_SHA3
315 int sha3_done(hash_state *md, unsigned char *hash)
316 {
317 return _done(md, hash, CONST64(0x06));
318 int sha3_done(hash_state *md, unsigned char *out)
319 {
320 return _done(md, out, CONST64(0x06));
318321 }
319322 #endif
320323
321324 #ifdef LTC_KECCAK
322 int keccak_done(hash_state *md, unsigned char *hash)
323 {
324 return _done(md, hash, CONST64(0x01));
325 int keccak_done(hash_state *md, unsigned char *out)
326 {
327 return _done(md, out, CONST64(0x01));
325328 }
326329 #endif
327330
563563 {
564564 ulong64 tmp;
565565 tmp = (*c ^= x);
566 *a -= t1[byte(tmp, 0)] ^ t2[byte(tmp, 2)] ^ t3[byte(tmp, 4)] ^ t4[byte(tmp, 6)];
567 tmp = (*b += t4[byte(tmp, 1)] ^ t3[byte(tmp, 3)] ^ t2[byte(tmp,5)] ^ t1[byte(tmp,7)]);
566 *a -= t1[LTC_BYTE(tmp, 0)] ^ t2[LTC_BYTE(tmp, 2)] ^ t3[LTC_BYTE(tmp, 4)] ^ t4[LTC_BYTE(tmp, 6)];
567 tmp = (*b += t4[LTC_BYTE(tmp, 1)] ^ t3[LTC_BYTE(tmp, 3)] ^ t2[LTC_BYTE(tmp,5)] ^ t1[LTC_BYTE(tmp,7)]);
568568 switch (mul) {
569569 case 5: *b = (tmp << 2) + tmp; break;
570570 case 7: *b = (tmp << 3) - tmp; break;
2626
2727 /* version */
2828 #define CRYPT 0x0118
29 #define SCRYPT "1.18.1-develop"
29 #define SCRYPT "1.18.2-develop"
3030
3131 /* max size of either a cipher/hash block or symmetric key [largest of the two] */
3232 #define MAXBLOCKSIZE 144
3333
34 #ifndef TAB_SIZE
3435 /* descriptor table size */
3536 #define TAB_SIZE 34
37 #endif
3638
3739 /* error codes [will be expanded in future releases] */
3840 enum {
672672 int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
673673 int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
674674 int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
675 int safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *key);
676 int safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *key);
675 int safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey);
676 int safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey);
677677 int safer_k64_test(void);
678678 int safer_sk64_test(void);
679679 int safer_sk128_test(void);
10081008 int chacha_keystream(chacha_state *st, unsigned char *out, unsigned long outlen);
10091009 int chacha_done(chacha_state *st);
10101010 int chacha_test(void);
1011 int chacha_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds,
1012 const unsigned char *iv, unsigned long ivlen, ulong64 counter,
1013 const unsigned char *datain, unsigned long datalen, unsigned char *dataout);
10111014
10121015 #endif /* LTC_CHACHA */
10131016
10271030 int salsa20_keystream(salsa20_state *st, unsigned char *out, unsigned long outlen);
10281031 int salsa20_done(salsa20_state *st);
10291032 int salsa20_test(void);
1033 int salsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds,
1034 const unsigned char *iv, unsigned long ivlen, ulong64 counter,
1035 const unsigned char *datain, unsigned long datalen, unsigned char *dataout);
10301036
10311037 #endif /* LTC_SALSA20 */
10321038
10361042 const unsigned char *nonce, unsigned long noncelen,
10371043 int rounds);
10381044 int xsalsa20_test(void);
1045 int xsalsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds,
1046 const unsigned char *nonce, unsigned long noncelen,
1047 const unsigned char *datain, unsigned long datalen, unsigned char *dataout);
10391048
10401049 #endif /* LTC_XSALSA20 */
10411050
10541063 unsigned ptr;
10551064 } sosemanuk_state;
10561065
1057 int sosemanuk_setup(sosemanuk_state *ss, const unsigned char *key, unsigned long keylen);
1058 int sosemanuk_setiv(sosemanuk_state *ss, const unsigned char *iv, unsigned long ivlen);
1059 int sosemanuk_crypt(sosemanuk_state *ss, const unsigned char *in, unsigned long datalen, unsigned char *out);
1060 int sosemanuk_keystream(sosemanuk_state *ss, unsigned char *out, unsigned long outlen);
1061 int sosemanuk_done(sosemanuk_state *ss);
1066 int sosemanuk_setup(sosemanuk_state *st, const unsigned char *key, unsigned long keylen);
1067 int sosemanuk_setiv(sosemanuk_state *st, const unsigned char *iv, unsigned long ivlen);
1068 int sosemanuk_crypt(sosemanuk_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out);
1069 int sosemanuk_keystream(sosemanuk_state *st, unsigned char *out, unsigned long outlen);
1070 int sosemanuk_done(sosemanuk_state *st);
10621071 int sosemanuk_test(void);
1072 int sosemanuk_memory(const unsigned char *key, unsigned long keylen,
1073 const unsigned char *iv, unsigned long ivlen,
1074 const unsigned char *datain, unsigned long datalen,
1075 unsigned char *dataout);
10631076
10641077 #endif /* LTC_SOSEMANUK */
10651078
10841097 int rabbit_keystream(rabbit_state* st, unsigned char *out, unsigned long outlen);
10851098 int rabbit_done(rabbit_state *st);
10861099 int rabbit_test(void);
1100 int rabbit_memory(const unsigned char *key, unsigned long keylen,
1101 const unsigned char *iv, unsigned long ivlen,
1102 const unsigned char *datain, unsigned long datalen,
1103 unsigned char *dataout);
10871104
10881105 #endif /* LTC_RABBIT */
10891106
10991116 int rc4_stream_keystream(rc4_state *st, unsigned char *out, unsigned long outlen);
11001117 int rc4_stream_done(rc4_state *st);
11011118 int rc4_stream_test(void);
1119 int rc4_stream_memory(const unsigned char *key, unsigned long keylen,
1120 const unsigned char *datain, unsigned long datalen,
1121 unsigned char *dataout);
11021122
11031123 #endif /* LTC_RC4_STREAM */
11041124
11181138 int sober128_stream_keystream(sober128_state *st, unsigned char *out, unsigned long outlen);
11191139 int sober128_stream_done(sober128_state *st);
11201140 int sober128_stream_test(void);
1141 int sober128_stream_memory(const unsigned char *key, unsigned long keylen,
1142 const unsigned char *iv, unsigned long ivlen,
1143 const unsigned char *datain, unsigned long datalen,
1144 unsigned char *dataout);
11211145
11221146 #endif /* LTC_SOBER128_STREAM */
11231147
4242 #define XMEM_NEQ mem_neq
4343 #endif
4444 #ifndef XSTRCMP
45 #define XSTRCMP strcmp
45 #define XSTRCMP strcmp
46 #endif
47 #ifndef XSTRNCPY
48 #define XSTRNCPY strncpy
4649 #endif
4750
4851 #ifndef XCLOCK
5558
5659 #if ( defined(malloc) || defined(realloc) || defined(calloc) || defined(free) || \
5760 defined(memset) || defined(memcpy) || defined(memcmp) || defined(strcmp) || \
58 defined(clock) || defined(qsort) ) && !defined(LTC_NO_PROTOTYPES)
61 defined(strncpy) || defined(clock) || defined(qsort) ) && !defined(LTC_NO_PROTOTYPES)
5962 #define LTC_NO_PROTOTYPES
6063 #endif
6164
416419 #define LTC_DH1536
417420 #define LTC_DH2048
418421
419 #ifndef TFM_DESC
422 #if defined(LTM_DESC) || defined(GMP_DESC)
420423 /* tfm has a problem in fp_isprime for larger key sizes */
421424 #define LTC_DH3072
422425 #define LTC_DH4096
462465
463466 #define LTC_PKCS_1
464467 #define LTC_PKCS_5
468 #define LTC_PKCS_8
469 #define LTC_PKCS_12
465470
466471 /* Include ASN.1 DER (required by DSA/RSA) */
467472 #define LTC_DER
491496
492497 #define LTC_CRC32
493498
499 #define LTC_SSH
500
494501 #define LTC_PADDING
502
503 #define LTC_PBES
495504
496505 #endif /* LTC_NO_MISC */
497506
558567 #define LTC_PKCS_1
559568 #endif
560569
570 #if defined(LTC_MRSA) || defined(LTC_MECC)
571 #define LTC_PKCS_8
572 #endif
573
574 #ifdef LTC_PKCS_8
575 #define LTC_PADDING
576 #define LTC_PBES
577 #endif
578
561579 #if defined(LTC_PELICAN) && !defined(LTC_RIJNDAEL)
562580 #error Pelican-MAC requires LTC_RIJNDAEL
563581 #endif
249249 int chc_register(int cipher);
250250 int chc_init(hash_state * md);
251251 int chc_process(hash_state * md, const unsigned char *in, unsigned long inlen);
252 int chc_done(hash_state * md, unsigned char *hash);
252 int chc_done(hash_state * md, unsigned char *out);
253253 int chc_test(void);
254254 extern const struct ltc_hash_descriptor chc_desc;
255255 #endif
257257 #ifdef LTC_WHIRLPOOL
258258 int whirlpool_init(hash_state * md);
259259 int whirlpool_process(hash_state * md, const unsigned char *in, unsigned long inlen);
260 int whirlpool_done(hash_state * md, unsigned char *hash);
260 int whirlpool_done(hash_state * md, unsigned char *out);
261261 int whirlpool_test(void);
262262 extern const struct ltc_hash_descriptor whirlpool_desc;
263263 #endif
281281 extern const struct ltc_hash_descriptor sha3_256_desc;
282282 int sha3_224_test(void);
283283 extern const struct ltc_hash_descriptor sha3_224_desc;
284 int sha3_done(hash_state *md, unsigned char *hash);
284 int sha3_done(hash_state *md, unsigned char *out);
285285 /* SHAKE128 + SHAKE256 */
286286 int sha3_shake_init(hash_state *md, int num);
287287 #define sha3_shake_process(a,b,c) sha3_process(a,b,c)
304304 int keccak_256_test(void);
305305 extern const struct ltc_hash_descriptor keccak_224_desc;
306306 int keccak_224_test(void);
307 int keccak_done(hash_state *md, unsigned char *hash);
307 int keccak_done(hash_state *md, unsigned char *out);
308308 #endif
309309
310310 #ifdef LTC_SHA512
311311 int sha512_init(hash_state * md);
312312 int sha512_process(hash_state * md, const unsigned char *in, unsigned long inlen);
313 int sha512_done(hash_state * md, unsigned char *hash);
313 int sha512_done(hash_state * md, unsigned char *out);
314314 int sha512_test(void);
315315 extern const struct ltc_hash_descriptor sha512_desc;
316316 #endif
321321 #endif
322322 int sha384_init(hash_state * md);
323323 #define sha384_process sha512_process
324 int sha384_done(hash_state * md, unsigned char *hash);
324 int sha384_done(hash_state * md, unsigned char *out);
325325 int sha384_test(void);
326326 extern const struct ltc_hash_descriptor sha384_desc;
327327 #endif
332332 #endif
333333 int sha512_256_init(hash_state * md);
334334 #define sha512_256_process sha512_process
335 int sha512_256_done(hash_state * md, unsigned char *hash);
335 int sha512_256_done(hash_state * md, unsigned char *out);
336336 int sha512_256_test(void);
337337 extern const struct ltc_hash_descriptor sha512_256_desc;
338338 #endif
343343 #endif
344344 int sha512_224_init(hash_state * md);
345345 #define sha512_224_process sha512_process
346 int sha512_224_done(hash_state * md, unsigned char *hash);
346 int sha512_224_done(hash_state * md, unsigned char *out);
347347 int sha512_224_test(void);
348348 extern const struct ltc_hash_descriptor sha512_224_desc;
349349 #endif
351351 #ifdef LTC_SHA256
352352 int sha256_init(hash_state * md);
353353 int sha256_process(hash_state * md, const unsigned char *in, unsigned long inlen);
354 int sha256_done(hash_state * md, unsigned char *hash);
354 int sha256_done(hash_state * md, unsigned char *out);
355355 int sha256_test(void);
356356 extern const struct ltc_hash_descriptor sha256_desc;
357357
361361 #endif
362362 int sha224_init(hash_state * md);
363363 #define sha224_process sha256_process
364 int sha224_done(hash_state * md, unsigned char *hash);
364 int sha224_done(hash_state * md, unsigned char *out);
365365 int sha224_test(void);
366366 extern const struct ltc_hash_descriptor sha224_desc;
367367 #endif
370370 #ifdef LTC_SHA1
371371 int sha1_init(hash_state * md);
372372 int sha1_process(hash_state * md, const unsigned char *in, unsigned long inlen);
373 int sha1_done(hash_state * md, unsigned char *hash);
373 int sha1_done(hash_state * md, unsigned char *out);
374374 int sha1_test(void);
375375 extern const struct ltc_hash_descriptor sha1_desc;
376376 #endif
394394
395395 int blake2s_init(hash_state * md, unsigned long outlen, const unsigned char *key, unsigned long keylen);
396396 int blake2s_process(hash_state * md, const unsigned char *in, unsigned long inlen);
397 int blake2s_done(hash_state * md, unsigned char *hash);
397 int blake2s_done(hash_state * md, unsigned char *out);
398398 #endif
399399
400400 #ifdef LTC_BLAKE2B
416416
417417 int blake2b_init(hash_state * md, unsigned long outlen, const unsigned char *key, unsigned long keylen);
418418 int blake2b_process(hash_state * md, const unsigned char *in, unsigned long inlen);
419 int blake2b_done(hash_state * md, unsigned char *hash);
419 int blake2b_done(hash_state * md, unsigned char *out);
420420 #endif
421421
422422 #ifdef LTC_MD5
423423 int md5_init(hash_state * md);
424424 int md5_process(hash_state * md, const unsigned char *in, unsigned long inlen);
425 int md5_done(hash_state * md, unsigned char *hash);
425 int md5_done(hash_state * md, unsigned char *out);
426426 int md5_test(void);
427427 extern const struct ltc_hash_descriptor md5_desc;
428428 #endif
430430 #ifdef LTC_MD4
431431 int md4_init(hash_state * md);
432432 int md4_process(hash_state * md, const unsigned char *in, unsigned long inlen);
433 int md4_done(hash_state * md, unsigned char *hash);
433 int md4_done(hash_state * md, unsigned char *out);
434434 int md4_test(void);
435435 extern const struct ltc_hash_descriptor md4_desc;
436436 #endif
438438 #ifdef LTC_MD2
439439 int md2_init(hash_state * md);
440440 int md2_process(hash_state * md, const unsigned char *in, unsigned long inlen);
441 int md2_done(hash_state * md, unsigned char *hash);
441 int md2_done(hash_state * md, unsigned char *out);
442442 int md2_test(void);
443443 extern const struct ltc_hash_descriptor md2_desc;
444444 #endif
446446 #ifdef LTC_TIGER
447447 int tiger_init(hash_state * md);
448448 int tiger_process(hash_state * md, const unsigned char *in, unsigned long inlen);
449 int tiger_done(hash_state * md, unsigned char *hash);
449 int tiger_done(hash_state * md, unsigned char *out);
450450 int tiger_test(void);
451451 extern const struct ltc_hash_descriptor tiger_desc;
452452 #endif
454454 #ifdef LTC_RIPEMD128
455455 int rmd128_init(hash_state * md);
456456 int rmd128_process(hash_state * md, const unsigned char *in, unsigned long inlen);
457 int rmd128_done(hash_state * md, unsigned char *hash);
457 int rmd128_done(hash_state * md, unsigned char *out);
458458 int rmd128_test(void);
459459 extern const struct ltc_hash_descriptor rmd128_desc;
460460 #endif
462462 #ifdef LTC_RIPEMD160
463463 int rmd160_init(hash_state * md);
464464 int rmd160_process(hash_state * md, const unsigned char *in, unsigned long inlen);
465 int rmd160_done(hash_state * md, unsigned char *hash);
465 int rmd160_done(hash_state * md, unsigned char *out);
466466 int rmd160_test(void);
467467 extern const struct ltc_hash_descriptor rmd160_desc;
468468 #endif
470470 #ifdef LTC_RIPEMD256
471471 int rmd256_init(hash_state * md);
472472 int rmd256_process(hash_state * md, const unsigned char *in, unsigned long inlen);
473 int rmd256_done(hash_state * md, unsigned char *hash);
473 int rmd256_done(hash_state * md, unsigned char *out);
474474 int rmd256_test(void);
475475 extern const struct ltc_hash_descriptor rmd256_desc;
476476 #endif
478478 #ifdef LTC_RIPEMD320
479479 int rmd320_init(hash_state * md);
480480 int rmd320_process(hash_state * md, const unsigned char *in, unsigned long inlen);
481 int rmd320_done(hash_state * md, unsigned char *hash);
481 int rmd320_done(hash_state * md, unsigned char *out);
482482 int rmd320_test(void);
483483 extern const struct ltc_hash_descriptor rmd320_desc;
484484 #endif
2828 const unsigned char *in, unsigned long inlen, ...);
2929 int hmac_file(int hash, const char *fname, const unsigned char *key,
3030 unsigned long keylen,
31 unsigned char *dst, unsigned long *dstlen);
31 unsigned char *out, unsigned long *outlen);
3232 #endif
3333
3434 #ifdef LTC_OMAC
8383
8484 int pmac_memory(int cipher,
8585 const unsigned char *key, unsigned long keylen,
86 const unsigned char *msg, unsigned long msglen,
86 const unsigned char *in, unsigned long inlen,
8787 unsigned char *out, unsigned long *outlen);
8888
8989 int pmac_memory_multi(int cipher,
229229 const unsigned char *in, unsigned long inlen, ...);
230230 int f9_file(int cipher,
231231 const unsigned char *key, unsigned long keylen,
232 const char *filename,
232 const char *fname,
233233 unsigned char *out, unsigned long *outlen);
234234 int f9_test(void);
235235
418418 } ccm_state;
419419
420420 int ccm_init(ccm_state *ccm, int cipher,
421 const unsigned char *key, int keylen, int ptlen, int taglen, int aad_len);
421 const unsigned char *key, int keylen, int ptlen, int taglen, int aadlen);
422422
423423 int ccm_reset(ccm_state *ccm);
424424
428428 #define LTC_UNUSED_PARAM(x) (void)(x)
429429 #endif
430430
431 /* extract a byte portably */
432 #ifdef _MSC_VER
433 #define byte(x, n) ((unsigned char)((x) >> (8 * (n))))
434 #else
435 #define byte(x, n) (((x) >> (8 * (n))) & 255)
436 #endif
437
438431 /* there is no snprintf before Visual C++ 2015 */
439432 #if defined(_MSC_VER) && _MSC_VER < 1900
440433 #define snprintf _snprintf
88
99 /* ---- LTC_BASE64 Routines ---- */
1010 #ifdef LTC_BASE64
11 int base64_encode(const unsigned char *in, unsigned long len,
11 int base64_encode(const unsigned char *in, unsigned long inlen,
1212 char *out, unsigned long *outlen);
1313
14 int base64_decode(const char *in, unsigned long len,
14 int base64_decode(const char *in, unsigned long inlen,
1515 unsigned char *out, unsigned long *outlen);
16 int base64_strict_decode(const char *in, unsigned long len,
16 int base64_strict_decode(const char *in, unsigned long inlen,
1717 unsigned char *out, unsigned long *outlen);
1818 int base64_sane_decode(const char *in, unsigned long inlen,
1919 unsigned char *out, unsigned long *outlen);
2020 #endif
2121
2222 #ifdef LTC_BASE64_URL
23 int base64url_encode(const unsigned char *in, unsigned long len,
23 int base64url_encode(const unsigned char *in, unsigned long inlen,
2424 char *out, unsigned long *outlen);
2525 int base64url_strict_encode(const unsigned char *in, unsigned long inlen,
2626 char *out, unsigned long *outlen);
2727
28 int base64url_decode(const char *in, unsigned long len,
28 int base64url_decode(const char *in, unsigned long inlen,
2929 unsigned char *out, unsigned long *outlen);
30 int base64url_strict_decode(const char *in, unsigned long len,
30 int base64url_strict_decode(const char *in, unsigned long inlen,
3131 unsigned char *out, unsigned long *outlen);
3232 int base64url_sane_decode(const char *in, unsigned long inlen,
3333 unsigned char *out, unsigned long *outlen);
8383
8484 /* ---- MEM routines ---- */
8585 int mem_neq(const void *a, const void *b, size_t len);
86 void zeromem(volatile void *dst, size_t len);
86 void zeromem(volatile void *out, size_t outlen);
8787 void burn_stack(unsigned long len);
8888
8989 const char *error_to_string(int err);
153153 int padding_depad(const unsigned char *data, unsigned long *length, unsigned long mode);
154154 #endif /* LTC_PADDING */
155155
156 #ifdef LTC_SSH
157 typedef enum ssh_data_type_ {
158 LTC_SSHDATA_BYTE,
159 LTC_SSHDATA_BOOLEAN,
160 LTC_SSHDATA_UINT32,
161 LTC_SSHDATA_UINT64,
162 LTC_SSHDATA_STRING,
163 LTC_SSHDATA_MPINT,
164 LTC_SSHDATA_NAMELIST,
165 LTC_SSHDATA_EOL
166 } ssh_data_type;
167
168 /* VA list handy helpers with tuples of <type, data> */
169 int ssh_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...);
170 int ssh_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...);
171 #endif /* LTC_SSH */
172
156173 int compare_testvector(const void* is, const unsigned long is_len, const void* should, const unsigned long should_len, const char* what, int which);
157174
158175 /* ref: $Format:%D$ */
243243 void *k;
244244 } ecc_key;
245245
246 /** Formats of ECC signatures */
247 typedef enum ecc_signature_type_ {
248 /* ASN.1 encoded, ANSI X9.62 */
249 LTC_ECCSIG_ANSIX962 = 0x0,
250 /* raw R, S values */
251 LTC_ECCSIG_RFC7518 = 0x1,
252 /* raw R, S, V (+27) values */
253 LTC_ECCSIG_ETH27 = 0x2,
254 /* SSH + ECDSA signature format defined by RFC5656 */
255 LTC_ECCSIG_RFC5656 = 0x3,
256 } ecc_signature_type;
257
246258 /** the ECC params provided */
247259 extern const ltc_ecc_curve ltc_ecc_curves[];
248260
250262 void ecc_sizes(int *low, int *high);
251263 int ecc_get_size(const ecc_key *key);
252264
253 int ecc_get_curve(const char* name_or_oid, const ltc_ecc_curve** cu);
254 int ecc_set_dp(const ltc_ecc_curve *cu, ecc_key *key);
265 int ecc_find_curve(const char* name_or_oid, const ltc_ecc_curve** cu);
266 int ecc_set_curve(const ltc_ecc_curve *cu, ecc_key *key);
255267 int ecc_generate_key(prng_state *prng, int wprng, ecc_key *key);
256268 int ecc_set_key(const unsigned char *in, unsigned long inlen, int type, ecc_key *key);
257269 int ecc_get_key(unsigned char *out, unsigned long *outlen, int type, const ecc_key *key);
286298 unsigned char *out, unsigned long *outlen,
287299 const ecc_key *key);
288300
289 int ecc_sign_hash_rfc7518(const unsigned char *in, unsigned long inlen,
290 unsigned char *out, unsigned long *outlen,
291 prng_state *prng, int wprng, const ecc_key *key);
292
293 int ecc_sign_hash(const unsigned char *in, unsigned long inlen,
294 unsigned char *out, unsigned long *outlen,
295 prng_state *prng, int wprng, const ecc_key *key);
296
297 int ecc_verify_hash_rfc7518(const unsigned char *sig, unsigned long siglen,
298 const unsigned char *hash, unsigned long hashlen,
299 int *stat, const ecc_key *key);
300
301 int ecc_verify_hash(const unsigned char *sig, unsigned long siglen,
301 #define ecc_sign_hash_rfc7518(in_, inlen_, out_, outlen_, prng_, wprng_, key_) \
302 ecc_sign_hash_ex(in_, inlen_, out_, outlen_, prng_, wprng_, LTC_ECCSIG_RFC7518, NULL, key_)
303
304 #define ecc_sign_hash(in_, inlen_, out_, outlen_, prng_, wprng_, key_) \
305 ecc_sign_hash_ex(in_, inlen_, out_, outlen_, prng_, wprng_, LTC_ECCSIG_ANSIX962, NULL, key_)
306
307 #define ecc_verify_hash_rfc7518(sig_, siglen_, hash_, hashlen_, stat_, key_) \
308 ecc_verify_hash_ex(sig_, siglen_, hash_, hashlen_, LTC_ECCSIG_RFC7518, stat_, key_)
309
310 #define ecc_verify_hash(sig_, siglen_, hash_, hashlen_, stat_, key_) \
311 ecc_verify_hash_ex(sig_, siglen_, hash_, hashlen_, LTC_ECCSIG_ANSIX962, stat_, key_)
312
313 int ecc_sign_hash_ex(const unsigned char *in, unsigned long inlen,
314 unsigned char *out, unsigned long *outlen,
315 prng_state *prng, int wprng, ecc_signature_type sigformat,
316 int *recid, const ecc_key *key);
317
318 int ecc_verify_hash_ex(const unsigned char *sig, unsigned long siglen,
319 const unsigned char *hash, unsigned long hashlen,
320 ecc_signature_type sigformat, int *stat, const ecc_key *key);
321
322 int ecc_recover_key(const unsigned char *sig, unsigned long siglen,
302323 const unsigned char *hash, unsigned long hashlen,
303 int *stat, const ecc_key *key);
324 int recid, ecc_signature_type sigformat, ecc_key *key);
304325
305326 #endif
306327
572593 /* INTEGER */
573594 int der_encode_integer(void *num, unsigned char *out, unsigned long *outlen);
574595 int der_decode_integer(const unsigned char *in, unsigned long inlen, void *num);
575 int der_length_integer(void *num, unsigned long *len);
596 int der_length_integer(void *num, unsigned long *outlen);
576597
577598 /* INTEGER -- handy for 0..2^32-1 values */
578599 int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsigned long *num);
102102 int pkcs_5_test (void);
103103 #endif /* LTC_PKCS_5 */
104104
105
105106 /* ref: $Format:%D$ */
106107 /* git commit: $Format:%H$ */
107108 /* commit time: $Format:%ai$ */
1818 * Internal Enums
1919 */
2020
21 enum public_key_algorithms {
21 enum ltc_oid_id {
2222 PKA_RSA,
2323 PKA_DSA,
2424 PKA_EC,
2929 * Internal Types
3030 */
3131
32 typedef struct Oid {
33 unsigned long OID[16];
34 /** Number of OID digits in use */
35 unsigned long OIDlen;
36 } oid_st;
37
3832 typedef struct {
3933 int size;
4034 const char *name, *base, *prime;
4135 } ltc_dh_set_type;
4236
37
38 typedef int (*fn_kdf_t)(const unsigned char *password, unsigned long password_len,
39 const unsigned char *salt, unsigned long salt_len,
40 int iteration_count, int hash_idx,
41 unsigned char *out, unsigned long *outlen);
42
43 typedef struct {
44 /* KDF */
45 fn_kdf_t kdf;
46 /* Hash or HMAC */
47 const char* h;
48 /* cipher */
49 const char* c;
50 unsigned long keylen;
51 /* not used for pbkdf2 */
52 unsigned long blocklen;
53 } pbes_properties;
54
55 typedef struct
56 {
57 pbes_properties type;
58 const void *pwd;
59 unsigned long pwdlen;
60 ltc_asn1_list *enc_data;
61 ltc_asn1_list *salt;
62 ltc_asn1_list *iv;
63 unsigned long iterations;
64 /* only used for RC2 */
65 unsigned long key_bits;
66 } pbes_arg;
4367
4468 /*
4569 * Internal functions
172196
173197 void copy_or_zeromem(const unsigned char* src, unsigned char* dest, unsigned long len, int coz);
174198
199 int pbes_decrypt(const pbes_arg *arg, unsigned char *dec_data, unsigned long *dec_size);
200
201 int pbes1_extract(const ltc_asn1_list *s, pbes_arg *res);
202 int pbes2_extract(const ltc_asn1_list *s, pbes_arg *res);
203
175204
176205 /* tomcrypt_pk.h */
177206
178207 int rand_bn_bits(void *N, int bits, prng_state *prng, int wprng);
179208 int rand_bn_upto(void *N, void *limit, prng_state *prng, int wprng);
180209
181 int pk_get_oid(int pk, oid_st *st);
210 int pk_get_oid(enum ltc_oid_id id, const char **st);
182211 int pk_oid_str_to_num(const char *OID, unsigned long *oid, unsigned long *oidlen);
183212 int pk_oid_num_to_str(const unsigned long *oid, unsigned long oidlen, char *OID, unsigned long *outlen);
184213
191220
192221 /* ---- ECC Routines ---- */
193222 #ifdef LTC_MECC
194 int ecc_set_dp_from_mpis(void *a, void *b, void *prime, void *order, void *gx, void *gy, unsigned long cofactor, ecc_key *key);
195 int ecc_copy_dp(const ecc_key *srckey, ecc_key *key);
196 int ecc_set_dp_by_size(int size, ecc_key *key);
223 int ecc_set_curve_from_mpis(void *a, void *b, void *prime, void *order, void *gx, void *gy, unsigned long cofactor, ecc_key *key);
224 int ecc_copy_curve(const ecc_key *srckey, ecc_key *key);
225 int ecc_set_curve_by_size(int size, ecc_key *key);
226 int ecc_import_subject_public_key_info(const unsigned char *in, unsigned long inlen, ecc_key *key);
227
228 #ifdef LTC_SSH
229 int ecc_ssh_ecdsa_encode_name(char *buffer, unsigned long *buflen, const ecc_key *key);
230 #endif
197231
198232 /* low level functions */
199233 ecc_point *ltc_ecc_new_point(void);
263297 #endif /* LTC_MDSA */
264298
265299 #ifdef LTC_DER
300
301 #define LTC_ASN1_IS_TYPE(e, t) (((e) != NULL) && ((e)->type == (t)))
302
266303 /* DER handling */
267304 int der_decode_custom_type_ex(const unsigned char *in, unsigned long inlen,
268305 ltc_asn1_list *root,
273310 int der_length_asn1_identifier(const ltc_asn1_list *id, unsigned long *idlen);
274311
275312 int der_encode_asn1_length(unsigned long len, unsigned char* out, unsigned long* outlen);
276 int der_decode_asn1_length(const unsigned char* len, unsigned long* lenlen, unsigned long* outlen);
313 int der_decode_asn1_length(const unsigned char *in, unsigned long *inlen, unsigned long *outlen);
277314 int der_length_asn1_length(unsigned long len, unsigned long *outlen);
278315
279316 int der_length_sequence_ex(const ltc_asn1_list *list, unsigned long inlen,
301338 unsigned int algorithm, void* public_key, unsigned long* public_key_len,
302339 ltc_asn1_type parameters_type, ltc_asn1_list* parameters, unsigned long *parameters_len);
303340
341 int pk_oid_cmp_with_ulong(const char *o1, const unsigned long *o2, unsigned long o2size);
342 int pk_oid_cmp_with_asn1(const char *o1, const ltc_asn1_list *o2);
343
304344 #endif /* LTC_DER */
345
346 /* tomcrypt_pkcs.h */
347
348 #ifdef LTC_PKCS_8
349
350 int pkcs8_decode_flexi(const unsigned char *in, unsigned long inlen,
351 const void *pwd, unsigned long pwdlen,
352 ltc_asn1_list **decoded_list);
353
354 #endif /* LTC_PKCS_8 */
355
356
357 #ifdef LTC_PKCS_12
358
359 int pkcs12_utf8_to_utf16(const unsigned char *in, unsigned long inlen,
360 unsigned char *out, unsigned long *outlen);
361
362 int pkcs12_kdf( int hash_id,
363 const unsigned char *pw, unsigned long pwlen,
364 const unsigned char *salt, unsigned long saltlen,
365 unsigned int iterations, unsigned char purpose,
366 unsigned char *out, unsigned long outlen);
367
368 #endif /* LTC_PKCS_12 */
305369
306370 /* tomcrypt_prng.h */
307371
327391 return CRYPT_OK; \
328392 }
329393
394 /* extract a byte portably */
395 #ifdef _MSC_VER
396 #define LTC_BYTE(x, n) ((unsigned char)((x) >> (8 * (n))))
397 #else
398 #define LTC_BYTE(x, n) (((x) >> (8 * (n))) & 255)
399 #endif
330400
331401 /* ref: $Format:%D$ */
332402 /* git commit: $Format:%H$ */
6161 LOAD32H(s3, pelmac->state + 12);
6262 for (r = 0; r < 4; r++) {
6363 t0 =
64 Te0(byte(s0, 3)) ^
65 Te1(byte(s1, 2)) ^
66 Te2(byte(s2, 1)) ^
67 Te3(byte(s3, 0));
64 Te0(LTC_BYTE(s0, 3)) ^
65 Te1(LTC_BYTE(s1, 2)) ^
66 Te2(LTC_BYTE(s2, 1)) ^
67 Te3(LTC_BYTE(s3, 0));
6868 t1 =
69 Te0(byte(s1, 3)) ^
70 Te1(byte(s2, 2)) ^
71 Te2(byte(s3, 1)) ^
72 Te3(byte(s0, 0));
69 Te0(LTC_BYTE(s1, 3)) ^
70 Te1(LTC_BYTE(s2, 2)) ^
71 Te2(LTC_BYTE(s3, 1)) ^
72 Te3(LTC_BYTE(s0, 0));
7373 t2 =
74 Te0(byte(s2, 3)) ^
75 Te1(byte(s3, 2)) ^
76 Te2(byte(s0, 1)) ^
77 Te3(byte(s1, 0));
74 Te0(LTC_BYTE(s2, 3)) ^
75 Te1(LTC_BYTE(s3, 2)) ^
76 Te2(LTC_BYTE(s0, 1)) ^
77 Te3(LTC_BYTE(s1, 0));
7878 t3 =
79 Te0(byte(s3, 3)) ^
80 Te1(byte(s0, 2)) ^
81 Te2(byte(s1, 1)) ^
82 Te3(byte(s2, 0));
79 Te0(LTC_BYTE(s3, 3)) ^
80 Te1(LTC_BYTE(s0, 2)) ^
81 Te2(LTC_BYTE(s1, 1)) ^
82 Te3(LTC_BYTE(s2, 0));
8383 s0 = t0; s1 = t1; s2 = t2; s3 = t3;
8484 }
8585 STORE32H(s0, pelmac->state );
1414
1515 #ifdef LTC_PMAC
1616
17 int pmac_done(pmac_state *state, unsigned char *out, unsigned long *outlen)
17 int pmac_done(pmac_state *pmac, unsigned char *out, unsigned long *outlen)
1818 {
1919 int err, x;
2020
21 LTC_ARGCHK(state != NULL);
22 LTC_ARGCHK(out != NULL);
23 if ((err = cipher_is_valid(state->cipher_idx)) != CRYPT_OK) {
21 LTC_ARGCHK(pmac != NULL);
22 LTC_ARGCHK(out != NULL);
23 if ((err = cipher_is_valid(pmac->cipher_idx)) != CRYPT_OK) {
2424 return err;
2525 }
2626
27 if ((state->buflen > (int)sizeof(state->block)) || (state->buflen < 0) ||
28 (state->block_len > (int)sizeof(state->block)) || (state->buflen > state->block_len)) {
27 if ((pmac->buflen > (int)sizeof(pmac->block)) || (pmac->buflen < 0) ||
28 (pmac->block_len > (int)sizeof(pmac->block)) || (pmac->buflen > pmac->block_len)) {
2929 return CRYPT_INVALID_ARG;
3030 }
3131
3232
3333 /* handle padding. If multiple xor in L/x */
3434
35 if (state->buflen == state->block_len) {
35 if (pmac->buflen == pmac->block_len) {
3636 /* xor Lr against the checksum */
37 for (x = 0; x < state->block_len; x++) {
38 state->checksum[x] ^= state->block[x] ^ state->Lr[x];
37 for (x = 0; x < pmac->block_len; x++) {
38 pmac->checksum[x] ^= pmac->block[x] ^ pmac->Lr[x];
3939 }
4040 } else {
4141 /* otherwise xor message bytes then the 0x80 byte */
42 for (x = 0; x < state->buflen; x++) {
43 state->checksum[x] ^= state->block[x];
42 for (x = 0; x < pmac->buflen; x++) {
43 pmac->checksum[x] ^= pmac->block[x];
4444 }
45 state->checksum[x] ^= 0x80;
45 pmac->checksum[x] ^= 0x80;
4646 }
4747
4848 /* encrypt it */
49 if ((err = cipher_descriptor[state->cipher_idx].ecb_encrypt(state->checksum, state->checksum, &state->key)) != CRYPT_OK) {
49 if ((err = cipher_descriptor[pmac->cipher_idx].ecb_encrypt(pmac->checksum, pmac->checksum, &pmac->key)) != CRYPT_OK) {
5050 return err;
5151 }
52 cipher_descriptor[state->cipher_idx].done(&state->key);
52 cipher_descriptor[pmac->cipher_idx].done(&pmac->key);
5353
5454 /* store it */
55 for (x = 0; x < state->block_len && x < (int)*outlen; x++) {
56 out[x] = state->checksum[x];
55 for (x = 0; x < pmac->block_len && x < (int)*outlen; x++) {
56 out[x] = pmac->checksum[x];
5757 }
5858 *outlen = x;
5959
6060 #ifdef LTC_CLEAN_STACK
61 zeromem(state, sizeof(*state));
61 zeromem(pmac, sizeof(*pmac));
6262 #endif
6363 return CRYPT_OK;
6464 }
4040 length--;
4141 } while (length % 8 != 0);
4242
43 if (s1 >= _adler32_base)
43 if (s1 >= _adler32_base) {
4444 s1 -= _adler32_base;
45 }
4546 s2 %= _adler32_base;
4647 }
4748
6667 length -= 8;
6768 input += 8;
6869
69 if (s1 >= _adler32_base)
70 if (s1 >= _adler32_base) {
7071 s1 -= _adler32_base;
72 }
7173 s2 %= _adler32_base;
7274 }
7375
5151 x--;
5252 *outlen = x; /* returning the length without terminating NUL */
5353
54 if (options == 0) alphabet = alphabets[0];
55 else alphabet = alphabets[1];
54 if (options == 0) {
55 alphabet = alphabets[0];
56 } else {
57 alphabet = alphabets[1];
58 }
5659
5760 for (i = 0; i < x; i += 2) {
5861 out[i] = alphabet[(in[i/2] >> 4) & 0x0f];
103103 continue;
104104 }
105105 if (c == 253) {
106 if (mode == strict)
106 if (mode == strict) {
107107 return CRYPT_INVALID_PACKET;
108 else
109 continue; /* allow to ignore white-spaces (relaxed+insane) */
108 }
109 continue; /* allow to ignore white-spaces (relaxed+insane) */
110110 }
111111 if (c == 255) {
112 if (mode == insane)
112 if (mode == insane) {
113113 continue; /* allow to ignore invalid garbage (insane) */
114 else
115 return CRYPT_INVALID_PACKET;
114 }
115 return CRYPT_INVALID_PACKET;
116116 }
117117 if ((g > 0) && (mode != insane)) {
118118 /* we only allow '=' to be at the end (strict+relaxed) */
2020 {
2121 unsigned char buf[32];
2222 zeromem(buf, sizeof(buf));
23 if (len > (unsigned long)sizeof(buf))
23 if (len > (unsigned long)sizeof(buf)) {
2424 burn_stack(len - sizeof(buf));
25 }
2526 }
2627
2728
6262 int compare_testvector(const void* is, const unsigned long is_len, const void* should, const unsigned long should_len, const char* what, int which)
6363 {
6464 int res = 0;
65 if(is_len != should_len)
65 if(is_len != should_len) {
6666 res = is_len > should_len ? -1 : 1;
67 else
67 } else {
6868 res = XMEMCMP(is, should, is_len);
69
69 }
7070 #if defined(LTC_TEST) && defined(LTC_TEST_DBG)
7171 if (res != 0) {
7272 fprintf(stderr, "Testvector #%i of %s failed:\n", which, what);
2828 #endif
2929 unsigned char mask = 0xff; /* initialize mask at all ones */
3030
31 LTC_ARGCHK(src != NULL);
32 LTC_ARGCHK(dest != NULL);
31 LTC_ARGCHKVD(src != NULL);
32 LTC_ARGCHKVD(dest != NULL);
3333
3434 if (coz != 0) coz = 1;
3535 y = 0;
152152 LTC_ARGCHKVD(input != NULL);
153153 crc = ctx->crc;
154154
155 while (length--)
155 while (length--) {
156156 crc = crc32_m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc);
157 }
157158
158159 ctx->crc = crc;
159160 }
435435 #if defined(LTC_PKCS_5)
436436 " PKCS#5 "
437437 #endif
438 #if defined(LTC_PKCS_8)
439 " PKCS#8 "
440 #endif
441 #if defined(LTC_PKCS_12)
442 " PKCS#12 "
443 #endif
438444 #if defined(LTC_PADDING)
439445 " PADDING "
440446 #endif
441447 #if defined(LTC_HKDF)
442448 " HKDF "
449 #endif
450 #if defined(LTC_PBES)
451 " PBES1 "
452 " PBES2 "
453 #endif
454 #if defined(LTC_SSH)
455 " SSH "
443456 #endif
444457 #if defined(LTC_DEVRANDOM)
445458 " LTC_DEVRANDOM "
257257 int crypt_list_all_constants(char *names_list, unsigned int *names_list_size) {
258258 int i;
259259 unsigned int total_len = 0;
260 char number[32], *ptr;
260 char *ptr;
261261 int number_len;
262262 int count = sizeof(_crypt_constants) / sizeof(_crypt_constants[0]);
263263
264264 /* calculate amount of memory required for the list */
265265 for (i=0; i<count; i++) {
266 total_len += (unsigned int)strlen(_crypt_constants[i].name) + 1;
267 /* the above +1 is for the commas */
268 number_len = snprintf(number, sizeof(number), "%d", _crypt_constants[i].value);
269 if ((number_len < 0) ||
270 ((unsigned int)number_len >= sizeof(number)))
266 number_len = snprintf(NULL, 0, "%s,%d\n", _crypt_constants[i].name, _crypt_constants[i].value);
267 if (number_len < 0) {
271268 return -1;
272 total_len += number_len + 1;
273 /* this last +1 is for newlines (and ending NULL) */
269 }
270 total_len += number_len;
274271 }
275272
276273 if (names_list == NULL) {
282279 /* build the names list */
283280 ptr = names_list;
284281 for (i=0; i<count; i++) {
285 strcpy(ptr, _crypt_constants[i].name);
286 ptr += strlen(_crypt_constants[i].name);
287 strcpy(ptr, ",");
288 ptr += 1;
289
290 number_len = snprintf(number, sizeof(number), "%d", _crypt_constants[i].value);
291 strcpy(ptr, number);
282 number_len = snprintf(ptr, total_len, "%s,%d\n", _crypt_constants[i].name, _crypt_constants[i].value);
283 if (number_len < 0) return -1;
284 if ((unsigned int)number_len > total_len) return -1;
285 total_len -= number_len;
292286 ptr += number_len;
293 strcpy(ptr, "\n");
294 ptr += 1;
295287 }
296288 /* to remove the trailing new-line */
297289 ptr -= 1;
318318 int crypt_list_all_sizes(char *names_list, unsigned int *names_list_size) {
319319 int i;
320320 unsigned int total_len = 0;
321 char number[32], *ptr;
321 char *ptr;
322322 int number_len;
323323 int count = sizeof(_crypt_sizes) / sizeof(_crypt_sizes[0]);
324324
325325 /* calculate amount of memory required for the list */
326326 for (i=0; i<count; i++) {
327 total_len += (unsigned int)strlen(_crypt_sizes[i].name) + 1;
328 /* the above +1 is for the commas */
329 number_len = snprintf(number, sizeof(number), "%u", _crypt_sizes[i].size);
330 if ((number_len < 0) ||
331 ((unsigned int)number_len >= sizeof(number)))
327 number_len = snprintf(NULL, 0, "%s,%u\n", _crypt_sizes[i].name, _crypt_sizes[i].size);
328 if (number_len < 0) {
332329 return -1;
333 total_len += (unsigned int)strlen(number) + 1;
330 }
331 total_len += number_len;
334332 /* this last +1 is for newlines (and ending NULL) */
335333 }
336334
343341 /* build the names list */
344342 ptr = names_list;
345343 for (i=0; i<count; i++) {
346 strcpy(ptr, _crypt_sizes[i].name);
347 ptr += strlen(_crypt_sizes[i].name);
348 strcpy(ptr, ",");
349 ptr += 1;
350
351 number_len = snprintf(number, sizeof(number), "%u", _crypt_sizes[i].size);
352 strcpy(ptr, number);
344 number_len = snprintf(ptr, total_len, "%s,%u\n", _crypt_sizes[i].name, _crypt_sizes[i].size);
345 if (number_len < 0) return -1;
346 if ((unsigned int)number_len > total_len) return -1;
347 total_len -= number_len;
353348 ptr += number_len;
354 strcpy(ptr, "\n");
355 ptr += 1;
356349 }
357350 /* to remove the trailing new-line */
358351 ptr -= 1;
6767 {
6868 if (err < 0 || err >= (int)(sizeof(err_2_str)/sizeof(err_2_str[0]))) {
6969 return "Invalid error code.";
70 } else {
71 return err_2_str[err];
7270 }
71 return err_2_str[err];
7372 }
7473
7574
2929 valid results for HKDF. */
3030 if (salt == NULL || saltlen == 0) {
3131 return hmac_memory(hash_idx, (const unsigned char *)"", 1, in, inlen, out, outlen);
32 } else {
33 return hmac_memory(hash_idx, salt, saltlen, in, inlen, out, outlen);
3432 }
33 return hmac_memory(hash_idx, salt, saltlen, in, inlen, out, outlen);
3534 }
3635
3736 int hkdf_expand(int hash_idx, const unsigned char *info, unsigned long infolen,
5453 hashsize = hash_descriptor[hash_idx].hashsize;
5554
5655 /* RFC5869 parameter restrictions */
57 if (inlen < hashsize || outlen > hashsize * 255)
56 if (inlen < hashsize || outlen > hashsize * 255) {
5857 return CRYPT_INVALID_ARG;
59 if (info == NULL && infolen != 0)
58 }
59 if (info == NULL && infolen != 0) {
6060 return CRYPT_INVALID_ARG;
61 }
6162 LTC_ARGCHK(out != NULL);
6263
6364 Tlen = hashsize + infolen + 1;
8687 }
8788 outoff += Noutlen;
8889
89 if (outoff >= outlen) /* loop exit condition */
90 if (outoff >= outlen) { /* loop exit condition */
9091 break;
92 }
9193
9294 /* All subsequent HMAC data T(N) DOES include the previous hash value */
9395 XMEMCPY(T, out + hashsize * (N-1), hashsize);
3535 if (type < LTC_PAD_ONE_AND_ZERO) {
3636 pad = data[padded_length - 1];
3737
38 if (pad > padded_length) return CRYPT_INVALID_ARG;
38 if (pad > padded_length || pad == 0) return CRYPT_INVALID_ARG;
3939
4040 unpadded_length = padded_length - pad;
4141 } else {
9898 type = mode & LTC_PAD_MASK;
9999
100100 if (*padded_length < l) {
101 if (type != LTC_PAD_ISO_10126) *padded_length = l;
102 else *padded_length = length + 256;
101 if (type != LTC_PAD_ISO_10126) {
102 *padded_length = l;
103 } else {
104 *padded_length = length + 256;
105 }
103106 return CRYPT_BUFFER_OVERFLOW;
104107 }
105108
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8 #include "tomcrypt_private.h"
9
10 #ifdef LTC_PBES
11
12 /**
13 Decrypt Data encrypted via either PBES1 or PBES2
14
15 @param arg The according PBES parameters
16 @param dec_data [out] The decrypted data
17 @param dec_size [in/out] The length of the encrypted resp. decrypted data
18 @return CRYPT_OK on success
19 */
20 int pbes_decrypt(const pbes_arg *arg, unsigned char *dec_data, unsigned long *dec_size)
21 {
22 int err, hid, cid;
23 unsigned char k[32], *iv;
24 unsigned long klen, keylen, dlen;
25 long diff;
26 symmetric_CBC cbc;
27
28 LTC_ARGCHK(arg != NULL);
29 LTC_ARGCHK(arg->type.kdf != NULL);
30 LTC_ARGCHK(dec_data != NULL);
31 LTC_ARGCHK(dec_size != NULL);
32
33 hid = find_hash(arg->type.h);
34 if (hid == -1) return CRYPT_INVALID_HASH;
35 cid = find_cipher(arg->type.c);
36 if (cid == -1) return CRYPT_INVALID_CIPHER;
37
38 klen = arg->type.keylen;
39
40 /* RC2 special case */
41 if (arg->key_bits != 0) {
42 /* We can't handle odd lengths of Key Bits */
43 if ((arg->key_bits % 8) != 0) return CRYPT_INVALID_KEYSIZE;
44 /* Internally we use bytes, not bits */
45 klen = arg->key_bits / 8;
46 }
47 keylen = klen;
48
49 if (arg->iv != NULL) {
50 iv = arg->iv->data;
51 } else {
52 iv = k + klen;
53 klen += arg->type.blocklen;
54 }
55
56 if (klen > sizeof(k)) return CRYPT_INVALID_ARG;
57
58 if ((err = arg->type.kdf(arg->pwd, arg->pwdlen, arg->salt->data, arg->salt->size, arg->iterations, hid, k, &klen)) != CRYPT_OK) goto LBL_ERROR;
59 if ((err = cbc_start(cid, iv, k, keylen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR;
60 if ((err = cbc_decrypt(arg->enc_data->data, dec_data, arg->enc_data->size, &cbc)) != CRYPT_OK) goto LBL_ERROR;
61 if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR;
62 dlen = arg->enc_data->size;
63 if ((err = padding_depad(dec_data, &dlen, LTC_PAD_PKCS7)) != CRYPT_OK) goto LBL_ERROR;
64 diff = (long)arg->enc_data->size - (long)dlen;
65 if ((diff <= 0) || (diff > cipher_descriptor[cid].block_length)) {
66 err = CRYPT_PK_INVALID_PADDING;
67 goto LBL_ERROR;
68 }
69 *dec_size = dlen;
70 return CRYPT_OK;
71
72 LBL_ERROR:
73 zeromem(k, sizeof(k));
74 zeromem(dec_data, *dec_size);
75 return err;
76 }
77
78 #endif
79
80 /* ref: $Format:%D$ */
81 /* git commit: $Format:%H$ */
82 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8 #include "tomcrypt_private.h"
9
10 #ifdef LTC_PBES
11
12 static int _pkcs_5_alg1_wrap(const unsigned char *password, unsigned long password_len,
13 const unsigned char *salt, unsigned long salt_len,
14 int iteration_count, int hash_idx,
15 unsigned char *out, unsigned long *outlen)
16 {
17 LTC_UNUSED_PARAM(salt_len);
18 return pkcs_5_alg1(password, password_len, salt, iteration_count, hash_idx, out, outlen);
19 }
20
21 static int _pkcs_12_wrap(const unsigned char *password, unsigned long password_len,
22 const unsigned char *salt, unsigned long salt_len,
23 int iteration_count, int hash_idx,
24 unsigned char *out, unsigned long *outlen)
25 {
26 int err;
27 /* convert password to unicode/utf16-be */
28 unsigned long pwlen = password_len * 2;
29 unsigned char* pw;
30 if (*outlen < 32) return CRYPT_INVALID_ARG;
31 pw = XMALLOC(pwlen + 2);
32 if (pw == NULL) return CRYPT_MEM;
33 if ((err = pkcs12_utf8_to_utf16(password, password_len, pw, &pwlen)) != CRYPT_OK) goto LBL_ERROR;
34 pw[pwlen++] = 0;
35 pw[pwlen++] = 0;
36 /* derive KEY */
37 if ((err = pkcs12_kdf(hash_idx, pw, pwlen, salt, salt_len, iteration_count, 1, out, 24)) != CRYPT_OK) goto LBL_ERROR;
38 /* derive IV */
39 if ((err = pkcs12_kdf(hash_idx, pw, pwlen, salt, salt_len, iteration_count, 2, out+24, 8)) != CRYPT_OK) goto LBL_ERROR;
40
41 *outlen = 32;
42 LBL_ERROR:
43 zeromem(pw, pwlen);
44 XFREE(pw);
45 return err;
46 }
47
48 static const pbes_properties _pbes1_types[] = {
49 { _pkcs_5_alg1_wrap, "md2", "des", 8, 8 },
50 { _pkcs_5_alg1_wrap, "md2", "rc2", 8, 8 },
51 { _pkcs_5_alg1_wrap, "md5", "des", 8, 8 },
52 { _pkcs_5_alg1_wrap, "md5", "rc2", 8, 8 },
53 { _pkcs_5_alg1_wrap, "sha1", "des", 8, 8 },
54 { _pkcs_5_alg1_wrap, "sha1", "rc2", 8, 8 },
55 { _pkcs_12_wrap, "sha1", "3des", 24, 8 },
56 };
57
58 typedef struct {
59 const pbes_properties *data;
60 const char *oid;
61 } oid_to_pbes;
62
63 static const oid_to_pbes _pbes1_list[] = {
64 { &_pbes1_types[0], "1.2.840.113549.1.5.1" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.1 pbeWithMD2AndDES-CBC */
65 { &_pbes1_types[1], "1.2.840.113549.1.5.4" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.4 pbeWithMD2AndRC2-CBC */
66 { &_pbes1_types[2], "1.2.840.113549.1.5.3" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.3 pbeWithMD5AndDES-CBC */
67 { &_pbes1_types[3], "1.2.840.113549.1.5.6" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.6 pbeWithMD5AndRC2-CBC */
68 { &_pbes1_types[4], "1.2.840.113549.1.5.10" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.10 pbeWithSHA1AndDES-CBC */
69 { &_pbes1_types[5], "1.2.840.113549.1.5.11" }, /* http://www.oid-info.com/get/1.2.840.113549.1.5.11 pbeWithSHA1AndRC2-CBC */
70 { &_pbes1_types[6], "1.2.840.113549.1.12.1.3" }, /* http://www.oid-info.com/get/1.2.840.113549.1.12.1.3 pbeWithSHAAnd3-KeyTripleDES-CBC */
71 { 0 },
72 };
73
74 static int _pbes1_from_oid(const ltc_asn1_list *oid, pbes_properties *res)
75 {
76 unsigned int i;
77 for (i = 0; _pbes1_list[i].data != NULL; ++i) {
78 if (pk_oid_cmp_with_asn1(_pbes1_list[i].oid, oid) == CRYPT_OK) {
79 if (res != NULL) *res = *_pbes1_list[i].data;
80 return CRYPT_OK;
81 }
82 }
83 return CRYPT_INVALID_ARG;
84 }
85
86 /**
87 Extract PBES1 parameters
88
89 @param s The start of the sequence with potential PBES1 parameters
90 @param res Pointer to where the extracted parameters should be stored
91 @return CRYPT_OK on success
92 */
93 int pbes1_extract(const ltc_asn1_list *s, pbes_arg *res)
94 {
95 int err;
96
97 LTC_ARGCHK(s != NULL);
98 LTC_ARGCHK(res != NULL);
99
100 if ((err = _pbes1_from_oid(s, &res->type)) != CRYPT_OK) return err;
101
102 if (!LTC_ASN1_IS_TYPE(s->next, LTC_ASN1_SEQUENCE) ||
103 !LTC_ASN1_IS_TYPE(s->next->child, LTC_ASN1_OCTET_STRING) ||
104 !LTC_ASN1_IS_TYPE(s->next->child->next, LTC_ASN1_INTEGER)) {
105 return CRYPT_INVALID_PACKET;
106 }
107 /* PBES1: encrypted pkcs8 - pbeWithMD5AndDES-CBC:
108 * 0:d=0 hl=4 l= 329 cons: SEQUENCE
109 * 4:d=1 hl=2 l= 27 cons: SEQUENCE
110 * 6:d=2 hl=2 l= 9 prim: OBJECT :pbeWithMD5AndDES-CBC (== 1.2.840.113549.1.5.3) (== *s)
111 * 17:d=2 hl=2 l= 14 cons: SEQUENCE (== *lalgparam)
112 * 19:d=3 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:8EDF749A06CCDE51 (== salt)
113 * 29:d=3 hl=2 l= 2 prim: INTEGER :0800 (== iterations)
114 * 33:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data)
115 */
116 res->salt = s->next->child;
117 res->iterations = mp_get_int(s->next->child->next->data);
118
119 return CRYPT_OK;
120 }
121
122 #endif
123
124 /* ref: $Format:%D$ */
125 /* git commit: $Format:%H$ */
126 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8 #include "tomcrypt_private.h"
9
10 #ifdef LTC_PBES
11
12 static const char * const _oid_pbes2 = "1.2.840.113549.1.5.13";
13 static const char * const _oid_pbkdf2 = "1.2.840.113549.1.5.12";
14
15 typedef struct {
16 const char *oid;
17 const char *id;
18 } oid_id_st;
19
20 static const oid_id_st _hmac_oid_names[] = {
21 { "1.2.840.113549.2.7", "sha1" },
22 { "1.2.840.113549.2.8", "sha224" },
23 { "1.2.840.113549.2.9", "sha256" },
24 { "1.2.840.113549.2.10", "sha384" },
25 { "1.2.840.113549.2.11", "sha512" },
26 { "1.2.840.113549.2.12", "sha512-224" },
27 { "1.2.840.113549.2.13", "sha512-256" },
28 };
29
30 static const pbes_properties _pbes2_default_types[] = {
31 { pkcs_5_alg2, "sha1", "des", 8, 0 },
32 { pkcs_5_alg2, "sha1", "rc2", 4, 0 },
33 { pkcs_5_alg2, "sha1", "3des", 24, 0 },
34 { pkcs_5_alg2, "sha1", "aes", 16, 0 },
35 { pkcs_5_alg2, "sha1", "aes", 24, 0 },
36 { pkcs_5_alg2, "sha1", "aes", 32, 0 },
37 };
38
39 typedef struct {
40 const pbes_properties *data;
41 const char* oid;
42 } oid_to_pbes;
43
44 static const oid_to_pbes _pbes2_list[] = {
45 { &_pbes2_default_types[0], "1.3.14.3.2.7" }, /* http://www.oid-info.com/get/1.3.14.3.2.7 desCBC */
46 { &_pbes2_default_types[1], "1.2.840.113549.3.2" }, /* http://www.oid-info.com/get/1.2.840.113549.3.2 rc2CBC */
47 { &_pbes2_default_types[2], "1.2.840.113549.3.7" }, /* http://www.oid-info.com/get/1.2.840.113549.3.7 des-EDE3-CBC */
48 { &_pbes2_default_types[3], "2.16.840.1.101.3.4.1.2" }, /* http://www.oid-info.com/get/2.16.840.1.101.3.4.1.2 aes128-CBC */
49 { &_pbes2_default_types[4], "2.16.840.1.101.3.4.1.22" }, /* http://www.oid-info.com/get/2.16.840.1.101.3.4.1.22 aes192-CBC */
50 { &_pbes2_default_types[5], "2.16.840.1.101.3.4.1.42" }, /* http://www.oid-info.com/get/2.16.840.1.101.3.4.1.42 aes256-CBC */
51 };
52
53 static int _pbes2_from_oid(const ltc_asn1_list *cipher_oid, const ltc_asn1_list *hmac_oid, pbes_properties *res)
54 {
55 unsigned int i;
56 for (i = 0; i < sizeof(_pbes2_list)/sizeof(_pbes2_list[0]); ++i) {
57 if (pk_oid_cmp_with_asn1(_pbes2_list[i].oid, cipher_oid) == CRYPT_OK) {
58 *res = *_pbes2_list[i].data;
59 break;
60 }
61 }
62 if (res->c == NULL) return CRYPT_INVALID_CIPHER;
63 if (hmac_oid != NULL) {
64 for (i = 0; i < sizeof(_hmac_oid_names)/sizeof(_hmac_oid_names[0]); ++i) {
65 if (pk_oid_cmp_with_asn1(_hmac_oid_names[i].oid, hmac_oid) == CRYPT_OK) {
66 res->h = _hmac_oid_names[i].id;
67 return CRYPT_OK;
68 }
69 }
70 return CRYPT_INVALID_HASH;
71 }
72 return CRYPT_OK;
73 }
74
75
76 /**
77 Extract PBES2 parameters
78
79 @param s The start of the sequence with potential PBES2 parameters
80 @param res Pointer to where the extracted parameters should be stored
81 @return CRYPT_OK on success
82 */
83 int pbes2_extract(const ltc_asn1_list *s, pbes_arg *res)
84 {
85 unsigned long klen;
86 ltc_asn1_list *lkdf, *lenc, *loptseq, *liter, *lhmac;
87 int err;
88
89 LTC_ARGCHK(s != NULL);
90 LTC_ARGCHK(res != NULL);
91
92 if ((err = pk_oid_cmp_with_asn1(_oid_pbes2, s)) != CRYPT_OK) return err;
93
94 if (!LTC_ASN1_IS_TYPE(s->next, LTC_ASN1_SEQUENCE) ||
95 !LTC_ASN1_IS_TYPE(s->next->child, LTC_ASN1_SEQUENCE) ||
96 !LTC_ASN1_IS_TYPE(s->next->child->child, LTC_ASN1_OBJECT_IDENTIFIER) ||
97 !LTC_ASN1_IS_TYPE(s->next->child->child->next, LTC_ASN1_SEQUENCE) ||
98 !LTC_ASN1_IS_TYPE(s->next->child->next, LTC_ASN1_SEQUENCE) ||
99 !LTC_ASN1_IS_TYPE(s->next->child->next->child, LTC_ASN1_OBJECT_IDENTIFIER)) {
100 return CRYPT_INVALID_PACKET;
101 }
102 /* PBES2: encrypted pkcs8 - PBES2+PBKDF2+des-ede3-cbc:
103 * 0:d=0 hl=4 l= 380 cons: SEQUENCE
104 * 4:d=1 hl=2 l= 78 cons: SEQUENCE
105 * 6:d=2 hl=2 l= 9 prim: OBJECT :PBES2 (== 1.2.840.113549.1.5.13) (== *s)
106 * 17:d=2 hl=2 l= 65 cons: SEQUENCE
107 * 19:d=3 hl=2 l= 41 cons: SEQUENCE
108 * 21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2 (== *lkdf)
109 * 32:d=4 hl=2 l= 28 cons: SEQUENCE
110 * 34:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:28BA4ABF6AA76A3D (== res->salt)
111 * 44:d=5 hl=2 l= 2 prim: INTEGER :0800 (== res->iterations, *liter)
112 * 48:d=5 hl=2 l= 12 cons: SEQUENCE (== *loptseq - this sequence is optional, may be missing)
113 * 50:d=6 hl=2 l= 8 prim: OBJECT :hmacWithSHA256 (== *lhmac)
114 * 60:d=6 hl=2 l= 0 prim: NULL
115 * 62:d=3 hl=2 l= 20 cons: SEQUENCE
116 * 64:d=4 hl=2 l= 8 prim: OBJECT :des-ede3-cbc (== *lenc)
117 * 74:d=4 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:B1404C4688DC9A5A
118 * 84:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data)
119 */
120 lkdf = s->next->child->child;
121 lenc = s->next->child->next->child;
122
123 if ((err = pk_oid_cmp_with_asn1(_oid_pbkdf2, lkdf)) != CRYPT_OK) return err;
124
125 if (!LTC_ASN1_IS_TYPE(lkdf->next, LTC_ASN1_SEQUENCE) ||
126 !LTC_ASN1_IS_TYPE(lkdf->next->child, LTC_ASN1_OCTET_STRING) ||
127 !LTC_ASN1_IS_TYPE(lkdf->next->child->next, LTC_ASN1_INTEGER)) {
128 return CRYPT_INVALID_PACKET;
129 }
130
131 liter = lkdf->next->child->next;
132 loptseq = liter->next;
133 res->salt = lkdf->next->child;
134 res->iterations = mp_get_int(liter->data);
135
136 /* There's an optional INTEGER keyLength after the iterations, skip that if it's there.
137 * c.f. RFC 2898 A.2 PBKDF2 */
138 if(LTC_ASN1_IS_TYPE(loptseq, LTC_ASN1_INTEGER)) {
139 loptseq = loptseq->next;
140 }
141
142 /* this sequence is optional */
143 lhmac = NULL;
144 if (LTC_ASN1_IS_TYPE(loptseq, LTC_ASN1_SEQUENCE) &&
145 LTC_ASN1_IS_TYPE(loptseq->child, LTC_ASN1_OBJECT_IDENTIFIER)) {
146 lhmac = loptseq->child;
147 }
148 if ((err = _pbes2_from_oid(lenc, lhmac, &res->type)) != CRYPT_OK) return err;
149
150 if (LTC_ASN1_IS_TYPE(lenc->next, LTC_ASN1_OCTET_STRING)) {
151 /* 'NON-RC2'-CBC */
152 res->iv = lenc->next;
153 } else if (LTC_ASN1_IS_TYPE(lenc->next, LTC_ASN1_SEQUENCE)) {
154 /* RC2-CBC is a bit special ...
155 *
156 * RC2-CBC-Parameter ::= SEQUENCE {
157 * rc2ParameterVersion INTEGER OPTIONAL,
158 * iv OCTET STRING (SIZE(8)) }
159 */
160 if (LTC_ASN1_IS_TYPE(lenc->next->child, LTC_ASN1_INTEGER) &&
161 LTC_ASN1_IS_TYPE(lenc->next->child->next, LTC_ASN1_OCTET_STRING)) {
162 klen = mp_get_int(lenc->next->child->data);
163 res->iv = lenc->next->child->next;
164 /*
165 * Effective Key Bits Encoding
166 * 40 160
167 * 64 120
168 * 128 58
169 * b >= 256 b
170 */
171 switch (klen) {
172 case 160:
173 res->key_bits = 40;
174 break;
175 case 120:
176 res->key_bits = 64;
177 break;
178 case 58:
179 res->key_bits = 128;
180 break;
181 default:
182 /* We don't handle undefined Key Bits */
183 if (klen < 256) return CRYPT_INVALID_KEYSIZE;
184
185 res->key_bits = klen;
186 break;
187 }
188 } else if (LTC_ASN1_IS_TYPE(lenc->next->child, LTC_ASN1_OCTET_STRING)) {
189 res->iv = lenc->next->child;
190 /*
191 * If the rc2ParameterVersion field is omitted, the "effective key bits"
192 * defaults to 32.
193 */
194 res->key_bits = 32;
195 } else {
196 return CRYPT_INVALID_PACKET;
197 }
198 }
199
200 return CRYPT_OK;
201 }
202
203 #endif
204
205 /* ref: $Format:%D$ */
206 /* git commit: $Format:%H$ */
207 /* commit time: $Format:%ai$ */
+0
-60
src/ltc/misc/pk_get_oid.c less more
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8 #include "tomcrypt_private.h"
9
10 #ifdef LTC_DER
11 static const oid_st rsa_oid = {
12 { 1, 2, 840, 113549, 1, 1, 1 },
13 7,
14 };
15
16 static const oid_st dsa_oid = {
17 { 1, 2, 840, 10040, 4, 1 },
18 6,
19 };
20
21 static const oid_st ec_oid = {
22 { 1, 2, 840, 10045, 2, 1 },
23 6,
24 };
25
26 static const oid_st ec_primef = {
27 { 1, 2, 840, 10045, 1, 1 },
28 6,
29 };
30
31 /*
32 Returns the OID of the public key algorithm.
33 @return CRYPT_OK if valid
34 */
35 int pk_get_oid(int pk, oid_st *st)
36 {
37 switch (pk) {
38 case PKA_RSA:
39 XMEMCPY(st, &rsa_oid, sizeof(*st));
40 break;
41 case PKA_DSA:
42 XMEMCPY(st, &dsa_oid, sizeof(*st));
43 break;
44 case PKA_EC:
45 XMEMCPY(st, &ec_oid, sizeof(*st));
46 break;
47 case PKA_EC_PRIMEF:
48 XMEMCPY(st, &ec_primef, sizeof(*st));
49 break;
50 default:
51 return CRYPT_INVALID_ARG;
52 }
53 return CRYPT_OK;
54 }
55 #endif
56
57 /* ref: $Format:%D$ */
58 /* git commit: $Format:%H$ */
59 /* commit time: $Format:%ai$ */
+0
-82
src/ltc/misc/pk_oid_str.c less more
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 int pk_oid_str_to_num(const char *OID, unsigned long *oid, unsigned long *oidlen)
12 {
13 unsigned long i, j, limit;
14
15 LTC_ARGCHK(oid != NULL);
16 LTC_ARGCHK(oidlen != NULL);
17
18 limit = *oidlen;
19 *oidlen = 0; /* make sure that we return zero oidlen on error */
20 for (i = 0; i < limit; i++) oid[i] = 0;
21
22 if ((OID == NULL) || (strlen(OID) == 0)) return CRYPT_OK;
23
24 for (i = 0, j = 0; i < strlen(OID); i++) {
25 if (OID[i] == '.') {
26 if (++j >= limit) return CRYPT_ERROR;
27 }
28 else if ((OID[i] >= '0') && (OID[i] <= '9')) {
29 oid[j] = oid[j] * 10 + (OID[i] - '0');
30 }
31 else {
32 return CRYPT_ERROR;
33 }
34 }
35 if (j == 0) return CRYPT_ERROR;
36 *oidlen = j + 1;
37 return CRYPT_OK;
38 }
39
40 int pk_oid_num_to_str(const unsigned long *oid, unsigned long oidlen, char *OID, unsigned long *outlen)
41 {
42 int i;
43 unsigned long j, k;
44 char tmp[256] = { 0 };
45 unsigned long tmpsz = sizeof(tmp);
46
47 LTC_ARGCHK(oid != NULL);
48 LTC_ARGCHK(OID != NULL);
49 LTC_ARGCHK(outlen != NULL);
50
51 for (i = oidlen - 1, k = 0; i >= 0; i--) {
52 j = oid[i];
53 if (j == 0) {
54 tmp[k] = '0';
55 if (++k >= tmpsz) return CRYPT_ERROR;
56 }
57 else {
58 while (j > 0) {
59 tmp[k] = '0' + (j % 10);
60 if (++k >= tmpsz) return CRYPT_ERROR;
61 j /= 10;
62 }
63 }
64 if (i > 0) {
65 tmp[k] = '.';
66 if (++k >= tmpsz) return CRYPT_ERROR;
67 }
68 }
69 if (*outlen < k + 1) {
70 *outlen = k + 1;
71 return CRYPT_BUFFER_OVERFLOW;
72 }
73 for (j = 0; j < k; j++) OID[j] = tmp[k - j - 1];
74 OID[k] = '\0';
75 *outlen = k; /* the length without terminating NUL byte */
76 return CRYPT_OK;
77 }
78
79 /* ref: $Format:%D$ */
80 /* git commit: $Format:%H$ */
81 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_PKCS_12
12
13 int pkcs12_kdf( int hash_id,
14 const unsigned char *pw, unsigned long pwlen,
15 const unsigned char *salt, unsigned long saltlen,
16 unsigned int iterations, unsigned char purpose,
17 unsigned char *out, unsigned long outlen)
18 {
19 unsigned long u = hash_descriptor[hash_id].hashsize;
20 unsigned long v = hash_descriptor[hash_id].blocksize;
21 unsigned long c = (outlen + u - 1) / u;
22 unsigned long Slen = ((saltlen + v - 1) / v) * v;
23 unsigned long Plen = ((pwlen + v - 1) / v) * v;
24 unsigned long k = (Plen + Slen) / v;
25 unsigned long Alen, keylen = 0;
26 unsigned int tmp, i, j, n;
27 unsigned char ch;
28 unsigned char D[MAXBLOCKSIZE], A[MAXBLOCKSIZE], B[MAXBLOCKSIZE];
29 unsigned char *I, *key;
30 int err = CRYPT_ERROR;
31
32 LTC_ARGCHK(pw != NULL);
33 LTC_ARGCHK(salt != NULL);
34 LTC_ARGCHK(out != NULL);
35
36 key = XMALLOC(u * c);
37 I = XMALLOC(Plen + Slen);
38 if (key == NULL || I == NULL) goto DONE;
39 zeromem(key, u * c);
40
41 for (i = 0; i < v; i++) D[i] = purpose; /* D - diversifier */
42 for (i = 0; i < Slen; i++) I[i] = salt[i % saltlen];
43 for (i = 0; i < Plen; i++) I[Slen + i] = pw[i % pwlen]; /* I = Salt || Pass */
44
45 for (i = 0; i < c; i++) {
46 Alen = sizeof(A);
47 err = hash_memory_multi(hash_id, A, &Alen, D, v, I, Slen + Plen, NULL); /* A = HASH(D || I) */
48 if (err != CRYPT_OK) goto DONE;
49 for (j = 1; j < iterations; j++) {
50 err = hash_memory(hash_id, A, Alen, A, &Alen); /* A = HASH(A) */
51 if (err != CRYPT_OK) goto DONE;
52 }
53 /* fill buffer B with A */
54 for (j = 0; j < v; j++) B[j] = A[j % Alen];
55 /* B += 1 */
56 for (j = v; j > 0; j--) {
57 if (++B[j - 1] != 0) break;
58 }
59 /* I_n += B */
60 for (n = 0; n < k; n++) {
61 ch = 0;
62 for (j = v; j > 0; j--) {
63 tmp = I[n * v + j - 1] + B[j - 1] + ch;
64 ch = (unsigned char)((tmp >> 8) & 0xFF);
65 I[n * v + j - 1] = (unsigned char)(tmp & 0xFF);
66 }
67 }
68 /* store derived key block */
69 XMEMCPY(&key[keylen], A, Alen);
70 keylen += Alen;
71 }
72
73 XMEMCPY(out, key, outlen);
74 err = CRYPT_OK;
75 DONE:
76 if (I) {
77 zeromem(I, Plen + Slen);
78 XFREE(I);
79 }
80 if (key) {
81 zeromem(key, u * c);
82 XFREE(key);
83 }
84 return err;
85 }
86
87 #endif
88
89 /* ref: $Format:%D$ */
90 /* git commit: $Format:%H$ */
91 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_PKCS_12
12
13 int pkcs12_utf8_to_utf16(const unsigned char *in, unsigned long inlen,
14 unsigned char *out, unsigned long *outlen) {
15 unsigned long len = 0;
16 const unsigned char* in_end = in + inlen;
17 const ulong32 offset[6] = {
18 0x00000000UL, 0x00003080UL, 0x000E2080UL,
19 0x03C82080UL, 0xFA082080UL, 0x82082080UL
20 };
21 int err = CRYPT_ERROR;
22
23 LTC_ARGCHK(in != NULL);
24 LTC_ARGCHK(out != NULL);
25 LTC_ARGCHK(outlen != NULL);
26
27 while (in < in_end) {
28 ulong32 ch = 0;
29 unsigned short extra = 0; /* 0 */
30 if (*in >= 192) extra++; /* 1 */
31 if (*in >= 224) extra++; /* 2 */
32 if (*in >= 240) extra++; /* 3 */
33 if (*in >= 248) extra++; /* 4 */
34 if (*in >= 252) extra++; /* 5 */
35 if (in + extra >= in_end) goto ERROR;
36 switch (extra) {
37 case 5: ch += *in++; ch <<= 6;
38 /* FALLTHROUGH */
39 case 4: ch += *in++; ch <<= 6;
40 /* FALLTHROUGH */
41 case 3: ch += *in++; ch <<= 6;
42 /* FALLTHROUGH */
43 case 2: ch += *in++; ch <<= 6;
44 /* FALLTHROUGH */
45 case 1: ch += *in++; ch <<= 6;
46 /* FALLTHROUGH */
47 case 0: ch += *in++;
48 }
49 ch -= offset[extra];
50 if (ch > 0xFFFF) goto ERROR;
51 if (*outlen >= len + 2) {
52 out[len] = (unsigned short)((ch >> 8) & 0xFF);
53 out[len + 1] = (unsigned char)(ch & 0xFF);
54 }
55 len += 2;
56 }
57
58 err = len > *outlen ? CRYPT_BUFFER_OVERFLOW : CRYPT_OK;
59 *outlen = len;
60 ERROR:
61 return err;
62 }
63
64 #endif
65
66 /* ref: $Format:%D$ */
67 /* git commit: $Format:%H$ */
68 /* commit time: $Format:%ai$ */
108108 the output buffer (and how many bytes we have to copy) */
109109 outidx = block*hash_descriptor[hash_idx].hashsize;
110110 nb = hash_descriptor[hash_idx].hashsize;
111 if(outidx+nb > *outlen)
111 if(outidx+nb > *outlen) {
112112 nb = *outlen - outidx;
113 if(nb > 0)
113 }
114 if(nb > 0) {
114115 XMEMCPY(out+outidx, buf, nb);
116 }
115117
116118 block++;
117 if (!openssl_compat)
119 if (!openssl_compat) {
118120 break;
121 }
119122 }
120123 /* In strict mode, we always return the hashsize, in compat we filled it
121124 as much as was requested, so we leave it alone. */
122 if(!openssl_compat)
125 if(!openssl_compat) {
123126 *outlen = hash_descriptor[hash_idx].hashsize;
127 }
124128
125129 err = CRYPT_OK;
126130 LBL_ERR:
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8 #include "tomcrypt_private.h"
9 #include <stdarg.h>
10
11 /**
12 @file ssh_decode_sequence_multi.c
13 SSH data type representation as per RFC4251, Russ Williams
14 */
15
16 #ifdef LTC_SSH
17
18 /**
19 Decode a SSH sequence using a VA list
20 @param in Data to decode
21 @param inlen Length of buffer to decode
22 @remark <...> is of the form <type, data> (int, void*) except for string <type, data, size>
23 @return CRYPT_OK on success
24 */
25 int ssh_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...)
26 {
27 int err;
28 va_list args;
29 ssh_data_type type;
30 void *vdata;
31 unsigned char *cdata;
32 char *sdata;
33 ulong32 *u32data;
34 ulong64 *u64data;
35 unsigned long bufsize;
36 ulong32 size;
37
38 LTC_ARGCHK(in != NULL);
39
40 /* Decode values from buffer */
41 va_start(args, inlen);
42 while ((type = (ssh_data_type)va_arg(args, int)) != LTC_SSHDATA_EOL) {
43 /* Size of length field */
44 if (type == LTC_SSHDATA_STRING ||
45 type == LTC_SSHDATA_NAMELIST ||
46 type == LTC_SSHDATA_MPINT)
47 {
48 /* Check we'll not read too far */
49 if (inlen < 4) {
50 err = CRYPT_BUFFER_OVERFLOW;
51 goto error;
52 }
53 }
54
55 /* Calculate (or read) length of data */
56 size = 0xFFFFFFFFU;
57 switch (type) {
58 case LTC_SSHDATA_BYTE:
59 case LTC_SSHDATA_BOOLEAN:
60 size = 1;
61 break;
62 case LTC_SSHDATA_UINT32:
63 size = 4;
64 break;
65 case LTC_SSHDATA_UINT64:
66 size = 8;
67 break;
68 case LTC_SSHDATA_STRING:
69 case LTC_SSHDATA_NAMELIST:
70 case LTC_SSHDATA_MPINT:
71 LOAD32H(size, in);
72 in += 4;
73 inlen -= 4;
74 break;
75
76 case LTC_SSHDATA_EOL:
77 /* Should never get here */
78 err = CRYPT_INVALID_ARG;
79 goto error;
80 }
81
82 /* Check we'll not read too far */
83 if (inlen < size) {
84 err = CRYPT_BUFFER_OVERFLOW;
85 goto error;
86 } else {
87 inlen -= size;
88 }
89
90 /* Read data */
91 switch (type) {
92 case LTC_SSHDATA_BYTE:
93 cdata = va_arg(args, unsigned char*);
94 *cdata = *in++;
95 break;
96 case LTC_SSHDATA_BOOLEAN:
97 cdata = va_arg(args, unsigned char*);
98 /*
99 The value 0 represents FALSE, and the value 1 represents TRUE. All non-zero values MUST be
100 interpreted as TRUE; however, applications MUST NOT store values other than 0 and 1.
101 */
102 *cdata = (*in++)?1:0;
103 break;
104 case LTC_SSHDATA_UINT32:
105 u32data = va_arg(args, ulong32*);
106 LOAD32H(*u32data, in);
107 in += 4;
108 break;
109 case LTC_SSHDATA_UINT64:
110 u64data = va_arg(args, ulong64*);
111 LOAD64H(*u64data, in);
112 in += 8;
113 break;
114 case LTC_SSHDATA_STRING:
115 case LTC_SSHDATA_NAMELIST:
116 sdata = va_arg(args, char*);
117 bufsize = va_arg(args, unsigned long);
118 if (size >= bufsize) {
119 err = CRYPT_BUFFER_OVERFLOW;
120 goto error;
121 }
122 if (size > 0) {
123 XSTRNCPY(sdata, (const char *)in, size);
124 sdata[size] = '\0'; /* strncpy doesn't NUL-terminate */
125 } else {
126 *sdata = '\0';
127 }
128 in += size;
129 break;
130 case LTC_SSHDATA_MPINT:
131 vdata = va_arg(args, void*);
132 if (size == 0) {
133 if ((err = mp_set(vdata, 0)) != CRYPT_OK) { goto error; }
134 } else if ((in[0] & 0x80) != 0) {
135 /* Negative number - not supported */
136 err = CRYPT_INVALID_PACKET;
137 goto error;
138 } else {
139 if ((err = mp_read_unsigned_bin(vdata, (unsigned char *)in, size)) != CRYPT_OK) { goto error; }
140 }
141 in += size;
142 break;
143
144 case LTC_SSHDATA_EOL:
145 /* Should never get here */
146 err = CRYPT_INVALID_ARG;
147 goto error;
148 }
149 }
150 err = CRYPT_OK;
151
152 error:
153 va_end(args);
154 return err;
155 }
156
157 #endif
158
159 /* ref: $Format:%D$ */
160 /* git commit: $Format:%H$ */
161 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8 #include "tomcrypt_private.h"
9 #include <stdarg.h>
10
11 /**
12 @file ssh_encode_sequence_multi.c
13 SSH data type representation as per RFC4251, Russ Williams
14 */
15
16 #ifdef LTC_SSH
17
18 /**
19 Encode a SSH sequence using a VA list
20 @param out [out] Destination for data
21 @param outlen [in/out] Length of buffer and resulting length of output
22 @remark <...> is of the form <type, data> (int, void*)
23 @return CRYPT_OK on success
24 */
25 int ssh_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...)
26 {
27 int err;
28 va_list args;
29 ulong32 size;
30 ssh_data_type type;
31 void *vdata;
32 const char *sdata;
33 int idata;
34 ulong32 u32data;
35 ulong64 u64data;
36
37 LTC_ARGCHK(out != NULL);
38 LTC_ARGCHK(outlen != NULL);
39
40 /* Check values and calculate output size */
41 size = 0;
42 va_start(args, outlen);
43 while ((type = (ssh_data_type)va_arg(args, int)) != LTC_SSHDATA_EOL) {
44 switch (type) {
45 case LTC_SSHDATA_BYTE:
46 case LTC_SSHDATA_BOOLEAN: /* Both stored as 1 byte */
47 LTC_UNUSED_PARAM( va_arg(args, int) );
48 size++;
49 break;
50 case LTC_SSHDATA_UINT32:
51 LTC_UNUSED_PARAM( va_arg(args, ulong32) );
52 size += 4;
53 break;
54 case LTC_SSHDATA_UINT64:
55 LTC_UNUSED_PARAM( va_arg(args, ulong64) );
56 size += 8;
57 break;
58 case LTC_SSHDATA_STRING:
59 case LTC_SSHDATA_NAMELIST:
60 sdata = va_arg(args, char*);
61 size += 4;
62 size += strlen(sdata);
63 break;
64 case LTC_SSHDATA_MPINT:
65 vdata = va_arg(args, void*);
66 /* Calculate size */
67 size += 4;
68 if (mp_iszero(vdata) != LTC_MP_YES) {
69 size += mp_unsigned_bin_size(vdata);
70 if ((mp_count_bits(vdata) & 7) == 0) size++; /* Zero padding if high bit set */
71 }
72 break;
73
74 case LTC_SSHDATA_EOL: /* Should never get here */
75 err = CRYPT_INVALID_ARG;
76 goto error;
77 }
78 }
79 va_end(args);
80
81 /* Check we have sufficient space */
82 if (*outlen < size) {
83 *outlen = size;
84 err = CRYPT_BUFFER_OVERFLOW;
85 goto errornoargs;
86 }
87 *outlen = size;
88
89 /* Encode values into buffer */
90 va_start(args, outlen);
91 while ((type = (ssh_data_type)va_arg(args, int)) != LTC_SSHDATA_EOL) {
92 switch (type) {
93 case LTC_SSHDATA_BYTE:
94 idata = va_arg(args, int);
95
96 *out++ = (unsigned char)(idata & 255);
97 break;
98 case LTC_SSHDATA_BOOLEAN:
99 idata = va_arg(args, int);
100
101 /*
102 The value 0 represents FALSE, and the value 1 represents TRUE. All non-zero values MUST be
103 interpreted as TRUE; however, applications MUST NOT store values other than 0 and 1.
104 */
105 *out++ = (idata)?1:0;
106 break;
107 case LTC_SSHDATA_UINT32:
108 u32data = va_arg(args, ulong32);
109 STORE32H(u32data, out);
110 out += 4;
111 break;
112 case LTC_SSHDATA_UINT64:
113 u64data = va_arg(args, ulong64);
114 STORE64H(u64data, out);
115 out += 8;
116 break;
117 case LTC_SSHDATA_STRING:
118 case LTC_SSHDATA_NAMELIST:
119 sdata = va_arg(args, char*);
120 size = strlen(sdata);
121 STORE32H(size, out);
122 out += 4;
123 XSTRNCPY((char *)out, sdata, size);
124 out += size;
125 break;
126 case LTC_SSHDATA_MPINT:
127 vdata = va_arg(args, void*);
128 if (mp_iszero(vdata) == LTC_MP_YES) {
129 STORE32H(0, out);
130 out += 4;
131 } else {
132 size = mp_unsigned_bin_size(vdata);
133 if ((mp_count_bits(vdata) & 7) == 0) {
134 /* Zero padding if high bit set */
135 STORE32H(size+1, out);
136 out += 4;
137 *out++ = 0;
138 } else {
139 STORE32H(size, out);
140 out += 4;
141 }
142 if ((err = mp_to_unsigned_bin(vdata, out)) != CRYPT_OK) {
143 err = CRYPT_ERROR;
144 goto error;
145 }
146 out += size;
147 }
148 break;
149
150 case LTC_SSHDATA_EOL: /* Should never get here */
151 err = CRYPT_INVALID_ARG;
152 goto error;
153 }
154 }
155 err = CRYPT_OK;
156
157 error:
158 va_end(args);
159 errornoargs:
160 return err;
161 }
162
163 #endif
164
165 /* ref: $Format:%D$ */
166 /* git commit: $Format:%H$ */
167 /* commit time: $Format:%ai$ */
5757
5858 if (cipher_descriptor[cbc->cipher].accel_cbc_decrypt != NULL) {
5959 return cipher_descriptor[cbc->cipher].accel_cbc_decrypt(ct, pt, len / cbc->blocklen, cbc->IV, &cbc->key);
60 } else {
61 while (len) {
62 /* decrypt */
63 if ((err = cipher_descriptor[cbc->cipher].ecb_decrypt(ct, tmp, &cbc->key)) != CRYPT_OK) {
64 return err;
65 }
60 }
61 while (len) {
62 /* decrypt */
63 if ((err = cipher_descriptor[cbc->cipher].ecb_decrypt(ct, tmp, &cbc->key)) != CRYPT_OK) {
64 return err;
65 }
6666
67 /* xor IV against plaintext */
68 #if defined(LTC_FAST)
69 for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) {
70 tmpy = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) ^ *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)tmp + x));
71 *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)ct + x));
72 *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)pt + x)) = tmpy;
73 }
74 #else
75 for (x = 0; x < cbc->blocklen; x++) {
76 tmpy = tmp[x] ^ cbc->IV[x];
77 cbc->IV[x] = ct[x];
78 pt[x] = tmpy;
79 }
80 #endif
67 /* xor IV against plaintext */
68 #if defined(LTC_FAST)
69 for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) {
70 tmpy = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) ^ *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)tmp + x));
71 *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)ct + x));
72 *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)pt + x)) = tmpy;
73 }
74 #else
75 for (x = 0; x < cbc->blocklen; x++) {
76 tmpy = tmp[x] ^ cbc->IV[x];
77 cbc->IV[x] = ct[x];
78 pt[x] = tmpy;
79 }
80 #endif
8181
82 ct += cbc->blocklen;
83 pt += cbc->blocklen;
84 len -= cbc->blocklen;
85 }
82 ct += cbc->blocklen;
83 pt += cbc->blocklen;
84 len -= cbc->blocklen;
8685 }
8786 return CRYPT_OK;
8887 }
5151
5252 if (cipher_descriptor[cbc->cipher].accel_cbc_encrypt != NULL) {
5353 return cipher_descriptor[cbc->cipher].accel_cbc_encrypt(pt, ct, len / cbc->blocklen, cbc->IV, &cbc->key);
54 } else {
55 while (len) {
56 /* xor IV against plaintext */
57 #if defined(LTC_FAST)
58 for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) {
59 *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) ^= *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)pt + x));
60 }
61 #else
62 for (x = 0; x < cbc->blocklen; x++) {
63 cbc->IV[x] ^= pt[x];
64 }
65 #endif
54 }
55 while (len) {
56 /* xor IV against plaintext */
57 #if defined(LTC_FAST)
58 for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) {
59 *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) ^= *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)pt + x));
60 }
61 #else
62 for (x = 0; x < cbc->blocklen; x++) {
63 cbc->IV[x] ^= pt[x];
64 }
65 #endif
6666
67 /* encrypt */
68 if ((err = cipher_descriptor[cbc->cipher].ecb_encrypt(cbc->IV, ct, &cbc->key)) != CRYPT_OK) {
69 return err;
70 }
67 /* encrypt */
68 if ((err = cipher_descriptor[cbc->cipher].ecb_encrypt(cbc->IV, ct, &cbc->key)) != CRYPT_OK) {
69 return err;
70 }
7171
72 /* store IV [ciphertext] for a future block */
73 #if defined(LTC_FAST)
74 for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) {
75 *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)ct + x));
76 }
77 #else
78 for (x = 0; x < cbc->blocklen; x++) {
79 cbc->IV[x] = ct[x];
80 }
81 #endif
72 /* store IV [ciphertext] for a future block */
73 #if defined(LTC_FAST)
74 for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) {
75 *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)ct + x));
76 }
77 #else
78 for (x = 0; x < cbc->blocklen; x++) {
79 cbc->IV[x] = ct[x];
80 }
81 #endif
8282
83 ct += cbc->blocklen;
84 pt += cbc->blocklen;
85 len -= cbc->blocklen;
86 }
83 ct += cbc->blocklen;
84 pt += cbc->blocklen;
85 len -= cbc->blocklen;
8786 }
8887 return CRYPT_OK;
8988 }
4242 /* copy data */
4343 cfb->cipher = cipher;
4444 cfb->blocklen = cipher_descriptor[cipher].block_length;
45 for (x = 0; x < cfb->blocklen; x++)
45 for (x = 0; x < cfb->blocklen; x++) {
4646 cfb->IV[x] = IV[x];
47 }
4748
4849 /* init the cipher */
4950 if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &cfb->key)) != CRYPT_OK) {
3838 /* check for accel */
3939 if (cipher_descriptor[ecb->cipher].accel_ecb_decrypt != NULL) {
4040 return cipher_descriptor[ecb->cipher].accel_ecb_decrypt(ct, pt, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key);
41 } else {
42 while (len) {
43 if ((err = cipher_descriptor[ecb->cipher].ecb_decrypt(ct, pt, &ecb->key)) != CRYPT_OK) {
44 return err;
45 }
46 pt += cipher_descriptor[ecb->cipher].block_length;
47 ct += cipher_descriptor[ecb->cipher].block_length;
48 len -= cipher_descriptor[ecb->cipher].block_length;
41 }
42 while (len) {
43 if ((err = cipher_descriptor[ecb->cipher].ecb_decrypt(ct, pt, &ecb->key)) != CRYPT_OK) {
44 return err;
4945 }
46 pt += cipher_descriptor[ecb->cipher].block_length;
47 ct += cipher_descriptor[ecb->cipher].block_length;
48 len -= cipher_descriptor[ecb->cipher].block_length;
5049 }
5150 return CRYPT_OK;
5251 }
3838 /* check for accel */
3939 if (cipher_descriptor[ecb->cipher].accel_ecb_encrypt != NULL) {
4040 return cipher_descriptor[ecb->cipher].accel_ecb_encrypt(pt, ct, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key);
41 } else {
42 while (len) {
43 if ((err = cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key)) != CRYPT_OK) {
44 return err;
45 }
46 pt += cipher_descriptor[ecb->cipher].block_length;
47 ct += cipher_descriptor[ecb->cipher].block_length;
48 len -= cipher_descriptor[ecb->cipher].block_length;
41 }
42 while (len) {
43 if ((err = cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key)) != CRYPT_OK) {
44 return err;
4945 }
46 pt += cipher_descriptor[ecb->cipher].block_length;
47 ct += cipher_descriptor[ecb->cipher].block_length;
48 len -= cipher_descriptor[ecb->cipher].block_length;
5049 }
5150 return CRYPT_OK;
5251 }
4040 real_len &= 0x7F;
4141 if (real_len == 0) {
4242 return CRYPT_PK_ASN1_ERROR;
43 } else if (real_len > sizeof(decoded_len)) {
43 }
44 if (real_len > sizeof(decoded_len)) {
4445 return CRYPT_OVERFLOW;
45 } else if (real_len > (*inlen - 1)) {
46 }
47 if (real_len > (*inlen - 1)) {
4648 return CRYPT_BUFFER_OVERFLOW;
4749 }
4850 decoded_len = 0;
4040 }
4141 *outlen = 1;
4242 return CRYPT_OK;
43 } else {
44 if (id->klass < LTC_ASN1_CL_UNIVERSAL || id->klass > LTC_ASN1_CL_PRIVATE) {
45 return CRYPT_INVALID_ARG;
46 }
47 if (id->pc < LTC_ASN1_PC_PRIMITIVE || id->pc > LTC_ASN1_PC_CONSTRUCTED) {
48 return CRYPT_INVALID_ARG;
49 }
50 if (id->tag > (ULONG_MAX >> (8 + 7))) {
51 return CRYPT_INVALID_ARG;
52 }
43 }
44 if (id->klass < LTC_ASN1_CL_UNIVERSAL || id->klass > LTC_ASN1_CL_PRIVATE) {
45 return CRYPT_INVALID_ARG;
46 }
47 if (id->pc < LTC_ASN1_PC_PRIMITIVE || id->pc > LTC_ASN1_PC_CONSTRUCTED) {
48 return CRYPT_INVALID_ARG;
49 }
50 if (id->tag > (ULONG_MAX >> (8 + 7))) {
51 return CRYPT_INVALID_ARG;
5352 }
5453
5554 if (out != NULL) {
111111 /* now is it Z or . */
112112 if (buf[x] == 'Z') {
113113 return CRYPT_OK;
114 } else if (buf[x] == '.') {
114 }
115 if (buf[x] == '.') {
115116 x++;
116117 while (buf[x] >= '0' && buf[x] <= '9') {
117118 unsigned fs = out->fs;
126127 /* now is it Z, +, - */
127128 if (buf[x] == 'Z') {
128129 return CRYPT_OK;
129 } else if (buf[x] == '+' || buf[x] == '-') {
130 }
131 if (buf[x] == '+' || buf[x] == '-') {
130132 out->off_dir = (buf[x++] == '+') ? 0 : 1;
131133 DECODE_V(out->off_hh, 24);
132134 DECODE_V(out->off_mm, 60);
133135 return CRYPT_OK;
134 } else {
135 return CRYPT_INVALID_PACKET;
136136 }
137 return CRYPT_INVALID_PACKET;
137138 }
138139
139140 #endif
7070 y++;
7171 } else {
7272 if (y == 0) {
73 words[0] = t / 40;
74 words[1] = t % 40;
73 if (t <= 79) {
74 words[0] = t / 40;
75 words[1] = t % 40;
76 } else {
77 words[0] = 2;
78 words[1] = t - 80;
79 }
7580 y = 2;
7681 } else {
7782 words[y++] = t;
4747 return CRYPT_INVALID_ARG;
4848 }
4949
50 /* word1 = 0,1,2,3 and word2 0..39 */
51 if (words[0] > 3 || (words[0] < 2 && words[1] > 39)) {
50 /* word1 = 0,1,2 and word2 0..39 */
51 if (words[0] > 2 || (words[0] < 2 && words[1] > 39)) {
5252 return CRYPT_INVALID_ARG;
5353 }
5454
3232 if (r == 0) {
3333 /* their order in the original list now determines the position */
3434 return A->used - B->used;
35 } else {
36 return r;
3735 }
36 return r;
3837 }
3938
4039 /*
9494 /* now is it Z, +, - or 0-9 */
9595 if (buf[x] == 'Z') {
9696 return CRYPT_OK;
97 } else if (buf[x] == '+' || buf[x] == '-') {
97 }
98 if (buf[x] == '+' || buf[x] == '-') {
9899 out->off_dir = (buf[x++] == '+') ? 0 : 1;
99100 DECODE_V(out->off_hh, 24);
100101 DECODE_V(out->off_mm, 60);
107108 /* now is it Z, +, - */
108109 if (buf[x] == 'Z') {
109110 return CRYPT_OK;
110 } else if (buf[x] == '+' || buf[x] == '-') {
111 }
112 if (buf[x] == '+' || buf[x] == '-') {
111113 out->off_dir = (buf[x++] == '+') ? 0 : 1;
112114 DECODE_V(out->off_hh, 24);
113115 DECODE_V(out->off_mm, 60);
114116 return CRYPT_OK;
115 } else {
116 return CRYPT_INVALID_PACKET;
117117 }
118 return CRYPT_INVALID_PACKET;
118119 }
119120
120121 #endif
2222 {
2323 if (c <= 0x7F) {
2424 return 1;
25 } else if (c <= 0x7FF) {
25 }
26 if (c <= 0x7FF) {
2627 return 2;
28 }
2729 #if LTC_WCHAR_MAX == 0xFFFF
28 } else {
30 return 3;
31 #else
32 if (c <= 0xFFFF) {
2933 return 3;
3034 }
31 #else
32 } else if (c <= 0xFFFF) {
33 return 3;
34 } else {
35 return 4;
36 }
35 return 4;
3736 #endif
3837 }
3938
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8 #include "tomcrypt_private.h"
9
10 #ifdef LTC_DER
11
12 typedef struct {
13 enum ltc_oid_id id;
14 const char* oid;
15 } oid_table_entry;
16
17 static const oid_table_entry pka_oids[] = {
18 { PKA_RSA, "1.2.840.113549.1.1.1" },
19 { PKA_DSA, "1.2.840.10040.4.1" },
20 { PKA_EC, "1.2.840.10045.2.1" },
21 { PKA_EC_PRIMEF, "1.2.840.10045.1.1" },
22 };
23
24 /*
25 Returns the OID requested.
26 @return CRYPT_OK if valid
27 */
28 int pk_get_oid(enum ltc_oid_id id, const char **st)
29 {
30 unsigned int i;
31 LTC_ARGCHK(st != NULL);
32 for (i = 0; i < sizeof(pka_oids)/sizeof(pka_oids[0]); ++i) {
33 if (pka_oids[i].id == id) {
34 *st = pka_oids[i].oid;
35 return CRYPT_OK;
36 }
37 }
38 return CRYPT_INVALID_ARG;
39 }
40 #endif
41
42 /* ref: $Format:%D$ */
43 /* git commit: $Format:%H$ */
44 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8 #include "tomcrypt_private.h"
9
10 #ifdef LTC_DER
11
12 /*
13 Compare an OID string to an array of `unsigned long`.
14 @return CRYPT_OK if equal
15 */
16 int pk_oid_cmp_with_ulong(const char *o1, const unsigned long *o2, unsigned long o2size)
17 {
18 unsigned long i;
19 char tmp[256] = { 0 };
20 int err;
21
22 if (o1 == NULL || o2 == NULL) return CRYPT_ERROR;
23
24 i = sizeof(tmp);
25 if ((err = pk_oid_num_to_str(o2, o2size, tmp, &i)) != CRYPT_OK) {
26 return err;
27 }
28
29 if (XSTRCMP(o1, tmp) != 0) {
30 return CRYPT_PK_INVALID_TYPE;
31 }
32
33 return CRYPT_OK;
34 }
35
36 /*
37 Compare an OID string to an OID element decoded from ASN.1.
38 @return CRYPT_OK if equal
39 */
40 int pk_oid_cmp_with_asn1(const char *o1, const ltc_asn1_list *o2)
41 {
42 if (o1 == NULL || o2 == NULL) return CRYPT_ERROR;
43
44 if (o2->type != LTC_ASN1_OBJECT_IDENTIFIER) return CRYPT_INVALID_ARG;
45
46 return pk_oid_cmp_with_ulong(o1, o2->data, o2->size);
47 }
48
49 #endif
50
51 /* ref: $Format:%D$ */
52 /* git commit: $Format:%H$ */
53 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 int pk_oid_str_to_num(const char *OID, unsigned long *oid, unsigned long *oidlen)
12 {
13 unsigned long i, j, limit, OID_len, oid_j;
14
15 LTC_ARGCHK(oidlen != NULL);
16
17 limit = *oidlen;
18 *oidlen = 0; /* make sure that we return zero oidlen on error */
19 for (i = 0; i < limit; i++) oid[i] = 0;
20
21 if (OID == NULL) return CRYPT_OK;
22
23 OID_len = strlen(OID);
24 if (OID_len == 0) return CRYPT_OK;
25
26 for (i = 0, j = 0; i < OID_len; i++) {
27 if (OID[i] == '.') {
28 if (++j >= limit) continue;
29 }
30 else if ((OID[i] >= '0') && (OID[i] <= '9')) {
31 if ((j >= limit) || (oid == NULL)) continue;
32 oid_j = oid[j];
33 oid[j] = oid[j] * 10 + (OID[i] - '0');
34 if (oid[j] < oid_j) return CRYPT_OVERFLOW;
35 }
36 else {
37 return CRYPT_ERROR;
38 }
39 }
40 if (j == 0) return CRYPT_ERROR;
41 if (j >= limit) {
42 *oidlen = j;
43 return CRYPT_BUFFER_OVERFLOW;
44 }
45 *oidlen = j + 1;
46 return CRYPT_OK;
47 }
48
49 int pk_oid_num_to_str(const unsigned long *oid, unsigned long oidlen, char *OID, unsigned long *outlen)
50 {
51 int i;
52 unsigned long j, k;
53 char tmp[256] = { 0 };
54
55 LTC_ARGCHK(oid != NULL);
56 LTC_ARGCHK(OID != NULL);
57 LTC_ARGCHK(outlen != NULL);
58
59 for (i = oidlen - 1, k = 0; i >= 0; i--) {
60 j = oid[i];
61 if (j == 0) {
62 tmp[k] = '0';
63 if (++k >= sizeof(tmp)) return CRYPT_ERROR;
64 }
65 else {
66 while (j > 0) {
67 tmp[k] = '0' + (j % 10);
68 if (++k >= sizeof(tmp)) return CRYPT_ERROR;
69 j /= 10;
70 }
71 }
72 if (i > 0) {
73 tmp[k] = '.';
74 if (++k >= sizeof(tmp)) return CRYPT_ERROR;
75 }
76 }
77 if (*outlen < k + 1) {
78 *outlen = k + 1;
79 return CRYPT_BUFFER_OVERFLOW;
80 }
81 for (j = 0; j < k; j++) OID[j] = tmp[k - j - 1];
82 OID[k] = '\0';
83 *outlen = k; /* the length without terminating NUL byte */
84 return CRYPT_OK;
85 }
86
87 /* ref: $Format:%D$ */
88 /* git commit: $Format:%H$ */
89 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8 #include "tomcrypt_private.h"
9
10 #ifdef LTC_PKCS_8
11
12 /**
13 PKCS#8 decrypt if necessary & flexi-decode
14
15 @param in Pointer to the ASN.1 encoded input data
16 @param inlen Length of the input data
17 @param pwd Pointer to the password that was used when encrypting
18 @param pwdlen Length of the password
19 @param decoded_list Pointer to a pointer for the flexi-decoded list
20 @return CRYPT_OK on success
21 */
22 int pkcs8_decode_flexi(const unsigned char *in, unsigned long inlen,
23 const void *pwd, unsigned long pwdlen,
24 ltc_asn1_list **decoded_list)
25 {
26 unsigned long len = inlen;
27 unsigned long dec_size;
28 unsigned char *dec_data = NULL;
29 ltc_asn1_list *l = NULL;
30 int err;
31
32 LTC_ARGCHK(in != NULL);
33 LTC_ARGCHK(decoded_list != NULL);
34
35 *decoded_list = NULL;
36 if ((err = der_decode_sequence_flexi(in, &len, &l)) == CRYPT_OK) {
37 /* the following "if" detects whether it is encrypted or not */
38 /* PKCS8 Setup
39 * 0:d=0 hl=4 l= 380 cons: SEQUENCE
40 * 4:d=1 hl=2 l= 78 cons: SEQUENCE
41 * 6:d=2 hl=2 l= 9 prim: OBJECT :OID indicating PBES1 or PBES2 (== *lalgoid)
42 * 17:d=2 hl=2 l= 65 cons: SEQUENCE
43 * Stuff in between is dependent on whether it's PBES1 or PBES2
44 * 84:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data)
45 */
46 if (l->type == LTC_ASN1_SEQUENCE &&
47 LTC_ASN1_IS_TYPE(l->child, LTC_ASN1_SEQUENCE) &&
48 LTC_ASN1_IS_TYPE(l->child->child, LTC_ASN1_OBJECT_IDENTIFIER) &&
49 LTC_ASN1_IS_TYPE(l->child->child->next, LTC_ASN1_SEQUENCE) &&
50 LTC_ASN1_IS_TYPE(l->child->next, LTC_ASN1_OCTET_STRING)) {
51 ltc_asn1_list *lalgoid = l->child->child;
52 pbes_arg pbes;
53
54 XMEMSET(&pbes, 0, sizeof(pbes));
55
56 if (pbes1_extract(lalgoid, &pbes) == CRYPT_OK) {
57 /* Successfully extracted PBES1 parameters */
58 } else if (pbes2_extract(lalgoid, &pbes) == CRYPT_OK) {
59 /* Successfully extracted PBES2 parameters */
60 } else {
61 /* unsupported encryption */
62 err = CRYPT_INVALID_PACKET;
63 goto LBL_DONE;
64 }
65
66 pbes.enc_data = l->child->next;
67 pbes.pwd = pwd;
68 pbes.pwdlen = pwdlen;
69
70 dec_size = pbes.enc_data->size;
71 if ((dec_data = XMALLOC(dec_size)) == NULL) {
72 err = CRYPT_MEM;
73 goto LBL_DONE;
74 }
75
76 if ((err = pbes_decrypt(&pbes, dec_data, &dec_size)) != CRYPT_OK) goto LBL_DONE;
77
78 der_free_sequence_flexi(l);
79 l = NULL;
80 err = der_decode_sequence_flexi(dec_data, &dec_size, &l);
81 if (err != CRYPT_OK) goto LBL_DONE;
82 *decoded_list = l;
83 }
84 else {
85 /* not encrypted */
86 err = CRYPT_OK;
87 *decoded_list = l;
88 }
89 /* Set l to NULL so it won't be free'd */
90 l = NULL;
91 }
92
93 LBL_DONE:
94 if (l) der_free_sequence_flexi(l);
95 if (dec_data) {
96 zeromem(dec_data, dec_size);
97 XFREE(dec_data);
98 }
99 return err;
100 }
101
102 #endif
103
104 /* ref: $Format:%D$ */
105 /* git commit: $Format:%H$ */
106 /* commit time: $Format:%ai$ */
4242 {
4343 int err;
4444 unsigned long len, alg_id_num;
45 oid_st oid;
45 const char* oid;
4646 unsigned char *tmpbuf;
4747 unsigned long tmpoid[16];
4848 ltc_asn1_list alg_id[2];
9191 *parameters_len = alg_id[1].size;
9292 }
9393
94 if ((alg_id[0].size != oid.OIDlen) ||
95 XMEMCMP(oid.OID, alg_id[0].data, oid.OIDlen * sizeof(oid.OID[0])) != 0) {
96 /* OID mismatch */
97 err = CRYPT_PK_INVALID_TYPE;
98 goto LBL_ERR;
94 if ((err = pk_oid_cmp_with_asn1(oid, &alg_id[0])) != CRYPT_OK) {
95 /* OID mismatch */
96 goto LBL_ERR;
9997 }
10098
10199 len = subject_pubkey[1].size/8;
4242 {
4343 int err;
4444 ltc_asn1_list alg_id[2];
45 oid_st oid;
45 const char *OID;
46 unsigned long oid[16], oidlen;
4647
4748 LTC_ARGCHK(out != NULL);
4849 LTC_ARGCHK(outlen != NULL);
4950
50 err = pk_get_oid(algorithm, &oid);
51 if (err != CRYPT_OK) {
51 if ((err = pk_get_oid(algorithm, &OID)) != CRYPT_OK) {
5252 return err;
5353 }
5454
55 LTC_SET_ASN1(alg_id, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid.OID, oid.OIDlen);
55 oidlen = sizeof(oid)/sizeof(oid[0]);
56 if ((err = pk_oid_str_to_num(OID, oid, &oidlen)) != CRYPT_OK) {
57 return err;
58 }
59
60 LTC_SET_ASN1(alg_id, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, oidlen);
5661 LTC_SET_ASN1(alg_id, 1, parameters_type, parameters, parameters_len);
5762
5863 return der_encode_sequence_multi(out, outlen,
1818 if (groupsize <= 0) {
1919 return 0;
2020 }
21 else if (groupsize <= 192) {
21 if (groupsize <= 192) {
2222 return 30; /* 1536-bit => key size 240-bit */
2323 }
24 else if (groupsize <= 256) {
24 if (groupsize <= 256) {
2525 return 40; /* 2048-bit => key size 320-bit */
2626 }
27 else if (groupsize <= 384) {
27 if (groupsize <= 384) {
2828 return 52; /* 3072-bit => key size 416-bit */
2929 }
30 else if (groupsize <= 512) {
30 if (groupsize <= 512) {
3131 return 60; /* 4096-bit => key size 480-bit */
3232 }
33 else if (groupsize <= 768) {
33 if (groupsize <= 768) {
3434 return 67; /* 6144-bit => key size 536-bit */
3535 }
36 else if (groupsize <= 1024) {
36 if (groupsize <= 1024) {
3737 return 77; /* 8192-bit => key size 616-bit */
3838 }
39 else {
40 return 0;
41 }
39 return 0;
4240 }
4341
4442 int dh_generate_key(prng_state *prng, int wprng, dh_key *key)
2525 int dsa_export(unsigned char *out, unsigned long *outlen, int type, const dsa_key *key)
2626 {
2727 unsigned long zero=0;
28 unsigned char flags[1];
2829 int err, std;
2930
3031 LTC_ARGCHK(out != NULL);
3435 std = type & PK_STD;
3536 type &= ~PK_STD;
3637
37 /* can we store the static header? */
3838 if (type == PK_PRIVATE && key->type != PK_PRIVATE) {
3939 return CRYPT_PK_TYPE_MISMATCH;
40 }
41
42 if (type != PK_PUBLIC && type != PK_PRIVATE) {
43 return CRYPT_INVALID_ARG;
4440 }
4541
4642 if (type == PK_PRIVATE) {
5450 LTC_ASN1_INTEGER, 1UL, key->x,
5551 LTC_ASN1_EOL, 0UL, NULL);
5652 }
57 else {
58 unsigned char flags[1];
59 flags[0] = 1;
60 return der_encode_sequence_multi(out, outlen,
53 flags[0] = 1;
54 return der_encode_sequence_multi(out, outlen,
6155 LTC_ASN1_BIT_STRING, 1UL, flags,
6256 LTC_ASN1_INTEGER, 1UL, key->g,
6357 LTC_ASN1_INTEGER, 1UL, key->p,
6559 LTC_ASN1_INTEGER, 1UL, key->y,
6660 LTC_ASN1_INTEGER, 1UL, key->x,
6761 LTC_ASN1_EOL, 0UL, NULL);
68 }
69 } else {
62 }
63
64 if (type == PK_PUBLIC) {
7065 if (std) {
7166 unsigned long tmplen = (unsigned long)(mp_count_bits(key->y) / 8) + 8;
7267 unsigned char* tmp = XMALLOC(tmplen);
9388 XFREE(tmp);
9489 return err;
9590 }
96 else {
97 unsigned char flags[1];
98 flags[0] = 0;
99 return der_encode_sequence_multi(out, outlen,
91 flags[0] = 0;
92 return der_encode_sequence_multi(out, outlen,
10093 LTC_ASN1_BIT_STRING, 1UL, flags,
10194 LTC_ASN1_INTEGER, 1UL, key->g,
10295 LTC_ASN1_INTEGER, 1UL, key->p,
10396 LTC_ASN1_INTEGER, 1UL, key->q,
10497 LTC_ASN1_INTEGER, 1UL, key->y,
10598 LTC_ASN1_EOL, 0UL, NULL);
106 }
10799 }
100
101 return CRYPT_INVALID_ARG;
108102 }
109103
110104 #endif
4040 /* initialize key->dp */
4141 if (cu == NULL) {
4242 /* this case works only for uncompressed public keys */
43 if ((err = ecc_set_dp_by_size((inlen-1)>>1, key)) != CRYPT_OK) { return err; }
43 if ((err = ecc_set_curve_by_size((inlen-1)>>1, key)) != CRYPT_OK) { return err; }
4444 }
4545 else {
4646 /* this one works for both compressed / uncompressed pubkeys */
47 if ((err = ecc_set_dp(cu, key)) != CRYPT_OK) { return err; }
47 if ((err = ecc_set_curve(cu, key)) != CRYPT_OK) { return err; }
4848 }
4949
5050 /* load public key */
8484 }
8585
8686 /* import ECC key from packet */
87 if ((err = ecc_copy_dp(key, &pubkey)) != CRYPT_OK) { goto LBL_ERR; }
87 if ((err = ecc_copy_curve(key, &pubkey)) != CRYPT_OK) { goto LBL_ERR; }
8888 if ((err = ecc_set_key(decode[1].data, decode[1].size, PK_PUBLIC, &pubkey)) != CRYPT_OK) { goto LBL_ERR; }
8989
9090 /* make shared key */
5151 }
5252
5353 /* make a random key and export the public copy */
54 if ((err = ecc_copy_dp(key, &pubkey)) != CRYPT_OK) { return err; }
54 if ((err = ecc_copy_curve(key, &pubkey)) != CRYPT_OK) { return err; }
5555 if ((err = ecc_generate_key(prng, wprng, &pubkey)) != CRYPT_OK) { return err; }
5656
5757 pub_expt = XMALLOC(ECC_BUF_SIZE);
2626 unsigned char bin_a[256], bin_b[256], bin_k[256], bin_g[512], bin_xy[512];
2727 unsigned long len_a, len_b, len_k, len_g, len_xy;
2828 unsigned long cofactor, one = 1;
29 oid_st oid;
29 const char *OID;
30 unsigned long oid[16], oidlen;
3031 ltc_asn1_list seq_fieldid[2], seq_curve[2], seq_ecparams[6], seq_priv[4], pub_xy, ecparams;
3132 int flag_oid = type & PK_CURVEOID ? 1 : 0;
3233 int flag_com = type & PK_COMPRESSED ? 1 : 0;
7172 cofactor = key->dp.cofactor;
7273
7374 /* we support only prime-field EC */
74 if ((err = pk_get_oid(PKA_EC_PRIMEF, &oid)) != CRYPT_OK) { goto error; }
75 if ((err = pk_get_oid(PKA_EC_PRIMEF, &OID)) != CRYPT_OK) { goto error; }
7576
7677 if (flag_oid) {
7778 /* http://tools.ietf.org/html/rfc5912
101102 }
102103 */
103104
105 oidlen = sizeof(oid)/sizeof(oid[0]);
106 if ((err = pk_oid_str_to_num(OID, oid, &oidlen)) != CRYPT_OK) {
107 goto error;
108 }
109
104110 /* FieldID SEQUENCE */
105 LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid.OID, oid.OIDlen);
111 LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, oidlen);
106112 LTC_SET_ASN1(seq_fieldid, 1, LTC_ASN1_INTEGER, prime, 1UL);
107113
108114 /* Curve SEQUENCE */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_MECC
12
13 static const struct {
14 const char *OID;
15 const char *names[6];
16 } _curve_names[] = {
17 #ifdef LTC_ECC_SECP112R1
18 {
19 "1.3.132.0.6", { "SECP112R1", "ECC-112", NULL }
20 },
21 #endif
22 #ifdef LTC_ECC_SECP112R2
23 {
24 "1.3.132.0.7", { "SECP112R2", NULL }
25 },
26 #endif
27 #ifdef LTC_ECC_SECP128R1
28 {
29 "1.3.132.0.28", { "SECP128R1", "ECC-128", NULL }
30 },
31 #endif
32 #ifdef LTC_ECC_SECP128R2
33 {
34 "1.3.132.0.29", { "SECP128R2", NULL }
35 },
36 #endif
37 #ifdef LTC_ECC_SECP160R1
38 {
39 "1.3.132.0.8", { "SECP160R1", "ECC-160", NULL }
40 },
41 #endif
42 #ifdef LTC_ECC_SECP160R2
43 {
44 "1.3.132.0.30", { "SECP160R2", NULL }
45 },
46 #endif
47 #ifdef LTC_ECC_SECP160K1
48 {
49 "1.3.132.0.9", { "SECP160K1", NULL }
50 },
51 #endif
52 #ifdef LTC_ECC_SECP192R1
53 {
54 "1.2.840.10045.3.1.1", { "SECP192R1", "NISTP192", "PRIME192V1", "ECC-192", "P-192", NULL }
55 },
56 #endif
57 #ifdef LTC_ECC_PRIME192V2
58 {
59 "1.2.840.10045.3.1.2", { "PRIME192V2", NULL }
60 },
61 #endif
62 #ifdef LTC_ECC_PRIME192V3
63 {
64 "1.2.840.10045.3.1.3", { "PRIME192V3", NULL }
65 },
66 #endif
67 #ifdef LTC_ECC_SECP192K1
68 {
69 "1.3.132.0.31", { "SECP192K1", NULL }
70 },
71 #endif
72 #ifdef LTC_ECC_SECP224R1
73 {
74 "1.3.132.0.33", { "SECP224R1", "NISTP224", "ECC-224", "P-224", NULL }
75 },
76 #endif
77 #ifdef LTC_ECC_SECP224K1
78 {
79 "1.3.132.0.32", { "SECP224K1", NULL }
80 },
81 #endif
82 #ifdef LTC_ECC_SECP256R1
83 {
84 "1.2.840.10045.3.1.7", { "SECP256R1", "NISTP256", "PRIME256V1", "ECC-256", "P-256", NULL }
85 },
86 #endif
87 #ifdef LTC_ECC_SECP256K1
88 {
89 "1.3.132.0.10", { "SECP256K1", NULL }
90 },
91 #endif
92 #ifdef LTC_ECC_SECP384R1
93 {
94 "1.3.132.0.34", { "SECP384R1", "NISTP384", "ECC-384", "P-384", NULL }
95 },
96 #endif
97 #ifdef LTC_ECC_SECP521R1
98 {
99 "1.3.132.0.35", { "SECP521R1", "NISTP521", "ECC-521", "P-521", NULL }
100 },
101 #endif
102 #ifdef LTC_ECC_PRIME239V1
103 {
104 "1.2.840.10045.3.1.4", { "PRIME239V1", NULL }
105 },
106 #endif
107 #ifdef LTC_ECC_PRIME239V2
108 {
109 "1.2.840.10045.3.1.5", { "PRIME239V2", NULL }
110 },
111 #endif
112 #ifdef LTC_ECC_PRIME239V3
113 {
114 "1.2.840.10045.3.1.6", { "PRIME239V3", NULL }
115 },
116 #endif
117 #ifdef LTC_ECC_BRAINPOOLP160R1
118 {
119 "1.3.36.3.3.2.8.1.1.1", { "BRAINPOOLP160R1", NULL }
120 },
121 #endif
122 #ifdef LTC_ECC_BRAINPOOLP192R1
123 {
124 "1.3.36.3.3.2.8.1.1.3", { "BRAINPOOLP192R1", NULL }
125 },
126 #endif
127 #ifdef LTC_ECC_BRAINPOOLP224R1
128 {
129 "1.3.36.3.3.2.8.1.1.5", { "BRAINPOOLP224R1", NULL }
130 },
131 #endif
132 #ifdef LTC_ECC_BRAINPOOLP256R1
133 {
134 "1.3.36.3.3.2.8.1.1.7", { "BRAINPOOLP256R1", NULL }
135 },
136 #endif
137 #ifdef LTC_ECC_BRAINPOOLP320R1
138 {
139 "1.3.36.3.3.2.8.1.1.9", { "BRAINPOOLP320R1", NULL }
140 },
141 #endif
142 #ifdef LTC_ECC_BRAINPOOLP384R1
143 {
144 "1.3.36.3.3.2.8.1.1.11", { "BRAINPOOLP384R1", NULL }
145 },
146 #endif
147 #ifdef LTC_ECC_BRAINPOOLP512R1
148 {
149 "1.3.36.3.3.2.8.1.1.13", { "BRAINPOOLP512R1", NULL }
150 },
151 #endif
152 #ifdef LTC_ECC_BRAINPOOLP160T1
153 {
154 "1.3.36.3.3.2.8.1.1.2", { "BRAINPOOLP160T1", NULL }
155 },
156 #endif
157 #ifdef LTC_ECC_BRAINPOOLP192T1
158 {
159 "1.3.36.3.3.2.8.1.1.4", { "BRAINPOOLP192T1", NULL }
160 },
161 #endif
162 #ifdef LTC_ECC_BRAINPOOLP224T1
163 {
164 "1.3.36.3.3.2.8.1.1.6", { "BRAINPOOLP224T1", NULL }
165 },
166 #endif
167 #ifdef LTC_ECC_BRAINPOOLP256T1
168 {
169 "1.3.36.3.3.2.8.1.1.8", { "BRAINPOOLP256T1", NULL }
170 },
171 #endif
172 #ifdef LTC_ECC_BRAINPOOLP320T1
173 {
174 "1.3.36.3.3.2.8.1.1.10", { "BRAINPOOLP320T1", NULL }
175 },
176 #endif
177 #ifdef LTC_ECC_BRAINPOOLP384T1
178 {
179 "1.3.36.3.3.2.8.1.1.12", { "BRAINPOOLP384T1", NULL }
180 },
181 #endif
182 #ifdef LTC_ECC_BRAINPOOLP512T1
183 {
184 "1.3.36.3.3.2.8.1.1.14", { "BRAINPOOLP512T1", NULL }
185 },
186 #endif
187 {
188 NULL, { NULL }
189 }
190 };
191
192 /* case-insensitive match + ignore '-', '_', ' ' */
193 static int _name_match(const char *left, const char *right)
194 {
195 char lc_r, lc_l;
196
197 while ((*left != '\0') && (*right != '\0')) {
198 while ((*left == ' ') || (*left == '-') || (*left == '_')) left++;
199 while ((*right == ' ') || (*right == '-') || (*right == '_')) right++;
200 if (*left == '\0' || *right == '\0') break;
201 lc_r = *right;
202 lc_l = *left;
203 if ((lc_r >= 'A') && (lc_r <= 'Z')) lc_r += 32;
204 if ((lc_l >= 'A') && (lc_l <= 'Z')) lc_l += 32;
205 if (lc_l != lc_r) return 0;
206 left++;
207 right++;
208 }
209
210 if ((*left == '\0') && (*right == '\0')) return 1;
211 return 0;
212 }
213
214 int ecc_find_curve(const char *name_or_oid, const ltc_ecc_curve **cu)
215 {
216 int i, j;
217 const char *OID = NULL;
218
219 LTC_ARGCHK(cu != NULL);
220 LTC_ARGCHK(name_or_oid != NULL);
221
222 *cu = NULL;
223
224 for (i = 0; _curve_names[i].OID != NULL && !OID; i++) {
225 if (XSTRCMP(_curve_names[i].OID, name_or_oid) == 0) {
226 OID = _curve_names[i].OID;
227 }
228 for (j = 0; _curve_names[i].names[j] != NULL && !OID; j++) {
229 if (_name_match(_curve_names[i].names[j], name_or_oid)) {
230 OID = _curve_names[i].OID;
231 }
232 }
233 }
234
235 if (OID != NULL) {
236 for (i = 0; ltc_ecc_curves[i].prime != NULL; i++) {
237 if (XSTRCMP(ltc_ecc_curves[i].OID, OID) == 0) {
238 *cu = &ltc_ecc_curves[i];
239 return CRYPT_OK;
240 }
241 }
242 }
243
244 return CRYPT_INVALID_ARG; /* not found */
245 }
246
247 #endif
248
249 /* ref: $Format:%D$ */
250 /* git commit: $Format:%H$ */
251 /* commit time: $Format:%ai$ */
+0
-254
src/ltc/pk/ecc/ecc_get_curve.c less more
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_MECC
12
13 static const struct {
14 const char *OID;
15 const char *names[6];
16 } _curve_names[] = {
17 #ifdef LTC_ECC_SECP112R1
18 {
19 "1.3.132.0.6", { "SECP112R1", "ECC-112", NULL }
20 },
21 #endif
22 #ifdef LTC_ECC_SECP112R2
23 {
24 "1.3.132.0.7", { "SECP112R2", NULL }
25 },
26 #endif
27 #ifdef LTC_ECC_SECP128R1
28 {
29 "1.3.132.0.28", { "SECP128R1", "ECC-128", NULL }
30 },
31 #endif
32 #ifdef LTC_ECC_SECP128R2
33 {
34 "1.3.132.0.29", { "SECP128R2", NULL }
35 },
36 #endif
37 #ifdef LTC_ECC_SECP160R1
38 {
39 "1.3.132.0.8", { "SECP160R1", "ECC-160", NULL }
40 },
41 #endif
42 #ifdef LTC_ECC_SECP160R2
43 {
44 "1.3.132.0.30", { "SECP160R2", NULL }
45 },
46 #endif
47 #ifdef LTC_ECC_SECP160K1
48 {
49 "1.3.132.0.9", { "SECP160K1", NULL }
50 },
51 #endif
52 #ifdef LTC_ECC_SECP192R1
53 {
54 "1.2.840.10045.3.1.1", { "SECP192R1", "NISTP192", "PRIME192V1", "ECC-192", "P-192", NULL }
55 },
56 #endif
57 #ifdef LTC_ECC_PRIME192V2
58 {
59 "1.2.840.10045.3.1.2", { "PRIME192V2", NULL }
60 },
61 #endif
62 #ifdef LTC_ECC_PRIME192V3
63 {
64 "1.2.840.10045.3.1.3", { "PRIME192V3", NULL }
65 },
66 #endif
67 #ifdef LTC_ECC_SECP192K1
68 {
69 "1.3.132.0.31", { "SECP192K1", NULL }
70 },
71 #endif
72 #ifdef LTC_ECC_SECP224R1
73 {
74 "1.3.132.0.33", { "SECP224R1", "NISTP224", "ECC-224", "P-224", NULL }
75 },
76 #endif
77 #ifdef LTC_ECC_SECP224K1
78 {
79 "1.3.132.0.32", { "SECP224K1", NULL }
80 },
81 #endif
82 #ifdef LTC_ECC_SECP256R1
83 {
84 "1.2.840.10045.3.1.7", { "SECP256R1", "NISTP256", "PRIME256V1", "ECC-256", "P-256", NULL }
85 },
86 #endif
87 #ifdef LTC_ECC_SECP256K1
88 {
89 "1.3.132.0.10", { "SECP256K1", NULL }
90 },
91 #endif
92 #ifdef LTC_ECC_SECP384R1
93 {
94 "1.3.132.0.34", { "SECP384R1", "NISTP384", "ECC-384", "P-384", NULL }
95 },
96 #endif
97 #ifdef LTC_ECC_SECP521R1
98 {
99 "1.3.132.0.35", { "SECP521R1", "NISTP521", "ECC-521", "P-521", NULL }
100 },
101 #endif
102 #ifdef LTC_ECC_PRIME239V1
103 {
104 "1.2.840.10045.3.1.4", { "PRIME239V1", NULL }
105 },
106 #endif
107 #ifdef LTC_ECC_PRIME239V2
108 {
109 "1.2.840.10045.3.1.5", { "PRIME239V2", NULL }
110 },
111 #endif
112 #ifdef LTC_ECC_PRIME239V3
113 {
114 "1.2.840.10045.3.1.6", { "PRIME239V3", NULL }
115 },
116 #endif
117 #ifdef LTC_ECC_BRAINPOOLP160R1
118 {
119 "1.3.36.3.3.2.8.1.1.1", { "BRAINPOOLP160R1", NULL }
120 },
121 #endif
122 #ifdef LTC_ECC_BRAINPOOLP192R1
123 {
124 "1.3.36.3.3.2.8.1.1.3", { "BRAINPOOLP192R1", NULL }
125 },
126 #endif
127 #ifdef LTC_ECC_BRAINPOOLP224R1
128 {
129 "1.3.36.3.3.2.8.1.1.5", { "BRAINPOOLP224R1", NULL }
130 },
131 #endif
132 #ifdef LTC_ECC_BRAINPOOLP256R1
133 {
134 "1.3.36.3.3.2.8.1.1.7", { "BRAINPOOLP256R1", NULL }
135 },
136 #endif
137 #ifdef LTC_ECC_BRAINPOOLP320R1
138 {
139 "1.3.36.3.3.2.8.1.1.9", { "BRAINPOOLP320R1", NULL }
140 },
141 #endif
142 #ifdef LTC_ECC_BRAINPOOLP384R1
143 {
144 "1.3.36.3.3.2.8.1.1.11", { "BRAINPOOLP384R1", NULL }
145 },
146 #endif
147 #ifdef LTC_ECC_BRAINPOOLP512R1
148 {
149 "1.3.36.3.3.2.8.1.1.13", { "BRAINPOOLP512R1", NULL }
150 },
151 #endif
152 #ifdef LTC_ECC_BRAINPOOLP160T1
153 {
154 "1.3.36.3.3.2.8.1.1.2", { "BRAINPOOLP160T1", NULL }
155 },
156 #endif
157 #ifdef LTC_ECC_BRAINPOOLP192T1
158 {
159 "1.3.36.3.3.2.8.1.1.4", { "BRAINPOOLP192T1", NULL }
160 },
161 #endif
162 #ifdef LTC_ECC_BRAINPOOLP224T1
163 {
164 "1.3.36.3.3.2.8.1.1.6", { "BRAINPOOLP224T1", NULL }
165 },
166 #endif
167 #ifdef LTC_ECC_BRAINPOOLP256T1
168 {
169 "1.3.36.3.3.2.8.1.1.8", { "BRAINPOOLP256T1", NULL }
170 },
171 #endif
172 #ifdef LTC_ECC_BRAINPOOLP320T1
173 {
174 "1.3.36.3.3.2.8.1.1.10", { "BRAINPOOLP320T1", NULL }
175 },
176 #endif
177 #ifdef LTC_ECC_BRAINPOOLP384T1
178 {
179 "1.3.36.3.3.2.8.1.1.12", { "BRAINPOOLP384T1", NULL }
180 },
181 #endif
182 #ifdef LTC_ECC_BRAINPOOLP512T1
183 {
184 "1.3.36.3.3.2.8.1.1.14", { "BRAINPOOLP512T1", NULL }
185 },
186 #endif
187 {
188 NULL, { NULL }
189 }
190 };
191
192 /* case-insensitive match + ignore '-', '_', ' ' */
193 static int _name_match(const char *left, const char *right)
194 {
195 char lc_r, lc_l;
196
197 while ((*left != '\0') && (*right != '\0')) {
198 while ((*left == ' ') || (*left == '-') || (*left == '_')) left++;
199 while ((*right == ' ') || (*right == '-') || (*right == '_')) right++;
200 if (*left == '\0' || *right == '\0') break;
201 lc_r = *right;
202 lc_l = *left;
203 if ((lc_r >= 'A') && (lc_r <= 'Z')) lc_r += 32;
204 if ((lc_l >= 'A') && (lc_l <= 'Z')) lc_l += 32;
205 if (lc_l != lc_r) return 0;
206 left++;
207 right++;
208 }
209
210 if ((*left == '\0') && (*right == '\0'))
211 return 1;
212 else
213 return 0;
214 }
215
216 int ecc_get_curve(const char *name_or_oid, const ltc_ecc_curve **cu)
217 {
218 int i, j;
219 const char *OID = NULL;
220
221 LTC_ARGCHK(cu != NULL);
222 LTC_ARGCHK(name_or_oid != NULL);
223
224 *cu = NULL;
225
226 for (i = 0; _curve_names[i].OID != NULL && !OID; i++) {
227 if (XSTRCMP(_curve_names[i].OID, name_or_oid) == 0) {
228 OID = _curve_names[i].OID;
229 }
230 for (j = 0; _curve_names[i].names[j] != NULL && !OID; j++) {
231 if (_name_match(_curve_names[i].names[j], name_or_oid)) {
232 OID = _curve_names[i].OID;
233 }
234 }
235 }
236
237 if (OID != NULL) {
238 for (i = 0; ltc_ecc_curves[i].prime != NULL; i++) {
239 if (XSTRCMP(ltc_ecc_curves[i].OID, OID) == 0) {
240 *cu = &ltc_ecc_curves[i];
241 return CRYPT_OK;
242 }
243 }
244 }
245
246 return CRYPT_INVALID_ARG; /* not found */
247 }
248
249 #endif
250
251 /* ref: $Format:%D$ */
252 /* git commit: $Format:%H$ */
253 /* commit time: $Format:%ai$ */
5555
5656 /* allocate & initialize the key */
5757 if (cu == NULL) {
58 if ((err = ecc_set_dp_by_size(key_size, key)) != CRYPT_OK) { goto done; }
58 if ((err = ecc_set_curve_by_size(key_size, key)) != CRYPT_OK) { goto done; }
5959 } else {
60 if ((err = ecc_set_dp(cu, key)) != CRYPT_OK) { goto done; }
60 if ((err = ecc_set_curve(cu, key)) != CRYPT_OK) { goto done; }
6161 }
6262
6363 if (flags[0] == 1) {
1010
1111 #ifdef LTC_MECC
1212
13 int ecc_import_openssl(const unsigned char *in, unsigned long inlen, ecc_key *key)
13 static int _ecc_import_private_with_oid(const unsigned char *in, unsigned long inlen, ecc_key *key)
1414 {
15 void *prime, *order, *a, *b, *gx, *gy;
16 ltc_asn1_list seq_fieldid[2], seq_curve[3], seq_ecparams[6], seq_priv[4], custom[2];
17 unsigned char bin_a[ECC_MAXSIZE], bin_b[ECC_MAXSIZE], bin_k[ECC_MAXSIZE];
18 unsigned char bin_g[2*ECC_MAXSIZE+1], bin_xy[2*ECC_MAXSIZE+2], bin_seed[128];
19 unsigned long len_a, len_b, len_k, len_g, len_xy, len_oid, len;
20 unsigned long cofactor = 0, ecver = 0, pkver = 0, tmpoid[16], curveoid[16];
15 ltc_asn1_list seq_priv[4], custom[2];
16 unsigned char bin_xy[2*ECC_MAXSIZE+2], bin_k[ECC_MAXSIZE];
17 unsigned long len, pkver = 0, curveoid[16];
2118 char OID[256];
2219 const ltc_ecc_curve *curve;
2320 int err;
2421
25 if ((err = mp_init_multi(&prime, &order, &a, &b, &gx, &gy, NULL)) != CRYPT_OK) {
26 return err;
27 }
28
29 /* ### 1. try to load public key - no curve parameters just curve OID */
30
31 len_xy = sizeof(bin_xy);
32 len_oid = 16;
33 err = x509_decode_subject_public_key_info(in, inlen, PKA_EC, bin_xy, &len_xy,
34 LTC_ASN1_OBJECT_IDENTIFIER, (void *)curveoid, &len_oid);
35 if (err == CRYPT_OK) {
36 /* load curve parameters for given curve OID */
37 len = sizeof(OID);
38 if ((err = pk_oid_num_to_str(curveoid, len_oid, OID, &len)) != CRYPT_OK) { goto error; }
39 if ((err = ecc_get_curve(OID, &curve)) != CRYPT_OK) { goto error; }
40 if ((err = ecc_set_dp(curve, key)) != CRYPT_OK) { goto error; }
41 /* load public key */
42 if ((err = ecc_set_key(bin_xy, len_xy, PK_PUBLIC, key)) != CRYPT_OK) { goto error; }
43 goto success;
44 }
45
46 /* ### 2. try to load public key - curve parameters included */
47
48 /* ECParameters SEQUENCE */
49 LTC_SET_ASN1(seq_ecparams, 0, LTC_ASN1_SHORT_INTEGER, &ecver, 1UL);
50 LTC_SET_ASN1(seq_ecparams, 1, LTC_ASN1_SEQUENCE, seq_fieldid, 2UL);
51 LTC_SET_ASN1(seq_ecparams, 2, LTC_ASN1_SEQUENCE, seq_curve, 3UL);
52 LTC_SET_ASN1(seq_ecparams, 3, LTC_ASN1_OCTET_STRING, bin_g, (unsigned long)2*ECC_MAXSIZE+1);
53 LTC_SET_ASN1(seq_ecparams, 4, LTC_ASN1_INTEGER, order, 1UL);
54 LTC_SET_ASN1(seq_ecparams, 5, LTC_ASN1_SHORT_INTEGER, &cofactor, 1UL);
55 seq_ecparams[5].optional = 1;
56 /* FieldID SEQUENCE */
57 LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, tmpoid, 16UL);
58 LTC_SET_ASN1(seq_fieldid, 1, LTC_ASN1_INTEGER, prime, 1UL);
59 /* Curve SEQUENCE */
60 LTC_SET_ASN1(seq_curve, 0, LTC_ASN1_OCTET_STRING, bin_a, (unsigned long)ECC_MAXSIZE);
61 LTC_SET_ASN1(seq_curve, 1, LTC_ASN1_OCTET_STRING, bin_b, (unsigned long)ECC_MAXSIZE);
62 LTC_SET_ASN1(seq_curve, 2, LTC_ASN1_RAW_BIT_STRING, bin_seed, (unsigned long)8*128);
63 seq_curve[2].optional = 1;
64 /* try to load public key */
65 len_xy = sizeof(bin_xy);
66 len = 6;
67 err = x509_decode_subject_public_key_info(in, inlen, PKA_EC, bin_xy, &len_xy, LTC_ASN1_SEQUENCE, seq_ecparams, &len);
68
69 if (err == CRYPT_OK) {
70 len_a = seq_curve[0].size;
71 len_b = seq_curve[1].size;
72 len_g = seq_ecparams[3].size;
73 /* create bignums */
74 if ((err = mp_read_unsigned_bin(a, bin_a, len_a)) != CRYPT_OK) { goto error; }
75 if ((err = mp_read_unsigned_bin(b, bin_b, len_b)) != CRYPT_OK) { goto error; }
76 if ((err = ltc_ecc_import_point(bin_g, len_g, prime, a, b, gx, gy)) != CRYPT_OK) { goto error; }
77 /* load curve parameters */
78 if ((err = ecc_set_dp_from_mpis(a, b, prime, order, gx, gy, cofactor, key)) != CRYPT_OK) { goto error; }
79 /* load public key */
80 if ((err = ecc_set_key(bin_xy, len_xy, PK_PUBLIC, key)) != CRYPT_OK) { goto error; }
81 goto success;
82 }
83
84 /* ### 3. try to load private key - no curve parameters just curve OID */
22 /* ### try to load private key - no curve parameters just curve OID */
8523
8624 /* ECPrivateKey SEQUENCE */
8725 LTC_SET_ASN1(custom, 0, LTC_ASN1_OBJECT_IDENTIFIER, curveoid, 16UL);
88 LTC_SET_ASN1(custom, 1, LTC_ASN1_RAW_BIT_STRING, bin_xy, (unsigned long)8*(2*ECC_MAXSIZE+2));
26 LTC_SET_ASN1(custom, 1, LTC_ASN1_RAW_BIT_STRING, bin_xy, 8UL*sizeof(bin_xy));
8927 LTC_SET_ASN1(seq_priv, 0, LTC_ASN1_SHORT_INTEGER, &pkver, 1UL);
90 LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, (unsigned long)ECC_MAXSIZE);
28 LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, sizeof(bin_k));
9129 LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 2, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0, custom); /* context specific 0 */
9230 LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 3, LTC_ASN1_CL_CONTEXT_SPECIFIC, 1, custom + 1); /* context specific 1 */
9331
9735 /* load curve parameters for given curve OID */
9836 len = sizeof(OID);
9937 if ((err = pk_oid_num_to_str(curveoid, custom[0].size, OID, &len)) != CRYPT_OK) { goto error; }
100 if ((err = ecc_get_curve(OID, &curve)) != CRYPT_OK) { goto error; }
101 if ((err = ecc_set_dp(curve, key)) != CRYPT_OK) { goto error; }
38 if ((err = ecc_find_curve(OID, &curve)) != CRYPT_OK) { goto error; }
39 if ((err = ecc_set_curve(curve, key)) != CRYPT_OK) { goto error; }
10240 /* load private+public key */
103 if ((err = ecc_set_key(bin_k, seq_priv[1].size, PK_PRIVATE, key)) != CRYPT_OK) { goto error; }
104 goto success;
41 err = ecc_set_key(bin_k, seq_priv[1].size, PK_PRIVATE, key);
42 }
43 error:
44 return err;
45 }
46
47 static int _ecc_import_private_with_curve(const unsigned char *in, unsigned long inlen, ecc_key *key)
48 {
49 void *prime, *order, *a, *b, *gx, *gy;
50 ltc_asn1_list seq_fieldid[2], seq_curve[3], seq_ecparams[6], seq_priv[4], custom[2];
51 unsigned char bin_a[ECC_MAXSIZE], bin_b[ECC_MAXSIZE], bin_k[ECC_MAXSIZE];
52 unsigned char bin_g[2*ECC_MAXSIZE+1], bin_xy[2*ECC_MAXSIZE+2], bin_seed[128];
53 unsigned long len_a, len_b, len_k, len_g;
54 unsigned long cofactor = 0, ecver = 0, pkver = 0, tmpoid[16];
55 int err;
56
57 if ((err = mp_init_multi(&prime, &order, &a, &b, &gx, &gy, NULL)) != CRYPT_OK) {
58 return err;
10559 }
10660
107 /* ### 4. try to load private key - curve parameters included */
61 /* ### try to load private key - curve parameters included */
10862
10963 /* ECPrivateKey SEQUENCE */
11064 LTC_SET_ASN1(custom, 0, LTC_ASN1_SEQUENCE, seq_ecparams, 6UL);
111 LTC_SET_ASN1(custom, 1, LTC_ASN1_RAW_BIT_STRING, bin_xy, (unsigned long)8*(2*ECC_MAXSIZE+2));
65 LTC_SET_ASN1(custom, 1, LTC_ASN1_RAW_BIT_STRING, bin_xy, 8UL*sizeof(bin_xy));
11266 LTC_SET_ASN1(seq_priv, 0, LTC_ASN1_SHORT_INTEGER, &pkver, 1UL);
113 LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, (unsigned long)ECC_MAXSIZE);
67 LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, sizeof(bin_k));
11468 LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 2, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0, custom); /* context specific 0 */
11569 LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 3, LTC_ASN1_CL_CONTEXT_SPECIFIC, 1, custom + 1); /* context specific 1 */
11670 /* ECParameters SEQUENCE */
11771 LTC_SET_ASN1(seq_ecparams, 0, LTC_ASN1_SHORT_INTEGER, &ecver, 1UL);
11872 LTC_SET_ASN1(seq_ecparams, 1, LTC_ASN1_SEQUENCE, seq_fieldid, 2UL);
11973 LTC_SET_ASN1(seq_ecparams, 2, LTC_ASN1_SEQUENCE, seq_curve, 3UL);
120 LTC_SET_ASN1(seq_ecparams, 3, LTC_ASN1_OCTET_STRING, bin_g, (unsigned long)2*ECC_MAXSIZE+1);
74 LTC_SET_ASN1(seq_ecparams, 3, LTC_ASN1_OCTET_STRING, bin_g, sizeof(bin_g));
12175 LTC_SET_ASN1(seq_ecparams, 4, LTC_ASN1_INTEGER, order, 1UL);
12276 LTC_SET_ASN1(seq_ecparams, 5, LTC_ASN1_SHORT_INTEGER, &cofactor, 1UL);
12377 seq_ecparams[5].optional = 1;
12579 LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, tmpoid, 16UL);
12680 LTC_SET_ASN1(seq_fieldid, 1, LTC_ASN1_INTEGER, prime, 1UL);
12781 /* Curve SEQUENCE */
128 LTC_SET_ASN1(seq_curve, 0, LTC_ASN1_OCTET_STRING, bin_a, (unsigned long)ECC_MAXSIZE);
129 LTC_SET_ASN1(seq_curve, 1, LTC_ASN1_OCTET_STRING, bin_b, (unsigned long)ECC_MAXSIZE);
130 LTC_SET_ASN1(seq_curve, 2, LTC_ASN1_RAW_BIT_STRING, bin_seed, (unsigned long)8*128);
82 LTC_SET_ASN1(seq_curve, 0, LTC_ASN1_OCTET_STRING, bin_a, sizeof(bin_a));
83 LTC_SET_ASN1(seq_curve, 1, LTC_ASN1_OCTET_STRING, bin_b, sizeof(bin_b));
84 LTC_SET_ASN1(seq_curve, 2, LTC_ASN1_RAW_BIT_STRING, bin_seed, 8UL*sizeof(bin_seed));
13185 seq_curve[2].optional = 1;
13286 /* try to load private key */
13387 err = der_decode_sequence(in, inlen, seq_priv, 4);
13488 if (err == CRYPT_OK) {
135 len_xy = custom[1].size;
13689 len_k = seq_priv[1].size;
13790 len_a = seq_curve[0].size;
13891 len_b = seq_curve[1].size;
14295 if ((err = mp_read_unsigned_bin(b, bin_b, len_b)) != CRYPT_OK) { goto error; }
14396 if ((err = ltc_ecc_import_point(bin_g, len_g, prime, a, b, gx, gy)) != CRYPT_OK) { goto error; }
14497 /* load curve parameters */
145 if ((err = ecc_set_dp_from_mpis(a, b, prime, order, gx, gy, cofactor, key)) != CRYPT_OK) { goto error; }
98 if ((err = ecc_set_curve_from_mpis(a, b, prime, order, gx, gy, cofactor, key)) != CRYPT_OK) { goto error; }
14699 /* load private+public key */
147 if ((err = ecc_set_key(bin_k, len_k, PK_PRIVATE, key)) != CRYPT_OK) { goto error; }
100 err = ecc_set_key(bin_k, len_k, PK_PRIVATE, key);
101 }
102 error:
103 mp_clear_multi(prime, order, a, b, gx, gy, NULL);
104 return err;
105 }
106
107 int ecc_import_openssl(const unsigned char *in, unsigned long inlen, ecc_key *key)
108 {
109 int err;
110
111 if ((err = ecc_import_subject_public_key_info(in, inlen, key)) == CRYPT_OK) {
148112 goto success;
149113 }
150114
151 /* ### 5. all attempts failed */
152 goto error;
115 if ((err = _ecc_import_private_with_oid(in, inlen, key)) == CRYPT_OK) {
116 goto success;
117 }
118
119 err = _ecc_import_private_with_curve(in, inlen, key);
153120
154121 success:
155 err = CRYPT_OK;
156 error:
157 mp_clear_multi(prime, order, a, b, gx, gy, NULL);
158122 return err;
159123 }
160124
1010
1111 #ifdef LTC_MECC
1212
13 enum algorithm_oid {
14 PBE_MD2_DES, /* 0 */
15 PBE_MD2_RC2,
16 PBE_MD5_DES,
17 PBE_MD5_RC2,
18 PBE_SHA1_DES,
19 PBE_SHA1_RC2, /* 5 */
20 PBES2,
21 PBKDF2,
22 DES_CBC,
23 RC2_CBC,
24 DES_EDE3_CBC, /* 10 */
25 HMAC_WITH_SHA1,
26 HMAC_WITH_SHA224,
27 HMAC_WITH_SHA256,
28 HMAC_WITH_SHA384,
29 HMAC_WITH_SHA512, /* 15 */
30 PBE_SHA1_3DES
31 };
13 typedef struct {
14 ltc_asn1_type t;
15 ltc_asn1_list **pp;
16 } der_flexi_check;
3217
33 static const oid_st oid_list[] = {
34 { { 1,2,840,113549,1,5,1 }, 7 }, /* [0] http://www.oid-info.com/get/1.2.840.113549.1.5.1 pbeWithMD2AndDES-CBC */
35 { { 1,2,840,113549,1,5,4 }, 7 }, /* [1] http://www.oid-info.com/get/1.2.840.113549.1.5.4 pbeWithMD2AndRC2-CBC */
36 { { 1,2,840,113549,1,5,3 }, 7 }, /* [2] http://www.oid-info.com/get/1.2.840.113549.1.5.3 pbeWithMD5AndDES-CBC */
37 { { 1,2,840,113549,1,5,6 }, 7 }, /* [3] http://www.oid-info.com/get/1.2.840.113549.1.5.6 pbeWithMD5AndRC2-CBC */
38 { { 1,2,840,113549,1,5,10 }, 7 }, /* [4] http://www.oid-info.com/get/1.2.840.113549.1.5.10 pbeWithSHA1AndDES-CBC */
39 { { 1,2,840,113549,1,5,11 }, 7 }, /* [5] http://www.oid-info.com/get/1.2.840.113549.1.5.11 pbeWithSHA1AndRC2-CBC */
40 { { 1,2,840,113549,1,5,13 }, 7 }, /* [6] http://www.oid-info.com/get/1.2.840.113549.1.5.13 pbes2 */
41 { { 1,2,840,113549,1,5,12 }, 7 }, /* [7] http://www.oid-info.com/get/1.2.840.113549.1.5.12 pBKDF2 */
42 { { 1,3,14,3,2,7 }, 6 }, /* [8] http://www.oid-info.com/get/1.3.14.3.2.7 desCBC */
43 { { 1,2,840,113549,3,2 }, 6 }, /* [9] http://www.oid-info.com/get/1.2.840.113549.3.2 rc2CBC */
44 { { 1,2,840,113549,3,7 }, 6 }, /* [10] http://www.oid-info.com/get/1.2.840.113549.3.7 des-EDE3-CBC */
45 { { 1,2,840,113549,2,7 }, 6 }, /* [11] http://www.oid-info.com/get/1.2.840.113549.2.7 hmacWithSHA1 */
46 { { 1,2,840,113549,2,8 }, 6 }, /* [12] http://www.oid-info.com/get/1.2.840.113549.2.8 hmacWithSHA224 */
47 { { 1,2,840,113549,2,9 }, 6 }, /* [13] http://www.oid-info.com/get/1.2.840.113549.2.9 hmacWithSHA256 */
48 { { 1,2,840,113549,2,10 }, 6 }, /* [14] http://www.oid-info.com/get/1.2.840.113549.2.10 hmacWithSHA384 */
49 { { 1,2,840,113549,2,11 }, 6 }, /* [15] http://www.oid-info.com/get/1.2.840.113549.2.11 hmacWithSHA512 */
50 { { 1,2,840,113549,1,12,1,3 }, 8 }, /* [16] http://www.oid-info.com/get/1.2.840.113549.1.12.1.3 pbeWithSHAAnd3-KeyTripleDES-CBC */
51 { { 0 }, 0 },
52 };
18 #define LTC_SET_DER_FLEXI_CHECK(list, index, Type, P) \
19 do { \
20 int LTC_SDFC_temp##__LINE__ = (index); \
21 list[LTC_SDFC_temp##__LINE__].t = Type; \
22 list[LTC_SDFC_temp##__LINE__].pp = P; \
23 } while (0)
5324
54 static int _simple_utf8_to_utf16(const unsigned char *in, unsigned long inlen,
55 unsigned char *out, unsigned long *outlen) {
56 unsigned long len = 0;
57 const unsigned char* in_end = in + inlen;
58 const ulong32 offset[6] = {
59 0x00000000UL, 0x00003080UL, 0x000E2080UL,
60 0x03C82080UL, 0xFA082080UL, 0x82082080UL
61 };
62 int err = CRYPT_ERROR;
63
64 while (in < in_end) {
65 ulong32 ch = 0;
66 unsigned short extra = 0; /* 0 */
67 if (*in >= 192) extra++; /* 1 */
68 if (*in >= 224) extra++; /* 2 */
69 if (*in >= 240) extra++; /* 3 */
70 if (*in >= 248) extra++; /* 4 */
71 if (*in >= 252) extra++; /* 5 */
72 if (in + extra >= in_end) goto ERROR;
73 switch (extra) {
74 case 5: ch += *in++; ch <<= 6;
75 case 4: ch += *in++; ch <<= 6;
76 case 3: ch += *in++; ch <<= 6;
77 case 2: ch += *in++; ch <<= 6;
78 case 1: ch += *in++; ch <<= 6;
79 case 0: ch += *in++;
25 static int _der_flexi_sequence_cmp(const ltc_asn1_list *flexi, der_flexi_check *check)
26 {
27 const ltc_asn1_list *cur;
28 if (flexi->type != LTC_ASN1_SEQUENCE) {
29 return CRYPT_INVALID_PACKET;
30 }
31 cur = flexi->child;
32 while(check->t != LTC_ASN1_EOL) {
33 if (!LTC_ASN1_IS_TYPE(cur, check->t)) {
34 return CRYPT_INVALID_PACKET;
8035 }
81 ch -= offset[extra];
82 if (ch > 0xFFFF) goto ERROR;
83 if (*outlen >= len + 2) {
84 out[len] = (unsigned short)((ch >> 8) & 0xFF);
85 out[len + 1] = (unsigned char)(ch & 0xFF);
86 }
87 len += 2;
36 if (check->pp != NULL) *check->pp = (ltc_asn1_list*)cur;
37 cur = cur->next;
38 check++;
8839 }
89
90 err = len > *outlen ? CRYPT_BUFFER_OVERFLOW : CRYPT_OK;
91 *outlen = len;
92 ERROR:
93 return err;
94 }
95
96 static int _kdf_pkcs12(int hash_id, const unsigned char *pw, unsigned long pwlen,
97 const unsigned char *salt, unsigned long saltlen,
98 unsigned int iterations, unsigned char purpose,
99 unsigned char *out, unsigned long outlen)
100 {
101 unsigned long u = hash_descriptor[hash_id].hashsize;
102 unsigned long v = hash_descriptor[hash_id].blocksize;
103 unsigned long c = (outlen + u - 1) / u;
104 unsigned long Slen = ((saltlen + v - 1) / v) * v;
105 unsigned long Plen = ((pwlen + v - 1) / v) * v;
106 unsigned long k = (Plen + Slen) / v;
107 unsigned long Alen, keylen = 0;
108 unsigned int tmp, i, j, n;
109 unsigned char ch;
110 unsigned char D[MAXBLOCKSIZE], A[MAXBLOCKSIZE], B[MAXBLOCKSIZE];
111 unsigned char *I = NULL, *key = NULL;
112 int err = CRYPT_ERROR;
113
114 key = XMALLOC(u * c);
115 I = XMALLOC(Plen + Slen);
116 if (key == NULL || I == NULL) goto DONE;
117 zeromem(key, u * c);
118
119 for (i = 0; i < v; i++) D[i] = purpose; /* D - diversifier */
120 for (i = 0; i < Slen; i++) I[i] = salt[i % saltlen];
121 for (i = 0; i < Plen; i++) I[Slen + i] = pw[i % pwlen]; /* I = Salt || Pass */
122
123 for (i = 0; i < c; i++) {
124 Alen = u; /* hash size */
125 err = hash_memory_multi(hash_id, A, &Alen, D, v, I, Slen + Plen, NULL); /* A = HASH(D || I) */
126 if (err != CRYPT_OK) goto DONE;
127 for (j = 1; j < iterations; j++) {
128 err = hash_memory(hash_id, A, Alen, A, &Alen); /* A = HASH(A) */
129 if (err != CRYPT_OK) goto DONE;
130 }
131 /* fill buffer B with A */
132 for (j = 0; j < v; j++) B[j] = A[j % Alen];
133 /* B += 1 */
134 for (j = v; j > 0; j--) {
135 if (++B[j - 1] != 0) break;
136 }
137 /* I_n += B */
138 for (n = 0; n < k; n++) {
139 ch = 0;
140 for (j = v; j > 0; j--) {
141 tmp = I[n * v + j - 1] + B[j - 1] + ch;
142 ch = (unsigned char)((tmp >> 8) & 0xFF);
143 I[n * v + j - 1] = (unsigned char)(tmp & 0xFF);
144 }
145 }
146 /* store derived key block */
147 for (j = 0; j < Alen; j++) key[keylen++] = A[j];
148 }
149
150 for (i = 0; i < outlen; i++) out[i] = key[i];
151 err = CRYPT_OK;
152 DONE:
153 if (I) XFREE(I);
154 if (key) XFREE(key);
155 return err;
156 }
157
158 static int _oid_to_id(const unsigned long *oid, unsigned long oid_size)
159 {
160 int i, j;
161 for (j = 0; oid_list[j].OIDlen > 0; j++) {
162 int match = 1;
163 if (oid_list[j].OIDlen != oid_size) continue;
164 for (i = 0; i < (int)oid_size && match; i++) if (oid_list[j].OID[i] != oid[i]) match = 0;
165 if (match) return j;
166 }
167 return -1;
168 }
169
170 static int _pbes1_decrypt(const unsigned char *enc_data, unsigned long enc_size,
171 const unsigned char *pass, unsigned long pass_size,
172 const unsigned char *salt, unsigned long salt_size,
173 unsigned long iterations,
174 const unsigned long *oid, unsigned long oid_size,
175 unsigned char *dec_data, unsigned long *dec_size)
176 {
177 int id = _oid_to_id(oid, oid_size);
178 int err, hid = -1, cid = -1;
179 unsigned int keylen, blklen;
180 unsigned char key_iv[32] = { 0 }, pad;
181 unsigned long len = sizeof(key_iv), pwlen = pass_size;
182 symmetric_CBC cbc;
183 unsigned char *pw = NULL;
184
185 /* https://tools.ietf.org/html/rfc8018#section-6.1.2 */
186 if (id == PBE_MD2_DES || id == PBE_MD2_RC2) hid = find_hash("md2");
187 if (id == PBE_MD5_DES || id == PBE_MD5_RC2) hid = find_hash("md5");
188 if (id == PBE_SHA1_DES || id == PBE_SHA1_RC2 || id == PBE_SHA1_3DES) hid = find_hash("sha1");
189
190 if (id == PBE_MD2_RC2 || id == PBE_MD5_RC2 || id == PBE_SHA1_RC2) {
191 cid = find_cipher("rc2");
192 keylen = 8;
193 blklen = 8;
194 }
195 if (id == PBE_MD2_DES || id == PBE_MD5_DES || id == PBE_SHA1_DES) {
196 cid = find_cipher("des");
197 keylen = 8;
198 blklen = 8;
199 }
200 if (id == PBE_SHA1_3DES) {
201 cid = find_cipher("3des");
202 keylen = 24;
203 blklen = 8;
204 }
205
206 if (id == PBE_SHA1_3DES) {
207 /* convert password to unicode/utf16-be */
208 pwlen = pass_size * 2;
209 pw = XMALLOC(pwlen + 2);
210 if (pw == NULL) goto LBL_ERROR;
211 if ((err = _simple_utf8_to_utf16(pass, pass_size, pw, &pwlen) != CRYPT_OK)) goto LBL_ERROR;
212 pw[pwlen++] = 0;
213 pw[pwlen++] = 0;
214 /* derive KEY */
215 if ((err = _kdf_pkcs12(hid, pw, pwlen, salt, salt_size, iterations, 1, key_iv, keylen)) != CRYPT_OK) goto LBL_ERROR;
216 /* derive IV */
217 if ((err = _kdf_pkcs12(hid, pw, pwlen, salt, salt_size, iterations, 2, key_iv+24, blklen)) != CRYPT_OK) goto LBL_ERROR;
218 }
219 else {
220 if ((err = pkcs_5_alg1(pass, pass_size, salt, iterations, hid, key_iv, &len)) != CRYPT_OK) goto LBL_ERROR;
221 /* the output has 16 bytes: [KEY-8-bytes][IV-8-bytes] */
222 }
223
224 if (hid != -1 && cid != -1) {
225 if (salt_size != 8 || enc_size < blklen) goto LBL_ERROR;
226 if ((err = cbc_start(cid, key_iv + keylen, key_iv, keylen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR;
227 if ((err = cbc_decrypt(enc_data, dec_data, enc_size, &cbc)) != CRYPT_OK) goto LBL_ERROR;
228 if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR;
229 pad = dec_data[enc_size-1];
230 if (pad < 1 || pad > blklen) goto LBL_ERROR;
231 *dec_size = enc_size - pad;
232 err = CRYPT_OK;
233 goto LBL_DONE;
234 }
235
236 LBL_ERROR:
237 err = CRYPT_INVALID_ARG;
238 LBL_DONE:
239 zeromem(key_iv, sizeof(key_iv));
240 if (pw) { zeromem(pw, pwlen); XFREE(pw); }
241 return err;
242 }
243
244 static int _pbes2_pbkdf2_decrypt(const unsigned char *enc_data, unsigned long enc_size,
245 const unsigned char *pass, unsigned long pass_size,
246 const unsigned char *salt, unsigned long salt_size,
247 const unsigned char *iv, unsigned long iv_size,
248 unsigned long iterations,
249 int hmacid,
250 int encid,
251 int extra_arg,
252 unsigned char *dec_data, unsigned long *dec_size)
253 {
254 int err, hid = -1, cid = -1;
255 unsigned char k[32], pad;
256 unsigned long klen = sizeof(k);
257 symmetric_CBC cbc;
258
259 /* https://tools.ietf.org/html/rfc8018#section-6.2.2 */
260
261 if (hmacid == HMAC_WITH_SHA1) hid = find_hash("sha1");
262 if (hmacid == HMAC_WITH_SHA224) hid = find_hash("sha224");
263 if (hmacid == HMAC_WITH_SHA256) hid = find_hash("sha256");
264 if (hmacid == HMAC_WITH_SHA384) hid = find_hash("sha384");
265 if (hmacid == HMAC_WITH_SHA512) hid = find_hash("sha512");
266 if (hid == -1) return CRYPT_INVALID_ARG;
267
268 if (encid == DES_EDE3_CBC) {
269 /* https://tools.ietf.org/html/rfc8018#appendix-B.2.2 */
270 cid = find_cipher("3des");
271 klen = 24;
272 if (klen > sizeof(k) || iv_size != 8 || iv == NULL || cid == -1) goto LBL_ERROR;
273 if ((err = pkcs_5_alg2(pass, pass_size, salt, salt_size, iterations, hid, k, &klen)) != CRYPT_OK) goto LBL_ERROR;
274 if ((err = cbc_start(cid, iv, k, klen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR;
275 if ((err = cbc_decrypt(enc_data, dec_data, enc_size, &cbc)) != CRYPT_OK) goto LBL_ERROR;
276 if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR;
277 pad = dec_data[enc_size-1];
278 if (pad < 1 || pad > 8) goto LBL_ERROR;
279 *dec_size = enc_size - pad;
280 return CRYPT_OK;
281 }
282
283 if (encid == DES_CBC) {
284 /* https://tools.ietf.org/html/rfc8018#appendix-B.2.1 */
285 cid = find_cipher("des");
286 klen = 8; /* 64 bits */
287 if (klen > sizeof(k) || iv_size != 8 || iv == NULL || cid == -1) goto LBL_ERROR;
288 if ((err = pkcs_5_alg2(pass, pass_size, salt, salt_size, iterations, hid, k, &klen)) != CRYPT_OK) goto LBL_ERROR;
289 if ((err = cbc_start(cid, iv, k, klen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR;
290 if ((err = cbc_decrypt(enc_data, dec_data, enc_size, &cbc)) != CRYPT_OK) goto LBL_ERROR;
291 if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR;
292 pad = dec_data[enc_size-1];
293 if (pad < 1 || pad > 8) goto LBL_ERROR;
294 *dec_size = enc_size - pad;
295 return CRYPT_OK;
296 }
297
298 if (encid == RC2_CBC) {
299 /* https://tools.ietf.org/html/rfc8018#appendix-B.2.3 */
300 cid = find_cipher("rc2");
301 klen = 4; /* default: 32 bits */
302 if (extra_arg == 160) klen = 5;
303 if (extra_arg == 120) klen = 8;
304 if (extra_arg == 58) klen = 16;
305 if (extra_arg >= 256) klen = extra_arg / 8;
306 if (klen > sizeof(k) || iv_size != 8 || iv == NULL || cid == -1) goto LBL_ERROR;
307 if ((err = pkcs_5_alg2(pass, pass_size, salt, salt_size, iterations, hid, k, &klen)) != CRYPT_OK) goto LBL_ERROR;
308 if ((err = cbc_start(cid, iv, k, klen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR;
309 if ((err = cbc_decrypt(enc_data, dec_data, enc_size, &cbc)) != CRYPT_OK) goto LBL_ERROR;
310 if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR;
311 pad = dec_data[enc_size-1];
312 if (pad < 1 || pad > 8) goto LBL_ERROR;
313 *dec_size = enc_size - pad;
314 return CRYPT_OK;
315 }
316
317 LBL_ERROR:
318 zeromem(k, sizeof(k));
319 return CRYPT_INVALID_ARG;
320 }
321
322 static int _der_decode_pkcs8_flexi(const unsigned char *in, unsigned long inlen,
323 const void *pwd, unsigned long pwdlen,
324 ltc_asn1_list **decoded_list)
325 {
326 unsigned long len = inlen;
327 unsigned long dec_size;
328 unsigned char *dec_data = NULL;
329 ltc_asn1_list *l = NULL;
330 int err;
331
332 *decoded_list = NULL;
333 if ((err = der_decode_sequence_flexi(in, &len, &l)) == CRYPT_OK) {
334 /* the following "if" detects whether it is encrypted or not */
335 if (l->type == LTC_ASN1_SEQUENCE &&
336 l->child && l->child->type == LTC_ASN1_SEQUENCE &&
337 l->child->child && l->child->child->type == LTC_ASN1_OBJECT_IDENTIFIER &&
338 l->child->child->next && l->child->child->next->type == LTC_ASN1_SEQUENCE &&
339 l->child->next && l->child->next->type == LTC_ASN1_OCTET_STRING) {
340 ltc_asn1_list *lalgoid = l->child->child;
341 ltc_asn1_list *lalgparam = l->child->child->next;
342 unsigned char *enc_data = l->child->next->data;
343 unsigned long enc_size = l->child->next->size;
344 dec_size = enc_size;
345 if ((dec_data = XMALLOC(dec_size)) == NULL) {
346 err = CRYPT_MEM;
347 goto LBL_DONE;
348 }
349 if (lalgparam->child && lalgparam->child->type == LTC_ASN1_OCTET_STRING &&
350 lalgparam->child->next && lalgparam->child->next->type == LTC_ASN1_INTEGER) {
351 /* PBES1: encrypted pkcs8 - pbeWithMD5AndDES-CBC:
352 * 0:d=0 hl=4 l= 329 cons: SEQUENCE
353 * 4:d=1 hl=2 l= 27 cons: SEQUENCE (== *lalg)
354 * 6:d=2 hl=2 l= 9 prim: OBJECT :pbeWithMD5AndDES-CBC (== 1.2.840.113549.1.5.3)
355 * 17:d=2 hl=2 l= 14 cons: SEQUENCE (== *lalgparam)
356 * 19:d=3 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:8EDF749A06CCDE51 (== salt)
357 * 29:d=3 hl=2 l= 2 prim: INTEGER :0800 (== iterations)
358 * 33:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data)
359 */
360 unsigned long iter = mp_get_int(lalgparam->child->next->data);
361 unsigned long salt_size = lalgparam->child->size;
362 unsigned char *salt = lalgparam->child->data;
363 err = _pbes1_decrypt(enc_data, enc_size, pwd, pwdlen, salt, salt_size, iter, lalgoid->data, lalgoid->size, dec_data, &dec_size);
364 if (err != CRYPT_OK) goto LBL_DONE;
365 }
366 else if (PBES2 == _oid_to_id(lalgoid->data, lalgoid->size) &&
367 lalgparam->child && lalgparam->child->type == LTC_ASN1_SEQUENCE &&
368 lalgparam->child->child && lalgparam->child->child->type == LTC_ASN1_OBJECT_IDENTIFIER &&
369 lalgparam->child->child->next && lalgparam->child->child->next->type == LTC_ASN1_SEQUENCE &&
370 lalgparam->child->next && lalgparam->child->next->type == LTC_ASN1_SEQUENCE &&
371 lalgparam->child->next->child && lalgparam->child->next->child->type == LTC_ASN1_OBJECT_IDENTIFIER) {
372 /* PBES2: encrypted pkcs8 - PBES2+PBKDF2+des-ede3-cbc:
373 * 0:d=0 hl=4 l= 380 cons: SEQUENCE
374 * 4:d=1 hl=2 l= 78 cons: SEQUENCE (== *lalg)
375 * 6:d=2 hl=2 l= 9 prim: OBJECT :PBES2 (== 1.2.840.113549.1.5.13)
376 * 17:d=2 hl=2 l= 65 cons: SEQUENCE (== *lalgparam)
377 * 19:d=3 hl=2 l= 41 cons: SEQUENCE
378 * 21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2
379 * 32:d=4 hl=2 l= 28 cons: SEQUENCE
380 * 34:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:28BA4ABF6AA76A3D (== salt)
381 * 44:d=5 hl=2 l= 2 prim: INTEGER :0800 (== iterations)
382 * 48:d=5 hl=2 l= 12 cons: SEQUENCE (this sequence is optional, may be missing)
383 * 50:d=6 hl=2 l= 8 prim: OBJECT :hmacWithSHA256
384 * 60:d=6 hl=2 l= 0 prim: NULL
385 * 62:d=3 hl=2 l= 20 cons: SEQUENCE
386 * 64:d=4 hl=2 l= 8 prim: OBJECT :des-ede3-cbc
387 * 74:d=4 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:B1404C4688DC9A5A
388 * 84:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data)
389 */
390 ltc_asn1_list *lkdf = lalgparam->child->child;
391 ltc_asn1_list *lenc = lalgparam->child->next->child;
392 int kdfid = _oid_to_id(lkdf->data, lkdf->size);
393 int encid = _oid_to_id(lenc->data, lenc->size);
394 if (PBKDF2 == kdfid &&
395 lkdf->next && lkdf->next->type == LTC_ASN1_SEQUENCE &&
396 lkdf->next->child && lkdf->next->child->type == LTC_ASN1_OCTET_STRING &&
397 lkdf->next->child->next && lkdf->next->child->next->type == LTC_ASN1_INTEGER) {
398 unsigned long iter = mp_get_int(lkdf->next->child->next->data);
399 unsigned long salt_size = lkdf->next->child->size;
400 unsigned char *salt = lkdf->next->child->data;
401 unsigned char *iv = NULL;
402 unsigned long iv_size = 0;
403 unsigned long arg = 0;
404 ltc_asn1_list *loptseq = lkdf->next->child->next->next;
405 int hmacid = HMAC_WITH_SHA1; /* this is default */
406 if (loptseq && loptseq->type == LTC_ASN1_SEQUENCE &&
407 loptseq->child && loptseq->child->type == LTC_ASN1_OBJECT_IDENTIFIER) {
408 /* this sequence is optional */
409 hmacid = _oid_to_id(loptseq->child->data, loptseq->child->size);
410 }
411 if (lenc->next && lenc->next->type == LTC_ASN1_OCTET_STRING) {
412 /* DES-CBC + DES_EDE3_CBC */
413 iv = lenc->next->data;
414 iv_size = lenc->next->size;
415 }
416 else if (lenc->next && lenc->next->type == LTC_ASN1_SEQUENCE &&
417 lenc->next->child && lenc->next->child->type == LTC_ASN1_INTEGER &&
418 lenc->next->child->next && lenc->next->child->next->type == LTC_ASN1_OCTET_STRING) {
419 /* RC2-CBC is a bit special */
420 iv = lenc->next->child->next->data;
421 iv_size = lenc->next->child->next->size;
422 arg = mp_get_int(lenc->next->child->data);
423 }
424 err = _pbes2_pbkdf2_decrypt(enc_data, enc_size, pwd, pwdlen, salt, salt_size, iv, iv_size, iter, hmacid, encid, arg, dec_data, &dec_size);
425 if (err != CRYPT_OK) goto LBL_DONE;
426 }
427 else {
428 /* non-PBKDF2 algorithms are not supported */
429 err = CRYPT_INVALID_PACKET;
430 goto LBL_DONE;
431 }
432 }
433 else {
434 /* unsupported encryption */
435 err = CRYPT_INVALID_PACKET;
436 goto LBL_DONE;
437 }
438 der_free_sequence_flexi(l);
439 l = NULL;
440 err = der_decode_sequence_flexi(dec_data, &dec_size, &l);
441 if (err != CRYPT_OK) goto LBL_DONE;
442 *decoded_list = l;
443 }
444 else {
445 /* not encrypted */
446 err = CRYPT_OK;
447 *decoded_list = l;
448 }
449 }
450
451 LBL_DONE:
452 if (dec_data) XFREE(dec_data);
453 return err;
40 return CRYPT_OK;
45441 }
45542
45643 /* NOTE: _der_decode_pkcs8_flexi & related stuff can be shared with rsa_import_pkcs8() */
46047 ecc_key *key)
46148 {
46249 void *a, *b, *gx, *gy;
463 unsigned long len, cofactor;
464 oid_st ecoid;
50 unsigned long len, cofactor, n;
51 const char *pka_ec_oid;
46552 int err;
46653 char OID[256];
46754 const ltc_ecc_curve *curve;
46855 ltc_asn1_list *p = NULL, *l = NULL;
56 der_flexi_check flexi_should[7];
57 ltc_asn1_list *seq, *priv_key;
46958
47059 LTC_ARGCHK(in != NULL);
47160 LTC_ARGCHK(key != NULL);
47261 LTC_ARGCHK(ltc_mp.name != NULL);
47362
47463 /* get EC alg oid */
475 err = pk_get_oid(PKA_EC, &ecoid);
64 err = pk_get_oid(PKA_EC, &pka_ec_oid);
47665 if (err != CRYPT_OK) return err;
47766
47867 /* init key */
47968 err = mp_init_multi(&a, &b, &gx, &gy, NULL);
48069 if (err != CRYPT_OK) return err;
48170
482 if ((err = _der_decode_pkcs8_flexi(in, inlen, pwd, pwdlen, &l)) == CRYPT_OK) {
483 if (l->type == LTC_ASN1_SEQUENCE &&
484 l->child && l->child->type == LTC_ASN1_INTEGER &&
485 l->child->next && l->child->next->type == LTC_ASN1_SEQUENCE &&
486 l->child->next->child && l->child->next->child->type == LTC_ASN1_OBJECT_IDENTIFIER &&
487 l->child->next->next && l->child->next->next->type == LTC_ASN1_OCTET_STRING) {
488 ltc_asn1_list *lseq = l->child->next;
489 ltc_asn1_list *lpri = l->child->next->next;
490 ltc_asn1_list *lecoid = l->child->next->child;
49171
492 if ((lecoid->size != ecoid.OIDlen) ||
493 XMEMCMP(ecoid.OID, lecoid->data, ecoid.OIDlen * sizeof(ecoid.OID[0]))) {
494 err = CRYPT_PK_INVALID_TYPE;
495 goto LBL_DONE;
72 if ((err = pkcs8_decode_flexi(in, inlen, pwd, pwdlen, &l)) == CRYPT_OK) {
73
74 /* Setup for basic structure */
75 n=0;
76 LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_INTEGER, NULL);
77 LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_SEQUENCE, &seq);
78 LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_OCTET_STRING, &priv_key);
79 LTC_SET_DER_FLEXI_CHECK(flexi_should, n, LTC_ASN1_EOL, NULL);
80
81 if (((err = _der_flexi_sequence_cmp(l, flexi_should)) == CRYPT_OK) &&
82 (pk_oid_cmp_with_asn1(pka_ec_oid, seq->child) == CRYPT_OK)) {
83 ltc_asn1_list *version, *field, *point, *point_g, *order, *p_cofactor;
84
85 /* Setup for CASE 2 */
86 n=0;
87 LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_INTEGER, &version);
88 LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_SEQUENCE, &field);
89 LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_SEQUENCE, &point);
90 LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_OCTET_STRING, &point_g);
91 LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_INTEGER, &order);
92 LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_INTEGER, &p_cofactor);
93 LTC_SET_DER_FLEXI_CHECK(flexi_should, n, LTC_ASN1_EOL, NULL);
94
95 if (LTC_ASN1_IS_TYPE(seq->child->next, LTC_ASN1_OBJECT_IDENTIFIER)) {
96 /* CASE 1: curve by OID (AKA short variant):
97 * 0:d=0 hl=2 l= 100 cons: SEQUENCE
98 * 2:d=1 hl=2 l= 1 prim: INTEGER :00
99 * 5:d=1 hl=2 l= 16 cons: SEQUENCE (== *seq)
100 * 7:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey
101 * 16:d=2 hl=2 l= 5 prim: OBJECT :(== *curve_oid (e.g. secp256k1 (== 1.3.132.0.10)))
102 * 23:d=1 hl=2 l= 77 prim: OCTET STRING :bytes (== *priv_key)
103 */
104 ltc_asn1_list *curve_oid = seq->child->next;
105 len = sizeof(OID);
106 if ((err = pk_oid_num_to_str(curve_oid->data, curve_oid->size, OID, &len)) != CRYPT_OK) { goto LBL_DONE; }
107 if ((err = ecc_find_curve(OID, &curve)) != CRYPT_OK) { goto LBL_DONE; }
108 if ((err = ecc_set_curve(curve, key)) != CRYPT_OK) { goto LBL_DONE; }
496109 }
497
498 if (lseq->child->next && lseq->child->next->type == LTC_ASN1_OBJECT_IDENTIFIER) {
499 /* CASE 1: curve by OID (AKA short variant):
500 * 0:d=0 hl=2 l= 100 cons: SEQUENCE
501 * 2:d=1 hl=2 l= 1 prim: INTEGER :00
502 * 5:d=1 hl=2 l= 16 cons: SEQUENCE (== *lseq)
503 * 7:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey
504 * 16:d=2 hl=2 l= 5 prim: OBJECT :secp256k1 (== 1.3.132.0.10)
505 * 23:d=1 hl=2 l= 77 prim: OCTET STRING :bytes (== privatekey)
506 */
507 ltc_asn1_list *loid = lseq->child->next;
508 len = sizeof(OID);
509 if ((err = pk_oid_num_to_str(loid->data, loid->size, OID, &len)) != CRYPT_OK) { goto LBL_DONE; }
510 if ((err = ecc_get_curve(OID, &curve)) != CRYPT_OK) { goto LBL_DONE; }
511 if ((err = ecc_set_dp(curve, key)) != CRYPT_OK) { goto LBL_DONE; }
512 }
513 else if (lseq->child->next && lseq->child->next->type == LTC_ASN1_SEQUENCE) {
110 else if ((err = _der_flexi_sequence_cmp(seq->child->next, flexi_should)) == CRYPT_OK) {
514111 /* CASE 2: explicit curve parameters (AKA long variant):
515112 * 0:d=0 hl=3 l= 227 cons: SEQUENCE
516113 * 3:d=1 hl=2 l= 1 prim: INTEGER :00
517 * 6:d=1 hl=3 l= 142 cons: SEQUENCE (== *lseq)
114 * 6:d=1 hl=3 l= 142 cons: SEQUENCE (== *seq)
518115 * 9:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey
519 * 18:d=2 hl=3 l= 130 cons: SEQUENCE (== *lcurve)
116 * 18:d=2 hl=3 l= 130 cons: SEQUENCE
520117 * 21:d=3 hl=2 l= 1 prim: INTEGER :01
521 * 24:d=3 hl=2 l= 44 cons: SEQUENCE (== *lfield)
118 * 24:d=3 hl=2 l= 44 cons: SEQUENCE (== *field)
522119 * 26:d=4 hl=2 l= 7 prim: OBJECT :prime-field
523 * 35:d=4 hl=2 l= 33 prim: INTEGER :(== curve.prime)
524 * 70:d=3 hl=2 l= 6 cons: SEQUENCE (== *lpoint)
120 * 35:d=4 hl=2 l= 33 prim: INTEGER :(== *prime / curve.prime)
121 * 70:d=3 hl=2 l= 6 cons: SEQUENCE (== *point)
525122 * 72:d=4 hl=2 l= 1 prim: OCTET STRING :bytes (== curve.A)
526123 * 75:d=4 hl=2 l= 1 prim: OCTET STRING :bytes (== curve.B)
527 * 78:d=3 hl=2 l= 33 prim: OCTET STRING :bytes (== curve.G-point)
528 * 113:d=3 hl=2 l= 33 prim: INTEGER :(== curve.order)
124 * 78:d=3 hl=2 l= 33 prim: OCTET STRING :bytes (== *g_point / curve.G-point)
125 * 113:d=3 hl=2 l= 33 prim: INTEGER :(== *order / curve.order)
529126 * 148:d=3 hl=2 l= 1 prim: INTEGER :(== curve.cofactor)
530 * 151:d=1 hl=2 l= 77 prim: OCTET STRING :bytes (== privatekey)
127 * 151:d=1 hl=2 l= 77 prim: OCTET STRING :bytes (== *priv_key)
531128 */
532 ltc_asn1_list *lcurve = lseq->child->next;
533129
534 if (lcurve->child && lcurve->child->type == LTC_ASN1_INTEGER &&
535 lcurve->child->next && lcurve->child->next->type == LTC_ASN1_SEQUENCE &&
536 lcurve->child->next->next && lcurve->child->next->next->type == LTC_ASN1_SEQUENCE &&
537 lcurve->child->next->next->next && lcurve->child->next->next->next->type == LTC_ASN1_OCTET_STRING &&
538 lcurve->child->next->next->next->next && lcurve->child->next->next->next->next->type == LTC_ASN1_INTEGER &&
539 lcurve->child->next->next->next->next->next && lcurve->child->next->next->next->next->next->type == LTC_ASN1_INTEGER) {
130 if (mp_get_int(version->data) != 1) {
131 goto LBL_DONE;
132 }
133 cofactor = mp_get_int(p_cofactor->data);
540134
541 ltc_asn1_list *lfield = lcurve->child->next;
542 ltc_asn1_list *lpoint = lcurve->child->next->next;
543 ltc_asn1_list *lg = lcurve->child->next->next->next;
544 ltc_asn1_list *lorder = lcurve->child->next->next->next->next;
545 cofactor = mp_get_int(lcurve->child->next->next->next->next->next->data);
135 if (LTC_ASN1_IS_TYPE(field->child, LTC_ASN1_OBJECT_IDENTIFIER) &&
136 LTC_ASN1_IS_TYPE(field->child->next, LTC_ASN1_INTEGER) &&
137 LTC_ASN1_IS_TYPE(point->child, LTC_ASN1_OCTET_STRING) &&
138 LTC_ASN1_IS_TYPE(point->child->next, LTC_ASN1_OCTET_STRING)) {
546139
547 if (lfield->child && lfield->child->type == LTC_ASN1_OBJECT_IDENTIFIER &&
548 lfield->child->next && lfield->child->next->type == LTC_ASN1_INTEGER &&
549 lpoint->child && lpoint->child->type == LTC_ASN1_OCTET_STRING &&
550 lpoint->child->next && lpoint->child->next->type == LTC_ASN1_OCTET_STRING) {
551
552 ltc_asn1_list *lprime = lfield->child->next;
553 if ((err = mp_read_unsigned_bin(a, lpoint->child->data, lpoint->child->size)) != CRYPT_OK) {
554 goto LBL_DONE;
555 }
556 if ((err = mp_read_unsigned_bin(b, lpoint->child->next->data, lpoint->child->next->size)) != CRYPT_OK) {
557 goto LBL_DONE;
558 }
559 if ((err = ltc_ecc_import_point(lg->data, lg->size, lprime->data, a, b, gx, gy)) != CRYPT_OK) {
560 goto LBL_DONE;
561 }
562 if ((err = ecc_set_dp_from_mpis(a, b, lprime->data, lorder->data, gx, gy, cofactor, key)) != CRYPT_OK) {
563 goto LBL_DONE;
564 }
140 ltc_asn1_list *prime = field->child->next;
141 if ((err = mp_read_unsigned_bin(a, point->child->data, point->child->size)) != CRYPT_OK) {
142 goto LBL_DONE;
143 }
144 if ((err = mp_read_unsigned_bin(b, point->child->next->data, point->child->next->size)) != CRYPT_OK) {
145 goto LBL_DONE;
146 }
147 if ((err = ltc_ecc_import_point(point_g->data, point_g->size, prime->data, a, b, gx, gy)) != CRYPT_OK) {
148 goto LBL_DONE;
149 }
150 if ((err = ecc_set_curve_from_mpis(a, b, prime->data, order->data, gx, gy, cofactor, key)) != CRYPT_OK) {
151 goto LBL_DONE;
565152 }
566153 }
567154 }
571158 }
572159
573160 /* load private key value 'k' */
574 len = lpri->size;
575 if ((err = der_decode_sequence_flexi(lpri->data, &len, &p)) == CRYPT_OK) {
161 len = priv_key->size;
162 if ((err = der_decode_sequence_flexi(priv_key->data, &len, &p)) == CRYPT_OK) {
576163 if (p->type == LTC_ASN1_SEQUENCE &&
577 p->child && p->child->type == LTC_ASN1_INTEGER &&
578 p->child->next && p->child->next->type == LTC_ASN1_OCTET_STRING) {
164 LTC_ASN1_IS_TYPE(p->child, LTC_ASN1_INTEGER) &&
165 LTC_ASN1_IS_TYPE(p->child->next, LTC_ASN1_OCTET_STRING)) {
579166 ltc_asn1_list *lk = p->child->next;
580167 if (mp_cmp_d(p->child->data, 1) != LTC_MP_EQ) {
581168 err = CRYPT_INVALID_PACKET;
88 #include "tomcrypt_private.h"
99
1010 #ifdef LTC_MECC
11
12 static int _ecc_import_x509_with_oid(const unsigned char *in, unsigned long inlen, ecc_key *key)
13 {
14 unsigned char bin_xy[2*ECC_MAXSIZE+2];
15 unsigned long curveoid[16];
16 unsigned long len_xy, len_oid, len;
17 char OID[256];
18 const ltc_ecc_curve *curve;
19 int err;
20
21 len_xy = sizeof(bin_xy);
22 len_oid = 16;
23 err = x509_decode_subject_public_key_info(in, inlen, PKA_EC, bin_xy, &len_xy,
24 LTC_ASN1_OBJECT_IDENTIFIER, (void *)curveoid, &len_oid);
25 if (err == CRYPT_OK) {
26 /* load curve parameters for given curve OID */
27 len = sizeof(OID);
28 if ((err = pk_oid_num_to_str(curveoid, len_oid, OID, &len)) != CRYPT_OK) { goto error; }
29 if ((err = ecc_find_curve(OID, &curve)) != CRYPT_OK) { goto error; }
30 if ((err = ecc_set_curve(curve, key)) != CRYPT_OK) { goto error; }
31 /* load public key */
32 err = ecc_set_key(bin_xy, len_xy, PK_PUBLIC, key);
33 }
34 error:
35 return err;
36 }
37
38 static int _ecc_import_x509_with_curve(const unsigned char *in, unsigned long inlen, ecc_key *key)
39 {
40 void *prime, *order, *a, *b, *gx, *gy;
41 ltc_asn1_list seq_fieldid[2], seq_curve[3], seq_ecparams[6];
42 unsigned char bin_a[ECC_MAXSIZE], bin_b[ECC_MAXSIZE];
43 unsigned char bin_g[2*ECC_MAXSIZE+1], bin_xy[2*ECC_MAXSIZE+2], bin_seed[128];
44 unsigned long len_a, len_b, len_g, len_xy, len;
45 unsigned long cofactor = 0, ecver = 0, tmpoid[16];
46 int err;
47
48 if ((err = mp_init_multi(&prime, &order, &a, &b, &gx, &gy, NULL)) != CRYPT_OK) {
49 return err;
50 }
51
52 /* ECParameters SEQUENCE */
53 LTC_SET_ASN1(seq_ecparams, 0, LTC_ASN1_SHORT_INTEGER, &ecver, 1UL);
54 LTC_SET_ASN1(seq_ecparams, 1, LTC_ASN1_SEQUENCE, seq_fieldid, 2UL);
55 LTC_SET_ASN1(seq_ecparams, 2, LTC_ASN1_SEQUENCE, seq_curve, 3UL);
56 LTC_SET_ASN1(seq_ecparams, 3, LTC_ASN1_OCTET_STRING, bin_g, sizeof(bin_g));
57 LTC_SET_ASN1(seq_ecparams, 4, LTC_ASN1_INTEGER, order, 1UL);
58 LTC_SET_ASN1(seq_ecparams, 5, LTC_ASN1_SHORT_INTEGER, &cofactor, 1UL);
59 seq_ecparams[5].optional = 1;
60 /* FieldID SEQUENCE */
61 LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, tmpoid, 16UL);
62 LTC_SET_ASN1(seq_fieldid, 1, LTC_ASN1_INTEGER, prime, 1UL);
63 /* Curve SEQUENCE */
64 LTC_SET_ASN1(seq_curve, 0, LTC_ASN1_OCTET_STRING, bin_a, sizeof(bin_a));
65 LTC_SET_ASN1(seq_curve, 1, LTC_ASN1_OCTET_STRING, bin_b, sizeof(bin_b));
66 LTC_SET_ASN1(seq_curve, 2, LTC_ASN1_RAW_BIT_STRING, bin_seed, 8u*sizeof(bin_seed));
67 seq_curve[2].optional = 1;
68 /* try to load public key */
69 len_xy = sizeof(bin_xy);
70 len = 6;
71 err = x509_decode_subject_public_key_info(in, inlen, PKA_EC, bin_xy, &len_xy, LTC_ASN1_SEQUENCE, seq_ecparams, &len);
72
73 if (err == CRYPT_OK) {
74 len_a = seq_curve[0].size;
75 len_b = seq_curve[1].size;
76 len_g = seq_ecparams[3].size;
77 /* create bignums */
78 if ((err = mp_read_unsigned_bin(a, bin_a, len_a)) != CRYPT_OK) { goto error; }
79 if ((err = mp_read_unsigned_bin(b, bin_b, len_b)) != CRYPT_OK) { goto error; }
80 if ((err = ltc_ecc_import_point(bin_g, len_g, prime, a, b, gx, gy)) != CRYPT_OK) { goto error; }
81 /* load curve parameters */
82 if ((err = ecc_set_curve_from_mpis(a, b, prime, order, gx, gy, cofactor, key)) != CRYPT_OK) { goto error; }
83 /* load public key */
84 err = ecc_set_key(bin_xy, len_xy, PK_PUBLIC, key);
85 }
86 error:
87 mp_clear_multi(prime, order, a, b, gx, gy, NULL);
88 return err;
89 }
90
91 int ecc_import_subject_public_key_info(const unsigned char *in, unsigned long inlen, ecc_key *key)
92 {
93 int err;
94
95 if ((err = _ecc_import_x509_with_oid(in, inlen, key)) == CRYPT_OK) {
96 goto success;
97 }
98
99 err = _ecc_import_x509_with_curve(in, inlen, key);
100
101 success:
102 return err;
103 }
11104
12105 /**
13106 Import an ECC key from a X.509 certificate
37130 l->child && l->child->type == LTC_ASN1_SEQUENCE &&
38131 l->child->child && l->child->child->type == LTC_ASN1_OBJECT_IDENTIFIER &&
39132 l->child->next && l->child->next->type == LTC_ASN1_BIT_STRING) {
40 err = ecc_import_openssl(l->data, l->size, key);
133 err = ecc_import_subject_public_key_info(l->data, l->size, key);
41134 goto LBL_DONE;
42135 }
43136 l = l->next;
2727 {
2828 int err;
2929
30 if ((err = ecc_set_dp_by_size(keysize, key)) != CRYPT_OK) { return err; }
31 if ((err = ecc_generate_key(prng, wprng, key)) != CRYPT_OK) { return err; }
30 if ((err = ecc_set_curve_by_size(keysize, key)) != CRYPT_OK) { return err; }
31 if ((err = ecc_generate_key(prng, wprng, key)) != CRYPT_OK) { return err; }
3232 return CRYPT_OK;
3333 }
3434
3535 int ecc_make_key_ex(prng_state *prng, int wprng, ecc_key *key, const ltc_ecc_curve *cu)
3636 {
3737 int err;
38 if ((err = ecc_set_dp(cu, key)) != CRYPT_OK) { return err; }
38 if ((err = ecc_set_curve(cu, key)) != CRYPT_OK) { return err; }
3939 if ((err = ecc_generate_key(prng, wprng, key)) != CRYPT_OK) { return err; }
4040 return CRYPT_OK;
4141 }
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_MECC
12
13 #ifdef LTC_ECC_SHAMIR
14
15 /**
16 @file ecc_recover_key.c
17 ECC Crypto, Russ Williams
18 */
19
20 /**
21 Recover ECC public key from signature and hash
22 @param sig The signature to verify
23 @param siglen The length of the signature (octets)
24 @param hash The hash (message digest) that was signed
25 @param hashlen The length of the hash (octets)
26 @param recid The recovery ID ("v"), can be -1 if signature contains it
27 @param sigformat The format of the signature (ecc_signature_type)
28 @param key The recovered public ECC key
29 @return CRYPT_OK if successful (even if the signature is not valid)
30 */
31 int ecc_recover_key(const unsigned char *sig, unsigned long siglen,
32 const unsigned char *hash, unsigned long hashlen,
33 int recid, ecc_signature_type sigformat, ecc_key *key)
34 {
35 ecc_point *mG = NULL, *mQ = NULL, *mR = NULL;
36 void *p, *m, *a, *b;
37 void *r, *s, *v, *w, *t1, *t2, *u1, *u2, *v1, *v2, *e, *x, *y, *a_plus3;
38 void *mu = NULL, *ma = NULL;
39 void *mp = NULL;
40 int err;
41 unsigned long pbits, pbytes, i, shift_right;
42 unsigned char ch, buf[MAXBLOCKSIZE];
43
44 LTC_ARGCHK(sig != NULL);
45 LTC_ARGCHK(hash != NULL);
46 LTC_ARGCHK(key != NULL);
47
48 /* BEWARE: requires sqrtmod_prime */
49 if (ltc_mp.sqrtmod_prime == NULL) {
50 return CRYPT_ERROR;
51 }
52
53 /* allocate ints */
54 if ((err = mp_init_multi(&r, &s, &v, &w, &t1, &t2, &u1, &u2, &v1, &v2, &e, &x, &y, &a_plus3, NULL)) != CRYPT_OK) {
55 return err;
56 }
57
58 p = key->dp.order;
59 m = key->dp.prime;
60 a = key->dp.A;
61 b = key->dp.B;
62 if ((err = mp_add_d(a, 3, a_plus3)) != CRYPT_OK) {
63 goto error;
64 }
65
66 /* allocate points */
67 mG = ltc_ecc_new_point();
68 mQ = ltc_ecc_new_point();
69 mR = ltc_ecc_new_point();
70 if (mR == NULL || mQ == NULL || mG == NULL) {
71 err = CRYPT_MEM;
72 goto error;
73 }
74
75 if (sigformat == LTC_ECCSIG_ANSIX962) {
76 /* ANSI X9.62 format - ASN.1 encoded SEQUENCE{ INTEGER(r), INTEGER(s) } */
77 if ((err = der_decode_sequence_multi_ex(sig, siglen, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_STRICT,
78 LTC_ASN1_INTEGER, 1UL, r,
79 LTC_ASN1_INTEGER, 1UL, s,
80 LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { goto error; }
81 }
82 else if (sigformat == LTC_ECCSIG_RFC7518) {
83 /* RFC7518 format - raw (r,s) */
84 i = mp_unsigned_bin_size(key->dp.order);
85 if (siglen != (2*i)) {
86 err = CRYPT_INVALID_PACKET;
87 goto error;
88 }
89 if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, i)) != CRYPT_OK) { goto error; }
90 if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig+i, i)) != CRYPT_OK) { goto error; }
91 }
92 else if (sigformat == LTC_ECCSIG_ETH27) {
93 /* Ethereum (v,r,s) format */
94 if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) {
95 /* Only valid for secp256k1 - OID 1.3.132.0.10 */
96 err = CRYPT_ERROR; goto error;
97 }
98 if (siglen != 65) { /* Only secp256k1 curves use this format, so must be 65 bytes long */
99 err = CRYPT_INVALID_PACKET;
100 goto error;
101 }
102 i = (unsigned long)sig[64];
103 if ((i>=27) && (i<31)) i -= 27; /* Ethereum adds 27 to recovery ID */
104 if (recid >= 0 && ((unsigned long)recid != i)) {
105 /* Recovery ID specified, but doesn't match signature */
106 err = CRYPT_INVALID_PACKET;
107 goto error;
108 }
109 recid = i;
110 if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, 32)) != CRYPT_OK) { goto error; }
111 if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig+32, 32)) != CRYPT_OK) { goto error; }
112 }
113 #ifdef LTC_SSH
114 else if (sigformat == LTC_ECCSIG_RFC5656) {
115 char name[64], name2[64];
116 unsigned long namelen = sizeof(name2);
117
118 /* Decode as SSH data sequence, per RFC4251 */
119 if ((err = ssh_decode_sequence_multi(sig, siglen,
120 LTC_SSHDATA_STRING, name, 64,
121 LTC_SSHDATA_MPINT, r,
122 LTC_SSHDATA_MPINT, s,
123 LTC_SSHDATA_EOL, NULL)) != CRYPT_OK) { goto error; }
124
125
126 /* Check curve matches identifier string */
127 if ((err = ecc_ssh_ecdsa_encode_name(name2, &namelen, key)) != CRYPT_OK) { goto error; }
128 if (XSTRCMP(name,name2) != 0) {
129 err = CRYPT_INVALID_ARG;
130 goto error;
131 }
132 }
133 #endif
134 else {
135 /* Unknown signature format */
136 err = CRYPT_ERROR;
137 goto error;
138 }
139
140 if (recid < 0 || (unsigned long)recid >= 2*(key->dp.cofactor+1)) {
141 /* Recovery ID is out of range, reject it */
142 err = CRYPT_INVALID_ARG;
143 goto error;
144 }
145
146 /* check for zero */
147 if (mp_cmp_d(r, 0) != LTC_MP_GT || mp_cmp_d(s, 0) != LTC_MP_GT ||
148 mp_cmp(r, p) != LTC_MP_LT || mp_cmp(s, p) != LTC_MP_LT) {
149 err = CRYPT_INVALID_PACKET;
150 goto error;
151 }
152
153 /* read hash - truncate if needed */
154 pbits = mp_count_bits(p);
155 pbytes = (pbits+7) >> 3;
156 if (pbits > hashlen*8) {
157 if ((err = mp_read_unsigned_bin(e, (unsigned char *)hash, hashlen)) != CRYPT_OK) { goto error; }
158 }
159 else if (pbits % 8 == 0) {
160 if ((err = mp_read_unsigned_bin(e, (unsigned char *)hash, pbytes)) != CRYPT_OK) { goto error; }
161 }
162 else {
163 shift_right = 8 - pbits % 8;
164 for (i=0, ch=0; i<pbytes; i++) {
165 buf[i] = ch;
166 ch = (hash[i] << (8-shift_right));
167 buf[i] = buf[i] ^ (hash[i] >> shift_right);
168 }
169 if ((err = mp_read_unsigned_bin(e, (unsigned char *)buf, pbytes)) != CRYPT_OK) { goto error; }
170 }
171
172 /* decompress point from r=(x mod p) - BEWARE: requires sqrtmod_prime */
173 /* x = r + p*(recid/2) */
174 if ((err = mp_set(x, recid/2)) != CRYPT_OK) { goto error; }
175 if ((err = mp_mulmod(p, x, m, x)) != CRYPT_OK) { goto error; }
176 if ((err = mp_add(x, r, x)) != CRYPT_OK) { goto error; }
177 /* compute x^3 */
178 if ((err = mp_sqr(x, t1)) != CRYPT_OK) { goto error; }
179 if ((err = mp_mulmod(t1, x, m, t1)) != CRYPT_OK) { goto error; }
180 /* compute x^3 + a*x */
181 if ((err = mp_mulmod(a, x, m, t2)) != CRYPT_OK) { goto error; }
182 if ((err = mp_add(t1, t2, t1)) != CRYPT_OK) { goto error; }
183 /* compute x^3 + a*x + b */
184 if ((err = mp_add(t1, b, t1)) != CRYPT_OK) { goto error; }
185 /* compute sqrt(x^3 + a*x + b) */
186 if ((err = mp_sqrtmod_prime(t1, m, t2)) != CRYPT_OK) { goto error; }
187
188 /* fill in mR */
189 if ((err = mp_copy(x, mR->x)) != CRYPT_OK) { goto error; }
190 if ((mp_isodd(t2) && (recid%2)) || (!mp_isodd(t2) && !(recid%2))) {
191 if ((err = mp_mod(t2, m, mR->y)) != CRYPT_OK) { goto error; }
192 }
193 else {
194 if ((err = mp_submod(m, t2, m, mR->y)) != CRYPT_OK) { goto error; }
195 }
196 if ((err = mp_set(mR->z, 1)) != CRYPT_OK) { goto error; }
197
198 /* w = r^-1 mod n */
199 if ((err = mp_invmod(r, p, w)) != CRYPT_OK) { goto error; }
200 /* v1 = sw */
201 if ((err = mp_mulmod(s, w, p, v1)) != CRYPT_OK) { goto error; }
202 /* v2 = -ew */
203 if ((err = mp_mulmod(e, w, p, v2)) != CRYPT_OK) { goto error; }
204 if ((err = mp_submod(p, v2, p, v2)) != CRYPT_OK) { goto error; }
205
206 /* w = s^-1 mod n */
207 if ((err = mp_invmod(s, p, w)) != CRYPT_OK) { goto error; }
208 /* u1 = ew */
209 if ((err = mp_mulmod(e, w, p, u1)) != CRYPT_OK) { goto error; }
210 /* u2 = rw */
211 if ((err = mp_mulmod(r, w, p, u2)) != CRYPT_OK) { goto error; }
212
213 /* find mG */
214 if ((err = ltc_ecc_copy_point(&key->dp.base, mG)) != CRYPT_OK) { goto error; }
215
216 /* find the montgomery mp */
217 if ((err = mp_montgomery_setup(m, &mp)) != CRYPT_OK) { goto error; }
218
219 /* for curves with a == -3 keep ma == NULL */
220 if (mp_cmp(a_plus3, m) != LTC_MP_EQ) {
221 if ((err = mp_init_multi(&mu, &ma, NULL)) != CRYPT_OK) { goto error; }
222 if ((err = mp_montgomery_normalization(mu, m)) != CRYPT_OK) { goto error; }
223 if ((err = mp_mulmod(a, mu, m, ma)) != CRYPT_OK) { goto error; }
224 }
225
226 /* recover mQ from mR */
227 /* compute v1*mR + v2*mG = mQ using Shamir's trick */
228 if ((err = ltc_mp.ecc_mul2add(mR, v1, mG, v2, mQ, ma, m)) != CRYPT_OK) { goto error; }
229
230 /* compute u1*mG + u2*mQ = mG using Shamir's trick */
231 if ((err = ltc_mp.ecc_mul2add(mG, u1, mQ, u2, mG, ma, m)) != CRYPT_OK) { goto error; }
232
233 /* v = X_x1 mod n */
234 if ((err = mp_mod(mG->x, p, v)) != CRYPT_OK) { goto error; }
235
236 /* does v == r */
237 if (mp_cmp(v, r) == LTC_MP_EQ) {
238 /* found public key which verifies signature */
239 if ((err = ltc_ecc_copy_point(mQ, &key->pubkey)) != CRYPT_OK) { goto error; }
240 /* point on the curve + other checks */
241 if ((err = ltc_ecc_verify_key(key)) != CRYPT_OK) { goto error; }
242
243 key->type = PK_PUBLIC;
244
245 err = CRYPT_OK;
246 }
247 else {
248 /* not found - recid is wrong or we're unable to calculate public key for some other reason */
249 err = CRYPT_INVALID_ARG;
250 }
251
252 error:
253 if (ma != NULL) mp_clear(ma);
254 if (mu != NULL) mp_clear(mu);
255 if (mp != NULL) mp_montgomery_free(mp);
256 if (mR != NULL) ltc_ecc_del_point(mR);
257 if (mQ != NULL) ltc_ecc_del_point(mQ);
258 if (mG != NULL) ltc_ecc_del_point(mG);
259 mp_clear_multi(a_plus3, y, x, e, v2, v1, u2, u1, t2, t1, w, v, s, r, NULL);
260 return err;
261 }
262
263 #endif
264 #endif
265
266 /* ref: $Format:%D$ */
267 /* git commit: $Format:%H$ */
268 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_MECC
12
13 int ecc_set_curve(const ltc_ecc_curve *cu, ecc_key *key)
14 {
15 int err;
16
17 LTC_ARGCHK(key != NULL);
18 LTC_ARGCHK(cu != NULL);
19
20 if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B,
21 &key->dp.base.x, &key->dp.base.y, &key->dp.base.z,
22 &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k,
23 NULL)) != CRYPT_OK) {
24 return err;
25 }
26
27 /* A, B, order, prime, Gx, Gy */
28 if ((err = mp_read_radix(key->dp.prime, cu->prime, 16)) != CRYPT_OK) { goto error; }
29 if ((err = mp_read_radix(key->dp.order, cu->order, 16)) != CRYPT_OK) { goto error; }
30 if ((err = mp_read_radix(key->dp.A, cu->A, 16)) != CRYPT_OK) { goto error; }
31 if ((err = mp_read_radix(key->dp.B, cu->B, 16)) != CRYPT_OK) { goto error; }
32 if ((err = mp_read_radix(key->dp.base.x, cu->Gx, 16)) != CRYPT_OK) { goto error; }
33 if ((err = mp_read_radix(key->dp.base.y, cu->Gy, 16)) != CRYPT_OK) { goto error; }
34 if ((err = mp_set(key->dp.base.z, 1)) != CRYPT_OK) { goto error; }
35 /* cofactor & size */
36 key->dp.cofactor = cu->cofactor;
37 key->dp.size = mp_unsigned_bin_size(key->dp.prime);
38 /* OID string >> unsigned long oid[16] + oidlen */
39 key->dp.oidlen = 16;
40 if ((err = pk_oid_str_to_num(cu->OID, key->dp.oid, &key->dp.oidlen)) != CRYPT_OK) { goto error; }
41 /* success */
42 return CRYPT_OK;
43
44 error:
45 ecc_free(key);
46 return err;
47 }
48
49 int ecc_set_curve_by_size(int size, ecc_key *key)
50 {
51 const ltc_ecc_curve *cu = NULL;
52 int err = CRYPT_ERROR;
53
54 /* for compatibility with libtomcrypt-1.17 the sizes below must match the specific curves */
55 if (size <= 14) {
56 err = ecc_find_curve("SECP112R1", &cu);
57 }
58 else if (size <= 16) {
59 err = ecc_find_curve("SECP128R1", &cu);
60 }
61 else if (size <= 20) {
62 err = ecc_find_curve("SECP160R1", &cu);
63 }
64 else if (size <= 24) {
65 err = ecc_find_curve("SECP192R1", &cu);
66 }
67 else if (size <= 28) {
68 err = ecc_find_curve("SECP224R1", &cu);
69 }
70 else if (size <= 32) {
71 err = ecc_find_curve("SECP256R1", &cu);
72 }
73 else if (size <= 48) {
74 err = ecc_find_curve("SECP384R1", &cu);
75 }
76 else if (size <= 66) {
77 err = ecc_find_curve("SECP521R1", &cu);
78 }
79
80 if (err == CRYPT_OK && cu != NULL) return ecc_set_curve(cu, key);
81
82 return CRYPT_INVALID_ARG;
83 }
84
85 #endif
86
87 /* ref: $Format:%D$ */
88 /* git commit: $Format:%H$ */
89 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_MECC
12
13 static int _ecc_cmp_hex_bn(const char *left_hex, void *right_bn, void *tmp_bn)
14 {
15 if (mp_read_radix(tmp_bn, left_hex, 16) != CRYPT_OK) return 0;
16 if (mp_cmp(tmp_bn, right_bn) != LTC_MP_EQ) return 0;
17 return 1;
18 }
19
20 static void _ecc_oid_lookup(ecc_key *key)
21 {
22 void *bn;
23 const ltc_ecc_curve *curve;
24
25 key->dp.oidlen = 0;
26 if (mp_init(&bn) != CRYPT_OK) return;
27 for (curve = ltc_ecc_curves; curve->prime != NULL; curve++) {
28 if (_ecc_cmp_hex_bn(curve->prime, key->dp.prime, bn) != 1) continue;
29 if (_ecc_cmp_hex_bn(curve->order, key->dp.order, bn) != 1) continue;
30 if (_ecc_cmp_hex_bn(curve->A, key->dp.A, bn) != 1) continue;
31 if (_ecc_cmp_hex_bn(curve->B, key->dp.B, bn) != 1) continue;
32 if (_ecc_cmp_hex_bn(curve->Gx, key->dp.base.x, bn) != 1) continue;
33 if (_ecc_cmp_hex_bn(curve->Gy, key->dp.base.y, bn) != 1) continue;
34 if (key->dp.cofactor != curve->cofactor) continue;
35 break; /* found */
36 }
37 mp_clear(bn);
38 if (curve->prime && curve->OID) {
39 key->dp.oidlen = 16; /* size of key->dp.oid */
40 pk_oid_str_to_num(curve->OID, key->dp.oid, &key->dp.oidlen);
41 }
42 }
43
44 int ecc_copy_curve(const ecc_key *srckey, ecc_key *key)
45 {
46 unsigned long i;
47 int err;
48
49 LTC_ARGCHK(key != NULL);
50 LTC_ARGCHK(srckey != NULL);
51
52 if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B,
53 &key->dp.base.x, &key->dp.base.y, &key->dp.base.z,
54 &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k,
55 NULL)) != CRYPT_OK) {
56 return err;
57 }
58
59 /* A, B, order, prime, Gx, Gy */
60 if ((err = mp_copy(srckey->dp.prime, key->dp.prime )) != CRYPT_OK) { goto error; }
61 if ((err = mp_copy(srckey->dp.order, key->dp.order )) != CRYPT_OK) { goto error; }
62 if ((err = mp_copy(srckey->dp.A, key->dp.A )) != CRYPT_OK) { goto error; }
63 if ((err = mp_copy(srckey->dp.B, key->dp.B )) != CRYPT_OK) { goto error; }
64 if ((err = ltc_ecc_copy_point(&srckey->dp.base, &key->dp.base)) != CRYPT_OK) { goto error; }
65 /* cofactor & size */
66 key->dp.cofactor = srckey->dp.cofactor;
67 key->dp.size = srckey->dp.size;
68 /* OID */
69 if (srckey->dp.oidlen > 0) {
70 key->dp.oidlen = srckey->dp.oidlen;
71 for (i = 0; i < key->dp.oidlen; i++) key->dp.oid[i] = srckey->dp.oid[i];
72 }
73 else {
74 _ecc_oid_lookup(key); /* try to find OID in ltc_ecc_curves */
75 }
76 /* success */
77 return CRYPT_OK;
78
79 error:
80 ecc_free(key);
81 return err;
82 }
83
84 int ecc_set_curve_from_mpis(void *a, void *b, void *prime, void *order, void *gx, void *gy, unsigned long cofactor, ecc_key *key)
85 {
86 int err;
87
88 LTC_ARGCHK(key != NULL);
89 LTC_ARGCHK(a != NULL);
90 LTC_ARGCHK(b != NULL);
91 LTC_ARGCHK(prime != NULL);
92 LTC_ARGCHK(order != NULL);
93 LTC_ARGCHK(gx != NULL);
94 LTC_ARGCHK(gy != NULL);
95
96 if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B,
97 &key->dp.base.x, &key->dp.base.y, &key->dp.base.z,
98 &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k,
99 NULL)) != CRYPT_OK) {
100 return err;
101 }
102
103 /* A, B, order, prime, Gx, Gy */
104 if ((err = mp_copy(prime, key->dp.prime )) != CRYPT_OK) { goto error; }
105 if ((err = mp_copy(order, key->dp.order )) != CRYPT_OK) { goto error; }
106 if ((err = mp_copy(a, key->dp.A )) != CRYPT_OK) { goto error; }
107 if ((err = mp_copy(b, key->dp.B )) != CRYPT_OK) { goto error; }
108 if ((err = mp_copy(gx, key->dp.base.x)) != CRYPT_OK) { goto error; }
109 if ((err = mp_copy(gy, key->dp.base.y)) != CRYPT_OK) { goto error; }
110 if ((err = mp_set(key->dp.base.z, 1)) != CRYPT_OK) { goto error; }
111 /* cofactor & size */
112 key->dp.cofactor = cofactor;
113 key->dp.size = mp_unsigned_bin_size(prime);
114 /* try to find OID in ltc_ecc_curves */
115 _ecc_oid_lookup(key);
116 /* success */
117 return CRYPT_OK;
118
119 error:
120 ecc_free(key);
121 return err;
122 }
123
124 #endif
125
126 /* ref: $Format:%D$ */
127 /* git commit: $Format:%H$ */
128 /* commit time: $Format:%ai$ */
+0
-90
src/ltc/pk/ecc/ecc_set_dp.c less more
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_MECC
12
13 int ecc_set_dp(const ltc_ecc_curve *curve, ecc_key *key)
14 {
15 int err;
16
17 LTC_ARGCHK(key != NULL);
18 LTC_ARGCHK(curve != NULL);
19
20 if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B,
21 &key->dp.base.x, &key->dp.base.y, &key->dp.base.z,
22 &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k,
23 NULL)) != CRYPT_OK) {
24 return err;
25 }
26
27 /* A, B, order, prime, Gx, Gy */
28 if ((err = mp_read_radix(key->dp.prime, curve->prime, 16)) != CRYPT_OK) { goto error; }
29 if ((err = mp_read_radix(key->dp.order, curve->order, 16)) != CRYPT_OK) { goto error; }
30 if ((err = mp_read_radix(key->dp.A, curve->A, 16)) != CRYPT_OK) { goto error; }
31 if ((err = mp_read_radix(key->dp.B, curve->B, 16)) != CRYPT_OK) { goto error; }
32 if ((err = mp_read_radix(key->dp.base.x, curve->Gx, 16)) != CRYPT_OK) { goto error; }
33 if ((err = mp_read_radix(key->dp.base.y, curve->Gy, 16)) != CRYPT_OK) { goto error; }
34 if ((err = mp_set(key->dp.base.z, 1)) != CRYPT_OK) { goto error; }
35 /* cofactor & size */
36 key->dp.cofactor = curve->cofactor;
37 key->dp.size = mp_unsigned_bin_size(key->dp.prime);
38 /* OID string >> unsigned long oid[16] + oidlen */
39 key->dp.oidlen = 16;
40 if ((err = pk_oid_str_to_num(curve->OID, key->dp.oid, &key->dp.oidlen)) != CRYPT_OK) { goto error; }
41 /* success */
42 return CRYPT_OK;
43
44 error:
45 ecc_free(key);
46 return err;
47 }
48
49 int ecc_set_dp_by_size(int size, ecc_key *key)
50 {
51 const ltc_ecc_curve *cu = NULL;
52 int err = CRYPT_ERROR;
53
54 /* for compatibility with libtomcrypt-1.17 the sizes below must match the specific curves */
55 if (size <= 14) {
56 err = ecc_get_curve("SECP112R1", &cu);
57 }
58 else if (size <= 16) {
59 err = ecc_get_curve("SECP128R1", &cu);
60 }
61 else if (size <= 20) {
62 err = ecc_get_curve("SECP160R1", &cu);
63 }
64 else if (size <= 24) {
65 err = ecc_get_curve("SECP192R1", &cu);
66 }
67 else if (size <= 28) {
68 err = ecc_get_curve("SECP224R1", &cu);
69 }
70 else if (size <= 32) {
71 err = ecc_get_curve("SECP256R1", &cu);
72 }
73 else if (size <= 48) {
74 err = ecc_get_curve("SECP384R1", &cu);
75 }
76 else if (size <= 66) {
77 err = ecc_get_curve("SECP521R1", &cu);
78 }
79
80 if (err == CRYPT_OK && cu != NULL) return ecc_set_dp(cu, key);
81
82 return CRYPT_INVALID_ARG;
83 }
84
85 #endif
86
87 /* ref: $Format:%D$ */
88 /* git commit: $Format:%H$ */
89 /* commit time: $Format:%ai$ */
+0
-129
src/ltc/pk/ecc/ecc_set_dp_internal.c less more
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_MECC
12
13 static int _ecc_cmp_hex_bn(const char *left_hex, void *right_bn, void *tmp_bn)
14 {
15 if (mp_read_radix(tmp_bn, left_hex, 16) != CRYPT_OK) return 0;
16 if (mp_cmp(tmp_bn, right_bn) != LTC_MP_EQ) return 0;
17 return 1;
18 }
19
20 static void _ecc_oid_lookup(ecc_key *key)
21 {
22 void *bn;
23 const ltc_ecc_curve *curve;
24
25 key->dp.oidlen = 0;
26 if (mp_init(&bn) != CRYPT_OK) return;
27 for (curve = ltc_ecc_curves; curve->prime != NULL; curve++) {
28 if (_ecc_cmp_hex_bn(curve->prime, key->dp.prime, bn) != 1) continue;
29 if (_ecc_cmp_hex_bn(curve->order, key->dp.order, bn) != 1) continue;
30 if (_ecc_cmp_hex_bn(curve->A, key->dp.A, bn) != 1) continue;
31 if (_ecc_cmp_hex_bn(curve->B, key->dp.B, bn) != 1) continue;
32 if (_ecc_cmp_hex_bn(curve->Gx, key->dp.base.x, bn) != 1) continue;
33 if (_ecc_cmp_hex_bn(curve->Gy, key->dp.base.y, bn) != 1) continue;
34 if (key->dp.cofactor != curve->cofactor) continue;
35 break; /* found */
36 }
37 mp_clear(bn);
38 if (curve->prime && curve->OID) {
39 key->dp.oidlen = 16; /* size of key->dp.oid */
40 pk_oid_str_to_num(curve->OID, key->dp.oid, &key->dp.oidlen);
41 }
42 }
43
44 int ecc_copy_dp(const ecc_key *srckey, ecc_key *key)
45 {
46 unsigned long i;
47 int err;
48
49 LTC_ARGCHK(key != NULL);
50 LTC_ARGCHK(srckey != NULL);
51
52 if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B,
53 &key->dp.base.x, &key->dp.base.y, &key->dp.base.z,
54 &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k,
55 NULL)) != CRYPT_OK) {
56 return err;
57 }
58
59 /* A, B, order, prime, Gx, Gy */
60 if ((err = mp_copy(srckey->dp.prime, key->dp.prime )) != CRYPT_OK) { goto error; }
61 if ((err = mp_copy(srckey->dp.order, key->dp.order )) != CRYPT_OK) { goto error; }
62 if ((err = mp_copy(srckey->dp.A, key->dp.A )) != CRYPT_OK) { goto error; }
63 if ((err = mp_copy(srckey->dp.B, key->dp.B )) != CRYPT_OK) { goto error; }
64 if ((err = ltc_ecc_copy_point(&srckey->dp.base, &key->dp.base)) != CRYPT_OK) { goto error; }
65 /* cofactor & size */
66 key->dp.cofactor = srckey->dp.cofactor;
67 key->dp.size = srckey->dp.size;
68 /* OID */
69 if (srckey->dp.oidlen > 0) {
70 key->dp.oidlen = srckey->dp.oidlen;
71 for (i = 0; i < key->dp.oidlen; i++) key->dp.oid[i] = srckey->dp.oid[i];
72 }
73 else {
74 _ecc_oid_lookup(key); /* try to find OID in ltc_ecc_curves */
75 }
76 /* success */
77 return CRYPT_OK;
78
79 error:
80 ecc_free(key);
81 return err;
82 }
83
84 int ecc_set_dp_from_mpis(void *a, void *b, void *prime, void *order, void *gx, void *gy, unsigned long cofactor, ecc_key *key)
85 {
86 int err;
87
88 LTC_ARGCHK(key != NULL);
89 LTC_ARGCHK(a != NULL);
90 LTC_ARGCHK(b != NULL);
91 LTC_ARGCHK(prime != NULL);
92 LTC_ARGCHK(order != NULL);
93 LTC_ARGCHK(gx != NULL);
94 LTC_ARGCHK(gy != NULL);
95
96 if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B,
97 &key->dp.base.x, &key->dp.base.y, &key->dp.base.z,
98 &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k,
99 NULL)) != CRYPT_OK) {
100 return err;
101 }
102
103 /* A, B, order, prime, Gx, Gy */
104 if ((err = mp_copy(prime, key->dp.prime )) != CRYPT_OK) { goto error; }
105 if ((err = mp_copy(order, key->dp.order )) != CRYPT_OK) { goto error; }
106 if ((err = mp_copy(a, key->dp.A )) != CRYPT_OK) { goto error; }
107 if ((err = mp_copy(b, key->dp.B )) != CRYPT_OK) { goto error; }
108 if ((err = mp_copy(gx, key->dp.base.x)) != CRYPT_OK) { goto error; }
109 if ((err = mp_copy(gy, key->dp.base.y)) != CRYPT_OK) { goto error; }
110 if ((err = mp_set(key->dp.base.z, 1)) != CRYPT_OK) { goto error; }
111 /* cofactor & size */
112 key->dp.cofactor = cofactor;
113 key->dp.size = mp_unsigned_bin_size(prime);
114 /* try to find OID in ltc_ecc_curves */
115 _ecc_oid_lookup(key);
116 /* success */
117 return CRYPT_OK;
118
119 error:
120 ecc_free(key);
121 return err;
122 }
123
124 #endif
125
126 /* ref: $Format:%D$ */
127 /* git commit: $Format:%H$ */
128 /* commit time: $Format:%ai$ */
1515 ECC Crypto, Tom St Denis
1616 */
1717
18 static int _ecc_sign_hash(const unsigned char *in, unsigned long inlen,
19 unsigned char *out, unsigned long *outlen,
20 prng_state *prng, int wprng, const ecc_key *key, int sigformat)
18 /**
19 Sign a message digest
20 @param in The message digest to sign
21 @param inlen The length of the digest
22 @param out [out] The destination for the signature
23 @param outlen [in/out] The max size and resulting size of the signature
24 @param prng An active PRNG state
25 @param wprng The index of the PRNG you wish to use
26 @param sigformat The format of the signature to generate (ecc_signature_type)
27 @param recid [out] The recovery ID for this signature (optional)
28 @param key A private ECC key
29 @return CRYPT_OK if successful
30 */
31 int ecc_sign_hash_ex(const unsigned char *in, unsigned long inlen,
32 unsigned char *out, unsigned long *outlen,
33 prng_state *prng, int wprng, ecc_signature_type sigformat,
34 int *recid, const ecc_key *key)
2135 {
2236 ecc_key pubkey;
23 void *r, *s, *e, *p;
37 void *r, *s, *e, *p, *b;
38 int v = 0;
2439 int err, max_iterations = LTC_PK_MAX_RETRIES;
2540 unsigned long pbits, pbytes, i, shift_right;
2641 unsigned char ch, buf[MAXBLOCKSIZE];
3651 }
3752
3853 /* init the bignums */
39 if ((err = mp_init_multi(&r, &s, &e, NULL)) != CRYPT_OK) {
54 if ((err = mp_init_multi(&r, &s, &e, &b, NULL)) != CRYPT_OK) {
4055 return err;
4156 }
4257
6277
6378 /* make up a key and export the public copy */
6479 do {
65 if ((err = ecc_copy_dp(key, &pubkey)) != CRYPT_OK) { goto errnokey; }
80 if ((err = ecc_copy_curve(key, &pubkey)) != CRYPT_OK) { goto errnokey; }
6681 if ((err = ecc_generate_key(prng, wprng, &pubkey)) != CRYPT_OK) { goto errnokey; }
6782
6883 /* find r = x1 mod n */
6984 if ((err = mp_mod(pubkey.pubkey.x, p, r)) != CRYPT_OK) { goto error; }
7085
86 if (recid || sigformat==LTC_ECCSIG_ETH27) {
87 /* find recovery ID (if needed) */
88 v = 0;
89 if (mp_copy(pubkey.pubkey.x, s) != CRYPT_OK) { goto error; }
90 while (mp_cmp_d(s, 0) == LTC_MP_GT && mp_cmp(s, p) != LTC_MP_LT) {
91 /* Compute x1 div n... this will almost never be reached for curves with order 1 */
92 v += 2;
93 if ((err = mp_sub(s, p, s)) != CRYPT_OK) { goto error; }
94 }
95 if (mp_isodd(pubkey.pubkey.y)) v += 1;
96 }
97
7198 if (mp_iszero(r) == LTC_MP_YES) {
7299 ecc_free(&pubkey);
73100 } else {
101 if ((err = rand_bn_upto(b, p, prng, wprng)) != CRYPT_OK) { goto error; } /* b = blinding value */
74102 /* find s = (e + xr)/k */
75 if ((err = mp_invmod(pubkey.k, p, pubkey.k)) != CRYPT_OK) { goto error; } /* k = 1/k */
103 if ((err = mp_mulmod(pubkey.k, b, p, pubkey.k)) != CRYPT_OK) { goto error; } /* k = kb */
104 if ((err = mp_invmod(pubkey.k, p, pubkey.k)) != CRYPT_OK) { goto error; } /* k = 1/kb */
76105 if ((err = mp_mulmod(key->k, r, p, s)) != CRYPT_OK) { goto error; } /* s = xr */
77 if ((err = mp_add(e, s, s)) != CRYPT_OK) { goto error; } /* s = e + xr */
78 if ((err = mp_mod(s, p, s)) != CRYPT_OK) { goto error; } /* s = e + xr */
79 if ((err = mp_mulmod(s, pubkey.k, p, s)) != CRYPT_OK) { goto error; } /* s = (e + xr)/k */
106 if ((err = mp_mulmod(pubkey.k, s, p, s)) != CRYPT_OK) { goto error; } /* s = xr/kb */
107 if ((err = mp_mulmod(pubkey.k, e, p, e)) != CRYPT_OK) { goto error; } /* e = e/kb */
108 if ((err = mp_add(e, s, s)) != CRYPT_OK) { goto error; } /* s = e/kb + xr/kb */
109 if ((err = mp_mulmod(s, b, p, s)) != CRYPT_OK) { goto error; } /* s = b(e/kb + xr/kb) = (e + xr)/k */
80110 ecc_free(&pubkey);
81111 if (mp_iszero(s) == LTC_MP_NO) {
82112 break;
88118 goto errnokey;
89119 }
90120
91 if (sigformat == 1) {
92 /* RFC7518 format */
121 if (recid) *recid = v;
122
123 if (sigformat == LTC_ECCSIG_ANSIX962) {
124 /* store as ASN.1 SEQUENCE { r, s -- integer } */
125 err = der_encode_sequence_multi(out, outlen,
126 LTC_ASN1_INTEGER, 1UL, r,
127 LTC_ASN1_INTEGER, 1UL, s,
128 LTC_ASN1_EOL, 0UL, NULL);
129 }
130 else if (sigformat == LTC_ECCSIG_RFC7518) {
131 /* RFC7518 format - raw (r,s) */
93132 if (*outlen < 2*pbytes) { err = CRYPT_MEM; goto errnokey; }
94133 zeromem(out, 2*pbytes);
95134 i = mp_unsigned_bin_size(r);
99138 *outlen = 2*pbytes;
100139 err = CRYPT_OK;
101140 }
141 else if (sigformat == LTC_ECCSIG_ETH27) {
142 /* Ethereum (v,r,s) format */
143 if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) {
144 /* Only valid for secp256k1 - OID 1.3.132.0.10 */
145 err = CRYPT_ERROR; goto errnokey;
146 }
147 if (*outlen < 65) { err = CRYPT_MEM; goto errnokey; }
148 zeromem(out, 65);
149 i = mp_unsigned_bin_size(r);
150 if ((err = mp_to_unsigned_bin(r, out + 32 - i)) != CRYPT_OK) { goto errnokey; }
151 i = mp_unsigned_bin_size(s);
152 if ((err = mp_to_unsigned_bin(s, out + 64 - i)) != CRYPT_OK) { goto errnokey; }
153 out[64] = (unsigned char)(v + 27); /* Recovery ID is 27/28 for Ethereum */
154 *outlen = 65;
155 err = CRYPT_OK;
156 }
157 #ifdef LTC_SSH
158 else if (sigformat == LTC_ECCSIG_RFC5656) {
159 /* Get identifier string */
160 char name[64];
161 unsigned long namelen = sizeof(name);
162 if ((err = ecc_ssh_ecdsa_encode_name(name, &namelen, key)) != CRYPT_OK) { goto errnokey; }
163
164 /* Store as SSH data sequence, per RFC4251 */
165 err = ssh_encode_sequence_multi(out, outlen,
166 LTC_SSHDATA_STRING, name,
167 LTC_SSHDATA_MPINT, r,
168 LTC_SSHDATA_MPINT, s,
169 LTC_SSHDATA_EOL, NULL);
170 }
171 #endif
102172 else {
103 /* store as ASN.1 SEQUENCE { r, s -- integer } */
104 err = der_encode_sequence_multi(out, outlen,
105 LTC_ASN1_INTEGER, 1UL, r,
106 LTC_ASN1_INTEGER, 1UL, s,
107 LTC_ASN1_EOL, 0UL, NULL);
173 /* Unknown signature format */
174 err = CRYPT_ERROR;
175 goto error;
108176 }
177
109178 goto errnokey;
110179 error:
111180 ecc_free(&pubkey);
112181 errnokey:
113 mp_clear_multi(r, s, e, NULL);
182 mp_clear_multi(r, s, e, b, NULL);
114183 return err;
115 }
116
117 /**
118 Sign a message digest
119 @param in The message digest to sign
120 @param inlen The length of the digest
121 @param out [out] The destination for the signature
122 @param outlen [in/out] The max size and resulting size of the signature
123 @param prng An active PRNG state
124 @param wprng The index of the PRNG you wish to use
125 @param key A private ECC key
126 @return CRYPT_OK if successful
127 */
128 int ecc_sign_hash(const unsigned char *in, unsigned long inlen,
129 unsigned char *out, unsigned long *outlen,
130 prng_state *prng, int wprng, const ecc_key *key)
131 {
132 return _ecc_sign_hash(in, inlen, out, outlen, prng, wprng, key, 0);
133 }
134
135 /**
136 Sign a message digest in RFC7518 format
137 @param in The message digest to sign
138 @param inlen The length of the digest
139 @param out [out] The destination for the signature
140 @param outlen [in/out] The max size and resulting size of the signature
141 @param prng An active PRNG state
142 @param wprng The index of the PRNG you wish to use
143 @param key A private ECC key
144 @return CRYPT_OK if successful
145 */
146 int ecc_sign_hash_rfc7518(const unsigned char *in, unsigned long inlen,
147 unsigned char *out, unsigned long *outlen,
148 prng_state *prng, int wprng, const ecc_key *key)
149 {
150 return _ecc_sign_hash(in, inlen, out, outlen, prng, wprng, key, 1);
151184 }
152185
153186 #endif
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8 #include "tomcrypt_private.h"
9
10 /**
11 @file ecc_ssh_ecdsa_encode_name.c
12 Curve/OID to SSH+ECDSA name string mapping per RFC5656
13 Russ Williams
14 */
15
16 /**
17 Curve/OID to SSH+ECDSA name string mapping
18 @param buffer [out] The destination for the name
19 @param buflen [in/out] The max size and resulting size (including terminator) of the name
20 @param key A public or private ECC key
21 @return CRYPT_OK if successful
22 */
23 int ecc_ssh_ecdsa_encode_name(char *buffer, unsigned long *buflen, const ecc_key *key)
24 {
25 char oidstr[64];
26 unsigned long oidlen = sizeof(oidstr);
27 unsigned long size = 0;
28 int err;
29
30 LTC_ARGCHK(buffer != NULL);
31 LTC_ARGCHK(buflen != NULL);
32 LTC_ARGCHK(key != NULL);
33
34 /* Get the OID of the curve */
35 if ((err = ecc_get_oid_str(oidstr, &oidlen, key)) != CRYPT_OK) goto error;
36
37 /* Check for three named curves: nistp256, nistp384, nistp521 */
38 if (XSTRCMP("1.2.840.10045.3.1.7", oidstr) == 0) {
39 /* nistp256 - secp256r1 - OID 1.2.840.10045.3.1.7 */
40 size = snprintf(buffer, *buflen, "ecdsa-sha2-nistp256");
41 }
42 else if (XSTRCMP("1.3.132.0.34", oidstr) == 0) {
43 /* nistp384 - secp384r1 - OID 1.3.132.0.34 */
44 size = snprintf(buffer, *buflen, "ecdsa-sha2-nistp384");
45 }
46 else if (XSTRCMP("1.3.132.0.35", oidstr) == 0) {
47 /* nistp521 - secp521r1 - OID 1.3.132.0.35 */
48 size = snprintf(buffer, *buflen, "ecdsa-sha2-nistp521");
49 } else {
50 /* Otherwise we use the OID... */
51 size = snprintf(buffer, *buflen, "ecdsa-sha2-%s", oidstr);
52 }
53
54 /* snprintf returns size that would have been written, but limits to buflen-1 chars plus terminator */
55 if (size >= *buflen) {
56 err = CRYPT_BUFFER_OVERFLOW;
57 } else {
58 err = CRYPT_OK;
59 }
60 *buflen = size + 1; /* the string length + NUL byte */
61
62 error:
63 return err;
64 }
65
66
67 /* ref: $Format:%D$ */
68 /* git commit: $Format:%H$ */
69 /* commit time: $Format:%ai$ */
1515 ECC Crypto, Tom St Denis
1616 */
1717
18 static int _ecc_verify_hash(const unsigned char *sig, unsigned long siglen,
19 const unsigned char *hash, unsigned long hashlen,
20 int *stat, const ecc_key *key, int sigformat)
18 /**
19 Verify an ECC signature in RFC7518 format
20 @param sig The signature to verify
21 @param siglen The length of the signature (octets)
22 @param hash The hash (message digest) that was signed
23 @param hashlen The length of the hash (octets)
24 @param sigformat The format of the signature (ecc_signature_type)
25 @param stat Result of signature, 1==valid, 0==invalid
26 @param key The corresponding public ECC key
27 @return CRYPT_OK if successful (even if the signature is not valid)
28 */
29 int ecc_verify_hash_ex(const unsigned char *sig, unsigned long siglen,
30 const unsigned char *hash, unsigned long hashlen,
31 ecc_signature_type sigformat, int *stat, const ecc_key *key)
2132 {
22 ecc_point *mG = NULL, *mQ = NULL;
23 void *r, *s, *v, *w, *u1, *u2, *e, *p, *m, *a, *a_plus3 = NULL, *mu = NULL, *ma = NULL;
33 ecc_point *mG = NULL, *mQ = NULL;
34 void *r, *s, *v, *w, *u1, *u2, *e, *p, *m, *a, *a_plus3;
35 void *mu = NULL, *ma = NULL;
2436 void *mp = NULL;
2537 int err;
2638 unsigned long pbits, pbytes, i, shift_right;
5466 goto error;
5567 }
5668
57 if (sigformat == 1) {
58 /* RFC7518 format */
59 if ((siglen % 2) == 1) {
60 err = CRYPT_INVALID_PACKET;
61 goto error;
62 }
63 i = siglen / 2;
64 if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, i)) != CRYPT_OK) { goto error; }
65 if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig+i, i)) != CRYPT_OK) { goto error; }
66 }
67 else {
68 /* ASN.1 format */
69 if (sigformat == LTC_ECCSIG_ANSIX962) {
70 /* ANSI X9.62 format - ASN.1 encoded SEQUENCE{ INTEGER(r), INTEGER(s) } */
6971 if ((err = der_decode_sequence_multi_ex(sig, siglen, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_STRICT,
7072 LTC_ASN1_INTEGER, 1UL, r,
7173 LTC_ASN1_INTEGER, 1UL, s,
7274 LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { goto error; }
75 }
76 else if (sigformat == LTC_ECCSIG_RFC7518) {
77 /* RFC7518 format - raw (r,s) */
78 i = mp_unsigned_bin_size(key->dp.order);
79 if (siglen != (2 * i)) {
80 err = CRYPT_INVALID_PACKET;
81 goto error;
82 }
83 if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, i)) != CRYPT_OK) { goto error; }
84 if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig+i, i)) != CRYPT_OK) { goto error; }
85 }
86 else if (sigformat == LTC_ECCSIG_ETH27) {
87 /* Ethereum (v,r,s) format */
88 if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) {
89 /* Only valid for secp256k1 - OID 1.3.132.0.10 */
90 err = CRYPT_ERROR; goto error;
91 }
92 if (siglen != 65) { /* Only secp256k1 curves use this format, so must be 65 bytes long */
93 err = CRYPT_INVALID_PACKET;
94 goto error;
95 }
96 if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, 32)) != CRYPT_OK) { goto error; }
97 if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig+32, 32)) != CRYPT_OK) { goto error; }
98 }
99 #ifdef LTC_SSH
100 else if (sigformat == LTC_ECCSIG_RFC5656) {
101 char name[64], name2[64];
102 unsigned long namelen = sizeof(name2);
103
104 /* Decode as SSH data sequence, per RFC4251 */
105 if ((err = ssh_decode_sequence_multi(sig, siglen,
106 LTC_SSHDATA_STRING, name, 64,
107 LTC_SSHDATA_MPINT, r,
108 LTC_SSHDATA_MPINT, s,
109 LTC_SSHDATA_EOL, NULL)) != CRYPT_OK) { goto error; }
110
111
112 /* Check curve matches identifier string */
113 if ((err = ecc_ssh_ecdsa_encode_name(name2, &namelen, key)) != CRYPT_OK) { goto error; }
114 if (XSTRCMP(name,name2) != 0) {
115 err = CRYPT_INVALID_ARG;
116 goto error;
117 }
118 }
119 #endif
120 else {
121 /* Unknown signature format */
122 err = CRYPT_ERROR;
123 goto error;
73124 }
74125
75126 /* check for zero */
152203 if (mu != NULL) mp_clear(mu);
153204 if (ma != NULL) mp_clear(ma);
154205 mp_clear_multi(r, s, v, w, u1, u2, e, a_plus3, NULL);
155 if (mp != NULL) {
156 mp_montgomery_free(mp);
157 }
206 if (mp != NULL) mp_montgomery_free(mp);
158207 return err;
159 }
160
161 /**
162 Verify an ECC signature
163 @param sig The signature to verify
164 @param siglen The length of the signature (octets)
165 @param hash The hash (message digest) that was signed
166 @param hashlen The length of the hash (octets)
167 @param stat Result of signature, 1==valid, 0==invalid
168 @param key The corresponding public ECC key
169 @return CRYPT_OK if successful (even if the signature is not valid)
170 */
171 int ecc_verify_hash(const unsigned char *sig, unsigned long siglen,
172 const unsigned char *hash, unsigned long hashlen,
173 int *stat, const ecc_key *key)
174 {
175 return _ecc_verify_hash(sig, siglen, hash, hashlen, stat, key, 0);
176 }
177
178 /**
179 Verify an ECC signature in RFC7518 format
180 @param sig The signature to verify
181 @param siglen The length of the signature (octets)
182 @param hash The hash (message digest) that was signed
183 @param hashlen The length of the hash (octets)
184 @param stat Result of signature, 1==valid, 0==invalid
185 @param key The corresponding public ECC key
186 @return CRYPT_OK if successful (even if the signature is not valid)
187 */
188 int ecc_verify_hash_rfc7518(const unsigned char *sig, unsigned long siglen,
189 const unsigned char *hash, unsigned long hashlen,
190 int *stat, const ecc_key *key)
191 {
192 return _ecc_verify_hash(sig, siglen, hash, hashlen, stat, key, 1);
193208 }
194209
195210 #endif
4343
4444 /* test y^2 == x^3 */
4545 err = CRYPT_OK;
46 if ((mp_cmp(x3, y2) == LTC_MP_EQ) && !mp_iszero(y2))
46 if ((mp_cmp(x3, y2) == LTC_MP_EQ) && !mp_iszero(y2)) {
4747 *retval = 1;
48 else
48 } else {
4949 *retval = 0;
50 }
5051
5152 cleanup:
5253 mp_clear_multi(x3, y2, NULL);
2525 int rsa_export(unsigned char *out, unsigned long *outlen, int type, const rsa_key *key)
2626 {
2727 unsigned long zero=0;
28 int err;
28 int err, std;
2929 LTC_ARGCHK(out != NULL);
3030 LTC_ARGCHK(outlen != NULL);
3131 LTC_ARGCHK(key != NULL);
3232
33 /* type valid? */
34 if (!(key->type == PK_PRIVATE) && (type == PK_PRIVATE)) {
35 return CRYPT_PK_INVALID_TYPE;
33 std = type & PK_STD;
34 type &= ~PK_STD;
35
36 if (type == PK_PRIVATE && key->type != PK_PRIVATE) {
37 return CRYPT_PK_TYPE_MISMATCH;
3638 }
3739
3840 if (type == PK_PRIVATE) {
5153 LTC_ASN1_INTEGER, 1UL, key->dQ,
5254 LTC_ASN1_INTEGER, 1UL, key->qP,
5355 LTC_ASN1_EOL, 0UL, NULL);
54 } else {
56 }
57
58 if (type == PK_PUBLIC) {
5559 /* public key */
5660 unsigned long tmplen, *ptmplen;
5761 unsigned char* tmp = NULL;
5862
59 if (type & PK_STD) {
63 if (std) {
6064 tmplen = (unsigned long)(mp_count_bits(key->N) / 8) * 2 + 8;
6165 tmp = XMALLOC(tmplen);
6266 ptmplen = &tmplen;
7478 LTC_ASN1_INTEGER, 1UL, key->e,
7579 LTC_ASN1_EOL, 0UL, NULL);
7680
77 if ((err != CRYPT_OK) || !(type & PK_STD)) {
81 if ((err != CRYPT_OK) || !std) {
7882 goto finish;
7983 }
8084
8286 PKA_RSA, tmp, tmplen, LTC_ASN1_NULL, NULL, 0);
8387
8488 finish:
85 if (tmp != out)
86 XFREE(tmp);
89 if (tmp != out) XFREE(tmp);
8790 return err;
91 }
8892
89 }
93 return CRYPT_INVALID_ARG;
9094 }
9195
9296 #endif /* LTC_MRSA */
115115 mp_clear_multi(key->d, key->e, key->N, key->dQ, key->dP, key->qP, key->p, key->q, NULL);
116116
117117 LBL_FREE:
118 if (tmpbuf != NULL)
119 XFREE(tmpbuf);
120
118 if (tmpbuf != NULL) {
119 XFREE(tmpbuf);
120 }
121121 return err;
122122 }
123123
5555 unsigned char *buf1 = NULL, *buf2 = NULL;
5656 unsigned long buf1len, buf2len;
5757 unsigned long oid[16];
58 oid_st rsaoid;
58 const char *rsaoid;
5959 ltc_asn1_list alg_seq[2], top_seq[3];
60 ltc_asn1_list alg_seq_e[2], key_seq_e[2], top_seq_e[2];
60 ltc_asn1_list *l = NULL;
6161 unsigned char *decrypted = NULL;
6262 unsigned long decryptedlen;
6363
8282 if (err != CRYPT_OK) { goto LBL_FREE2; }
8383
8484 /* try to decode encrypted priv key */
85 LTC_SET_ASN1(key_seq_e, 0, LTC_ASN1_OCTET_STRING, buf1, buf1len);
86 LTC_SET_ASN1(key_seq_e, 1, LTC_ASN1_INTEGER, iter, 1UL);
87 LTC_SET_ASN1(alg_seq_e, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, 16UL);
88 LTC_SET_ASN1(alg_seq_e, 1, LTC_ASN1_SEQUENCE, key_seq_e, 2UL);
89 LTC_SET_ASN1(top_seq_e, 0, LTC_ASN1_SEQUENCE, alg_seq_e, 2UL);
90 LTC_SET_ASN1(top_seq_e, 1, LTC_ASN1_OCTET_STRING, buf2, buf2len);
91 err=der_decode_sequence(in, inlen, top_seq_e, 2UL);
92 if (err == CRYPT_OK) {
93 LTC_UNUSED_PARAM(passwd);
94 LTC_UNUSED_PARAM(passwdlen);
95 /* XXX: TODO encrypted pkcs8 not implemented yet */
96 /* 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); */
97 err = CRYPT_PK_INVALID_TYPE;
85 if ((err = pkcs8_decode_flexi(in, inlen, passwd, passwdlen, &l)) != CRYPT_OK) {
9886 goto LBL_ERR;
9987 }
100 else {
101 decrypted = (unsigned char *)in;
102 decryptedlen = inlen;
103 }
88 decrypted = l->data;
89 decryptedlen = l->size;
10490
10591 /* try to decode unencrypted priv key */
10692 LTC_SET_ASN1(alg_seq, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, 16UL);
11298 if (err != CRYPT_OK) { goto LBL_ERR; }
11399
114100 /* check alg oid */
115 if ((alg_seq[0].size != rsaoid.OIDlen) ||
116 XMEMCMP(rsaoid.OID, alg_seq[0].data, rsaoid.OIDlen * sizeof(rsaoid.OID[0])) != 0) {
117 err = CRYPT_PK_INVALID_TYPE;
101 if ((err = pk_oid_cmp_with_asn1(rsaoid, &alg_seq[0])) != CRYPT_OK) {
118102 goto LBL_ERR;
119103 }
120104
137121 LBL_ERR:
138122 rsa_free(key);
139123 LBL_FREE2:
124 if (l) der_free_sequence_flexi(l);
140125 mp_clear_multi(iter, zero, NULL);
141126 XFREE(buf2);
142127 LBL_FREE1:
107107
108108 #ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED
109109 ulong64 now = _fortuna_current_time();
110 if (now == prng->u.fortuna.wd)
110 if (now == prng->u.fortuna.wd) {
111111 return CRYPT_OK;
112 }
112113 #else
113 if (++prng->u.fortuna.wd < LTC_FORTUNA_WD)
114 if (++prng->u.fortuna.wd < LTC_FORTUNA_WD) {
114115 return CRYPT_OK;
116 }
115117 #endif
116118
117119 /* new K == LTC_SHA256(K || s) where s == LTC_SHA256(P0) || LTC_SHA256(P1) ... */
2929 LTC_UNUSED_PARAM(callback);
3030 #ifdef LTC_TRY_URANDOM_FIRST
3131 f = fopen("/dev/urandom", "rb");
32 if (f == NULL)
32 if (f == NULL) {
33 f = fopen("/dev/random", "rb");
34 }
35 #else
36 f = fopen("/dev/random", "rb");
3337 #endif /* LTC_TRY_URANDOM_FIRST */
34 f = fopen("/dev/random", "rb");
3538
3639 if (f == NULL) {
3740 return 0;
101101 @param prng The PRNG to export
102102 @return CRYPT_OK if successful
103103 */
104 /* NOLINTNEXTLINE(readability-non-const-parameter) - silence clang-tidy warning */
104105 int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng)
105106 {
106107 LTC_ARGCHK(outlen != NULL);
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_CHACHA
12
13 /**
14 Encrypt (or decrypt) bytes of ciphertext (or plaintext) with ChaCha
15 @param key The key
16 @param keylen The key length
17 @param iv The initial vector
18 @param ivlen The initial vector length
19 @param datain The plaintext (or ciphertext)
20 @param datalen The length of the input and output (octets)
21 @param rounds The number of rounds
22 @param dataout [out] The ciphertext (or plaintext)
23 @return CRYPT_OK if successful
24 */
25 int chacha_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds,
26 const unsigned char *iv, unsigned long ivlen, ulong64 counter,
27 const unsigned char *datain, unsigned long datalen, unsigned char *dataout)
28 {
29 chacha_state st;
30 int err;
31
32 LTC_ARGCHK(ivlen <= 8 || counter < 4294967296); /* 2**32 */
33
34 if ((err = chacha_setup(&st, key, keylen, rounds)) != CRYPT_OK) goto WIPE_KEY;
35 if (ivlen > 8) {
36 if ((err = chacha_ivctr32(&st, iv, ivlen, counter)) != CRYPT_OK) goto WIPE_KEY;
37 } else {
38 if ((err = chacha_ivctr64(&st, iv, ivlen, counter)) != CRYPT_OK) goto WIPE_KEY;
39 }
40 err = chacha_crypt(&st, datain, datalen, dataout);
41 WIPE_KEY:
42 chacha_done(&st);
43 return err;
44 }
45
46 #endif /* LTC_CHACHA */
47
48 /* ref: $Format:%D$ */
49 /* git commit: $Format:%H$ */
50 /* commit time: $Format:%ai$ */
9898 ulong32 g[8], c_old[8], i;
9999
100100 /* Save old counter values */
101 for (i=0; i<8; i++)
101 for (i=0; i<8; i++) {
102102 c_old[i] = p_instance->c[i];
103 }
103104
104105 /* Calculate new counter values */
105106 p_instance->c[0] = (ulong32)(p_instance->c[0] + 0x4D34D34D + p_instance->carry);
113114 p_instance->carry = (p_instance->c[7] < c_old[7]);
114115
115116 /* Calculate the g-values */
116 for (i=0;i<8;i++)
117 for (i=0;i<8;i++) {
117118 g[i] = _rabbit_g_func((ulong32)(p_instance->x[i] + p_instance->c[i]));
119 }
118120
119121 /* Calculate new state values */
120122 p_instance->x[0] = (ulong32)(g[0] + ROLc(g[7],16) + ROLc(g[6], 16));
197199 st->master_ctx.carry = 0;
198200
199201 /* Iterate the master context four times */
200 for (i=0; i<4; i++)
202 for (i=0; i<4; i++) {
201203 _rabbit_next_state(&(st->master_ctx));
204 }
202205
203206 /* Modify the counters */
204 for (i=0; i<8; i++)
207 for (i=0; i<8; i++) {
205208 st->master_ctx.c[i] ^= st->master_ctx.x[(i+4)&0x7];
209 }
206210
207211 /* Copy master instance to work instance */
208212 for (i=0; i<8; i++) {
249253 st->work_ctx.c[7] = st->master_ctx.c[7] ^ i3;
250254
251255 /* Copy state variables */
252 for (i=0; i<8; i++)
256 for (i=0; i<8; i++) {
253257 st->work_ctx.x[i] = st->master_ctx.x[i];
258 }
254259 st->work_ctx.carry = st->master_ctx.carry;
255260
256261 /* Iterate the work context four times */
257 for (i=0; i<4; i++)
262 for (i=0; i<4; i++) {
258263 _rabbit_next_state(&(st->work_ctx));
264 }
259265
260266 /* reset keystream buffer and unused count */
261267 XMEMSET(&(st->block), 0, sizeof(st->block));
296302 /* copy remainder to block */
297303 for (i = inlen; i < 16; ++i) st->block[i] = buf[i];
298304 return CRYPT_OK;
299 } else {
300 /* XOR entire buf and send to out */
301 for (i = 0; i < 16; ++i) out[i] = in[i] ^ buf[i];
302 inlen -= 16;
303 out += 16;
304 in += 16;
305305 }
306 /* XOR entire buf and send to out */
307 for (i = 0; i < 16; ++i) out[i] = in[i] ^ buf[i];
308 inlen -= 16;
309 out += 16;
310 in += 16;
306311 }
307312 }
308313
415420 if ((err = rabbit_crypt(&st, (unsigned char*)pt + 5, 29, out + 5)) != CRYPT_OK) return err;
416421 if ((err = rabbit_crypt(&st, (unsigned char*)pt + 34, 5, out + 34)) != CRYPT_OK) return err;
417422 if (compare_testvector(out, ptlen, ct, ptlen, "RABBIT-TV3", 1)) return CRYPT_FAIL_TESTVECTOR;
423
424 /* --- Test 4 (crypt in a single call) ------------------------------------ */
425
426 if ((err = rabbit_memory(k, sizeof(k), iv, sizeof(iv),
427 (unsigned char*)pt, sizeof(pt), out)) != CRYPT_OK) return err;
428 if (compare_testvector(out, ptlen, ct, ptlen, "RABBIT-TV4", 1)) return CRYPT_FAIL_TESTVECTOR;
418429 /* use 'out' (ciphertext) in the next decryption test */
419430
420 /* --- Test 4 (decrypt ciphertext) ------------------------------------ */
431 /* --- Test 5 (decrypt ciphertext) ------------------------------------ */
421432
422433 /* decrypt ct (out) and compare with pt (start with only setiv() to reset) */
423434 if ((err = rabbit_setiv(&st, iv, sizeof(iv))) != CRYPT_OK) return err;
424435 if ((err = rabbit_crypt(&st, out, ptlen, out2)) != CRYPT_OK) return err;
425 if (compare_testvector(out2, ptlen, pt, ptlen, "RABBIT-TV4", 1)) return CRYPT_FAIL_TESTVECTOR;
426
427 /* --- Test 5 (wipe state, incl key) ---------------------------------- */
436 if (compare_testvector(out2, ptlen, pt, ptlen, "RABBIT-TV5", 1)) return CRYPT_FAIL_TESTVECTOR;
437
438 /* --- Test 6 (wipe state, incl key) ---------------------------------- */
428439
429440 if ((err = rabbit_done(&st)) != CRYPT_OK) return err;
430 if (compare_testvector(&st, sizeof(st), nulls, sizeof(st), "RABBIT-TV5", 1)) return CRYPT_FAIL_TESTVECTOR;
441 if (compare_testvector(&st, sizeof(st), nulls, sizeof(st), "RABBIT-TV6", 1)) return CRYPT_FAIL_TESTVECTOR;
431442
432443 }
433444
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 /* The implementation is based on:
10 * chacha-ref.c version 20080118
11 * Public domain from D. J. Bernstein
12 */
13
14 #include "tomcrypt_private.h"
15
16 #ifdef LTC_RABBIT
17
18 /**
19 Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Rabbit
20 @param key The key
21 @param keylen The key length
22 @param iv The initial vector
23 @param ivlen The initial vector length
24 @param datain The plaintext (or ciphertext)
25 @param datalen The length of the input and output (octets)
26 @param dataout [out] The ciphertext (or plaintext)
27 @return CRYPT_OK if successful
28 */
29 int rabbit_memory(const unsigned char *key, unsigned long keylen,
30 const unsigned char *iv, unsigned long ivlen,
31 const unsigned char *datain, unsigned long datalen,
32 unsigned char *dataout)
33 {
34 rabbit_state st;
35 int err;
36
37 if ((err = rabbit_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY;
38 if ((err = rabbit_setiv(&st, iv, ivlen)) != CRYPT_OK) goto WIPE_KEY;
39 err = rabbit_crypt(&st, datain, datalen, dataout);
40 WIPE_KEY:
41 rabbit_done(&st);
42 return err;
43 }
44
45 #endif /* LTC_RABBIT */
46
47 /* ref: $Format:%D$ */
48 /* git commit: $Format:%H$ */
49 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_RC4_STREAM
12
13 /**
14 Encrypt (or decrypt) bytes of ciphertext (or plaintext) with RC4
15 @param key The key
16 @param keylen The key length
17 @param datain The plaintext (or ciphertext)
18 @param datalen The length of the input and output (octets)
19 @param dataout [out] The ciphertext (or plaintext)
20 @return CRYPT_OK if successful
21 */
22 int rc4_stream_memory(const unsigned char *key, unsigned long keylen,
23 const unsigned char *datain, unsigned long datalen,
24 unsigned char *dataout)
25 {
26 rc4_state st;
27 int err;
28
29 if ((err = rc4_stream_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY;
30 err = rc4_stream_crypt(&st, datain, datalen, dataout);
31 WIPE_KEY:
32 rc4_stream_done(&st);
33 return err;
34 }
35
36 #endif /* LTC_RC4_STREAM */
37
38 /* ref: $Format:%D$ */
39 /* git commit: $Format:%H$ */
40 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_SALSA20
12
13 /**
14 Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Salsa20
15 @param key The key
16 @param keylen The key length
17 @param iv The initial vector
18 @param ivlen The initial vector length
19 @param datain The plaintext (or ciphertext)
20 @param datalen The length of the input and output (octets)
21 @param rounds The number of rounds
22 @param dataout [out] The ciphertext (or plaintext)
23 @return CRYPT_OK if successful
24 */
25 int salsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds,
26 const unsigned char *iv, unsigned long ivlen, ulong64 counter,
27 const unsigned char *datain, unsigned long datalen, unsigned char *dataout)
28 {
29 salsa20_state st;
30 int err;
31
32 if ((err = salsa20_setup(&st, key, keylen, rounds)) != CRYPT_OK) goto WIPE_KEY;
33 if ((err = salsa20_ivctr64(&st, iv, ivlen, counter)) != CRYPT_OK) goto WIPE_KEY;
34 err = salsa20_crypt(&st, datain, datalen, dataout);
35 WIPE_KEY:
36 salsa20_done(&st);
37 return err;
38 }
39
40 #endif /* LTC_SALSA20 */
41
42 /* ref: $Format:%D$ */
43 /* git commit: $Format:%H$ */
44 /* commit time: $Format:%ai$ */
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_XSALSA20
12
13 /**
14 Encrypt (or decrypt) bytes of ciphertext (or plaintext) with XSalsa20
15 @param key The key
16 @param keylen The key length
17 @param nonce The initial vector
18 @param noncelen The initial vector length
19 @param datain The plaintext (or ciphertext)
20 @param datalen The length of the input and output (octets)
21 @param rounds The number of rounds
22 @param dataout [out] The ciphertext (or plaintext)
23 @return CRYPT_OK if successful
24 */
25 int xsalsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds,
26 const unsigned char *nonce, unsigned long noncelen,
27 const unsigned char *datain, unsigned long datalen, unsigned char *dataout)
28 {
29 salsa20_state st;
30 int err;
31
32 if ((err = xsalsa20_setup(&st, key, keylen, nonce, noncelen, rounds)) != CRYPT_OK) goto WIPE_KEY;
33 err = salsa20_crypt(&st, datain, datalen, dataout);
34 WIPE_KEY:
35 salsa20_done(&st);
36 return err;
37 }
38
39 #endif /* LTC_XSALSA20 */
40
41 /* ref: $Format:%D$ */
42 /* git commit: $Format:%H$ */
43 /* commit time: $Format:%ai$ */
2020
2121 /* don't change these... */
2222 #define N 17
23 #define FOLD N /* how many iterations of folding to do */
2423 #define INITKONST 0x6996c53a /* value of KONST to use during key loading */
2524 #define KEYP 15 /* where to insert key words */
2625 #define FOLDP 4 /* where to insert non-linear feedback */
27
28 #define B(x,i) ((unsigned char)(((x) >> (8*i)) & 0xFF))
2926
3027 static ulong32 BYTE2WORD(const unsigned char *b)
3128 {
6764
6865 /* Return a non-linear function of some parts of the register.
6966 */
70 #define NLFUNC(c,z) \
67 #define NLFUNC(st,z) \
7168 { \
72 t = c->R[OFF(z,0)] + c->R[OFF(z,16)]; \
69 t = st->R[OFF(z,0)] + st->R[OFF(z,16)]; \
7370 t ^= Sbox[(t >> 24) & 0xFF]; \
7471 t = RORc(t, 8); \
75 t = ((t + c->R[OFF(z,1)]) ^ c->konst) + c->R[OFF(z,6)]; \
72 t = ((t + st->R[OFF(z,1)]) ^ st->konst) + st->R[OFF(z,6)]; \
7673 t ^= Sbox[(t >> 24) & 0xFF]; \
77 t = t + c->R[OFF(z,13)]; \
78 }
79
80 static ulong32 nltap(const sober128_state *c)
74 t = t + st->R[OFF(z,13)]; \
75 }
76
77 static ulong32 nltap(const sober128_state *st)
8178 {
8279 ulong32 t;
83 NLFUNC(c, 0);
80 NLFUNC(st, 0);
8481 return t;
8582 }
8683
8784 /* Save the current register state
8885 */
89 static void s128_savestate(sober128_state *c)
86 static void s128_savestate(sober128_state *st)
9087 {
9188 int i;
9289 for (i = 0; i < N; ++i) {
93 c->initR[i] = c->R[i];
90 st->initR[i] = st->R[i];
9491 }
9592 }
9693
9794 /* initialise to previously saved register state
9895 */
99 static void s128_reloadstate(sober128_state *c)
96 static void s128_reloadstate(sober128_state *st)
10097 {
10198 int i;
10299
103100 for (i = 0; i < N; ++i) {
104 c->R[i] = c->initR[i];
101 st->R[i] = st->initR[i];
105102 }
106103 }
107104
108105 /* Initialise "konst"
109106 */
110 static void s128_genkonst(sober128_state *c)
107 static void s128_genkonst(sober128_state *st)
111108 {
112109 ulong32 newkonst;
113110
114111 do {
115 cycle(c->R);
116 newkonst = nltap(c);
112 cycle(st->R);
113 newkonst = nltap(st);
117114 } while ((newkonst & 0xFF000000) == 0);
118 c->konst = newkonst;
115 st->konst = newkonst;
119116 }
120117
121118 /* Load key material into the register
122119 */
123120 #define ADDKEY(k) \
124 c->R[KEYP] += (k);
121 st->R[KEYP] += (k);
125122
126123 #define XORNL(nl) \
127 c->R[FOLDP] ^= (nl);
124 st->R[FOLDP] ^= (nl);
128125
129126 /* nonlinear diffusion of register for key */
130 #define DROUND(z) STEP(c->R,z); NLFUNC(c,(z+1)); c->R[OFF((z+1),FOLDP)] ^= t;
131 static void s128_diffuse(sober128_state *c)
127 #define DROUND(z) STEP(st->R,z); NLFUNC(st,(z+1)); st->R[OFF((z+1),FOLDP)] ^= t;
128 static void s128_diffuse(sober128_state *st)
132129 {
133130 ulong32 t;
134131 /* relies on FOLD == N == 17! */
153150
154151 /**
155152 Initialize an Sober128 context (only the key)
156 @param c [out] The destination of the Sober128 state
153 @param st [out] The destination of the Sober128 state
157154 @param key The secret key
158155 @param keylen The length of the secret key (octets)
159156 @return CRYPT_OK if successful
160157 */
161 int sober128_stream_setup(sober128_state *c, const unsigned char *key, unsigned long keylen)
158 int sober128_stream_setup(sober128_state *st, const unsigned char *key, unsigned long keylen)
162159 {
163160 ulong32 i, k;
164161
165 LTC_ARGCHK(c != NULL);
162 LTC_ARGCHK(st != NULL);
166163 LTC_ARGCHK(key != NULL);
167164 LTC_ARGCHK(keylen > 0);
168165
172169 }
173170
174171 /* Register initialised to Fibonacci numbers */
175 c->R[0] = 1;
176 c->R[1] = 1;
172 st->R[0] = 1;
173 st->R[1] = 1;
177174 for (i = 2; i < N; ++i) {
178 c->R[i] = c->R[i-1] + c->R[i-2];
179 }
180 c->konst = INITKONST;
175 st->R[i] = st->R[i-1] + st->R[i-2];
176 }
177 st->konst = INITKONST;
181178
182179 for (i = 0; i < keylen; i += 4) {
183180 k = BYTE2WORD((unsigned char *)&key[i]);
184181 ADDKEY(k);
185 cycle(c->R);
186 XORNL(nltap(c));
182 cycle(st->R);
183 XORNL(nltap(st));
187184 }
188185
189186 /* also fold in the length of the key */
190187 ADDKEY(keylen);
191188
192189 /* now diffuse */
193 s128_diffuse(c);
194 s128_genkonst(c);
195 s128_savestate(c);
196 c->nbuf = 0;
190 s128_diffuse(st);
191 s128_genkonst(st);
192 s128_savestate(st);
193 st->nbuf = 0;
197194
198195 return CRYPT_OK;
199196 }
200197
201198 /**
202199 Set IV to the Sober128 state
203 @param c The Sober12820 state
200 @param st The Sober12820 state
204201 @param iv The IV data to add
205202 @param ivlen The length of the IV (must be 12)
206203 @return CRYPT_OK on success
207204 */
208 int sober128_stream_setiv(sober128_state *c, const unsigned char *iv, unsigned long ivlen)
205 int sober128_stream_setiv(sober128_state *st, const unsigned char *iv, unsigned long ivlen)
209206 {
210207 ulong32 i, k;
211208
212 LTC_ARGCHK(c != NULL);
209 LTC_ARGCHK(st != NULL);
213210 LTC_ARGCHK(iv != NULL);
214211 LTC_ARGCHK(ivlen > 0);
215212
216213 /* ok we are adding an IV then... */
217 s128_reloadstate(c);
214 s128_reloadstate(st);
218215
219216 /* ivlen must be multiple of 4 bytes */
220217 if ((ivlen & 3) != 0) {
224221 for (i = 0; i < ivlen; i += 4) {
225222 k = BYTE2WORD((unsigned char *)&iv[i]);
226223 ADDKEY(k);
227 cycle(c->R);
228 XORNL(nltap(c));
224 cycle(st->R);
225 XORNL(nltap(st));
229226 }
230227
231228 /* also fold in the length of the key */
232229 ADDKEY(ivlen);
233230
234231 /* now diffuse */
235 s128_diffuse(c);
236 c->nbuf = 0;
232 s128_diffuse(st);
233 st->nbuf = 0;
237234
238235 return CRYPT_OK;
239236 }
240237
241238 /* XOR pseudo-random bytes into buffer
242239 */
243 #define SROUND(z) STEP(c->R,z); NLFUNC(c,(z+1)); XORWORD(t, in+(z*4), out+(z*4));
240 #define SROUND(z) STEP(st->R,z); NLFUNC(st,(z+1)); XORWORD(t, in+(z*4), out+(z*4));
244241
245242 /**
246243 Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Sober128
247 @param c The Sober128 state
244 @param st The Sober128 state
248245 @param in The plaintext (or ciphertext)
249246 @param inlen The length of the input (octets)
250247 @param out [out] The ciphertext (or plaintext), length inlen
251248 @return CRYPT_OK if successful
252249 */
253 int sober128_stream_crypt(sober128_state *c, const unsigned char *in, unsigned long inlen, unsigned char *out)
250 int sober128_stream_crypt(sober128_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out)
254251 {
255252 ulong32 t;
256253
257254 if (inlen == 0) return CRYPT_OK; /* nothing to do */
258255 LTC_ARGCHK(out != NULL);
259 LTC_ARGCHK(c != NULL);
256 LTC_ARGCHK(st != NULL);
260257
261258 /* handle any previously buffered bytes */
262 while (c->nbuf != 0 && inlen != 0) {
263 *out++ = *in++ ^ (unsigned char)(c->sbuf & 0xFF);
264 c->sbuf >>= 8;
265 c->nbuf -= 8;
259 while (st->nbuf != 0 && inlen != 0) {
260 *out++ = *in++ ^ (unsigned char)(st->sbuf & 0xFF);
261 st->sbuf >>= 8;
262 st->nbuf -= 8;
266263 --inlen;
267264 }
268265
294291
295292 /* do small or odd size buffers the slow way */
296293 while (4 <= inlen) {
297 cycle(c->R);
298 t = nltap(c);
294 cycle(st->R);
295 t = nltap(st);
299296 XORWORD(t, in, out);
300297 out += 4;
301298 in += 4;
304301
305302 /* handle any trailing bytes */
306303 if (inlen != 0) {
307 cycle(c->R);
308 c->sbuf = nltap(c);
309 c->nbuf = 32;
310 while (c->nbuf != 0 && inlen != 0) {
311 *out++ = *in++ ^ (unsigned char)(c->sbuf & 0xFF);
312 c->sbuf >>= 8;
313 c->nbuf -= 8;
304 cycle(st->R);
305 st->sbuf = nltap(st);
306 st->nbuf = 32;
307 while (st->nbuf != 0 && inlen != 0) {
308 *out++ = *in++ ^ (unsigned char)(st->sbuf & 0xFF);
309 st->sbuf >>= 8;
310 st->nbuf -= 8;
314311 --inlen;
315312 }
316313 }
318315 return CRYPT_OK;
319316 }
320317
321 int sober128_stream_keystream(sober128_state *c, unsigned char *out, unsigned long outlen)
318 int sober128_stream_keystream(sober128_state *st, unsigned char *out, unsigned long outlen)
322319 {
323320 if (outlen == 0) return CRYPT_OK; /* nothing to do */
324321 LTC_ARGCHK(out != NULL);
325322 XMEMSET(out, 0, outlen);
326 return sober128_stream_crypt(c, out, outlen, out);
323 return sober128_stream_crypt(st, out, outlen, out);
327324 }
328325
329326 /**
330327 Terminate and clear Sober128 state
331 @param c The Sober128 state
328 @param st The Sober128 state
332329 @return CRYPT_OK on success
333330 */
334 int sober128_stream_done(sober128_state *c)
335 {
336 LTC_ARGCHK(c != NULL);
337 XMEMSET(c, 0, sizeof(sober128_state));
331 int sober128_stream_done(sober128_state *st)
332 {
333 LTC_ARGCHK(st != NULL);
334 XMEMSET(st, 0, sizeof(sober128_state));
338335 return CRYPT_OK;
339336 }
340337
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_SOBER128_STREAM
12
13 /**
14 Encrypt (or decrypt) bytes of ciphertext (or plaintext) with SOBER128
15 @param key The key
16 @param keylen The key length
17 @param iv The initial vector
18 @param ivlen The initial vector length
19 @param datain The plaintext (or ciphertext)
20 @param datalen The length of the input and output (octets)
21 @param dataout [out] The ciphertext (or plaintext)
22 @return CRYPT_OK if successful
23 */
24 int sober128_stream_memory(const unsigned char *key, unsigned long keylen,
25 const unsigned char *iv, unsigned long ivlen,
26 const unsigned char *datain, unsigned long datalen,
27 unsigned char *dataout)
28 {
29 sober128_state st;
30 int err;
31
32 if ((err = sober128_stream_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY;
33 if ((err = sober128_stream_setiv(&st, iv, ivlen)) != CRYPT_OK) goto WIPE_KEY;
34 err = sober128_stream_crypt(&st, datain, datalen, dataout);
35 WIPE_KEY:
36 sober128_stream_done(&st);
37 return err;
38 }
39
40 #endif /* LTC_SOBER128_STREAM */
41
42 /* ref: $Format:%D$ */
43 /* git commit: $Format:%H$ */
44 /* commit time: $Format:%ai$ */
195195 /*
196196 * Initialize Sosemanuk's state by providing a key. The key is an array of
197197 * 1 to 32 bytes.
198 * @param ss The Sosemanuk state
198 * @param st The Sosemanuk state
199199 * @param key Key
200200 * @param keylen Length of key in bytes
201201 * @return CRYPT_OK on success
202202 */
203 int sosemanuk_setup(sosemanuk_state *ss, const unsigned char *key, unsigned long keylen)
203 int sosemanuk_setup(sosemanuk_state *st, const unsigned char *key, unsigned long keylen)
204204 {
205205 /*
206206 * This key schedule is actually a truncated Serpent key schedule.
215215 r2 = w ## o2; \
216216 r3 = w ## o3; \
217217 S(r0, r1, r2, r3, r4); \
218 ss->kc[i ++] = r ## d0; \
219 ss->kc[i ++] = r ## d1; \
220 ss->kc[i ++] = r ## d2; \
221 ss->kc[i ++] = r ## d3; \
218 st->kc[i ++] = r ## d0; \
219 st->kc[i ++] = r ## d1; \
220 st->kc[i ++] = r ## d2; \
221 st->kc[i ++] = r ## d3; \
222222 } while (0)
223223
224224 #define SKS0 SKS(S0, 4, 5, 6, 7, 1, 4, 2, 0)
254254 ulong32 w0, w1, w2, w3, w4, w5, w6, w7;
255255 int i = 0;
256256
257 LTC_ARGCHK(ss != NULL);
257 LTC_ARGCHK(st != NULL);
258258 LTC_ARGCHK(key != NULL);
259259 LTC_ARGCHK(keylen > 0 && keylen <= 32);
260260
265265 XMEMCPY(wbuf, key, keylen);
266266 if (keylen < 32) {
267267 wbuf[keylen] = 0x01;
268 if (keylen < 31)
268 if (keylen < 31) {
269269 XMEMSET(wbuf + keylen + 1, 0, 31 - keylen);
270 }
270271 }
271272
272273 LOAD32L(w0, wbuf);
317318 #undef WUP0
318319 #undef WUP1
319320
320 /*
321 * Initialize with a zero-value iv to ensure state is correct in the
322 * event user fails to call setiv().
323 */
324 return sosemanuk_setiv(ss, NULL, 0);
321 return CRYPT_OK;
325322 }
326323
327324
331328 * encryptions/decryptions are to be performed with the same key and
332329 * sosemanuk_done() has not been called, only sosemanuk_setiv() need be called
333330 * to set the state.
334 * @param ss The Sosemanuk state
331 * @param st The Sosemanuk state
335332 * @param iv Initialization vector
336333 * @param ivlen Length of iv in bytes
337334 * @return CRYPT_OK on success
338335 */
339 int sosemanuk_setiv(sosemanuk_state *ss, const unsigned char *iv, unsigned long ivlen)
336 int sosemanuk_setiv(sosemanuk_state *st, const unsigned char *iv, unsigned long ivlen)
340337 {
341338
342339 /*
343340 * The Serpent key addition step.
344341 */
345342 #define KA(zc, x0, x1, x2, x3) do { \
346 x0 ^= ss->kc[(zc)]; \
347 x1 ^= ss->kc[(zc) + 1]; \
348 x2 ^= ss->kc[(zc) + 2]; \
349 x3 ^= ss->kc[(zc) + 3]; \
343 x0 ^= st->kc[(zc)]; \
344 x1 ^= st->kc[(zc) + 1]; \
345 x2 ^= st->kc[(zc) + 2]; \
346 x3 ^= st->kc[(zc) + 3]; \
350347 } while (0)
351348
352349 /*
376373 ulong32 r0, r1, r2, r3, r4;
377374 unsigned char ivtmp[16] = {0};
378375
379 LTC_ARGCHK(ss != NULL);
376 LTC_ARGCHK(st != NULL);
380377 LTC_ARGCHK(ivlen <= 16);
381378 LTC_ARGCHK(iv != NULL || ivlen == 0);
382379
406403 FSS(36, S1, 1, 3, 2, 4, 0, 2, 1, 4, 3);
407404 FSS(40, S2, 2, 1, 4, 3, 0, 4, 3, 1, 0);
408405 FSS(44, S3, 4, 3, 1, 0, 2, 3, 1, 0, 2);
409 ss->s09 = r3;
410 ss->s08 = r1;
411 ss->s07 = r0;
412 ss->s06 = r2;
406 st->s09 = r3;
407 st->s08 = r1;
408 st->s07 = r0;
409 st->s06 = r2;
413410
414411 FSS(48, S4, 3, 1, 0, 2, 4, 1, 4, 3, 2);
415412 FSS(52, S5, 1, 4, 3, 2, 0, 4, 2, 1, 3);
417414 FSS(60, S7, 4, 2, 0, 1, 3, 3, 1, 2, 4);
418415 FSS(64, S0, 3, 1, 2, 4, 0, 1, 0, 2, 3);
419416 FSS(68, S1, 1, 0, 2, 3, 4, 2, 1, 3, 0);
420 ss->r1 = r2;
421 ss->s04 = r1;
422 ss->r2 = r3;
423 ss->s05 = r0;
417 st->r1 = r2;
418 st->s04 = r1;
419 st->r2 = r3;
420 st->s05 = r0;
424421
425422 FSS(72, S2, 2, 1, 3, 0, 4, 3, 0, 1, 4);
426423 FSS(76, S3, 3, 0, 1, 4, 2, 0, 1, 4, 2);
428425 FSS(84, S5, 1, 3, 0, 2, 4, 3, 2, 1, 0);
429426 FSS(88, S6, 3, 2, 1, 0, 4, 3, 2, 4, 1);
430427 FSF(92, S7, 3, 2, 4, 1, 0, 0, 1, 2, 3);
431 ss->s03 = r0;
432 ss->s02 = r1;
433 ss->s01 = r2;
434 ss->s00 = r3;
435
436 ss->ptr = sizeof(ss->buf);
428 st->s03 = r0;
429 st->s02 = r1;
430 st->s01 = r2;
431 st->s00 = r3;
432
433 st->ptr = sizeof(st->buf);
437434
438435 #undef KA
439436 #undef FSS
587584 * Compute the next block of bits of output stream. This is equivalent
588585 * to one full rotation of the shift register.
589586 */
590 static LTC_INLINE void _sosemanuk_internal(sosemanuk_state *ss)
587 static LTC_INLINE void _sosemanuk_internal(sosemanuk_state *st)
591588 {
592589 /*
593590 * MUL_A(x) computes alpha * x (in F_{2^32}).
658655 */
659656 #define SRD(S, x0, x1, x2, x3, ooff) do { \
660657 S(u0, u1, u2, u3, u4); \
661 STORE32L(u ## x0 ^ v0, ss->buf + ooff); \
662 STORE32L(u ## x1 ^ v1, ss->buf + ooff + 4); \
663 STORE32L(u ## x2 ^ v2, ss->buf + ooff + 8); \
664 STORE32L(u ## x3 ^ v3, ss->buf + ooff + 12); \
665 } while (0)
666
667 ulong32 s00 = ss->s00;
668 ulong32 s01 = ss->s01;
669 ulong32 s02 = ss->s02;
670 ulong32 s03 = ss->s03;
671 ulong32 s04 = ss->s04;
672 ulong32 s05 = ss->s05;
673 ulong32 s06 = ss->s06;
674 ulong32 s07 = ss->s07;
675 ulong32 s08 = ss->s08;
676 ulong32 s09 = ss->s09;
677 ulong32 r1 = ss->r1;
678 ulong32 r2 = ss->r2;
658 STORE32L(u ## x0 ^ v0, st->buf + ooff); \
659 STORE32L(u ## x1 ^ v1, st->buf + ooff + 4); \
660 STORE32L(u ## x2 ^ v2, st->buf + ooff + 8); \
661 STORE32L(u ## x3 ^ v3, st->buf + ooff + 12); \
662 } while (0)
663
664 ulong32 s00 = st->s00;
665 ulong32 s01 = st->s01;
666 ulong32 s02 = st->s02;
667 ulong32 s03 = st->s03;
668 ulong32 s04 = st->s04;
669 ulong32 s05 = st->s05;
670 ulong32 s06 = st->s06;
671 ulong32 s07 = st->s07;
672 ulong32 s08 = st->s08;
673 ulong32 s09 = st->s09;
674 ulong32 r1 = st->r1;
675 ulong32 r2 = st->r2;
679676 ulong32 u0, u1, u2, u3, u4;
680677 ulong32 v0, v1, v2, v3;
681678
705702 STEP(09, 00, 01, 02, 03, 04, 05, 06, 07, 08, v3, u3);
706703 SRD(S2, 2, 3, 1, 4, 64);
707704
708 ss->s00 = s00;
709 ss->s01 = s01;
710 ss->s02 = s02;
711 ss->s03 = s03;
712 ss->s04 = s04;
713 ss->s05 = s05;
714 ss->s06 = s06;
715 ss->s07 = s07;
716 ss->s08 = s08;
717 ss->s09 = s09;
718 ss->r1 = r1;
719 ss->r2 = r2;
705 st->s00 = s00;
706 st->s01 = s01;
707 st->s02 = s02;
708 st->s03 = s03;
709 st->s04 = s04;
710 st->s05 = s05;
711 st->s06 = s06;
712 st->s07 = s07;
713 st->s08 = s08;
714 st->s09 = s09;
715 st->r1 = r1;
716 st->r2 = r2;
720717 }
721718
722719 /*
728725 static LTC_INLINE void _xorbuf(const unsigned char *in1, const unsigned char *in2,
729726 unsigned char *out, unsigned long datalen)
730727 {
731 while (datalen -- > 0)
728 while (datalen -- > 0) {
732729 *out ++ = *in1 ++ ^ *in2 ++;
730 }
733731 }
734732
735733
738736 * buffer, combined by XOR with the stream, and the result is written
739737 * in the "out" buffer. "in" and "out" must be either equal, or
740738 * reference distinct buffers (no partial overlap is allowed).
741 * @param ss The Sosemanuk state
739 * @param st The Sosemanuk state
742740 * @param in Data in
743741 * @param inlen Length of data in bytes
744742 * @param out Data out
745743 * @return CRYPT_OK on success
746744 */
747 int sosemanuk_crypt(sosemanuk_state *ss,
745 int sosemanuk_crypt(sosemanuk_state *st,
748746 const unsigned char *in, unsigned long inlen, unsigned char *out)
749747 {
750 LTC_ARGCHK(ss != NULL);
748 LTC_ARGCHK(st != NULL);
751749 LTC_ARGCHK(in != NULL);
752750 LTC_ARGCHK(out != NULL);
753751
754 if (ss->ptr < (sizeof(ss->buf))) {
755 unsigned long rlen = (sizeof(ss->buf)) - ss->ptr;
756
757 if (rlen > inlen)
752 if (st->ptr < (sizeof(st->buf))) {
753 unsigned long rlen = (sizeof(st->buf)) - st->ptr;
754
755 if (rlen > inlen) {
758756 rlen = inlen;
759 _xorbuf(ss->buf + ss->ptr, in, out, rlen);
757 }
758 _xorbuf(st->buf + st->ptr, in, out, rlen);
760759 in += rlen;
761760 out += rlen;
762761 inlen -= rlen;
763 ss->ptr += rlen;
762 st->ptr += rlen;
764763 }
765764 while (inlen > 0) {
766 _sosemanuk_internal(ss);
767 if (inlen >= sizeof(ss->buf)) {
768 _xorbuf(ss->buf, in, out, sizeof(ss->buf));
769 in += sizeof(ss->buf);
770 out += sizeof(ss->buf);
771 inlen -= sizeof(ss->buf);
765 _sosemanuk_internal(st);
766 if (inlen >= sizeof(st->buf)) {
767 _xorbuf(st->buf, in, out, sizeof(st->buf));
768 in += sizeof(st->buf);
769 out += sizeof(st->buf);
770 inlen -= sizeof(st->buf);
772771 } else {
773 _xorbuf(ss->buf, in, out, inlen);
774 ss->ptr = inlen;
772 _xorbuf(st->buf, in, out, inlen);
773 st->ptr = inlen;
775774 inlen = 0;
776775 }
777776 }
783782 /*
784783 * Cipher operation, as a PRNG: the provided output buffer is filled with
785784 * pseudo-random bytes as output from the stream cipher.
786 * @param ss The Sosemanuk state
785 * @param st The Sosemanuk state
787786 * @param out Data out
788787 * @param outlen Length of output in bytes
789788 * @return CRYPT_OK on success
790789 */
791 int sosemanuk_keystream(sosemanuk_state *ss, unsigned char *out, unsigned long outlen)
790 int sosemanuk_keystream(sosemanuk_state *st, unsigned char *out, unsigned long outlen)
792791 {
793792 if (outlen == 0) return CRYPT_OK; /* nothing to do */
794793 LTC_ARGCHK(out != NULL);
795794 XMEMSET(out, 0, outlen);
796 return sosemanuk_crypt(ss, out, outlen, out);
795 return sosemanuk_crypt(st, out, outlen, out);
797796 }
798797
799798
800799 /*
801800 * Terminate and clear Sosemanuk key context
802 * @param ss The Sosemanuk state
801 * @param st The Sosemanuk state
803802 * @return CRYPT_OK on success
804803 */
805 int sosemanuk_done(sosemanuk_state *ss)
804 int sosemanuk_done(sosemanuk_state *st)
806805 {
807 LTC_ARGCHK(ss != NULL);
808 XMEMSET(ss, 0, sizeof(sosemanuk_state));
806 LTC_ARGCHK(st != NULL);
807 XMEMSET(st, 0, sizeof(sosemanuk_state));
809808 return CRYPT_OK;
810809 }
811810
0 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
1 *
2 * LibTomCrypt is a library that provides various cryptographic
3 * algorithms in a highly modular and flexible manner.
4 *
5 * The library is free for all purposes without any express
6 * guarantee it works.
7 */
8
9 #include "tomcrypt_private.h"
10
11 #ifdef LTC_SOSEMANUK
12
13 /**
14 Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Sosemanuk
15 @param key The key
16 @param keylen The key length
17 @param iv The initial vector
18 @param ivlen The initial vector length
19 @param datain The plaintext (or ciphertext)
20 @param datalen The length of the input and output (octets)
21 @param dataout [out] The ciphertext (or plaintext)
22 @return CRYPT_OK if successful
23 */
24 int sosemanuk_memory(const unsigned char *key, unsigned long keylen,
25 const unsigned char *iv, unsigned long ivlen,
26 const unsigned char *datain, unsigned long datalen,
27 unsigned char *dataout)
28 {
29 sosemanuk_state st;
30 int err;
31
32 if ((err = sosemanuk_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY;
33 if ((err = sosemanuk_setiv(&st, iv, ivlen)) != CRYPT_OK) goto WIPE_KEY;
34 err = sosemanuk_crypt(&st, datain, datalen, dataout);
35 WIPE_KEY:
36 sosemanuk_done(&st);
37 return err;
38 }
39
40 #endif /* LTC_SOSEMANUK */
41
42 /* ref: $Format:%D$ */
43 /* git commit: $Format:%H$ */
44 /* commit time: $Format:%ai$ */
137137 goto LBL_ERR;
138138 }
139139 }
140
141 /* too big */
142 while (mp_cmp_mag(&D, b) != MP_LT) {
143 if ((res = mp_sub(&D, b, &D)) != MP_OKAY) {
144 goto LBL_ERR;
145 }
146 }
147
140148 mp_exch(&D, c);
141149 c->sign = neg;
142150 res = MP_OKAY;
0 #include "tommath_private.h"
1 #ifdef BN_MP_COMPLEMENT_C
2 /* LibTomMath, multiple-precision integer library -- Tom St Denis
3 *
4 * LibTomMath is a library that provides multiple-precision
5 * integer arithmetic as well as number theoretic functionality.
6 *
7 * The library was designed directly after the MPI library by
8 * Michael Fromberger but has been written from scratch with
9 * additional optimizations in place.
10 *
11 * The library is free for all purposes without any express
12 * guarantee it works.
13 */
14
15 /* b = ~a */
16 int mp_complement(const mp_int *a, mp_int *b)
17 {
18 int res = mp_neg(a, b);
19 return (res == MP_OKAY) ? mp_sub_d(b, 1uL, b) : res;
20 }
21 #endif
22
23 /* ref: $Format:%D$ */
24 /* git commit: $Format:%H$ */
25 /* commit time: $Format:%ai$ */
1313 */
1414
1515 /* chars used in radix conversions */
16 const char *mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
16 const char *const mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
1717 const unsigned char mp_s_rmap_reverse[] = {
1818 0xff, 0xff, 0xff, 0x3e, 0xff, 0xff, 0xff, 0x3f, /* ()*+,-./ */
1919 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 01234567 */
2121 #define MP_GEN_RANDOM_MAX 0xffffffffu
2222 #define MP_GEN_RANDOM_SHIFT 32
2323
24 static int s_read_arc4random(mp_digit* p)
24 static int s_read_arc4random(mp_digit *p)
2525 {
2626 mp_digit d = 0, msk = 0;
2727 do {
3939 #define MP_WIN_CSP
4040
4141 #ifndef _WIN32_WINNT
42 #define _WIN32_WINNT 0x0400
42 #define _WIN32_WINNT 0x0400
4343 #endif
4444 #ifdef _WIN32_WCE
45 #define UNDER_CE
46 #define ARM
45 #define UNDER_CE
46 #define ARM
4747 #endif
4848
4949 #define WIN32_LEAN_AND_MEAN
5858 hProv = 0;
5959 }
6060
61 static int s_read_win_csp(mp_digit* p)
61 static int s_read_win_csp(mp_digit *p)
6262 {
6363 int ret = -1;
6464 if (hProv == 0) {
6565 if (!CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL,
6666 (CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) &&
67 !CryptAcquireContext (&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL,
67 !CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL,
6868 CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET)) {
6969 hProv = 0;
7070 return ret;
7171 }
7272 atexit(s_cleanup_win_csp);
7373 }
74 if (CryptGenRandom(hProv, sizeof(*p), (void*)p) == TRUE) {
74 if (CryptGenRandom(hProv, sizeof(*p), (void *)p) == TRUE) {
7575 ret = MP_OKAY;
7676 }
7777 return ret;
8484 #include <sys/random.h>
8585 #include <errno.h>
8686
87 static int s_read_getrandom(mp_digit* p)
87 static int s_read_getrandom(mp_digit *p)
8888 {
8989 int ret;
9090 do {
9191 ret = getrandom(p, sizeof(*p), 0);
92 } while((ret == -1) && (errno == EINTR));
92 } while ((ret == -1) && (errno == EINTR));
9393 if (ret == sizeof(*p)) return MP_OKAY;
9494 return -1;
9595 }
107107 #include <errno.h>
108108 #include <unistd.h>
109109
110 static int s_read_dev_urandom(mp_digit* p)
110 static int s_read_dev_urandom(mp_digit *p)
111111 {
112112 ssize_t r;
113113 int fd;
114114 do {
115115 fd = open(MP_DEV_URANDOM, O_RDONLY);
116 } while((fd == -1) && (errno == EINTR));
116 } while ((fd == -1) && (errno == EINTR));
117117 if (fd == -1) return -1;
118118 do {
119119 r = read(fd, p, sizeof(*p));
120 } while((r == -1) && (errno == EINTR));
120 } while ((r == -1) && (errno == EINTR));
121121 close(fd);
122122 if (r != sizeof(*p)) return -1;
123123 return MP_OKAY;
128128 unsigned long (*ltm_rng)(unsigned char *out, unsigned long outlen, void (*callback)(void));
129129 void (*ltm_rng_callback)(void);
130130
131 static int s_read_ltm_rng(mp_digit* p)
131 static int s_read_ltm_rng(mp_digit *p)
132132 {
133133 unsigned long ret;
134134 if (ltm_rng == NULL) return -1;
135 ret = ltm_rng((void*)p, sizeof(*p), ltm_rng_callback);
135 ret = ltm_rng((void *)p, sizeof(*p), ltm_rng_callback);
136136 if (ret != sizeof(*p)) return -1;
137137 return MP_OKAY;
138138 }
139139 #endif
140140
141 static int s_rand_digit(mp_digit* p)
141 static int s_rand_digit(mp_digit *p)
142142 {
143143 int ret = -1;
144144
0 #include "tommath_private.h"
1 #ifdef BN_MP_TC_AND_C
2 /* LibTomMath, multiple-precision integer library -- Tom St Denis
3 *
4 * LibTomMath is a library that provides multiple-precision
5 * integer arithmetic as well as number theoretic functionality.
6 *
7 * The library was designed directly after the MPI library by
8 * Michael Fromberger but has been written from scratch with
9 * additional optimizations in place.
10 *
11 * The library is free for all purposes without any express
12 * guarantee it works.
13 */
14
15 /* two complement and */
16 int mp_tc_and(const mp_int *a, const mp_int *b, mp_int *c)
17 {
18 int res = MP_OKAY, bits;
19 int as = mp_isneg(a), bs = mp_isneg(b);
20 mp_int *mx = NULL, _mx, acpy, bcpy;
21
22 if ((as != MP_NO) || (bs != MP_NO)) {
23 bits = MAX(mp_count_bits(a), mp_count_bits(b));
24 res = mp_init_set_int(&_mx, 1uL);
25 if (res != MP_OKAY) {
26 goto end;
27 }
28
29 mx = &_mx;
30 res = mp_mul_2d(mx, bits + 1, mx);
31 if (res != MP_OKAY) {
32 goto end;
33 }
34
35 if (as != MP_NO) {
36 res = mp_init(&acpy);
37 if (res != MP_OKAY) {
38 goto end;
39 }
40
41 res = mp_add(mx, a, &acpy);
42 if (res != MP_OKAY) {
43 mp_clear(&acpy);
44 goto end;
45 }
46 a = &acpy;
47 }
48 if (bs != MP_NO) {
49 res = mp_init(&bcpy);
50 if (res != MP_OKAY) {
51 goto end;
52 }
53
54 res = mp_add(mx, b, &bcpy);
55 if (res != MP_OKAY) {
56 mp_clear(&bcpy);
57 goto end;
58 }
59 b = &bcpy;
60 }
61 }
62
63 res = mp_and(a, b, c);
64
65 if ((as != MP_NO) && (bs != MP_NO) && (res == MP_OKAY)) {
66 res = mp_sub(c, mx, c);
67 }
68
69 end:
70 if (a == &acpy) {
71 mp_clear(&acpy);
72 }
73
74 if (b == &bcpy) {
75 mp_clear(&bcpy);
76 }
77
78 if (mx == &_mx) {
79 mp_clear(mx);
80 }
81
82 return res;
83 }
84 #endif
85
86 /* ref: $Format:%D$ */
87 /* git commit: $Format:%H$ */
88 /* commit time: $Format:%ai$ */
0 #include "tommath_private.h"
1 #ifdef BN_MP_TC_DIV_2D_C
2 /* LibTomMath, multiple-precision integer library -- Tom St Denis
3 *
4 * LibTomMath is a library that provides multiple-precision
5 * integer arithmetic as well as number theoretic functionality.
6 *
7 * The library was designed directly after the MPI library by
8 * Michael Fromberger but has been written from scratch with
9 * additional optimizations in place.
10 *
11 * The library is free for all purposes without any express
12 * guarantee it works.
13 */
14
15 /* two complement right shift */
16 int mp_tc_div_2d(const mp_int *a, int b, mp_int *c)
17 {
18 int res;
19 if (mp_isneg(a) == MP_NO) {
20 return mp_div_2d(a, b, c, NULL);
21 }
22
23 res = mp_add_d(a, 1uL, c);
24 if (res != MP_OKAY) {
25 return res;
26 }
27
28 res = mp_div_2d(c, b, c, NULL);
29 return (res == MP_OKAY) ? mp_sub_d(c, 1uL, c) : res;
30 }
31 #endif
32
33 /* ref: $Format:%D$ */
34 /* git commit: $Format:%H$ */
35 /* commit time: $Format:%ai$ */
0 #include "tommath_private.h"
1 #ifdef BN_MP_TC_OR_C
2 /* LibTomMath, multiple-precision integer library -- Tom St Denis
3 *
4 * LibTomMath is a library that provides multiple-precision
5 * integer arithmetic as well as number theoretic functionality.
6 *
7 * The library was designed directly after the MPI library by
8 * Michael Fromberger but has been written from scratch with
9 * additional optimizations in place.
10 *
11 * The library is free for all purposes without any express
12 * guarantee it works.
13 */
14
15 /* two complement or */
16 int mp_tc_or(const mp_int *a, const mp_int *b, mp_int *c)
17 {
18 int res = MP_OKAY, bits;
19 int as = mp_isneg(a), bs = mp_isneg(b);
20 mp_int *mx = NULL, _mx, acpy, bcpy;
21
22 if ((as != MP_NO) || (bs != MP_NO)) {
23 bits = MAX(mp_count_bits(a), mp_count_bits(b));
24 res = mp_init_set_int(&_mx, 1uL);
25 if (res != MP_OKAY) {
26 goto end;
27 }
28
29 mx = &_mx;
30 res = mp_mul_2d(mx, bits + 1, mx);
31 if (res != MP_OKAY) {
32 goto end;
33 }
34
35 if (as != MP_NO) {
36 res = mp_init(&acpy);
37 if (res != MP_OKAY) {
38 goto end;
39 }
40
41 res = mp_add(mx, a, &acpy);
42 if (res != MP_OKAY) {
43 mp_clear(&acpy);
44 goto end;
45 }
46 a = &acpy;
47 }
48 if (bs != MP_NO) {
49 res = mp_init(&bcpy);
50 if (res != MP_OKAY) {
51 goto end;
52 }
53
54 res = mp_add(mx, b, &bcpy);
55 if (res != MP_OKAY) {
56 mp_clear(&bcpy);
57 goto end;
58 }
59 b = &bcpy;
60 }
61 }
62
63 res = mp_or(a, b, c);
64
65 if (((as != MP_NO) || (bs != MP_NO)) && (res == MP_OKAY)) {
66 res = mp_sub(c, mx, c);
67 }
68
69 end:
70 if (a == &acpy) {
71 mp_clear(&acpy);
72 }
73
74 if (b == &bcpy) {
75 mp_clear(&bcpy);
76 }
77
78 if (mx == &_mx) {
79 mp_clear(mx);
80 }
81
82 return res;
83 }
84 #endif
85
86 /* ref: $Format:%D$ */
87 /* git commit: $Format:%H$ */
88 /* commit time: $Format:%ai$ */
0 #include "tommath_private.h"
1 #ifdef BN_MP_TC_XOR_C
2 /* LibTomMath, multiple-precision integer library -- Tom St Denis
3 *
4 * LibTomMath is a library that provides multiple-precision
5 * integer arithmetic as well as number theoretic functionality.
6 *
7 * The library was designed directly after the MPI library by
8 * Michael Fromberger but has been written from scratch with
9 * additional optimizations in place.
10 *
11 * The library is free for all purposes without any express
12 * guarantee it works.
13 */
14
15 /* two complement xor */
16 int mp_tc_xor(const mp_int *a, const mp_int *b, mp_int *c)
17 {
18 int res = MP_OKAY, bits;
19 int as = mp_isneg(a), bs = mp_isneg(b);
20 mp_int *mx = NULL, _mx, acpy, bcpy;
21
22 if ((as != MP_NO) || (bs != MP_NO)) {
23 bits = MAX(mp_count_bits(a), mp_count_bits(b));
24 res = mp_init_set_int(&_mx, 1uL);
25 if (res != MP_OKAY) {
26 goto end;
27 }
28
29 mx = &_mx;
30 res = mp_mul_2d(mx, bits + 1, mx);
31 if (res != MP_OKAY) {
32 goto end;
33 }
34
35 if (as != MP_NO) {
36 res = mp_init(&acpy);
37 if (res != MP_OKAY) {
38 goto end;
39 }
40
41 res = mp_add(mx, a, &acpy);
42 if (res != MP_OKAY) {
43 mp_clear(&acpy);
44 goto end;
45 }
46 a = &acpy;
47 }
48 if (bs != MP_NO) {
49 res = mp_init(&bcpy);
50 if (res != MP_OKAY) {
51 goto end;
52 }
53
54 res = mp_add(mx, b, &bcpy);
55 if (res != MP_OKAY) {
56 mp_clear(&bcpy);
57 goto end;
58 }
59 b = &bcpy;
60 }
61 }
62
63 res = mp_xor(a, b, c);
64
65 if ((as != bs) && (res == MP_OKAY)) {
66 res = mp_sub(c, mx, c);
67 }
68
69 end:
70 if (a == &acpy) {
71 mp_clear(&acpy);
72 }
73
74 if (b == &bcpy) {
75 mp_clear(&bcpy);
76 }
77
78 if (mx == &_mx) {
79 mp_clear(mx);
80 }
81
82 return res;
83 }
84 #endif
85
86 /* ref: $Format:%D$ */
87 /* git commit: $Format:%H$ */
88 /* commit time: $Format:%ai$ */
3636 defined(__LP64__) || defined(_LP64) || defined(__64BIT__)
3737 # if !(defined(MP_32BIT) || defined(MP_16BIT) || defined(MP_8BIT))
3838 # if defined(__GNUC__)
39 /* we support 128bit integers only via: __attribute__((mode(TI))) */
39 /* we support 128bit integers only via: __attribute__((mode(TI))) */
4040 # define MP_64BIT
4141 # else
42 /* otherwise we fall back to MP_32BIT even on 64bit platforms */
42 /* otherwise we fall back to MP_32BIT even on 64bit platforms */
4343 # define MP_32BIT
4444 # endif
4545 # endif
294294 /* c = a AND b */
295295 int mp_and(const mp_int *a, const mp_int *b, mp_int *c);
296296
297 /* c = a XOR b (two complement) */
298 int mp_tc_xor(const mp_int *a, const mp_int *b, mp_int *c);
299
300 /* c = a OR b (two complement) */
301 int mp_tc_or(const mp_int *a, const mp_int *b, mp_int *c);
302
303 /* c = a AND b (two complement) */
304 int mp_tc_and(const mp_int *a, const mp_int *b, mp_int *c);
305
306 /* right shift (two complement) */
307 int mp_tc_div_2d(const mp_int *a, int b, mp_int *c);
308
297309 /* ---> Basic arithmetic <--- */
310
311 /* b = ~a */
312 int mp_complement(const mp_int *a, mp_int *b);
298313
299314 /* b = -a */
300315 int mp_neg(const mp_int *a, mp_int *b);
2626 # define BN_MP_CMP_D_C
2727 # define BN_MP_CMP_MAG_C
2828 # define BN_MP_CNT_LSB_C
29 # define BN_MP_COMPLEMENT_C
2930 # define BN_MP_COPY_C
3031 # define BN_MP_COUNT_BITS_C
3132 # define BN_MP_DIV_C
115116 # define BN_MP_SUB_C
116117 # define BN_MP_SUB_D_C
117118 # define BN_MP_SUBMOD_C
119 # define BN_MP_TC_AND_C
120 # define BN_MP_TC_DIV_2D_C
121 # define BN_MP_TC_OR_C
122 # define BN_MP_TC_XOR_C
118123 # define BN_MP_TO_SIGNED_BIN_C
119124 # define BN_MP_TO_SIGNED_BIN_N_C
120125 # define BN_MP_TO_UNSIGNED_BIN_C
146151 # define BN_MP_INIT_MULTI_C
147152 # define BN_MP_COPY_C
148153 # define BN_MP_MOD_C
154 # define BN_MP_ISZERO_C
149155 # define BN_MP_SET_C
150156 # define BN_MP_DIV_2_C
151157 # define BN_MP_ISODD_C
152158 # define BN_MP_SUB_C
153159 # define BN_MP_CMP_C
154 # define BN_MP_ISZERO_C
155160 # define BN_MP_CMP_D_C
156161 # define BN_MP_ADD_C
157162 # define BN_MP_EXCH_C
238243
239244 #if defined(BN_MP_CNT_LSB_C)
240245 # define BN_MP_ISZERO_C
246 #endif
247
248 #if defined(BN_MP_COMPLEMENT_C)
249 # define BN_MP_NEG_C
250 # define BN_MP_SUB_D_C
241251 #endif
242252
243253 #if defined(BN_MP_COPY_C)
389399
390400 #if defined(BN_MP_FREAD_C)
391401 # define BN_MP_ZERO_C
392 # define BN_MP_S_RMAP_C
402 # define BN_MP_S_RMAP_REVERSE_SZ_C
403 # define BN_MP_S_RMAP_REVERSE_C
393404 # define BN_MP_MUL_D_C
394405 # define BN_MP_ADD_D_C
395406 # define BN_MP_CMP_D_C
461472 #endif
462473
463474 #if defined(BN_MP_INVMOD_C)
464 # define BN_MP_ISZERO_C
475 # define BN_MP_CMP_D_C
465476 # define BN_MP_ISODD_C
466 # define BN_MP_CMP_D_C
467477 # define BN_FAST_MP_INVMOD_C
468478 # define BN_MP_INVMOD_SLOW_C
469479 #endif
540550 #endif
541551
542552 #if defined(BN_MP_LSHD_C)
553 # define BN_MP_ISZERO_C
543554 # define BN_MP_GROW_C
544555 # define BN_MP_RSHD_C
545556 #endif
713724
714725 #if defined(BN_MP_RADIX_SMAP_C)
715726 # define BN_MP_S_RMAP_C
727 # define BN_MP_S_RMAP_REVERSE_C
728 # define BN_MP_S_RMAP_REVERSE_SZ_C
716729 #endif
717730
718731 #if defined(BN_MP_RAND_C)
723736
724737 #if defined(BN_MP_READ_RADIX_C)
725738 # define BN_MP_ZERO_C
726 # define BN_MP_S_RMAP_C
739 # define BN_MP_S_RMAP_REVERSE_SZ_C
740 # define BN_MP_S_RMAP_REVERSE_C
727741 # define BN_MP_MUL_D_C
728742 # define BN_MP_ADD_D_C
729743 # define BN_MP_ISZERO_C
903917 # define BN_MP_MOD_C
904918 #endif
905919
920 #if defined(BN_MP_TC_AND_C)
921 # define BN_MP_ISNEG_C
922 # define BN_MP_COUNT_BITS_C
923 # define BN_MP_INIT_SET_INT_C
924 # define BN_MP_MUL_2D_C
925 # define BN_MP_INIT_C
926 # define BN_MP_ADD_C
927 # define BN_MP_CLEAR_C
928 # define BN_MP_AND_C
929 # define BN_MP_SUB_C
930 #endif
931
932 #if defined(BN_MP_TC_DIV_2D_C)
933 # define BN_MP_ISNEG_C
934 # define BN_MP_DIV_2D_C
935 # define BN_MP_ADD_D_C
936 # define BN_MP_SUB_D_C
937 #endif
938
939 #if defined(BN_MP_TC_OR_C)
940 # define BN_MP_ISNEG_C
941 # define BN_MP_COUNT_BITS_C
942 # define BN_MP_INIT_SET_INT_C
943 # define BN_MP_MUL_2D_C
944 # define BN_MP_INIT_C
945 # define BN_MP_ADD_C
946 # define BN_MP_CLEAR_C
947 # define BN_MP_OR_C
948 # define BN_MP_SUB_C
949 #endif
950
951 #if defined(BN_MP_TC_XOR_C)
952 # define BN_MP_ISNEG_C
953 # define BN_MP_COUNT_BITS_C
954 # define BN_MP_INIT_SET_INT_C
955 # define BN_MP_MUL_2D_C
956 # define BN_MP_INIT_C
957 # define BN_MP_ADD_C
958 # define BN_MP_CLEAR_C
959 # define BN_MP_XOR_C
960 # define BN_MP_SUB_C
961 #endif
962
906963 #if defined(BN_MP_TO_SIGNED_BIN_C)
907964 # define BN_MP_TO_UNSIGNED_BIN_C
908965 #endif
7272 int s_mp_exptmod(const mp_int *G, const mp_int *X, const mp_int *P, mp_int *Y, int redmode);
7373 void bn_reverse(unsigned char *s, int len);
7474
75 extern const char *mp_s_rmap;
75 extern const char *const mp_s_rmap;
7676 extern const unsigned char mp_s_rmap_reverse[];
7777 extern const size_t mp_s_rmap_reverse_sz;
7878
00 use strict;
11 use warnings;
22
3 use Test::More tests => 13;
3 use Test::More tests => 15;
44
55 use Crypt::AuthEnc::CCM qw( ccm_encrypt_authenticate ccm_decrypt_verify );
66
4141 is(unpack('H*', $tag), "9485c6d5709b43431a4f05370cc22603", "ccm_encrypt_authenticate: tag");
4242 my $pt = ccm_decrypt_verify('AES', $key, $nonce, "header-abc", $ct, $tag);
4343 is($pt, "plain_halfplain_half", "ccm_decrypt_verify: plaintext");
44 substr($tag, 0, 1) = pack("H2", "AA");
45 $pt = ccm_decrypt_verify('AES', $key, $nonce, "header-abc", $ct, $tag);
46 is($pt, undef, "ccm_decrypt_verify: plaintext / bad tag");
4447 }
4548
4649 {
5154 is(unpack('H*', $tag), "9e9cba5dd4939d0d8e2687c85c5d3b89", "ccm_encrypt_authenticate: tag (no header)");
5255 my $pt = ccm_decrypt_verify('AES', $key, $nonce, "", $ct, $tag);
5356 is($pt, "plain_halfplain_half", "ccm_decrypt_verify: plaintext (no header)");
57 substr($tag, 0, 1) = pack("H2", "AA");
58 $pt = ccm_decrypt_verify('AES', $key, $nonce, "", $ct, $tag);
59 is($pt, undef, "ccm_decrypt_verify: plaintext (no header) / bad tag");
5460 }
00 use strict;
11 use warnings;
22
3 use Test::More tests => 12;
3 use Test::More tests => 14;
44
55 use Crypt::AuthEnc::ChaCha20Poly1305 qw( chacha20poly1305_encrypt_authenticate chacha20poly1305_decrypt_verify );
66
4343 is(unpack('H*', $tag), "d081beb3c3fe560c77f6c4e0da1d0dac", "chacha20poly1305_encrypt_authenticate: tag (no header)");
4444 my $pt = chacha20poly1305_decrypt_verify($key, "123456789012", "", $ct, $tag);
4545 is($pt, "plain_halfplain_half", "chacha20poly1305_decrypt_verify: plaintext (no header)");
46 substr($tag, 0, 1) = pack("H2", "AA");
47 $pt = chacha20poly1305_decrypt_verify($key, "123456789012", "", $ct, $tag);
48 is($pt, undef, "chacha20poly1305_decrypt_verify: plaintext (no header) / bad tag");
4649 }
4750
4851 {
5154 is(unpack('H*', $tag), "e6f20b492b7bf34c914c72717af6f232", "chacha20poly1305_encrypt_authenticate: tag (no header)");
5255 my $pt = chacha20poly1305_decrypt_verify($key, "123456789012", "adata-123456789012", $ct, $tag);
5356 is($pt, "plain_halfplain_half", "chacha20poly1305_decrypt_verify: plaintext (no header)");
57 substr($tag, 0, 1) = pack("H2", "AA");
58 $pt = chacha20poly1305_decrypt_verify($key, "123456789012", "adata-123456789012", $ct, $tag);
59 is($pt, undef, "chacha20poly1305_decrypt_verify: plaintext (no header) / bad tag");
5460 }
00 use strict;
11 use warnings;
22
3 use Test::More tests => 12;
3 use Test::More tests => 14;
44
55 use Crypt::AuthEnc::EAX qw( eax_encrypt_authenticate eax_decrypt_verify );
66
4848 is(unpack('H*', $tag), "f83d77e5cf20979b3325266ff2fe342c", "eax_encrypt_authenticate: tag");
4949 my $pt = eax_decrypt_verify('AES', $key, $nonce, "abc", $ct, $tag);
5050 is($pt, "plain_halfplain_half", "eax_decrypt_verify: plaintext");
51 substr($tag, 0, 1) = pack("H2", "AA");
52 $pt = eax_decrypt_verify('AES', $key, $nonce, "abc", $ct, $tag);
53 is($pt, undef, "eax_decrypt_verify: plaintext / bad tag");
5154 }
5255
5356 {
5659 is(unpack('H*', $tag), "e5ad22aa2ba3b30cd50eb59593364f1b", "eax_encrypt_authenticate: tag (no header)");
5760 my $pt = eax_decrypt_verify('AES', $key, $nonce, "", $ct, $tag);
5861 is($pt, "plain_halfplain_half", "eax_decrypt_verify: plaintext (no header)");
62 substr($tag, 0, 1) = pack("H2", "AA");
63 $pt = eax_decrypt_verify('AES', $key, $nonce, "", $ct, $tag);
64 is($pt, undef, "eax_decrypt_verify: plaintext (no header) / bad tag");
5965 }
00 use strict;
11 use warnings;
22
3 use Test::More tests => 12;
3 use Test::More tests => 14;
44
55 use Crypt::AuthEnc::GCM qw( gcm_encrypt_authenticate gcm_decrypt_verify );
66
4646 is(unpack('H*', $tag), "1685ba0eda059ace4aab6539980c30c0", "gcm_encrypt_authenticate: tag (no header)");
4747 my $pt = gcm_decrypt_verify('AES', $key, "123456789012", "", $ct, $tag);
4848 is($pt, "plain_halfplain_half", "gcm_decrypt_verify: plaintext (no header)");
49 substr($tag, 0, 1) = pack("H2", "AA");
50 $pt = gcm_decrypt_verify('AES', $key, "123456789012", "", $ct, $tag);
51 is($pt, undef, "gcm_decrypt_verify: plaintext (no header) / bad tag");
4952 }
5053
5154 {
5457 is(unpack('H*', $tag), "d225e849d4d076cf9e85d5303450e793", "gcm_encrypt_authenticate: tag (no header)");
5558 my $pt = gcm_decrypt_verify('AES', $key, "123456789012", "adata-123456789012", $ct, $tag);
5659 is($pt, "plain_halfplain_half", "gcm_decrypt_verify: plaintext (no header)");
60 substr($tag, 0, 1) = pack("H2", "AA");
61 $pt = gcm_decrypt_verify('AES', $key, "123456789012", "adata-123456789012", $ct, $tag);
62 is($pt, undef, "gcm_decrypt_verify: plaintext (no header) / bad tag");
5763 }
00 use strict;
11 use warnings;
22
3 use Test::More tests => 10;
3 use Test::More tests => 12;
44
55 use Crypt::AuthEnc::OCB qw( ocb_encrypt_authenticate ocb_decrypt_verify );
66
3434 is(unpack('H*', $tag), "dfdfab80aca060268c0cc467040af4f9", "ocb_encrypt_authenticate: tag (no header)");
3535 my $pt = ocb_decrypt_verify('AES', $key, "123456789012", "", $ct, $tag);
3636 is($pt, "plain_half_12345plain_half_12345", "ocb_decrypt_verify: plaintext (no header)");
37 substr($tag, 0, 1) = pack("H2", "AA");
38 $pt = ocb_decrypt_verify('AES', $key, "123456789012", "", $ct, $tag);
39 is($pt, undef, "ocb_decrypt_verify: plaintext (no header) / bad tag");
3740 }
3841
3942 {
4245 is(unpack('H*', $tag), "bd7a6a0aaf24420f97bf239ea5740a40", "ocb_encrypt_authenticate: tag (no header)");
4346 my $pt = ocb_decrypt_verify('AES', $key, "123456789012", "adata-123456789012", $ct, $tag);
4447 is($pt, "plain_half_12345plain_half_12345", "ocb_decrypt_verify: plaintext (no header)");
48 substr($tag, 0, 1) = pack("H2", "AA");
49 $pt = ocb_decrypt_verify('AES', $key, "123456789012", "adata-123456789012", $ct, $tag);
50 is($pt, undef, "ocb_decrypt_verify: plaintext (no header) / bad tag");
4551 }
1919 is( Crypt::Cipher::DES_EDE->min_keysize, 16, '->min_keysize');
2020 is( Crypt::Cipher::DES_EDE->default_rounds, 16, '->default_rounds');
2121
22 my $min_key = 'kkkkkkkkkkkkkkkkkkkkkkkk';
22 my $min_key = 'kkkkkkkkkkkkkkkk';
2323 my $max_key = 'KKKKKKKKKKKKKKKKKKKKKKKK';
2424
2525 is( Crypt::Cipher::blocksize('DES_EDE'), 8, 'Cipher->blocksize');
24002400 +281474976710656:0:0
24012401 +281474976710656:1:0
24022402 +281474976710656:+281474976710656:281474976710656
2403 281474976710656:-1:281474976710656
2404 -2:-3:-4
2405 -1:-1:-1
2406 -6:-6:-6
2407 -7:-4:-8
2408 -7:4:0
2409 -4:7:4
2410 # negative argument is bitwise shorter than positive [perl #26559]
2411 30:-3:28
2412 123:-1:123
2403 #### does not work since Math::BigInt 1.999815
2404 ##281474976710656:-1:281474976710656
2405 ##-2:-3:-4
2406 ##-1:-1:-1
2407 ##-6:-6:-6
2408 ##-7:-4:-8
2409 ##-7:4:0
2410 ##-4:7:4
2411 ### negative argument is bitwise shorter than positive [perl #26559]
2412 ##30:-3:28
2413 ##123:-1:123
24132414 # equal arguments are treated special, so also do some test with unequal ones
24142415 0xFFFF:0xFFFF:0x0xFFFF
24152416 0xFFFFFF:0xFFFFFF:0x0xFFFFFF
24372438 +281474976710656:0:281474976710656
24382439 +281474976710656:1:281474976710657
24392440 +281474976710656:281474976710656:281474976710656
2440 -2:-3:-1
2441 -1:-1:-1
2442 -6:-6:-6
2443 -7:4:-3
2444 -4:7:-1
2445 +281474976710656:-1:-1
2446 30:-3:-1
2447 30:-4:-2
2448 300:-76:-68
2449 -76:300:-68
2441 #### does not work since Math::BigInt 1.999815
2442 ##-2:-3:-1
2443 ##-1:-1:-1
2444 ##-6:-6:-6
2445 ##-7:4:-3
2446 ##-4:7:-1
2447 ##+281474976710656:-1:-1
2448 ##30:-3:-1
2449 ##30:-4:-2
2450 ##300:-76:-68
2451 ##-76:300:-68
24502452 # equal arguments are treated special, so also do some test with unequal ones
24512453 0xFFFF:0xFFFF:0x0xFFFF
24522454 0xFFFFFF:0xFFFFFF:0x0xFFFFFF
24892491 +281474976710656:0:281474976710656
24902492 +281474976710656:1:281474976710657
24912493 +281474976710656:281474976710656:0
2492 -2:-3:3
2493 -1:-1:0
2494 -6:-6:0
2495 -7:4:-3
2496 -4:7:-5
2497 4:-7:-3
2498 -4:-7:5
2499 30:-3:-29
2500 30:-4:-30
2501 300:-76:-360
2502 -76:300:-360
2494 #### does not work since Math::BigInt 1.999815
2495 ##-2:-3:3
2496 ##-1:-1:0
2497 ##-6:-6:0
2498 ##-7:4:-3
2499 ##-4:7:-5
2500 ##4:-7:-3
2501 ##-4:-7:5
2502 ##30:-3:-29
2503 ##30:-4:-30
2504 ##300:-76:-360
2505 ##-76:300:-360
25032506 # equal arguments are treated special, so also do some test with unequal ones
25042507 0xFFFF:0xFFFF:0
25052508 0xFFFFFF:0xFFFFFF:0
66
77 BEGIN {
88 plan skip_all => "requires Math::BigInt 1.999712+" unless eval { require Math::BigInt && eval($Math::BigInt::VERSION) >= 1.999712 };
9 plan tests => 3712 # tests in require'd file
9 plan tests => 3652 # tests in require'd file
1010 + 6; # tests in this file
1111 }
1212
66
77 BEGIN {
88 plan skip_all => "requires Math::BigInt 1.999712+" unless eval { require Math::BigInt && eval($Math::BigInt::VERSION) >= 1.999712 };
9 plan tests => 3712 # tests in require'd file
9 plan tests => 3652 # tests in require'd file
1010 + 6; # tests in this file
1111 }
1212
00 use strict;
11 use warnings;
2 use Test::More tests => 12;
2 use Test::More tests => 14;
33
44 use Crypt::PK::RSA;
55 use Crypt::PK::ECC;
3535 ok($rsa->is_private, "RSA is_private $f");
3636 }
3737
38 ### XXX-FIXME password protected pkcs8 private keys are not supported
39 ### for my $f (qw/pkcs8.rsa-priv-pass.der pkcs8.rsa-priv-pass.pem/) {
40 ### $rsa->import_key("t/data/$f", "secret");
41 ### ok($rsa->is_private, "RSA is_private $f");
42 ### }
38 for my $f (qw/pkcs8.rsa-priv-pass.der pkcs8.rsa-priv-pass.pem/) {
39 $rsa->import_key("t/data/$f", "secret");
40 ok($rsa->is_private, "RSA is_private $f");
41 }
4342
4443 for my $f (qw/pkcs8.ec-short-priv-nopass.der pkcs8.ec-short-priv-nopass.pem pkcs8.ec-priv-nopass.der pkcs8.ec-priv-nopass.pem/) {
4544 $ec->import_key("t/data/$f");
+0
-669
t/wycheproof/aes_gcm_test.json less more
0 {
1 "algorithm": "AES-GCM",
2 "generatorVersion": "0.0a8",
3 "numberOfTests": 50,
4 "testGroups": [
5 {
6 "ivSize": 96,
7 "keySize": 128,
8 "tagSize": 128,
9 "tests": [
10 {
11 "aad": "",
12 "comment": "",
13 "ct": "26073cc1d851beff176384dc9896d5ff",
14 "iv": "028318abc1824029138141a2",
15 "key": "5b9604fe14eadba931b0ccf34843dab9",
16 "msg": "001d0c231287c1182784554ca3a21908",
17 "result": "valid",
18 "tag": "0a3ea7a5487cb5f7d70fb6c58d038554",
19 "tcId": 1
20 },
21 {
22 "aad": "00112233445566778899aabbccddeeff",
23 "comment": "",
24 "ct": "49d8b9783e911913d87094d1f63cc765",
25 "iv": "921d2507fa8007b7bd067d34",
26 "key": "5b9604fe14eadba931b0ccf34843dab9",
27 "msg": "001d0c231287c1182784554ca3a21908",
28 "result": "valid",
29 "tag": "1e348ba07cca2cf04c618cb4d43a5b92",
30 "tcId": 2
31 },
32 {
33 "aad": "aac39231129872a2",
34 "comment": "",
35 "ct": "eea945f3d0f98cc0fbab472a0cf24e87",
36 "iv": "0432bc49ac34412081288127",
37 "key": "aa023d0478dcb2b2312498293d9a9129",
38 "msg": "2035af313d1346ab00154fea78322105",
39 "result": "valid",
40 "tag": "4bb9b4812519dadf9e1232016d068133",
41 "tcId": 3
42 },
43 {
44 "aad": "",
45 "comment": "",
46 "ct": "ff",
47 "iv": "327182bee515d2b15f949477",
48 "key": "dc25a94c28b9d18a6468f41428fae84d",
49 "msg": "6f",
50 "result": "valid",
51 "tag": "62870f416e1fb63486127df9555ebcdb",
52 "tcId": 4
53 },
54 {
55 "aad": "",
56 "comment": "",
57 "ct": "4bd185849ab0f4d0",
58 "iv": "0cfe85626ce523b3204ca873",
59 "key": "bd6ffed2d59c492aec86368e02f6baeb",
60 "msg": "3c3b3a363f3a504e",
61 "result": "valid",
62 "tag": "742f379ab07b2c8c0c0eff4ce9327218",
63 "tcId": 5
64 },
65 {
66 "aad": "",
67 "comment": "",
68 "ct": "11afae2b91b71126e31d868e3482f907",
69 "iv": "5fe1b8445d7a2bce3ffd01c5",
70 "key": "6b21264d4ffdaa70021f6ea94f3f7729",
71 "msg": "6538395b746031796f5b60303261684e",
72 "result": "valid",
73 "tag": "b5133f5ce864f55641c121fb48c77e8c",
74 "tcId": 6
75 },
76 {
77 "aad": "",
78 "comment": "",
79 "ct": "ca741e2b8f4bfb75f3a897869664982be5e1feb1c3588621",
80 "iv": "1e0055ab643fe8d851f27501",
81 "key": "3f89802f2f430d027d9d27ab10095a1e",
82 "msg": "78446a4e313d634d524834637040456b793c6e4d4166544c",
83 "result": "valid",
84 "tag": "ab9a540db92381a4768ea81f08230100",
85 "tcId": 7
86 },
87 {
88 "aad": "15",
89 "comment": "",
90 "ct": "fa2ac3a4d15e01d64b642c4dc75f95e0",
91 "iv": "2071ec1a1d0ff802349fc01b",
92 "key": "f08afe018379b19417388302c3508983",
93 "msg": "566464646d4639476d5e4673653e3838",
94 "result": "valid",
95 "tag": "d95cea01fafb2c8c21cebfcbc412f87a",
96 "tcId": 8
97 },
98 {
99 "aad": "0b2bc21ab1fbff11e376e1a65ca2a1",
100 "comment": "",
101 "ct": "1e3373677b4615745a57ce43c0874702",
102 "iv": "460b321e66c90ae86f878da7",
103 "key": "7c7337a75c47230f579ff763e544b63b",
104 "msg": "4c565d4051404f4f35633a63455d7676",
105 "result": "valid",
106 "tag": "6c0314734528fe2863f2dc16f313e5ff",
107 "tcId": 9
108 },
109 {
110 "aad": "2eb61446950c83695522fdeb92220645",
111 "comment": "",
112 "ct": "107150b5349540a6b953c033d3ed0eec",
113 "iv": "787c817bf07a25ec613f4fbb",
114 "key": "9bd978c97f84c67e967a6dc71a9dd29a",
115 "msg": "4d36343f6e38716e476476394764635b",
116 "result": "valid",
117 "tag": "87ec1d4fee69de2efe606138b99a1c56",
118 "tcId": 10
119 },
120 {
121 "aad": "62a76634d40bb93ce8bd140e418bf88f002e1b88396511f5ddd9b099abe7b722",
122 "comment": "",
123 "ct": "8e0b9ca71471c5d509167fb138d65834",
124 "iv": "da22d5718083aee0b1ecf18c",
125 "key": "a3b604ee4889e9986b1d760779acb0da",
126 "msg": "453b3b34344076413d3b5b46373f725c",
127 "result": "valid",
128 "tag": "7cc68eb3039691eeea5b211c9f39244a",
129 "tcId": 11
130 },
131 {
132 "aad": "",
133 "comment": "special case",
134 "ct": "f62d84d649e56bc8cfedc5d74a51e2f7",
135 "iv": "000000000000000000000000",
136 "key": "00112233445566778899aabbccddeeff",
137 "msg": "ebd4a3e10cf6d41c50aeae007563b072",
138 "result": "valid",
139 "tag": "ffffffffffffffffffffffffffffffff",
140 "tcId": 12
141 },
142 {
143 "aad": "",
144 "comment": "special case",
145 "ct": "431f31e6840931fd95f94bf88296ff69",
146 "iv": "ffffffffffffffffffffffff",
147 "key": "00112233445566778899aabbccddeeff",
148 "msg": "d593c4d8224f1b100c35e4f6c4006543",
149 "result": "valid",
150 "tag": "00000000000000000000000000000000",
151 "tcId": 13
152 },
153 {
154 "aad": "",
155 "comment": "special case",
156 "ct": "d8eba6a5a03403851abc27f6e15d84c0",
157 "iv": "00112233445566778899aabb",
158 "key": "00112233445566778899aabbccddeeff",
159 "msg": "7fd49ba712d0d28f02ef54ed18db43f8",
160 "result": "valid",
161 "tag": "00000000000000000000000000000000",
162 "tcId": 14
163 }
164 ],
165 "type": "AES-GCM"
166 },
167 {
168 "ivSize": 64,
169 "keySize": 128,
170 "tagSize": 128,
171 "tests": [
172 {
173 "aad": "aac39231129872a2",
174 "comment": "",
175 "ct": "64c36bb3b732034e3a7d04efc5197785",
176 "iv": "0432bc49ac344120",
177 "key": "aa023d0478dcb2b2312498293d9a9129",
178 "msg": "2035af313d1346ab00154fea78322105",
179 "result": "valid",
180 "tag": "b7d0dd70b00d65b97cfd080ff4b819d1",
181 "tcId": 15
182 },
183 {
184 "aad": "",
185 "comment": "unusual IV size",
186 "ct": "553763110458769a08e3c5d9",
187 "iv": "22117438f0762c77",
188 "key": "b215270c3e1055888599f1e5f6188e57",
189 "msg": "7675613a6c356e663d483264",
190 "result": "valid",
191 "tag": "14fed4270ed847fec690988c729672d1",
192 "tcId": 16
193 }
194 ],
195 "type": "AES-GCM"
196 },
197 {
198 "ivSize": 128,
199 "keySize": 128,
200 "tagSize": 128,
201 "tests": [
202 {
203 "aad": "1a0293d8f90219058902139013908190bc490890d3ff12a3",
204 "comment": "",
205 "ct": "64069c2d58690561f27ee199e6b479b6369eec688672bde9",
206 "iv": "3254202d854734812398127a3d134421",
207 "key": "2034a82547276c83dd3212a813572bce",
208 "msg": "02efd2e5782312827ed5d230189a2a342b277ce048462193",
209 "result": "valid",
210 "tag": "9b7abadd6e69c1d9ec925786534f5075",
211 "tcId": 17
212 },
213 {
214 "aad": "",
215 "comment": "J0:000102030405060708090a0b0c0d0e0f",
216 "ct": "00078d109d92143fcd5df56721b884fac64ac7762cc09eea2a3c68e92a17bdb575f87bda18be564e",
217 "iv": "f95fde4a751913202aeeee32a0b55753",
218 "key": "00112233445566778899aabbccddeeff",
219 "msg": "00000000000000000000000000000000000000000000000000000000000000000000000000000000",
220 "result": "valid",
221 "tag": "152a65045fe674f97627427af5be22da",
222 "tcId": 18
223 },
224 {
225 "aad": "",
226 "comment": "J0:00000000000000000000000000000000",
227 "ct": "84d4c9c08b4f482861e3a9c6c35bc4d91df927374513bfd49f436bd73f325285daef4ff7e13d46a6",
228 "iv": "7b95b8c356810a84711d68150a1b7750",
229 "key": "00112233445566778899aabbccddeeff",
230 "msg": "00000000000000000000000000000000000000000000000000000000000000000000000000000000",
231 "result": "valid",
232 "tag": "213a3cb93855d18e69337eee66aeec07",
233 "tcId": 19
234 },
235 {
236 "aad": "",
237 "comment": "J0:ffffffffffffffffffffffffffffffff",
238 "ct": "948ca37a8e6649e88aeffb1c598f3607007702417ea0e0bc3c60ad5a949886de968cf53ea6462aed",
239 "iv": "1a552e67cdc4dc1a33b824874ebf0bed",
240 "key": "00112233445566778899aabbccddeeff",
241 "msg": "00000000000000000000000000000000000000000000000000000000000000000000000000000000",
242 "result": "valid",
243 "tag": "99b381bfa2af9751c39d1b6e86d1be6a",
244 "tcId": 20
245 },
246 {
247 "aad": "",
248 "comment": "J0:000102030405060708090a0bffffffff",
249 "ct": "127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4af37d0fe9af033052bd537c4ae978f60",
250 "iv": "99821c2dd5daecded07300f577f7aff1",
251 "key": "00112233445566778899aabbccddeeff",
252 "msg": "00000000000000000000000000000000000000000000000000000000000000000000000000000000",
253 "result": "valid",
254 "tag": "07eb2fe4a958f8434d40684899507c7c",
255 "tcId": 21
256 },
257 {
258 "aad": "",
259 "comment": "J0:000102030405060708090a0bfffffffe",
260 "ct": "0cf6ae47156b14dce03c8a07a2e172b1127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4",
261 "iv": "5e4a3900142358d1c774d8d124d8d27d",
262 "key": "00112233445566778899aabbccddeeff",
263 "msg": "00000000000000000000000000000000000000000000000000000000000000000000000000000000",
264 "result": "valid",
265 "tag": "f145c2dcaf339eede427be934357eac0",
266 "tcId": 22
267 },
268 {
269 "aad": "",
270 "comment": "special case",
271 "ct": "1cd5a06214235ceb044d4bad7b047312",
272 "iv": "ffffffffffffffffffffffffffffffff",
273 "key": "00112233445566778899aabbccddeeff",
274 "msg": "4d82639c39d3f3490ee903dd0be7afcf",
275 "result": "valid",
276 "tag": "ffffffffffffffffffffffffffffffff",
277 "tcId": 23
278 },
279 {
280 "aad": "",
281 "comment": "unusual IV size",
282 "ct": "d6db136eb9bd4cdaf0bd1913",
283 "iv": "44b926c2a249611e14475b6cfe4d7dae",
284 "key": "c79117e417d6d45e37a52441cbfaa47b",
285 "msg": "623734365060575b423b303a",
286 "result": "valid",
287 "tag": "54132cb206112184c889e1f15b83fe1f",
288 "tcId": 24
289 }
290 ],
291 "type": "AES-GCM"
292 },
293 {
294 "ivSize": 96,
295 "keySize": 256,
296 "tagSize": 128,
297 "tests": [
298 {
299 "aad": "00000000ffffffff",
300 "comment": "",
301 "ct": "e27abdd2d2a53d2f136b",
302 "iv": "00112233445566778899aabb",
303 "key": "92ace3e348cd821092cd921aa3546374299ab46209691bc28b8752d17f123c20",
304 "msg": "00010203040506070809",
305 "result": "valid",
306 "tag": "9a4a2579529301bcfb71c78d4060f52c",
307 "tcId": 25
308 },
309 {
310 "aad": "aabbccddeeff",
311 "comment": "",
312 "ct": "",
313 "iv": "00112233445566778899aabb",
314 "key": "29d3a44f8723dc640239100c365423a312934ac80239212ac3df3421a2098123",
315 "msg": "",
316 "result": "valid",
317 "tag": "2a7d77fa526b8250cb296078926b5020",
318 "tcId": 26
319 },
320 {
321 "aad": "",
322 "comment": "",
323 "ct": "11",
324 "iv": "61de8c2f27065bb3f1235d55",
325 "key": "a68e06009f0c9630fed700e67d4960378cc1c86ae6cc79a6ac6a9042bf83039a",
326 "msg": "7a",
327 "result": "valid",
328 "tag": "05402b6d9671f281c34848fed708da8b",
329 "tcId": 27
330 },
331 {
332 "aad": "",
333 "comment": "",
334 "ct": "aecefdde647dbfd9",
335 "iv": "27f3c472caf75d6102ef5f0d",
336 "key": "fe65ab5e97e2adff16bb5cf71f31d09754ce2a246aeaedc5647afb54dce7b68d",
337 "msg": "493d425c4b3f6d51",
338 "result": "valid",
339 "tag": "02af89a1eadcb29077a26203314a7dc3",
340 "tcId": 28
341 },
342 {
343 "aad": "",
344 "comment": "",
345 "ct": "3ddf2af410318b26750139bf4ec13460",
346 "iv": "6f5485754cd243aecd2c9e43",
347 "key": "9c6edc8b05d7bceb455a6b915f16f117e244ff788a8c20c25fd6e0a49566d781",
348 "msg": "5031613a625a7348753b323c4f3f7835",
349 "result": "valid",
350 "tag": "4e4bc7648e7fb0976c4cb9c2fb3ca540",
351 "tcId": 29
352 },
353 {
354 "aad": "",
355 "comment": "",
356 "ct": "28bbe0d13c0f43422df882a2dc9e011b4d4fd5bc9e73c515",
357 "iv": "3d3f629413e65f8b6e55ec8e",
358 "key": "c786bc3074dad0f11efecfd24dd9f9df9fec79161d1ffd5acb18fc69fe3f3e0f",
359 "msg": "635569643f32513f655a6e5c423547744259725e454b616d",
360 "result": "valid",
361 "tag": "bbf623568c0bd3b94b5201af8711a8d2",
362 "tcId": 30
363 },
364 {
365 "aad": "45",
366 "comment": "",
367 "ct": "69c3ee7e6d4bae0d747164980d6b9b0c",
368 "iv": "c0dfc8a34a8c946504f882c5",
369 "key": "44a85d703964debdf04efe8748c7953da193ecd7ce4453673d86b96c5a1b3154",
370 "msg": "5a416a725a6d69746269316f6c747566",
371 "result": "valid",
372 "tag": "5221ece0acc54017981f0cdad17839b2",
373 "tcId": 31
374 },
375 {
376 "aad": "e19b62570639e9329109d81795f82f",
377 "comment": "",
378 "ct": "54d25cd9f65a56ee17a4cb88fbc7489d",
379 "iv": "6f6a2fc05f916819550e1ec0",
380 "key": "afc8d84a39c7b984670d42712c1e6b86aa8bf9458e20054da9aa4de627aadb69",
381 "msg": "45353c45306243584277445f317a355a",
382 "result": "valid",
383 "tag": "8e535d739362959710ec3ddb486e8bc2",
384 "tcId": 32
385 },
386 {
387 "aad": "d0468a40ded0439cdf41cfa5662181d8",
388 "comment": "",
389 "ct": "ec23144c64749090e581928d86681f3e",
390 "iv": "b74599e72c0309e162658615",
391 "key": "62f210a5cdfaa9c341c5c25ca1510fbbe611d433091d064eb62dbbcfbc95f15b",
392 "msg": "5a6551343a4b45685c49795b5a557449",
393 "result": "valid",
394 "tag": "ce0594dabb2b4db89460e085bc44e684",
395 "tcId": 33
396 },
397 {
398 "aad": "6387afe729e73233e3860de9c1a6617b37bab1eedaba9fcb53618e7eac3d8009",
399 "comment": "",
400 "ct": "fcfc653448912e1d9f5413dc92c7678b",
401 "iv": "74852c78eb5a479ec8620ae4",
402 "key": "34135b6afae2248312d68c1e28db5a4cbbfd3ccc5b4aab357353bd2541d45c59",
403 "msg": "34356b523f4a6d5c3237325043353e50",
404 "result": "valid",
405 "tag": "1b3acf71c1fdcfa8d61d585d10004f6d",
406 "tcId": 34
407 }
408 ],
409 "type": "AES-GCM"
410 },
411 {
412 "ivSize": 96,
413 "keySize": 192,
414 "tagSize": 128,
415 "tests": [
416 {
417 "aad": "",
418 "comment": "",
419 "ct": "7a",
420 "iv": "e6bfc54c87a8e2a9b539eedb",
421 "key": "6c7a0c4c8515ed6c7d4eca4916bb0c8362d282afeacbe3f9",
422 "msg": "3c",
423 "result": "valid",
424 "tag": "106daeade85585d997e65bc4564fe125",
425 "tcId": 35
426 },
427 {
428 "aad": "",
429 "comment": "",
430 "ct": "16f812c2be4121b6",
431 "iv": "6d7baec9ed558f82aa1128cd",
432 "key": "35a0d16c02ec630e360e9d7243a82c76ac36668c0b59413e",
433 "msg": "5c513c3a74763674",
434 "result": "valid",
435 "tag": "f35ba677c07a76aea8e70a81918d35cf",
436 "tcId": 36
437 },
438 {
439 "aad": "",
440 "comment": "",
441 "ct": "21c250e0f28c494c944bd1345d6daa51",
442 "iv": "cffd1a7e8d52cf3c0c4bbb8e",
443 "key": "ddeb7f10bbd1b82c115165e6c1547d224e3449933ea3bfe9",
444 "msg": "526a3b4e7472324a5b3a5b553b4b443f",
445 "result": "valid",
446 "tag": "bbaea6623cf22328efcd21bf3656987e",
447 "tcId": 37
448 },
449 {
450 "aad": "",
451 "comment": "",
452 "ct": "034c477eee703e11b0f354d5912c16fd512c69cccbc22211",
453 "iv": "56f2119df4070d2e767861e8",
454 "key": "b567dc2ed4684ccfb582d80ff9b15ef520a325f0b8201cdc",
455 "msg": "306c3e337a60677956536e346472534679707a6552624e3f",
456 "result": "valid",
457 "tag": "d8ecc0925d544d9e2906504e4f006bea",
458 "tcId": 38
459 }
460 ],
461 "type": "AES-GCM"
462 },
463 {
464 "ivSize": 120,
465 "keySize": 128,
466 "tagSize": 128,
467 "tests": [
468 {
469 "aad": "",
470 "comment": "unusual IV size",
471 "ct": "fde7899c326af98d67b07890",
472 "iv": "ca2a23ea38e82a4304021e0984800c",
473 "key": "a9ded7b2cbce3621d310006444ce80a3",
474 "msg": "665470423738756779357345",
475 "result": "valid",
476 "tag": "a545ed6b98a8b49c6588232e3d876de7",
477 "tcId": 39
478 }
479 ],
480 "type": "AES-GCM"
481 },
482 {
483 "ivSize": 160,
484 "keySize": 128,
485 "tagSize": 128,
486 "tests": [
487 {
488 "aad": "",
489 "comment": "unusual IV size",
490 "ct": "35a123fa123571aa0d242a66",
491 "iv": "9ce715dd2a59b4a6bf7451c7a144b97f3e62c0a0",
492 "key": "1e7cc3c9116b0a2d25154e1f4ae97796",
493 "msg": "6c74623b3346665333613c3d",
494 "result": "valid",
495 "tag": "831a00839d8c008c9d1cb0f9a8d17255",
496 "tcId": 40
497 }
498 ],
499 "type": "AES-GCM"
500 },
501 {
502 "ivSize": 64,
503 "keySize": 256,
504 "tagSize": 128,
505 "tests": [
506 {
507 "aad": "",
508 "comment": "unusual IV size",
509 "ct": "99add354679e324c3277506c",
510 "iv": "bd3b080f33229c69",
511 "key": "b22f6e946ab41994781b4bfff1e3f44e3daaf4d9ad788bbfa39a8caa2bc112cf",
512 "msg": "3b353b365e37784a5833354c",
513 "result": "valid",
514 "tag": "174fd057b60654548d833f9d6d9626e8",
515 "tcId": 41
516 }
517 ],
518 "type": "AES-GCM"
519 },
520 {
521 "ivSize": 120,
522 "keySize": 256,
523 "tagSize": 128,
524 "tests": [
525 {
526 "aad": "",
527 "comment": "unusual IV size",
528 "ct": "992b01084e37fbe3a6cfd456",
529 "iv": "479e398a4805a347a5c4c16ddfe621",
530 "key": "0d20b8ef8b05c48f691a5dd9b49b6c0637aee0567257b6c3ce35a5823c337294",
531 "msg": "527979696037335d553a4767",
532 "result": "valid",
533 "tag": "1cd717548e768aa0f9932311d443bf0e",
534 "tcId": 42
535 }
536 ],
537 "type": "AES-GCM"
538 },
539 {
540 "ivSize": 128,
541 "keySize": 256,
542 "tagSize": 128,
543 "tests": [
544 {
545 "aad": "",
546 "comment": "unusual IV size",
547 "ct": "fa93631a76a63d8096bb11f3",
548 "iv": "ad581e8f55a8d283f0dfebae9d0c6484",
549 "key": "cc4a246cb3e166c194e59f465db9adf92a8974cd472744c062728ccbae687aac",
550 "msg": "6b4d3e67695a79544b725046",
551 "result": "valid",
552 "tag": "fb1c7f1c3d5c0155ae18eb9bc13f7758",
553 "tcId": 43
554 }
555 ],
556 "type": "AES-GCM"
557 },
558 {
559 "ivSize": 160,
560 "keySize": 256,
561 "tagSize": 128,
562 "tests": [
563 {
564 "aad": "",
565 "comment": "unusual IV size",
566 "ct": "b35920ed04f6a7dcf8d075a9",
567 "iv": "3293e555aa1cb29f839d571e811b8e84807a0031",
568 "key": "3a95937dd23f0997fae31a26821d99e8e338016c05ad30718f41fa04aced12f8",
569 "msg": "5578554a61324e4c3142483a",
570 "result": "valid",
571 "tag": "fa0c75f97432e5ef97445ccf99a90231",
572 "tcId": 44
573 }
574 ],
575 "type": "AES-GCM"
576 },
577 {
578 "ivSize": 0,
579 "keySize": 128,
580 "tagSize": 128,
581 "tests": [
582 {
583 "aad": "",
584 "comment": "0 size IV is not valid",
585 "ct": "",
586 "iv": "",
587 "key": "b1e11d771f1ea274a3386d3879738d64",
588 "msg": "",
589 "result": "invalid",
590 "tag": "ec5c4805da277942d7ad6ea2d212d909",
591 "tcId": 45
592 },
593 {
594 "aad": "",
595 "comment": "0 size IV is not valid",
596 "ct": "8766b19d2e07b51ddfe8c85ea440ee2e",
597 "iv": "",
598 "key": "fb6c0503a1cd5219a2d5daa2e32a1520",
599 "msg": "446e39493339594b7247494d41344739",
600 "result": "invalid",
601 "tag": "5154e473735b026452a57060f3be5f66",
602 "tcId": 46
603 }
604 ],
605 "type": "AES-GCM"
606 },
607 {
608 "ivSize": 0,
609 "keySize": 192,
610 "tagSize": 128,
611 "tests": [
612 {
613 "aad": "",
614 "comment": "0 size IV is not valid",
615 "ct": "",
616 "iv": "",
617 "key": "0955fa25af91994f0407ff1e2f3b09af4074c13fbba6aa0b",
618 "msg": "",
619 "result": "invalid",
620 "tag": "bec27fcd432323a3162cbcfc4a4ae53b",
621 "tcId": 47
622 },
623 {
624 "aad": "",
625 "comment": "0 size IV is not valid",
626 "ct": "a284cb5110f73225954d0a74fc24b024",
627 "iv": "",
628 "key": "0750d0d5d4df4985fcc726177e6b325e90c7e9c5f4922e43",
629 "msg": "793b50665c4c79647534646231496748",
630 "result": "invalid",
631 "tag": "8fe5ddb632fa6d72af5fe114c95bcaa3",
632 "tcId": 48
633 }
634 ],
635 "type": "AES-GCM"
636 },
637 {
638 "ivSize": 0,
639 "keySize": 256,
640 "tagSize": 128,
641 "tests": [
642 {
643 "aad": "",
644 "comment": "0 size IV is not valid",
645 "ct": "",
646 "iv": "",
647 "key": "57163950d52c957068dc2ae7184911402887458e65ae212e54369eac864376a8",
648 "msg": "",
649 "result": "invalid",
650 "tag": "6397e0239baa358c90bc5a8bb69d3330",
651 "tcId": 49
652 },
653 {
654 "aad": "",
655 "comment": "0 size IV is not valid",
656 "ct": "77bbd2bc21a7cb2f1b62510a659db421",
657 "iv": "",
658 "key": "c242c762169e049fa7952d14123f61add08f9cd3cdb0784d7241f073244f0580",
659 "msg": "3669513131313f386240783b573b666f",
660 "result": "invalid",
661 "tag": "b2015bf3387d68cd2e9785d0b8bc46c8",
662 "tcId": 50
663 }
664 ],
665 "type": "AES-GCM"
666 }
667 ]
668 }
+0
-1494
t/wycheproof/dsa_test.json less more
0 {
1 "algorithm" : "DSA",
2 "generatorVersion" : "0.0a10",
3 "numberOfTests" : 206,
4 "testGroups" : [
5 {
6 "keyDer" : "3081f03081a806072a8648ce38040130819c024100fca682ce8e12caba26efccf7110e526db078b05edecbcd1eb4a208f3ae1617ae01f35b91a47e6df63413c5e12ed0899bcd132acd50d99151bdc43ee737592e17021500962eddcc369cba8ebb260ee6b6a126d9346e38c50240678471b27a9cf44ee91a49c5147db1a9aaf244f05a434d6486931d2d14271b9e35030b71fd73da179069b32e2935630e1c2062354d0da20a6c416e50be794ca403430002407cc153f191171bdf13b6541c07dc611debc41efa18e1df5c2e42c2612e0e936abdcc28e66ce73bdedf449b5d39ec8e509a4767907345f38710638abe5c316ce5",
7 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIHwMIGoBgcqhkjOOAQBMIGcAkEA/KaCzo4Syrom78z3EQ5SbbB4sF7ey80etKII\n864WF64B81uRpH5t9jQTxeEu0ImbzRMqzVDZkVG9xD7nN1kuFwIVAJYu3cw2nLqO\nuyYO5rahJtk0bjjFAkBnhHGyepz0TukaScUUfbGpqvJE8FpDTWSGkx0tFCcbnjUD\nC3H9c9oXkGmzLik1Yw4cIGI1TQ2iCmxBblC+eUykA0MAAkB8wVPxkRcb3xO2VBwH\n3GEd68Qe+hjh31wuQsJhLg6Tar3MKOZs5zve30SbXTnsjlCaR2eQc0XzhxBjir5c\nMWzl\n-----END PUBLIC KEY-----",
8 "sha" : "SHA-1",
9 "type" : "DSAVer",
10 "key" : {
11 "g" : "678471b27a9cf44ee91a49c5147db1a9aaf244f05a434d6486931d2d14271b9e35030b71fd73da179069b32e2935630e1c2062354d0da20a6c416e50be794ca4",
12 "keyType" : "DSA public key",
13 "p" : "0fca682ce8e12caba26efccf7110e526db078b05edecbcd1eb4a208f3ae1617ae01f35b91a47e6df63413c5e12ed0899bcd132acd50d99151bdc43ee737592e17",
14 "q" : "0962eddcc369cba8ebb260ee6b6a126d9346e38c5",
15 "y" : "7cc153f191171bdf13b6541c07dc611debc41efa18e1df5c2e42c2612e0e936abdcc28e66ce73bdedf449b5d39ec8e509a4767907345f38710638abe5c316ce5"
16 },
17 "tests" : [
18 {
19 "comment" : "random signature",
20 "message" : "48656c6c6f",
21 "result" : "valid",
22 "sig" : "302c021426184de880bd04090541530d4951dffb2200b2cf02143c2cfef8b2c62eb572547f173fb4973ac7225207",
23 "tcId" : 1
24 },
25 {
26 "comment" : "random signature",
27 "message" : "48656c6c6f",
28 "result" : "valid",
29 "sig" : "302c02141c71bdda8343c3b8c8503772a3dca7f5ebc3e018021421c7aff53838a6ee5fdf4c4b66f7ae67241021f1",
30 "tcId" : 2
31 },
32 {
33 "comment" : "random signature",
34 "message" : "48656c6c6f",
35 "result" : "valid",
36 "sig" : "302c02142b6a1d97f043cf8ac1574af5eae78b3d01e444e80214787affc9a23bf98848ccb99a0339ef9ec7ae767e",
37 "tcId" : 3
38 },
39 {
40 "comment" : "random signature",
41 "message" : "48656c6c6f",
42 "result" : "valid",
43 "sig" : "302d02150087e0e4ae54fe9fa55abe4914380dccd7d546eee902147a075d0115c06d17194665739ab713a0734b3d36",
44 "tcId" : 4
45 },
46 {
47 "comment" : "random signature",
48 "message" : "48656c6c6f",
49 "result" : "valid",
50 "sig" : "302c02144ce8e8d2abb5f230a5fdcf6f2d8f81bb1b80ed5502140d63dbfd1100d3caf0580d93101f21e699633a56",
51 "tcId" : 5
52 }
53 ]
54 },
55 {
56 "keyDer" : "308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201001e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931",
57 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7Fnjuv\nNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSz\nNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51k\njviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmY\nchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm\n/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaW\npoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6\nNHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2\np5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUn\ntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOl\nXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92v\nAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IB\nBQACggEAHnf4QrGuD82ZKdOUFh1B4UYU/3UHqaMfSh8U0i4qYnofTllmJIg/GlsW\njpQlFG8i1fbuKHV0FHFLuZS6ESnwFdbgSnF+35tTCl1cq5TxRjHotM95rrNYzHQY\nRVU4QeisRhYw6ASmL0Nna6Z5SvZomcN3uGnqYSp7n+ZhGqlr5S64tiyXkRe7vMqK\nfsHh/6scffz8cEhwDTrjhYE26JdwHXwpIbXf7x0fiX9Q2WyhtcLtxYytoYkZ41ZC\n8IB+6/oAyZoy9NCVwxiPeO1UcRvgMlxLUyrszWVApWfDJyJUQOoVMZveBlEEeaGG\nF5niW1fezHPANtdaBwK9NzyiMTSZMQ==\n-----END PUBLIC KEY-----",
58 "sha" : "SHA-224",
59 "type" : "DSAVer",
60 "key" : {
61 "g" : "16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde",
62 "keyType" : "DSA public key",
63 "p" : "08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667",
64 "q" : "0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d",
65 "y" : "1e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931"
66 },
67 "tests" : [
68 {
69 "comment" : "valid",
70 "message" : "48656c6c6f",
71 "result" : "valid",
72 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
73 "tcId" : 6
74 },
75 {
76 "comment" : "random signature",
77 "message" : "48656c6c6f",
78 "result" : "valid",
79 "sig" : "303c021c5970bf65c8cd0da10edfe80430ab0b456cefbc3913116a31f024f240021c58ca06a899c7fadedb2d31abf917f9de2e4b97d1b3c323de04fd519d",
80 "tcId" : 7
81 },
82 {
83 "comment" : "random signature",
84 "message" : "48656c6c6f",
85 "result" : "valid",
86 "sig" : "303d021c00ff3f02204b98d07a502c00ff8a59a41497c38f5193e68ccc16d080021d00b51491eae8112ce48ed85896ba2632cd90fd02e83a7a17a420157b0e",
87 "tcId" : 8
88 },
89 {
90 "comment" : "random signature",
91 "message" : "48656c6c6f",
92 "result" : "valid",
93 "sig" : "303d021c39fcb3f986c4fb681f2f5d4a50dd9b3b898ca8df674fbf2760666294021d00b0205076df3997e815fefa0a20e33700460ec66f53415799eb58802a",
94 "tcId" : 9
95 },
96 {
97 "comment" : "random signature",
98 "message" : "48656c6c6f",
99 "result" : "valid",
100 "sig" : "303e021d008588cdf67cff154f19b9007b0b9e8149902c24771435c02c807713e5021d008595d7291eabc7bd81dc7566544e8abba81b764d4edb0dc619cf14c0",
101 "tcId" : 10
102 },
103 {
104 "comment" : "random signature",
105 "message" : "48656c6c6f",
106 "result" : "valid",
107 "sig" : "303c021c521c90b08df83c821e329c7275b88648a9c16031b3acd223806a61bd021c6443cc6666b43702f1a158430ce20529883b03e02ce2d6869c62084e",
108 "tcId" : 11
109 },
110 {
111 "comment" : "Legacy:ASN encoding of s misses leading 0",
112 "message" : "48656c6c6f",
113 "result" : "acceptable",
114 "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
115 "tcId" : 12
116 },
117 {
118 "comment" : "BER:long form encoding of length",
119 "message" : "48656c6c6f",
120 "result" : "acceptable",
121 "sig" : "30813d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
122 "tcId" : 13
123 },
124 {
125 "comment" : "BER:long form encoding of length",
126 "message" : "48656c6c6f",
127 "result" : "acceptable",
128 "sig" : "303e02811c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
129 "tcId" : 14
130 },
131 {
132 "comment" : "BER:long form encoding of length",
133 "message" : "48656c6c6f",
134 "result" : "acceptable",
135 "sig" : "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02811d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
136 "tcId" : 15
137 },
138 {
139 "comment" : "BER:length contains leading 0",
140 "message" : "48656c6c6f",
141 "result" : "acceptable",
142 "sig" : "3082003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
143 "tcId" : 16
144 },
145 {
146 "comment" : "BER:length contains leading 0",
147 "message" : "48656c6c6f",
148 "result" : "acceptable",
149 "sig" : "303f0282001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
150 "tcId" : 17
151 },
152 {
153 "comment" : "BER:length contains leading 0",
154 "message" : "48656c6c6f",
155 "result" : "acceptable",
156 "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0282001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
157 "tcId" : 18
158 },
159 {
160 "comment" : "BER:indefinite length",
161 "message" : "48656c6c6f",
162 "result" : "acceptable",
163 "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000",
164 "tcId" : 19
165 },
166 {
167 "comment" : "BER:prepending 0's to integer",
168 "message" : "48656c6c6f",
169 "result" : "acceptable",
170 "sig" : "303f021e00001e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
171 "tcId" : 20
172 },
173 {
174 "comment" : "BER:prepending 0's to integer",
175 "message" : "48656c6c6f",
176 "result" : "acceptable",
177 "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f000000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
178 "tcId" : 21
179 },
180 {
181 "comment" : "wrong length",
182 "message" : "48656c6c6f",
183 "result" : "invalid",
184 "sig" : "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
185 "tcId" : 22
186 },
187 {
188 "comment" : "wrong length",
189 "message" : "48656c6c6f",
190 "result" : "invalid",
191 "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
192 "tcId" : 23
193 },
194 {
195 "comment" : "wrong length",
196 "message" : "48656c6c6f",
197 "result" : "invalid",
198 "sig" : "303d021d1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
199 "tcId" : 24
200 },
201 {
202 "comment" : "wrong length",
203 "message" : "48656c6c6f",
204 "result" : "invalid",
205 "sig" : "303d021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
206 "tcId" : 25
207 },
208 {
209 "comment" : "wrong length",
210 "message" : "48656c6c6f",
211 "result" : "invalid",
212 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021e00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
213 "tcId" : 26
214 },
215 {
216 "comment" : "wrong length",
217 "message" : "48656c6c6f",
218 "result" : "invalid",
219 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
220 "tcId" : 27
221 },
222 {
223 "comment" : "uint32 overflow in length",
224 "message" : "48656c6c6f",
225 "result" : "invalid",
226 "sig" : "3085010000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
227 "tcId" : 28
228 },
229 {
230 "comment" : "uint32 overflow in length",
231 "message" : "48656c6c6f",
232 "result" : "invalid",
233 "sig" : "30420285010000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
234 "tcId" : 29
235 },
236 {
237 "comment" : "uint32 overflow in length",
238 "message" : "48656c6c6f",
239 "result" : "invalid",
240 "sig" : "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0285010000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
241 "tcId" : 30
242 },
243 {
244 "comment" : "uint64 overflow in length",
245 "message" : "48656c6c6f",
246 "result" : "invalid",
247 "sig" : "308901000000000000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
248 "tcId" : 31
249 },
250 {
251 "comment" : "uint64 overflow in length",
252 "message" : "48656c6c6f",
253 "result" : "invalid",
254 "sig" : "3046028901000000000000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
255 "tcId" : 32
256 },
257 {
258 "comment" : "uint64 overflow in length",
259 "message" : "48656c6c6f",
260 "result" : "invalid",
261 "sig" : "3046021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd028901000000000000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
262 "tcId" : 33
263 },
264 {
265 "comment" : "length = 2**31 - 1",
266 "message" : "48656c6c6f",
267 "result" : "invalid",
268 "sig" : "30847fffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
269 "tcId" : 34
270 },
271 {
272 "comment" : "length = 2**31 - 1",
273 "message" : "48656c6c6f",
274 "result" : "invalid",
275 "sig" : "304102847fffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
276 "tcId" : 35
277 },
278 {
279 "comment" : "length = 2**31 - 1",
280 "message" : "48656c6c6f",
281 "result" : "invalid",
282 "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02847fffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
283 "tcId" : 36
284 },
285 {
286 "comment" : "length = 2**32 - 1",
287 "message" : "48656c6c6f",
288 "result" : "invalid",
289 "sig" : "3084ffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
290 "tcId" : 37
291 },
292 {
293 "comment" : "length = 2**32 - 1",
294 "message" : "48656c6c6f",
295 "result" : "invalid",
296 "sig" : "30410284ffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
297 "tcId" : 38
298 },
299 {
300 "comment" : "length = 2**32 - 1",
301 "message" : "48656c6c6f",
302 "result" : "invalid",
303 "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0284ffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
304 "tcId" : 39
305 },
306 {
307 "comment" : "length = 2**40 - 1",
308 "message" : "48656c6c6f",
309 "result" : "invalid",
310 "sig" : "3085ffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
311 "tcId" : 40
312 },
313 {
314 "comment" : "length = 2**40 - 1",
315 "message" : "48656c6c6f",
316 "result" : "invalid",
317 "sig" : "30420285ffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
318 "tcId" : 41
319 },
320 {
321 "comment" : "length = 2**40 - 1",
322 "message" : "48656c6c6f",
323 "result" : "invalid",
324 "sig" : "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0285ffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
325 "tcId" : 42
326 },
327 {
328 "comment" : "length = 2**64 - 1",
329 "message" : "48656c6c6f",
330 "result" : "invalid",
331 "sig" : "3088ffffffffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
332 "tcId" : 43
333 },
334 {
335 "comment" : "length = 2**64 - 1",
336 "message" : "48656c6c6f",
337 "result" : "invalid",
338 "sig" : "30450288ffffffffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
339 "tcId" : 44
340 },
341 {
342 "comment" : "length = 2**64 - 1",
343 "message" : "48656c6c6f",
344 "result" : "invalid",
345 "sig" : "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0288ffffffffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
346 "tcId" : 45
347 },
348 {
349 "comment" : "incorrect length",
350 "message" : "48656c6c6f",
351 "result" : "invalid",
352 "sig" : "30ff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
353 "tcId" : 46
354 },
355 {
356 "comment" : "incorrect length",
357 "message" : "48656c6c6f",
358 "result" : "invalid",
359 "sig" : "303d02ff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
360 "tcId" : 47
361 },
362 {
363 "comment" : "incorrect length",
364 "message" : "48656c6c6f",
365 "result" : "invalid",
366 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02ff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
367 "tcId" : 48
368 },
369 {
370 "comment" : "indefinte length without termination",
371 "message" : "48656c6c6f",
372 "result" : "invalid",
373 "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
374 "tcId" : 49
375 },
376 {
377 "comment" : "indefinte length without termination",
378 "message" : "48656c6c6f",
379 "result" : "invalid",
380 "sig" : "303d02801e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
381 "tcId" : 50
382 },
383 {
384 "comment" : "indefinte length without termination",
385 "message" : "48656c6c6f",
386 "result" : "invalid",
387 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd028000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
388 "tcId" : 51
389 },
390 {
391 "comment" : "removing sequence",
392 "message" : "48656c6c6f",
393 "result" : "invalid",
394 "sig" : "",
395 "tcId" : 52
396 },
397 {
398 "comment" : "appending 0's to sequence",
399 "message" : "48656c6c6f",
400 "result" : "invalid",
401 "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000",
402 "tcId" : 53
403 },
404 {
405 "comment" : "prepending 0's to sequence",
406 "message" : "48656c6c6f",
407 "result" : "invalid",
408 "sig" : "303f0000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
409 "tcId" : 54
410 },
411 {
412 "comment" : "appending unused 0's",
413 "message" : "48656c6c6f",
414 "result" : "invalid",
415 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000",
416 "tcId" : 55
417 },
418 {
419 "comment" : "appending unused 0's",
420 "message" : "48656c6c6f",
421 "result" : "invalid",
422 "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
423 "tcId" : 56
424 },
425 {
426 "comment" : "appending null value",
427 "message" : "48656c6c6f",
428 "result" : "invalid",
429 "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360500",
430 "tcId" : 57
431 },
432 {
433 "comment" : "appending null value",
434 "message" : "48656c6c6f",
435 "result" : "invalid",
436 "sig" : "303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
437 "tcId" : 58
438 },
439 {
440 "comment" : "appending null value",
441 "message" : "48656c6c6f",
442 "result" : "invalid",
443 "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360500",
444 "tcId" : 59
445 },
446 {
447 "comment" : "including garbage",
448 "message" : "48656c6c6f",
449 "result" : "invalid",
450 "sig" : "3042498177303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
451 "tcId" : 60
452 },
453 {
454 "comment" : "including garbage",
455 "message" : "48656c6c6f",
456 "result" : "invalid",
457 "sig" : "30412500303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
458 "tcId" : 61
459 },
460 {
461 "comment" : "including garbage",
462 "message" : "48656c6c6f",
463 "result" : "invalid",
464 "sig" : "303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360004deadbeef",
465 "tcId" : 62
466 },
467 {
468 "comment" : "including garbage",
469 "message" : "48656c6c6f",
470 "result" : "invalid",
471 "sig" : "30422221498177021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
472 "tcId" : 63
473 },
474 {
475 "comment" : "including garbage",
476 "message" : "48656c6c6f",
477 "result" : "invalid",
478 "sig" : "304122202500021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
479 "tcId" : 64
480 },
481 {
482 "comment" : "including garbage",
483 "message" : "48656c6c6f",
484 "result" : "invalid",
485 "sig" : "3045221e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0004deadbeef021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
486 "tcId" : 65
487 },
488 {
489 "comment" : "including garbage",
490 "message" : "48656c6c6f",
491 "result" : "invalid",
492 "sig" : "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2222498177021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
493 "tcId" : 66
494 },
495 {
496 "comment" : "including garbage",
497 "message" : "48656c6c6f",
498 "result" : "invalid",
499 "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd22212500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
500 "tcId" : 67
501 },
502 {
503 "comment" : "including garbage",
504 "message" : "48656c6c6f",
505 "result" : "invalid",
506 "sig" : "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd221f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360004deadbeef",
507 "tcId" : 68
508 },
509 {
510 "comment" : "including undefined tags",
511 "message" : "48656c6c6f",
512 "result" : "invalid",
513 "sig" : "3045aa00bb00cd00303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
514 "tcId" : 69
515 },
516 {
517 "comment" : "including undefined tags",
518 "message" : "48656c6c6f",
519 "result" : "invalid",
520 "sig" : "3043aa02aabb303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
521 "tcId" : 70
522 },
523 {
524 "comment" : "including undefined tags",
525 "message" : "48656c6c6f",
526 "result" : "invalid",
527 "sig" : "30452224aa00bb00cd00021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
528 "tcId" : 71
529 },
530 {
531 "comment" : "including undefined tags",
532 "message" : "48656c6c6f",
533 "result" : "invalid",
534 "sig" : "30432222aa02aabb021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
535 "tcId" : 72
536 },
537 {
538 "comment" : "including undefined tags",
539 "message" : "48656c6c6f",
540 "result" : "invalid",
541 "sig" : "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2225aa00bb00cd00021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
542 "tcId" : 73
543 },
544 {
545 "comment" : "including undefined tags",
546 "message" : "48656c6c6f",
547 "result" : "invalid",
548 "sig" : "3043021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2223aa02aabb021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
549 "tcId" : 74
550 },
551 {
552 "comment" : "using composition with indefinite length",
553 "message" : "48656c6c6f",
554 "result" : "invalid",
555 "sig" : "3080303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000",
556 "tcId" : 75
557 },
558 {
559 "comment" : "using composition with indefinite length",
560 "message" : "48656c6c6f",
561 "result" : "invalid",
562 "sig" : "30412280021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
563 "tcId" : 76
564 },
565 {
566 "comment" : "using composition with indefinite length",
567 "message" : "48656c6c6f",
568 "result" : "invalid",
569 "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2280021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000",
570 "tcId" : 77
571 },
572 {
573 "comment" : "using composition with wrong tag",
574 "message" : "48656c6c6f",
575 "result" : "invalid",
576 "sig" : "3080313d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000",
577 "tcId" : 78
578 },
579 {
580 "comment" : "using composition with wrong tag",
581 "message" : "48656c6c6f",
582 "result" : "invalid",
583 "sig" : "30412280031c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
584 "tcId" : 79
585 },
586 {
587 "comment" : "using composition with wrong tag",
588 "message" : "48656c6c6f",
589 "result" : "invalid",
590 "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2280031d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000",
591 "tcId" : 80
592 },
593 {
594 "comment" : "changing tag value",
595 "message" : "48656c6c6f",
596 "result" : "invalid",
597 "sig" : "2e3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
598 "tcId" : 81
599 },
600 {
601 "comment" : "changing tag value",
602 "message" : "48656c6c6f",
603 "result" : "invalid",
604 "sig" : "323d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
605 "tcId" : 82
606 },
607 {
608 "comment" : "changing tag value",
609 "message" : "48656c6c6f",
610 "result" : "invalid",
611 "sig" : "ff3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
612 "tcId" : 83
613 },
614 {
615 "comment" : "changing tag value",
616 "message" : "48656c6c6f",
617 "result" : "invalid",
618 "sig" : "303d001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
619 "tcId" : 84
620 },
621 {
622 "comment" : "changing tag value",
623 "message" : "48656c6c6f",
624 "result" : "invalid",
625 "sig" : "303d041c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
626 "tcId" : 85
627 },
628 {
629 "comment" : "changing tag value",
630 "message" : "48656c6c6f",
631 "result" : "invalid",
632 "sig" : "303dff1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
633 "tcId" : 86
634 },
635 {
636 "comment" : "changing tag value",
637 "message" : "48656c6c6f",
638 "result" : "invalid",
639 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
640 "tcId" : 87
641 },
642 {
643 "comment" : "changing tag value",
644 "message" : "48656c6c6f",
645 "result" : "invalid",
646 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd041d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
647 "tcId" : 88
648 },
649 {
650 "comment" : "changing tag value",
651 "message" : "48656c6c6f",
652 "result" : "invalid",
653 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cdff1d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
654 "tcId" : 89
655 },
656 {
657 "comment" : "dropping value of sequence",
658 "message" : "48656c6c6f",
659 "result" : "invalid",
660 "sig" : "3000",
661 "tcId" : 90
662 },
663 {
664 "comment" : "using composition",
665 "message" : "48656c6c6f",
666 "result" : "invalid",
667 "sig" : "3041300102303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
668 "tcId" : 91
669 },
670 {
671 "comment" : "using composition",
672 "message" : "48656c6c6f",
673 "result" : "invalid",
674 "sig" : "3041222002011e021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
675 "tcId" : 92
676 },
677 {
678 "comment" : "using composition",
679 "message" : "48656c6c6f",
680 "result" : "invalid",
681 "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2221020100021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
682 "tcId" : 93
683 },
684 {
685 "comment" : "truncate sequence",
686 "message" : "48656c6c6f",
687 "result" : "invalid",
688 "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862",
689 "tcId" : 94
690 },
691 {
692 "comment" : "truncate sequence",
693 "message" : "48656c6c6f",
694 "result" : "invalid",
695 "sig" : "303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
696 "tcId" : 95
697 },
698 {
699 "comment" : "prepend empty sequence",
700 "message" : "48656c6c6f",
701 "result" : "invalid",
702 "sig" : "303f3000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
703 "tcId" : 96
704 },
705 {
706 "comment" : "append empty sequence",
707 "message" : "48656c6c6f",
708 "result" : "invalid",
709 "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862363000",
710 "tcId" : 97
711 },
712 {
713 "comment" : "sequence of sequence",
714 "message" : "48656c6c6f",
715 "result" : "invalid",
716 "sig" : "303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
717 "tcId" : 98
718 },
719 {
720 "comment" : "truncated sequence",
721 "message" : "48656c6c6f",
722 "result" : "invalid",
723 "sig" : "301e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd",
724 "tcId" : 99
725 },
726 {
727 "comment" : "repeat element in sequence",
728 "message" : "48656c6c6f",
729 "result" : "invalid",
730 "sig" : "305c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
731 "tcId" : 100
732 },
733 {
734 "comment" : "removing integer",
735 "message" : "48656c6c6f",
736 "result" : "invalid",
737 "sig" : "301f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
738 "tcId" : 101
739 },
740 {
741 "comment" : "appending 0's to integer",
742 "message" : "48656c6c6f",
743 "result" : "invalid",
744 "sig" : "303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
745 "tcId" : 102
746 },
747 {
748 "comment" : "appending 0's to integer",
749 "message" : "48656c6c6f",
750 "result" : "invalid",
751 "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000",
752 "tcId" : 103
753 },
754 {
755 "comment" : "dropping value of integer",
756 "message" : "48656c6c6f",
757 "result" : "invalid",
758 "sig" : "30210200021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
759 "tcId" : 104
760 },
761 {
762 "comment" : "dropping value of integer",
763 "message" : "48656c6c6f",
764 "result" : "invalid",
765 "sig" : "3020021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0200",
766 "tcId" : 105
767 },
768 {
769 "comment" : "modify first byte of integer",
770 "message" : "48656c6c6f",
771 "result" : "invalid",
772 "sig" : "303d021c1f41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
773 "tcId" : 106
774 },
775 {
776 "comment" : "modify first byte of integer",
777 "message" : "48656c6c6f",
778 "result" : "invalid",
779 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
780 "tcId" : 107
781 },
782 {
783 "comment" : "modify last byte of integer",
784 "message" : "48656c6c6f",
785 "result" : "invalid",
786 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cc021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
787 "tcId" : 108
788 },
789 {
790 "comment" : "modify last byte of integer",
791 "message" : "48656c6c6f",
792 "result" : "invalid",
793 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786237",
794 "tcId" : 109
795 },
796 {
797 "comment" : "truncate integer",
798 "message" : "48656c6c6f",
799 "result" : "invalid",
800 "sig" : "303c021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
801 "tcId" : 110
802 },
803 {
804 "comment" : "truncate integer",
805 "message" : "48656c6c6f",
806 "result" : "invalid",
807 "sig" : "303c021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
808 "tcId" : 111
809 },
810 {
811 "comment" : "truncate integer",
812 "message" : "48656c6c6f",
813 "result" : "invalid",
814 "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862",
815 "tcId" : 112
816 },
817 {
818 "comment" : "leading ff in integer",
819 "message" : "48656c6c6f",
820 "result" : "invalid",
821 "sig" : "303e021dff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
822 "tcId" : 113
823 },
824 {
825 "comment" : "leading ff in integer",
826 "message" : "48656c6c6f",
827 "result" : "invalid",
828 "sig" : "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021eff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
829 "tcId" : 114
830 },
831 {
832 "comment" : "infinity",
833 "message" : "48656c6c6f",
834 "result" : "invalid",
835 "sig" : "3022090180021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
836 "tcId" : 115
837 },
838 {
839 "comment" : "infinity",
840 "message" : "48656c6c6f",
841 "result" : "invalid",
842 "sig" : "3021021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd090180",
843 "tcId" : 116
844 },
845 {
846 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
847 "message" : "48656c6c6f",
848 "result" : "invalid",
849 "sig" : "303e021d00d9384b2032d060e59848f87cb4535936bc25fa77959e96d7f88e332a021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
850 "tcId" : 117
851 },
852 {
853 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
854 "message" : "48656c6c6f",
855 "result" : "invalid",
856 "sig" : "303e021dff634b1dd327de7125da7903ad2163ca2addc096101fd395567ee36070021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
857 "tcId" : 118
858 },
859 {
860 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
861 "message" : "48656c6c6f",
862 "result" : "invalid",
863 "sig" : "303d021ce1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
864 "tcId" : 119
865 },
866 {
867 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
868 "message" : "48656c6c6f",
869 "result" : "invalid",
870 "sig" : "303e021d009cb4e22cd8218eda2586fc52de9c35d5223f69efe02c6aa9811c9f90021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
871 "tcId" : 120
872 },
873 {
874 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
875 "message" : "48656c6c6f",
876 "result" : "invalid",
877 "sig" : "303e021dff26c7b4dfcd2f9f1a67b707834baca6c943da05886a6169280771ccd6021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
878 "tcId" : 121
879 },
880 {
881 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
882 "message" : "48656c6c6f",
883 "result" : "invalid",
884 "sig" : "303e021d011e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
885 "tcId" : 122
886 },
887 {
888 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
889 "message" : "48656c6c6f",
890 "result" : "invalid",
891 "sig" : "303e021d00e1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236",
892 "tcId" : 123
893 },
894 {
895 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
896 "message" : "48656c6c6f",
897 "result" : "invalid",
898 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d0168dcf02f57b0caef7ddc183bee1ca94ee09c1a02ee4b0200a54dcb93",
899 "tcId" : 124
900 },
901 {
902 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
903 "message" : "48656c6c6f",
904 "result" : "invalid",
905 "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cf2efc2e24cbedb2fc00c236c5b2d1a430236b59b7880007f2ba2f8d9",
906 "tcId" : 125
907 },
908 {
909 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
910 "message" : "48656c6c6f",
911 "result" : "invalid",
912 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021dff5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca",
913 "tcId" : 126
914 },
915 {
916 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
917 "message" : "48656c6c6f",
918 "result" : "invalid",
919 "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c0d103d1db34124d03ff3dc93a4d2e5bcfdc94a64877fff80d45d0727",
920 "tcId" : 127
921 },
922 {
923 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
924 "message" : "48656c6c6f",
925 "result" : "invalid",
926 "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021dfe97230fd0a84f35108223e7c411e356b11f63e5fd11b4fdff5ab2346d",
927 "tcId" : 128
928 },
929 {
930 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
931 "message" : "48656c6c6f",
932 "result" : "invalid",
933 "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca",
934 "tcId" : 129
935 },
936 {
937 "comment" : "Signatures with special case values for r and s.",
938 "message" : "48656c6c6f",
939 "result" : "invalid",
940 "sig" : "3022020100021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3",
941 "tcId" : 130
942 },
943 {
944 "comment" : "Signatures with special case values for r and s.",
945 "message" : "48656c6c6f",
946 "result" : "invalid",
947 "sig" : "3006020100020100",
948 "tcId" : 131
949 },
950 {
951 "comment" : "Signatures with special case values for r and s.",
952 "message" : "48656c6c6f",
953 "result" : "invalid",
954 "sig" : "3006020100020101",
955 "tcId" : 132
956 },
957 {
958 "comment" : "Signatures with special case values for r and s.",
959 "message" : "48656c6c6f",
960 "result" : "invalid",
961 "sig" : "30060201000201f0",
962 "tcId" : 133
963 },
964 {
965 "comment" : "Signatures with special case values for r and s.",
966 "message" : "48656c6c6f",
967 "result" : "invalid",
968 "sig" : "3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d",
969 "tcId" : 134
970 },
971 {
972 "comment" : "Signatures with special case values for r and s.",
973 "message" : "48656c6c6f",
974 "result" : "invalid",
975 "sig" : "3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e",
976 "tcId" : 135
977 },
978 {
979 "comment" : "Signatures with special case values for r and s.",
980 "message" : "48656c6c6f",
981 "result" : "invalid",
982 "sig" : "3022020100021d0100000000000000000000000000000000000000000000000000000000",
983 "tcId" : 136
984 },
985 {
986 "comment" : "Signatures with special case values for r and s.",
987 "message" : "48656c6c6f",
988 "result" : "invalid",
989 "sig" : "3082010802010002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667",
990 "tcId" : 137
991 },
992 {
993 "comment" : "Signatures with special case values for r and s.",
994 "message" : "48656c6c6f",
995 "result" : "invalid",
996 "sig" : "3008020100090380fe01",
997 "tcId" : 138
998 },
999 {
1000 "comment" : "Signatures with special case values for r and s.",
1001 "message" : "48656c6c6f",
1002 "result" : "invalid",
1003 "sig" : "3022020101021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3",
1004 "tcId" : 139
1005 },
1006 {
1007 "comment" : "Signatures with special case values for r and s.",
1008 "message" : "48656c6c6f",
1009 "result" : "invalid",
1010 "sig" : "3006020101020100",
1011 "tcId" : 140
1012 },
1013 {
1014 "comment" : "Signatures with special case values for r and s.",
1015 "message" : "48656c6c6f",
1016 "result" : "invalid",
1017 "sig" : "3006020101020101",
1018 "tcId" : 141
1019 },
1020 {
1021 "comment" : "Signatures with special case values for r and s.",
1022 "message" : "48656c6c6f",
1023 "result" : "invalid",
1024 "sig" : "30060201010201f0",
1025 "tcId" : 142
1026 },
1027 {
1028 "comment" : "Signatures with special case values for r and s.",
1029 "message" : "48656c6c6f",
1030 "result" : "invalid",
1031 "sig" : "3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d",
1032 "tcId" : 143
1033 },
1034 {
1035 "comment" : "Signatures with special case values for r and s.",
1036 "message" : "48656c6c6f",
1037 "result" : "invalid",
1038 "sig" : "3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e",
1039 "tcId" : 144
1040 },
1041 {
1042 "comment" : "Signatures with special case values for r and s.",
1043 "message" : "48656c6c6f",
1044 "result" : "invalid",
1045 "sig" : "3022020101021d0100000000000000000000000000000000000000000000000000000000",
1046 "tcId" : 145
1047 },
1048 {
1049 "comment" : "Signatures with special case values for r and s.",
1050 "message" : "48656c6c6f",
1051 "result" : "invalid",
1052 "sig" : "3082010802010102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667",
1053 "tcId" : 146
1054 },
1055 {
1056 "comment" : "Signatures with special case values for r and s.",
1057 "message" : "48656c6c6f",
1058 "result" : "invalid",
1059 "sig" : "3008020101090380fe01",
1060 "tcId" : 147
1061 },
1062 {
1063 "comment" : "Signatures with special case values for r and s.",
1064 "message" : "48656c6c6f",
1065 "result" : "invalid",
1066 "sig" : "30220201f0021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3",
1067 "tcId" : 148
1068 },
1069 {
1070 "comment" : "Signatures with special case values for r and s.",
1071 "message" : "48656c6c6f",
1072 "result" : "invalid",
1073 "sig" : "30060201f0020100",
1074 "tcId" : 149
1075 },
1076 {
1077 "comment" : "Signatures with special case values for r and s.",
1078 "message" : "48656c6c6f",
1079 "result" : "invalid",
1080 "sig" : "30060201f0020101",
1081 "tcId" : 150
1082 },
1083 {
1084 "comment" : "Signatures with special case values for r and s.",
1085 "message" : "48656c6c6f",
1086 "result" : "invalid",
1087 "sig" : "30060201f00201f0",
1088 "tcId" : 151
1089 },
1090 {
1091 "comment" : "Signatures with special case values for r and s.",
1092 "message" : "48656c6c6f",
1093 "result" : "invalid",
1094 "sig" : "30220201f0021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d",
1095 "tcId" : 152
1096 },
1097 {
1098 "comment" : "Signatures with special case values for r and s.",
1099 "message" : "48656c6c6f",
1100 "result" : "invalid",
1101 "sig" : "30220201f0021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e",
1102 "tcId" : 153
1103 },
1104 {
1105 "comment" : "Signatures with special case values for r and s.",
1106 "message" : "48656c6c6f",
1107 "result" : "invalid",
1108 "sig" : "30220201f0021d0100000000000000000000000000000000000000000000000000000000",
1109 "tcId" : 154
1110 },
1111 {
1112 "comment" : "Signatures with special case values for r and s.",
1113 "message" : "48656c6c6f",
1114 "result" : "invalid",
1115 "sig" : "308201080201f002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667",
1116 "tcId" : 155
1117 },
1118 {
1119 "comment" : "Signatures with special case values for r and s.",
1120 "message" : "48656c6c6f",
1121 "result" : "invalid",
1122 "sig" : "30080201f0090380fe01",
1123 "tcId" : 156
1124 },
1125 {
1126 "comment" : "Signatures with special case values for r and s.",
1127 "message" : "48656c6c6f",
1128 "result" : "invalid",
1129 "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3",
1130 "tcId" : 157
1131 },
1132 {
1133 "comment" : "Signatures with special case values for r and s.",
1134 "message" : "48656c6c6f",
1135 "result" : "invalid",
1136 "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020100",
1137 "tcId" : 158
1138 },
1139 {
1140 "comment" : "Signatures with special case values for r and s.",
1141 "message" : "48656c6c6f",
1142 "result" : "invalid",
1143 "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020101",
1144 "tcId" : 159
1145 },
1146 {
1147 "comment" : "Signatures with special case values for r and s.",
1148 "message" : "48656c6c6f",
1149 "result" : "invalid",
1150 "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0201f0",
1151 "tcId" : 160
1152 },
1153 {
1154 "comment" : "Signatures with special case values for r and s.",
1155 "message" : "48656c6c6f",
1156 "result" : "invalid",
1157 "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d",
1158 "tcId" : 161
1159 },
1160 {
1161 "comment" : "Signatures with special case values for r and s.",
1162 "message" : "48656c6c6f",
1163 "result" : "invalid",
1164 "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e",
1165 "tcId" : 162
1166 },
1167 {
1168 "comment" : "Signatures with special case values for r and s.",
1169 "message" : "48656c6c6f",
1170 "result" : "invalid",
1171 "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d0100000000000000000000000000000000000000000000000000000000",
1172 "tcId" : 163
1173 },
1174 {
1175 "comment" : "Signatures with special case values for r and s.",
1176 "message" : "48656c6c6f",
1177 "result" : "invalid",
1178 "sig" : "30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667",
1179 "tcId" : 164
1180 },
1181 {
1182 "comment" : "Signatures with special case values for r and s.",
1183 "message" : "48656c6c6f",
1184 "result" : "invalid",
1185 "sig" : "3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d090380fe01",
1186 "tcId" : 165
1187 },
1188 {
1189 "comment" : "Signatures with special case values for r and s.",
1190 "message" : "48656c6c6f",
1191 "result" : "invalid",
1192 "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3",
1193 "tcId" : 166
1194 },
1195 {
1196 "comment" : "Signatures with special case values for r and s.",
1197 "message" : "48656c6c6f",
1198 "result" : "invalid",
1199 "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020100",
1200 "tcId" : 167
1201 },
1202 {
1203 "comment" : "Signatures with special case values for r and s.",
1204 "message" : "48656c6c6f",
1205 "result" : "invalid",
1206 "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020101",
1207 "tcId" : 168
1208 },
1209 {
1210 "comment" : "Signatures with special case values for r and s.",
1211 "message" : "48656c6c6f",
1212 "result" : "invalid",
1213 "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e0201f0",
1214 "tcId" : 169
1215 },
1216 {
1217 "comment" : "Signatures with special case values for r and s.",
1218 "message" : "48656c6c6f",
1219 "result" : "invalid",
1220 "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d",
1221 "tcId" : 170
1222 },
1223 {
1224 "comment" : "Signatures with special case values for r and s.",
1225 "message" : "48656c6c6f",
1226 "result" : "invalid",
1227 "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e",
1228 "tcId" : 171
1229 },
1230 {
1231 "comment" : "Signatures with special case values for r and s.",
1232 "message" : "48656c6c6f",
1233 "result" : "invalid",
1234 "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d0100000000000000000000000000000000000000000000000000000000",
1235 "tcId" : 172
1236 },
1237 {
1238 "comment" : "Signatures with special case values for r and s.",
1239 "message" : "48656c6c6f",
1240 "result" : "invalid",
1241 "sig" : "30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667",
1242 "tcId" : 173
1243 },
1244 {
1245 "comment" : "Signatures with special case values for r and s.",
1246 "message" : "48656c6c6f",
1247 "result" : "invalid",
1248 "sig" : "3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e090380fe01",
1249 "tcId" : 174
1250 },
1251 {
1252 "comment" : "Signatures with special case values for r and s.",
1253 "message" : "48656c6c6f",
1254 "result" : "invalid",
1255 "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3",
1256 "tcId" : 175
1257 },
1258 {
1259 "comment" : "Signatures with special case values for r and s.",
1260 "message" : "48656c6c6f",
1261 "result" : "invalid",
1262 "sig" : "3022021d0100000000000000000000000000000000000000000000000000000000020100",
1263 "tcId" : 176
1264 },
1265 {
1266 "comment" : "Signatures with special case values for r and s.",
1267 "message" : "48656c6c6f",
1268 "result" : "invalid",
1269 "sig" : "3022021d0100000000000000000000000000000000000000000000000000000000020101",
1270 "tcId" : 177
1271 },
1272 {
1273 "comment" : "Signatures with special case values for r and s.",
1274 "message" : "48656c6c6f",
1275 "result" : "invalid",
1276 "sig" : "3022021d01000000000000000000000000000000000000000000000000000000000201f0",
1277 "tcId" : 178
1278 },
1279 {
1280 "comment" : "Signatures with special case values for r and s.",
1281 "message" : "48656c6c6f",
1282 "result" : "invalid",
1283 "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d",
1284 "tcId" : 179
1285 },
1286 {
1287 "comment" : "Signatures with special case values for r and s.",
1288 "message" : "48656c6c6f",
1289 "result" : "invalid",
1290 "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e",
1291 "tcId" : 180
1292 },
1293 {
1294 "comment" : "Signatures with special case values for r and s.",
1295 "message" : "48656c6c6f",
1296 "result" : "invalid",
1297 "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d0100000000000000000000000000000000000000000000000000000000",
1298 "tcId" : 181
1299 },
1300 {
1301 "comment" : "Signatures with special case values for r and s.",
1302 "message" : "48656c6c6f",
1303 "result" : "invalid",
1304 "sig" : "30820124021d010000000000000000000000000000000000000000000000000000000002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667",
1305 "tcId" : 182
1306 },
1307 {
1308 "comment" : "Signatures with special case values for r and s.",
1309 "message" : "48656c6c6f",
1310 "result" : "invalid",
1311 "sig" : "3024021d0100000000000000000000000000000000000000000000000000000000090380fe01",
1312 "tcId" : 183
1313 },
1314 {
1315 "comment" : "Signatures with special case values for r and s.",
1316 "message" : "48656c6c6f",
1317 "result" : "invalid",
1318 "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3",
1319 "tcId" : 184
1320 },
1321 {
1322 "comment" : "Signatures with special case values for r and s.",
1323 "message" : "48656c6c6f",
1324 "result" : "invalid",
1325 "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020100",
1326 "tcId" : 185
1327 },
1328 {
1329 "comment" : "Signatures with special case values for r and s.",
1330 "message" : "48656c6c6f",
1331 "result" : "invalid",
1332 "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020101",
1333 "tcId" : 186
1334 },
1335 {
1336 "comment" : "Signatures with special case values for r and s.",
1337 "message" : "48656c6c6f",
1338 "result" : "invalid",
1339 "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd6670201f0",
1340 "tcId" : 187
1341 },
1342 {
1343 "comment" : "Signatures with special case values for r and s.",
1344 "message" : "48656c6c6f",
1345 "result" : "invalid",
1346 "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d",
1347 "tcId" : 188
1348 },
1349 {
1350 "comment" : "Signatures with special case values for r and s.",
1351 "message" : "48656c6c6f",
1352 "result" : "invalid",
1353 "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e",
1354 "tcId" : 189
1355 },
1356 {
1357 "comment" : "Signatures with special case values for r and s.",
1358 "message" : "48656c6c6f",
1359 "result" : "invalid",
1360 "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d0100000000000000000000000000000000000000000000000000000000",
1361 "tcId" : 190
1362 },
1363 {
1364 "comment" : "Signatures with special case values for r and s.",
1365 "message" : "48656c6c6f",
1366 "result" : "invalid",
1367 "sig" : "3082020a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd66702820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667",
1368 "tcId" : 191
1369 },
1370 {
1371 "comment" : "Signatures with special case values for r and s.",
1372 "message" : "48656c6c6f",
1373 "result" : "invalid",
1374 "sig" : "3082010a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667090380fe01",
1375 "tcId" : 192
1376 },
1377 {
1378 "comment" : "Signatures with special case values for r and s.",
1379 "message" : "48656c6c6f",
1380 "result" : "invalid",
1381 "sig" : "3024090380fe01021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3",
1382 "tcId" : 193
1383 },
1384 {
1385 "comment" : "Signatures with special case values for r and s.",
1386 "message" : "48656c6c6f",
1387 "result" : "invalid",
1388 "sig" : "3008090380fe01020100",
1389 "tcId" : 194
1390 },
1391 {
1392 "comment" : "Signatures with special case values for r and s.",
1393 "message" : "48656c6c6f",
1394 "result" : "invalid",
1395 "sig" : "3008090380fe01020101",
1396 "tcId" : 195
1397 },
1398 {
1399 "comment" : "Signatures with special case values for r and s.",
1400 "message" : "48656c6c6f",
1401 "result" : "invalid",
1402 "sig" : "3008090380fe010201f0",
1403 "tcId" : 196
1404 },
1405 {
1406 "comment" : "Signatures with special case values for r and s.",
1407 "message" : "48656c6c6f",
1408 "result" : "invalid",
1409 "sig" : "3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d",
1410 "tcId" : 197
1411 },
1412 {
1413 "comment" : "Signatures with special case values for r and s.",
1414 "message" : "48656c6c6f",
1415 "result" : "invalid",
1416 "sig" : "3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e",
1417 "tcId" : 198
1418 },
1419 {
1420 "comment" : "Signatures with special case values for r and s.",
1421 "message" : "48656c6c6f",
1422 "result" : "invalid",
1423 "sig" : "3024090380fe01021d0100000000000000000000000000000000000000000000000000000000",
1424 "tcId" : 199
1425 },
1426 {
1427 "comment" : "Signatures with special case values for r and s.",
1428 "message" : "48656c6c6f",
1429 "result" : "invalid",
1430 "sig" : "3082010a090380fe0102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667",
1431 "tcId" : 200
1432 },
1433 {
1434 "comment" : "Signatures with special case values for r and s.",
1435 "message" : "48656c6c6f",
1436 "result" : "invalid",
1437 "sig" : "300a090380fe01090380fe01",
1438 "tcId" : 201
1439 }
1440 ]
1441 },
1442 {
1443 "keyDer" : "308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201001e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931",
1444 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIIDQjCCAjUGByqGSM44BAEwggIoAoIBAQCPeTXZuarpv6vtiHrPSVG28y7Fnjuv\nNxjo6sSWHz79NgbnQ1GpxBgzObgJ58KuHFObp0dbhdARrbi0eYd1SYRpXKwOjxSz\nNggooi/6JxEKPWKpk0U0CaD+aWxGWPhL3SCBnDcJoBBXsZWtzQAjPbpUhLYpH51k\njviDRIZ3l5zsBLQ0pqwudemYXeI9sCkvwRGMn/qdgYHnM423krcw17njSVkvaAmY\nchU5Feo9a4tGU8YzRY+AOzKkwuDycpAlbk4/ijsIOKHEUOThjBopo33fXqFD3ktm\n/wSQPtXPFiPhWNSHxgjpfyEc2B3KI8tuOAdl+CLjQr5ITAV2OTlgHNZnAh0AuvaW\npoV499/e5/pnyXfHhe8ysjO65YDAvNVpXQKCAQAWplxYIEhQcE51AqOXVwQNNNo6\nNHjBVNTkpcAtJC7gT5bmHkvQkEq9rI837rHgnzGC0jyQQ8tkL4gAQWDt+coJsyB2\np5wypifyRz6Rh5uixOdEvSCBVEy1W4AsNo0fqD7UielOD6BojjJCilx4xHjGjQUn\ntxyaOrsLC+EsRGiWOefTznTbEBplqiuH9kxoJts+xy9LVZmDS7TtsC98kOmkltOl\nXVNb6/xF1PYZ9j897buHOSXC8iTgdzEpbaiH7B5HSPh++1/et1SEMWsiMt7lU92v\nAhErDR8C2jCXMiT+J67ai51LKSLZuovjntnhA6Y8UoELxoi34u1DFuHvF9veA4IB\nBQACggEAHnf4QrGuD82ZKdOUFh1B4UYU/3UHqaMfSh8U0i4qYnofTllmJIg/GlsW\njpQlFG8i1fbuKHV0FHFLuZS6ESnwFdbgSnF+35tTCl1cq5TxRjHotM95rrNYzHQY\nRVU4QeisRhYw6ASmL0Nna6Z5SvZomcN3uGnqYSp7n+ZhGqlr5S64tiyXkRe7vMqK\nfsHh/6scffz8cEhwDTrjhYE26JdwHXwpIbXf7x0fiX9Q2WyhtcLtxYytoYkZ41ZC\n8IB+6/oAyZoy9NCVwxiPeO1UcRvgMlxLUyrszWVApWfDJyJUQOoVMZveBlEEeaGG\nF5niW1fezHPANtdaBwK9NzyiMTSZMQ==\n-----END PUBLIC KEY-----",
1445 "sha" : "SHA-256",
1446 "type" : "DSAVer",
1447 "key" : {
1448 "g" : "16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde",
1449 "keyType" : "DSA public key",
1450 "p" : "08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667",
1451 "q" : "0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d",
1452 "y" : "1e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931"
1453 },
1454 "tests" : [
1455 {
1456 "comment" : "random signature",
1457 "message" : "54657374",
1458 "result" : "valid",
1459 "sig" : "303c021c50ab097237324f8fc734140e23c11d515939277a182712f7914986a1021c24a4522acf7885deae134d25b679fea410f8c24afdb140c909522d14",
1460 "tcId" : 202
1461 },
1462 {
1463 "comment" : "random signature",
1464 "message" : "54657374",
1465 "result" : "valid",
1466 "sig" : "303d021c79bacf75ffe84e6a2159e0152d568781f7fd41e0a14c1200b21b21b7021d00962f1d0404b0318b0e6eee0b95d22d94eb36b51b6f8884e70b973812",
1467 "tcId" : 203
1468 },
1469 {
1470 "comment" : "random signature",
1471 "message" : "54657374",
1472 "result" : "valid",
1473 "sig" : "303e021d008dea6005d17a3eaad584bed597ff29ca1c91833e1d93a398640a05c9021d00a871f0d68ac9ff53e4714555c8cdc498ccd28ec4924aaf42a65c0db9",
1474 "tcId" : 204
1475 },
1476 {
1477 "comment" : "random signature",
1478 "message" : "54657374",
1479 "result" : "valid",
1480 "sig" : "303d021d00b5e1ee34d2b07ec24262238d3ef3f691827780baaa2107be3131cfb9021c2bdbe0d5cffee75072c5c4c358a7b6dac45e763555430739b593c2fe",
1481 "tcId" : 205
1482 },
1483 {
1484 "comment" : "random signature",
1485 "message" : "54657374",
1486 "result" : "valid",
1487 "sig" : "303d021d00adf128e21e06d3d22c819904f0be159bdedfbf21fc22843255762b07021c646f551ee7e3455f8c3299e9568c581f81d31bc1d1a0373407b18dc6",
1488 "tcId" : 206
1489 }
1490 ]
1491 }
1492 ]
1493 }
+0
-1300
t/wycheproof/ecdh_webcrypto_test.json less more
0 {
1 "algorithm" : "ECDH",
2 "generatorVersion" : "0.0a11",
3 "numberOfTests" : 57,
4 "testGroups" : [
5 {
6 "type" : "ECDHComp",
7 "tests" : [
8 {
9 "comment" : "normal case",
10 "curve" : "P-256",
11 "name" : "EcdhTestVector",
12 "result" : "valid",
13 "shared" : "5af492c029f055e700150fdf074bbc3b376b3286a0e1a4feb267960bbb0a148e",
14 "tcId" : 1,
15 "private" : {
16 "crv" : "P-256",
17 "d" : "TEKm94QkBRnu2W9CQgBCYrabdRQ436q7mBfeypPoHIc",
18 "ext" : "true",
19 "kty" : "EC",
20 "x" : "WyqqM6oDsZdjGfMIvj6sGGkXhyB-6RPNgCNYBbHz7F4",
21 "y" : "h5IjGBoRRdQKxucb6rv-EVZwIqZv2XRLi3_rvK-dxSI"
22 },
23 "public" : {
24 "crv" : "P-256",
25 "ext" : "true",
26 "kty" : "EC",
27 "x" : "yISNawZIGrhSC2XREZbJe30drwGpT6gWmocmXgm12So",
28 "y" : "0dac4Rq3NgDALW02mtKKwd0hPoqR-H3kK7FohxSMzkc"
29 }
30 },
31 {
32 "comment" : "normal case",
33 "curve" : "P-384",
34 "name" : "EcdhTestVector",
35 "result" : "valid",
36 "shared" : "7ee811a7cc92be6c5d6879d6399c467675c34c1f9c2261e1df4ad7d4dc4de93d192a5020feeb61712e4401cf369700ff",
37 "tcId" : 2,
38 "private" : {
39 "crv" : "P-384",
40 "d" : "XPNFF3sB7GKqQwJJE7JfjRq-9B92mXqz1v1fWh6-uQ3mnecJw5JwbbWAPsI7NhAt",
41 "ext" : "true",
42 "kty" : "EC",
43 "x" : "ymo32uc2KIgSIck9N6h11vy4zGzXuOnw0-jvC3h_IqlOvEJ9gUXeK8XUkn7xBGvh",
44 "y" : "D0e3Bgt0wn4KwyJJDKwHqV6FB7xe3afuTXKBEV7hpj_rqFQqZZsrdz8TJUqjtD5Z"
45 },
46 "public" : {
47 "crv" : "P-384",
48 "ext" : "true",
49 "kty" : "EC",
50 "x" : "y5F1hPIu6IHPMTVd_4jagQ4S6NqKEWrV4bF5Rr04FfqRRqWWoSBNBQVhQuK_OFur",
51 "y" : "0nxF1hhtRBy9qvLFZka-r4cSfZyb86ICsdIIIJqJ6My4vouAeLucCI5TTuJqTEQ-"
52 }
53 },
54 {
55 "comment" : "edge cases for shared secret",
56 "curve" : "P-256",
57 "name" : "EcdhTestVector",
58 "result" : "valid",
59 "shared" : "0000000000000000000000000000000000000000000000000000000000000000",
60 "tcId" : 4,
61 "private" : {
62 "crv" : "P-256",
63 "d" : "V3__4ATEMyhY8ARpZPC-Tl_iZS6vzyYWdDu8Y6sBg3k",
64 "ext" : "true",
65 "kty" : "EC",
66 "x" : "I7gdSwHAhxe3tQ8izFrv0PsGLoIA2Mskr1QoWPE4Bi8",
67 "y" : "CNN26pJpxC4OZYPeFbigQYBnb4r1OrUsf1l2wz5uIuc"
68 },
69 "public" : {
70 "crv" : "P-256",
71 "ext" : "true",
72 "kty" : "EC",
73 "x" : "Z_TxDYzhUV5lUiOTCuRbbYQwp1KNzMBZ7L9_8NSZzpQ",
74 "y" : "PVLyBeRI9xmjw-s9oUkWNH4Vurydaps86bzHPismQWg"
75 }
76 },
77 {
78 "comment" : "edge cases for shared secret",
79 "curve" : "P-256",
80 "name" : "EcdhTestVector",
81 "result" : "valid",
82 "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000",
83 "tcId" : 5,
84 "private" : {
85 "crv" : "P-256",
86 "d" : "FY8M1ObgQ6QJpszBP4-649T22PFI17GyzzxJeMqUGng",
87 "ext" : "true",
88 "kty" : "EC",
89 "x" : "SjM1g2j5_2Np3xDBYW_i7BsxFkFO2cl5OGRVGhfrHBg",
90 "y" : "AvVlj5C266JG6T5Ohhu2idHQcrIjuJsbvRApRAhXQvk"
91 },
92 "public" : {
93 "crv" : "P-256",
94 "ext" : "true",
95 "kty" : "EC",
96 "x" : "3wOehQMUhX2O2yc_8yPZ0mb5l0jvPn_PUsqRbOs2PwM",
97 "y" : "zZycmVJCIQlJaHWyUSEz7taOqXI4v_0UEJQz2sSp-Nk"
98 }
99 },
100 {
101 "comment" : "edge cases for shared secret",
102 "curve" : "P-256",
103 "name" : "EcdhTestVector",
104 "result" : "valid",
105 "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001",
106 "tcId" : 6,
107 "private" : {
108 "crv" : "P-256",
109 "d" : "GQkQmmjEUaDxUMYyhE-cMN5WPQXe4YHR-Sd4b_bkD_0",
110 "ext" : "true",
111 "kty" : "EC",
112 "x" : "cTTJ44nkV_b62xyriRhErvgE0Ul0WY8594uT18wY2eI",
113 "y" : "lCFFPIrYYgK2qZCzIb8Mp6dT0-8UMEmc_HOU_R75coA"
114 },
115 "public" : {
116 "crv" : "P-256",
117 "ext" : "true",
118 "kty" : "EC",
119 "x" : "JdqrnBMBeqmPeE1x15Q8XnaPABJIH7yncU43kF2FTwY",
120 "y" : "WPiNVKFUExBWMeKqfay65gysGzyd4XOfJ6nCv9I0oOw"
121 }
122 },
123 {
124 "comment" : "edge cases for shared secret",
125 "curve" : "P-256",
126 "name" : "EcdhTestVector",
127 "result" : "valid",
128 "shared" : "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff",
129 "tcId" : 7,
130 "private" : {
131 "crv" : "P-256",
132 "d" : "00-WuNQUk2E8yO_NxDljiGGOdWRVGL1sGd7JOOkPnOM",
133 "ext" : "true",
134 "kty" : "EC",
135 "x" : "2f8GYyCcsHFQo0hGPSu8FbTOIychG7d-b7d8iEch_-0",
136 "y" : "yCsGEV5BgWq-Y-7zt21qghpZVy9P3cMS09tC2DrO0QA"
137 },
138 "public" : {
139 "crv" : "P-256",
140 "ext" : "true",
141 "kty" : "EC",
142 "x" : "gGBkbTWiSK0C0KjZBpUn0G6pwplS9Y2mCQusShezSx4",
143 "y" : "vmXp2Bh6znrY0dNYS07MxpmpV-4yfzwy6rrC3UlZetM"
144 }
145 },
146 {
147 "comment" : "edge cases for shared secret",
148 "curve" : "P-256",
149 "name" : "EcdhTestVector",
150 "result" : "valid",
151 "shared" : "8000000000000000000000000000000000000000000000000000000000000004",
152 "tcId" : 8,
153 "private" : {
154 "crv" : "P-256",
155 "d" : "Wj2UZ9nw8WmL8VSGJ4L0NhUMjBA9iMqrImBT1zA_pcA",
156 "ext" : "true",
157 "kty" : "EC",
158 "x" : "LXoHReBeihHt83forxIbehHNNH1VLhs1eYvKUGkKrY0",
159 "y" : "uTDrHtcNtyhy-Y_6_Mc-t5e2-iOvqNWgJw7sC7AozgU"
160 },
161 "public" : {
162 "crv" : "P-256",
163 "ext" : "true",
164 "kty" : "EC",
165 "x" : "q8GaAT7v2FB6SxuTPVFVM8y_rSoSnqiwpxZ_Hu8ObQI",
166 "y" : "nHZLhfynaWPPWAFvx1K9UdzX8z_UCU5d55A5SX550CY"
167 }
168 },
169 {
170 "comment" : "edge cases for shared secret",
171 "curve" : "P-256",
172 "name" : "EcdhTestVector",
173 "result" : "valid",
174 "shared" : "ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff",
175 "tcId" : 9,
176 "private" : {
177 "crv" : "P-256",
178 "d" : "X3n2bE6P1Vjxqea9LDFYrzhmrpNC6ec_AsYE0efWmbw",
179 "ext" : "true",
180 "kty" : "EC",
181 "x" : "g35sLwD15_TqXQUHszyc5c_N9hsfLqsFp9mtBjSmqSM",
182 "y" : "-UvQSiSIpJkLPEKy33MbvcJc9nENkv4QExgUBQB4HtE"
183 },
184 "public" : {
185 "crv" : "P-256",
186 "ext" : "true",
187 "kty" : "EC",
188 "x" : "nhtwFE914Csb_UApjwESl2tZvPbtRJHPqISi4x2-y5o",
189 "y" : "SQBYhqVRzPNiih8_eNfCqRRQGc-SxYmdMbJwoisd2Fs"
190 }
191 },
192 {
193 "comment" : "edge cases for shared secret",
194 "curve" : "P-256",
195 "name" : "EcdhTestVector",
196 "result" : "valid",
197 "shared" : "ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff",
198 "tcId" : 10,
199 "private" : {
200 "crv" : "P-256",
201 "d" : "GYByC6k5US0eYVKwWavZdx7F-OpKAbWiO-ZpsDU4Qr0",
202 "ext" : "true",
203 "kty" : "EC",
204 "x" : "lGtMphj7_zUNmVfFHAcS9z9OCSweJ04l6DkWSLBszHE",
205 "y" : "vGESfIjmiAXDa9zDhdHfBwBWWBxHmY86bc9TKCBSlng"
206 },
207 "public" : {
208 "crv" : "P-256",
209 "ext" : "true",
210 "kty" : "EC",
211 "x" : "cnH8JXOPBGBW9uU-OZgIAev9HXPPlGwxcmFUHywlTyc",
212 "y" : "0lOb82YIt-6rvGd7oXZs_1mIcCj7D8oKEUZX5k105qg"
213 }
214 },
215 {
216 "comment" : "edge cases for shared secret",
217 "curve" : "P-384",
218 "name" : "EcdhTestVector",
219 "result" : "valid",
220 "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
221 "tcId" : 11,
222 "private" : {
223 "crv" : "P-384",
224 "d" : "yUtG-GHczuzVFQuXWBtPedDrkt2tG4GeX_yy6V6Hm4005blcOLYd45gjX3N8zYKq",
225 "ext" : "true",
226 "kty" : "EC",
227 "x" : "XvcwMIRsP7gKVAjdPBhULB3ylSxbQyD1fBLFgakWnEFluAosTL2QU95E2xpVN0MV",
228 "y" : "uraiwhV9ED1BvbZPq5UitbdZg33hohJRadF86SCyN7-GmNrlOhEFqnF-o7PB9rDp"
229 },
230 "public" : {
231 "crv" : "P-384",
232 "ext" : "true",
233 "kty" : "EC",
234 "x" : "gfuq69ezpardRLQ9VEmrstzpzpWxSRy4r1I_rOkKHg_kFSQzVn3vDNzEqQeKQHIA",
235 "y" : "1oBddqoXFUrLWBx0zVJ5JUGnt0OkcjJSNEKlM_BBq6XjO5-Ctpy9uS8lpk_49ih2"
236 }
237 },
238 {
239 "comment" : "edge cases for shared secret",
240 "curve" : "P-384",
241 "name" : "EcdhTestVector",
242 "result" : "valid",
243 "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002",
244 "tcId" : 12,
245 "private" : {
246 "crv" : "P-384",
247 "d" : "0N7muMMenSJu_bYD1y3wN7FIIGFBp60fq9ZNr_DyTEDFaRab1c2PLWnxZwvU1xm8",
248 "ext" : "true",
249 "kty" : "EC",
250 "x" : "M3DOkQjZ_j2pDm-PDGzdW88lBrWNfSolI7LyJJlsAFDO9cog1Lf_MWGm80oJDdgW",
251 "y" : "FfrGsxqv2nffIfMUy1GCEzLTPOeEr2m6_0PuMW9fm2UCAMsVUCxbzBtb1nyZXvFt"
252 },
253 "public" : {
254 "crv" : "P-384",
255 "ext" : "true",
256 "kty" : "EC",
257 "x" : "MFLwgeT22ujEUvcNdw2mxUYaJtF-oCheDNYr6qfIRhroSvz5R3lBSMeZj0rquHhJ",
258 "y" : "iJ6-sff5hF5m2LniNu0JWAGz5htREd0C9036d9S2oFubcjApcHXNohUPya1P1TM0"
259 }
260 },
261 {
262 "comment" : "edge cases for shared secret",
263 "curve" : "P-384",
264 "name" : "EcdhTestVector",
265 "result" : "valid",
266 "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff",
267 "tcId" : 13,
268 "private" : {
269 "crv" : "P-384",
270 "d" : "D7CfwAS8fz2OvdO9t33e1bFAW0fEYFQV4taAGHJVAnDNf8TmZXVFPOCvr7gpClTM",
271 "ext" : "true",
272 "kty" : "EC",
273 "x" : "175rvtMdoJASJSXZ4VsugjNMUIB9wpGSznSKUChjy-jq47szrk23ZpiC0yBXtk-v",
274 "y" : "_ZUyY4erc7k4B89v4n_kB6kTI1NBO2fxTxZabkubimochVwNvk0kbXQq41NLcZS5"
275 },
276 "public" : {
277 "crv" : "P-384",
278 "ext" : "true",
279 "kty" : "EC",
280 "x" : "Gb-ku-UUrJjEFct4kO-FCIkUj67HU4j2VJBeGnrPC-bmXzJUwa39tChOIc4YrTrM",
281 "y" : "wZ6iWL9Z5S9L-9AbHReSxTNeSxqy56tfrGMP7cIOeP3GLip85xCl1HGyLc4gDCv_"
282 }
283 },
284 {
285 "comment" : "edge cases for shared secret",
286 "curve" : "P-384",
287 "name" : "EcdhTestVector",
288 "result" : "valid",
289 "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff",
290 "tcId" : 14,
291 "private" : {
292 "crv" : "P-384",
293 "d" : "xgpoyacaA-DRj0mqSoDPW99cNakj57inqOZIC_aljU_-ja1QnveTu5VT-IErVFaJ",
294 "ext" : "true",
295 "kty" : "EC",
296 "x" : "lj9GrksnYrR5iKn1mIHL1IAuMP5B5Elp0Xvv27YI_PTQccaq-Ou5ntPylMUzHe1y",
297 "y" : "PAwkFHgnQuMabaPPjsIvr4DdBXSR1dJ00Asz6ZyslCorTVKCbxGQDo7qTtHTWKtT"
298 },
299 "public" : {
300 "crv" : "P-384",
301 "ext" : "true",
302 "kty" : "EC",
303 "x" : "OCSThhnjCYVKqk07KFHarvYBy1-n5zHy71-nIFZ19yZn4wnaK3OzCDhHbvH-vfy_",
304 "y" : "oc9rkMnhsPjxuRxG4YIZ4SV67wSf1mMNeF8xefnXBw9_BIO857pbbHifq6k7K3K4"
305 }
306 },
307 {
308 "comment" : "edge cases for shared secret",
309 "curve" : "P-384",
310 "name" : "EcdhTestVector",
311 "result" : "valid",
312 "shared" : "007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000",
313 "tcId" : 15,
314 "private" : {
315 "crv" : "P-384",
316 "d" : "I6ItVmh5RIJtO8XLTtOromnKohI1JTbDzNo0hb-Q_Ri1TJ1kkqcznWN4yBmp0zpf",
317 "ext" : "true",
318 "kty" : "EC",
319 "x" : "wg18n8h9e5guY6l2vF7UdlWMeLKlk3X0-EBJctlkbSpOmBUKOUHLlPZ62zJcXH9c",
320 "y" : "38LiWgWKuv0NRjUc8rCFo2d6Q6T98KYC-DxXD9jepg11vtF5tNqn--ofXADnusHx"
321 },
322 "public" : {
323 "crv" : "P-384",
324 "ext" : "true",
325 "kty" : "EC",
326 "x" : "0-m3-Cpll7v4BfekNYHAln410f-wlPXfaG2msh7DNzKZesFccMNsdDiidzq2rVQ1",
327 "y" : "1qsGv2ekstg34nybDH-FzDrf0kRuKKpLVgOU9JQ81FdsH4Bb_Uh3WoK4_jXtzM_Z"
328 }
329 },
330 {
331 "comment" : "edge cases for shared secret",
332 "curve" : "P-384",
333 "name" : "EcdhTestVector",
334 "result" : "valid",
335 "shared" : "800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002",
336 "tcId" : 16,
337 "private" : {
338 "crv" : "P-384",
339 "d" : "bWHZtZfa2RzHtC0YGCUb-KOwmJUhqZUjgaU9rL2abeOdxqkModI_b35D3_dlS9Nh",
340 "ext" : "true",
341 "kty" : "EC",
342 "x" : "lctf7qgcgdK9ln0siFC1KkaKiDNgE51ulveCH65ZJ1xiy_6HFWvGljuDttMUkdq-",
343 "y" : "tXCGiAA0_9g8AET2oclM88neIGgDpmdHSHxslcAr0ds8Irl2sSAjraJ95NSu2gyn"
344 },
345 "public" : {
346 "crv" : "P-384",
347 "ext" : "true",
348 "kty" : "EC",
349 "x" : "3sfFArTfOdx4alKo4SVuMNhLAPyQM6eJFttq3Ql5rqu_i5M1lvHtYeZqIq2cH6m9",
350 "y" : "QvGllFc0mOVgaAqQF_GvoXQmoVJg0QTIIabHh3Wspy7qy0irVm8dpKxzbit8qJOf"
351 }
352 },
353 {
354 "comment" : "edge cases for shared secret",
355 "curve" : "P-384",
356 "name" : "EcdhTestVector",
357 "result" : "valid",
358 "shared" : "fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff",
359 "tcId" : 17,
360 "private" : {
361 "crv" : "P-384",
362 "d" : "mKcUqEZN55w554M6uYXPc1Kfei2DkBygNyAoQV8DtwYqmOUiECDxlyNQYludwUnG",
363 "ext" : "true",
364 "kty" : "EC",
365 "x" : "jOm7u_gNzMp5wd3aUrkybrTPSAGQ7mmuEkYqePSD_LM3TktieWl7dcgeQ73rNLFv",
366 "y" : "zCP24hQmQnEbi3iQC2VBn_1Ah-inR5ppHBgPzEvXWwFoz1lK_uzIKm69qoIgYZw9"
367 },
368 "public" : {
369 "crv" : "P-384",
370 "ext" : "true",
371 "kty" : "EC",
372 "x" : "zbs2N62pGygHN1n2u4O0akBKWnvmWD7qLJu4TTlhRVxXzdmh9_6AtOM4dKy2GyXX",
373 "y" : "RmNU8rZfvXZjWRVtcAKs6hGWqRYXMvA0Vp5dNWqZcUnwgFnFXxk4f-3wtCsRHg6Q"
374 }
375 },
376 {
377 "comment" : "edge cases for shared secret",
378 "curve" : "P-384",
379 "name" : "EcdhTestVector",
380 "result" : "valid",
381 "shared" : "ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff",
382 "tcId" : 18,
383 "private" : {
384 "crv" : "P-384",
385 "d" : "wSOgjOGyS0THIPlyqZdqYTnSLi0UolDiO9gKInMIkThJi-77xLTiPpQdN124OyiR",
386 "ext" : "true",
387 "kty" : "EC",
388 "x" : "U1vW-LFEqwLorzODSawOWSrZdUiiRSM_vrzMGzz1VqzGM2iIDWSW8pBYeecvvFAe",
389 "y" : "UqmVNd3fqF_zdBhGbfCLoH1A2NBnuXWbnRKLgkrQM4qUJSI4zI3oLJcUBKyTbPhV"
390 },
391 "public" : {
392 "crv" : "P-384",
393 "ext" : "true",
394 "kty" : "EC",
395 "x" : "FX2pFpSuM62j94lwjdrK-8ppETMSLJUZoSAGdhvDkZAlFgT--DrJXnZ18GldlQQC",
396 "y" : "Zajmf3FRa4jAEVbwLP3habKSJjF2jLhqUBNmh1nBnMJRjt07gEACpuwJhAxRdC_L"
397 }
398 },
399 {
400 "comment" : "edge cases for shared secret",
401 "curve" : "P-384",
402 "name" : "EcdhTestVector",
403 "result" : "valid",
404 "shared" : "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe",
405 "tcId" : 19,
406 "private" : {
407 "crv" : "P-384",
408 "d" : "xh8uHXNp6vfEyQcCNQy50MOnMVFVbRb5_mgEimS9pWMwtdYTTtFvYZfyxI1KCTB1",
409 "ext" : "true",
410 "kty" : "EC",
411 "x" : "aIb04bpycj0d6zAvDMjTpM6T1FwDtnziNt8sQLqlAeuCKdQO619P9uwU4_tilLKq",
412 "y" : "Tq3rWf3EYkB1IxTDSoWhZNpC2h7kfpGtkbfyQqzviz6RWKp4Ue1ICfu9qVZa91eu"
413 },
414 "public" : {
415 "crv" : "P-384",
416 "ext" : "true",
417 "kty" : "EC",
418 "x" : "q39AYquQt0BdQ6VKuiNC30e55iTHfHqs9ogJK_kunUCWu0vDsnn2tWVbYDii57go",
419 "y" : "uqIRUwq6RUG3v49Sy4L-8H9Czx6RO_x0o2ZoZjVjEYcdpEv7I3rwFqO1yLcSbrRS"
420 }
421 },
422 {
423 "comment" : "edge cases for shared secret",
424 "curve" : "P-521",
425 "name" : "EcdhTestVector",
426 "result" : "valid",
427 "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
428 "tcId" : 20,
429 "private" : {
430 "crv" : "P-521",
431 "d" : "AVKh0rHG7Pkd3_PuLDYXWSHmODNUmBjhPcYkoayV1g3HZnZRlu1fROV3rOIloeHvRYdrFx_NB5INebN1qaUMNRqB",
432 "ext" : "true",
433 "kty" : "EC",
434 "x" : "AKlNmCvHHVNVD7yVQZDT0ndwQrHFb-CUb1Q5hpcyIZBfm6ztMv2w23vx6l4-7rWaxEaCGFhFuKs4UFt8JBIs3g6Z",
435 "y" : "AM9y8f1YkPLcaCxYgDGJVlltBFJNpRu6tFaMueJmi_4TQPdHMfUACPTu3ZPiMOJfLAHjdj-40SuS1DE95PcxdVtE"
436 },
437 "public" : {
438 "crv" : "P-521",
439 "ext" : "true",
440 "kty" : "EC",
441 "x" : "AS3urkDLLXtha3NhL90XI0u07sy8om0WO7EbHvsPeJgM0iufl35-RuReyDHZzV10rh-AoHn8y1zITpqxnu8oblJ_",
442 "y" : "AC3Pf4WBRCJec-AxWwruShMAKA3GE5e-XD4HhAxEVsJQ8VDNT4dlBhjpmUs91Vl-Yq-nhAVSbVRceiYm8-ripeex"
443 }
444 },
445 {
446 "comment" : "edge cases for shared secret",
447 "curve" : "P-521",
448 "name" : "EcdhTestVector",
449 "result" : "valid",
450 "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
451 "tcId" : 21,
452 "private" : {
453 "crv" : "P-521",
454 "d" : "ATmak4nm7hXp1MKCw8hx9rnwRfslPzg0E48tyiLkTJq0PiUlXPIop9zJLOp_zTJxol0otFSGDMQHN7UUuOWataAG",
455 "ext" : "true",
456 "kty" : "EC",
457 "x" : "AVjKsZhF9cafY1ZWqEl5rWLBHKUYICfLSotbTrFxs1Gzqsp5rPvXEiGTw3JoUXUanYAiTlDO4D35pYKrehMka8e6",
458 "y" : "AZpeA_ZGbMfb9gefRvzM66QJF4ywd7fX4i7bD6LxWN6X4YvP0TA-9IgEY9P8rmNtEVWNHOQ7lYMXyG3pSJXCiVmo"
459 },
460 "public" : {
461 "crv" : "P-521",
462 "ext" : "true",
463 "kty" : "EC",
464 "x" : "Ab3YIomLurxIHOuHAhK8KzsSUsU-YK4Gr379y2CHaIo9kgP_rh18DiXCoUEvoIIx8gwGTZzzOeRuTPbZRQo5tA8d",
465 "y" : "ADD0l0D-8kB5R3GyXenua2pqLjvxMB7XKkYTVTvikv-dr7kj5-zdWAI0bvdYua9iDydcbvNBIfCqnIMrcCuN-tTv"
466 }
467 },
468 {
469 "comment" : "edge cases for shared secret",
470 "curve" : "P-521",
471 "name" : "EcdhTestVector",
472 "result" : "valid",
473 "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002",
474 "tcId" : 22,
475 "private" : {
476 "crv" : "P-521",
477 "d" : "Ae0B8AuUv5AvAslCh-nNsc5Rp3aiJaOeDq2r5hDxZOtHXDFWPlYZLG4IVeRITPyvroD8ajdheE5fLTk9xkAwLAlN",
478 "ext" : "true",
479 "kty" : "EC",
480 "x" : "AMJZVTWNZBnvGzroqMvz7iQ_l7EdyH_wfH82VUN-yh5HRB8Zhixc1_ZrRAFIBTRXbG3OhpnkbBynsz93elFLmrS1",
481 "y" : "ADUZa4-xrZuR6TkvperZvyQpU9LA6anRWvtBpfErRRutoNOXNNqZd4iJM9UrOwgMuwD3EcjHi5LcFlU9fnhAX-4F"
482 },
483 "public" : {
484 "crv" : "P-521",
485 "ext" : "true",
486 "kty" : "EC",
487 "x" : "AWImM20DIMkwVqKq5Oj8KGQB7lAiAamgp-MsdmgGpbGoRdHD7BC70po-yvLRKWx0j8wcvDtLBgSlN56X9IiV3_-8",
488 "y" : "ALjyFlEqqyfyfxY2USOCXRU1-NNCJgg95ZaX3AwhJK2osJI_5gl6ZGsR269YSc8lvzz-DMQSkSN6izsJewFYWE35"
489 }
490 },
491 {
492 "comment" : "edge cases for shared secret",
493 "curve" : "P-521",
494 "name" : "EcdhTestVector",
495 "result" : "valid",
496 "shared" : "00003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff",
497 "tcId" : 23,
498 "private" : {
499 "crv" : "P-521",
500 "d" : "AHCj4dIfcZmOPuhsdHE1_QFbirc5UuwhQSVRGJvnNfMqbvkgwJdDwoh35_rOrvDobZkMCUo2gjywt-jeb1MoTXXL",
501 "ext" : "true",
502 "kty" : "EC",
503 "x" : "AckwlINJRsmZceEqzmdGd6OkBOpgGt7BuIL1_1qKj8KPd0IEVzJOnMIKtllYm6mcb5CjImhB9OTMf2TfbfikDx8z",
504 "y" : "AYop_NDJXvj0A2PHJ4oHLfNybIsJ_yuprFdBxil-CDxyYfOoxxKYwZJqv5dFvahgBq2pcxlUtY_edhyo3t87W5Vn"
505 },
506 "public" : {
507 "crv" : "P-521",
508 "ext" : "true",
509 "kty" : "EC",
510 "x" : "AFRRtylPwcqFK3-rIUMWNocMLgrAOgcbHuBpzjmQe8H-F4PQb22UmMthmg5bV3HUTAUo8CN_fKYHG5Mp-vhlCDw0",
511 "y" : "APnnz_jAwOl6YVA6S-X3i32oAfBRIKgvAGP6-4a1rn3bUxbbX0E6DHxyvXDHBagiswvCTcpmbgf1K2DWl0lYAdvr"
512 }
513 },
514 {
515 "comment" : "edge cases for shared secret",
516 "curve" : "P-521",
517 "name" : "EcdhTestVector",
518 "result" : "valid",
519 "shared" : "010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
520 "tcId" : 24,
521 "private" : {
522 "crv" : "P-521",
523 "d" : "AWkrrEpAH1ySoeLzWa29MPCf1d_1AGnmgl5ctM38yHn5HJnANExaKUqMBrOBv5uqqplBUFX7nNL3l4dd7WqaPFIa",
524 "ext" : "true",
525 "kty" : "EC",
526 "x" : "AC3_tgsEuNpiRbo91tSKWj56AQpSbGt1tXpheP-BY-x73ByOHUyH6yiBYeHcdXwi1iLr9utUubAOk0eXUANOYOfe",
527 "y" : "AZPGwdcwZSHbhKuduwfvNyo44kzrWP7Hao6soA6tRAB8bWu-ZqY9VfazCp4UviSfL5npVBVlyWHrbJzm6_rZZ6u5"
528 },
529 "public" : {
530 "crv" : "P-521",
531 "ext" : "true",
532 "kty" : "EC",
533 "x" : "ACpQ9eN9V7C6ykS76ZP0u-UARYdeEbXT1ktF1049JBufZvm7AjNXgEIh5smS5edyPsQ2E3CpKCrRb9zBsZDfeUmm",
534 "y" : "ADRPkod4ORmJNXBkni6W6xjFgQWzJYWyineMsSJcIx5SgFJzFd0wKpJ4r4NoMEQYP7Hro6pwuPb8lzsh3kXq8k3o"
535 }
536 },
537 {
538 "comment" : "edge cases for shared secret",
539 "curve" : "P-521",
540 "name" : "EcdhTestVector",
541 "result" : "valid",
542 "shared" : "01ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff",
543 "tcId" : 25,
544 "private" : {
545 "crv" : "P-521",
546 "d" : "AVvfMqtnNDa9_sm8S7JMZH6FGX8Rtx3uHHwwqabohiviiTJISFwRwEdc3rrO5XcEbY0R4h2JFj2D_51KB0TsYnt6",
547 "ext" : "true",
548 "kty" : "EC",
549 "x" : "Afrx9MyHjAQXLzWtY8E3Npgc5RHmb_7NJZBnC8IScQExr1Mw6YLdSIApLgebYCItsxn8NI1ePq7Yel40vdYjDmHF",
550 "y" : "AQgpwUfPeLtojxZr3CZ7TRkfOW94MFH6Qd3-RKrNxCfWhDbFn08eizxx9MeDYTTBi7QP7YjgGsNwQHdYynaQCrJl"
551 },
552 "public" : {
553 "crv" : "P-521",
554 "ext" : "true",
555 "kty" : "EC",
556 "x" : "AapJCiTqodo1UEqh71rQPTFdFWAingHpYzYEcQkoNlaN78YHsEh13mq3t4rfAySlSHISiAxhLCUoNE8A0qJH9-uo",
557 "y" : "AbGIwEWcIGbHLtJ8jZdQZlvsq5PPXrp9nv66HuRZIvv4zFjE6EFlmiy05SRbQVdNIxXTPRYzTc3zD2ap0AI6Sp8F"
558 }
559 },
560 {
561 "comment" : "edge cases for shared secret",
562 "curve" : "P-521",
563 "name" : "EcdhTestVector",
564 "result" : "valid",
565 "shared" : "01ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000",
566 "tcId" : 26,
567 "private" : {
568 "crv" : "P-521",
569 "d" : "AQRGx7aakMJAtvNZjVcMNtuPiKmi0sR4HbQvx2SiPwIE8av5AQ4489sfWCLJEQT1LJmr7z7uCs_RkZnYQfA5nsRY",
570 "ext" : "true",
571 "kty" : "EC",
572 "x" : "AOzcaMvbri-f4B1RYhnAj0-ma1NDDxi4bTiA56rGUB1jToLVVmtUlf19ejkW7IXaEbIxdOvoPFDyEuQ25lEVviI2",
573 "y" : "AAALPmt-i6XKCpayvbbEsXVQgACrzwFm1hH2apTQZ9AuXHMCxqlRtuLWox49b3UWQQxguKUxC-Wp3N6Vc69L0258"
574 },
575 "public" : {
576 "crv" : "P-521",
577 "ext" : "true",
578 "kty" : "EC",
579 "x" : "ARcwdNExeWI1KkBYFq3NrPwHLihiab5Om7EWUye1rUJQ_sqBLSAZ8aH5gunT3LS4govxtGeFJT3591GYZCCx_YR4",
580 "y" : "AL6RaKyYB3FkjvdvupBdCR-TMtMFZoTeiYdiOF17lbowRVEuU0ueOZtC3g-oeUVdR38PAb8qjyBuTUjTfy-PAwFg"
581 }
582 },
583 {
584 "comment" : "edge cases for shared secret",
585 "curve" : "P-521",
586 "name" : "EcdhTestVector",
587 "result" : "valid",
588 "shared" : "01ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff",
589 "tcId" : 27,
590 "private" : {
591 "crv" : "P-521",
592 "d" : "AEf0gpI9gWUpV2YOJXZbq-_NNs1-0gaz_cqsTCWJryIlZIFpjfAR7E7TYsVWJJOcQ06KThPTq_f465-pNYV6GM0e",
593 "ext" : "true",
594 "kty" : "EC",
595 "x" : "AbbjwscOPKDPxOhuY5Adis_BFWuAtvp6CACwigg7nQsVVMfmmz-2rabNDVM9xfO-IyJluN2iIXfWqfsso9ZfqwNa",
596 "y" : "AN0O-aSlTwMFZMh61_w6Dd6WFF4RSgvTUTKrgBbfwvJ51oEFS2N9wkAO6n9BF5LtGEs05Rk4c7YiHW7cduSTGaP7"
597 },
598 "public" : {
599 "crv" : "P-521",
600 "ext" : "true",
601 "kty" : "EC",
602 "x" : "ALerrg1ExBfKvxgAcbHCrRng59VuQrYtenCecu0zFvM6qCfT-K25W10QlV0CUb2ghufXhEHoYcloPvqAs_9s4fbK",
603 "y" : "ADkJ75dRag1VYGkeFmYAoHo4srO0iLCnA-UkhCPnFnBeMgYymD1w2jgvQAgaklc0Hu-9UaD7p1_Nf-1TjpWJtUow"
604 }
605 },
606 {
607 "comment" : "edge cases for shared secret",
608 "curve" : "P-521",
609 "name" : "EcdhTestVector",
610 "result" : "valid",
611 "shared" : "01ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000002",
612 "tcId" : 28,
613 "private" : {
614 "crv" : "P-521",
615 "d" : "AVq5Tiol6wETE9p3S4QwJkOnBOLHsjacK2jJwqKNg29fcQYU2F1VfIXn_z_W2gCOA1pfV1nxjFHy71Zbvjt0On74",
616 "ext" : "true",
617 "kty" : "EC",
618 "x" : "AAiC9FSE0AUJRyxhAyzUpiQ9jx6rK--jcvGKfjhV3wOQc8ESnfvM6Ht6a6q4et-ZpudHxtKYEVbg_Sj-DFPf3In-",
619 "y" : "AS4ou5BmSLHuNP15FUxCpaWYcVSAZbEpByTXeaAF4pGrjKAn-QJQTEoeCRzSpaRNOnNuQ4R_RmEYxhWBKGg0GMGV"
620 },
621 "public" : {
622 "crv" : "P-521",
623 "ext" : "true",
624 "kty" : "EC",
625 "x" : "AIADDBIkyBDQ9Mdh5Q55qU38Z5MKqGaZMc6u-lYk_BxYqWpjzkBnNLFnfnEPNB5Pe1VB5rBZ2Bgnklo-E_DErnUV",
626 "y" : "ATMiYwjDaF7zYFgwtWB1j-yPSeB86uTsOl-jZn1xcuIrFJ5rt5SRZCD770ODhWqd0FZ6XimVkkN_C86DfLhRNFtV"
627 }
628 },
629 {
630 "comment" : "edge cases for shared secret",
631 "curve" : "P-521",
632 "name" : "EcdhTestVector",
633 "result" : "valid",
634 "shared" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd",
635 "tcId" : 29,
636 "private" : {
637 "crv" : "P-521",
638 "d" : "AV9Wm2yFPuZTEtzoREML-T4ePjFF-qBX1fuKnACO_UXwGLXX63QY8BnW3yTKIRHsLbYZAYl-mcln98Lf031gFvE9",
639 "ext" : "true",
640 "kty" : "EC",
641 "x" : "AFRFfw2juwn-o9pRWj-iWoh6CJnQK-PQuGrRxgCv3-PY4MGCuEWkS9vm4uBoebJqLLrktoCQk9QajjOVO54eXX3Q",
642 "y" : "AWBlktVWdA9WSpA2tAU7qiJrt6wahs1APs0DpDra-co5-_qPVJ4MNRGccMm8NIalEpH-BKTzTa0ulEnkKO_WGkzH"
643 },
644 "public" : {
645 "crv" : "P-521",
646 "ext" : "true",
647 "kty" : "EC",
648 "x" : "AcV8ffR7tx_RPXFPhG66Wy6v_YdvF_DPBRyC2MBdVnqkDA5qRbb13O7MPDOKIbZByBSPo0fYwWWuJJQyHy6ifvhB",
649 "y" : "AVEsOm9DnGCIOdriD6SoT3HpQV6AsJzKG51vehjIngB9QGWjwcMhTZc1vy4FqnOk135hOH18JdBMyp2RvezglWmQ"
650 }
651 },
652 {
653 "comment" : "edge cases for shared secret",
654 "curve" : "P-521",
655 "name" : "EcdhTestVector",
656 "result" : "valid",
657 "shared" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe",
658 "tcId" : 30,
659 "private" : {
660 "crv" : "P-521",
661 "d" : "AE4aqLfxx8CRwT3QCLZlGuNRCmYhcpKx1cQKa5yYRCJdoRoFfHBmXKEFpPcn02d56w84wAxo5IqLuiSF6iwBXSP7",
662 "ext" : "true",
663 "kty" : "EC",
664 "x" : "ASeR1fEZFj-lqdUm56zzdw9ye2XQ9rZuNGed20Y89cvpCC3k-qGhjERJWVCJEwvbGWHfG3dikPws3bd4BpNF8imw",
665 "y" : "AUTDJdEeJ3cOzU0w5QHaygcoV7heHoc6mIxLepOattgSh86q9gpuMlEToVuILBB-XLmDXDPcUAfcTugkSgMt0Cb3"
666 },
667 "public" : {
668 "crv" : "P-521",
669 "ext" : "true",
670 "kty" : "EC",
671 "x" : "AGjidY0tiJL7AbgOV75-ZWrkGFHTKhuYfycXv1yUfBUcy97QljiYb9SOHs8g_tdMc-iclHf9jMP33Anyc6mLWIke",
672 "y" : "AEWBC6A7bwhGzO7Km2FkS2gAMDm36KRmlOJ4y_EHSwh3wtC-AwMkUesZLwA7bIlsvLGom3MC4Hi9E7Nczgurhg0H"
673 }
674 },
675 {
676 "comment" : "edge cases for ephemeral key",
677 "curve" : "P-256",
678 "name" : "EcdhTestVector",
679 "result" : "valid",
680 "shared" : "64ebddd0211545e08fff948c3c252bafdb61245146915b8524f27cd6ec766d4f",
681 "tcId" : 31,
682 "private" : {
683 "crv" : "P-256",
684 "d" : "9WHNIE2tXPb9P1qiTZSGfw8xzSIXbrwjDlu4IMNDGK4",
685 "ext" : "true",
686 "kty" : "EC",
687 "x" : "G5TtS3gQhifa-fzyckvupwbKxmfGuveNC2CwLpchqH8",
688 "y" : "FBD5sLTkev2U75DG792XrwCybeK4X-rSkP7OeenV668"
689 },
690 "public" : {
691 "crv" : "P-256",
692 "ext" : "true",
693 "kty" : "EC",
694 "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
695 "y" : "ZkhceA4vg9ckM71dhKBrtlQcKvMdrocXKL-FahdPk_Q"
696 }
697 },
698 {
699 "comment" : "edge cases for ephemeral key",
700 "curve" : "P-256",
701 "name" : "EcdhTestVector",
702 "result" : "valid",
703 "shared" : "11c2b3d789d5879ae2b6c5bf25e970d246ae19f27e96d2a53b85b844662bfeba",
704 "tcId" : 32,
705 "private" : {
706 "crv" : "P-256",
707 "d" : "37nCPA2bNyQYlt2dwyPl499ok2n2P9GDC1PC6Kq3_ps",
708 "ext" : "true",
709 "kty" : "EC",
710 "x" : "qPLjpu-qN03vykV-b3Zmsev1gum3iwur3ptEBN1jqO4",
711 "y" : "33Y3hU4lZy8u_ZKc1TJGIhY5TFyqHWH7NGVwikCbE2g"
712 },
713 "public" : {
714 "crv" : "P-256",
715 "ext" : "true",
716 "kty" : "EC",
717 "x" : "AAAAAP____8AAAAA_____wAAAAD_____AAAAAQAAAAA",
718 "y" : "RiwEZuQYAiONbJJey-_HR8_lBeoZavmi0RtihQ_OlG4"
719 }
720 },
721 {
722 "comment" : "edge cases for ephemeral key",
723 "curve" : "P-256",
724 "name" : "EcdhTestVector",
725 "result" : "valid",
726 "shared" : "827b389dd5c08c79f1315302342539be601a7f755bdca98d6702846107a31870",
727 "tcId" : 33,
728 "private" : {
729 "crv" : "P-256",
730 "d" : "fQCkXannaJDeh2kAnq5HI7wLxvzj6x5t-HoWWOhDLMY",
731 "ext" : "true",
732 "kty" : "EC",
733 "x" : "_FJoFGfalGIOTH-b1D-ibY0CN8prxadt3__i8MY5nhw",
734 "y" : "DgvkRsg976wXQkGkRFNW8a8fN1Vr8bD3Ak3V03Q0wgQ"
735 },
736 "public" : {
737 "crv" : "P-256",
738 "ext" : "true",
739 "kty" : "EC",
740 "x" : "AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wABAAE",
741 "y" : "aEyKlYbtb5y-RHBYp9ohCLqx5eCmDR9z5OLnE_Cj3-A"
742 }
743 },
744 {
745 "comment" : "edge cases for ephemeral key",
746 "curve" : "P-256",
747 "name" : "EcdhTestVector",
748 "result" : "valid",
749 "shared" : "bb25fc9cb64eb69e52f9d1d4c0d9dc7563d2342738b8545bd849c9616f7c35b8",
750 "tcId" : 34,
751 "private" : {
752 "crv" : "P-256",
753 "d" : "7y30Hg3QXiSRil8iTHd33Y9yg3JzVR_PUJ2SaUeNfOQ",
754 "ext" : "true",
755 "kty" : "EC",
756 "x" : "HwhwsMS0T9wPDfjxu0mxkLOfESsQUmIYa4V1KwHrlDc",
757 "y" : "H5yuPQ9-ah6D2MO84W-0MBzRBQzBP4Q11teY74VB7ZA"
758 },
759 "public" : {
760 "crv" : "P-256",
761 "ext" : "true",
762 "kty" : "EC",
763 "x" : "f_8AAf_8AAf_8AAf_8AAf_8AAf_8AAf_8AAf_8AAf_8",
764 "y" : "LiITyvAwM-D9D3lRFU9ubDqSRKcvrKZenOnutcjhzqk"
765 }
766 },
767 {
768 "comment" : "edge cases for ephemeral key",
769 "curve" : "P-256",
770 "name" : "EcdhTestVector",
771 "result" : "valid",
772 "shared" : "01d6936718941de1c689a8d11cf98c0d50cd18b40589e5e4efc2ab7692e9a11d",
773 "tcId" : 35,
774 "private" : {
775 "crv" : "P-256",
776 "d" : "ynQhnwWzXOkr-9Ne4QB_C_gSAjx2gdpSX_aFifK9S0Q",
777 "ext" : "true",
778 "kty" : "EC",
779 "x" : "3v4g84h9rNVn81C14Uxr2QQWp1VZpW33GQ8qfm34ulI",
780 "y" : "SEPuncA58RBm9OslWclcvGWZOoNftu-1vu1Efc4sYiE"
781 },
782 "public" : {
783 "crv" : "P-256",
784 "ext" : "true",
785 "kty" : "EC",
786 "x" : "gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ",
787 "y" : "K-h4nbgbtIcKnmDFwYyAyD3kZCdygfGvHmQIQ6GjFI4"
788 }
789 },
790 {
791 "comment" : "edge cases for ephemeral key",
792 "curve" : "P-256",
793 "name" : "EcdhTestVector",
794 "result" : "valid",
795 "shared" : "b040da667e626da3ecba81774abe5c78b0913269c4a338e96169280cd960cb11",
796 "tcId" : 36,
797 "private" : {
798 "crv" : "P-256",
799 "d" : "dbAXHkNIjNBS9ai8xc1rlIBwtq5u2HFxAHATVr7xORA",
800 "ext" : "true",
801 "kty" : "EC",
802 "x" : "ioFLm07OAbhKONV6TmTlamuJaIwHEzSeeGuNcosgoLk",
803 "y" : "jPuKN9axMkHxUMyjgbTTnE9Tq-QJq5u-gmnJ8Y2iFlQ"
804 },
805 "public" : {
806 "crv" : "P-256",
807 "ext" : "true",
808 "kty" : "EC",
809 "x" : "_wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8",
810 "y" : "XfgPxsria2wZUvvQDtF07hIJ0GkzX1tIWI4p6AuRka0"
811 }
812 },
813 {
814 "comment" : "edge cases for ephemeral key",
815 "curve" : "P-256",
816 "name" : "EcdhTestVector",
817 "result" : "valid",
818 "shared" : "4936cc116991029c526353880d1662c358030966cd55a9a8160fe2d159aeb4e7",
819 "tcId" : 37,
820 "private" : {
821 "crv" : "P-256",
822 "d" : "XOqmj1_5DbRu0cV4_bPB1JTKV2EImMcAmCiQxztru9Y",
823 "ext" : "true",
824 "kty" : "EC",
825 "x" : "oXuqPe7_EUlvhfee5l1fOFn5X5Jb1wNjVcenVgTJyJg",
826 "y" : "29Xvv-xNR8wUyBM_47j4bGb-C3vDFXLKhv0iCc391vo"
827 },
828 "public" : {
829 "crv" : "P-256",
830 "ext" : "true",
831 "kty" : "EC",
832 "x" : "__8AAAAD____8AAAAD____8AAAAD____8AAAAD____8",
833 "y" : "LGNlDmpdMy4ph90Jp5AI6PqrvTfknLAWv7ksjND12nc"
834 }
835 },
836 {
837 "comment" : "edge cases for ephemeral key",
838 "curve" : "P-384",
839 "name" : "EcdhTestVector",
840 "result" : "valid",
841 "shared" : "4e895e34c332213a5df19fabddc6b902d692839babb725d3df788565dab301ce21297ac9bb22634d28f4591bdca4bbbb",
842 "tcId" : 38,
843 "private" : {
844 "crv" : "P-384",
845 "d" : "T1tn2EWp3XrtJUF4-8hqnhI17p1Y3MLSIw4g_yMkj1ZeJVbJxfeCYc-Kh5O34xL5",
846 "ext" : "true",
847 "kty" : "EC",
848 "x" : "SnFhQe1E4hE8LFnQIHsmKuPj1Hvfp7ghcjeQ6l1Abj1bdfwmQexehMePbqPkz7mx",
849 "y" : "FdjHSmVoLnYQaACnx952lcm_Le0dPco8Mf83dOx8nZ6JyWoDe1tk2eInNlmxyJD3"
850 },
851 "public" : {
852 "crv" : "P-384",
853 "ext" : "true",
854 "kty" : "EC",
855 "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
856 "y" : "PPme8E9RpepjC6P5-WDdWToUyb45_SvSFdO0sIqq-Gu_kn8sRuUqsG-3QriFDlIe"
857 }
858 },
859 {
860 "comment" : "edge cases for ephemeral key",
861 "curve" : "P-384",
862 "name" : "EcdhTestVector",
863 "result" : "valid",
864 "shared" : "359842f1ba4c9be3d068c74399581ba6a322c6d3ab720d0224f71cf5ca550d1071a2b385adc8fb47fbfe74d25d4736a9",
865 "tcId" : 39,
866 "private" : {
867 "crv" : "P-384",
868 "d" : "50d0UvWbIrGM0eMD2D1wZuZPg6OCsnGbhPgVynGjTaKmbAPI4aj78fDP4HjyZNoe",
869 "ext" : "true",
870 "kty" : "EC",
871 "x" : "bIby6GKIm_c1VxP2_R3JJaD2a7WfrGIbGhKoFbDY6zWN4Lwzb8ujjRJhB0BlG4sK",
872 "y" : "dcKT0WCM0Sf9srQn-YUtmD--lpd9jZkD5AIWKzrDg10igwmh0lgQi_w1NgUguTXB"
873 },
874 "public" : {
875 "crv" : "P-384",
876 "ext" : "true",
877 "kty" : "EC",
878 "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC",
879 "y" : "cyFSRC-27lw-bOHZIMBZvGI1Y4FNeQQrkDzmDx1Eh_zNRQqG2gPz5u1SXQIBe_2z"
880 }
881 },
882 {
883 "comment" : "edge cases for ephemeral key",
884 "curve" : "P-384",
885 "name" : "EcdhTestVector",
886 "result" : "valid",
887 "shared" : "71716edde561d5f3160f49150d65d2d7288d828de14ca915b835547687e3b9156bc2575e24687393ad6aae3544367355",
888 "tcId" : 40,
889 "private" : {
890 "crv" : "P-384",
891 "d" : "rzWr72rzurTFbm6_jsnAgXH-H9VodWaGyETRKJC5n7ao06d5zoivfDUYh8iehcLH",
892 "ext" : "true",
893 "kty" : "EC",
894 "x" : "Ir2zHCrFMrmIUiUr4Zy6260S1oKzexrvWSUEu0e9BlXZZQqHf69RUmhxsbwPsf05",
895 "y" : "zRVH8sgQIsx9VOscHN-EAGyLiMQwny0x5faJVqFFE6uqtq05Jq7Peg0Jiwd-sEBk"
896 },
897 "public" : {
898 "crv" : "P-384",
899 "ext" : "true",
900 "kty" : "EC",
901 "x" : "AAAAAP____8AAAAA_____wAAAAD_____AAAAAP____8AAAAA_____wAAAAD_____",
902 "y" : "cDcDhUE9Pv9vo0B7ok9oLCsBtRRF299e97DdCXnxfnE-CQgVcfHpTftmvyggAvOf"
903 }
904 },
905 {
906 "comment" : "edge cases for ephemeral key",
907 "curve" : "P-384",
908 "name" : "EcdhTestVector",
909 "result" : "valid",
910 "shared" : "54a2e9e30ff3dcdf15bb0630dff2af17ae2ddadc9a908a6e844762af8f43b7dc3bb59212e626be44adf94efd3c9bf748",
911 "tcId" : 41,
912 "private" : {
913 "crv" : "P-384",
914 "d" : "lat_maoDiHjgtmOALbi0oV019jqEsoSKVEW8Hadq-sDPpexpBAH7c2TlUhfVKOfb",
915 "ext" : "true",
916 "kty" : "EC",
917 "x" : "k7C1k5ErkiAP3jUFHdgT5sw2WF4oPXNIUuLiWazarSE1mNY6uPCnvPvzc19-ufIR",
918 "y" : "p3OImY5TpcRNr0cht6RZOo14saiFmxNNQKWKXVmGl7s-9dJ9ulpYqf_Sp3vWts5-"
919 },
920 "public" : {
921 "crv" : "P-384",
922 "ext" : "true",
923 "kty" : "EC",
924 "x" : "AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__",
925 "y" : "ES4ZHx94u8VLbMTwseWa6Mb_Ggf1Eo5B36KCjhtlONT6LKI5TGqrNEncs_xOtEwJ"
926 }
927 },
928 {
929 "comment" : "edge cases for ephemeral key",
930 "curve" : "P-384",
931 "name" : "EcdhTestVector",
932 "result" : "valid",
933 "shared" : "6125603f2419093887c94cdc24030a53774e68436d9db29e58199ff5043f38850c94a843ced979247f2ca1bd48e712f7",
934 "tcId" : 42,
935 "private" : {
936 "crv" : "P-384",
937 "d" : "OriTivAVWkEw0xPlfSEL1XuyfRoo9WXwPFrlaxFY_jHpWXKku0EjnQis9js5i716",
938 "ext" : "true",
939 "kty" : "EC",
940 "x" : "BnGd_rVJP9RPKD1nBm4EJHkAk6UuM3n1WH9-w2tUGC-HHM-ELlLY2imgCV205lLz",
941 "y" : "9DWhsjsMME952LVjIxeC8Gw-KTiK1jmnOTmWHbLj9lw0hiK8t9RPS4iQ4bCwxAB2"
942 },
943 "public" : {
944 "crv" : "P-384",
945 "ext" : "true",
946 "kty" : "EC",
947 "x" : "AH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAIAA",
948 "y" : "AopMjaWgURL-YCXvQZCJad4g0F2WaOXIUu8tSSFy3cKgpiL8SIFk_MGgdrhylCry"
949 }
950 },
951 {
952 "comment" : "edge cases for ephemeral key",
953 "curve" : "P-384",
954 "name" : "EcdhTestVector",
955 "result" : "valid",
956 "shared" : "60d73748120e538409c65508f4fd2c4575ee333d1103be329fd95eda92fdb45665de27db2d3f3ba5c5ce0d448d33442d",
957 "tcId" : 43,
958 "private" : {
959 "crv" : "P-384",
960 "d" : "LgLDmLopfrvWYzRGKWleU8ZSMaPiSMLLBKrJWGwXPvD-USKpohFKBUCxI-x6hDuZ",
961 "ext" : "true",
962 "kty" : "EC",
963 "x" : "P0lK0BgW2hvIautb__wcM9wJxsgN0h_9jP6OEkt2uVQSlzOxnkWGjlQrnQthW8W2",
964 "y" : "h_lSVNmK7k9renQhp30NyVF_PTDhBNH7CDUQi2O9ttMZsu2LgMCzUmQYcdIRDcy8"
965 },
966 "public" : {
967 "crv" : "P-384",
968 "ext" : "true",
969 "kty" : "EC",
970 "x" : "gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC",
971 "y" : "B5faTAdRztFt6A0Wq3xlSl3CfQkmJtCGWhkqHF6nwbiMn8qwV5RnQeQcwoyA7Aua"
972 }
973 },
974 {
975 "comment" : "edge cases for ephemeral key",
976 "curve" : "P-384",
977 "name" : "EcdhTestVector",
978 "result" : "valid",
979 "shared" : "acafe3aa06c90ff391128a2ba4b569d3f76b65ff1ec1e9c98780722c336810768014be29db1c7b523c68f3246b2765c4",
980 "tcId" : 44,
981 "private" : {
982 "crv" : "P-384",
983 "d" : "u5P9WvZZwf3krTQVlA_9dx6HLwp4CwBuEWupeU7xskBvkFQkLEsWgc6ODACeDJ34",
984 "ext" : "true",
985 "kty" : "EC",
986 "x" : "aahIFrSc4nFAKY6U6YSFH8SbW5tLaXzgNUzMwFQB4mV9yshGl_J30i-pYrqgf-KT",
987 "y" : "kKd0wGLab0vwL9vcZXrF4f9Wwl_YpTtBgdTNBVAsfN7gnDO0_KgUjyiuC8V0YADC"
988 },
989 "public" : {
990 "crv" : "P-384",
991 "ext" : "true",
992 "kty" : "EC",
993 "x" : "__AAAAAf____wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8AAAAB_____",
994 "y" : "bHCJiub7MfovCGViry0QSGukxv1eQd_kqmFZi0cHo7wnamL-sbmFV-OxfAJfet9O"
995 }
996 },
997 {
998 "comment" : "edge cases for ephemeral key",
999 "curve" : "P-384",
1000 "name" : "EcdhTestVector",
1001 "result" : "valid",
1002 "shared" : "2f6bdffd0381853dc2c493512138ee843d4f7f0d19fde184f1a438887c741acb066654e45ea79d230c3f3cb376c22665",
1003 "tcId" : 45,
1004 "private" : {
1005 "crv" : "P-384",
1006 "d" : "t7k8StSVU9m_UnPXIr7cpsZHinyGKtb-ihWaapXGXvBb_Q_7DAkhlodltTuOjBNa",
1007 "ext" : "true",
1008 "kty" : "EC",
1009 "x" : "rZ7Tz-zApVpyC7uD66RRSVxnXAtg9qLorxkVbamhRqt52ztcCT6isv5C73FO_J9S",
1010 "y" : "SeQr0j5HOA0cdzcPNj1tHq5RNO7DXT47l07tk41gIEPN2TI6h8CQ1teO7oliUXzl"
1011 },
1012 "public" : {
1013 "crv" : "P-384",
1014 "ext" : "true",
1015 "kty" : "EC",
1016 "x" : "____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____",
1017 "y" : "SYerrkEoCcL6SP0jsb355iL1pgbEQRchX_phsY70blSn-78R-aa6WcmRtK5QH-3O"
1018 }
1019 },
1020 {
1021 "comment" : "edge cases for ephemeral key",
1022 "curve" : "P-384",
1023 "name" : "EcdhTestVector",
1024 "result" : "valid",
1025 "shared" : "7ac7f7cf745457b1a58ea3cddc0337d47211b44403ab4ea47559be4350e8e87ef1aaf153e88eee72a3bdfa88aff1bad1",
1026 "tcId" : 46,
1027 "private" : {
1028 "crv" : "P-384",
1029 "d" : "G6nOPd7d4YRu2aiuR2rGsJhaHbgu-YD4KWcolBGqjhFF7r4vEut4Z7hJPHCmkYfo",
1030 "ext" : "true",
1031 "kty" : "EC",
1032 "x" : "OdLPzPwjOGKxUaUEWtPkWQcU-lZMiMY7ltEg-sv8cDexBg1YAehFcvNHTNd9Eoco",
1033 "y" : "4cv-rRGl9hZpU7SdqV25z_tQxBHl3H9M8zYJ-rQ1gvjsvszDI9lWfc2Yda6GEauI"
1034 },
1035 "public" : {
1036 "crv" : "P-384",
1037 "ext" : "true",
1038 "kty" : "EC",
1039 "x" : "__________________________________________7_____AAAAAAAAAAD____-",
1040 "y" : "cyFSRC-27lw-bOHZIMBZvGI1Y4FNeQQrkDzmDx1Eh_zNRQqG2gPz5u1SXQIBe_2z"
1041 }
1042 },
1043 {
1044 "comment" : "edge cases for ephemeral key",
1045 "curve" : "P-521",
1046 "name" : "EcdhTestVector",
1047 "result" : "valid",
1048 "shared" : "008a0e65c8611c570562e3eef2172e5fef175d211ca7613d3f301dd8babd9b47d400c31551ac4c06ef3850750a4cc6a012f31bcc556c41ba61054eb6af6829360842",
1049 "tcId" : 47,
1050 "private" : {
1051 "crv" : "P-521",
1052 "d" : "AKpIH05r5B-hJdYsfs2K1lPebZvuR-CKsJizim-_8jVMkK26amEEKxpylsbVT-aP0kR6-Rx_Jxl9IzyBSyPyWHCt",
1053 "ext" : "true",
1054 "kty" : "EC",
1055 "x" : "AP9uLiYau8O5k7k5b5HVp4wr56kfwhAkJk7K5GoGBaQ79oEgzdbbZA4-Xk5kvHcCt6A9JjhR98ADxmEoAR-GtHN6",
1056 "y" : "ACu39ZDjMkyQwIVvi1B4bwOPxZcAuitpWsXGXkh4vWzxvL9hKQ1exhkyu1gLyYipMAM8zZRQgcnGqQncxm8syuWK"
1057 },
1058 "public" : {
1059 "crv" : "P-521",
1060 "ext" : "true",
1061 "kty" : "EC",
1062 "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
1063 "y" : "ANIOyf6mtXfBDSbKG7RG9AspnmSLGtUIqtBoiW_uP45hS8YwVNV3K_AaZdQS4LyqjpZdL10zLX85-EbUQK4AH0-H"
1064 }
1065 },
1066 {
1067 "comment" : "edge cases for ephemeral key",
1068 "curve" : "P-521",
1069 "name" : "EcdhTestVector",
1070 "result" : "valid",
1071 "shared" : "012d650d8f3b211999aea626d97a2a359c98cf42ee4a7ce3353ddfea8e303102d60f1b82c207524bfe2c8f280d9d6c1345fe3f61ff889071310cbc5644a6d8683e66",
1072 "tcId" : 48,
1073 "private" : {
1074 "crv" : "P-521",
1075 "d" : "AR4Zxy_JL1yzPdR6rG0nq-06vo32mba1JskRrZPRiBAjcf6dNrGITYhWC_V3gtyeEODQbSDlmdvbI4BLN8vPGfxe",
1076 "ext" : "true",
1077 "kty" : "EC",
1078 "x" : "ACZGXGdGsWYaZ0fOuHCpoJ-8D_caLh8TQQYbcZgB8nXUpBKqn0vKcW1f9_XZVzTVYFKiDjyDIDH34dkf6d3yJwec",
1079 "y" : "AKv_XqoNtUyzdkKqU1ivxekOMmpKa7PKe9PjeCF5pzeVVg-1-6QBZcVOmAlXm2Y-QARvqtvTQbx0FValfOTeNgAj"
1080 },
1081 "public" : {
1082 "crv" : "P-521",
1083 "ext" : "true",
1084 "kty" : "EC",
1085 "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB",
1086 "y" : "ABDlm-k8TyacAmnHnir9ZdauqptwHqzBlPs-4D30eEm_VQ7GNuvuDd1KFvHNlAZgWvOPWEVndw4_Jy1ojIMuhDVk"
1087 }
1088 },
1089 {
1090 "comment" : "edge cases for ephemeral key",
1091 "curve" : "P-521",
1092 "name" : "EcdhTestVector",
1093 "result" : "valid",
1094 "shared" : "0090cd100d3a35ce5f9fc6c3dbefd3810d5096ed63e5ee046c26c28984f825a0ce6ff3d643e7ea1648b21dc8daad4286673aa84e28f256bbd978606a1fcca2942f7e",
1095 "tcId" : 49,
1096 "private" : {
1097 "crv" : "P-521",
1098 "d" : "AcfptciIDkTS-s55K0RvlPXZYl3MiXLWQIhQApWyG0rNBlExohWmt4I37TqsKPkuUetp6E5-LNjKfG72RFUZbfi2",
1099 "ext" : "true",
1100 "kty" : "EC",
1101 "x" : "ADmHGMepW0phM-0eOFYStqNF3raQTXAi9FSxb0e8UJiElG4uB4qS_48UaRfqxOrmt-RUoB2lmqmVveoTdSdvtotC",
1102 "y" : "AMxzlDgVrRolQOtp84UBNp9LX_n01wzS7y9RhaAQC_asgVt8IOymIuOAsdGo4JNeYUI7Zg30fS-elK8XVMa8DPzO"
1103 },
1104 "public" : {
1105 "crv" : "P-521",
1106 "ext" : "true",
1107 "kty" : "EC",
1108 "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC",
1109 "y" : "ANklT9-ABJasszeQsQPF7p-sEoMv5UbGMiJbD3_OPaRXSxqHm2I9ci-o_DTV_CqHMarWkamou4tVTJWgUdaqUFrP"
1110 }
1111 },
1112 {
1113 "comment" : "edge cases for ephemeral key",
1114 "curve" : "P-521",
1115 "name" : "EcdhTestVector",
1116 "result" : "valid",
1117 "shared" : "019c5a8fb31bfec0a892308140c2d4db952066bf0fb5b613c2674634723269da8fd19f1f93cbab0acd80a268f9d108b9a6103505e710b49ed6f3ec10a9a1aab0cb1d",
1118 "tcId" : 50,
1119 "private" : {
1120 "crv" : "P-521",
1121 "d" : "AEYv-AnJxUVNa43Cn7jWp0rMBxXHi-pd25Nfu2wd2vVNiw1OAP_KhduvhluBC6KWTZhpHwCNJhbyy5WiMbbfiKxL",
1122 "ext" : "true",
1123 "kty" : "EC",
1124 "x" : "AYMOoz0H-qWHNgCRhOi5vBMJcnSwGP9TKaNfoNthhA0misgNSJuLwEAUct3lk61FnOLDp-wOXWyWfxtiV14LZKIb",
1125 "y" : "AYLV9C9-sY5659HSeOojg7nt3Y_TZKiZR_XaavQZZZT9HwWOFVCA8s4OAbURON0bCi1DBqInrCxJ7WiiXp3HmzyZ"
1126 },
1127 "public" : {
1128 "crv" : "P-521",
1129 "ext" : "true",
1130 "kty" : "EC",
1131 "x" : "AAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____",
1132 "y" : "AM0oOdhXtGmfXI6KAZR4biaoYvCGtLqAdGrlIl7Tqmj5a3quxVIlgwu5j1LXUiEUGJe6SdejHrvwttfTE1LlJmGQ"
1133 }
1134 },
1135 {
1136 "comment" : "edge cases for ephemeral key",
1137 "curve" : "P-521",
1138 "name" : "EcdhTestVector",
1139 "result" : "valid",
1140 "shared" : "001e6f34d1c431b605ba5ad341a6d4b21b7c9691d79ae8070fd56705d5ee60c98e3956f12ce58bb831452541b43ffafd102dea31bb4e964da6a3023745554011ebbe",
1141 "tcId" : 51,
1142 "private" : {
1143 "crv" : "P-521",
1144 "d" : "AeONg5fKDfXtk9-RlPUuOZz26gPs_jHUcxlqe5XPrG3PBxAmMQESzT1ZbWy1aZx6Gtqcq-rZOO2WrosQZgs-MV53",
1145 "ext" : "true",
1146 "kty" : "EC",
1147 "x" : "ALwl2eMdd-N5-DAfX84o2w-_iUTtYgq47BBS5uSGUWcYHug7BU3CTUBrKmYafhUQIqnIYxRPsflRVMqnncnxJglb",
1148 "y" : "AOq4DoCisqFOiANEtfs0lwIipGH_vkuPHGWNgaWw4oZlzT424fTyWIC4sj_RZc1sTPWD4kT5ROCnZcemPrVRkzyn"
1149 },
1150 "public" : {
1151 "crv" : "P-521",
1152 "ext" : "true",
1153 "kty" : "EC",
1154 "x" : "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
1155 "y" : "AAgT2YKRGfQv-pX-qLqegeTNamypf7B3jhLl9d_jUgHdTMqOyg0uOVVVmXBBOB5qwfGN30x04LbpBBz9yh0cEDCR"
1156 }
1157 },
1158 {
1159 "comment" : "edge cases for ephemeral key",
1160 "curve" : "P-521",
1161 "name" : "EcdhTestVector",
1162 "result" : "valid",
1163 "shared" : "01367e24697254f96336f32098b6a35dd364c1dfc897c03404ccc8b7b9d207b1fdb9c66bc55d586002c561651842f7a11a7b8f4208ffa14f2b81c867ed6ac5b311d8",
1164 "tcId" : 52,
1165 "private" : {
1166 "crv" : "P-521",
1167 "d" : "AEsWMPirCvc1jgUh5gZJQumH5N4pnOSFfhhCOuXC-URm2HqR6JudLVfMJ_2mSTDEf8ZtYb0Kw4N7s-D_VL_wlzvt",
1168 "ext" : "true",
1169 "kty" : "EC",
1170 "x" : "AWZCsAy5TErC8oCtxpdkWNdeBmsBC_blA3Z9OTcgnfqH6Z6YQvUtj3_XaVS2vShKMd_xkPc9CyEjNPIsUJ_5miOd",
1171 "y" : "Acgw-GCBGqMPwDF4k9giSYYiEXXYJUhe848wvoZfqL3OqY6cBY9bZXMGRMzwNWVjJK8TpITJHqUq_PXSQpRTrDVP"
1172 },
1173 "public" : {
1174 "crv" : "P-521",
1175 "ext" : "true",
1176 "kty" : "EC",
1177 "x" : "Af8AAAAA_____wAAAAD_____AAAAAP____8AAAAA_____wAAAAD_____AAAAAP____8AAAAA_____wAAAAD_____",
1178 "y" : "AB_oAMUOVAErdaM-S-fQfI1g8paAo5XpUaajHFCWsOqSj8LL8yfdeE3Ap8pG6nOZK3WLVkE2S0q6Oek3mKTZJaAI"
1179 }
1180 },
1181 {
1182 "comment" : "edge cases for ephemeral key",
1183 "curve" : "P-521",
1184 "name" : "EcdhTestVector",
1185 "result" : "valid",
1186 "shared" : "0028cde4500ebb4f53aa89d08b162020d53921d43035d585d5645172334c9b0df46e6b0bf66a5240239d51ef1017c14173313317fb544a889efa83effccece7eaea5",
1187 "tcId" : 53,
1188 "private" : {
1189 "crv" : "P-521",
1190 "d" : "AGSRnAUCVCS-_7fN2JLqlXl1gLNlaiyaC9C6UKFmcZN4yeeg79TzMqFPwCHCrhhe89p2BAs4U9Y5gycIOmTa7B96",
1191 "ext" : "true",
1192 "kty" : "EC",
1193 "x" : "AQ8Us1RKPVn2xxhkRI0_7tqkE5acYGGaG9hnqgp7Nbvw1UprVgWUO8tp2rwfyfvlGc56FIcbmahQTFhNnKq4k6T_",
1194 "y" : "AAd77iaKst0JYgHEOnz79w-ZseypWs56oKGXzM1CJ_DUj3zHw45O2GhZ_VfAVEHd1prLKYgqN6n6FQ6EuWhJ9Qih"
1195 },
1196 "public" : {
1197 "crv" : "P-521",
1198 "ext" : "true",
1199 "kty" : "EC",
1200 "x" : "Af8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAQAA",
1201 "y" : "AI3Rih9eSCFAvnm7ZaIa1gyJh-UyyENF8BNa_9Ruxx7wKxyjrVbzAdlV-jBsEi1EHW_tz4uFXvJWNQv2nSOnIHrZ"
1202 }
1203 },
1204 {
1205 "comment" : "edge cases for ephemeral key",
1206 "curve" : "P-521",
1207 "name" : "EcdhTestVector",
1208 "result" : "valid",
1209 "shared" : "01f11556b0c2544695555c2c142ebbf72572244e043b755dfca7adcd32d1ff68177a70af88fdbad573f22943522c5e40a99794e3e629518d471f302bdd5cf0be729b",
1210 "tcId" : 54,
1211 "private" : {
1212 "crv" : "P-521",
1213 "d" : "ADl_dtWjNwzJxNPMypvvZQIh4hL8nLY-0GZQoinG9y5L9dh-erUW3nwCgLn1-mZI4F9qIxNxpdPL6WuapnyEJuPE",
1214 "ext" : "true",
1215 "kty" : "EC",
1216 "x" : "AOVtRhkHpYEOdY37Ctitf8tdcazfFeYJpGDIND4IE5Zsurd8gqMeSyp89mOH84HYc1-sBF5JhQ-bF3Pqj2W4-vhi",
1217 "y" : "ASX4TFfru6w_bk3u9k71gKNWFQgDENvSHSLRQhDSCi7w2PHTs9tdJM48O9C7WYw7EImq4oiK3D1jnHbkOyCwLfyd"
1218 },
1219 "public" : {
1220 "crv" : "P-521",
1221 "ext" : "true",
1222 "kty" : "EC",
1223 "x" : "Af_AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__",
1224 "y" : "ALEcZo-9VJ82iJ97Y0NAUdom8VcFg5E2sbFKCRUtehgup4BsNUeKMtOqPJwWJ6YVGevscbNvp3RJAluIKeJ_MHg0"
1225 }
1226 },
1227 {
1228 "comment" : "edge cases for ephemeral key",
1229 "curve" : "P-521",
1230 "name" : "EcdhTestVector",
1231 "result" : "valid",
1232 "shared" : "00f8f1e1940e2a69e733f8a7a5c9a2d30cad0dd901e702a0687cc83913f0123bbf9ffe5ae4ff6c5630118268e8e67f4327482b9b7e69a93ef4da1d3abe00e3692482",
1233 "tcId" : 55,
1234 "private" : {
1235 "crv" : "P-521",
1236 "d" : "AGiax25EUHBf6o5rTio6wNt2Z1BZdO3Y2ht6Nwj-nUi2sP8oGnmRfx1Qo3k8tGyzTke1Bisrhb_NFo_oByKuRVxt",
1237 "ext" : "true",
1238 "kty" : "EC",
1239 "x" : "ATu4_yZKbhiOikpAwZFrAw5TthD8lUyOjEfH3F8Pwx65KrWdzCTsUxlytYdvO2VGVGGLrfIBRKQeQA6DHxTeRIN1",
1240 "y" : "AY6_5hJv8HywySeUmLI64-Tyjrwof-9xEGkcF13wZC5t780Nsn78-whvVaeMxfl--bKWCF-8cq-ylayu-LRueG_p"
1241 },
1242 "public" : {
1243 "crv" : "P-521",
1244 "ext" : "true",
1245 "kty" : "EC",
1246 "x" : "Af___wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8AAAACAAAAC",
1247 "y" : "AKp178Co2qwdc_MsnFUkFLzPRK-OdDMbR0OefcxJoTWz7mHp9pcX2JtLujVnoZWu2hP77GNL8phLXsa2-A9ZeO1a"
1248 }
1249 },
1250 {
1251 "comment" : "edge cases for ephemeral key",
1252 "curve" : "P-521",
1253 "name" : "EcdhTestVector",
1254 "result" : "valid",
1255 "shared" : "008567b96fddfb4acc4b0317e5a8144b879e762bd611a8d8d0825c7af7a464d27eee6b721f7bf4aa431b095743299f36c27b0b520432472b040a9807f21abdb78dcb",
1256 "tcId" : 56,
1257 "private" : {
1258 "crv" : "P-521",
1259 "d" : "AMRVHZr067NGsXtKirPSRFaj2KL9oSIC90jdOYlU4CJTLzssF1bZC0BqnOX9AzxAz3C7-ny0LK7Ik3VbgnDy6GQ8",
1260 "ext" : "true",
1261 "kty" : "EC",
1262 "x" : "ABLN5qTrWH6RKn_frzdnVX3XWnW-sQ63iWeknyzshq-U1Fw_tEFN0AN7sV-JzjQaDDkuHyegXmtxfNuJPBI2AzBe",
1263 "y" : "AM6aaQYwMBmQKDRt1cvTDEdK6CMahJOePc7IYRix5VKgsbmBfCv7F9_xE5nexRTjDzGv309LnvVJQ0kk9Fv6f2u7"
1264 },
1265 "public" : {
1266 "crv" : "P-521",
1267 "ext" : "true",
1268 "kty" : "EC",
1269 "x" : "Af_____________________________________________________________________________________9",
1270 "y" : "ABDlm-k8TyacAmnHnir9ZdauqptwHqzBlPs-4D30eEm_VQ7GNuvuDd1KFvHNlAZgWvOPWEVndw4_Jy1ojIMuhDVk"
1271 }
1272 },
1273 {
1274 "comment" : "edge cases for ephemeral key",
1275 "curve" : "P-521",
1276 "name" : "EcdhTestVector",
1277 "result" : "valid",
1278 "shared" : "01c0ed430408acb310910db1933c22d021030c8b9c011b201325484911eec542605283f2a41c02f20ea6d96291293ce16794a759bbe1428bd6f4bc53a1db40e80b0e",
1279 "tcId" : 57,
1280 "private" : {
1281 "crv" : "P-521",
1282 "d" : "AWFrDPqiz_GzwVebeJ-MTnUZsc0Aw-nLZ8PkYl70WQdMhFe9aMQTp5ocQCC0h1_QQBEQxzTYioxfyLTVqA7W7xQ9",
1283 "ext" : "true",
1284 "kty" : "EC",
1285 "x" : "AfAnhZSidHsHhjPfcqc0MsllGBwegXg2tIcHQB3vOeRRvgjL_bLoaYHmp8fZ5ZVrBQcGQ7AMBfB86XiKe-27q_zS",
1286 "y" : "AE16Vy45Ij40KlRqhAFe_SSI7u5tfr5GfAmAPyeHVlM7ryOAOoohrLymiwSLJEmHCukT97D3xbIPdX_1eQyPWrit"
1287 },
1288 "public" : {
1289 "crv" : "P-521",
1290 "ext" : "true",
1291 "kty" : "EC",
1292 "x" : "Af_____________________________________________________________________________________-",
1293 "y" : "ANklT9-ABJasszeQsQPF7p-sEoMv5UbGMiJbD3_OPaRXSxqHm2I9ci-o_DTV_CqHMarWkamou4tVTJWgUdaqUFrP"
1294 }
1295 }
1296 ]
1297 }
1298 ]
1299 }
+0
-2254
t/wycheproof/ecdsa_test.json less more
0 {
1 "algorithm" : "ECDSA",
2 "generatorVersion" : "0.0a10",
3 "numberOfTests" : 273,
4 "testGroups" : [
5 {
6 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044af4f6d1d734798d4c4c6f97c4fff392ee65dc252d617b154ca835ea1535b104fb069171d00e87a92e6c4db1d892bc09b04b5da8bd9b09cfaa41d0a526e55237",
7 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESvT20dc0eY1MTG+XxP/zku5l3CUt\nYXsVTKg16hU1sQT7BpFx0A6HqS5sTbHYkrwJsEtdqL2bCc+qQdClJuVSNw==\n-----END PUBLIC KEY-----",
8 "sha" : "SHA-256",
9 "type" : "ECDSAVer",
10 "key" : {
11 "curve" : "secp256r1",
12 "type" : "ECPublicKey",
13 "wx" : "4af4f6d1d734798d4c4c6f97c4fff392ee65dc252d617b154ca835ea1535b104",
14 "wy" : "0fb069171d00e87a92e6c4db1d892bc09b04b5da8bd9b09cfaa41d0a526e55237"
15 },
16 "tests" : [
17 {
18 "comment" : "signature malleability",
19 "message" : "48656c6c6f",
20 "result" : "valid",
21 "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221008b8d6e21d0c0bb5185319715ccbce2902802e1eca070b7226dec70ceca023883",
22 "tcId" : 1
23 },
24 {
25 "comment" : "random signature",
26 "message" : "48656c6c6f",
27 "result" : "valid",
28 "sig" : "3046022100dc6483cb966474fc22f2e68660e5e52f3bfa403b962de583576177c0dab2a260022100db4526559f5145e2fc5aa10d1d993a811973144f99b86474599a9f1e212c07f1",
29 "tcId" : 2
30 },
31 {
32 "comment" : "random signature",
33 "message" : "48656c6c6f",
34 "result" : "valid",
35 "sig" : "304402201f0819fe1695c49555d6f3c1648a04c24cc59bad4120b3a66e997481d4e973a002206cf5660873b490ee99563c958a02178890191b7da31bd87e43161d83a6ad0efe",
36 "tcId" : 3
37 },
38 {
39 "comment" : "random signature",
40 "message" : "48656c6c6f",
41 "result" : "valid",
42 "sig" : "3046022100b925b7d5a274ec43833fc87d66e50d8bf0be579912d882be3300e7167985448f022100e319bfd2931d9a83b709dd5509d0d907188fa03d3025f842ca9123d052be6c70",
43 "tcId" : 4
44 },
45 {
46 "comment" : "random signature",
47 "message" : "48656c6c6f",
48 "result" : "valid",
49 "sig" : "3046022100d2cb5feded860091556d8710ad7e7aab7a6350d2d97238177604d8d330e0357a022100cab37fcb3ef1fd4485aca7d75dd4685b56f5078383936ad84f8af4c12b874c40",
50 "tcId" : 5
51 },
52 {
53 "comment" : "random signature",
54 "message" : "48656c6c6f",
55 "result" : "valid",
56 "sig" : "3045022100bcf08f55b39ec37c3939d58e9eb6d42f21bccff63f661eecd06c89acb689067b022062e2ba2ec55bb9fe5aaa888d5836deff0abf45cbbaf2f8228b31d2cefa380466",
57 "tcId" : 6
58 },
59 {
60 "comment" : "valid",
61 "message" : "48656c6c6f",
62 "result" : "valid",
63 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
64 "tcId" : 7
65 },
66 {
67 "comment" : "BER:long form encoding of length",
68 "message" : "48656c6c6f",
69 "result" : "acceptable",
70 "sig" : "308145022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
71 "tcId" : 8
72 },
73 {
74 "comment" : "BER:long form encoding of length",
75 "message" : "48656c6c6f",
76 "result" : "acceptable",
77 "sig" : "304602812100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
78 "tcId" : 9
79 },
80 {
81 "comment" : "BER:long form encoding of length",
82 "message" : "48656c6c6f",
83 "result" : "acceptable",
84 "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f028120747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
85 "tcId" : 10
86 },
87 {
88 "comment" : "BER:length contains leading 0",
89 "message" : "48656c6c6f",
90 "result" : "acceptable",
91 "sig" : "30820045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
92 "tcId" : 11
93 },
94 {
95 "comment" : "BER:length contains leading 0",
96 "message" : "48656c6c6f",
97 "result" : "acceptable",
98 "sig" : "30470282002100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
99 "tcId" : 12
100 },
101 {
102 "comment" : "BER:length contains leading 0",
103 "message" : "48656c6c6f",
104 "result" : "acceptable",
105 "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02820020747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
106 "tcId" : 13
107 },
108 {
109 "comment" : "BER:indefinite length",
110 "message" : "48656c6c6f",
111 "result" : "acceptable",
112 "sig" : "3080022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000",
113 "tcId" : 14
114 },
115 {
116 "comment" : "BER:prepending 0's to integer",
117 "message" : "48656c6c6f",
118 "result" : "acceptable",
119 "sig" : "30470223000000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
120 "tcId" : 15
121 },
122 {
123 "comment" : "BER:prepending 0's to integer",
124 "message" : "48656c6c6f",
125 "result" : "acceptable",
126 "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02220000747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
127 "tcId" : 16
128 },
129 {
130 "comment" : "wrong length",
131 "message" : "48656c6c6f",
132 "result" : "invalid",
133 "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
134 "tcId" : 17
135 },
136 {
137 "comment" : "wrong length",
138 "message" : "48656c6c6f",
139 "result" : "invalid",
140 "sig" : "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
141 "tcId" : 18
142 },
143 {
144 "comment" : "wrong length",
145 "message" : "48656c6c6f",
146 "result" : "invalid",
147 "sig" : "3045022200b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
148 "tcId" : 19
149 },
150 {
151 "comment" : "wrong length",
152 "message" : "48656c6c6f",
153 "result" : "invalid",
154 "sig" : "3045022000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
155 "tcId" : 20
156 },
157 {
158 "comment" : "wrong length",
159 "message" : "48656c6c6f",
160 "result" : "invalid",
161 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
162 "tcId" : 21
163 },
164 {
165 "comment" : "wrong length",
166 "message" : "48656c6c6f",
167 "result" : "invalid",
168 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f021f747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
169 "tcId" : 22
170 },
171 {
172 "comment" : "uint32 overflow in length",
173 "message" : "48656c6c6f",
174 "result" : "invalid",
175 "sig" : "30850100000045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
176 "tcId" : 23
177 },
178 {
179 "comment" : "uint32 overflow in length",
180 "message" : "48656c6c6f",
181 "result" : "invalid",
182 "sig" : "304a0285010000002100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
183 "tcId" : 24
184 },
185 {
186 "comment" : "uint32 overflow in length",
187 "message" : "48656c6c6f",
188 "result" : "invalid",
189 "sig" : "304a022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02850100000020747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
190 "tcId" : 25
191 },
192 {
193 "comment" : "uint64 overflow in length",
194 "message" : "48656c6c6f",
195 "result" : "invalid",
196 "sig" : "3089010000000000000045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
197 "tcId" : 26
198 },
199 {
200 "comment" : "uint64 overflow in length",
201 "message" : "48656c6c6f",
202 "result" : "invalid",
203 "sig" : "304e028901000000000000002100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
204 "tcId" : 27
205 },
206 {
207 "comment" : "uint64 overflow in length",
208 "message" : "48656c6c6f",
209 "result" : "invalid",
210 "sig" : "304e022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0289010000000000000020747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
211 "tcId" : 28
212 },
213 {
214 "comment" : "length = 2**31 - 1",
215 "message" : "48656c6c6f",
216 "result" : "invalid",
217 "sig" : "30847fffffff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
218 "tcId" : 29
219 },
220 {
221 "comment" : "length = 2**31 - 1",
222 "message" : "48656c6c6f",
223 "result" : "invalid",
224 "sig" : "304902847fffffff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
225 "tcId" : 30
226 },
227 {
228 "comment" : "length = 2**31 - 1",
229 "message" : "48656c6c6f",
230 "result" : "invalid",
231 "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02847fffffff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
232 "tcId" : 31
233 },
234 {
235 "comment" : "length = 2**32 - 1",
236 "message" : "48656c6c6f",
237 "result" : "invalid",
238 "sig" : "3084ffffffff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
239 "tcId" : 32
240 },
241 {
242 "comment" : "length = 2**32 - 1",
243 "message" : "48656c6c6f",
244 "result" : "invalid",
245 "sig" : "30490284ffffffff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
246 "tcId" : 33
247 },
248 {
249 "comment" : "length = 2**32 - 1",
250 "message" : "48656c6c6f",
251 "result" : "invalid",
252 "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0284ffffffff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
253 "tcId" : 34
254 },
255 {
256 "comment" : "length = 2**40 - 1",
257 "message" : "48656c6c6f",
258 "result" : "invalid",
259 "sig" : "3085ffffffffff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
260 "tcId" : 35
261 },
262 {
263 "comment" : "length = 2**40 - 1",
264 "message" : "48656c6c6f",
265 "result" : "invalid",
266 "sig" : "304a0285ffffffffff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
267 "tcId" : 36
268 },
269 {
270 "comment" : "length = 2**40 - 1",
271 "message" : "48656c6c6f",
272 "result" : "invalid",
273 "sig" : "304a022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0285ffffffffff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
274 "tcId" : 37
275 },
276 {
277 "comment" : "length = 2**64 - 1",
278 "message" : "48656c6c6f",
279 "result" : "invalid",
280 "sig" : "3088ffffffffffffffff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
281 "tcId" : 38
282 },
283 {
284 "comment" : "length = 2**64 - 1",
285 "message" : "48656c6c6f",
286 "result" : "invalid",
287 "sig" : "304d0288ffffffffffffffff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
288 "tcId" : 39
289 },
290 {
291 "comment" : "length = 2**64 - 1",
292 "message" : "48656c6c6f",
293 "result" : "invalid",
294 "sig" : "304d022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0288ffffffffffffffff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
295 "tcId" : 40
296 },
297 {
298 "comment" : "incorrect length",
299 "message" : "48656c6c6f",
300 "result" : "invalid",
301 "sig" : "30ff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
302 "tcId" : 41
303 },
304 {
305 "comment" : "incorrect length",
306 "message" : "48656c6c6f",
307 "result" : "invalid",
308 "sig" : "304502ff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
309 "tcId" : 42
310 },
311 {
312 "comment" : "incorrect length",
313 "message" : "48656c6c6f",
314 "result" : "invalid",
315 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02ff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
316 "tcId" : 43
317 },
318 {
319 "comment" : "indefinte length without termination",
320 "message" : "48656c6c6f",
321 "result" : "invalid",
322 "sig" : "3080022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
323 "tcId" : 44
324 },
325 {
326 "comment" : "indefinte length without termination",
327 "message" : "48656c6c6f",
328 "result" : "invalid",
329 "sig" : "3045028000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
330 "tcId" : 45
331 },
332 {
333 "comment" : "indefinte length without termination",
334 "message" : "48656c6c6f",
335 "result" : "invalid",
336 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0280747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
337 "tcId" : 46
338 },
339 {
340 "comment" : "removing sequence",
341 "message" : "48656c6c6f",
342 "result" : "invalid",
343 "sig" : "",
344 "tcId" : 47
345 },
346 {
347 "comment" : "appending 0's to sequence",
348 "message" : "48656c6c6f",
349 "result" : "invalid",
350 "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000",
351 "tcId" : 48
352 },
353 {
354 "comment" : "prepending 0's to sequence",
355 "message" : "48656c6c6f",
356 "result" : "invalid",
357 "sig" : "30470000022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
358 "tcId" : 49
359 },
360 {
361 "comment" : "appending unused 0's",
362 "message" : "48656c6c6f",
363 "result" : "invalid",
364 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000",
365 "tcId" : 50
366 },
367 {
368 "comment" : "appending unused 0's",
369 "message" : "48656c6c6f",
370 "result" : "invalid",
371 "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f00000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
372 "tcId" : 51
373 },
374 {
375 "comment" : "appending null value",
376 "message" : "48656c6c6f",
377 "result" : "invalid",
378 "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0500",
379 "tcId" : 52
380 },
381 {
382 "comment" : "appending null value",
383 "message" : "48656c6c6f",
384 "result" : "invalid",
385 "sig" : "3047022300b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f05000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
386 "tcId" : 53
387 },
388 {
389 "comment" : "appending null value",
390 "message" : "48656c6c6f",
391 "result" : "invalid",
392 "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0222747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0500",
393 "tcId" : 54
394 },
395 {
396 "comment" : "including garbage",
397 "message" : "48656c6c6f",
398 "result" : "invalid",
399 "sig" : "304a4981773045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
400 "tcId" : 55
401 },
402 {
403 "comment" : "including garbage",
404 "message" : "48656c6c6f",
405 "result" : "invalid",
406 "sig" : "304925003045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
407 "tcId" : 56
408 },
409 {
410 "comment" : "including garbage",
411 "message" : "48656c6c6f",
412 "result" : "invalid",
413 "sig" : "30473045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0004deadbeef",
414 "tcId" : 57
415 },
416 {
417 "comment" : "including garbage",
418 "message" : "48656c6c6f",
419 "result" : "invalid",
420 "sig" : "304a2226498177022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
421 "tcId" : 58
422 },
423 {
424 "comment" : "including garbage",
425 "message" : "48656c6c6f",
426 "result" : "invalid",
427 "sig" : "304922252500022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
428 "tcId" : 59
429 },
430 {
431 "comment" : "including garbage",
432 "message" : "48656c6c6f",
433 "result" : "invalid",
434 "sig" : "304d2223022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0004deadbeef0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
435 "tcId" : 60
436 },
437 {
438 "comment" : "including garbage",
439 "message" : "48656c6c6f",
440 "result" : "invalid",
441 "sig" : "304a022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f22254981770220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
442 "tcId" : 61
443 },
444 {
445 "comment" : "including garbage",
446 "message" : "48656c6c6f",
447 "result" : "invalid",
448 "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f222425000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
449 "tcId" : 62
450 },
451 {
452 "comment" : "including garbage",
453 "message" : "48656c6c6f",
454 "result" : "invalid",
455 "sig" : "304d022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f22220220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0004deadbeef",
456 "tcId" : 63
457 },
458 {
459 "comment" : "including undefined tags",
460 "message" : "48656c6c6f",
461 "result" : "invalid",
462 "sig" : "304daa00bb00cd003045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
463 "tcId" : 64
464 },
465 {
466 "comment" : "including undefined tags",
467 "message" : "48656c6c6f",
468 "result" : "invalid",
469 "sig" : "304baa02aabb3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
470 "tcId" : 65
471 },
472 {
473 "comment" : "including undefined tags",
474 "message" : "48656c6c6f",
475 "result" : "invalid",
476 "sig" : "304d2229aa00bb00cd00022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
477 "tcId" : 66
478 },
479 {
480 "comment" : "including undefined tags",
481 "message" : "48656c6c6f",
482 "result" : "invalid",
483 "sig" : "304b2227aa02aabb022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
484 "tcId" : 67
485 },
486 {
487 "comment" : "including undefined tags",
488 "message" : "48656c6c6f",
489 "result" : "invalid",
490 "sig" : "304d022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f2228aa00bb00cd000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
491 "tcId" : 68
492 },
493 {
494 "comment" : "including undefined tags",
495 "message" : "48656c6c6f",
496 "result" : "invalid",
497 "sig" : "304b022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f2226aa02aabb0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
498 "tcId" : 69
499 },
500 {
501 "comment" : "using composition with indefinite length",
502 "message" : "48656c6c6f",
503 "result" : "invalid",
504 "sig" : "30803045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000",
505 "tcId" : 70
506 },
507 {
508 "comment" : "using composition with indefinite length",
509 "message" : "48656c6c6f",
510 "result" : "invalid",
511 "sig" : "30492280022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f00000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
512 "tcId" : 71
513 },
514 {
515 "comment" : "using composition with indefinite length",
516 "message" : "48656c6c6f",
517 "result" : "invalid",
518 "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f22800220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000",
519 "tcId" : 72
520 },
521 {
522 "comment" : "using composition with wrong tag",
523 "message" : "48656c6c6f",
524 "result" : "invalid",
525 "sig" : "30803145022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000",
526 "tcId" : 73
527 },
528 {
529 "comment" : "using composition with wrong tag",
530 "message" : "48656c6c6f",
531 "result" : "invalid",
532 "sig" : "30492280032100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f00000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
533 "tcId" : 74
534 },
535 {
536 "comment" : "using composition with wrong tag",
537 "message" : "48656c6c6f",
538 "result" : "invalid",
539 "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f22800320747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000",
540 "tcId" : 75
541 },
542 {
543 "comment" : "changing tag value",
544 "message" : "48656c6c6f",
545 "result" : "invalid",
546 "sig" : "2e45022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
547 "tcId" : 76
548 },
549 {
550 "comment" : "changing tag value",
551 "message" : "48656c6c6f",
552 "result" : "invalid",
553 "sig" : "3245022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
554 "tcId" : 77
555 },
556 {
557 "comment" : "changing tag value",
558 "message" : "48656c6c6f",
559 "result" : "invalid",
560 "sig" : "ff45022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
561 "tcId" : 78
562 },
563 {
564 "comment" : "changing tag value",
565 "message" : "48656c6c6f",
566 "result" : "invalid",
567 "sig" : "3045002100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
568 "tcId" : 79
569 },
570 {
571 "comment" : "changing tag value",
572 "message" : "48656c6c6f",
573 "result" : "invalid",
574 "sig" : "3045042100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
575 "tcId" : 80
576 },
577 {
578 "comment" : "changing tag value",
579 "message" : "48656c6c6f",
580 "result" : "invalid",
581 "sig" : "3045ff2100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
582 "tcId" : 81
583 },
584 {
585 "comment" : "changing tag value",
586 "message" : "48656c6c6f",
587 "result" : "invalid",
588 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0020747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
589 "tcId" : 82
590 },
591 {
592 "comment" : "changing tag value",
593 "message" : "48656c6c6f",
594 "result" : "invalid",
595 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0420747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
596 "tcId" : 83
597 },
598 {
599 "comment" : "changing tag value",
600 "message" : "48656c6c6f",
601 "result" : "invalid",
602 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3fff20747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
603 "tcId" : 84
604 },
605 {
606 "comment" : "dropping value of sequence",
607 "message" : "48656c6c6f",
608 "result" : "invalid",
609 "sig" : "3000",
610 "tcId" : 85
611 },
612 {
613 "comment" : "using composition",
614 "message" : "48656c6c6f",
615 "result" : "invalid",
616 "sig" : "304930010230442100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
617 "tcId" : 86
618 },
619 {
620 "comment" : "using composition",
621 "message" : "48656c6c6f",
622 "result" : "invalid",
623 "sig" : "304922250201000220b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
624 "tcId" : 87
625 },
626 {
627 "comment" : "using composition",
628 "message" : "48656c6c6f",
629 "result" : "invalid",
630 "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f2224020174021f7291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
631 "tcId" : 88
632 },
633 {
634 "comment" : "truncate sequence",
635 "message" : "48656c6c6f",
636 "result" : "invalid",
637 "sig" : "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ec",
638 "tcId" : 89
639 },
640 {
641 "comment" : "truncate sequence",
642 "message" : "48656c6c6f",
643 "result" : "invalid",
644 "sig" : "30442100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
645 "tcId" : 90
646 },
647 {
648 "comment" : "prepend empty sequence",
649 "message" : "48656c6c6f",
650 "result" : "invalid",
651 "sig" : "30473000022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
652 "tcId" : 91
653 },
654 {
655 "comment" : "append empty sequence",
656 "message" : "48656c6c6f",
657 "result" : "invalid",
658 "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce3000",
659 "tcId" : 92
660 },
661 {
662 "comment" : "sequence of sequence",
663 "message" : "48656c6c6f",
664 "result" : "invalid",
665 "sig" : "30473045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
666 "tcId" : 93
667 },
668 {
669 "comment" : "truncated sequence",
670 "message" : "48656c6c6f",
671 "result" : "invalid",
672 "sig" : "3023022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f",
673 "tcId" : 94
674 },
675 {
676 "comment" : "repeat element in sequence",
677 "message" : "48656c6c6f",
678 "result" : "invalid",
679 "sig" : "3067022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
680 "tcId" : 95
681 },
682 {
683 "comment" : "removing integer",
684 "message" : "48656c6c6f",
685 "result" : "invalid",
686 "sig" : "30220220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
687 "tcId" : 96
688 },
689 {
690 "comment" : "appending 0's to integer",
691 "message" : "48656c6c6f",
692 "result" : "invalid",
693 "sig" : "3047022300b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f00000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
694 "tcId" : 97
695 },
696 {
697 "comment" : "appending 0's to integer",
698 "message" : "48656c6c6f",
699 "result" : "invalid",
700 "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0222747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000",
701 "tcId" : 98
702 },
703 {
704 "comment" : "dropping value of integer",
705 "message" : "48656c6c6f",
706 "result" : "invalid",
707 "sig" : "302402000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
708 "tcId" : 99
709 },
710 {
711 "comment" : "dropping value of integer",
712 "message" : "48656c6c6f",
713 "result" : "invalid",
714 "sig" : "3025022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0200",
715 "tcId" : 100
716 },
717 {
718 "comment" : "modify first byte of integer",
719 "message" : "48656c6c6f",
720 "result" : "invalid",
721 "sig" : "3045022101b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
722 "tcId" : 101
723 },
724 {
725 "comment" : "modify first byte of integer",
726 "message" : "48656c6c6f",
727 "result" : "invalid",
728 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220757291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
729 "tcId" : 102
730 },
731 {
732 "comment" : "modify last byte of integer",
733 "message" : "48656c6c6f",
734 "result" : "invalid",
735 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3e0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
736 "tcId" : 103
737 },
738 {
739 "comment" : "modify last byte of integer",
740 "message" : "48656c6c6f",
741 "result" : "invalid",
742 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260eccf",
743 "tcId" : 104
744 },
745 {
746 "comment" : "truncate integer",
747 "message" : "48656c6c6f",
748 "result" : "invalid",
749 "sig" : "3044022000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
750 "tcId" : 105
751 },
752 {
753 "comment" : "truncate integer",
754 "message" : "48656c6c6f",
755 "result" : "invalid",
756 "sig" : "30440220b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
757 "tcId" : 106
758 },
759 {
760 "comment" : "truncate integer",
761 "message" : "48656c6c6f",
762 "result" : "invalid",
763 "sig" : "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f021f747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ec",
764 "tcId" : 107
765 },
766 {
767 "comment" : "truncate integer",
768 "message" : "48656c6c6f",
769 "result" : "invalid",
770 "sig" : "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f021f7291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
771 "tcId" : 108
772 },
773 {
774 "comment" : "leading ff in integer",
775 "message" : "48656c6c6f",
776 "result" : "invalid",
777 "sig" : "30460222ff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
778 "tcId" : 109
779 },
780 {
781 "comment" : "leading ff in integer",
782 "message" : "48656c6c6f",
783 "result" : "invalid",
784 "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221ff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
785 "tcId" : 110
786 },
787 {
788 "comment" : "infinity",
789 "message" : "48656c6c6f",
790 "result" : "invalid",
791 "sig" : "30250901800220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
792 "tcId" : 111
793 },
794 {
795 "comment" : "infinity",
796 "message" : "48656c6c6f",
797 "result" : "invalid",
798 "sig" : "3026022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f090180",
799 "tcId" : 112
800 },
801 {
802 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
803 "message" : "48656c6c6f",
804 "result" : "invalid",
805 "sig" : "3045022101b7babae8332b54b9a3a05b7004579821656e9c5fbb7d96607df713de366051900220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
806 "tcId" : 113
807 },
808 {
809 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
810 "message" : "48656c6c6f",
811 "result" : "invalid",
812 "sig" : "30440220b7babaea332b54b7a3a05b7004579821eba0a7046d4e595696837e583d9a06ee0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
813 "tcId" : 114
814 },
815 {
816 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
817 "message" : "48656c6c6f",
818 "result" : "invalid",
819 "sig" : "30450221ff48454516ccd4ab475c5fa48ffba867de57785e4deb9a082475c2b6e4c602d3c10220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
820 "tcId" : 115
821 },
822 {
823 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
824 "message" : "48656c6c6f",
825 "result" : "invalid",
826 "sig" : "3044022048454515ccd4ab485c5fa48ffba867de145f58fb92b1a6a9697c81a7c265f9120220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
827 "tcId" : 116
828 },
829 {
830 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
831 "message" : "48656c6c6f",
832 "result" : "invalid",
833 "sig" : "30450221fe48454517ccd4ab465c5fa48ffba867de9a9163a04482699f8208ec21c99fae700220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
834 "tcId" : 117
835 },
836 {
837 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
838 "message" : "48656c6c6f",
839 "result" : "invalid",
840 "sig" : "3044022048454516ccd4ab475c5fa48ffba867de57785e4deb9a082475c2b6e4c602d3c10220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
841 "tcId" : 118
842 },
843 {
844 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
845 "message" : "48656c6c6f",
846 "result" : "invalid",
847 "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f022101747291dc2f3f44b07ace68ea33431d6f51cb136eadbe85e7798724b72ec4121f",
848 "tcId" : 119
849 },
850 {
851 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
852 "message" : "48656c6c6f",
853 "result" : "invalid",
854 "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221ff747291de2f3f44ae7ace68ea33431d6fd7fd1e135f8f48dd92138f3135fdc77d",
855 "tcId" : 120
856 },
857 {
858 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
859 "message" : "48656c6c6f",
860 "result" : "invalid",
861 "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02208b8d6e22d0c0bb5085319715ccbce2906b1be73ef959189d7a32a60bcd9f1332",
862 "tcId" : 121
863 },
864 {
865 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
866 "message" : "48656c6c6f",
867 "result" : "invalid",
868 "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221fe8b8d6e23d0c0bb4f85319715ccbce290ae34ec9152417a188678db48d13bede1",
869 "tcId" : 122
870 },
871 {
872 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
873 "message" : "48656c6c6f",
874 "result" : "invalid",
875 "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f022101747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
876 "tcId" : 123
877 },
878 {
879 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
880 "message" : "48656c6c6f",
881 "result" : "invalid",
882 "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221008b8d6e22d0c0bb5085319715ccbce2906b1be73ef959189d7a32a60bcd9f1332",
883 "tcId" : 124
884 },
885 {
886 "comment" : "Signatures with special case values for r and s.",
887 "message" : "48656c6c6f",
888 "result" : "invalid",
889 "sig" : "3006020100020100",
890 "tcId" : 125
891 },
892 {
893 "comment" : "Signatures with special case values for r and s.",
894 "message" : "48656c6c6f",
895 "result" : "invalid",
896 "sig" : "3006020100020101",
897 "tcId" : 126
898 },
899 {
900 "comment" : "Signatures with special case values for r and s.",
901 "message" : "48656c6c6f",
902 "result" : "invalid",
903 "sig" : "30060201000201f0",
904 "tcId" : 127
905 },
906 {
907 "comment" : "Signatures with special case values for r and s.",
908 "message" : "48656c6c6f",
909 "result" : "invalid",
910 "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
911 "tcId" : 128
912 },
913 {
914 "comment" : "Signatures with special case values for r and s.",
915 "message" : "48656c6c6f",
916 "result" : "invalid",
917 "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
918 "tcId" : 129
919 },
920 {
921 "comment" : "Signatures with special case values for r and s.",
922 "message" : "48656c6c6f",
923 "result" : "invalid",
924 "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
925 "tcId" : 130
926 },
927 {
928 "comment" : "Signatures with special case values for r and s.",
929 "message" : "48656c6c6f",
930 "result" : "invalid",
931 "sig" : "3026020100022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
932 "tcId" : 131
933 },
934 {
935 "comment" : "Signatures with special case values for r and s.",
936 "message" : "48656c6c6f",
937 "result" : "invalid",
938 "sig" : "3026020100022100ffffffff00000001000000000000000000000001000000000000000000000000",
939 "tcId" : 132
940 },
941 {
942 "comment" : "Signatures with special case values for r and s.",
943 "message" : "48656c6c6f",
944 "result" : "invalid",
945 "sig" : "3008020100090380fe01",
946 "tcId" : 133
947 },
948 {
949 "comment" : "Signatures with special case values for r and s.",
950 "message" : "48656c6c6f",
951 "result" : "invalid",
952 "sig" : "3006020101020100",
953 "tcId" : 134
954 },
955 {
956 "comment" : "Signatures with special case values for r and s.",
957 "message" : "48656c6c6f",
958 "result" : "invalid",
959 "sig" : "3006020101020101",
960 "tcId" : 135
961 },
962 {
963 "comment" : "Signatures with special case values for r and s.",
964 "message" : "48656c6c6f",
965 "result" : "invalid",
966 "sig" : "30060201010201f0",
967 "tcId" : 136
968 },
969 {
970 "comment" : "Signatures with special case values for r and s.",
971 "message" : "48656c6c6f",
972 "result" : "invalid",
973 "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
974 "tcId" : 137
975 },
976 {
977 "comment" : "Signatures with special case values for r and s.",
978 "message" : "48656c6c6f",
979 "result" : "invalid",
980 "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
981 "tcId" : 138
982 },
983 {
984 "comment" : "Signatures with special case values for r and s.",
985 "message" : "48656c6c6f",
986 "result" : "invalid",
987 "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
988 "tcId" : 139
989 },
990 {
991 "comment" : "Signatures with special case values for r and s.",
992 "message" : "48656c6c6f",
993 "result" : "invalid",
994 "sig" : "3026020101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
995 "tcId" : 140
996 },
997 {
998 "comment" : "Signatures with special case values for r and s.",
999 "message" : "48656c6c6f",
1000 "result" : "invalid",
1001 "sig" : "3026020101022100ffffffff00000001000000000000000000000001000000000000000000000000",
1002 "tcId" : 141
1003 },
1004 {
1005 "comment" : "Signatures with special case values for r and s.",
1006 "message" : "48656c6c6f",
1007 "result" : "invalid",
1008 "sig" : "3008020101090380fe01",
1009 "tcId" : 142
1010 },
1011 {
1012 "comment" : "Signatures with special case values for r and s.",
1013 "message" : "48656c6c6f",
1014 "result" : "invalid",
1015 "sig" : "30060201f0020100",
1016 "tcId" : 143
1017 },
1018 {
1019 "comment" : "Signatures with special case values for r and s.",
1020 "message" : "48656c6c6f",
1021 "result" : "invalid",
1022 "sig" : "30060201f0020101",
1023 "tcId" : 144
1024 },
1025 {
1026 "comment" : "Signatures with special case values for r and s.",
1027 "message" : "48656c6c6f",
1028 "result" : "invalid",
1029 "sig" : "30060201f00201f0",
1030 "tcId" : 145
1031 },
1032 {
1033 "comment" : "Signatures with special case values for r and s.",
1034 "message" : "48656c6c6f",
1035 "result" : "invalid",
1036 "sig" : "30260201f0022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
1037 "tcId" : 146
1038 },
1039 {
1040 "comment" : "Signatures with special case values for r and s.",
1041 "message" : "48656c6c6f",
1042 "result" : "invalid",
1043 "sig" : "30260201f0022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
1044 "tcId" : 147
1045 },
1046 {
1047 "comment" : "Signatures with special case values for r and s.",
1048 "message" : "48656c6c6f",
1049 "result" : "invalid",
1050 "sig" : "30260201f0022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
1051 "tcId" : 148
1052 },
1053 {
1054 "comment" : "Signatures with special case values for r and s.",
1055 "message" : "48656c6c6f",
1056 "result" : "invalid",
1057 "sig" : "30260201f0022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
1058 "tcId" : 149
1059 },
1060 {
1061 "comment" : "Signatures with special case values for r and s.",
1062 "message" : "48656c6c6f",
1063 "result" : "invalid",
1064 "sig" : "30260201f0022100ffffffff00000001000000000000000000000001000000000000000000000000",
1065 "tcId" : 150
1066 },
1067 {
1068 "comment" : "Signatures with special case values for r and s.",
1069 "message" : "48656c6c6f",
1070 "result" : "invalid",
1071 "sig" : "30080201f0090380fe01",
1072 "tcId" : 151
1073 },
1074 {
1075 "comment" : "Signatures with special case values for r and s.",
1076 "message" : "48656c6c6f",
1077 "result" : "invalid",
1078 "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100",
1079 "tcId" : 152
1080 },
1081 {
1082 "comment" : "Signatures with special case values for r and s.",
1083 "message" : "48656c6c6f",
1084 "result" : "invalid",
1085 "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101",
1086 "tcId" : 153
1087 },
1088 {
1089 "comment" : "Signatures with special case values for r and s.",
1090 "message" : "48656c6c6f",
1091 "result" : "invalid",
1092 "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201f0",
1093 "tcId" : 154
1094 },
1095 {
1096 "comment" : "Signatures with special case values for r and s.",
1097 "message" : "48656c6c6f",
1098 "result" : "invalid",
1099 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
1100 "tcId" : 155
1101 },
1102 {
1103 "comment" : "Signatures with special case values for r and s.",
1104 "message" : "48656c6c6f",
1105 "result" : "invalid",
1106 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
1107 "tcId" : 156
1108 },
1109 {
1110 "comment" : "Signatures with special case values for r and s.",
1111 "message" : "48656c6c6f",
1112 "result" : "invalid",
1113 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
1114 "tcId" : 157
1115 },
1116 {
1117 "comment" : "Signatures with special case values for r and s.",
1118 "message" : "48656c6c6f",
1119 "result" : "invalid",
1120 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
1121 "tcId" : 158
1122 },
1123 {
1124 "comment" : "Signatures with special case values for r and s.",
1125 "message" : "48656c6c6f",
1126 "result" : "invalid",
1127 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000001000000000000000000000000",
1128 "tcId" : 159
1129 },
1130 {
1131 "comment" : "Signatures with special case values for r and s.",
1132 "message" : "48656c6c6f",
1133 "result" : "invalid",
1134 "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551090380fe01",
1135 "tcId" : 160
1136 },
1137 {
1138 "comment" : "Signatures with special case values for r and s.",
1139 "message" : "48656c6c6f",
1140 "result" : "invalid",
1141 "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020100",
1142 "tcId" : 161
1143 },
1144 {
1145 "comment" : "Signatures with special case values for r and s.",
1146 "message" : "48656c6c6f",
1147 "result" : "invalid",
1148 "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020101",
1149 "tcId" : 162
1150 },
1151 {
1152 "comment" : "Signatures with special case values for r and s.",
1153 "message" : "48656c6c6f",
1154 "result" : "invalid",
1155 "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500201f0",
1156 "tcId" : 163
1157 },
1158 {
1159 "comment" : "Signatures with special case values for r and s.",
1160 "message" : "48656c6c6f",
1161 "result" : "invalid",
1162 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
1163 "tcId" : 164
1164 },
1165 {
1166 "comment" : "Signatures with special case values for r and s.",
1167 "message" : "48656c6c6f",
1168 "result" : "invalid",
1169 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
1170 "tcId" : 165
1171 },
1172 {
1173 "comment" : "Signatures with special case values for r and s.",
1174 "message" : "48656c6c6f",
1175 "result" : "invalid",
1176 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
1177 "tcId" : 166
1178 },
1179 {
1180 "comment" : "Signatures with special case values for r and s.",
1181 "message" : "48656c6c6f",
1182 "result" : "invalid",
1183 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
1184 "tcId" : 167
1185 },
1186 {
1187 "comment" : "Signatures with special case values for r and s.",
1188 "message" : "48656c6c6f",
1189 "result" : "invalid",
1190 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000001000000000000000000000000",
1191 "tcId" : 168
1192 },
1193 {
1194 "comment" : "Signatures with special case values for r and s.",
1195 "message" : "48656c6c6f",
1196 "result" : "invalid",
1197 "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550090380fe01",
1198 "tcId" : 169
1199 },
1200 {
1201 "comment" : "Signatures with special case values for r and s.",
1202 "message" : "48656c6c6f",
1203 "result" : "invalid",
1204 "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020100",
1205 "tcId" : 170
1206 },
1207 {
1208 "comment" : "Signatures with special case values for r and s.",
1209 "message" : "48656c6c6f",
1210 "result" : "invalid",
1211 "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020101",
1212 "tcId" : 171
1213 },
1214 {
1215 "comment" : "Signatures with special case values for r and s.",
1216 "message" : "48656c6c6f",
1217 "result" : "invalid",
1218 "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520201f0",
1219 "tcId" : 172
1220 },
1221 {
1222 "comment" : "Signatures with special case values for r and s.",
1223 "message" : "48656c6c6f",
1224 "result" : "invalid",
1225 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
1226 "tcId" : 173
1227 },
1228 {
1229 "comment" : "Signatures with special case values for r and s.",
1230 "message" : "48656c6c6f",
1231 "result" : "invalid",
1232 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
1233 "tcId" : 174
1234 },
1235 {
1236 "comment" : "Signatures with special case values for r and s.",
1237 "message" : "48656c6c6f",
1238 "result" : "invalid",
1239 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
1240 "tcId" : 175
1241 },
1242 {
1243 "comment" : "Signatures with special case values for r and s.",
1244 "message" : "48656c6c6f",
1245 "result" : "invalid",
1246 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
1247 "tcId" : 176
1248 },
1249 {
1250 "comment" : "Signatures with special case values for r and s.",
1251 "message" : "48656c6c6f",
1252 "result" : "invalid",
1253 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000001000000000000000000000000",
1254 "tcId" : 177
1255 },
1256 {
1257 "comment" : "Signatures with special case values for r and s.",
1258 "message" : "48656c6c6f",
1259 "result" : "invalid",
1260 "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552090380fe01",
1261 "tcId" : 178
1262 },
1263 {
1264 "comment" : "Signatures with special case values for r and s.",
1265 "message" : "48656c6c6f",
1266 "result" : "invalid",
1267 "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020100",
1268 "tcId" : 179
1269 },
1270 {
1271 "comment" : "Signatures with special case values for r and s.",
1272 "message" : "48656c6c6f",
1273 "result" : "invalid",
1274 "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020101",
1275 "tcId" : 180
1276 },
1277 {
1278 "comment" : "Signatures with special case values for r and s.",
1279 "message" : "48656c6c6f",
1280 "result" : "invalid",
1281 "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0201f0",
1282 "tcId" : 181
1283 },
1284 {
1285 "comment" : "Signatures with special case values for r and s.",
1286 "message" : "48656c6c6f",
1287 "result" : "invalid",
1288 "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
1289 "tcId" : 182
1290 },
1291 {
1292 "comment" : "Signatures with special case values for r and s.",
1293 "message" : "48656c6c6f",
1294 "result" : "invalid",
1295 "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
1296 "tcId" : 183
1297 },
1298 {
1299 "comment" : "Signatures with special case values for r and s.",
1300 "message" : "48656c6c6f",
1301 "result" : "invalid",
1302 "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
1303 "tcId" : 184
1304 },
1305 {
1306 "comment" : "Signatures with special case values for r and s.",
1307 "message" : "48656c6c6f",
1308 "result" : "invalid",
1309 "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
1310 "tcId" : 185
1311 },
1312 {
1313 "comment" : "Signatures with special case values for r and s.",
1314 "message" : "48656c6c6f",
1315 "result" : "invalid",
1316 "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000001000000000000000000000000",
1317 "tcId" : 186
1318 },
1319 {
1320 "comment" : "Signatures with special case values for r and s.",
1321 "message" : "48656c6c6f",
1322 "result" : "invalid",
1323 "sig" : "3028022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff090380fe01",
1324 "tcId" : 187
1325 },
1326 {
1327 "comment" : "Signatures with special case values for r and s.",
1328 "message" : "48656c6c6f",
1329 "result" : "invalid",
1330 "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020100",
1331 "tcId" : 188
1332 },
1333 {
1334 "comment" : "Signatures with special case values for r and s.",
1335 "message" : "48656c6c6f",
1336 "result" : "invalid",
1337 "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020101",
1338 "tcId" : 189
1339 },
1340 {
1341 "comment" : "Signatures with special case values for r and s.",
1342 "message" : "48656c6c6f",
1343 "result" : "invalid",
1344 "sig" : "3026022100ffffffff000000010000000000000000000000010000000000000000000000000201f0",
1345 "tcId" : 190
1346 },
1347 {
1348 "comment" : "Signatures with special case values for r and s.",
1349 "message" : "48656c6c6f",
1350 "result" : "invalid",
1351 "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
1352 "tcId" : 191
1353 },
1354 {
1355 "comment" : "Signatures with special case values for r and s.",
1356 "message" : "48656c6c6f",
1357 "result" : "invalid",
1358 "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
1359 "tcId" : 192
1360 },
1361 {
1362 "comment" : "Signatures with special case values for r and s.",
1363 "message" : "48656c6c6f",
1364 "result" : "invalid",
1365 "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
1366 "tcId" : 193
1367 },
1368 {
1369 "comment" : "Signatures with special case values for r and s.",
1370 "message" : "48656c6c6f",
1371 "result" : "invalid",
1372 "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
1373 "tcId" : 194
1374 },
1375 {
1376 "comment" : "Signatures with special case values for r and s.",
1377 "message" : "48656c6c6f",
1378 "result" : "invalid",
1379 "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000001000000000000000000000000",
1380 "tcId" : 195
1381 },
1382 {
1383 "comment" : "Signatures with special case values for r and s.",
1384 "message" : "48656c6c6f",
1385 "result" : "invalid",
1386 "sig" : "3028022100ffffffff00000001000000000000000000000001000000000000000000000000090380fe01",
1387 "tcId" : 196
1388 }
1389 ]
1390 },
1391 {
1392 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926",
1393 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1wXRb4CYfi2bGmlX0pziL+v30Q+l\nFRUxgkFcg2G6rKSx/BBe5c6A1RTsEji+riA3pvg2JVk2INRggZ6GghYJJg==\n-----END PUBLIC KEY-----",
1394 "sha" : "SHA-256",
1395 "type" : "ECDSAVer",
1396 "key" : {
1397 "curve" : "secp256r1",
1398 "type" : "ECPublicKey",
1399 "wx" : "0d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4",
1400 "wy" : "0b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926"
1401 },
1402 "tests" : [
1403 {
1404 "comment" : "k*G has a large x-coordinate",
1405 "message" : "54657374",
1406 "result" : "valid",
1407 "sig" : "303502104319055358e8617b0c46353d039cdaab022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e",
1408 "tcId" : 197
1409 }
1410 ]
1411 },
1412 {
1413 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926",
1414 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1wXRb4CYfi2bGmlX0pziL+v30Q+l\nFRUxgkFcg2G6rKSx/BBe5c6A1RTsEji+riA3pvg2JVk2INRggZ6GghYJJg==\n-----END PUBLIC KEY-----",
1415 "sha" : "SHA-256",
1416 "type" : "ECDSAVer",
1417 "key" : {
1418 "curve" : "secp256r1",
1419 "type" : "ECPublicKey",
1420 "wx" : "0d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4",
1421 "wy" : "0b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926"
1422 },
1423 "tests" : [
1424 {
1425 "comment" : "r too large",
1426 "message" : "54657374",
1427 "result" : "invalid",
1428 "sig" : "3046022100ffffffff00000001000000000000000000000000fffffffffffffffffffffffc022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e",
1429 "tcId" : 198
1430 }
1431 ]
1432 },
1433 {
1434 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d",
1435 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPNjS+B1pU7CETAnXtWDVJ80u9nBW\niT6tr6UshQE4fVnuQf200QQCznoMXjt0et+jpJC2Kmt3GQaJA0hcC7bcLQ==\n-----END PUBLIC KEY-----",
1436 "sha" : "SHA-256",
1437 "type" : "ECDSAVer",
1438 "key" : {
1439 "curve" : "secp256r1",
1440 "type" : "ECPublicKey",
1441 "wx" : "3cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59",
1442 "wy" : "0ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d"
1443 },
1444 "tests" : [
1445 {
1446 "comment" : "r,s are large",
1447 "message" : "54657374",
1448 "result" : "valid",
1449 "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e",
1450 "tcId" : 199
1451 }
1452 ]
1453 },
1454 {
1455 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0",
1456 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----",
1457 "sha" : "SHA-256",
1458 "type" : "ECDSAVer",
1459 "key" : {
1460 "curve" : "secp256r1",
1461 "type" : "ECPublicKey",
1462 "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5",
1463 "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0"
1464 },
1465 "tests" : [
1466 {
1467 "comment" : "small r and s",
1468 "message" : "54657374",
1469 "result" : "valid",
1470 "sig" : "3006020105020101",
1471 "tcId" : 200
1472 }
1473 ]
1474 },
1475 {
1476 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0",
1477 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----",
1478 "sha" : "SHA-256",
1479 "type" : "ECDSAVer",
1480 "key" : {
1481 "curve" : "secp256r1",
1482 "type" : "ECPublicKey",
1483 "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5",
1484 "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0"
1485 },
1486 "tests" : [
1487 {
1488 "comment" : "r is larger than n",
1489 "message" : "54657374",
1490 "result" : "invalid",
1491 "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632556020101",
1492 "tcId" : 201
1493 }
1494 ]
1495 },
1496 {
1497 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0",
1498 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----",
1499 "sha" : "SHA-256",
1500 "type" : "ECDSAVer",
1501 "key" : {
1502 "curve" : "secp256r1",
1503 "type" : "ECPublicKey",
1504 "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5",
1505 "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0"
1506 },
1507 "tests" : [
1508 {
1509 "comment" : "s is larger than n",
1510 "message" : "54657374",
1511 "result" : "invalid",
1512 "sig" : "3026020105022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
1513 "tcId" : 202
1514 }
1515 ]
1516 },
1517 {
1518 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de04503434383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996",
1519 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAgNzb8sZixXY16DID2bd3RUlkkCq\neNCKrmfEZ94EUDQ0ODQ41QQeqaOH7o5NToS0RxsWDGvPJWiwcvjyDoeplg==\n-----END PUBLIC KEY-----",
1520 "sha" : "SHA-256",
1521 "type" : "ECDSAVer",
1522 "key" : {
1523 "curve" : "secp256r1",
1524 "type" : "ECPublicKey",
1525 "wx" : "203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de045034",
1526 "wy" : "34383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996"
1527 },
1528 "tests" : [
1529 {
1530 "comment" : "point at infinity during verify",
1531 "message" : "54657374",
1532 "result" : "invalid",
1533 "sig" : "304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a80220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70",
1534 "tcId" : 203
1535 }
1536 ]
1537 },
1538 {
1539 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6",
1540 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoX9bdaNe1kYjyly/H5GVEpLbDCPw\nwuokw9DK0JiMq8CDp6YYYlwiiUBzC0+j7mT67Lsvwg/d58WLOj9jAEJNxg==\n-----END PUBLIC KEY-----",
1541 "sha" : "SHA-256",
1542 "type" : "ECDSAVer",
1543 "key" : {
1544 "curve" : "secp256r1",
1545 "type" : "ECPublicKey",
1546 "wx" : "0a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc0",
1547 "wy" : "083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6"
1548 },
1549 "tests" : [
1550 {
1551 "comment" : "u1 == 1",
1552 "message" : "54657374",
1553 "result" : "valid",
1554 "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1555 "tcId" : 204
1556 }
1557 ]
1558 },
1559 {
1560 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c31f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62",
1561 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBLoMuikaN9sT8zv5DatijATsg5Og\nIAQZ6eqh68yftcMfOgoOaCOkm2Ja1XsSoy1AR5cPw0KPDwBJ7PQmXcEvYg==\n-----END PUBLIC KEY-----",
1562 "sha" : "SHA-256",
1563 "type" : "ECDSAVer",
1564 "key" : {
1565 "curve" : "secp256r1",
1566 "type" : "ECPublicKey",
1567 "wx" : "4ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c3",
1568 "wy" : "1f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62"
1569 },
1570 "tests" : [
1571 {
1572 "comment" : "u1 == n - 1",
1573 "message" : "54657374",
1574 "result" : "valid",
1575 "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c",
1576 "tcId" : 205
1577 }
1578 ]
1579 },
1580 {
1581 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900efa1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716",
1582 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaStsgo4P7tY9iuqitzIvnMvocjoe\n058inyBKQ0uJAO+h9varyzjqO4/eOLmMfCcfJ0r1aoxWKNwzKQaa5N1XFg==\n-----END PUBLIC KEY-----",
1583 "sha" : "SHA-256",
1584 "type" : "ECDSAVer",
1585 "key" : {
1586 "curve" : "secp256r1",
1587 "type" : "ECPublicKey",
1588 "wx" : "692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900ef",
1589 "wy" : "0a1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716"
1590 },
1591 "tests" : [
1592 {
1593 "comment" : "u2 == 1",
1594 "message" : "54657374",
1595 "result" : "valid",
1596 "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70",
1597 "tcId" : 206
1598 }
1599 ]
1600 },
1601 {
1602 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1",
1603 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAM79kWLRPmTLk2h6nNj5dV67Wj73\nYy+AD4SHGHTM7wlUPsvq9+gETvchvi+19UnkuEgNJYdATr99u+8sVLwMsQ==\n-----END PUBLIC KEY-----",
1604 "sha" : "SHA-256",
1605 "type" : "ECDSAVer",
1606 "key" : {
1607 "curve" : "secp256r1",
1608 "type" : "ECPublicKey",
1609 "wx" : "0cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09",
1610 "wy" : "543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1"
1611 },
1612 "tests" : [
1613 {
1614 "comment" : "u2 == n - 1",
1615 "message" : "54657374",
1616 "result" : "valid",
1617 "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
1618 "tcId" : 207
1619 }
1620 ]
1621 },
1622 {
1623 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd",
1624 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI34qlk/ADTd6hZK4thqvp6Sqp8e5/StB1uDhe9G6VnftzQ==\n-----END PUBLIC KEY-----",
1625 "sha" : "SHA-256",
1626 "type" : "ECDSAVer",
1627 "key" : {
1628 "curve" : "secp256r1",
1629 "type" : "ECPublicKey",
1630 "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e",
1631 "wy" : "2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd"
1632 },
1633 "tests" : [
1634 {
1635 "comment" : "weak key",
1636 "message" : "54657374",
1637 "result" : "valid",
1638 "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8",
1639 "tcId" : 208
1640 }
1641 ]
1642 },
1643 {
1644 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237ed569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232",
1645 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI37VabA+8siFe21HSeVQWFtVWDhGA9S+KR8ehC5FqYgSMg==\n-----END PUBLIC KEY-----",
1646 "sha" : "SHA-256",
1647 "type" : "ECDSAVer",
1648 "key" : {
1649 "curve" : "secp256r1",
1650 "type" : "ECPublicKey",
1651 "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e",
1652 "wy" : "0d569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232"
1653 },
1654 "tests" : [
1655 {
1656 "comment" : "duplication bug",
1657 "message" : "54657374",
1658 "result" : "invalid",
1659 "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8",
1660 "tcId" : 209
1661 }
1662 ]
1663 },
1664 {
1665 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043f7137e42b6c5d98c6bb61bce91426f8e2c2f33fdc893a0d32be1ba0042c21c59c0df75782993e9a31ef773dc73eeb038cd6594f43ecca77fe586105efa19833",
1666 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEP3E35CtsXZjGu2G86RQm+OLC8z/c\niToNMr4boAQsIcWcDfdXgpk+mjHvdz3HPusDjNZZT0Psynf+WGEF76GYMw==\n-----END PUBLIC KEY-----",
1667 "sha" : "SHA-256",
1668 "type" : "ECDSAVer",
1669 "key" : {
1670 "curve" : "secp256r1",
1671 "type" : "ECPublicKey",
1672 "wx" : "3f7137e42b6c5d98c6bb61bce91426f8e2c2f33fdc893a0d32be1ba0042c21c5",
1673 "wy" : "09c0df75782993e9a31ef773dc73eeb038cd6594f43ecca77fe586105efa19833"
1674 },
1675 "tests" : [
1676 {
1677 "comment" : "random signature",
1678 "message" : "00000000000000000000000000000000",
1679 "result" : "valid",
1680 "sig" : "304502203c3fe1264b2995df966337a6ede98fc5c71893e352696703cf863c7e63ac0627022100bcb0a9a02e57ce80f72d91eee92a99ba5b16a3411f9dd541bfdf44a7f2ad54cc",
1681 "tcId" : 210
1682 },
1683 {
1684 "comment" : "random signature",
1685 "message" : "00000000000000000000000000000000",
1686 "result" : "valid",
1687 "sig" : "3045022100a3f9d3ea2c35bb1899508129e0edaf40292ec3b895dc0c6396d9b162b8d88134022073a92358fc9921bf80b3f0f6244d73b141f007a632e8c3cd1f988752e6492c79",
1688 "tcId" : 211
1689 },
1690 {
1691 "comment" : "random signature",
1692 "message" : "00000000000000000000000000000000",
1693 "result" : "valid",
1694 "sig" : "304402203c137c3cf8feb9eb4f7f5984e954918dd408b4df79534150919694d07877067f02202ca4c9d4440262934ca5c8b2cc4bfab3348462b5ab3a308d097dee9b8077a0c0",
1695 "tcId" : 212
1696 },
1697 {
1698 "comment" : "random signature",
1699 "message" : "00000000000000000000000000000000",
1700 "result" : "valid",
1701 "sig" : "3045022005916c5b5d012f85a11fb8adccee8403674dd259e9b158594a3979346d38620c022100945e551009e002951ad9551ed507feca41103c3bf23a156eaefd0c844f3567be",
1702 "tcId" : 213
1703 },
1704 {
1705 "comment" : "random signature",
1706 "message" : "00000000000000000000000000000000",
1707 "result" : "valid",
1708 "sig" : "3044022007c1801de1ec0c089fcbc6301deaa0c161ae59c7e367c6f0376d3fcfcbc6a3e5022006d8ff0b593ed08b35e781551e8ca8222a8f4524e07dc055ec9b78567fe7cd81",
1709 "tcId" : 214
1710 },
1711 {
1712 "comment" : "random signature",
1713 "message" : "00000000000000000000000000000000",
1714 "result" : "valid",
1715 "sig" : "30450220204ff2e911d442d3e46979b2177894bd07cf25485b990f6f162335f916e9d2d00221009825c6539cc3a4d1be8ef523fe28f99f5445377f70471bffbd88362909ee4fde",
1716 "tcId" : 215
1717 },
1718 {
1719 "comment" : "random signature",
1720 "message" : "00000000000000000000000000000000",
1721 "result" : "valid",
1722 "sig" : "304502206a2e4b1eda9b5e5426e0fe6f2fe3180793ec1ae414b4c1164c1cb85a85af49b00221008a40315be22f196eb6d4dca64adab267778eaef5884a074573cb4f2bed185519",
1723 "tcId" : 216
1724 },
1725 {
1726 "comment" : "random signature",
1727 "message" : "00000000000000000000000000000000",
1728 "result" : "valid",
1729 "sig" : "3045022100aaedd77d46a678ca6200a38fcb35550d6c523b6e929efe621673307c295c7de602201dbf3d1edcebd7f7caa604ec3d967a213c57ca2f016ed1c281a2bbce2978c59a",
1730 "tcId" : 217
1731 },
1732 {
1733 "comment" : "random signature",
1734 "message" : "00000000000000000000000000000000",
1735 "result" : "valid",
1736 "sig" : "304402204491da1b704c0410cf6d3ed7c40e770f35d54dd79eb7646537b5e48654b9a28e02204118b53ab6da09a9fcc23af86d8fb8db903a596883167c29042bc13618a3a1b1",
1737 "tcId" : 218
1738 },
1739 {
1740 "comment" : "random signature",
1741 "message" : "00000000000000000000000000000000",
1742 "result" : "valid",
1743 "sig" : "304502205f9da7e8a353a0b324b512a6d7bc9daa655041c09e1aebd281f85b6445ba7ca3022100fb1386685b75f05d836a9a7c2aa698b543fac3cb3a54a256efa9f6f1efaaaedb",
1744 "tcId" : 219
1745 }
1746 ]
1747 },
1748 {
1749 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004013d6e38dfa75ddb2e7822a68192ba40b947bdbbb666d40c63d03b757eb512ed826bfe58bb2706af6ed7b771c98d86133a8d6f5ac6ec22c589cef90e43480f2b2bee0061d76af46853de2a9e2b444cba5adbeb38ad82541a483350c313ff259b93e0d64085566c6c2bb6ff0fbdbd46e69c48b37ec3905d06234bbbd8ca4198d564c8e465",
1750 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBPW4436dd2y54IqaBkrpAuUe9u7Zm\n1Axj0Dt1frUS7YJr/li7Jwavbte3ccmNhhM6jW9axuwixYnO+Q5DSA8rK+4AYddq\n9GhT3iqeK0RMulrb6zitglQaSDNQwxP/JZuT4NZAhVZsbCu2/w+9vUbmnEizfsOQ\nXQYjS7vYykGY1WTI5GU=\n-----END PUBLIC KEY-----",
1751 "sha" : "SHA-512",
1752 "type" : "ECDSAVer",
1753 "key" : {
1754 "curve" : "secp521r1",
1755 "type" : "ECPublicKey",
1756 "wx" : "13d6e38dfa75ddb2e7822a68192ba40b947bdbbb666d40c63d03b757eb512ed826bfe58bb2706af6ed7b771c98d86133a8d6f5ac6ec22c589cef90e43480f2b2bee",
1757 "wy" : "61d76af46853de2a9e2b444cba5adbeb38ad82541a483350c313ff259b93e0d64085566c6c2bb6ff0fbdbd46e69c48b37ec3905d06234bbbd8ca4198d564c8e465"
1758 },
1759 "tests" : [
1760 {
1761 "comment" : "random signature",
1762 "message" : "0000000000000000000000000000000000000000",
1763 "result" : "valid",
1764 "sig" : "30818702411b01186e46e19d71dc2062453be3b4b94c27556069ac5211f6cdb99d4b4d89405c2da8663a32dcec5515cb7357564b32a6ce33f379f3df35b4e2a5db855ad1d7be024200efea92828d6cf125504a247141adc9ecf35fde30c7e0487eff4fbe2f3949b7788d034968a198dcfb4ad1bb6b873ef9f5c8683757aa716f8c00dbc1ccc534c2fece",
1765 "tcId" : 220
1766 },
1767 {
1768 "comment" : "random signature",
1769 "message" : "0000000000000000000000000000000000000000",
1770 "result" : "valid",
1771 "sig" : "3081880242016f39b566c7e037f0c5dfe9f453fb1dc488fa610c341408333326cb632d16dda66af7286e4237de3310cffd6863398257fe2c9e1deb30d61d098c7d5c255b4b45d9024201a49858926129db492d53130bedd4c9be18ac9f7bfd7d62eaf99fe12f58e81d2786b12da9c13b3f025f94f5398e784e909ff363125b98dc35ba850400ef8e4efa2d",
1772 "tcId" : 221
1773 },
1774 {
1775 "comment" : "random signature",
1776 "message" : "0000000000000000000000000000000000000000",
1777 "result" : "valid",
1778 "sig" : "308187024200fcec8495af424d3d6468cf79a0b2d6a2ff7d3c249e78ea1f157e1558066e5118558a830ba105dc8a29b8375642593f0e5c2d23b62a39954ad7a4be3e82a69d817b02410960873c13cd81af95e3980db5fdc537bebfc9ebae4d94d05a276d3bdd86b65ec60175471ae661e16c225c6e17635664a20e8160f7365e4034ca625642de17d479",
1779 "tcId" : 222
1780 },
1781 {
1782 "comment" : "random signature",
1783 "message" : "0000000000000000000000000000000000000000",
1784 "result" : "valid",
1785 "sig" : "308187024171ad3beb8abd01e53fed56ea34f1bd9ae252d290e5c5ae364ae60ce67b0f42186254db2783333a97eeabf2a84b6bcb4683107e03d97bb3e67d400cc8c314a20939024200dc4afe3dca6572fd4a56ba150d3a5266d7828f2c764c416fa2b2e64b1c694040d1fe8061e742c9212ec4330a0d1e312ad65ec4623821d3327da583b78e6a2539ed",
1786 "tcId" : 223
1787 },
1788 {
1789 "comment" : "random signature",
1790 "message" : "0000000000000000000000000000000000000000",
1791 "result" : "valid",
1792 "sig" : "308188024200e53d62a974603f05997fce2df0cb2df83a34cc34b56d71db12cf980db9834e1a322a17fad9ba8d7ea58e2d31de4688527fc5f18424470a51383dbcb177c97c2f6f024201668d2e11b296637f7886291eb339ecfbd630be841b622f81df118cdd16ecebfd0999dca4f82b7fc4f17be81c64d6903ca2a9d854702b6783b1bb47455fc9665032",
1793 "tcId" : 224
1794 },
1795 {
1796 "comment" : "random signature",
1797 "message" : "0000000000000000000000000000000000000000",
1798 "result" : "valid",
1799 "sig" : "308186024107250d6a30bc7c47a63f2aebb3eb0b7b9be3bf833f761bf6a56cd1300224e5753c85987f9e61401c0434ab1566b6a3e5519575415c24417c69c39fc43dab11d3cb024157f319ebf47bbfe2b7d38a3da246b135f31baa455c72c5869016d7fcabdaec581efc5b756d0f451ad079f697961225e55495fbac374bb246fd499c1ba7b9bbae57",
1800 "tcId" : 225
1801 },
1802 {
1803 "comment" : "random signature",
1804 "message" : "0000000000000000000000000000000000000000",
1805 "result" : "valid",
1806 "sig" : "308188024200d2b0e8938f97fad395fa00d91888f9ba29d4df80626cc278ad233c9a9fdc5fd1762cb6a53bc34d1f6f0b1b42dd0ac5bde7c3f95becf6fe39f356a47ffa7cc2343a024201cb90ceb1c46d9d0f584d0e8b58b21a5e9d7b101dc253a1109fe99715f32223b4e02ac3a880e8eeb7d4a92a7d10d33543fad8c78cfb0700bf794f0497f4c8276c3c",
1807 "tcId" : 226
1808 },
1809 {
1810 "comment" : "random signature",
1811 "message" : "0000000000000000000000000000000000000000",
1812 "result" : "valid",
1813 "sig" : "3081880242018a4cffe3fbacdaffe208bbd0c682ffdfc7d77a41d05e71f8e5bfe3685279bc62dd35e3ac1c6bec556bfe3ba0b12c6ef6124dcf05bc61d66856c00740bd271856c8024200a6105606f6bdf923a8dd1a70802a98d42b83293dbd8e78799d9093e22819edc20754e0da61f05c0650069a2f766c0e2caea947d436c9a4cf1d7c4881315fa840b6",
1814 "tcId" : 227
1815 },
1816 {
1817 "comment" : "random signature",
1818 "message" : "0000000000000000000000000000000000000000",
1819 "result" : "valid",
1820 "sig" : "3081880242010bc1d5bcda1e17bb6abffe483005885455d6042eb89dc346765017a270524ad03d8bce116860c79f9a33085b6d9a9ec0bd03944bd117cc24a46e4cfd58a75afa18024201db04999a96b4caa3725d1fd178e0471e05ea8800fce35e1cf52d1c8006083898a28cf8b106eb58588a0aa642bb91581aa940f3e02b9fdcb064cf29cf012b449cb4",
1821 "tcId" : 228
1822 },
1823 {
1824 "comment" : "random signature",
1825 "message" : "0000000000000000000000000000000000000000",
1826 "result" : "valid",
1827 "sig" : "3081880242017381d2a07c84ebe2fb4356f07c27a2d110d6d1ef7c0a23dfb3a038dbbc53d457d3207039bdfb46bacae9d9ed821d46ce328d3d2acdf9641331b28713998d0398dd024200b6b943a7300d396d07a76c29e80a88c1ff1a6def766fb72022db7bb006e311e6cfbc4452390962461e767a97383d2f908122645e82710dd7fbbeff947d2e488bad",
1828 "tcId" : 229
1829 }
1830 ]
1831 },
1832 {
1833 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e10ba0fabf162af055b859b7d939435cce257ffa274349456403292bb8cb60e9fa1a0a6408df5e4e3675f47621c8f29cda59832a7acedcd3315f6a8ea848afc8",
1834 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4Qug+r8WKvBVuFm32TlDXM4lf/on\nQ0lFZAMpK7jLYOn6GgpkCN9eTjZ19HYhyPKc2lmDKnrO3NMxX2qOqEivyA==\n-----END PUBLIC KEY-----",
1835 "sha" : "SHA-512",
1836 "type" : "ECDSAVer",
1837 "key" : {
1838 "curve" : "secp256r1",
1839 "type" : "ECPublicKey",
1840 "wx" : "0e10ba0fabf162af055b859b7d939435cce257ffa274349456403292bb8cb60e9",
1841 "wy" : "0fa1a0a6408df5e4e3675f47621c8f29cda59832a7acedcd3315f6a8ea848afc8"
1842 },
1843 "tests" : [
1844 {
1845 "comment" : "random signature",
1846 "message" : "48656c6c6f",
1847 "result" : "valid",
1848 "sig" : "3045022100f5a4fa630913d5ad82d46e31c305e6b0933b4d9aaaf52997cf86527e36fb784c02206534b74e9d19ae8756afdde2876ad90195863f7c04ee61997eab183d175cf770",
1849 "tcId" : 230
1850 },
1851 {
1852 "comment" : "random signature",
1853 "message" : "48656c6c6f",
1854 "result" : "valid",
1855 "sig" : "304502204ccf6585c28ed8ec75d4023f2f8827c3e87c30fa884d992f53b3515ea6060d6b022100b80de22c729068f2191aa7bb638cb26b0018914981b4ab20a09d48333147b9a4",
1856 "tcId" : 231
1857 },
1858 {
1859 "comment" : "random signature",
1860 "message" : "48656c6c6f",
1861 "result" : "valid",
1862 "sig" : "30460221009f14dfcd5b7963d2f6d3ea0925bfcbdbf3b6a9500d080efbb787f6b792886312022100eae1881b232e64f10dd41b0b94c8c4e662ff3be7d25f1137ede60737664a2c7b",
1863 "tcId" : 232
1864 },
1865 {
1866 "comment" : "random signature",
1867 "message" : "48656c6c6f",
1868 "result" : "valid",
1869 "sig" : "3046022100e43b319bd4d94cd6beeb23caf950dbb448d713de4830ac4f749a30149932cdfb0221008118d54087fae841c61eca28622f95a315f8d9f505ba30fea43c17a7b48e6f9a",
1870 "tcId" : 233
1871 },
1872 {
1873 "comment" : "random signature",
1874 "message" : "48656c6c6f",
1875 "result" : "valid",
1876 "sig" : "3045022100d66f8bfe727d5697feda9fd2a7be014454329f6a72414b69a181a7a7bc6614d402203e7aa1f19cb90fa30cebd30ce5c3022748f050a418d1d42550a76f4eb497b0e7",
1877 "tcId" : 234
1878 },
1879 {
1880 "comment" : "random signature",
1881 "message" : "48656c6c6f",
1882 "result" : "valid",
1883 "sig" : "3046022100db555ffefc339c394d1a8059390a78aa9eba72dc008421f581f78ed1b29c3e910221009082dba3909cfc596ade6108a199d66fc1f726016eae2871c8e343bc14639bb3",
1884 "tcId" : 235
1885 },
1886 {
1887 "comment" : "random signature",
1888 "message" : "48656c6c6f",
1889 "result" : "valid",
1890 "sig" : "30440220190dd08a839b27641f1145fc8e04e8d71a55f2be835d360bd1c5f5d357c749490220474915b4bc6d81437eaff2f438e05bedcfd10f4222984782f3202ee32b55253d",
1891 "tcId" : 236
1892 },
1893 {
1894 "comment" : "random signature",
1895 "message" : "48656c6c6f",
1896 "result" : "valid",
1897 "sig" : "304502200159de0f5c777d001cf22e46cccd10dc01a124f12bc707aaaf305d3e05f0fc1a022100c2314c660d0107473edaf36e718248971522c20adea9e7b1f01fe174510ab00d",
1898 "tcId" : 237
1899 },
1900 {
1901 "comment" : "random signature",
1902 "message" : "48656c6c6f",
1903 "result" : "valid",
1904 "sig" : "3045022100ed5137b13ce59346a00a2380e3ff1a874f52172ecd601652dd12e38ce638bb410220776161b448299c2cbcd9856dcd2aeea99423d817895ce9c5d3071c81bf7b0218",
1905 "tcId" : 238
1906 },
1907 {
1908 "comment" : "random signature",
1909 "message" : "48656c6c6f",
1910 "result" : "valid",
1911 "sig" : "304402206c5fa55a3cc7d21fcdbbd353acaff2c33bcce0a7768277dfea9999c49b80e78e022029316ba855bcfdfed36032e648413beaea51675286ed5fc7c67a623ec6ab550b",
1912 "tcId" : 239
1913 }
1914 ]
1915 },
1916 {
1917 "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004043d002e8a7578988a8013868221598c76b22591f95b6328a07f60ff1bb55957b1a83fce6aeeb38f2c1489d170e51fd3ba396e4dd4997314",
1918 "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEBD0ALop1eJiKgBOGgiFZjHayJZH5W2Mo\noH9g/xu1WVexqD/Oau6zjywUidFw5R/TujluTdSZcxQ=\n-----END PUBLIC KEY-----",
1919 "sha" : "SHA-256",
1920 "type" : "ECDSAVer",
1921 "key" : {
1922 "curve" : "secp224r1",
1923 "type" : "ECPublicKey",
1924 "wx" : "43d002e8a7578988a8013868221598c76b22591f95b6328a07f60ff",
1925 "wy" : "1bb55957b1a83fce6aeeb38f2c1489d170e51fd3ba396e4dd4997314"
1926 },
1927 "tests" : [
1928 {
1929 "comment" : "random signature",
1930 "message" : "48656c6c6f",
1931 "result" : "valid",
1932 "sig" : "303c021c31788aeb1f7e5a8ef02691c94b6ef09c178177e1efd0b66024e2bbf0021c61b855d33928aa6a06ce4744459246912bb546299dc1361afe8b54f6",
1933 "tcId" : 240
1934 },
1935 {
1936 "comment" : "random signature",
1937 "message" : "48656c6c6f",
1938 "result" : "valid",
1939 "sig" : "303d021c535fd315dc20cffdb12d9760e78f265b372cbab47d16d452b7323e29021d00b647908b7afbc054bd8da42a2c919542e3f46ee500c701c73077bcdb",
1940 "tcId" : 241
1941 },
1942 {
1943 "comment" : "random signature",
1944 "message" : "48656c6c6f",
1945 "result" : "valid",
1946 "sig" : "303e021d00c4732d71dfa662e7954ff9bebfd649d0979fb3b1cff0f003d2bb2491021d00a646d691a1298e7c35a97a3b466a24fb6920b4fadbe879c7753b6cc0",
1947 "tcId" : 242
1948 },
1949 {
1950 "comment" : "random signature",
1951 "message" : "48656c6c6f",
1952 "result" : "valid",
1953 "sig" : "303c021c5234ab61f3968397d91b43782dd4c1d6fb9d3efe408179350776fbc9021c2eb655fb47d872f419455708db8eeb887798c8b4f2c7a97676dba7b8",
1954 "tcId" : 243
1955 },
1956 {
1957 "comment" : "random signature",
1958 "message" : "48656c6c6f",
1959 "result" : "valid",
1960 "sig" : "303d021c0130551eb38f5031878979407512b41539e433dc286d1fede4b80be3021d009bd60de297786209c5432b806a54b7631621d46de47d48842ff681c5",
1961 "tcId" : 244
1962 },
1963 {
1964 "comment" : "random signature",
1965 "message" : "48656c6c6f",
1966 "result" : "valid",
1967 "sig" : "303c021c27d821f9c9cf6318f2a037de60fa4782c351ba4ff80d932d213c4d07021c62ee9b287ba2a0b3e30ddd3fc64e7929bdad9113a1282c10643ad592",
1968 "tcId" : 245
1969 },
1970 {
1971 "comment" : "random signature",
1972 "message" : "48656c6c6f",
1973 "result" : "valid",
1974 "sig" : "303c021c1016ed7dbcb22340942aa8f0e7a84101d96dc42eb55ca2d681632e90021c5c16afccd82d04f8c444de978fe63d5450d07e12b203c32b2196b495",
1975 "tcId" : 246
1976 },
1977 {
1978 "comment" : "random signature",
1979 "message" : "48656c6c6f",
1980 "result" : "valid",
1981 "sig" : "303d021d00ed965e2d4693550bb57f5e02ddb4decd39a6e04877acff12a73a8235021c355bcf5024e4c59fbd085b93309d9c5bbe1a46753ffb4f721a893886",
1982 "tcId" : 247
1983 },
1984 {
1985 "comment" : "random signature",
1986 "message" : "48656c6c6f",
1987 "result" : "valid",
1988 "sig" : "303e021d00bafa121f3eaa86be5126d205415bbac620a5629055ca27d3df9b8678021d00b85d2b3b11517a994317139d28b75772dec6aeb21b1e9fa07886ad8c",
1989 "tcId" : 248
1990 },
1991 {
1992 "comment" : "random signature",
1993 "message" : "48656c6c6f",
1994 "result" : "valid",
1995 "sig" : "303d021d00dc63d34b62603b5f6f5e3a55b65d0571b5d1c5aebe0b2ebb5ffac3a9021c6a88c49cb0d3dd86bae375f93c299dcd32c372ce201e4ab50b31d233",
1996 "tcId" : 249
1997 }
1998 ]
1999 },
2000 {
2001 "keyDer" : "3076301006072a8648ce3d020106052b810400220362000437c5fdb948494b3fd8bb5ec5930025276fa55d43f660e1f06b74a4462063f4735ed0a6d9dfdee6797b70655755e8e2e373d53d1f06fe73b766f5c4e06b788dea92b7a17d7cc1abb95d2c90cb2c09b5a2de2e672126debc46516e910952a91dfa",
2002 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEN8X9uUhJSz/Yu17FkwAlJ2+lXUP2YOHw\na3SkRiBj9HNe0KbZ397meXtwZVdV6OLjc9U9Hwb+c7dm9cTga3iN6pK3oX18wau5\nXSyQyywJtaLeLmchJt68RlFukQlSqR36\n-----END PUBLIC KEY-----",
2003 "sha" : "SHA-512",
2004 "type" : "ECDSAVer",
2005 "key" : {
2006 "curve" : "secp384r1",
2007 "type" : "ECPublicKey",
2008 "wx" : "37c5fdb948494b3fd8bb5ec5930025276fa55d43f660e1f06b74a4462063f4735ed0a6d9dfdee6797b70655755e8e2e3",
2009 "wy" : "73d53d1f06fe73b766f5c4e06b788dea92b7a17d7cc1abb95d2c90cb2c09b5a2de2e672126debc46516e910952a91dfa"
2010 },
2011 "tests" : [
2012 {
2013 "comment" : "random signature",
2014 "message" : "48656c6c6f",
2015 "result" : "valid",
2016 "sig" : "3064023063a13e9cff9933f28be9d5512a41e7d360267d969787bb547de033ec25f4ce8d4241739136ef85c87d4fc26b508e6b0a02300d58575ba57ac5677cf1c0c482310f2ac49bd8e7777cbae1c4255a203b43fc4c57cf80d29054305a4816fa585d1d796f",
2017 "tcId" : 250
2018 },
2019 {
2020 "comment" : "random signature",
2021 "message" : "48656c6c6f",
2022 "result" : "valid",
2023 "sig" : "3064022f2d4f256b6cb1a53506a80dcc9168819143d406429c5d6a250382de196d5d85f15d55a03c2f75438c50ee88e500bfcc023100fb09a8ac3864ae3392d4ff8c6735525daccc3c406abf2b55127c1073e637a2d6ffebed7d7e76c33080323732f932b061",
2024 "tcId" : 251
2025 },
2026 {
2027 "comment" : "random signature",
2028 "message" : "48656c6c6f",
2029 "result" : "valid",
2030 "sig" : "3066023100ab7f86f08c50b3d270130751f841d7872d9cd9da32a20d45af87829ad1b3114ed37c40971abf1b9b901bb90e86ec66ed023100f7a2d3aed355f4fa173e5011da4759bf842c607f45e9716f95a55d9c164901113ed50df4883c52b83db7905d34edb7cf",
2031 "tcId" : 252
2032 },
2033 {
2034 "comment" : "random signature",
2035 "message" : "48656c6c6f",
2036 "result" : "valid",
2037 "sig" : "3066023100d6b7b5fb43b88233c0c08039489b0ff9c356488887aead4a4c67761d9dae82ae53346cc4d962453c95d8c6cc8138b15a0231009f9651cff09767563d5821940d16ef418d80b682af5137bfef8ff12ad0c5b0df90cd936b4ac75b750f52b8609b49cb00",
2038 "tcId" : 253
2039 },
2040 {
2041 "comment" : "random signature",
2042 "message" : "48656c6c6f",
2043 "result" : "valid",
2044 "sig" : "30650231009f04654cfa89783482e23f24a63e0161108b963353856216e8f668b61ce33cb552d9eaf110c1ebf0c7d674410e9efbf20230411c2050c857b0f312ccc3e69afff849bf89e0ff3868ff5693d69c16d901d4d976306b8f5e7cc0a908faa88a06aa4839",
2045 "tcId" : 254
2046 },
2047 {
2048 "comment" : "random signature",
2049 "message" : "48656c6c6f",
2050 "result" : "valid",
2051 "sig" : "30650230221ce3308b394973315c1ae936d41cbe103b3c480d0249063b491c6f282b6a003910cd1b53f78333d1d6bd0fc45cb775023100f7ae3e8c0849282145e8d411e69bb9abf8df77da4c794b639d0fa16e828ca74034e0d190636fb902cce42d29df3ae674",
2052 "tcId" : 255
2053 },
2054 {
2055 "comment" : "random signature",
2056 "message" : "48656c6c6f",
2057 "result" : "valid",
2058 "sig" : "3066023100fe157fe0d7830b2df78a6f41581b3982e2fe2b37d0c50a90804b9fa51fafb64f88b8a4a2a8899eb85709805626bb2374023100b5e8e146185dd26e1a7178f64377456e2bb56e6e3322d27bc8899a14bed7d8652e09d03dfc1730e3ac8ba1f6f0d7fe8d",
2059 "tcId" : 256
2060 },
2061 {
2062 "comment" : "random signature",
2063 "message" : "48656c6c6f",
2064 "result" : "valid",
2065 "sig" : "3065023100d9533df0741a9d3435366d9347259457bf1ace27f436b809a36a04f73a6499aaf1778bfdae763b16f6ab8329beef4cba0230282693221bf9ee2883c2793bccf45bcc50eceafeae3d6f0b0e7e55edda06bc36deebaabb3aee25339b37e7b2fc420f1d",
2066 "tcId" : 257
2067 },
2068 {
2069 "comment" : "random signature",
2070 "message" : "48656c6c6f",
2071 "result" : "valid",
2072 "sig" : "306402304b36a23584076fc30ab2ef9e6b026ce1e60a7d380dc6be69fe2c1e1ec6edb737a8cc85c1486e810d00190cbcb6272bc6023030c794a0cca240578eda7d89b5f0a34b05330e926f7576327550fc444c3aee66c4d913c8d90be9b405486c8c879d1080",
2073 "tcId" : 258
2074 },
2075 {
2076 "comment" : "random signature",
2077 "message" : "48656c6c6f",
2078 "result" : "valid",
2079 "sig" : "3065023100d1993840050f853b6b046e3761a6007dca17f24bd96cc38cf08cee3b25ce1142cbe1b23bd97f49f1f73667f9956a0b8502305d1b757f67de261d5b7729a0cb582a0d4133ba6ffb329315328e43a2d3345b670a6c44ddaef6ff4b400616cdc0ecaf83",
2080 "tcId" : 259
2081 }
2082 ]
2083 },
2084 {
2085 "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400252ba02b52511e0d27c926f51933deb9da574b65790d0586514afe02478a384c7709702304fa45d891f74ea5b7774658ec7f6bd665b7b857a19946ed97a13e12370122a5e01c6cc84e4ccf55a27b836a31e3faa91a27b8967b85abd815595f76bf7a0ed524ac8730bcb3b0c536907c8d492718bbbcc581d27b8d347fbe7844f65675fb",
2086 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAJSugK1JRHg0nySb1GTPeudpXS2V5\nDQWGUUr+AkeKOEx3CXAjBPpF2JH3TqW3d0ZY7H9r1mW3uFehmUbtl6E+EjcBIqXg\nHGzITkzPVaJ7g2ox4/qpGie4lnuFq9gVWV92v3oO1SSshzC8s7DFNpB8jUknGLu8\nxYHSe400f754RPZWdfs=\n-----END PUBLIC KEY-----",
2087 "sha" : "SHA-512",
2088 "type" : "ECDSAVer",
2089 "key" : {
2090 "curve" : "secp521r1",
2091 "type" : "ECPublicKey",
2092 "wx" : "252ba02b52511e0d27c926f51933deb9da574b65790d0586514afe02478a384c7709702304fa45d891f74ea5b7774658ec7f6bd665b7b857a19946ed97a13e1237",
2093 "wy" : "122a5e01c6cc84e4ccf55a27b836a31e3faa91a27b8967b85abd815595f76bf7a0ed524ac8730bcb3b0c536907c8d492718bbbcc581d27b8d347fbe7844f65675fb"
2094 },
2095 "tests" : [
2096 {
2097 "comment" : "random signature",
2098 "message" : "48656c6c6f",
2099 "result" : "valid",
2100 "sig" : "30818702412a996b82715ac9f1fe285a850a617e51ebabf92b521aa0c8548b6ab3fd218ae9bfd63f04416943a4c6ea6a9d679b770a40fb2298511c9e1541f08f63680dcb920d0242011e06a29b2b4b4342d23a5e1986fd5ec5970719a9afa019b17be2b29655187b0ed1d81359dd48d3dcb8c8ca201b33038dfb5980165de4797ae9108d3544dce9e9f2",
2101 "tcId" : 260
2102 },
2103 {
2104 "comment" : "random signature",
2105 "message" : "48656c6c6f",
2106 "result" : "valid",
2107 "sig" : "30818802420143eefbaa995087d553835fe93afcf43364d834e37302317c0587b7c86604dde272474e7f2501463280e0e979eb59e79e9f7a3236d967230fc5677fad4b29b424a1024201578a2dbb28cb4e7ca50bd237253b7912f3c8a7cb455d7da98c599855838b0dde6ed83276ab8eaefb312756cd3e16e53377358a98b8c612168e84261b510ea42253",
2108 "tcId" : 261
2109 },
2110 {
2111 "comment" : "random signature",
2112 "message" : "48656c6c6f",
2113 "result" : "valid",
2114 "sig" : "30818702420131247501344d5aac53cdc31d65e22ab02bf552c246f0fa92ea7d24999bf6df4474c64af6c892ad05b1c3d83634c3420f55993d10589352674ffbec71552ff66bb102412655b482f9231e3ba0283b96d0a934c6f0c6282f7907e8d0aa1e6707d0410a78d036461b5e5d3cf7f0e7ceb23c24f334d6cbc2f1d1684039a14c22d8538debb62b",
2115 "tcId" : 262
2116 },
2117 {
2118 "comment" : "random signature",
2119 "message" : "48656c6c6f",
2120 "result" : "valid",
2121 "sig" : "308188024201538632e5ba4b1119240dbe68e026a9ffe934ad46f129fae49dd30caf2dec9e45504be132685474c6ba473f39f9439717939b3dc725a82488c77b17358511a3eae90242015d36c05195a17382a229a61a011639f8c309696d68e1f3b95d0053ee23bf6cb6249bf7a4fc9f1517147a33438c66edef6c587f00d3de8635be84a785d5e7baf319",
2122 "tcId" : 263
2123 },
2124 {
2125 "comment" : "random signature",
2126 "message" : "48656c6c6f",
2127 "result" : "valid",
2128 "sig" : "308188024200fafebd657159b7a0f5d9e3b58ceffcb30056407fdbbf345f416d9cfadfc22edd4f31d9ba39a8e3a0ab1a4154f2417ed99cf80600cf95ecb5ce8b0e7ee79cf84c7a024201c47968f0a10144d6f399a270bf8c663eb083c2c6629f13704e855a84d78fe4fd9e4ffd81191882b6ba51b220cb6bc94c55f89a8182460a321325a0c978f57bc17b",
2129 "tcId" : 264
2130 },
2131 {
2132 "comment" : "random signature",
2133 "message" : "48656c6c6f",
2134 "result" : "valid",
2135 "sig" : "3081870241138ffe382f05a34b2aea9bc90c2c5cac363d2cbd3af5c4fd1b39e75a92b34d6a1e6f0304a29a1b53651bda15840e1a93971bf20121c2d72d61481b95c3777116cc024201076665a62dd5dc147b30eb6521deaab06125d77b020c756940b21e1ff66f0d9b18b0013427b72a5ace91ccb790f94d0fea8f058f75324d4803283d2d3ea725a09c",
2136 "tcId" : 265
2137 },
2138 {
2139 "comment" : "random signature",
2140 "message" : "48656c6c6f",
2141 "result" : "valid",
2142 "sig" : "308188024201a1f9f065bab50e83ab6c8c9008df1bfcb74f344f02efadab68c41d6f89c082157b978562bd4afea4769fbab392224682ef2683b449888f83205917e0918bbec217024201f7c1b72a0c0be8dddda08219060254bfc1e3e3c65427e89eff7868a7d9cfee31ee6653d455041ffa273b1ea383518b33231da95ea353a4d9ff3e5fa8c94c99e8f7",
2143 "tcId" : 266
2144 },
2145 {
2146 "comment" : "random signature",
2147 "message" : "48656c6c6f",
2148 "result" : "valid",
2149 "sig" : "3081880242018270e7745dad6d8488720f4c93b69700d9717503887288c671d916cd649595f9783591833116b2ef912fa72d259ab7114ae3a182a9864a7edd4e6fcb3990649ce702420146242a4a3483946bc090a40ac39339fc124368e7535c84530a98aa3bbcece21909605d4c045b22f611ee5bc33179f11dd0d528c7b64ca241a47a273430b5a4e844",
2150 "tcId" : 267
2151 },
2152 {
2153 "comment" : "random signature",
2154 "message" : "48656c6c6f",
2155 "result" : "valid",
2156 "sig" : "308188024201a04b162ee70667cd609d86eb5410b9d7c0c72a95ff3b3cab5c2d51023806a221d18db37a130be74b32356b29f6e6420bc022f83f60999b4176d5c9e31d900f226b0242011eb2c375e10607769fee41fa0ab61bd7c4b2761776851590e75bc2c91a0d1f5db1e8031df3ae6ae753e7ee9465c7fb547f97ebf080f756d33e323b0ba0afeeef23",
2157 "tcId" : 268
2158 },
2159 {
2160 "comment" : "random signature",
2161 "message" : "48656c6c6f",
2162 "result" : "valid",
2163 "sig" : "3081880242009dc34469da72d84ac5addcb57e8b47186733860fc0ed44ea83ed28987cec9549102e537db86589e27204015cd2b2bf197dba0c21f28f01bcb16e0c0ee623e395fb024200db1653be45deca922f80d620f5524d9ce88cbcc9e5ee6c6be6227836f8badf6d99138bdde1ba7b9ee3395382e827f2adbea608ca51175a64c483f1342193f52bbd",
2164 "tcId" : 269
2165 }
2166 ]
2167 },
2168 {
2169 "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d90c6ccc60a40e92013f34fbeaa6d9e765e4a25f937f53faf6dc8595e603a9c4b1a60a5a51531b2fb1b57e38151a859c204f0f6c27b6feb6",
2170 "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE2QxszGCkDpIBPzT76qbZ52Xkol+Tf1P6\n9tyFleYDqcSxpgpaUVMbL7G1fjgVGoWcIE8PbCe2/rY=\n-----END PUBLIC KEY-----",
2171 "sha" : "SHA-1",
2172 "type" : "ECDSAVer",
2173 "key" : {
2174 "curve" : "secp224r1",
2175 "type" : "ECPublicKey",
2176 "wx" : "0d90c6ccc60a40e92013f34fbeaa6d9e765e4a25f937f53faf6dc8595",
2177 "wy" : "0e603a9c4b1a60a5a51531b2fb1b57e38151a859c204f0f6c27b6feb6"
2178 },
2179 "tests" : [
2180 {
2181 "comment" : "Hash weaker than DL-group",
2182 "message" : "48656c6c6f",
2183 "result" : "acceptable",
2184 "sig" : "303d021d00a2dfa28cce02d4006d07d3251a8ad54328571941869f48f3fcbcc316021c6d5cbf4e497d80bb1ad7955b441917872580c8977b4c026420ff449d",
2185 "tcId" : 270
2186 }
2187 ]
2188 },
2189 {
2190 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e49b6e5e078e9aa4364583f037efd94fb1058b9de125cb2a471981c343e662b2beaa75937c479c738574093053a2d54218753a967da74c0064d52e6a4db2cd73",
2191 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5JtuXgeOmqQ2RYPwN+/ZT7EFi53h\nJcsqRxmBw0PmYrK+qnWTfEecc4V0CTBTotVCGHU6ln2nTABk1S5qTbLNcw==\n-----END PUBLIC KEY-----",
2192 "sha" : "SHA-224",
2193 "type" : "ECDSAVer",
2194 "key" : {
2195 "curve" : "secp256r1",
2196 "type" : "ECPublicKey",
2197 "wx" : "0e49b6e5e078e9aa4364583f037efd94fb1058b9de125cb2a471981c343e662b2",
2198 "wy" : "0beaa75937c479c738574093053a2d54218753a967da74c0064d52e6a4db2cd73"
2199 },
2200 "tests" : [
2201 {
2202 "comment" : "Hash weaker than DL-group",
2203 "message" : "48656c6c6f",
2204 "result" : "acceptable",
2205 "sig" : "30460221008febf29c959ccc9c138a3190b9e22d1721a14351ddb2be669aa4370b944fc318022100d41f7637c75f4f4631aa2dbd42e1282f8a9ac13fb869339d10c3a00a5953397b",
2206 "tcId" : 271
2207 }
2208 ]
2209 },
2210 {
2211 "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a884162c27b9b66355f98c71d58a568d1306a3cbb530f527355deabc9a91ee1e7c9a0f0667435ec7ccb2507eb93c5ea8b2326d0e69c1e053e49b55de8d6257a07f1421dcfd49290c962d71ea5e5585917d406bd78a345f721e183e2d53a394b2",
2212 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqIQWLCe5tmNV+Yxx1YpWjRMGo8u1MPUn\nNV3qvJqR7h58mg8GZ0Nex8yyUH65PF6osjJtDmnB4FPkm1XejWJXoH8UIdz9SSkM\nli1x6l5VhZF9QGvXijRfch4YPi1To5Sy\n-----END PUBLIC KEY-----",
2213 "sha" : "SHA-256",
2214 "type" : "ECDSAVer",
2215 "key" : {
2216 "curve" : "secp384r1",
2217 "type" : "ECPublicKey",
2218 "wx" : "0a884162c27b9b66355f98c71d58a568d1306a3cbb530f527355deabc9a91ee1e7c9a0f0667435ec7ccb2507eb93c5ea8",
2219 "wy" : "0b2326d0e69c1e053e49b55de8d6257a07f1421dcfd49290c962d71ea5e5585917d406bd78a345f721e183e2d53a394b2"
2220 },
2221 "tests" : [
2222 {
2223 "comment" : "Hash weaker than DL-group",
2224 "message" : "48656c6c6f",
2225 "result" : "acceptable",
2226 "sig" : "306502305158cdcc24d284b3427c1364844c04129b5d2d802bfa10401f81fc9c6fc0a4e66dd9c3d9a9964707494c497a5f702949023100c48ae0e2e4610bf39902f14e9abd0e3e785218711320dd353b0c5c4699f575570e0d6855dfcc8cbf28e88cadc3802cea",
2227 "tcId" : 272
2228 }
2229 ]
2230 },
2231 {
2232 "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040024654b7e0621518502ecf70d7dce95c1000dacc7ea72be66462b2ae13befdc7fcbcb188f811c41ab67b0cb6490a8fd51a6561103b7b8b61413ce7324574ef9aa37009a61befa9b2b32c250b96e7868cb9de26e480b7ff608fdd64e02a392e216098a0d3383975375df15671fbe8d32165bf954e8b4b3efcef764ecca11dfda98e2073c",
2233 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAJGVLfgYhUYUC7PcNfc6VwQANrMfq\ncr5mRisq4Tvv3H/LyxiPgRxBq2ewy2SQqP1RplYRA7e4thQTznMkV075qjcAmmG+\n+psrMsJQuW54aMud4m5IC3/2CP3WTgKjkuIWCYoNM4OXU3XfFWcfvo0yFlv5VOi0\ns+/O92TsyhHf2pjiBzw=\n-----END PUBLIC KEY-----",
2234 "sha" : "SHA-256",
2235 "type" : "ECDSAVer",
2236 "key" : {
2237 "curve" : "secp521r1",
2238 "type" : "ECPublicKey",
2239 "wx" : "24654b7e0621518502ecf70d7dce95c1000dacc7ea72be66462b2ae13befdc7fcbcb188f811c41ab67b0cb6490a8fd51a6561103b7b8b61413ce7324574ef9aa37",
2240 "wy" : "09a61befa9b2b32c250b96e7868cb9de26e480b7ff608fdd64e02a392e216098a0d3383975375df15671fbe8d32165bf954e8b4b3efcef764ecca11dfda98e2073c"
2241 },
2242 "tests" : [
2243 {
2244 "comment" : "Hash weaker than DL-group",
2245 "message" : "48656c6c6f",
2246 "result" : "acceptable",
2247 "sig" : "308188024201d9422e516e19f29b1d44450c9a7f63c6621a111f6ac69bbd58a0bcb19dc76d4ffe32dd3ebe796f3b5bf908f882545ba40025bbfd7a67d02507789fe6696384f921024201878e7aa8b9c5dda694c3e9f4bc702ad74ce1e30d959097dfffd173fe57a55fbacfeabe6f514654ea21961f9f2d1f07782f7db156c2807df333de15ec57f58d8099",
2248 "tcId" : 273
2249 }
2250 ]
2251 }
2252 ]
2253 }
+0
-1594
t/wycheproof/ecdsa_webcrypto_test.json less more
0 {
1 "algorithm" : "ECDSA",
2 "generatorVersion" : "0.0a11",
3 "numberOfTests" : 123,
4 "testGroups" : [
5 {
6 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044af4f6d1d734798d4c4c6f97c4fff392ee65dc252d617b154ca835ea1535b104fb069171d00e87a92e6c4db1d892bc09b04b5da8bd9b09cfaa41d0a526e55237",
7 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESvT20dc0eY1MTG+XxP/zku5l3CUt\nYXsVTKg16hU1sQT7BpFx0A6HqS5sTbHYkrwJsEtdqL2bCc+qQdClJuVSNw==\n-----END PUBLIC KEY-----",
8 "sha" : "SHA-256",
9 "type" : "ECDSAVer",
10 "jwk" : {
11 "crv" : "P-256",
12 "kid" : "none",
13 "kty" : "EC",
14 "x" : "SvT20dc0eY1MTG-XxP_zku5l3CUtYXsVTKg16hU1sQQ",
15 "y" : "-waRcdAOh6kubE2x2JK8CbBLXai9mwnPqkHQpSblUjc"
16 },
17 "key" : {
18 "curve" : "secp256r1",
19 "keySize" : 256,
20 "type" : "ECPublicKey",
21 "wx" : "4af4f6d1d734798d4c4c6f97c4fff392ee65dc252d617b154ca835ea1535b104",
22 "wy" : "0fb069171d00e87a92e6c4db1d892bc09b04b5da8bd9b09cfaa41d0a526e55237"
23 },
24 "tests" : [
25 {
26 "comment" : "signature malleability",
27 "message" : "48656c6c6f",
28 "result" : "valid",
29 "sig" : "b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f8b8d6e21d0c0bb5185319715ccbce2902802e1eca070b7226dec70ceca023883",
30 "tcId" : 1
31 },
32 {
33 "comment" : "random signature",
34 "message" : "48656c6c6f",
35 "result" : "valid",
36 "sig" : "f67dd15cef0128e9a4fb3c3e9958dd08039eba90453e8993a54251e667a317ab7e59ce34928cc502a3b3c3758cfb6f4907a2d463b0aba52291793b5854245944",
37 "tcId" : 2
38 },
39 {
40 "comment" : "random signature",
41 "message" : "48656c6c6f",
42 "result" : "valid",
43 "sig" : "56179fa191744e602ae7f6ae46e42312c6e336fc83a628ee455c6229b46c33413f0bd962a1a81406a29bc03a4b61c08e9503e75eba0bc29e8bc65494a25d3744",
44 "tcId" : 3
45 },
46 {
47 "comment" : "random signature",
48 "message" : "48656c6c6f",
49 "result" : "valid",
50 "sig" : "ca3503dfdf49e158b08046eb3ff169ae4b7f299cfd432ad9d7598ec952dac1c11cfc4c46c9eea69e577310202df187d32c058d9fef2d32bc5283642b79d1373b",
51 "tcId" : 4
52 },
53 {
54 "comment" : "random signature",
55 "message" : "48656c6c6f",
56 "result" : "valid",
57 "sig" : "9483c852f5b725da505e8cf57b9148b2772a1f2acc6f479fe8f176e69e1377f5b3cce9b6a9d46d9af3b992f8e947b72b165ac9e216966d34c533a6626796164b",
58 "tcId" : 5
59 },
60 {
61 "comment" : "random signature",
62 "message" : "48656c6c6f",
63 "result" : "valid",
64 "sig" : "1656802176c0e98da5512de8f9080f4dd91163c8a7422d1e930d58075309edef88be892159f048816a046d05d426f5d38d38e3f41d52617239fe8f5ae93b1abc",
65 "tcId" : 6
66 },
67 {
68 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
69 "message" : "48656c6c6f",
70 "result" : "invalid",
71 "sig" : "01b7babae8332b54b9a3a05b7004579821656e9c5fbb7d96607df713de3660519000747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
72 "tcId" : 7
73 },
74 {
75 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
76 "message" : "48656c6c6f",
77 "result" : "invalid",
78 "sig" : "48454515ccd4ab485c5fa48ffba867de145f58fb92b1a6a9697c81a7c265f912747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
79 "tcId" : 8
80 },
81 {
82 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
83 "message" : "48656c6c6f",
84 "result" : "invalid",
85 "sig" : "01b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f00747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
86 "tcId" : 9
87 },
88 {
89 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
90 "message" : "48656c6c6f",
91 "result" : "invalid",
92 "sig" : "48454516ccd4ab475c5fa48ffba867de57785e4deb9a082475c2b6e4c602d3c1747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
93 "tcId" : 10
94 },
95 {
96 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
97 "message" : "48656c6c6f",
98 "result" : "invalid",
99 "sig" : "00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f01747291dc2f3f44b07ace68ea33431d6f51cb136eadbe85e7798724b72ec4121f",
100 "tcId" : 11
101 },
102 {
103 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
104 "message" : "48656c6c6f",
105 "result" : "invalid",
106 "sig" : "00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f01747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce",
107 "tcId" : 12
108 },
109 {
110 "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group",
111 "message" : "48656c6c6f",
112 "result" : "invalid",
113 "sig" : "b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f8b8d6e22d0c0bb5085319715ccbce2906b1be73ef959189d7a32a60bcd9f1332",
114 "tcId" : 13
115 },
116 {
117 "comment" : "Signatures with special case values for r and s.",
118 "message" : "48656c6c6f",
119 "result" : "invalid",
120 "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
121 "tcId" : 14
122 },
123 {
124 "comment" : "Signatures with special case values for r and s.",
125 "message" : "48656c6c6f",
126 "result" : "invalid",
127 "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
128 "tcId" : 15
129 },
130 {
131 "comment" : "Signatures with special case values for r and s.",
132 "message" : "48656c6c6f",
133 "result" : "invalid",
134 "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
135 "tcId" : 16
136 },
137 {
138 "comment" : "Signatures with special case values for r and s.",
139 "message" : "48656c6c6f",
140 "result" : "invalid",
141 "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
142 "tcId" : 17
143 },
144 {
145 "comment" : "Signatures with special case values for r and s.",
146 "message" : "48656c6c6f",
147 "result" : "invalid",
148 "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
149 "tcId" : 18
150 },
151 {
152 "comment" : "Signatures with special case values for r and s.",
153 "message" : "48656c6c6f",
154 "result" : "invalid",
155 "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
156 "tcId" : 19
157 },
158 {
159 "comment" : "Signatures with special case values for r and s.",
160 "message" : "48656c6c6f",
161 "result" : "invalid",
162 "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000001000000000000000000000000",
163 "tcId" : 20
164 },
165 {
166 "comment" : "Signatures with special case values for r and s.",
167 "message" : "48656c6c6f",
168 "result" : "invalid",
169 "sig" : "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000",
170 "tcId" : 21
171 },
172 {
173 "comment" : "Signatures with special case values for r and s.",
174 "message" : "48656c6c6f",
175 "result" : "invalid",
176 "sig" : "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001",
177 "tcId" : 22
178 },
179 {
180 "comment" : "Signatures with special case values for r and s.",
181 "message" : "48656c6c6f",
182 "result" : "invalid",
183 "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
184 "tcId" : 23
185 },
186 {
187 "comment" : "Signatures with special case values for r and s.",
188 "message" : "48656c6c6f",
189 "result" : "invalid",
190 "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
191 "tcId" : 24
192 },
193 {
194 "comment" : "Signatures with special case values for r and s.",
195 "message" : "48656c6c6f",
196 "result" : "invalid",
197 "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
198 "tcId" : 25
199 },
200 {
201 "comment" : "Signatures with special case values for r and s.",
202 "message" : "48656c6c6f",
203 "result" : "invalid",
204 "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
205 "tcId" : 26
206 },
207 {
208 "comment" : "Signatures with special case values for r and s.",
209 "message" : "48656c6c6f",
210 "result" : "invalid",
211 "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000001000000000000000000000000",
212 "tcId" : 27
213 },
214 {
215 "comment" : "Signatures with special case values for r and s.",
216 "message" : "48656c6c6f",
217 "result" : "invalid",
218 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510000000000000000000000000000000000000000000000000000000000000000",
219 "tcId" : 28
220 },
221 {
222 "comment" : "Signatures with special case values for r and s.",
223 "message" : "48656c6c6f",
224 "result" : "invalid",
225 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510000000000000000000000000000000000000000000000000000000000000001",
226 "tcId" : 29
227 },
228 {
229 "comment" : "Signatures with special case values for r and s.",
230 "message" : "48656c6c6f",
231 "result" : "invalid",
232 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
233 "tcId" : 30
234 },
235 {
236 "comment" : "Signatures with special case values for r and s.",
237 "message" : "48656c6c6f",
238 "result" : "invalid",
239 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
240 "tcId" : 31
241 },
242 {
243 "comment" : "Signatures with special case values for r and s.",
244 "message" : "48656c6c6f",
245 "result" : "invalid",
246 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
247 "tcId" : 32
248 },
249 {
250 "comment" : "Signatures with special case values for r and s.",
251 "message" : "48656c6c6f",
252 "result" : "invalid",
253 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
254 "tcId" : 33
255 },
256 {
257 "comment" : "Signatures with special case values for r and s.",
258 "message" : "48656c6c6f",
259 "result" : "invalid",
260 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000001000000000000000000000000",
261 "tcId" : 34
262 },
263 {
264 "comment" : "Signatures with special case values for r and s.",
265 "message" : "48656c6c6f",
266 "result" : "invalid",
267 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500000000000000000000000000000000000000000000000000000000000000000",
268 "tcId" : 35
269 },
270 {
271 "comment" : "Signatures with special case values for r and s.",
272 "message" : "48656c6c6f",
273 "result" : "invalid",
274 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500000000000000000000000000000000000000000000000000000000000000001",
275 "tcId" : 36
276 },
277 {
278 "comment" : "Signatures with special case values for r and s.",
279 "message" : "48656c6c6f",
280 "result" : "invalid",
281 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
282 "tcId" : 37
283 },
284 {
285 "comment" : "Signatures with special case values for r and s.",
286 "message" : "48656c6c6f",
287 "result" : "invalid",
288 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
289 "tcId" : 38
290 },
291 {
292 "comment" : "Signatures with special case values for r and s.",
293 "message" : "48656c6c6f",
294 "result" : "invalid",
295 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
296 "tcId" : 39
297 },
298 {
299 "comment" : "Signatures with special case values for r and s.",
300 "message" : "48656c6c6f",
301 "result" : "invalid",
302 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
303 "tcId" : 40
304 },
305 {
306 "comment" : "Signatures with special case values for r and s.",
307 "message" : "48656c6c6f",
308 "result" : "invalid",
309 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000001000000000000000000000000",
310 "tcId" : 41
311 },
312 {
313 "comment" : "Signatures with special case values for r and s.",
314 "message" : "48656c6c6f",
315 "result" : "invalid",
316 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520000000000000000000000000000000000000000000000000000000000000000",
317 "tcId" : 42
318 },
319 {
320 "comment" : "Signatures with special case values for r and s.",
321 "message" : "48656c6c6f",
322 "result" : "invalid",
323 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520000000000000000000000000000000000000000000000000000000000000001",
324 "tcId" : 43
325 },
326 {
327 "comment" : "Signatures with special case values for r and s.",
328 "message" : "48656c6c6f",
329 "result" : "invalid",
330 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
331 "tcId" : 44
332 },
333 {
334 "comment" : "Signatures with special case values for r and s.",
335 "message" : "48656c6c6f",
336 "result" : "invalid",
337 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
338 "tcId" : 45
339 },
340 {
341 "comment" : "Signatures with special case values for r and s.",
342 "message" : "48656c6c6f",
343 "result" : "invalid",
344 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
345 "tcId" : 46
346 },
347 {
348 "comment" : "Signatures with special case values for r and s.",
349 "message" : "48656c6c6f",
350 "result" : "invalid",
351 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
352 "tcId" : 47
353 },
354 {
355 "comment" : "Signatures with special case values for r and s.",
356 "message" : "48656c6c6f",
357 "result" : "invalid",
358 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000001000000000000000000000000",
359 "tcId" : 48
360 },
361 {
362 "comment" : "Signatures with special case values for r and s.",
363 "message" : "48656c6c6f",
364 "result" : "invalid",
365 "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000",
366 "tcId" : 49
367 },
368 {
369 "comment" : "Signatures with special case values for r and s.",
370 "message" : "48656c6c6f",
371 "result" : "invalid",
372 "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000001",
373 "tcId" : 50
374 },
375 {
376 "comment" : "Signatures with special case values for r and s.",
377 "message" : "48656c6c6f",
378 "result" : "invalid",
379 "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
380 "tcId" : 51
381 },
382 {
383 "comment" : "Signatures with special case values for r and s.",
384 "message" : "48656c6c6f",
385 "result" : "invalid",
386 "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
387 "tcId" : 52
388 },
389 {
390 "comment" : "Signatures with special case values for r and s.",
391 "message" : "48656c6c6f",
392 "result" : "invalid",
393 "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
394 "tcId" : 53
395 },
396 {
397 "comment" : "Signatures with special case values for r and s.",
398 "message" : "48656c6c6f",
399 "result" : "invalid",
400 "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
401 "tcId" : 54
402 },
403 {
404 "comment" : "Signatures with special case values for r and s.",
405 "message" : "48656c6c6f",
406 "result" : "invalid",
407 "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000001000000000000000000000000",
408 "tcId" : 55
409 },
410 {
411 "comment" : "Signatures with special case values for r and s.",
412 "message" : "48656c6c6f",
413 "result" : "invalid",
414 "sig" : "ffffffff000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
415 "tcId" : 56
416 },
417 {
418 "comment" : "Signatures with special case values for r and s.",
419 "message" : "48656c6c6f",
420 "result" : "invalid",
421 "sig" : "ffffffff000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
422 "tcId" : 57
423 },
424 {
425 "comment" : "Signatures with special case values for r and s.",
426 "message" : "48656c6c6f",
427 "result" : "invalid",
428 "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
429 "tcId" : 58
430 },
431 {
432 "comment" : "Signatures with special case values for r and s.",
433 "message" : "48656c6c6f",
434 "result" : "invalid",
435 "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550",
436 "tcId" : 59
437 },
438 {
439 "comment" : "Signatures with special case values for r and s.",
440 "message" : "48656c6c6f",
441 "result" : "invalid",
442 "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
443 "tcId" : 60
444 },
445 {
446 "comment" : "Signatures with special case values for r and s.",
447 "message" : "48656c6c6f",
448 "result" : "invalid",
449 "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
450 "tcId" : 61
451 },
452 {
453 "comment" : "Signatures with special case values for r and s.",
454 "message" : "48656c6c6f",
455 "result" : "invalid",
456 "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000001000000000000000000000000",
457 "tcId" : 62
458 }
459 ]
460 },
461 {
462 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926",
463 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1wXRb4CYfi2bGmlX0pziL+v30Q+l\nFRUxgkFcg2G6rKSx/BBe5c6A1RTsEji+riA3pvg2JVk2INRggZ6GghYJJg==\n-----END PUBLIC KEY-----",
464 "sha" : "SHA-256",
465 "type" : "ECDSAVer",
466 "jwk" : {
467 "crv" : "P-256",
468 "kid" : "none",
469 "kty" : "EC",
470 "x" : "1wXRb4CYfi2bGmlX0pziL-v30Q-lFRUxgkFcg2G6rKQ",
471 "y" : "sfwQXuXOgNUU7BI4vq4gN6b4NiVZNiDUYIGehoIWCSY"
472 },
473 "key" : {
474 "curve" : "secp256r1",
475 "keySize" : 256,
476 "type" : "ECPublicKey",
477 "wx" : "0d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4",
478 "wy" : "0b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926"
479 },
480 "tests" : [
481 {
482 "comment" : "k*G has a large x-coordinate",
483 "message" : "54657374",
484 "result" : "valid",
485 "sig" : "000000000000000000000000000000004319055358e8617b0c46353d039cdaabffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e",
486 "tcId" : 63
487 }
488 ]
489 },
490 {
491 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926",
492 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1wXRb4CYfi2bGmlX0pziL+v30Q+l\nFRUxgkFcg2G6rKSx/BBe5c6A1RTsEji+riA3pvg2JVk2INRggZ6GghYJJg==\n-----END PUBLIC KEY-----",
493 "sha" : "SHA-256",
494 "type" : "ECDSAVer",
495 "jwk" : {
496 "crv" : "P-256",
497 "kid" : "none",
498 "kty" : "EC",
499 "x" : "1wXRb4CYfi2bGmlX0pziL-v30Q-lFRUxgkFcg2G6rKQ",
500 "y" : "sfwQXuXOgNUU7BI4vq4gN6b4NiVZNiDUYIGehoIWCSY"
501 },
502 "key" : {
503 "curve" : "secp256r1",
504 "keySize" : 256,
505 "type" : "ECPublicKey",
506 "wx" : "0d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4",
507 "wy" : "0b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926"
508 },
509 "tests" : [
510 {
511 "comment" : "r too large",
512 "message" : "54657374",
513 "result" : "invalid",
514 "sig" : "ffffffff00000001000000000000000000000000fffffffffffffffffffffffcffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e",
515 "tcId" : 64
516 }
517 ]
518 },
519 {
520 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d",
521 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPNjS+B1pU7CETAnXtWDVJ80u9nBW\niT6tr6UshQE4fVnuQf200QQCznoMXjt0et+jpJC2Kmt3GQaJA0hcC7bcLQ==\n-----END PUBLIC KEY-----",
522 "sha" : "SHA-256",
523 "type" : "ECDSAVer",
524 "jwk" : {
525 "crv" : "P-256",
526 "kid" : "none",
527 "kty" : "EC",
528 "x" : "PNjS-B1pU7CETAnXtWDVJ80u9nBWiT6tr6UshQE4fVk",
529 "y" : "7kH9tNEEAs56DF47dHrfo6SQtiprdxkGiQNIXAu23C0"
530 },
531 "key" : {
532 "curve" : "secp256r1",
533 "keySize" : 256,
534 "type" : "ECPublicKey",
535 "wx" : "3cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59",
536 "wy" : "0ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d"
537 },
538 "tests" : [
539 {
540 "comment" : "r,s are large",
541 "message" : "54657374",
542 "result" : "valid",
543 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e",
544 "tcId" : 65
545 }
546 ]
547 },
548 {
549 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0",
550 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----",
551 "sha" : "SHA-256",
552 "type" : "ECDSAVer",
553 "jwk" : {
554 "crv" : "P-256",
555 "kid" : "none",
556 "kty" : "EC",
557 "x" : "SgPvn5LrJoyvpgEHJImlY4D6DcQxcddxKBOzoZoeteU",
558 "y" : "PiE-KKYIzpovShf9gwxmVAGKebPgJj2RqLqQYi328vA"
559 },
560 "key" : {
561 "curve" : "secp256r1",
562 "keySize" : 256,
563 "type" : "ECPublicKey",
564 "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5",
565 "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0"
566 },
567 "tests" : [
568 {
569 "comment" : "small r and s",
570 "message" : "54657374",
571 "result" : "valid",
572 "sig" : "00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001",
573 "tcId" : 66
574 },
575 {
576 "comment" : "incorrect size of signature",
577 "message" : "54657374",
578 "result" : "acceptable",
579 "sig" : "0501",
580 "tcId" : 67
581 }
582 ]
583 },
584 {
585 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0",
586 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----",
587 "sha" : "SHA-256",
588 "type" : "ECDSAVer",
589 "jwk" : {
590 "crv" : "P-256",
591 "kid" : "none",
592 "kty" : "EC",
593 "x" : "SgPvn5LrJoyvpgEHJImlY4D6DcQxcddxKBOzoZoeteU",
594 "y" : "PiE-KKYIzpovShf9gwxmVAGKebPgJj2RqLqQYi328vA"
595 },
596 "key" : {
597 "curve" : "secp256r1",
598 "keySize" : 256,
599 "type" : "ECPublicKey",
600 "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5",
601 "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0"
602 },
603 "tests" : [
604 {
605 "comment" : "r is larger than n",
606 "message" : "54657374",
607 "result" : "invalid",
608 "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325560000000000000000000000000000000000000000000000000000000000000001",
609 "tcId" : 68
610 }
611 ]
612 },
613 {
614 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0",
615 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----",
616 "sha" : "SHA-256",
617 "type" : "ECDSAVer",
618 "jwk" : {
619 "crv" : "P-256",
620 "kid" : "none",
621 "kty" : "EC",
622 "x" : "SgPvn5LrJoyvpgEHJImlY4D6DcQxcddxKBOzoZoeteU",
623 "y" : "PiE-KKYIzpovShf9gwxmVAGKebPgJj2RqLqQYi328vA"
624 },
625 "key" : {
626 "curve" : "secp256r1",
627 "keySize" : 256,
628 "type" : "ECPublicKey",
629 "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5",
630 "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0"
631 },
632 "tests" : [
633 {
634 "comment" : "s is larger than n",
635 "message" : "54657374",
636 "result" : "invalid",
637 "sig" : "0000000000000000000000000000000000000000000000000000000000000005ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552",
638 "tcId" : 69
639 }
640 ]
641 },
642 {
643 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de04503434383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996",
644 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAgNzb8sZixXY16DID2bd3RUlkkCq\neNCKrmfEZ94EUDQ0ODQ41QQeqaOH7o5NToS0RxsWDGvPJWiwcvjyDoeplg==\n-----END PUBLIC KEY-----",
645 "sha" : "SHA-256",
646 "type" : "ECDSAVer",
647 "jwk" : {
648 "crv" : "P-256",
649 "kid" : "none",
650 "kty" : "EC",
651 "x" : "AgNzb8sZixXY16DID2bd3RUlkkCqeNCKrmfEZ94EUDQ",
652 "y" : "NDg0ONUEHqmjh-6OTU6EtEcbFgxrzyVosHL48g6HqZY"
653 },
654 "key" : {
655 "curve" : "secp256r1",
656 "keySize" : 256,
657 "type" : "ECPublicKey",
658 "wx" : "203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de045034",
659 "wy" : "34383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996"
660 },
661 "tests" : [
662 {
663 "comment" : "point at infinity during verify",
664 "message" : "54657374",
665 "result" : "invalid",
666 "sig" : "7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8555555550000000055555555555555553ef7a8e48d07df81a693439654210c70",
667 "tcId" : 70
668 }
669 ]
670 },
671 {
672 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6",
673 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoX9bdaNe1kYjyly/H5GVEpLbDCPw\nwuokw9DK0JiMq8CDp6YYYlwiiUBzC0+j7mT67Lsvwg/d58WLOj9jAEJNxg==\n-----END PUBLIC KEY-----",
674 "sha" : "SHA-256",
675 "type" : "ECDSAVer",
676 "jwk" : {
677 "crv" : "P-256",
678 "kid" : "none",
679 "kty" : "EC",
680 "x" : "oX9bdaNe1kYjyly_H5GVEpLbDCPwwuokw9DK0JiMq8A",
681 "y" : "g6emGGJcIolAcwtPo-5k-uy7L8IP3efFizo_YwBCTcY"
682 },
683 "key" : {
684 "curve" : "secp256r1",
685 "keySize" : 256,
686 "type" : "ECPublicKey",
687 "wx" : "0a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc0",
688 "wy" : "083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6"
689 },
690 "tests" : [
691 {
692 "comment" : "u1 == 1",
693 "message" : "54657374",
694 "result" : "valid",
695 "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
696 "tcId" : 71
697 }
698 ]
699 },
700 {
701 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c31f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62",
702 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBLoMuikaN9sT8zv5DatijATsg5Og\nIAQZ6eqh68yftcMfOgoOaCOkm2Ja1XsSoy1AR5cPw0KPDwBJ7PQmXcEvYg==\n-----END PUBLIC KEY-----",
703 "sha" : "SHA-256",
704 "type" : "ECDSAVer",
705 "jwk" : {
706 "crv" : "P-256",
707 "kid" : "none",
708 "kty" : "EC",
709 "x" : "BLoMuikaN9sT8zv5DatijATsg5OgIAQZ6eqh68yftcM",
710 "y" : "HzoKDmgjpJtiWtV7EqMtQEeXD8NCjw8ASez0Jl3BL2I"
711 },
712 "key" : {
713 "curve" : "secp256r1",
714 "keySize" : 256,
715 "type" : "ECPublicKey",
716 "wx" : "4ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c3",
717 "wy" : "1f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62"
718 },
719 "tests" : [
720 {
721 "comment" : "u1 == n - 1",
722 "message" : "54657374",
723 "result" : "valid",
724 "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c",
725 "tcId" : 72
726 }
727 ]
728 },
729 {
730 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900efa1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716",
731 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaStsgo4P7tY9iuqitzIvnMvocjoe\n058inyBKQ0uJAO+h9varyzjqO4/eOLmMfCcfJ0r1aoxWKNwzKQaa5N1XFg==\n-----END PUBLIC KEY-----",
732 "sha" : "SHA-256",
733 "type" : "ECDSAVer",
734 "jwk" : {
735 "crv" : "P-256",
736 "kid" : "none",
737 "kty" : "EC",
738 "x" : "aStsgo4P7tY9iuqitzIvnMvocjoe058inyBKQ0uJAO8",
739 "y" : "ofb2q8s46juP3ji5jHwnHydK9WqMVijcMykGmuTdVxY"
740 },
741 "key" : {
742 "curve" : "secp256r1",
743 "keySize" : 256,
744 "type" : "ECPublicKey",
745 "wx" : "692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900ef",
746 "wy" : "0a1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716"
747 },
748 "tests" : [
749 {
750 "comment" : "u2 == 1",
751 "message" : "54657374",
752 "result" : "valid",
753 "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70555555550000000055555555555555553ef7a8e48d07df81a693439654210c70",
754 "tcId" : 73
755 }
756 ]
757 },
758 {
759 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1",
760 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAM79kWLRPmTLk2h6nNj5dV67Wj73\nYy+AD4SHGHTM7wlUPsvq9+gETvchvi+19UnkuEgNJYdATr99u+8sVLwMsQ==\n-----END PUBLIC KEY-----",
761 "sha" : "SHA-256",
762 "type" : "ECDSAVer",
763 "jwk" : {
764 "crv" : "P-256",
765 "kid" : "none",
766 "kty" : "EC",
767 "x" : "AM79kWLRPmTLk2h6nNj5dV67Wj73Yy-AD4SHGHTM7wk",
768 "y" : "VD7L6vfoBE73Ib4vtfVJ5LhIDSWHQE6_fbvvLFS8DLE"
769 },
770 "key" : {
771 "curve" : "secp256r1",
772 "keySize" : 256,
773 "type" : "ECPublicKey",
774 "wx" : "0cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09",
775 "wy" : "543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1"
776 },
777 "tests" : [
778 {
779 "comment" : "u2 == n - 1",
780 "message" : "54657374",
781 "result" : "valid",
782 "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1",
783 "tcId" : 74
784 }
785 ]
786 },
787 {
788 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd",
789 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI34qlk/ADTd6hZK4thqvp6Sqp8e5/StB1uDhe9G6VnftzQ==\n-----END PUBLIC KEY-----",
790 "sha" : "SHA-256",
791 "type" : "ECDSAVer",
792 "jwk" : {
793 "crv" : "P-256",
794 "kid" : "none",
795 "kty" : "EC",
796 "x" : "AVgTd1W5AfeXqQ1MqIh-Ajyy72OyuiwNRV7a70LPI34",
797 "y" : "KpZPwA03eoWSuLYar6ekqqfHuf0rQdbg4XvRulZ37c0"
798 },
799 "key" : {
800 "curve" : "secp256r1",
801 "keySize" : 256,
802 "type" : "ECPublicKey",
803 "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e",
804 "wy" : "2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd"
805 },
806 "tests" : [
807 {
808 "comment" : "weak key",
809 "message" : "54657374",
810 "result" : "valid",
811 "sig" : "6f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8",
812 "tcId" : 75
813 }
814 ]
815 },
816 {
817 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237ed569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232",
818 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI37VabA+8siFe21HSeVQWFtVWDhGA9S+KR8ehC5FqYgSMg==\n-----END PUBLIC KEY-----",
819 "sha" : "SHA-256",
820 "type" : "ECDSAVer",
821 "jwk" : {
822 "crv" : "P-256",
823 "kid" : "none",
824 "kty" : "EC",
825 "x" : "AVgTd1W5AfeXqQ1MqIh-Ajyy72OyuiwNRV7a70LPI34",
826 "y" : "1WmwPvLIhXttR0nlUFhbVVg4RgPUvikfHoQuRamIEjI"
827 },
828 "key" : {
829 "curve" : "secp256r1",
830 "keySize" : 256,
831 "type" : "ECPublicKey",
832 "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e",
833 "wy" : "0d569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232"
834 },
835 "tests" : [
836 {
837 "comment" : "duplication bug",
838 "message" : "54657374",
839 "result" : "invalid",
840 "sig" : "6f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8",
841 "tcId" : 76
842 }
843 ]
844 },
845 {
846 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004011d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f3500a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e",
847 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBHS/JlN8gS2PwWuhCDKOQVZuAxJiO\n9jm5XEaeXLJM8hZUDL68RwvKoEZmEtvebQMJjGmW4KBfApAhg866S1MPTzUAqZ5M\n3IpQwNmNhwlE5WVI3Ez2u789aXjvvI/Id4sz4TLSwYXCCETPPfOU1SIlkxfjkx8B\nMPI/ZQDIgPOoMZq0Sg4=\n-----END PUBLIC KEY-----",
848 "sha" : "SHA-512",
849 "type" : "ECDSAVer",
850 "jwk" : {
851 "crv" : "P-521",
852 "kid" : "none",
853 "kty" : "EC",
854 "x" : "AR0vyZTfIEtj8FroQgyjkFWbgMSYjvY5uVxGnlyyTPIWVAy-vEcLyqBGZhLb3m0DCYxpluCgXwKQIYPOuktTD081",
855 "y" : "AKmeTNyKUMDZjYcJROVlSNxM9ru_PWl477yPyHeLM-Ey0sGFwghEzz3zlNUiJZMX45MfATDyP2UAyIDzqDGatEoO"
856 },
857 "key" : {
858 "curve" : "secp521r1",
859 "keySize" : 521,
860 "type" : "ECPublicKey",
861 "wx" : "11d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f35",
862 "wy" : "0a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e"
863 },
864 "tests" : [
865 {
866 "comment" : "k*G has a large x-coordinate",
867 "message" : "54657374",
868 "result" : "valid",
869 "sig" : "00000000000000000000000000000000000000000000000000000000000000000005ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf501fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406",
870 "tcId" : 77
871 }
872 ]
873 },
874 {
875 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004011d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f3500a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e",
876 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBHS/JlN8gS2PwWuhCDKOQVZuAxJiO\n9jm5XEaeXLJM8hZUDL68RwvKoEZmEtvebQMJjGmW4KBfApAhg866S1MPTzUAqZ5M\n3IpQwNmNhwlE5WVI3Ez2u789aXjvvI/Id4sz4TLSwYXCCETPPfOU1SIlkxfjkx8B\nMPI/ZQDIgPOoMZq0Sg4=\n-----END PUBLIC KEY-----",
877 "sha" : "SHA-512",
878 "type" : "ECDSAVer",
879 "jwk" : {
880 "crv" : "P-521",
881 "kid" : "none",
882 "kty" : "EC",
883 "x" : "AR0vyZTfIEtj8FroQgyjkFWbgMSYjvY5uVxGnlyyTPIWVAy-vEcLyqBGZhLb3m0DCYxpluCgXwKQIYPOuktTD081",
884 "y" : "AKmeTNyKUMDZjYcJROVlSNxM9ru_PWl477yPyHeLM-Ey0sGFwghEzz3zlNUiJZMX45MfATDyP2UAyIDzqDGatEoO"
885 },
886 "key" : {
887 "curve" : "secp521r1",
888 "keySize" : 521,
889 "type" : "ECPublicKey",
890 "wx" : "11d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f35",
891 "wy" : "0a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e"
892 },
893 "tests" : [
894 {
895 "comment" : "r too large",
896 "message" : "54657374",
897 "result" : "invalid",
898 "sig" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406",
899 "tcId" : 78
900 }
901 ]
902 },
903 {
904 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004019a029c77fed04cab1ab8937fda8128fc19bf8c41a8f242f6a9ca6f0ae813c1709b8b03e26a9298fe59f99e3706ffc28c43d26a11690d2ffd815a33ea329076697800125b2a4b635f514fd5d63215672f311ae5935c1774ed5d8a44897b68191e6369ab26df915e2066a943e59a3577319dac5a86640bc8c718d2b159479fdd22d11441",
905 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBmgKcd/7QTKsauJN/2oEo/Bm/jEGo\n8kL2qcpvCugTwXCbiwPiapKY/ln5njcG/8KMQ9JqEWkNL/2BWjPqMpB2aXgAElsq\nS2NfUU/V1jIVZy8xGuWTXBd07V2KRIl7aBkeY2mrJt+RXiBmqUPlmjV3MZ2sWoZk\nC8jHGNKxWUef3SLRFEE=\n-----END PUBLIC KEY-----",
906 "sha" : "SHA-512",
907 "type" : "ECDSAVer",
908 "jwk" : {
909 "crv" : "P-521",
910 "kid" : "none",
911 "kty" : "EC",
912 "x" : "AZoCnHf-0EyrGriTf9qBKPwZv4xBqPJC9qnKbwroE8Fwm4sD4mqSmP5Z-Z43Bv_CjEPSahFpDS_9gVoz6jKQdml4",
913 "y" : "ABJbKktjX1FP1dYyFWcvMRrlk1wXdO1dikSJe2gZHmNpqybfkV4gZqlD5Zo1dzGdrFqGZAvIxxjSsVlHn90i0RRB"
914 },
915 "key" : {
916 "curve" : "secp521r1",
917 "keySize" : 521,
918 "type" : "ECPublicKey",
919 "wx" : "19a029c77fed04cab1ab8937fda8128fc19bf8c41a8f242f6a9ca6f0ae813c1709b8b03e26a9298fe59f99e3706ffc28c43d26a11690d2ffd815a33ea3290766978",
920 "wy" : "125b2a4b635f514fd5d63215672f311ae5935c1774ed5d8a44897b68191e6369ab26df915e2066a943e59a3577319dac5a86640bc8c718d2b159479fdd22d11441"
921 },
922 "tests" : [
923 {
924 "comment" : "r,s are large",
925 "message" : "54657374",
926 "result" : "valid",
927 "sig" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640701fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406",
928 "tcId" : 79
929 }
930 ]
931 },
932 {
933 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e99900a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab",
934 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAX1BZMINJ+eu7TRxVwK/M9iFi7B3R\nLvPtkGZWkk/9mcq58GsOshjP8HikZ3pc4cwHZSvJdq78cywo9n7weKQ06ZkApdFN\n8xBjDXbsA8tvm5W/GiJDgQXIjNn9PayA+Fet04Jx2LqQFoSybUNtSoWa1M2l6Wd7\nc8qz8+XkGj15lmByeas=\n-----END PUBLIC KEY-----",
935 "sha" : "SHA-512",
936 "type" : "ECDSAVer",
937 "jwk" : {
938 "crv" : "P-521",
939 "kid" : "none",
940 "kty" : "EC",
941 "x" : "AF9QWTCDSfnru00cVcCvzPYhYuwd0S7z7ZBmVpJP_ZnKufBrDrIYz_B4pGd6XOHMB2UryXau_HMsKPZ-8HikNOmZ",
942 "y" : "AKXRTfMQYw127APLb5uVvxoiQ4EFyIzZ_T2sgPhXrdOCcdi6kBaEsm1DbUqFmtTNpelne3PKs_Pl5Bo9eZZgcnmr"
943 },
944 "key" : {
945 "curve" : "secp521r1",
946 "keySize" : 521,
947 "type" : "ECPublicKey",
948 "wx" : "5f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e999",
949 "wy" : "0a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab"
950 },
951 "tests" : [
952 {
953 "comment" : "small r and s",
954 "message" : "54657374",
955 "result" : "valid",
956 "sig" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
957 "tcId" : 80
958 },
959 {
960 "comment" : "incorrect size of signature",
961 "message" : "54657374",
962 "result" : "acceptable",
963 "sig" : "0101",
964 "tcId" : 81
965 }
966 ]
967 },
968 {
969 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e99900a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab",
970 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAX1BZMINJ+eu7TRxVwK/M9iFi7B3R\nLvPtkGZWkk/9mcq58GsOshjP8HikZ3pc4cwHZSvJdq78cywo9n7weKQ06ZkApdFN\n8xBjDXbsA8tvm5W/GiJDgQXIjNn9PayA+Fet04Jx2LqQFoSybUNtSoWa1M2l6Wd7\nc8qz8+XkGj15lmByeas=\n-----END PUBLIC KEY-----",
971 "sha" : "SHA-512",
972 "type" : "ECDSAVer",
973 "jwk" : {
974 "crv" : "P-521",
975 "kid" : "none",
976 "kty" : "EC",
977 "x" : "AF9QWTCDSfnru00cVcCvzPYhYuwd0S7z7ZBmVpJP_ZnKufBrDrIYz_B4pGd6XOHMB2UryXau_HMsKPZ-8HikNOmZ",
978 "y" : "AKXRTfMQYw127APLb5uVvxoiQ4EFyIzZ_T2sgPhXrdOCcdi6kBaEsm1DbUqFmtTNpelne3PKs_Pl5Bo9eZZgcnmr"
979 },
980 "key" : {
981 "curve" : "secp521r1",
982 "keySize" : 521,
983 "type" : "ECPublicKey",
984 "wx" : "5f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e999",
985 "wy" : "0a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab"
986 },
987 "tests" : [
988 {
989 "comment" : "r is larger than n",
990 "message" : "54657374",
991 "result" : "invalid",
992 "sig" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
993 "tcId" : 82
994 }
995 ]
996 },
997 {
998 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e99900a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab",
999 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAX1BZMINJ+eu7TRxVwK/M9iFi7B3R\nLvPtkGZWkk/9mcq58GsOshjP8HikZ3pc4cwHZSvJdq78cywo9n7weKQ06ZkApdFN\n8xBjDXbsA8tvm5W/GiJDgQXIjNn9PayA+Fet04Jx2LqQFoSybUNtSoWa1M2l6Wd7\nc8qz8+XkGj15lmByeas=\n-----END PUBLIC KEY-----",
1000 "sha" : "SHA-512",
1001 "type" : "ECDSAVer",
1002 "jwk" : {
1003 "crv" : "P-521",
1004 "kid" : "none",
1005 "kty" : "EC",
1006 "x" : "AF9QWTCDSfnru00cVcCvzPYhYuwd0S7z7ZBmVpJP_ZnKufBrDrIYz_B4pGd6XOHMB2UryXau_HMsKPZ-8HikNOmZ",
1007 "y" : "AKXRTfMQYw127APLb5uVvxoiQ4EFyIzZ_T2sgPhXrdOCcdi6kBaEsm1DbUqFmtTNpelne3PKs_Pl5Bo9eZZgcnmr"
1008 },
1009 "key" : {
1010 "curve" : "secp521r1",
1011 "keySize" : 521,
1012 "type" : "ECPublicKey",
1013 "wx" : "5f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e999",
1014 "wy" : "0a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab"
1015 },
1016 "tests" : [
1017 {
1018 "comment" : "s is larger than n",
1019 "message" : "54657374",
1020 "result" : "invalid",
1021 "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a",
1022 "tcId" : 83
1023 }
1024 ]
1025 },
1026 {
1027 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004013b73be0ec4f18b36fdc20aac9675580a20cc725ed0de6fea63ab6111b4aaecc69b1fdf05bb1c7a71c4b7a5a1eaaff23be15604f405b5ecd3b3ed6afea8e49cd64900912180c981f480d2b8b7438988b03a0c5efdbd2da094f082f7fa57ecc41fde8c65d3c9d80f34f9124e151da55d96d2a9b991672de79449bcc1c0192b7650ae90b7",
1028 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBO3O+DsTxizb9wgqslnVYCiDMcl7Q\n3m/qY6thEbSq7MabH98Fuxx6ccS3paHqr/I74VYE9AW17NOz7Wr+qOSc1kkAkSGA\nyYH0gNK4t0OJiLA6DF79vS2glPCC9/pX7MQf3oxl08nYDzT5Ek4VHaVdltKpuZFn\nLeeUSbzBwBkrdlCukLc=\n-----END PUBLIC KEY-----",
1029 "sha" : "SHA-512",
1030 "type" : "ECDSAVer",
1031 "jwk" : {
1032 "crv" : "P-521",
1033 "kid" : "none",
1034 "kty" : "EC",
1035 "x" : "ATtzvg7E8Ys2_cIKrJZ1WAogzHJe0N5v6mOrYRG0quzGmx_fBbscenHEt6Wh6q_yO-FWBPQFtezTs-1q_qjknNZJ",
1036 "y" : "AJEhgMmB9IDSuLdDiYiwOgxe_b0toJTwgvf6V-zEH96MZdPJ2A80-RJOFR2lXZbSqbmRZy3nlEm8wcAZK3ZQrpC3"
1037 },
1038 "key" : {
1039 "curve" : "secp521r1",
1040 "keySize" : 521,
1041 "type" : "ECPublicKey",
1042 "wx" : "13b73be0ec4f18b36fdc20aac9675580a20cc725ed0de6fea63ab6111b4aaecc69b1fdf05bb1c7a71c4b7a5a1eaaff23be15604f405b5ecd3b3ed6afea8e49cd649",
1043 "wy" : "0912180c981f480d2b8b7438988b03a0c5efdbd2da094f082f7fa57ecc41fde8c65d3c9d80f34f9124e151da55d96d2a9b991672de79449bcc1c0192b7650ae90b7"
1044 },
1045 "tests" : [
1046 {
1047 "comment" : "point at infinity during verify",
1048 "message" : "54657374",
1049 "result" : "invalid",
1050 "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c320400aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad",
1051 "tcId" : 84
1052 }
1053 ]
1054 },
1055 {
1056 "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401c01eab9ba6ddd21e33421034acd6ac923a409fab349e0380bfaa54b404890086a5e12fb09e1352712cfde15abc2563079a73d333c9c79c670fb06b5d802aa9b77600a76a28d03f657c61bf87ff78e7733a069556d2bd638b79316ab70b5a2809bc8a98a2a843238d4abe2698b2aa6aede1b2541bf3dcd007cf9cd5c4d4969c4f7ffccb",
1057 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBwB6rm6bd0h4zQhA0rNaskjpAn6s0\nngOAv6pUtASJAIal4S+wnhNScSz94Vq8JWMHmnPTM8nHnGcPsGtdgCqpt3YAp2oo\n0D9lfGG/h/9453M6BpVW0r1ji3kxarcLWigJvIqYoqhDI41KviaYsqpq7eGyVBvz\n3NAHz5zVxNSWnE9//Ms=\n-----END PUBLIC KEY-----",
1058 "sha" : "SHA-512",
1059 "type" : "ECDSAVer",
1060 "jwk" : {
1061 "crv" : "P-521",
1062 "kid" : "none",
1063 "kty" : "EC",
1064 "x" : "AcAeq5um3dIeM0IQNKzWrJI6QJ-rNJ4DgL-qVLQEiQCGpeEvsJ4TUnEs_eFavCVjB5pz0zPJx5xnD7BrXYAqqbd2",
1065 "y" : "AKdqKNA_ZXxhv4f_eOdzOgaVVtK9Y4t5MWq3C1ooCbyKmKKoQyONSr4mmLKqau3hslQb89zQB8-c1cTUlpxPf_zL"
1066 },
1067 "key" : {
1068 "curve" : "secp521r1",
1069 "keySize" : 521,
1070 "type" : "ECPublicKey",
1071 "wx" : "1c01eab9ba6ddd21e33421034acd6ac923a409fab349e0380bfaa54b404890086a5e12fb09e1352712cfde15abc2563079a73d333c9c79c670fb06b5d802aa9b776",
1072 "wy" : "0a76a28d03f657c61bf87ff78e7733a069556d2bd638b79316ab70b5a2809bc8a98a2a843238d4abe2698b2aa6aede1b2541bf3dcd007cf9cd5c4d4969c4f7ffccb"
1073 },
1074 "tests" : [
1075 {
1076 "comment" : "u1 == 1",
1077 "message" : "54657374",
1078 "result" : "valid",
1079 "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad0000c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31",
1080 "tcId" : 85
1081 }
1082 ]
1083 },
1084 {
1085 "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400186365c73588807a51005412db004b45f5f7be3a6074e6119042978dbfbc5a431e16cc930747e6cd7511505b4c9349cedf908a5a9dbd33cdb0aeccbf69454457fb0014620a29a2691d8038d39e1e4de7c4243c8c42601e719945c1297c1a4b10d7415af37bf1ed0ddc9030bce530185dfdfc4658ff635f6bd9660becc8ff9eca4fddfa",
1086 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAGGNlxzWIgHpRAFQS2wBLRfX3vjpg\ndOYRkEKXjb+8WkMeFsyTB0fmzXURUFtMk0nO35CKWp29M82wrsy/aUVEV/sAFGIK\nKaJpHYA4054eTefEJDyMQmAecZlFwSl8GksQ10Fa83vx7Q3ckDC85TAYXf38Rlj/\nY19r2WYL7Mj/nspP3fo=\n-----END PUBLIC KEY-----",
1087 "sha" : "SHA-512",
1088 "type" : "ECDSAVer",
1089 "jwk" : {
1090 "crv" : "P-521",
1091 "kid" : "none",
1092 "kty" : "EC",
1093 "x" : "ABhjZcc1iIB6UQBUEtsAS0X19746YHTmEZBCl42_vFpDHhbMkwdH5s11EVBbTJNJzt-QilqdvTPNsK7Mv2lFRFf7",
1094 "y" : "ABRiCimiaR2AONOeHk3nxCQ8jEJgHnGZRcEpfBpLENdBWvN78e0N3JAwvOUwGF39_EZY_2Nfa9lmC-zI_57KT936"
1095 },
1096 "key" : {
1097 "curve" : "secp521r1",
1098 "keySize" : 521,
1099 "type" : "ECPublicKey",
1100 "wx" : "186365c73588807a51005412db004b45f5f7be3a6074e6119042978dbfbc5a431e16cc930747e6cd7511505b4c9349cedf908a5a9dbd33cdb0aeccbf69454457fb",
1101 "wy" : "14620a29a2691d8038d39e1e4de7c4243c8c42601e719945c1297c1a4b10d7415af37bf1ed0ddc9030bce530185dfdfc4658ff635f6bd9660becc8ff9eca4fddfa"
1102 },
1103 "tests" : [
1104 {
1105 "comment" : "u1 == n - 1",
1106 "message" : "54657374",
1107 "result" : "valid",
1108 "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad01ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43f17ff5a3a22625c72660ac8810da281f2732dfbfcc10768f07e5951e93c3119d63b6b562cd9d8",
1109 "tcId" : 86
1110 }
1111 ]
1112 },
1113 {
1114 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002e2a746b55e05bc130d374c8abb8bf651a2e2b025404f08545befcb95c9f7f681f6f5b9bf2ebc45d4c8572921d3ab5dce144ea5d50ebec89b8c8f010ea31494863008c816f122d5d63b5fea00d1a00ed23577f7ef7d48f3973568353d468368ec77cbc9e3c5012839b74833087d51ba3e680ab5375be680ea8c18f7b619f32b141f281",
1115 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQALip0a1XgW8Ew03TIq7i/ZRouKwJU\nBPCFRb78uVyff2gfb1ub8uvEXUyFcpIdOrXc4UTqXVDr7Im4yPAQ6jFJSGMAjIFv\nEi1dY7X+oA0aAO0jV39+99SPOXNWg1PUaDaOx3y8njxQEoObdIMwh9Ubo+aAq1N1\nvmgOqMGPe2GfMrFB8oE=\n-----END PUBLIC KEY-----",
1116 "sha" : "SHA-512",
1117 "type" : "ECDSAVer",
1118 "jwk" : {
1119 "crv" : "P-521",
1120 "kid" : "none",
1121 "kty" : "EC",
1122 "x" : "AC4qdGtV4FvBMNN0yKu4v2UaLisCVATwhUW-_Llcn39oH29bm_LrxF1MhXKSHTq13OFE6l1Q6-yJuMjwEOoxSUhj",
1123 "y" : "AIyBbxItXWO1_qANGgDtI1d_fvfUjzlzVoNT1Gg2jsd8vJ48UBKDm3SDMIfVG6PmgKtTdb5oDqjBj3thnzKxQfKB"
1124 },
1125 "key" : {
1126 "curve" : "secp521r1",
1127 "keySize" : 521,
1128 "type" : "ECPublicKey",
1129 "wx" : "2e2a746b55e05bc130d374c8abb8bf651a2e2b025404f08545befcb95c9f7f681f6f5b9bf2ebc45d4c8572921d3ab5dce144ea5d50ebec89b8c8f010ea31494863",
1130 "wy" : "08c816f122d5d63b5fea00d1a00ed23577f7ef7d48f3973568353d468368ec77cbc9e3c5012839b74833087d51ba3e680ab5375be680ea8c18f7b619f32b141f281"
1131 },
1132 "tests" : [
1133 {
1134 "comment" : "u2 == 1",
1135 "message" : "54657374",
1136 "result" : "valid",
1137 "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad",
1138 "tcId" : 87
1139 }
1140 ]
1141 },
1142 {
1143 "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400d379f79826b04198df371ab0519d1a7f0a4f199d6149ca8b7f13a5da09cba024fbe7d4ff7fd7a8a93b5cbcaf3c68243f630d47d8f2b652b6a7d6b1c522a75fa9f201c660722d95c83c6b9457944acc671e881e8d17b07362f2f82799456f2f15d662d36aa09d5a5236288d3c1382e3e2308f46867d53c588a370857fae4d32f0a3ddaf",
1144 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA03n3mCawQZjfNxqwUZ0afwpPGZ1h\nScqLfxOl2gnLoCT759T/f9eoqTtcvK88aCQ/Yw1H2PK2Uran1rHFIqdfqfIBxmBy\nLZXIPGuUV5RKzGceiB6NF7BzYvL4J5lFby8V1mLTaqCdWlI2KI08E4Lj4jCPRoZ9\nU8WIo3CFf65NMvCj3a8=\n-----END PUBLIC KEY-----",
1145 "sha" : "SHA-512",
1146 "type" : "ECDSAVer",
1147 "jwk" : {
1148 "crv" : "P-521",
1149 "kid" : "none",
1150 "kty" : "EC",
1151 "x" : "ANN595gmsEGY3zcasFGdGn8KTxmdYUnKi38TpdoJy6Ak--fU_3_XqKk7XLyvPGgkP2MNR9jytlK2p9axxSKnX6ny",
1152 "y" : "AcZgci2VyDxrlFeUSsxnHogejRewc2Ly-CeZRW8vFdZi02qgnVpSNiiNPBOC4-Iwj0aGfVPFiKNwhX-uTTLwo92v"
1153 },
1154 "key" : {
1155 "curve" : "secp521r1",
1156 "keySize" : 521,
1157 "type" : "ECPublicKey",
1158 "wx" : "0d379f79826b04198df371ab0519d1a7f0a4f199d6149ca8b7f13a5da09cba024fbe7d4ff7fd7a8a93b5cbcaf3c68243f630d47d8f2b652b6a7d6b1c522a75fa9f2",
1159 "wy" : "1c660722d95c83c6b9457944acc671e881e8d17b07362f2f82799456f2f15d662d36aa09d5a5236288d3c1382e3e2308f46867d53c588a370857fae4d32f0a3ddaf"
1160 },
1161 "tests" : [
1162 {
1163 "comment" : "u2 == n - 1",
1164 "message" : "54657374",
1165 "result" : "valid",
1166 "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5c",
1167 "tcId" : 88
1168 }
1169 ]
1170 },
1171 {
1172 "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e01690d770806bde9f4d2760293aba6076066f1762e8448f0d08724ef311ff7596f35e8b6a9346de65bea924b9d30bb972e3b38878172f9040378a0db47299e979856",
1173 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBQA+jvIdILsG6dTRqEp7I95RW59Y0\nOypr4iSQiEuPi4kRTA5flVjXYnrerlP/jON7r5S5nQT3UJjKjj53xr4CvD4BaQ13\nCAa96fTSdgKTq6YHYGbxdi6ESPDQhyTvMR/3WW816LapNG3mW+qSS50wu5cuOziH\ngXL5BAN4oNtHKZ6XmFY=\n-----END PUBLIC KEY-----",
1174 "sha" : "SHA-512",
1175 "type" : "ECDSAVer",
1176 "jwk" : {
1177 "crv" : "P-521",
1178 "kid" : "none",
1179 "kty" : "EC",
1180 "x" : "AUAPo7yHSC7BunU0ahKeyPeUVufWNDsqa-IkkIhLj4uJEUwOX5VY12J63q5T_4zje6-UuZ0E91CYyo4-d8a-Arw-",
1181 "y" : "AWkNdwgGven00nYCk6umB2Bm8XYuhEjw0Ick7zEf91lvNei2qTRt5lvqkkudMLuXLjs4h4Fy-QQDeKDbRymel5hW"
1182 },
1183 "key" : {
1184 "curve" : "secp521r1",
1185 "keySize" : 521,
1186 "type" : "ECPublicKey",
1187 "wx" : "1400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e",
1188 "wy" : "1690d770806bde9f4d2760293aba6076066f1762e8448f0d08724ef311ff7596f35e8b6a9346de65bea924b9d30bb972e3b38878172f9040378a0db47299e979856"
1189 },
1190 "tests" : [
1191 {
1192 "comment" : "weak key",
1193 "message" : "54657374",
1194 "result" : "valid",
1195 "sig" : "0090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf00a24fbd602ff7012b6b00e9aa1683b45bfa2d62dc768737e8da92cad52f069efbea526acc68096fc0ef9960c6b989bf8922aea38fd463d02c0e7c25e336f32b0874",
1196 "tcId" : 89
1197 }
1198 ]
1199 },
1200 {
1201 "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e0096f288f7f942160b2d89fd6c5459f89f990e89d17bb70f2f78db10cee008a690ca174956cb9219a4156db462cf4468d1c4c7787e8d06fbfc875f24b8d6616867a9",
1202 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBQA+jvIdILsG6dTRqEp7I95RW59Y0\nOypr4iSQiEuPi4kRTA5flVjXYnrerlP/jON7r5S5nQT3UJjKjj53xr4CvD4AlvKI\n9/lCFgstif1sVFn4n5kOidF7tw8veNsQzuAIppDKF0lWy5IZpBVttGLPRGjRxMd4\nfo0G+/yHXyS41mFoZ6k=\n-----END PUBLIC KEY-----",
1203 "sha" : "SHA-512",
1204 "type" : "ECDSAVer",
1205 "jwk" : {
1206 "crv" : "P-521",
1207 "kid" : "none",
1208 "kty" : "EC",
1209 "x" : "AUAPo7yHSC7BunU0ahKeyPeUVufWNDsqa-IkkIhLj4uJEUwOX5VY12J63q5T_4zje6-UuZ0E91CYyo4-d8a-Arw-",
1210 "y" : "AJbyiPf5QhYLLYn9bFRZ-J-ZDonRe7cPL3jbEM7gCKaQyhdJVsuSGaQVbbRiz0Ro0cTHeH6NBvv8h18kuNZhaGep"
1211 },
1212 "key" : {
1213 "curve" : "secp521r1",
1214 "keySize" : 521,
1215 "type" : "ECPublicKey",
1216 "wx" : "1400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e",
1217 "wy" : "096f288f7f942160b2d89fd6c5459f89f990e89d17bb70f2f78db10cee008a690ca174956cb9219a4156db462cf4468d1c4c7787e8d06fbfc875f24b8d6616867a9"
1218 },
1219 "tests" : [
1220 {
1221 "comment" : "duplication bug",
1222 "message" : "54657374",
1223 "result" : "invalid",
1224 "sig" : "0090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf00a24fbd602ff7012b6b00e9aa1683b45bfa2d62dc768737e8da92cad52f069efbea526acc68096fc0ef9960c6b989bf8922aea38fd463d02c0e7c25e336f32b0874",
1225 "tcId" : 90
1226 }
1227 ]
1228 },
1229 {
1230 "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000482efed52b9053723f669085c5aae160e7b995362aadfb715224c3b75c78c39ede4f52fd89da37fae31b852ce0f5ef5897dfc79de579435a938e1e723a2f4df06",
1231 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgu/tUrkFNyP2aQhcWq4WDnuZU2Kq\n37cVIkw7dceMOe3k9S/YnaN/rjG4Us4PXvWJffx53leUNak44ecjovTfBg==\n-----END PUBLIC KEY-----",
1232 "sha" : "SHA-256",
1233 "type" : "ECDSAVer",
1234 "jwk" : {
1235 "crv" : "P-256",
1236 "kid" : "none",
1237 "kty" : "EC",
1238 "x" : "gu_tUrkFNyP2aQhcWq4WDnuZU2Kq37cVIkw7dceMOe0",
1239 "y" : "5PUv2J2jf64xuFLOD171iX38ed5XlDWpOOHnI6L03wY"
1240 },
1241 "key" : {
1242 "curve" : "secp256r1",
1243 "keySize" : 256,
1244 "type" : "ECPublicKey",
1245 "wx" : "082efed52b9053723f669085c5aae160e7b995362aadfb715224c3b75c78c39ed",
1246 "wy" : "0e4f52fd89da37fae31b852ce0f5ef5897dfc79de579435a938e1e723a2f4df06"
1247 },
1248 "tests" : [
1249 {
1250 "comment" : "random signature",
1251 "message" : "00000000000000000000000000000000",
1252 "result" : "valid",
1253 "sig" : "1e63913374b3ead80d4b27bfdf7a50eb063c39bc585ea43cbd12f9dce3071a44a7bbd74b1eac2c54fccec9a3523ca29c95b7ace517ab2b0f4995d220481ce326",
1254 "tcId" : 91
1255 },
1256 {
1257 "comment" : "random signature",
1258 "message" : "00000000000000000000000000000000",
1259 "result" : "valid",
1260 "sig" : "e3f4fced8145c2ad8da913d8e15ba196f10a85d44a320c94a09cb194aea8ef1883afe416680a2c0cc915753ec869d9f2117256abecf234164613722bd7a8cb7c",
1261 "tcId" : 92
1262 },
1263 {
1264 "comment" : "random signature",
1265 "message" : "00000000000000000000000000000000",
1266 "result" : "valid",
1267 "sig" : "9f30cc8eafbeacc166a1af87664bef8b2add9c1988841f5de200feaaee1393fdd986454e46e388e11d6d3fb10d7eea364b814751975327401ad124951dbdda45",
1268 "tcId" : 93
1269 },
1270 {
1271 "comment" : "random signature",
1272 "message" : "00000000000000000000000000000000",
1273 "result" : "valid",
1274 "sig" : "67e8a0b9ba82d0c4e1ad9fad1592a179c6dac964215c8a519863141e053f55dd6c41d1be827bb6b5658ccf8c0ff16d87f3ce16d62a7641b64a107191d6531ad7",
1275 "tcId" : 94
1276 },
1277 {
1278 "comment" : "random signature",
1279 "message" : "00000000000000000000000000000000",
1280 "result" : "valid",
1281 "sig" : "9963a72f589bcf7d4a561f8b0bed9af6e5a1309a1f5ab1791ce179d68478fe905c6870382a1ea973a84f85d8365b8d6e67527a5bdc9b80526a28968e7884758c",
1282 "tcId" : 95
1283 },
1284 {
1285 "comment" : "random signature",
1286 "message" : "00000000000000000000000000000000",
1287 "result" : "valid",
1288 "sig" : "74a6f79b92039e101a3a45ad6287d16a05107d07899ec858eade5d51b7b5f61d79f33dc00dbed4edb967eda02768731b4dc5bffe6764e7258b2d7bbf223947c6",
1289 "tcId" : 96
1290 },
1291 {
1292 "comment" : "random signature",
1293 "message" : "00000000000000000000000000000000",
1294 "result" : "valid",
1295 "sig" : "5a5599a21beec4979655e89a77ab145566296f71095c457a40ef52efd98c4bd5cb7b8beff27c7bb66c5ed2aad94b7e204c4c0a4748d1f35aff4b6eeb25236e4b",
1296 "tcId" : 97
1297 },
1298 {
1299 "comment" : "random signature",
1300 "message" : "00000000000000000000000000000000",
1301 "result" : "valid",
1302 "sig" : "d1a536b7938286c12f3d7cc12d779cfd7662dd1b1a80a0e50d6f15d8ec34d1748eedd5e3bf94ce409210e4c58fae664657dc160d41525fd7f62a17d614ccae50",
1303 "tcId" : 98
1304 },
1305 {
1306 "comment" : "random signature",
1307 "message" : "00000000000000000000000000000000",
1308 "result" : "valid",
1309 "sig" : "3e594afa1518a97360941a8930785150ec14cbd9d390da407155557e47540fd7590aeb35acb45eebf80e590585329e0543d3ebd6536321429cd6905541667d8f",
1310 "tcId" : 99
1311 },
1312 {
1313 "comment" : "random signature",
1314 "message" : "00000000000000000000000000000000",
1315 "result" : "valid",
1316 "sig" : "ff84c44ad23cb2bb9a92309c92c41487e618442f54decd53532f84e14326c49787fccaa0107558605d49ddf10bf83c561dbd75035e3acfd17bb5d49f2de1e15f",
1317 "tcId" : 100
1318 }
1319 ]
1320 },
1321 {
1322 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004008299c4e2bbbc1a061eb5d09c5ca6655e923fd85f08376cc8de849cf0e3cfa45d242976899c27551cccc30f9d9a82d2baa396e020def5454652239858d1eb44a33b00202ef1fbd2b2717fd75e40975aec6ed7f5c060fb04291711402d503840976b9f6ad826a05957f8691b4cfd8e2b4a774908d7c7ea94e47c33e5763309404cdd5e4a",
1323 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAgpnE4ru8GgYetdCcXKZlXpI/2F8I\nN2zI3oSc8OPPpF0kKXaJnCdVHMzDD52agtK6o5bgIN71RUZSI5hY0etEozsAIC7x\n+9KycX/XXkCXWuxu1/XAYPsEKRcRQC1QOECXa59q2CagWVf4aRtM/Y4rSndJCNfH\n6pTkfDPldjMJQEzdXko=\n-----END PUBLIC KEY-----",
1324 "sha" : "SHA-512",
1325 "type" : "ECDSAVer",
1326 "jwk" : {
1327 "crv" : "P-521",
1328 "kid" : "none",
1329 "kty" : "EC",
1330 "x" : "AIKZxOK7vBoGHrXQnFymZV6SP9hfCDdsyN6EnPDjz6RdJCl2iZwnVRzMww-dmoLSuqOW4CDe9UVGUiOYWNHrRKM7",
1331 "y" : "ACAu8fvSsnF_115Al1rsbtf1wGD7BCkXEUAtUDhAl2ufatgmoFlX-GkbTP2OK0p3SQjXx-qU5Hwz5XYzCUBM3V5K"
1332 },
1333 "key" : {
1334 "curve" : "secp521r1",
1335 "keySize" : 521,
1336 "type" : "ECPublicKey",
1337 "wx" : "08299c4e2bbbc1a061eb5d09c5ca6655e923fd85f08376cc8de849cf0e3cfa45d242976899c27551cccc30f9d9a82d2baa396e020def5454652239858d1eb44a33b",
1338 "wy" : "202ef1fbd2b2717fd75e40975aec6ed7f5c060fb04291711402d503840976b9f6ad826a05957f8691b4cfd8e2b4a774908d7c7ea94e47c33e5763309404cdd5e4a"
1339 },
1340 "tests" : [
1341 {
1342 "comment" : "random signature",
1343 "message" : "0000000000000000000000000000000000000000",
1344 "result" : "valid",
1345 "sig" : "01901935f873695f6d978537d1932a74b594e98ee672348f9a25abe2cf8b8aae31208c90f80fe508c356302f11f4b7d8180aa1c70207483c560133ada3060dce63c9004acb84ee9ca82af573e5ab9ec86820e60d12f20168862cf34429219dd6d8610298af6d01a57c4b5d867acbb9faab0628501a489a6ec63273022e72aa1aaec8dfc5",
1346 "tcId" : 101
1347 },
1348 {
1349 "comment" : "random signature",
1350 "message" : "0000000000000000000000000000000000000000",
1351 "result" : "valid",
1352 "sig" : "008b2d6f870aa5a329e2cfd2d7b557879ed300154058e2c55569312d929d43e44b761fba188745e047cabd77ad54b5ec3f301ad5725e41dc07e28cabdd0f948d10e201496e8da0f64dda20666dd78dfb529695f32df3d4c33e402dfe85db1ebce89396553aef4d62cb3bac401241ab9938040a6d22b36bb866d3878a7001c646e2ade4fd",
1353 "tcId" : 102
1354 },
1355 {
1356 "comment" : "random signature",
1357 "message" : "0000000000000000000000000000000000000000",
1358 "result" : "valid",
1359 "sig" : "0102dc32e8f53daeb00ac0b9ea88a3496b19be2831261660e2ef599c08623c3bb4cb7f9d4e5d24e9b50256b3243292b6a5d7de11e371aae3e88abdb01112b5fc31e400ed4642d1a5d4456a8bd94037d180cfe2faadb1fccf434fcbb12eb0a353064a9764bb8b8d689320e8a83af8045109c2007f1486627cc7ac0c5c713a419075862434",
1360 "tcId" : 103
1361 },
1362 {
1363 "comment" : "random signature",
1364 "message" : "0000000000000000000000000000000000000000",
1365 "result" : "valid",
1366 "sig" : "002be69063cb7c574e1f15b2f762b9499411ee01f786e1bd6876c753b640cf0c4861ec5e85f0a7ec4f430ac7f4cd6c8afda97df7f7914549770b46f429931c8a02ad00898a7ded6b2a1ae812bf52fa1afb219b9b28b6b5e8e09f2eb3a3a364eed565664ae25dde99fd3421821e241e28cc9b3168943fb5ef56c7c9fb3a7bbba4c4e20f75",
1367 "tcId" : 104
1368 },
1369 {
1370 "comment" : "random signature",
1371 "message" : "0000000000000000000000000000000000000000",
1372 "result" : "valid",
1373 "sig" : "0019c52156a6044e89a69d35d5ea3855108c39f038652be3a3819fd38c4f087510918c5a013b1e06c5c463db7aae0c584316dae3062d90da918ff474e687d7bd9c5101caf79795bca185e27c985083ee936455d1c60c1c7e3d95e032cef0d80bf1426df5cdf1b9a5edbec533bc737c24b77b4694f233ec2f5e88d9effdd2a9b8d3b800d4",
1374 "tcId" : 105
1375 },
1376 {
1377 "comment" : "random signature",
1378 "message" : "0000000000000000000000000000000000000000",
1379 "result" : "valid",
1380 "sig" : "00e903e8ad55d36cfdf951f631d4226b5bf79c17e7c2f53c4dabecfbf8675d38ed29e150fbf1d86f44c730df7777410e9df72a5a88cbe5f52e083585d1765ca3055300b85d63f3c4e2f36691e165026696a9eeb8adc4c0e32bf56c03de418eed3fd48057e9d402dc124d710e2536986472cf75b87ec283574223cb193af34966ea93183f",
1381 "tcId" : 106
1382 },
1383 {
1384 "comment" : "random signature",
1385 "message" : "0000000000000000000000000000000000000000",
1386 "result" : "valid",
1387 "sig" : "006c5437ca8b2f853c2a4216d9e7379c4400bd5fb2b74d6c4af5658589d4894eff0c754465569c45804c0b3b105a917ea53006cfbc7f0e967b14014dda4f1a6a3f0101620b46f91afbde439d2f479555ed03b5210df454926d2473513b6342016bbb24b1eb10f16d5666732b977ca4938dfed9bbf36aab261f924f153a4eded721da124b",
1388 "tcId" : 107
1389 },
1390 {
1391 "comment" : "random signature",
1392 "message" : "0000000000000000000000000000000000000000",
1393 "result" : "valid",
1394 "sig" : "005f49f8e46ee467fba634e7b2c7a089eabadfd82727a4dd4e8e20c2eef15d795cf287c62f86cc64cd988b83a4271084b32c2176ef15815026220c17a5d1255e953e01bae15b61f0ad85db8c4aaa70aab509e6ebf32ffab91c90e63da1670f94d1ea54d50e98dfb3f67626a27c047b457a20fdae6110acd4ffc96f17d38e90af8bd7b819",
1395 "tcId" : 108
1396 },
1397 {
1398 "comment" : "random signature",
1399 "message" : "0000000000000000000000000000000000000000",
1400 "result" : "valid",
1401 "sig" : "0044a5b08f9d5031efe823a3f7b2226ea7c88e7d770acd5943a5804fe6f48a1421aee3c530145c20680ae35b198e5a0565a71748b37f3944708d40e1acaf928bdd7f008d5fbe874e1b709f4b20e78e08755ce1792a724bdc2e48816193d77e95e021f1baf99c8d26a981b5c882c56a70f8a06dec227a3f29204f9f582c72eaccd1f96165",
1402 "tcId" : 109
1403 },
1404 {
1405 "comment" : "random signature",
1406 "message" : "0000000000000000000000000000000000000000",
1407 "result" : "valid",
1408 "sig" : "0077751cca360c5abf093605729cfc68e1c80b255b01e3d12b632d00b6dfdc8e37c74cf4d862d66c7989d2f999af58d33720cae0aa83251a968be4db122d3470c9f901af02304c5bdc546c2d06785ef906367d7117e6efec63151ad02d5346f7253206a70125dde96824f17005aaaebaa50f7c4d2bc1f7b653075fbc9c1a8afa225630c2",
1409 "tcId" : 110
1410 }
1411 ]
1412 },
1413 {
1414 "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004820ee7b7457b52790f012e3f0a0e315d6a4270ff8ffeae9404a4c43d1e47a8fcfcae1a6ff4751635f42aaf94b0e3654de80847146fb7360f4aee71cdbf54eb16387d07d6e6894be68a5dfb62aed5b1f839596ea7bac188a4b766eb94e33f22d5",
1415 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEgg7nt0V7UnkPAS4/Cg4xXWpCcP+P/q6U\nBKTEPR5HqPz8rhpv9HUWNfQqr5Sw42VN6AhHFG+3Ng9K7nHNv1TrFjh9B9bmiUvm\nil37Yq7Vsfg5WW6nusGIpLdm65TjPyLV\n-----END PUBLIC KEY-----",
1416 "sha" : "SHA-384",
1417 "type" : "ECDSAVer",
1418 "jwk" : {
1419 "crv" : "P-384",
1420 "kid" : "none",
1421 "kty" : "EC",
1422 "x" : "gg7nt0V7UnkPAS4_Cg4xXWpCcP-P_q6UBKTEPR5HqPz8rhpv9HUWNfQqr5Sw42VN",
1423 "y" : "6AhHFG-3Ng9K7nHNv1TrFjh9B9bmiUvmil37Yq7Vsfg5WW6nusGIpLdm65TjPyLV"
1424 },
1425 "key" : {
1426 "curve" : "secp384r1",
1427 "keySize" : 384,
1428 "type" : "ECPublicKey",
1429 "wx" : "0820ee7b7457b52790f012e3f0a0e315d6a4270ff8ffeae9404a4c43d1e47a8fcfcae1a6ff4751635f42aaf94b0e3654d",
1430 "wy" : "0e80847146fb7360f4aee71cdbf54eb16387d07d6e6894be68a5dfb62aed5b1f839596ea7bac188a4b766eb94e33f22d5"
1431 },
1432 "tests" : [
1433 {
1434 "comment" : "random signature",
1435 "message" : "48656c6c6f",
1436 "result" : "valid",
1437 "sig" : "6d61307eb3042c72fa2e5051e5d7fd969357bbf7a77ef28db8e5c35431a253e47fd271c5b14a377f41e9db9353c33e848bf9412381b9fe33fdb00757af2e08440d36d4fc7ee0c085850daae1f8df972ab8299f381be2951e8e0b1e1eb9b5f803",
1438 "tcId" : 111
1439 },
1440 {
1441 "comment" : "random signature",
1442 "message" : "48656c6c6f",
1443 "result" : "valid",
1444 "sig" : "87c43936c6b260236bc47417f0fdc6c5dabfd38576f74135dff1fad9daade052098c82e46e1dd4577168dab9a2af95f1a7f1fd50ee1a7b34b4ddeea66ce3b0455377c47cc75cbdcd7f7848b3dd6c567dcfcb77a29951ea6bf5e6d30bfbd7b064",
1445 "tcId" : 112
1446 },
1447 {
1448 "comment" : "random signature",
1449 "message" : "48656c6c6f",
1450 "result" : "valid",
1451 "sig" : "cacd409cefcf1fc0d10b7f4cdfd751c4e207a71f7e602bfb855a592f5b33e6d666443ee9c9abd1258aa65ca06318447e50fbc450a2d2d6669a790cecac7748bc11111429fa0631a1c2f8ce0d8abb60d2b699db316f1b88e748f3f8af2b4623b2",
1452 "tcId" : 113
1453 },
1454 {
1455 "comment" : "random signature",
1456 "message" : "48656c6c6f",
1457 "result" : "valid",
1458 "sig" : "8bfd7fe7562e19381fe51cdf5784fc8248e71a19ec73db9ab59a49eb28bd05763b0789072a6449dbcf32dc227eebaca8c7f49385fd9e3c8c4199030e238bf1c38b0000a03bd230d303cd0cb06e9a1cf70248c35da5258db2bb2047ff4b13bd9e",
1459 "tcId" : 114
1460 },
1461 {
1462 "comment" : "random signature",
1463 "message" : "48656c6c6f",
1464 "result" : "valid",
1465 "sig" : "4936aacd98530d41afb1adcb0429d6e18d55b8956f7996f47dc5fe712bb5484ea9c992cc8fd7c5e50a5312c9a1fca21e68a97212b13a2d1d95fe45a434051cdebdb4886e9f23392384a32f61b50990e123241b06813095ffd557d181af38cdb3",
1466 "tcId" : 115
1467 },
1468 {
1469 "comment" : "random signature",
1470 "message" : "48656c6c6f",
1471 "result" : "valid",
1472 "sig" : "323afee80faf41d30344b29d7c5dc63960c9f229f2cffe66a5d58fc0918ff15996e9e65879aad3c9ebddb3f67568db09f70abf2c40cd360dec66fd59df3dc3b845f90657e82f4b9f1da8aab9df5f45003224cb4b6519274d2925b245edbc3543",
1473 "tcId" : 116
1474 },
1475 {
1476 "comment" : "random signature",
1477 "message" : "48656c6c6f",
1478 "result" : "valid",
1479 "sig" : "e52d47dc305382258dcfc364bcfbec863e844c75768dee340c9a5c6f0f98904726f500a2997f8f835a4db5968e6f727b7e9e3a2c64e66064f15a527a8a44396c29db47397058d0498cca36ed93ae76d92918087fd367e2db74ca807db6d33d1f",
1480 "tcId" : 117
1481 },
1482 {
1483 "comment" : "random signature",
1484 "message" : "48656c6c6f",
1485 "result" : "valid",
1486 "sig" : "bffd543c002ab7740588aef8212205cef78baa907ab537634f5c3cfad76013d5085ec4f734fd085e0e153c6d86cf798bd237c58554f0c00888676c7b0147ffd7e336824775a4f675956be1daf617e2834abdc465c2e72b42032b6364ed926dc9",
1487 "tcId" : 118
1488 },
1489 {
1490 "comment" : "random signature",
1491 "message" : "48656c6c6f",
1492 "result" : "valid",
1493 "sig" : "176847a307aebae41f08db05411eedac6f47f20ffde5a5e10c9bf45d1b244eef2c724497f4857f2f06aee4cac11ac37c9c80f7283350fde434d6b0fbccc8f26434ad2ad9a5bc9e3665dfd11009f68cb959aab1e1c5b2481cd987836854650f7d",
1494 "tcId" : 119
1495 },
1496 {
1497 "comment" : "random signature",
1498 "message" : "48656c6c6f",
1499 "result" : "valid",
1500 "sig" : "be2eec483e0c2d9fad3e03163bdfaadc6baef5ffe3373aa1a48cfc0c00fd67da56dff871a98be8fab8645bf5ca645d65aae76f1d6acd4bfdbe683b5315a956ed96f57e82ff04932e837e759b40d8dcc73521a289508a7a71e430f680d6c0fb3d",
1501 "tcId" : 120
1502 }
1503 ]
1504 },
1505 {
1506 "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004031fbb3c18dfaff249ed5b7ddcfb0282197fda8708cc4d2c49000939c413dcb907e275efccaec2a13ef98638ebb90c07015df32d9c8cef5c0a3cbccff96d36d5738201b8430c231acde7c831bb5a270cec6d35f5427443a0b0242ff2289ba07c",
1507 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAx+7PBjfr/JJ7Vt93PsCghl/2ocIzE0s\nSQAJOcQT3LkH4nXvzK7CoT75hjjruQwHAV3zLZyM71wKPLzP+W021XOCAbhDDCMa\nzefIMbtaJwzsbTX1QnRDoLAkL/Iom6B8\n-----END PUBLIC KEY-----",
1508 "sha" : "SHA-256",
1509 "type" : "ECDSAVer",
1510 "jwk" : {
1511 "crv" : "P-384",
1512 "kid" : "none",
1513 "kty" : "EC",
1514 "x" : "Ax-7PBjfr_JJ7Vt93PsCghl_2ocIzE0sSQAJOcQT3LkH4nXvzK7CoT75hjjruQwH",
1515 "y" : "AV3zLZyM71wKPLzP-W021XOCAbhDDCMazefIMbtaJwzsbTX1QnRDoLAkL_Iom6B8"
1516 },
1517 "key" : {
1518 "curve" : "secp384r1",
1519 "keySize" : 384,
1520 "type" : "ECPublicKey",
1521 "wx" : "31fbb3c18dfaff249ed5b7ddcfb0282197fda8708cc4d2c49000939c413dcb907e275efccaec2a13ef98638ebb90c07",
1522 "wy" : "15df32d9c8cef5c0a3cbccff96d36d5738201b8430c231acde7c831bb5a270cec6d35f5427443a0b0242ff2289ba07c"
1523 },
1524 "tests" : [
1525 {
1526 "comment" : "Hash weaker than DL-group",
1527 "message" : "48656c6c6f",
1528 "result" : "acceptable",
1529 "sig" : "f131a61e2bb3c8260b0f1b8fbbd57dfea3194fb9e4ea5eb1f343f67f013358e94f5b1a550bcccd6d6e40d065be590706bba3db852eef1c12d71f5e351c8d1790e8a11af575f13b0c992c4984e1e17d259e4e02917f480847e5c2b9430335ba94",
1530 "tcId" : 121
1531 }
1532 ]
1533 },
1534 {
1535 "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400f3762f3ceb3a7dbbad769c6733b665aec3a802f8069345173dfbabe93fa6624e2a65ade6b849e05c59b01c7b709d36933c50c6ffd89e85e959571f8f9a25c1603701fb8f0d50bdfb4dca4e25d746dde110524b00cd6c272b2f5e6db3c99382bcf0b8eec5034645dc139baac5dc23f43c1f91ff8ed086d33192ee2f534fd0ca7a840e85",
1536 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA83YvPOs6fbutdpxnM7ZlrsOoAvgG\nk0UXPfur6T+mYk4qZa3muEngXFmwHHtwnTaTPFDG/9iehelZVx+PmiXBYDcB+48N\nUL37TcpOJddG3eEQUksAzWwnKy9ebbPJk4K88LjuxQNGRdwTm6rF3CP0PB+R/47Q\nhtMxku4vU0/QynqEDoU=\n-----END PUBLIC KEY-----",
1537 "sha" : "SHA-384",
1538 "type" : "ECDSAVer",
1539 "jwk" : {
1540 "crv" : "P-521",
1541 "kid" : "none",
1542 "kty" : "EC",
1543 "x" : "APN2LzzrOn27rXacZzO2Za7DqAL4BpNFFz37q-k_pmJOKmWt5rhJ4FxZsBx7cJ02kzxQxv_YnoXpWVcfj5olwWA3",
1544 "y" : "AfuPDVC9-03KTiXXRt3hEFJLAM1sJysvXm2zyZOCvPC47sUDRkXcE5uqxdwj9Dwfkf-O0IbTMZLuL1NP0Mp6hA6F"
1545 },
1546 "key" : {
1547 "curve" : "secp521r1",
1548 "keySize" : 521,
1549 "type" : "ECPublicKey",
1550 "wx" : "0f3762f3ceb3a7dbbad769c6733b665aec3a802f8069345173dfbabe93fa6624e2a65ade6b849e05c59b01c7b709d36933c50c6ffd89e85e959571f8f9a25c16037",
1551 "wy" : "1fb8f0d50bdfb4dca4e25d746dde110524b00cd6c272b2f5e6db3c99382bcf0b8eec5034645dc139baac5dc23f43c1f91ff8ed086d33192ee2f534fd0ca7a840e85"
1552 },
1553 "tests" : [
1554 {
1555 "comment" : "Hash weaker than DL-group",
1556 "message" : "48656c6c6f",
1557 "result" : "acceptable",
1558 "sig" : "016e9c9ec1320d9403f5b86df59158da27830857f77f58d5c4d34bad9af3f5a422be7f406c994ed865ed6555c326a8f1c7749212cd8dded24f943ff9655072d233bb0127b8318f719866ece8b0092e9c4cbdd212c99e644c1bde2b9c97ff82af6e2e40bbac92e0acd01a2d7a1fa10a7ee725c140b7418c1d5f56688ca0096726987e3aa2",
1559 "tcId" : 122
1560 }
1561 ]
1562 },
1563 {
1564 "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004016894136702a1ff2de14be80fa8ee832777d885caa90182281195187a8c24dfeb92bd33685a78dd348ae4042a02fa25524b7c111f04111df9fe3df830dabd8a8dcf00abe007cdd100461bec9a3dc0c51a6da36f9637aec3fee4c781cf016b190c67f87392a59e6afbba6ca89603dcb1ae07a6c695e6e1694ec440fae62214e016db01f5",
1565 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBaJQTZwKh/y3hS+gPqO6DJ3fYhcqp\nAYIoEZUYeowk3+uSvTNoWnjdNIrkBCoC+iVSS3wRHwQRHfn+Pfgw2r2Kjc8Aq+AH\nzdEARhvsmj3AxRpto2+WN67D/uTHgc8BaxkMZ/hzkqWeavu6bKiWA9yxrgemxpXm\n4WlOxED65iIU4BbbAfU=\n-----END PUBLIC KEY-----",
1566 "sha" : "SHA-256",
1567 "type" : "ECDSAVer",
1568 "jwk" : {
1569 "crv" : "P-521",
1570 "kid" : "none",
1571 "kty" : "EC",
1572 "x" : "AWiUE2cCof8t4UvoD6jugyd32IXKqQGCKBGVGHqMJN_rkr0zaFp43TSK5AQqAvolUkt8ER8EER35_j34MNq9io3P",
1573 "y" : "AKvgB83RAEYb7Jo9wMUabaNvljeuw_7kx4HPAWsZDGf4c5Klnmr7umyolgPcsa4HpsaV5uFpTsRA-uYiFOAW2wH1"
1574 },
1575 "key" : {
1576 "curve" : "secp521r1",
1577 "keySize" : 521,
1578 "type" : "ECPublicKey",
1579 "wx" : "16894136702a1ff2de14be80fa8ee832777d885caa90182281195187a8c24dfeb92bd33685a78dd348ae4042a02fa25524b7c111f04111df9fe3df830dabd8a8dcf",
1580 "wy" : "0abe007cdd100461bec9a3dc0c51a6da36f9637aec3fee4c781cf016b190c67f87392a59e6afbba6ca89603dcb1ae07a6c695e6e1694ec440fae62214e016db01f5"
1581 },
1582 "tests" : [
1583 {
1584 "comment" : "Hash weaker than DL-group",
1585 "message" : "48656c6c6f",
1586 "result" : "acceptable",
1587 "sig" : "0062ecd31c77761bc89143b044efcb514e9c6ef4b5a0999203e14aba19d3f7b484e20b3833ade5f5f49d30e1282a2b22a14ee8816709595edf8f42f5630f92d303450147d4a41d4ada8896a4462d925fcb7cfd95e57048b73de44f2e292ab3009e3877723b8d0641046b622c65d5c0bde0ff46789ca2c205c6117736c5f971fd208eae8f",
1588 "tcId" : 123
1589 }
1590 ]
1591 }
1592 ]
1593 }
+0
-3289
t/wycheproof/rsa_signature_test.json less more
0 {
1 "algorithm" : "RSASig",
2 "generatorVersion" : "0.0a10",
3 "numberOfTests" : 362,
4 "testGroups" : [
5 {
6 "e" : "10001",
7 "keyAsn" : "30818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001",
8 "keyDer" : "30819f300d06092a864886f70d010101050003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001",
9 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrkBTcR9RLbSYPwf75qwIgQv2V\nZunXtgxUEAy24dTtyYWQRn0FAsF/zmnQCsXvtAsssWfYpEq5PXPE0PEJ+1omwviC\nMjb/UXz4RBLhc2ec+uQuBDtv7IH52YS1YlF+b+vh9yKV28P9/BnTJAqnVRVWPzHa\n2DVj86MVrPmgs1GiPwIDAQAB\n-----END PUBLIC KEY-----",
10 "keysize" : 1024,
11 "n" : "0ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f",
12 "sha" : "SHA-256",
13 "type" : "RSASigVer",
14 "tests" : [
15 {
16 "comment" : "valid",
17 "message" : "54657374",
18 "name" : "RsaSignatureTestVector",
19 "padding" : "3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
20 "result" : "valid",
21 "sig" : "68ea71ee1911687eb54b3d19cedcfd44719d0b24accccc59bdafd84e4eba48ef0be7f115e7073f9f273286a7dcee3b94cdbe208e30ae496987479d3aa12ab0e12685ab592d7693a494e6ad27d526ed3ab5912c7f81e09983931794c2165c22fd859e0f9af1a93a4dfe144098c562731e6059d236b52cb865996c87a9baf7f103",
22 "tcId" : 1
23 },
24 {
25 "comment" : "Legacy:missing NULL",
26 "message" : "54657374",
27 "name" : "RsaSignatureTestVector",
28 "padding" : "302f300b06096086480165030402010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
29 "result" : "acceptable",
30 "sig" : "253e1d19bbe91064f2364c1e7db3ba8eb6dc5b19202e440eab6fbdf28c8c6ec05b812983713c338c72b6e99b8edf506a89ff9fc8e5c2c52362097a56dc228060eca01e1ff318c6c81617691438703411c1f953b21cd74331f87c9b8b189fdffdfe8550bd2bd1d47be915f8604a0f472199dd705e19b1b815f99b68d60bc257c7",
31 "tcId" : 2
32 },
33 {
34 "comment" : "long form encoding of length",
35 "message" : "54657374",
36 "name" : "RsaSignatureTestVector",
37 "padding" : "308131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
38 "result" : "invalid",
39 "sig" : "52f46d508e31f030b17c537888585f919037562e15f1924543601a41f9b701ee416ad73d6576b4eaaa64e685289dc478751dfe2d7e588252bfe2d43f4b3a31c6c6c39a9df884a2fc2e45f09c2150a830974b1c9d26090830b37bf06f1d57be1da34ebb016e9db7ce2c34e94872c89567ff6f2ab35a1a9fb6632e100c7d7af834",
40 "tcId" : 3
41 },
42 {
43 "comment" : "long form encoding of length",
44 "message" : "54657374",
45 "name" : "RsaSignatureTestVector",
46 "padding" : "303230810d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
47 "result" : "invalid",
48 "sig" : "3f34017b3172aaeec72d208308e9b83150699f86634b948847eab56f0169fef51b5636a96866f4f0f4c649400489e047803a91f2b2f32ab715065e20770c4e2788946b85aca5c90efdd6a9458dd9b6f797f96a3de88d2e4896afe147d8c0389943828100061903a30eaff1dadd98d3e49dba56cdcfa5f215d9c615f974f4a0bc",
49 "tcId" : 4
50 },
51 {
52 "comment" : "long form encoding of length",
53 "message" : "54657374",
54 "name" : "RsaSignatureTestVector",
55 "padding" : "3032300e06810960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
56 "result" : "invalid",
57 "sig" : "1478337676aa47ca72ea7557facff06f6c777f56063f4487d345e43dc56a6bc5f8a891085d53a32c9d1c3cf7f469e7f56847b0b1b9b5b784526078271f21d0550afc40f81e2b8e8dec851d87511cace965edceb83cb96c8d6616e1ee75bb22c54412fc942a6f71c9fc609a31a69d34b774a97c1ba4f85cca28d9993db8543f75",
58 "tcId" : 5
59 },
60 {
61 "comment" : "long form encoding of length",
62 "message" : "54657374",
63 "name" : "RsaSignatureTestVector",
64 "padding" : "3032300e06096086480165030402010581000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
65 "result" : "invalid",
66 "sig" : "77ba423e600bdd761ed10e7c00698a87fe1322f5f42b2902a0be7a24b1cf44f613fa55edeb2ded0475f8e1a13e5368f9a2bfc4f2f926ef289a2207bf3689fc1c8ec3e5463064a7f51bbc993966cc4016319b7c95f282372f1ff848d7fca753a81d905b3341b0fbf60ba186e750f3171cfc84288eff8742bda432bd6c8dc04f9f",
67 "tcId" : 6
68 },
69 {
70 "comment" : "long form encoding of length",
71 "message" : "54657374",
72 "name" : "RsaSignatureTestVector",
73 "padding" : "3032300d06096086480165030402010500048120532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
74 "result" : "invalid",
75 "sig" : "9460ee79bb990bc3fe28cfca92363e6ff6900e3b61b3a402f06024a72b7a65d62094b4419e93900995eb121327f72b26b139bab3e5e2bd0c82e0cf6357f3b16f1c1dd4407a9a820f20e3baaa2259614d9ee3e015e1c1778befa13aff1e545ea1758cba4713631d63180a91b52df394294441642964a024f45b2251c90e002ec0",
76 "tcId" : 7
77 },
78 {
79 "comment" : "length contains leading 0",
80 "message" : "54657374",
81 "name" : "RsaSignatureTestVector",
82 "padding" : "30820031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
83 "result" : "invalid",
84 "sig" : "96ac043d3cada45aed0dbdc4662dcf7855553a5effa1077048b51c7e9bfff7c2bb3486ea42894d4b4afb26a3b3bd32cb68d5c4d8ca2622f50d8c56fdc25baf83b9909ecb096419ddc13578dcc8121007f7204ee82c517ae03de70fa23ef2390602029a0cbc8a96c5b781d857dbf12802aa561f5f41ea35aa0babb91b9f891762",
85 "tcId" : 8
86 },
87 {
88 "comment" : "length contains leading 0",
89 "message" : "54657374",
90 "name" : "RsaSignatureTestVector",
91 "padding" : "30333082000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
92 "result" : "invalid",
93 "sig" : "2a70643572a7cda975d9e2c0827837e60eaa78c297b1ff75b84f654a91fe33294ccbeda52676ece50fcc03018151e66c24940bd0574ab85a6599231d587f4a6e0ae841cb6696e7dcfd182cb75001304e36887bc4fe3b373828f8b0e62ac2300a626c9e6a2cd05bb7910e74da2978dae1948f855b3b455cd30367160e21581cab",
94 "tcId" : 9
95 },
96 {
97 "comment" : "length contains leading 0",
98 "message" : "54657374",
99 "name" : "RsaSignatureTestVector",
100 "padding" : "3033300f0682000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
101 "result" : "invalid",
102 "sig" : "27778e39b45dee1e7003f1d315d3466fc111791187ddc056784c158df92097e123021e11918b6df8d905304db732e83d904bc914271b03def4ee129c3fc8adcc4f81b690e09e70e46c8b920093f304e64ecb7358740e976d28538a9eecf09ec1e1cd47df9107968207b21538cabe076bcc07c3862c46a793fcf638c70a972885",
103 "tcId" : 10
104 },
105 {
106 "comment" : "length contains leading 0",
107 "message" : "54657374",
108 "name" : "RsaSignatureTestVector",
109 "padding" : "3033300f0609608648016503040201058200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
110 "result" : "invalid",
111 "sig" : "3a879e9f883b158908014f3617cae3315d47afdadd30840494f68d91c04dfe81bd16a40c7d21238cd1816928d989a232a3492325ab0f95d4426e3fb7d58c9908191dc557d8779dabb282287b7860c30e0796283428e0276447235809882ee990deb0f4312c01e7ddf0690406eeacb660acc6957bb670904cfd8d04df5e3ebda2",
112 "tcId" : 11
113 },
114 {
115 "comment" : "length contains leading 0",
116 "message" : "54657374",
117 "name" : "RsaSignatureTestVector",
118 "padding" : "3033300d0609608648016503040201050004820020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
119 "result" : "invalid",
120 "sig" : "2b82155f363a3b283ae455f59e41c29dec2fbd8c7438b0e347aec5b38c7c895cb7d326870e4fbdb935fcbb561f223bd926dbe8b95ef5eaab27920dbe30c641e99f526a9bc356af54198b459b59383135a82cd5b6edab7da0b1a51d939b2f9951e1432d637c4f04a3546ed9c890143ae364602b94eabdaa2a45e4bdf0b5bdfa71",
121 "tcId" : 12
122 },
123 {
124 "comment" : "wrong length",
125 "message" : "54657374",
126 "name" : "RsaSignatureTestVector",
127 "padding" : "3032300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
128 "result" : "invalid",
129 "sig" : "1dda56dc953aeee7fd76ae7166d92ab9e3d1d9759e76f8f1d7634a73cbf69e39d8249153d7c2d83c9664db13552f0c78df34b8a67e7b6c10bcc61b5ead7ba62ce0ec7ba8ac78d146f7e4cadee6f6250e0bc3100660e7afbe3afa17fa288d97549b4c8cacc00ac5c942673485739f89c9e5e63ad2be97a8f2313f5c5b095e7542",
130 "tcId" : 13
131 },
132 {
133 "comment" : "wrong length",
134 "message" : "54657374",
135 "name" : "RsaSignatureTestVector",
136 "padding" : "3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
137 "result" : "invalid",
138 "sig" : "692c143b82196a391a3546607336e6f3bc047412645cf0def0d62d1b42234c14da138bb7f451b45073bbda2aba23412e83bc40d4e7de3e0684f2cad7d059f2d6831aa3d2ece4964ca75cd41dce23c5ba495c15345b36947b4b5a051fe1b84e148b5ae21f112d2245b1acbaeef9dc4a0c408829b9d2b1b5ab1d3a40af0a27b99e",
139 "tcId" : 14
140 },
141 {
142 "comment" : "wrong length",
143 "message" : "54657374",
144 "name" : "RsaSignatureTestVector",
145 "padding" : "3031300e060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
146 "result" : "invalid",
147 "sig" : "66c31a45b2287425a20f65c3eba9cc58c370882f5fc62921935491fbd516df9baf9b28304a21d9008b61a92779ecfb3b0c03f6d74354f5159956e3fc1d35bd7376289378f05d7a71e05ab32794f2566a54635e8dc64740acbe10a293ceddbebe8499b520f406023a134eb9927ebb788b92488f036d109ec0a40ac52372e847b3",
148 "tcId" : 15
149 },
150 {
151 "comment" : "wrong length",
152 "message" : "54657374",
153 "name" : "RsaSignatureTestVector",
154 "padding" : "3031300c060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
155 "result" : "invalid",
156 "sig" : "7b85536bdcda4ad3fc40129f2ff9dc85d9ec049913784064e7358686640446278a2006d93fb33429407597e5d8c783e3f7aee8a7791d69139f3c802a6547f01bf987415eec2447b0e8c4f3aee7ae2085d141fa34ca6634bc109dede93285d5c40cfcd98bd47ceb9cc1890dfff53b7ebb8038533580c7a67fe14c0c422e20cd64",
157 "tcId" : 16
158 },
159 {
160 "comment" : "wrong length",
161 "message" : "54657374",
162 "name" : "RsaSignatureTestVector",
163 "padding" : "3031300d060a60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
164 "result" : "invalid",
165 "sig" : "5d77fba3cbb1905d83aa532fcc3227a95d7931bf0c2ab51f8118824de9dc029bd2470adf48b41c694ec7359d00a1336990c30ee368dd40bd681ba74794415d3997e7a756659397bf6abd44ca91c12a8580a3f5d1cdbc7f3be0c23c72334ce9b1419e6540dab73f5ff8ab57d0bbbe92b688bd3495f9344822b622042c2491bc41",
166 "tcId" : 17
167 },
168 {
169 "comment" : "wrong length",
170 "message" : "54657374",
171 "name" : "RsaSignatureTestVector",
172 "padding" : "3031300d060860864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
173 "result" : "invalid",
174 "sig" : "7b5476fb78f389d1131764e7a13322f86008924c8c098f6d74f2df4dcc5a504cd786b3eaae33295cd1e87a2bbd1a06cb385674d465110a9a990d52de9a67f1c13ecaaa86383d489423c084fae9ecd2e9b109f4f04b8c013e3409128f3a079c068c1ad27bc2a20e76ad149325b7b0f0bd804a4e33949a98aac49076260702b0b0",
175 "tcId" : 18
176 },
177 {
178 "comment" : "wrong length",
179 "message" : "54657374",
180 "name" : "RsaSignatureTestVector",
181 "padding" : "3031300d060960864801650304020105010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
182 "result" : "invalid",
183 "sig" : "6034e1253e4860a29096e392076794cfcea166a30b340cc09f77baa5952c06d148bd89b750c3112930ef210a50a7d3f6569da89912b5e50e824116e73a15536958f75779506d07e67ec9c0cd8de4b51dfbb0fe56926feed18ffbd83b0cdd50d56326c54adf97e629378ae5f0f02fcda3da1aa98cb1d1990946edec711a85a0d8",
184 "tcId" : 19
185 },
186 {
187 "comment" : "wrong length",
188 "message" : "54657374",
189 "name" : "RsaSignatureTestVector",
190 "padding" : "3031300d060960864801650304020105000421532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
191 "result" : "invalid",
192 "sig" : "a44cd265e1ecea83fc74e9eef746ef173277cc96f69a1798590ddee7ce5b5c34a82ad58a5c042db19005e04eec4159900ea764c0d008c52b94577d1c438661fb767902d9d1bbd6a90bdc4df685ec5951eac81d8b4dd36bceef7b6f919e85b6c994c7cf22a804f15cebe63b77f47b3bc2c2aaa68c6362c27a574b849efafe72e9",
193 "tcId" : 20
194 },
195 {
196 "comment" : "wrong length",
197 "message" : "54657374",
198 "name" : "RsaSignatureTestVector",
199 "padding" : "3031300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
200 "result" : "invalid",
201 "sig" : "a160aa43f4873cada34bea5ccd2be9dce07940ee1c08eaad524a5019993bc753ce92cccada706b483f106ff20b327b35e7c83955ad3bbff3f26ced3489877d1b5bf285d61afcb30219c02a440da61030e301aadb901a525345d1a651a21c31a62ac9fb71738c3e215a8941ca9a3c4910679c5e774530c28788f6eddd7a31c024",
202 "tcId" : 21
203 },
204 {
205 "comment" : "uint32 overflow in length",
206 "message" : "54657374",
207 "name" : "RsaSignatureTestVector",
208 "padding" : "30850100000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
209 "result" : "invalid",
210 "sig" : "1369c78f816a9baf027e255de0c258125be90f35b8daafee87f2ffef2d465e0694af4401cc5cdc7ca78b08d5688ceefbddc02abc5495d47c6829d696f8370ea427e7e0225eaf22cda720bbb5881edd16b19bbf2ca86654c65b4ad481c13fb38af00d77922f46b311f936c51f4610f6bdb514b366aa05f029c1e63e3cfcf9763d",
211 "tcId" : 22
212 },
213 {
214 "comment" : "uint32 overflow in length",
215 "message" : "54657374",
216 "name" : "RsaSignatureTestVector",
217 "padding" : "30363085010000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
218 "result" : "invalid",
219 "sig" : "41d4c1ea43cb207af8bfc1552e31da7ca5744b68c4e00c3bf55f4edd4c81e91c01f44fa05290dbaa1fdcdcc775f6032a049b4965345c16aac6994b06cda9e0387dbff96cdb115e014f69bb057faca2f618c70a31edd0beaef7acdcc0fb7c83b2f07a8b9de48aa04b7c973920af5b8dc20aac343251ddf4c2277985c3db1dac2f",
220 "tcId" : 23
221 },
222 {
223 "comment" : "uint32 overflow in length",
224 "message" : "54657374",
225 "name" : "RsaSignatureTestVector",
226 "padding" : "303630120685010000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
227 "result" : "invalid",
228 "sig" : "76bae6c330b9ab33aa9f2abe8559c51fb95f953a75e48053ab99078069214b509dd1b5080ac6819e32912619372d71a9ff1a67449dd699e5bc6ec0e18d1893dfb5bd571d933926d05b0d9fd7036ba4556e209369d1c57ec49cd9075e583c257c6fd4899c2a8bbb157547812cc692f264bf54712c71ee090b974d99b4d1629696",
229 "tcId" : 24
230 },
231 {
232 "comment" : "uint32 overflow in length",
233 "message" : "54657374",
234 "name" : "RsaSignatureTestVector",
235 "padding" : "303630120609608648016503040201058501000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
236 "result" : "invalid",
237 "sig" : "3480a5c22f092f259b5bc4fdb9a33c044c24a645b57d61920effde1dc0bbfe53738023f16025841f9323b40f72c11091941bbdfaf7c2fbf77ad6626dbd6a3b7abb3ee916d96a922b11c86ce80ee67dec619bb98e9246d35a33b11b3a4e2a3a130e8b57ed4bcdd4b4e73aec3f9e3d50d3db5e29cffeb186846c72d09468d018ed",
238 "tcId" : 25
239 },
240 {
241 "comment" : "uint32 overflow in length",
242 "message" : "54657374",
243 "name" : "RsaSignatureTestVector",
244 "padding" : "3036300d0609608648016503040201050004850100000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
245 "result" : "invalid",
246 "sig" : "5b3d3a198d4b36c6d9641db181fff59407a25bf1571f85e47bad1eaf138079872b93b9eb51aae09b48d6f4ef56badd96a6584277d8f3c6e4a4e11275f72021b50a1665ddaaa56a2a7caa7da6b4d502c5214e17042811154d411dd2197c250264bb69ba43adf668d4f7b81d932afa55e378214bb19ddeb431f702a91dd11e23bb",
247 "tcId" : 26
248 },
249 {
250 "comment" : "uint64 overflow in length",
251 "message" : "54657374",
252 "name" : "RsaSignatureTestVector",
253 "padding" : "3089010000000000000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
254 "result" : "invalid",
255 "sig" : "1cc5577d04e34550e7f3d136064547efa30b9413e2c423b5a320eaaaf11cbebb91e13bbe3874e4650e057a8e38c8a366c473f35e0de82b22f846721a09e3f279ebdf54c8df395a9041333f09cb7bed5291bc1842857c4ce6ad5a1c2c476c1efddd5fe42824c25e0581aa7bb8f621d3b53566637c6266bb1bd0a5b7fb79c72616",
256 "tcId" : 27
257 },
258 {
259 "comment" : "uint64 overflow in length",
260 "message" : "54657374",
261 "name" : "RsaSignatureTestVector",
262 "padding" : "303a308901000000000000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
263 "result" : "invalid",
264 "sig" : "6e56d1746105344b34fb8299d173f4a5032cbce3556ca9d1eee35f8b31818efc121a1a9599c24fef8531243016dd6288d67b4bf9fdbf2c90fba5b1661be03531b5e15385ea465d1376010f0af761e8fb1afff7823dcef8dc100d97c192e9a7d03c82321d83fd8ecf67207c65cf182e1104ec5669536070cf1e3fe73c5e27edeb",
265 "tcId" : 28
266 },
267 {
268 "comment" : "uint64 overflow in length",
269 "message" : "54657374",
270 "name" : "RsaSignatureTestVector",
271 "padding" : "303a3016068901000000000000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
272 "result" : "invalid",
273 "sig" : "37a413f9202591b8860cd9d68515ab522ae800e9a71793b479f1fb74ab8c9b07e72fe82dabe1189d028b813610e5e57c055af2d32837551fdb0cd93d7669a3c02a14c460f4c92136a4d11cfb7dcc76401bb5b699fbc64d302736d68c3591ecd59220107cd63f55c83edd38c4568e6f7749c0d9baebfb7c8ae1bf2179101745a9",
274 "tcId" : 29
275 },
276 {
277 "comment" : "uint64 overflow in length",
278 "message" : "54657374",
279 "name" : "RsaSignatureTestVector",
280 "padding" : "303a3016060960864801650304020105890100000000000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
281 "result" : "invalid",
282 "sig" : "9fa8aac224bb50697103d457e7fc870853b23670ee5b8c7395d68ed82b30db18ae34a569abdcdf19238ffca8f5e435327dbe605bdc1a6dd3eaa3c2beb33f00642984a2034bf3b3e8de3ec7009e35069d5b27253c4aadcb4f163148e157252e3b9334abb6cf0299161c12908529f52de9416ec6218af7a6963fcc987c5024ea71",
283 "tcId" : 30
284 },
285 {
286 "comment" : "uint64 overflow in length",
287 "message" : "54657374",
288 "name" : "RsaSignatureTestVector",
289 "padding" : "303a300d060960864801650304020105000489010000000000000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
290 "result" : "invalid",
291 "sig" : "0f50bc6b1b94aeb6805dee51c92860693de47c4925ab90b57a46e0485a9afeed45083eade73bee684cd07048e632d1dd24aa2efc42c1f85e4fd7b7058dbeafb53a3d5b1cb1e7dded3352c3c92ded891839263a501afaa78fedfd04546c43d16f7a52b800abc9ab1ef827ae0eb19d9b52def2435f1477a48dff61800b4db830e4",
292 "tcId" : 31
293 },
294 {
295 "comment" : "length = 2**31 - 1",
296 "message" : "54657374",
297 "name" : "RsaSignatureTestVector",
298 "padding" : "30847fffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
299 "result" : "invalid",
300 "sig" : "9dcc651cc0a1b4d406112c0d1ebd7a9fb5a2c9d9f9cffbeab2d2821e5ed01efa9d191665794649bd1f588b729e8fba1eaa37a5a736a5863973c338a92b2665d6ead13b72a19d2da778febb94b150e8d750340a3b856fca8b3b6e3cbfecb9c397c23f46912ba546ab0f64ed88404ce317f8fb2278b68950e9712d6b11f5cdfcaa",
301 "tcId" : 32
302 },
303 {
304 "comment" : "length = 2**31 - 1",
305 "message" : "54657374",
306 "name" : "RsaSignatureTestVector",
307 "padding" : "303530847fffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
308 "result" : "invalid",
309 "sig" : "0397d14205c2f52423ef69c874294dc2b37d5be5d5647f7e83f1dd6783cb41cce52e6de1dc8c9e93ca1ef887d4c0ea79cd8b26391d638bbd8080bce830bf1bd7fb1de31346f28d609874fafd4a34fb7bee900441f55589ec3c5e190106d8816cadfcfb445834739cafaaa3903ed93cedc41a76aa0ce18fb49a3a73b7b5928735",
310 "tcId" : 33
311 },
312 {
313 "comment" : "length = 2**31 - 1",
314 "message" : "54657374",
315 "name" : "RsaSignatureTestVector",
316 "padding" : "3035301106847fffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
317 "result" : "invalid",
318 "sig" : "2c3ffd881c1c0ce2e4c98282d6011179a89b1e84b17072bcbbb64164e5e05410d0414a1fdbbc04564f3d80f3891f28c3f02e92bf97b4339b5bd4699614e236d4223cef0688c44b297eb9c0e22246b4cb28983b102a446dc76671206c3b77af6897f2f445512abda37bc9c37257dd4f1c6f0e6ec40929eb6b0058682b9d2f6c66",
319 "tcId" : 34
320 },
321 {
322 "comment" : "length = 2**31 - 1",
323 "message" : "54657374",
324 "name" : "RsaSignatureTestVector",
325 "padding" : "30353011060960864801650304020105847fffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
326 "result" : "invalid",
327 "sig" : "668bd06eafe953fca6a17b0da0f9006ceadb09ad904786b7530148df7eedc146d20a5472c39677d65e59934c00227fb662b3474596e6072f56d2c00c3d31e66f0da85f4670e75c3f2c910c0fec8c98bc31fb2eceff80350b78aec0d316e9bbb331544d8a3d0b1649291396c717e350bebba3d3c3a0b1d55f010879b8c7b7d4f9",
328 "tcId" : 35
329 },
330 {
331 "comment" : "length = 2**31 - 1",
332 "message" : "54657374",
333 "name" : "RsaSignatureTestVector",
334 "padding" : "3035300d0609608648016503040201050004847fffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
335 "result" : "invalid",
336 "sig" : "87482257ae1d18d0357428b756ae35a48549536a3439ca3c148eee64f4c096d896219097d55c14a25eb1490779f6b1471aed238cc0d6aaf265c12ac086d04de9b79a37518056dfacc12cb4916c17505fc7e2e6c1e0db720a286ea65bde4d3da1d2dcb8d0276e8ce73f3f923209149955285c602572cfd24c82e8d96d45f569e6",
337 "tcId" : 36
338 },
339 {
340 "comment" : "length = 2**32 - 1",
341 "message" : "54657374",
342 "name" : "RsaSignatureTestVector",
343 "padding" : "3084ffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
344 "result" : "invalid",
345 "sig" : "03aadd447f36952dfe73ae89e5c656b7d37ec92535e547cca62a7747f3831f2f613c7dc094f3d5c4c6b9e02b21ed4626930ef3948b42ed41f4cf468d2474acadf1c75599c5619e4872e6d3dfd93abe92234165135ed265e0c0f64fddf23e50c1f9fdcede8778a8ca008ab00f8afa887da3f4699df9f1140953232f36d035b03f",
346 "tcId" : 37
347 },
348 {
349 "comment" : "length = 2**32 - 1",
350 "message" : "54657374",
351 "name" : "RsaSignatureTestVector",
352 "padding" : "30353084ffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
353 "result" : "invalid",
354 "sig" : "31afd9a0d827755352b16de04de42e98a8c72f08919ed475530a00c762b8a03bde22634dd856a7eede4b4947d780cb3efe55775e16d7f46f209dbcb5569b2d9469cc271aa850f74960f7c741928055925349821e32e1e0fe5a040010a39a4b6a343f7f35c204106b3617e528a99dcaea8a93766adcfe7be31cdb98f7f7f14669",
355 "tcId" : 38
356 },
357 {
358 "comment" : "length = 2**32 - 1",
359 "message" : "54657374",
360 "name" : "RsaSignatureTestVector",
361 "padding" : "303530110684ffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
362 "result" : "invalid",
363 "sig" : "16ac0aa2d727ef5fbf0305259ee6fa40827c92419f819673fd64cc2dc2dbfe7ce1cfcf06e26d45f59cb3d9afd30d7a6265863fe856e0a0b1b9508b1e7a2dfb0f87f5ebfc444bbdae504abde7daa33bffb991551940df682c8e2c45edef0563b34d4f11e1955e83c2145ee321165517d1532abd64dc613a280fc30670bba1f898",
364 "tcId" : 39
365 },
366 {
367 "comment" : "length = 2**32 - 1",
368 "message" : "54657374",
369 "name" : "RsaSignatureTestVector",
370 "padding" : "3035301106096086480165030402010584ffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
371 "result" : "invalid",
372 "sig" : "0fe0c75dae62462e66e7277b03c9113727419f7d4db7b2a567c0c189fb6328e1f73d5d44e2196b436f4c2f0f12950d419774c8a51c55f9b2217f904c4f03d5f5754174719dfb85f62795ef75e6d54e703bf231fd8472250f529f85294f29f6c5653ef585079c3b3d8f931da80a46c8afeef37696fb0e7986d413bb1996b8ad57",
373 "tcId" : 40
374 },
375 {
376 "comment" : "length = 2**32 - 1",
377 "message" : "54657374",
378 "name" : "RsaSignatureTestVector",
379 "padding" : "3035300d060960864801650304020105000484ffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
380 "result" : "invalid",
381 "sig" : "9ef993e6ccf015b0b0de75b51213a1c3efcaf66bf83655287484ef28d984806226a7af1704fa6a7fc02984b44449f83ae24761021e49ba6117505c1e609406b002215de27d696643c3354fb48e6c64e7300944edaeb96e4872275f75532f5aab94358d4954522fc7903439e99223d8124e79a3f519050b6b576b77d5abe7c3e3",
382 "tcId" : 41
383 },
384 {
385 "comment" : "length = 2**40 - 1",
386 "message" : "54657374",
387 "name" : "RsaSignatureTestVector",
388 "padding" : "3085ffffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
389 "result" : "invalid",
390 "sig" : "0fbc20d18ef2dce383ef9640232e44fc287cd97bdb1a18614a77a6d72da5db05df264fff4964b3395445a5b75f4098be8c923ec613efa49e87877c08ce52e9e8b491eaab77ed2336179f1e447bc53e0d9fb9cbd2f2c5e180acdc946df4cdb0a878f27dc010adb1d080330e0bed852181bf97dc4372049ac6ab5802c0d650ffa9",
391 "tcId" : 42
392 },
393 {
394 "comment" : "length = 2**40 - 1",
395 "message" : "54657374",
396 "name" : "RsaSignatureTestVector",
397 "padding" : "30363085ffffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
398 "result" : "invalid",
399 "sig" : "3df42c382b86647a466ffc743dc4713259bd7dfdc909939738e59e3d1eb11d104537762c50eb55d4677a005f7f925ffc7ef0751ffe0c4320a6cf0733e738a404b2672f3dd11fa97bf9d84b786a47c63bbc962d52873765a6de3a57590c2cec68118af81d7dac4f7ce6c101811f2fa364a34fe704d674be5a28531d6e8c4fe120",
400 "tcId" : 43
401 },
402 {
403 "comment" : "length = 2**40 - 1",
404 "message" : "54657374",
405 "name" : "RsaSignatureTestVector",
406 "padding" : "303630120685ffffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
407 "result" : "invalid",
408 "sig" : "a66d9848a3db7e49d8053c4a3869415c0bb58fd265276c99a66ed1df84e162cfe8f0820229d2ac2f99d9753eed39af46649409cf559ca6edc8c47e550b7a4cf24fac756389e365ad73ddfa67e72d042ec494644c5f277f60864dc90d6cbfdf556396c795192077f51f173477b934871e2a960f7ac3e6e8c8039956a5061bccf2",
409 "tcId" : 44
410 },
411 {
412 "comment" : "length = 2**40 - 1",
413 "message" : "54657374",
414 "name" : "RsaSignatureTestVector",
415 "padding" : "3036301206096086480165030402010585ffffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
416 "result" : "invalid",
417 "sig" : "7561668d5b2f8fd3190be8244d4d0550043dc0a7e80dfac83eb6f6ddbf448d424082fafc332e473d434b37ce7605352594ce632f4d5de30951581af907fff6c01814022c31a31b3d130673a56b4ef7763bad595053af0174df395b802722f5046e408c978e2b5a9a63f8ea80e932f76513928253f432c8bdc7ee51872d315b7a",
418 "tcId" : 45
419 },
420 {
421 "comment" : "length = 2**40 - 1",
422 "message" : "54657374",
423 "name" : "RsaSignatureTestVector",
424 "padding" : "3036300d060960864801650304020105000485ffffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
425 "result" : "invalid",
426 "sig" : "5a836168587968425c4e103bae20603e0ae6f714ccdc603a865bb3541b65eee9dd0d9ee21cc66c7a83403fce2413b97f1c1239947e94614f6f2eb731387c8b9d956242bd9fb0545eb2c874ca1a167222034649894b41fd0fa935cf52e583a5e9a4b503cf9f2b238c025bf2e22ed78e7a64bcac1d38302cc2361c71b854e79123",
427 "tcId" : 46
428 },
429 {
430 "comment" : "length = 2**64 - 1",
431 "message" : "54657374",
432 "name" : "RsaSignatureTestVector",
433 "padding" : "3088ffffffffffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
434 "result" : "invalid",
435 "sig" : "97c602416f2131d34f2a57acecf26365a30c12f77e5beac095533848ce227302092c6f44b47f011d6eb0a91f8024d1935d8bb274c42b57875115a94281fd3cb198f9334758d3200c1c721f6babef332c02a89968a7089f7783993bdd54f809f8372437798d2364040c1faabfb00faabf28cd6ae4ffea29ae2c08a6a7e6074700",
436 "tcId" : 47
437 },
438 {
439 "comment" : "length = 2**64 - 1",
440 "message" : "54657374",
441 "name" : "RsaSignatureTestVector",
442 "padding" : "30393088ffffffffffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
443 "result" : "invalid",
444 "sig" : "2a970dc291a1dc935cca6985dda703bcc1ece2e40817ce8fa79b6e8fe84e113686e6e65570d46bf22147bcbc389cb5f86f92dc185f556d15e7614cef119fcd7305a31fd2f8710812f35f9f0bd8a1a6e5be3163de644370c67181b7575635dfb9f717f78631d62db714b2a19cea7079ff13c8926ae0c601e4befb6541b02a7e20",
445 "tcId" : 48
446 },
447 {
448 "comment" : "length = 2**64 - 1",
449 "message" : "54657374",
450 "name" : "RsaSignatureTestVector",
451 "padding" : "303930150688ffffffffffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
452 "result" : "invalid",
453 "sig" : "6e16d110235cd11e32b114ca9dac0cd6a1b041a6d2c61941d49bb458241281f62a4e2b1bf3cebc3e67e8c062ec67a51a599a553b09732e23e1d09fb2b20be7fd311a7122414d535651718a1421d4239276c227b96506729a09e3ff2779dd1c79de4d402623039b826e2bb4d26d1b56775fce14ed0203a9ebd8f042d981705a77",
454 "tcId" : 49
455 },
456 {
457 "comment" : "length = 2**64 - 1",
458 "message" : "54657374",
459 "name" : "RsaSignatureTestVector",
460 "padding" : "3039301506096086480165030402010588ffffffffffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
461 "result" : "invalid",
462 "sig" : "0716d252488e08f10a25cec94714e6105bd4e13ff019431190864cb0f4378d315f4bd0fdf186e1f2d45a6e97eb04fb2013273e178ce4f82a0b67bf9d021b1d8ab73d753adf2073ee1ad6190b2163139db63778a3670b7cce23f45efb601bd59644a431cbe534ecdf4c4c58ed02ed03863ee32d296b5736c010305fec655b1a44",
463 "tcId" : 50
464 },
465 {
466 "comment" : "length = 2**64 - 1",
467 "message" : "54657374",
468 "name" : "RsaSignatureTestVector",
469 "padding" : "3039300d060960864801650304020105000488ffffffffffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
470 "result" : "invalid",
471 "sig" : "03e52a2ed638bfb9184a0ee3698502af3a19bb959a984957de5101e6f7a62cccc2ec2a6293fa9d76fabf3ce7e4bf35c65a5f864bc003686a1e05b57c5af6ad588e05a5225479422d7b78c5bedddaec7f4b8c1e9ab7478c1ee253847324e025434b76a01b82a40123ab31ec9862c6016885dc6cbfe97801503369fd3688bdaaf8",
472 "tcId" : 51
473 },
474 {
475 "comment" : "incorrect length",
476 "message" : "54657374",
477 "name" : "RsaSignatureTestVector",
478 "padding" : "30ff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
479 "result" : "invalid",
480 "sig" : "9c4217830da16424a6c80a62e1e1cc0c589e3324267b4498e89af96998f83524b67c703e46860ca55631f1e659096366b60557dbbc8aa8a3a7ff6a887f1afcc55d336458ae25b015061adc391b8a449a7546e48d7e1d783e5684730333b0e2a32c13d36e342e31a9c1c447c0585545e08ce4f6340529413aaba6872280bbd7a7",
481 "tcId" : 52
482 },
483 {
484 "comment" : "incorrect length",
485 "message" : "54657374",
486 "name" : "RsaSignatureTestVector",
487 "padding" : "303130ff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
488 "result" : "invalid",
489 "sig" : "5aa35d19b312de94d0123619500c15ec79fd838f6f18e75e79a11e50d0eca9406ecb38de68e11cf107f80ce2d62573bd1e4062fe78f30cf4bdfe9bb571488887d9dfaa2d6031f3b7efdd0dd78f04d980abfe641f490faee10e86dcc9b729bda0b127b448d33b1e1b76373794c284d1aecb5b813a2defdae3723eafaaf3606eac",
490 "tcId" : 53
491 },
492 {
493 "comment" : "incorrect length",
494 "message" : "54657374",
495 "name" : "RsaSignatureTestVector",
496 "padding" : "3031300d06ff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
497 "result" : "invalid",
498 "sig" : "971daa114a33b412a3aa1c3a93d5e1cb9810210019fe4e6dd0c70361a99f1a0676563bca2a05915df2ef2e38cab387ea16405d371d1a382ac286f1f97d4fdcf84464413986d54d6e2c7aeb8d5afffdc6de31684ecc7df721957d331bfa588a5f2a65c52f29ba5e4585bc69539e1945f1c4306f8d664d9cedde6684254ac704e0",
499 "tcId" : 54
500 },
501 {
502 "comment" : "incorrect length",
503 "message" : "54657374",
504 "name" : "RsaSignatureTestVector",
505 "padding" : "3031300d060960864801650304020105ff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
506 "result" : "invalid",
507 "sig" : "1f5bf49483eb6f33a5575ec2a8d49388523ee41223210f05e1f9f73bcb5a8973dfaa0093247460885f034e4ed7cd888c63f9f0f74dba7065f00cbfe5d9cc0dc7aebd7893acc3f32d5cc03763b59a0a846554ef58569f153301dd6080d428c8330718e733b92e76367f4eb75213de1495bdb1a5743deb55a77919adb45bb6bc4a",
508 "tcId" : 55
509 },
510 {
511 "comment" : "incorrect length",
512 "message" : "54657374",
513 "name" : "RsaSignatureTestVector",
514 "padding" : "3031300d0609608648016503040201050004ff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
515 "result" : "invalid",
516 "sig" : "7bffc77cda9ff6bfbbd5a92fa6d4cf5a9f48a083c37a9437e5d82c0ad9f625aac8917c8df8bb4db5ef879431bacf360399c6607711082d6bfc5264f40631f2a742a3494c039146c3f41c7b53aa754afd35410a0a26c6957dfec86797268861036bacb5dc8fa6ca2893b26a3e4b186d4ae774a3822aa1e99ba4bf6bc3d53b2c99",
517 "tcId" : 56
518 },
519 {
520 "comment" : "indefinte length without termination",
521 "message" : "54657374",
522 "name" : "RsaSignatureTestVector",
523 "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
524 "result" : "invalid",
525 "sig" : "3e461f3131735907cec3208f19a7ecfaa8f3bedf587d1c586773899f3fed55cf669ba736c9478b93ff058fc063e62433bb0da4d6da8254a00a6b1e1527dba86d89ca412cb952a988009d8874163683e729c7544b9c83e07b77467b4329e04bdee552ab0513f92dcc7376ed59718b645b50bd50661c783d559eaceb12f7bf5d10",
526 "tcId" : 57
527 },
528 {
529 "comment" : "indefinte length without termination",
530 "message" : "54657374",
531 "name" : "RsaSignatureTestVector",
532 "padding" : "30313080060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
533 "result" : "invalid",
534 "sig" : "81312384fb68fc608aa019df2a251d5a77dbff379c99d2804bc5ea766f051a80dcab2f63ec0b60d2b26391b35a83a5b75c7449fb0b32bd28d78f1138dde33b223d141e293bf007c5d028b34cd6055a4ed7aa31881c8514a2a091690405f8a708da65b34730233168dc08cd81733d2717db133f5d54ada593184bd008e5a7f016",
535 "tcId" : 58
536 },
537 {
538 "comment" : "indefinte length without termination",
539 "message" : "54657374",
540 "name" : "RsaSignatureTestVector",
541 "padding" : "3031300d068060864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
542 "result" : "invalid",
543 "sig" : "1d1150ce975992c50b3cbe98f2373621929c7a90f8dc5a9434a06159fb614acdfbd09851b297505db51aea8132a8f082fe72ea23099aea18494d2a73aaa6b9b6b04ca6d20a88c5dcea917f92c5df7943254fa9c3b1e7eca05a2ae2f796726d9296c880cf0872b8c32082a3a42b9cd099d286b586b0efce95908c8ffd27835572",
544 "tcId" : 59
545 },
546 {
547 "comment" : "indefinte length without termination",
548 "message" : "54657374",
549 "name" : "RsaSignatureTestVector",
550 "padding" : "3031300d060960864801650304020105800420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
551 "result" : "invalid",
552 "sig" : "7c64ae50883b449f68f941c9892dc1e1f446bc3a779ce9906bf5f6751dd110162ee03a99d1b556ff380f176263846e76aea5e7078927ec6c076a79c64450f6ce8e7a9faab4040a31c145564107120cb524451e4fec4b1ae3702d0b063c660031b61fb6c2d0cb46d17c5f4605124057d5ce3a0ded2019a14718de1374e0e87124",
553 "tcId" : 60
554 },
555 {
556 "comment" : "indefinte length without termination",
557 "message" : "54657374",
558 "name" : "RsaSignatureTestVector",
559 "padding" : "3031300d060960864801650304020105000480532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
560 "result" : "invalid",
561 "sig" : "65e61f63db5ef3a5de4a11aa39e3f4a6d3d952336c19f0fd60255b376d459d318fe4234a3a6c883090617306f98659577f7670054fc4f2d4c82bf7fde24bd1a231c71644d487d65beead86828e48a3e081fa6d4666b86b899ea57c99a67c0ae75947f2a4e5dbce3025421b3213224e29a55faf0cab8d9411b629baabf7c9ba6a",
562 "tcId" : 61
563 },
564 {
565 "comment" : "removing sequence",
566 "message" : "54657374",
567 "name" : "RsaSignatureTestVector",
568 "padding" : "",
569 "result" : "invalid",
570 "sig" : "5df1c4a701c6fc1f2daf6f4538f29c3452667424c05edcbdaba4a1678c8b5bc0e89656a0e48aef46642e0bb597813688904e9d74cbd377a3d9d2c965bd3ed06f136f10367ea3eecf89a97508389448a31ae0e79ed3725d0c4e99a516daa4116479bc53da5d7c2f26c7ec6310d4cb4174bb781405630a9b1c147b0e1da3a7faf9",
571 "tcId" : 62
572 },
573 {
574 "comment" : "removing sequence",
575 "message" : "54657374",
576 "name" : "RsaSignatureTestVector",
577 "padding" : "30220420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
578 "result" : "invalid",
579 "sig" : "3e43837b92ebe4df08586fced3dce46aeb2fdb6ec2bd0c58e823f6e6363b9b676786929d13ede60a8d8d0daaf71f0de8880ed0fdac8706eb2f324394145818b641d1049cc7552bc6273d86e901099c78297381faec5c518fb6de429700f3bbfef76cdecbb60088b9f2a77d75b8ff86f06cf23850e3183a267c0ea34f4f839015",
580 "tcId" : 63
581 },
582 {
583 "comment" : "appending 0's to sequence",
584 "message" : "54657374",
585 "name" : "RsaSignatureTestVector",
586 "padding" : "3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000",
587 "result" : "invalid",
588 "sig" : "26d20fecdcf0b7d6a0472754aecbe115c39d580ce9d78b67d1a6395aa6ce6689bf6d0d96545341fbf04956a48c47f7d30bda017acb1d8e24ce596aacd3e05b1afa571d19f5316142557f765e4c5d080bc5336b79e2c02d8833d076ac9d7794ffbe85c66d0db97e1f5bd2ecb46afb15c19a8fe083fa593420e996a483c2a3a766",
589 "tcId" : 64
590 },
591 {
592 "comment" : "appending 0's to sequence",
593 "message" : "54657374",
594 "name" : "RsaSignatureTestVector",
595 "padding" : "3033300f0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
596 "result" : "invalid",
597 "sig" : "1163082ba8d48352df7eab96a0067539faff24374a630aa4393461a0aac716606625d706699dfc22cf3aff89fcc278f83a0adac87aa0bf192dd86a97031515de1933a23849478ebed20e4203abfb47345bc18f38da5d45e829997b10107c536999b2ce10b2781e1db03e10cc2bdbc2e0ff4c3db5d271ce83c1e7e267e7c1e107",
598 "tcId" : 65
599 },
600 {
601 "comment" : "prepending 0's to sequence",
602 "message" : "54657374",
603 "name" : "RsaSignatureTestVector",
604 "padding" : "30330000300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
605 "result" : "invalid",
606 "sig" : "0ded592bef1fa809841e0d7365e66af12f4239be0928656e7c49a043b9f2b18b9bd2dfe93a810c6e6c8ae6cb8a5c9d6e9d39a96a10b3bbdb92a7b8f575c2db4841c1b628160f956f54e0c58d3b6fd4d640b0a06d39476daba7be04b63a75f38bbf7517d9751d2b12d2dc00e44de7263275dce6b0c0af65d3c04878d6fc1be2ac",
607 "tcId" : 66
608 },
609 {
610 "comment" : "prepending 0's to sequence",
611 "message" : "54657374",
612 "name" : "RsaSignatureTestVector",
613 "padding" : "3033300f0000060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
614 "result" : "invalid",
615 "sig" : "95a42e5d9bd9ad5a8579444e8167bdecec16116a7900117b298c82d5560f1d16e9fbe963764727fef9111f2465e66177b576bdb8c70a58e3df6ff69edd2d6827c97d626b09c24cc49f223cd5d2db2916c54fd8f2ac7301723449b1823f2ff48c56849f7d608312d4bb7a97f90ba218f99cb773fba0a34909618f5d25854d7687",
616 "tcId" : 67
617 },
618 {
619 "comment" : "appending unused 0's",
620 "message" : "54657374",
621 "name" : "RsaSignatureTestVector",
622 "padding" : "3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000",
623 "result" : "invalid",
624 "sig" : "2344c598a8905b350f20de5cf0cee60253729a54be45b0b19acc109ac15862efab2e7c96e92bc990ed6959a40d725c24c25c8d223a46f490905c1448d8dbf7c9c427bc2e896bdce6d2c1daabdc93ce177f9525ac69d899bded12443338834a16d885456057461740c5140cb9a89a017851f9e99e38c1727fe5ccad9a7a8709d6",
625 "tcId" : 68
626 },
627 {
628 "comment" : "appending unused 0's",
629 "message" : "54657374",
630 "name" : "RsaSignatureTestVector",
631 "padding" : "3033300d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
632 "result" : "invalid",
633 "sig" : "a08cbe4009080f73cef03116ea949d1dbacce7025f7f61040fb4e052754d5b2d74c2dd06c0dfe1d09b97aa5739c809bec6d8cb27e852e9fef353bfa32964b99495a6dc63d6ce77460ac280c74c0cabdef794f74930f7f8827af1c6690d22ec2df3af497837bbe900a890e3feeaca2c0d16b0017155390ff0396a35ecb62b5992",
634 "tcId" : 69
635 },
636 {
637 "comment" : "appending unused 0's",
638 "message" : "54657374",
639 "name" : "RsaSignatureTestVector",
640 "padding" : "3033300f0609608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
641 "result" : "invalid",
642 "sig" : "500df36bd7d0b56642e2d5dab6e4ec0b148e7b8673cfab40e45c5dad5efc469b3321ce027a3a7ff5689366a18a32267d161a1266491b055f11557c35bd0d4f43df11b8a26f7b13c54be423b87b30b1dca956151c3ec3df03b30918a413179b0e064bf434736b323408e3f1330743c8bdbbb9d466dc1e21710c12e2e3b638b172",
643 "tcId" : 70
644 },
645 {
646 "comment" : "appending null value",
647 "message" : "54657374",
648 "name" : "RsaSignatureTestVector",
649 "padding" : "3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250500",
650 "result" : "invalid",
651 "sig" : "11a382fe570e0cfeb515955b70ec89a9353cda0c5a5d3cfa3e16e41340eccaa18ba21ad87c4a54a7131c4a7cf9afed68b1c1645568bab9b0fe7dfe0437abbe1fb6cf06bb690f46aa2eca034093ded661c38954341f3f35abe484015150307ecafd06d4309836771dfe29bfe56350d68725e0cd02b1479c6f99eeba2d59f40626",
652 "tcId" : 71
653 },
654 {
655 "comment" : "appending null value",
656 "message" : "54657374",
657 "name" : "RsaSignatureTestVector",
658 "padding" : "3033300f0609608648016503040201050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
659 "result" : "invalid",
660 "sig" : "110f3f188df46da58cdd46b5d460ba3d2f8d00d907289634d52a3ce693eb232cd6db738c48c8aa22d923d4f81d55925b3d4ff29ad9869f97a244d37b860cbd4646c6318c041729a7aaf473b61a93cccd62fe223d1be00364f03d722f43c7beff98c3fde573e7e6a0ce7d4a2a4bcf279765e29769bd4f884ce41fb808ac3d541a",
661 "tcId" : 72
662 },
663 {
664 "comment" : "appending null value",
665 "message" : "54657374",
666 "name" : "RsaSignatureTestVector",
667 "padding" : "3033300f060b608648016503040201050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
668 "result" : "invalid",
669 "sig" : "470416ee76f0bbdbd2812b533813e4463b799f4036e6955f3e174f6287e3c73d57c32875607e2eaf06d612cc85170ba5df31286edb645ae9ceb9e62064050f3e7f6b36fe8fdae7a3bd89b6acc523c923b9d3f3e5f57d80c9100b39dde75caf46adcae56668149ce0b80762bc459ac598241dd79c6b4fe0220ad53e3c591243fe",
670 "tcId" : 73
671 },
672 {
673 "comment" : "appending null value",
674 "message" : "54657374",
675 "name" : "RsaSignatureTestVector",
676 "padding" : "3033300f0609608648016503040201050205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
677 "result" : "invalid",
678 "sig" : "100714ee0d38c541c2632e96885a7ce0afcb22f0cbd84c556f19d1b44bce75a8fdf141e975dda1812b4465050d4615a51c3b9816606c7ac88d6b684df938e7a8852835dcf5bf0ee45f2e413290691832095af77eef0e7a86f72167dbb03758e68561f7f06afc6e902ba19fad57e00cb43c0fb2a5ead689a146c79c9e6188bd85",
679 "tcId" : 74
680 },
681 {
682 "comment" : "appending null value",
683 "message" : "54657374",
684 "name" : "RsaSignatureTestVector",
685 "padding" : "3033300d060960864801650304020105000422532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250500",
686 "result" : "invalid",
687 "sig" : "44eaf5ded57ac5c25c17eb31c2e071400b46b9022641347b2edb0b14efbd4eac5f71e4bfbe791e164c003667387e57ae22c6b00e69971d7245e381f6459e5f88d9dc0fdb385b777fe99e5e4d79aec057e41a1e457fe2b91a5f4a8878d2eaa1c3ad8393d281eca07ebd287364a19045029fa7ed0e62a21e5e42a88a52ea4abc8b",
688 "tcId" : 75
689 },
690 {
691 "comment" : "including garbage",
692 "message" : "54657374",
693 "name" : "RsaSignatureTestVector",
694 "padding" : "30364981773031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
695 "result" : "invalid",
696 "sig" : "3b8b17b4c7b66b2fa3be8eb404e32b6fc0b9e56bbe678bddc8f7ef7c042c12ae5290b9c4201b35d10e409f3b7eb7760f5dee7fef09c30ea858b78bc9637dab245b8f83ee83c75a7aa3d5234b0b6dcdec385f8cd305dfef92aa83cc0ecde8f20f08af78b600c1f802695c243502397dd161b6151a72ac20596a7d7efd8e321298",
697 "tcId" : 76
698 },
699 {
700 "comment" : "including garbage",
701 "message" : "54657374",
702 "name" : "RsaSignatureTestVector",
703 "padding" : "303525003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
704 "result" : "invalid",
705 "sig" : "762d30b302cd76b021e237f28017e48488ff3bb30ff9e92db5b1e76eec2ee91c9af03e1c5038afc22591b1cd8cfae648a33ab77901f9f3736e50eea83f7c7a4546dc55c0265fb17dfdd30250fa3881e34e51b4f2e54554ad098eee952ec888e911a0ea5df42c0560bcb4bdd718c88d834b534917e555c38fd1ec3593b2f25b39",
706 "tcId" : 77
707 },
708 {
709 "comment" : "including garbage",
710 "message" : "54657374",
711 "name" : "RsaSignatureTestVector",
712 "padding" : "30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250004deadbeef",
713 "result" : "invalid",
714 "sig" : "8cbf9d425abef67ff0a7fb648e70b82b1556ac80e46dcff37145b9041bee2bbbfa56817e04994c9cf1123c6df2aeeb1637595eb1e20adef51d657943fd67826ac5d5dfba106ae9cd243f12746917a446ce955034b46ceb0f4d542b7bcd06ad3e6e10899d5338e6d8caf3d4de3cbf45d45a58d946a64d0bc13e97a4ab4e6b6016",
715 "tcId" : 78
716 },
717 {
718 "comment" : "including garbage",
719 "message" : "54657374",
720 "name" : "RsaSignatureTestVector",
721 "padding" : "30363012498177300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
722 "result" : "invalid",
723 "sig" : "2f4944e5191dde165950a381eee6cce3fd40214e6a9851919f5441b4efb7ae5724db46e92a747937c3c8f9329facb7a71ad5f380e44dad0436cd05fc312bf3cbf05c4873ab2125d605848cf97ef976f7ba8ab6949bdac5152bf1a66945caeddbd89346965a33a8fe0a0ba63b59beb05a44b6d84e1fd93506edcc48da12d488a6",
724 "tcId" : 79
725 },
726 {
727 "comment" : "including garbage",
728 "message" : "54657374",
729 "name" : "RsaSignatureTestVector",
730 "padding" : "303530112500300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
731 "result" : "invalid",
732 "sig" : "975d07b7295268a8662aedbd2b65b5eb10bb496077f41b90d12d34ebc7e492f0c7f3a41d4164a279f06ea616f91968628be4ceecd4a554477bc76cc6b2e6bda4042dc253327c4b8fc40e9242cbc8b835114a7379a3081bae4b2803a99deb4a540f8c149ca5db3a61c7bc9f61cd7e55521660a06603849896c791a18d1c7360e1",
733 "tcId" : 80
734 },
735 {
736 "comment" : "including garbage",
737 "message" : "54657374",
738 "name" : "RsaSignatureTestVector",
739 "padding" : "3039300f300d060960864801650304020105000004deadbeef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
740 "result" : "invalid",
741 "sig" : "37352cd11eb5ff7380bfb7c0d3e8d9979ae7cb489a71c31a077d59496547b0c95a760387ed50eefde0b762222f05a6033740f6e010693edf3ef8ab5f9c57f4eb1f6ccd83287dcc2e90857defe5ba4109bf79ad84ab069c85a25758d22536c6882919245fa2d7e7921b3635d984deeb6555cabdfc46a42c75875d55924c8bac62",
742 "tcId" : 81
743 },
744 {
745 "comment" : "including garbage",
746 "message" : "54657374",
747 "name" : "RsaSignatureTestVector",
748 "padding" : "30363012260e498177060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
749 "result" : "invalid",
750 "sig" : "05df1fa9290a68415b86468a57394c052f00abdd6c65eb4fbbd834cc117cee4bba99764906fdc46e78bd9d554d15cf0284a64dd0c19877115c425a1ba70c1a4339a54ba7fd60ec809b9b789dc06997c2f25e890d8bdb1bc945c0daa8c61feab5bca471bd520126b6db3d6077f55428e0e7374da961dc5cba5397604303eec6d5",
751 "tcId" : 82
752 },
753 {
754 "comment" : "including garbage",
755 "message" : "54657374",
756 "name" : "RsaSignatureTestVector",
757 "padding" : "30353011260d2500060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
758 "result" : "invalid",
759 "sig" : "1fb1960934683292a4c92cf3d582cd5fe68888a5b0f6c2e64538289da7f96a9efcc36bdbf1fdc0cc0b3b36c6af608309de58c6151112f3a78599ade4a718b359547a4cac9a020e5e7e7117d1bfeb3ec21bfe9732825e624b27ddf8a946eb858b30461706f769a54b0478e0753388951d98129383590186b80836608f7e06c72f",
760 "tcId" : 83
761 },
762 {
763 "comment" : "including garbage",
764 "message" : "54657374",
765 "name" : "RsaSignatureTestVector",
766 "padding" : "30393015260b06096086480165030402010004deadbeef05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
767 "result" : "invalid",
768 "sig" : "7e4f953b288c20fd5bec56a00745db9be03590efcb637e2ce2119a0a1846e9f38c0ebc5f2498ebde6217d81c9939b6d6a6f35ba54ee50d6313d3f2579751e7ae8d31ef4b0e99ca2e96c80459a7e5ff51f6f31e9c965be19097de13017c90037aa482d197c986f50bf2d5e1acb3f3024605e46d963410a4a623c898d0d773a78e",
769 "tcId" : 84
770 },
771 {
772 "comment" : "including garbage",
773 "message" : "54657374",
774 "name" : "RsaSignatureTestVector",
775 "padding" : "303630120609608648016503040201250549817705000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
776 "result" : "invalid",
777 "sig" : "53b8fdeb2d8aee9796a56afe4934221610ad028ae6f9478c90d4e865f3f78b3d27b383f87086d50fc4d96c5004d8a22a0c5d32afad45fd68fcc3e9115bdfddab605c81f31d0a8ccffcfd5fdbfa0f0a4386649198b11c10f33ec5bd73c713a6af706e617a3a1e967f6ac025e7f283e49bb9ea1fe3a4f27d9f6caaf1bf4981ba06",
778 "tcId" : 85
779 },
780 {
781 "comment" : "including garbage",
782 "message" : "54657374",
783 "name" : "RsaSignatureTestVector",
784 "padding" : "3035301106096086480165030402012504250005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
785 "result" : "invalid",
786 "sig" : "90a5d10e2e19f7e016d5126a3d3eb91432611ebfd411b07a4be15aa48c39df33f3a2855f1e150ad34c7f83973bd73eca6575dcbac4086aa0a38db3d6e6ee2e9f419768493fb4829f1f6d67f80359f82d95483d6057de17fd388ae46687c429dea4d9f7a286c95fb1b9df0f1ba40a4263307789952b1bd07cdcb3b5cef10d9d2e",
787 "tcId" : 86
788 },
789 {
790 "comment" : "including garbage",
791 "message" : "54657374",
792 "name" : "RsaSignatureTestVector",
793 "padding" : "303930150609608648016503040201250205000004deadbeef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
794 "result" : "invalid",
795 "sig" : "a88d38e8c765b7e439f42294e71c1689a318ed5414efdf474196989829d4989fce8910798f4d7873fb43d3a501fa15c8019813104e4699597246db66f96c838e45aa3596a1d26cbe9f6ee91c077422953b402f7e11f8768a2f132295bff79a0d10ab843cbcf2c921113992336638f4052446f52815328ba4946510a6b701d448",
796 "tcId" : 87
797 },
798 {
799 "comment" : "including garbage",
800 "message" : "54657374",
801 "name" : "RsaSignatureTestVector",
802 "padding" : "3036300d0609608648016503040201050024254981770420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
803 "result" : "invalid",
804 "sig" : "a34e59121976568352ea031232f6da386623a1c6866e36d6c6c07168de977faf6e008f14fe22a27d42664925f756f4b57f5258ceaa8197c3c172068dabf3c6cd46b3cf0262931bea731249781f28361c25cba9b64f678c0b2692056469624d0204bf2bf9c4e87407372838926e6b34e68cfb31e2870bfb5b0fdfa2ec1e177149",
805 "tcId" : 88
806 },
807 {
808 "comment" : "including garbage",
809 "message" : "54657374",
810 "name" : "RsaSignatureTestVector",
811 "padding" : "3035300d06096086480165030402010500242425000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
812 "result" : "invalid",
813 "sig" : "7f642b5702c331dd76b7ff66578a2c0547d91c556b7b9751443d911729fb5ce8426515ba068e2839cfdc956eb813c25d65a2d5213b59302c0ed5e6fb95c49002edb1605f8f622912fdc309d92e6e3f188ba19e991fab0a7018ae4f6e70927d91cffec51b2dcc8113908faa1173ec9ed72350aa93a8cadef8bfa7305bae22bdf9",
814 "tcId" : 89
815 },
816 {
817 "comment" : "including garbage",
818 "message" : "54657374",
819 "name" : "RsaSignatureTestVector",
820 "padding" : "3039300d0609608648016503040201050024220420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250004deadbeef",
821 "result" : "invalid",
822 "sig" : "0abb75f2fac084da0b99bc823c021c4872e23302a6a25e400b6f25d60f7c903899a69dc548676106b44f37c1e6d2604eb995a16880a2a8e2cc9e0ccb2b984ae482036f69a6ad31a2b5836e73e0d30c3e10f8b93c7587d7c0f2371183edc3b8cd0fd7bc325b1cf75e1079f8d6df53fe495722cc1ce707cca49bc6f4ed2ca6c4f9",
823 "tcId" : 90
824 },
825 {
826 "comment" : "including undefined tags",
827 "message" : "54657374",
828 "name" : "RsaSignatureTestVector",
829 "padding" : "3039aa00bb00cd003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
830 "result" : "invalid",
831 "sig" : "9f2234b108a45abaed850e19d2f9576f59bb83dbc6165da61c4798638f9c98587c7eb92a8c901dc4430e4a47dc05681ae811ffcad6f7a604c43551cd0f5d123549435d622f7efec578301efd49dc6b139abbc3c7d6a26858f6d18f09b863a145d6483c9efc6c322fec1341b6362dc1d752c714efcdfb09097a0ce6df7dbe88a9",
832 "tcId" : 91
833 },
834 {
835 "comment" : "including undefined tags",
836 "message" : "54657374",
837 "name" : "RsaSignatureTestVector",
838 "padding" : "3037aa02aabb3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
839 "result" : "invalid",
840 "sig" : "24ba137a293599ab7e50a0a4f8c7a5cd02dda6a4568c93f84d00ff47296564563c9051b334db2fd2c081b23d322d4870a61b2435d651d7efb4e1b0920e759f7fd81a937bbc85ff43dbe2b702dec3acf4db68d5fd7b8a2f6d32cc49a7300dd659623b391927a2442d69c6c3c29e59eb80b1d0a95bec6d18a6223cf4357eb7cc96",
841 "tcId" : 92
842 },
843 {
844 "comment" : "including undefined tags",
845 "message" : "54657374",
846 "name" : "RsaSignatureTestVector",
847 "padding" : "30393015aa00bb00cd00300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
848 "result" : "invalid",
849 "sig" : "04023dd35fa479f8156794d02935f8669c023c774b95c5a0e02837e32ccaf7a4ba5195835a15de6a21796eb96bdaed868f9e8b7f0a5a21c1a3058f53aadb62d6ee74cd70b2c38f17e42a1f7ffd88955731b4e15368211ad53f617aacbb54a7e7078740ba6daaca81c1b321b748ea1d13f7aece490226636ecac41bdc275175d6",
850 "tcId" : 93
851 },
852 {
853 "comment" : "including undefined tags",
854 "message" : "54657374",
855 "name" : "RsaSignatureTestVector",
856 "padding" : "30373013aa02aabb300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
857 "result" : "invalid",
858 "sig" : "253bed76e4b8465ebfffd1b7214ce586294d3bea290517ca2bfc417ba9d8e72d286570c348dc6084fd379c2bf4dae424189964639533e17c409ae18e445210ed4dc98de4ad7336554740d1532d5010a1bd7ebbc33ba48a3365d50669e4f4522d0e5ff7a3bdb1c42c42dee647a8a3ce16633eb33bbc0a869e12cf99f9481dcf85",
859 "tcId" : 94
860 },
861 {
862 "comment" : "including undefined tags",
863 "message" : "54657374",
864 "name" : "RsaSignatureTestVector",
865 "padding" : "303930152611aa00bb00cd00060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
866 "result" : "invalid",
867 "sig" : "0775598491297eb9004eed66234ded82e047ea2f06837425e6bd27f33b1373667f3ff4961d60f85edede88ec2bba2680151da3763f0df9785b31771da7e643862ff9ba944ab54bb1356ee113e420002a873f1eb381660f3eb84b1d6b25ccb8b82ad12ad0a449c4de205144873329e80ae8a84d1d3c1660b3303cbef28b48a553",
868 "tcId" : 95
869 },
870 {
871 "comment" : "including undefined tags",
872 "message" : "54657374",
873 "name" : "RsaSignatureTestVector",
874 "padding" : "30373013260faa02aabb060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
875 "result" : "invalid",
876 "sig" : "a73df043d06ae53a37773016a4e21d3f1093c50e079b189c4bd7db3e2e9875b14e5374cb8e7394a9f1b45c7e4e9dd516198bf5055b30ea4d205f39fddaab3da0cec63524bdae2ae166a3874c59057d93855d6e6314fc5da8111ff58666a73c00a105311859f27d2fb92f507531b9d681e219861e4f0b2b979c185af2690eb4f7",
877 "tcId" : 96
878 },
879 {
880 "comment" : "including undefined tags",
881 "message" : "54657374",
882 "name" : "RsaSignatureTestVector",
883 "padding" : "3039301506096086480165030402012508aa00bb00cd0005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
884 "result" : "invalid",
885 "sig" : "17e5a889b8139593e192f7af684c918f2751f157214863f88984ff3d8c9e381d1bee5ee788fc82869f4c3d8483e3c17c873a850a7a5c85e4518cbd8531b331a308a0368a868bb7995ce0f8a7ac5ba53b88c31c958dfabb36ed461472505b598418185b864f381342c29dc80e55ca7c2095e7788e7e8d385d61de605f74e431b9",
886 "tcId" : 97
887 },
888 {
889 "comment" : "including undefined tags",
890 "message" : "54657374",
891 "name" : "RsaSignatureTestVector",
892 "padding" : "3037301306096086480165030402012506aa02aabb05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
893 "result" : "invalid",
894 "sig" : "a659f7c44e4589e9f6658b0b57e82e65d5ee9fbe2376894f558a7ca4b6e3c5032f953d1dccfb9b76bbc53dd5d1a52cfc092c6ca279b37c0a43c99ec0553d7ef4d9bf9361a1c4a3fb7496aa58c0af518312e18819fffdafd1a230a38440a6fbb0e69babaa977b8b5fe08ed7c6d59c0391ccd80b42a0c0102264b0ed6af8524e9e",
895 "tcId" : 98
896 },
897 {
898 "comment" : "including undefined tags",
899 "message" : "54657374",
900 "name" : "RsaSignatureTestVector",
901 "padding" : "3039300d060960864801650304020105002428aa00bb00cd000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
902 "result" : "invalid",
903 "sig" : "83fd4599a47bc0852ee1a12b2d97fceae6d8442fd089df1d21ecc252a410982410bbd2cc6bbca219502c2934ac593a09beefdeb54b0692b3e5724b79b0f5c53541b62b0c4bf80a658af71d5964fc6a1fd7823370d00e24dcead4bdc86bcd883fe3f48dc7f8468ce99b7580306007021b68b48ace274e3c09a1b5e21fc7542ef0",
904 "tcId" : 99
905 },
906 {
907 "comment" : "including undefined tags",
908 "message" : "54657374",
909 "name" : "RsaSignatureTestVector",
910 "padding" : "3037300d060960864801650304020105002426aa02aabb0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
911 "result" : "invalid",
912 "sig" : "4bab6fc6948143f8ec7c8ad86a0c5cda5bd8151c24ca7916857778729c882581603363fde0ae2a28b6f8f2c8ce8d5f6b6e731bf8ef735bd31318069544295b54b04ff2abd1e11900373931164586d7c830bae704f7314eebf1d32b3a171274ed456e335d2a0b998ac441053ef096a037bfa6e5cdf3835c45ede383f0ee8feeec",
913 "tcId" : 100
914 },
915 {
916 "comment" : "using composition with indefinite length",
917 "message" : "54657374",
918 "name" : "RsaSignatureTestVector",
919 "padding" : "30803031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000",
920 "result" : "invalid",
921 "sig" : "2d9940c172e83a1ce38ce52741e694c7b62c77a63c0523ef68ffde402b0cdf7102afa7005a731d399757b69d313c2970a61f785c12fe79aad5398a956a2c004faec802691b00246cb759b0db432739febfef9abece7bd95e6ad980eb9d8b53886f739035b71fecd5e5ef0f0c0990a9f8fc0aa5d18089471dbd53488c23630415",
922 "tcId" : 101
923 },
924 {
925 "comment" : "using composition with indefinite length",
926 "message" : "54657374",
927 "name" : "RsaSignatureTestVector",
928 "padding" : "30353080300d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
929 "result" : "invalid",
930 "sig" : "69fd1dfca1b436593840f946e6113a79018c6cbc4e2b4562b12d06c03c7cfc1e724841ec59aeb0371c67a76a089a3f83f837255719bd648bc0888339c54223c25a238e717d1a90691fcf9690a3fef132f034cc03926ba8ae21dbb68467669cd19837907ca58237b6619be08a92ccf8e5756e3caec34a3c2a4622d7154a72256f",
931 "tcId" : 102
932 },
933 {
934 "comment" : "using composition with indefinite length",
935 "message" : "54657374",
936 "name" : "RsaSignatureTestVector",
937 "padding" : "3035301126800609608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
938 "result" : "invalid",
939 "sig" : "58c64866f9c1b6cd94c33fd708375ee8462f89efb1c72322174a1c5ed9117885bfa4a02ef0acc16d6a078800b84e9fbdb7f8f4f232091326811e71639fc1321b31c15c9fccb68f77c79b2e39b817478539636966c0adb23407401a4c68e6cf5589104a5557650ac389e4fb2a64191014c4e8f9af48f8a28f555d5cc32d7a87aa",
940 "tcId" : 103
941 },
942 {
943 "comment" : "using composition with indefinite length",
944 "message" : "54657374",
945 "name" : "RsaSignatureTestVector",
946 "padding" : "3035301106096086480165030402012580050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
947 "result" : "invalid",
948 "sig" : "0ba4e7900332ef20ad600bd4b8c0bab55c1030138c6131c1cf14a45fa98e10ea297ff6c2b8de3d92bcab6f1d303f4f8168848b2fee58ca40fb1f1c7eeb808c212b413f6f302d2e3904c2be2fa77fac21d04352a0abb07aae028e54d9e08ce37a6c210ae47095890d668cc1c296c9db1b5ddec30b722790260dc26c85e35f6692",
949 "tcId" : 104
950 },
951 {
952 "comment" : "using composition with indefinite length",
953 "message" : "54657374",
954 "name" : "RsaSignatureTestVector",
955 "padding" : "3035300d0609608648016503040201050024800420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000",
956 "result" : "invalid",
957 "sig" : "6f7b739d7e604a1123a232be4d0909a890eb3ad115f822b91592563a55fa59711f7ad17d1370abd4a6af6dac7ba08b6ae111291b0c8fd0626bc068022a8eff5ea5b797cc7fd35a81130a9394f051d2bb6bdf6190c11b964dbe2e4021a71ee8b405d0baf91ad5897d9ce22c8c1dd0e7dfee0e6abd979f5a1cd9443116c212b806",
958 "tcId" : 105
959 },
960 {
961 "comment" : "using composition with wrong tag",
962 "message" : "54657374",
963 "name" : "RsaSignatureTestVector",
964 "padding" : "30803131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000",
965 "result" : "invalid",
966 "sig" : "53e00d738939553ca6f742ccc3671c88fd2319dc438d046f06011e088b57df8703813a53fa9c68a8b2de333445fb739726ac2b6ce3b2800e3082f48b823a06d0b2a83fc4c0b2e6a40fc2d86b73030e974f101dc6fd6a24abcc6cb347eeed08a4c8086d1fc5fd68b0b36fce0c79e5187c38c8a4cd35973b1755643aa28496fbd4",
967 "tcId" : 106
968 },
969 {
970 "comment" : "using composition with wrong tag",
971 "message" : "54657374",
972 "name" : "RsaSignatureTestVector",
973 "padding" : "30353080310d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
974 "result" : "invalid",
975 "sig" : "9382e341df276efda17aaa4410801a3ba0e4ccd5f0b61cde2416c7a8345cab1bb1fcc4a4a1d7c4a03a9d9ef68c83f2b3e08fc5893324159cd3dbae159bab67b109e55db550b540aa6142531528281732f63235785e145ea0defac4e67e825b30fbe9ff19687436d600ca412053e2430a1d1b637d4db255f1616713f3a2ad135b",
976 "tcId" : 107
977 },
978 {
979 "comment" : "using composition with wrong tag",
980 "message" : "54657374",
981 "name" : "RsaSignatureTestVector",
982 "padding" : "3035301126800709608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
983 "result" : "invalid",
984 "sig" : "01ed4d8d4a342729f18182bc4f7645ca0a5216b57d4d26b874832983d19741673aa7c0e01705ada27ab779b9b84f431e83c621a2dd7ae5f501ec369273d297144b76477f4408bca5ef6a59053c1ffde80bc228f99dcaaffb4c520c507b3a941399042f0c535015d86b2b5a95696b71ed61ff2bb585442b85fa2477268b71f77e",
985 "tcId" : 108
986 },
987 {
988 "comment" : "using composition with wrong tag",
989 "message" : "54657374",
990 "name" : "RsaSignatureTestVector",
991 "padding" : "3035301106096086480165030402012580040000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
992 "result" : "invalid",
993 "sig" : "21782ca777e07848b600c37bb0a881707e580fe822d5dbb78f4809251a5cd74cb6f3636194cec8bab9040339da6531c730060ff5ac39ac9ad56a2371fe21e02ce08da18778d2256276c47ef0261d9c453360fbc4a2cc1dc7a8965ac2ccc17b460b0fe359ae4fa53f75efc68e96762cff5d98be46fbeacce2edf1d1bf5e158653",
994 "tcId" : 109
995 },
996 {
997 "comment" : "using composition with wrong tag",
998 "message" : "54657374",
999 "name" : "RsaSignatureTestVector",
1000 "padding" : "3035300d0609608648016503040201050024800520532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000",
1001 "result" : "invalid",
1002 "sig" : "1eb6de862a77d435e62635b620be37fc8be499500c19b4d87b3f993b9710f55476d3f3ac27d5ab2c1ec36dded088bc50ba5c0540934fdbb5ed3309babd766726ae833aec211a526caa82bf08f1704b66128f24c912c8c3719170090fe1a2738b0da32f91d35546a9a499618428d368b326203aeafce635668d3d5fde15762d84",
1003 "tcId" : 110
1004 },
1005 {
1006 "comment" : "changing tag value",
1007 "message" : "54657374",
1008 "name" : "RsaSignatureTestVector",
1009 "padding" : "2e31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1010 "result" : "invalid",
1011 "sig" : "5770bbbb883f93f7c29bdab32e496f2e9063110fe648705fd0b1dc927052fc9ace9b36d898d19cd4f862b777b7c790d767b8313f735ff567c34cfb31f29644540645beea182cabdf789ff9ac3f68cc20444af0b9d4ec0bc8992945063fdb733cccef7590a10bdf491bc21c38f25ff65a581b40343e30529c3dbb71f62189ba3f",
1012 "tcId" : 111
1013 },
1014 {
1015 "comment" : "changing tag value",
1016 "message" : "54657374",
1017 "name" : "RsaSignatureTestVector",
1018 "padding" : "3231300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1019 "result" : "invalid",
1020 "sig" : "359dfbf40d3c2383f58bef1d518abe9852ca80d797393e4e1a9380ef08aa851d585213e8897c6f701ab680b0f63ccf5ea4216331918ca9a984fb6ba549f4bd066ec1fc4f1ed053fa5658b01df674a21322ba7e21fba6cbb3a8eb5565fb7bc269f99c65981efa650dde613ccd6d3927cdae45922d94dcf7ca5188bf5acf84035f",
1021 "tcId" : 112
1022 },
1023 {
1024 "comment" : "changing tag value",
1025 "message" : "54657374",
1026 "name" : "RsaSignatureTestVector",
1027 "padding" : "ff31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1028 "result" : "invalid",
1029 "sig" : "24a61067121e9b4363b816b7c5750584c23f3c3200ca929fdedbe95d7504c56ea7dffd762074e44e96e22147943f2b704003967270b2be1bd1baadc3861c4cae91bd41530c67220349db4481d324d9927d52fe85618ddab2598996c5813f3299e1afb020b24003fa94f94a0c6c02b3183295e0de79eda021dccc5539cd7874ce",
1030 "tcId" : 113
1031 },
1032 {
1033 "comment" : "changing tag value",
1034 "message" : "54657374",
1035 "name" : "RsaSignatureTestVector",
1036 "padding" : "30312e0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1037 "result" : "invalid",
1038 "sig" : "11b8d1dc2fa2afbc32f048d7454ba032b432a2ecd438506aa72c697a5c118e9e231a0c6b6340b5564402b7e837c59dd36f726fd626621b8f543964198484087eded70e7bb1dd63df2cea33198b9d02dd28e3b8bd006ba991a8b3bf06ac928bef45cba2362f2e11a5fbfb0310e84e8b7ba1e17c315adc1f34519134c36689619d",
1039 "tcId" : 114
1040 },
1041 {
1042 "comment" : "changing tag value",
1043 "message" : "54657374",
1044 "name" : "RsaSignatureTestVector",
1045 "padding" : "3031320d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1046 "result" : "invalid",
1047 "sig" : "8748f029d5294dc917cf4fb347e0046f903c088fd976ca97b1322738549df7c56cd67349d66596338fe418b29de9e8af8872fcdbb55e1a6f74e9965fe7a365b846b667d0ae50df23083be73cceb59db545a3e1a560f6ce0e9eaee57b5f95b8487a3987c00f364d0f148ead6d7e6a37b05456b913b7a79c0547b80da2a2893881",
1048 "tcId" : 115
1049 },
1050 {
1051 "comment" : "changing tag value",
1052 "message" : "54657374",
1053 "name" : "RsaSignatureTestVector",
1054 "padding" : "3031ff0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1055 "result" : "invalid",
1056 "sig" : "2bfc087003f3b98f0c8c5273de34f5e4d5047e909cd80e222072f6a7926ced5ae169131342640f2be11bde2f7565c3c63d0335614dd278915514de8421f4521f0138109a5c9778f86647b8a42815b6b861f173f5a6df893873f99c5e62bc3c086150e3b7d7abb943ecbe5806068abc433e9052d9bdfa19a58d19da463dbf3b23",
1057 "tcId" : 116
1058 },
1059 {
1060 "comment" : "changing tag value",
1061 "message" : "54657374",
1062 "name" : "RsaSignatureTestVector",
1063 "padding" : "3031300d040960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1064 "result" : "invalid",
1065 "sig" : "0fe03eea6c50ab664bebc7d64346762aa29b08b61f2877973cd543c9533c9d0451db8d836eb46e8d64283306efd7ef6387cdc3c794f7474f2e7d51b9df078095adc85fb810cae52434c9cee5048fbff72610778397fd83204f44bb87f7637373d111dd16e18287bd9ffe816683bc3663f586082fe0811ff6a06c0264b67f7716",
1066 "tcId" : 117
1067 },
1068 {
1069 "comment" : "changing tag value",
1070 "message" : "54657374",
1071 "name" : "RsaSignatureTestVector",
1072 "padding" : "3031300d080960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1073 "result" : "invalid",
1074 "sig" : "748b9e64195314003ca31f726bb3d3294abd8eb376365acc5b1cd36934bbe1a9bae99ceb7c1a40c910bca6007ced7961ecc9ac74c7a6424cc87b6b9610320ab9c5b527d986c6e8ed21e677bbe2ee7752e2dbcfceecc2dd6da3f6c6b9c81435e9e060dcd67ba834729761dfc9570b79bb1b8ead7bc1325c2233e445eeed12dcad",
1075 "tcId" : 118
1076 },
1077 {
1078 "comment" : "changing tag value",
1079 "message" : "54657374",
1080 "name" : "RsaSignatureTestVector",
1081 "padding" : "3031300dff0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1082 "result" : "invalid",
1083 "sig" : "7379bc96dd40d37a7f8e58f87c10fb94f250a964a55b2abead479b368e60e442e6eb864952308eb45eef1d318b6a5ffce634fcb886dbfa062060b9809cf89a09a26fd334ca22a1917fd219900ec0c68164c308cb9cbca3fb2b89ed8637c5540f7a5886ab1e52c503e20edd6316e41c746e53917e107ef5308590800ad378ac97",
1084 "tcId" : 119
1085 },
1086 {
1087 "comment" : "changing tag value",
1088 "message" : "54657374",
1089 "name" : "RsaSignatureTestVector",
1090 "padding" : "3031300d060960864801650304020103000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1091 "result" : "invalid",
1092 "sig" : "4a2478918565be6b46fe61e5f66cd1befb7a3026b5a1502e9a42636b0b924a02e85d7ffdfd8671b1d6d3e604e3ac6a5302db4e0ae0975d0661efa018d6ba0c632a6381368dcb75926542c74823a8c6d8732619764d5a61062fb3b17ae243bd691c97c8f9821af9526abcb522ec8e9dca32de1989e576e336af9dddc3e766541b",
1093 "tcId" : 120
1094 },
1095 {
1096 "comment" : "changing tag value",
1097 "message" : "54657374",
1098 "name" : "RsaSignatureTestVector",
1099 "padding" : "3031300d060960864801650304020107000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1100 "result" : "invalid",
1101 "sig" : "5ec392c91cc165ae59013337e7f7d5f2f9b3a6d45b6f6beee6dbf93e7b9607900f4672555a57de6e9e1aee1fc9b7adfc0dc00e122e84b0233c0d615dd0d79764fdc9d1b0e541f2de0083ab479f313a07f55f51390d1c2274858b219b1ec0601b82a2f7648ae95ec17099067a173e3e83959b6c06f149af0e4610761aab5be1a5",
1102 "tcId" : 121
1103 },
1104 {
1105 "comment" : "changing tag value",
1106 "message" : "54657374",
1107 "name" : "RsaSignatureTestVector",
1108 "padding" : "3031300d0609608648016503040201ff000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1109 "result" : "invalid",
1110 "sig" : "6173aef07a7057c3e97f6b7d4d7266918876f9fad86000b4c8ec7f83ee491563115b0cb5d580df8c97feb0d95866eabb79147926f5395c5189554749f4a2c75c0d96325971635be029062e1f27536c5041bb42f42e1fa10e21bb8e9a2e2502f2a7299dfe3bd8720ecb8a57238056ab0eb546de8dc0e56b317c73ab1e19772596",
1111 "tcId" : 122
1112 },
1113 {
1114 "comment" : "changing tag value",
1115 "message" : "54657374",
1116 "name" : "RsaSignatureTestVector",
1117 "padding" : "3031300d060960864801650304020105000220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1118 "result" : "invalid",
1119 "sig" : "3b80c72f3b7ada8b38b30527bca41180b4a89b066f44a17b9df5963dca46517d9160326afee7a34b650b9e7746e764958ce6a0a6268481a8df40e0a95a81ab0f0bd20c050becfc0c4b03ebda19749a4a1dd3ce925fafd9a4006a835eedf221a6ceab6aac6bc74f743fe171ef8c01935f8901e1ec9ff6e33ae8311851fa14a65e",
1120 "tcId" : 123
1121 },
1122 {
1123 "comment" : "changing tag value",
1124 "message" : "54657374",
1125 "name" : "RsaSignatureTestVector",
1126 "padding" : "3031300d060960864801650304020105000620532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1127 "result" : "invalid",
1128 "sig" : "4b0eaf3ae1c7a3322dcfabee0569aaafba51e0f34fa6afc325bacc853ccd2daa3dca56c918325bf553af02ddd19fb597c368dd18892d52d9e935dc51d38347ebae2a7f90c78504355f6899ab4452d5f51d2025381d81042a08582dc50bc1078246ee69652043bb747969a7450659e333193990f34a8ce3f036221193e700489c",
1129 "tcId" : 124
1130 },
1131 {
1132 "comment" : "changing tag value",
1133 "message" : "54657374",
1134 "name" : "RsaSignatureTestVector",
1135 "padding" : "3031300d06096086480165030402010500ff20532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1136 "result" : "invalid",
1137 "sig" : "1fe7b390bcbd5bc1904e676111653e14e581e7817b45294bb790e4e62f3010aaaa77e246b29729f2b7da65a2f437b8d9c4fe3b26baad367a19fd7b1758d04c2f788c45e5309a833522b46d7255dd5ef70ed006ef966aa7c648bd0b893b8e1566961c16e9554fb729ec81819f1b3da890d413a153f487c030c7581da9531bf134",
1138 "tcId" : 125
1139 },
1140 {
1141 "comment" : "dropping value of sequence",
1142 "message" : "54657374",
1143 "name" : "RsaSignatureTestVector",
1144 "padding" : "3000",
1145 "result" : "invalid",
1146 "sig" : "317379f37cb7f21fd03259a27db3575d491a248df82e67b39d4956a1c619094fcde001544f0fa70c64dc0d0440fb21d2860a20a911cbb397792bf3eafa5cc050e78b1e7bb29d041cfa0287bdf54a90a7a8bff5c870e898fe34bb522477daf8e003bc22891b789ff215869cceb92610c4b03210d19506058d941e6fce7a3cd786",
1147 "tcId" : 126
1148 },
1149 {
1150 "comment" : "dropping value of sequence",
1151 "message" : "54657374",
1152 "name" : "RsaSignatureTestVector",
1153 "padding" : "302430000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1154 "result" : "invalid",
1155 "sig" : "2de802ddacb7e47e27875943d5098419bca3b170bf74f1c4b4a8ac420d4469d9aea97592fbeaaa1dcb5fd20bb97afc5f7abae17a9bb85c5490db97010c5217c88f9f52b5e209cf5fba5f0594f4e4450114dd0348ece336870a1333f7660caf959056ba13b77d35239eea164ddbc8808f8e7e1beb070f551b6e95f90d5bdbd925",
1156 "tcId" : 127
1157 },
1158 {
1159 "comment" : "using composition",
1160 "message" : "54657374",
1161 "name" : "RsaSignatureTestVector",
1162 "padding" : "303530013030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1163 "result" : "invalid",
1164 "sig" : "09342a8fb8402b5e50fbf8c5d1cae415ce02c0a803adfed88188982129e8480918dc21616bb5f8381e8dfe13f63234090c32e542a005df70df5e8e00dd2a478d10fff1b61efbdcf0e410236f7c031c9a5f7cd0db9098f8a32a6a49f408e72c4a29b7d27e8041ba605bf089bbdb9777e19b31ecca0d49b90d54701721af79cf3a",
1165 "tcId" : 128
1166 },
1167 {
1168 "comment" : "using composition",
1169 "message" : "54657374",
1170 "name" : "RsaSignatureTestVector",
1171 "padding" : "30353011300106300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1172 "result" : "invalid",
1173 "sig" : "3ef90c414a64601c538c286f2c35f32445039799b8c266eed605027578edda796a409d905a751bf5c1cdea97840437fa82733d8f27efbbc05da732887078a8f547bbfb54607a54f893df7dde0c35c45f9c2402bed0405c72e98175e5b9d6f90224e07d12e8c1bbad2fc8b1a14c42dd5fb7e554db5edae89d335705c672cd7b55",
1174 "tcId" : 129
1175 },
1176 {
1177 "comment" : "using composition",
1178 "message" : "54657374",
1179 "name" : "RsaSignatureTestVector",
1180 "padding" : "30353011260d0601600608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1181 "result" : "invalid",
1182 "sig" : "3ad3e4ec3636b5eb8aac2161c04d228491ca0d9da2abd69d8904054373940b39b5c025c011c9b9508a25ec25b24a0837cdd6a27cb5c8ba3683d90ba5912ede9a21f2f7e851dc49dfebea8807576be703a6a87ca44c370db76812b9929a54fb8e2259453ccaf47da1b8ddc5b7322c20197604b9e028ec00bd7eb48012274d5b81",
1183 "tcId" : 130
1184 },
1185 {
1186 "comment" : "using composition",
1187 "message" : "54657374",
1188 "name" : "RsaSignatureTestVector",
1189 "padding" : "3035300d060960864801650304020105002424040153041f2eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1190 "result" : "invalid",
1191 "sig" : "778d93be708d56defbb6dedcfec2a917a3772b2810e26143db1f9d0f26c4fbb8de8db5818aa32ebb2cdcd7960e593ace2c3c3eb682c930cbffcfa6b34438ee2a786a9707d5d10902f7f4d8fc677106275fcb6cb08f56f341e0f52af590e0bdfa2f2bf95693265e87f5046bcf3e6de34810e8eaa479f3afa2b0a98b175007c209",
1192 "tcId" : 131
1193 },
1194 {
1195 "comment" : "truncate sequence",
1196 "message" : "54657374",
1197 "name" : "RsaSignatureTestVector",
1198 "padding" : "3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e",
1199 "result" : "invalid",
1200 "sig" : "a3e0e0cb9f7cdf8a2b95139f7c475f274bb63252385f62e66f82158f429e74d83df9ab1040717d34b6a5e009b6ac95960826ee83bb298ecf900425ff03a8f156053b57eac6086d61dd3a8085b84c83bebbe3270164e3147ddee8966a026796401fa48da70f5d949386eccad26b0016543f3f90c8ac2874100dce13f03845509c",
1201 "tcId" : 132
1202 },
1203 {
1204 "comment" : "truncate sequence",
1205 "message" : "54657374",
1206 "name" : "RsaSignatureTestVector",
1207 "padding" : "30300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1208 "result" : "invalid",
1209 "sig" : "84345c9d3de7b5da2156d3669a731c4baf6726c4c231bc8bcaef950d7ac37ca8d86e9c9558404f313de3fdf09024d25491b0a933cc3958033210b1c4f90070ddd083005873762566ff2cd7f6915b4cb430f5e7e1bca8c2ec32b4ddee48aba667f9d614a27c3bb40c6cb7f0cd77d3d17257f197974d1871cc09c9583cc6af8e15",
1210 "tcId" : 133
1211 },
1212 {
1213 "comment" : "truncate sequence",
1214 "message" : "54657374",
1215 "name" : "RsaSignatureTestVector",
1216 "padding" : "3030300c0609608648016503040201050420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1217 "result" : "invalid",
1218 "sig" : "227aaebca262d2189c479ab46d8715a34100bc1975c2d3991a4ade27376f068756cc9d89e903713bc28394d202d81b32126d7eb09154261841227cba6ea0a60d0ed9302f816fb4dd241dcd2d746d5c1b068c42c0b2bd567ef799cbfd0a83e8a30c4fa2f7296dceca38c36ab597ba992f658ef7955d32d38847870afbca35d836",
1219 "tcId" : 134
1220 },
1221 {
1222 "comment" : "truncate sequence",
1223 "message" : "54657374",
1224 "name" : "RsaSignatureTestVector",
1225 "padding" : "3030300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1226 "result" : "invalid",
1227 "sig" : "a4316d438c7091b3bd5ec09aeea9095cb5046d8f08642b087c34985c34377bdafe74285d00862fba20572ce7a06dfe62b4fc08704d1cfb161cd88478e7e1c5451e0bdcce0fdd83c0e37fba5168ae03fcf4ccf60fa12c9b0acb39fe99b06933b9e0774f41151e0564ef805144c0cb76101672c287912197155d91bf036e84d1ce",
1228 "tcId" : 135
1229 },
1230 {
1231 "comment" : "indefinite length",
1232 "message" : "54657374",
1233 "name" : "RsaSignatureTestVector",
1234 "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000",
1235 "result" : "invalid",
1236 "sig" : "447904593d2796cb9851fc38f6494697af3eff1997568a320a0e6a50d62b484d7254c99cad3897f7383da73ee48ee824f7f6819c7dfce18021e7cb43b48cd77532c6af28e9adbe8005c576415c379bb7bd164a49010f0b243f60064f1986d1923146be8e8a4eceb9263445f32e49e5cef3e500467f3cfa9102b51b2772df803a",
1237 "tcId" : 136
1238 },
1239 {
1240 "comment" : "indefinite length",
1241 "message" : "54657374",
1242 "name" : "RsaSignatureTestVector",
1243 "padding" : "303330800609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1244 "result" : "invalid",
1245 "sig" : "01ce4a92bfbefd1de73607085c875704ff40751537bbce8ae2df9b10db01443154f415a936b38f937f7514763e20de0c55a1b441c5b10a09c7e09a7070cbc88becfaa8d39ab1cb93f4e2d1dfbc973715b04bf5d21f2cbab061ce36c81642fea43d0b11317961886d8783c628947b8f14be0864674e84c4af5f9dbb1f95b327a1",
1246 "tcId" : 137
1247 },
1248 {
1249 "comment" : "prepend empty sequence",
1250 "message" : "54657374",
1251 "name" : "RsaSignatureTestVector",
1252 "padding" : "30333000300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1253 "result" : "invalid",
1254 "sig" : "361f80a57ddb48796e50b3e6467cb00a9e1e193330ecd2cd6a31f649b49eac27e295450efe03e09e59f1829cc661d36b0fe904602c644aad7ec8cb2ca3099078b6d4f7b9233dc159fd1a6189451fedbd176e436f6605f2b889fc7197ebb520accd7f90e543da44453c7ba1948e83e31f5907d1989d982acbb348ca2216fe050d",
1255 "tcId" : 138
1256 },
1257 {
1258 "comment" : "prepend empty sequence",
1259 "message" : "54657374",
1260 "name" : "RsaSignatureTestVector",
1261 "padding" : "3033300f3000060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1262 "result" : "invalid",
1263 "sig" : "674c01596bf71fccd36aa81b000be007f6cff713e5f6ffe58b25e790f9a1f6542ba3f68e1eeaf1bb1ac6c3d55aeaf08140f6cc3d0474f6bd87ee442568346553ceb34efb5301a4d3a5b3f28a5fb038ccfe8444524d18adfa042aa1685fc3a5f9005da5688853b8660ba74f0e32c5be38c743b0048ca9b9fc19a35a5ff4e2c48f",
1264 "tcId" : 139
1265 },
1266 {
1267 "comment" : "append empty sequence",
1268 "message" : "54657374",
1269 "name" : "RsaSignatureTestVector",
1270 "padding" : "3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e253000",
1271 "result" : "invalid",
1272 "sig" : "07ba2b5d519b1f60dc455d6ad90b4135cb45c5da5a2a2c9b8cb954165394a0f40145ebf2b1a3ff1d47f5031d542d25041fe9b6d78aab623c40eedcd8467618168ad02af8a696573c5c63cae0b2c26583b0240848d663fdd0195322bc2c8dbf9b5db2ff9cc3e75e70480e51da0d6dd402fa87772ddef5256467205cf41a42d18a",
1273 "tcId" : 140
1274 },
1275 {
1276 "comment" : "append empty sequence",
1277 "message" : "54657374",
1278 "name" : "RsaSignatureTestVector",
1279 "padding" : "3033300f0609608648016503040201050030000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1280 "result" : "invalid",
1281 "sig" : "9fd302307455d4e946c1ccee65b0941c3550c823279cc52c4f29ecff72a12ac40ef6b7e37b7dd774b7735bbae89b0792908bafc47f0b0a11637042fc8541b346151bdadc3990e64b6d1807dd0e7f9266ceb3f686a9813341f835562d3c8c84868a1f98db97d3e695ce4a25fce80b828d010d6323120362ac48700abff8a7116e",
1282 "tcId" : 141
1283 },
1284 {
1285 "comment" : "sequence of sequence",
1286 "message" : "54657374",
1287 "name" : "RsaSignatureTestVector",
1288 "padding" : "30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1289 "result" : "invalid",
1290 "sig" : "247aa1cb69ccb72795c93809d7c3a5e52de98ec5285196058a6ab18ec2f5d9fef5545ab5df923f63bd58f5f247b3d824bf161bcb56d325d4e2fc7eb3765dd81b5580422abf2a3bca8d8af94cf6a9a3133b1494f66d5cbe938d30b9308b5ce2cc6d3df37d3299b6a7616d40afcc7935d80225e1a89a7a63ebff13a66e21280a6a",
1291 "tcId" : 142
1292 },
1293 {
1294 "comment" : "sequence of sequence",
1295 "message" : "54657374",
1296 "name" : "RsaSignatureTestVector",
1297 "padding" : "3033300f300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1298 "result" : "invalid",
1299 "sig" : "6d6248f823020a9604bbafe5acc103d9bd020624585c95805533de22afa3b6b1b511f8805296ee4d3e96d707c91e55df8959464ddb6d6a3d62b1cb248754302b2833406300f4975d913f1b90f95e3673e2c57d6181d73a360e8c818b8a9dd1e7a4fdcd68683f11dd47c2d395f20b0ce9c59eede6ae6aa58a707c4ea8d1a73a9a",
1300 "tcId" : 143
1301 },
1302 {
1303 "comment" : "truncated sequence",
1304 "message" : "54657374",
1305 "name" : "RsaSignatureTestVector",
1306 "padding" : "300f300d06096086480165030402010500",
1307 "result" : "invalid",
1308 "sig" : "941d41c39aa8bf3879d16cb78c5486589e7b97e56a0249c4f613060d26b786598fd2d34bc4e99cc8888137975937307d6a328059a09f3b994bf955c7de4a2841a0d10bbbebb2db3b332656f258c66c8d50cf9155ba94e1cb21a78e6147af76958ddd997665b6d8f67ea8f5e1fdbebd7df635f20494489c895d33ae4c7f248bad",
1309 "tcId" : 144
1310 },
1311 {
1312 "comment" : "repeat element in sequence",
1313 "message" : "54657374",
1314 "name" : "RsaSignatureTestVector",
1315 "padding" : "3053300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1316 "result" : "invalid",
1317 "sig" : "a32afeafa2c3b58bef55776ef6daaac6647485dde100d968e0449d1a2d5a121807ca2fdd70e2e9cf524cae4f263e11837000df85f0886b718ff45cd316c8d031b746dabfb956dd6118a37e0dabcda1ce9c728afd9a5f2448f5b15d27982218888d457752485119f53219315bf63141c9c0802327226a096403ece022cb27c0df",
1318 "tcId" : 145
1319 },
1320 {
1321 "comment" : "removing oid",
1322 "message" : "54657374",
1323 "name" : "RsaSignatureTestVector",
1324 "padding" : "3026300205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1325 "result" : "invalid",
1326 "sig" : "6098a732419cd71887548ccf4fbf3edeaf9fe7b220bd747ae1b995b746de1f4d7b48c73ddb71903f50ccf7c93be9c8219de5a75ecc302ab50356069dfaf642f32ec580a283519fbcf04784860b0660174dfb7e1e527bb320960bde8f6c605bc3c1055b878d2adbb44e1b6c41add15cb603345c4fe2d1c0158fa03f21b4c015e0",
1327 "tcId" : 146
1328 },
1329 {
1330 "comment" : "appending 0's to oid",
1331 "message" : "54657374",
1332 "name" : "RsaSignatureTestVector",
1333 "padding" : "3033300f060b608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1334 "result" : "invalid",
1335 "sig" : "2f08cdca4d621007acd15b1f4e3c39882a8aef706878e8f101e7fb250798a3528dcbf4d3327ceb0754a2ca0850794094dde8a875cb947d624d386ddb9593259c53ef2311260ac3c9cd1277050ec98d105188f590f198ba908ddcf3f9ed18f5a96cc6b353fadde007658f87ff4c201db7621d69c8278305f3e9f2041a2dddfad0",
1336 "tcId" : 147
1337 },
1338 {
1339 "comment" : "prepending 0's to oid",
1340 "message" : "54657374",
1341 "name" : "RsaSignatureTestVector",
1342 "padding" : "3033300f060b000060864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1343 "result" : "invalid",
1344 "sig" : "10078ea73abb9bbb879c9d8139b1758170fb73b34f39cdc83e6a725439e315a5cba4421fe15e8c80d8fda0a9aba9a12c23aab41f7328d4191e6c7c3a53a505ab518dce078439347945671ab06a2cd5375457b3bf181c40a1a4be1ea8305c9a401488532c7cdc1150fb9c46a2e846ce4a2fd9ee863d0b0b8af7f10360acc47f10",
1345 "tcId" : 148
1346 },
1347 {
1348 "comment" : "dropping value of oid",
1349 "message" : "54657374",
1350 "name" : "RsaSignatureTestVector",
1351 "padding" : "30283004060005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1352 "result" : "invalid",
1353 "sig" : "69a74665f61787b54b522937c534e95e91917f5dd4fa9e3472add6e21dc033a275408f35c71ff6cc029e25986fe6dced8ed053a9040aac32fc444e9252d2bd4081fe3e51ace15a0f694c0b8953dd6afa7f8cac67f4d8e17513b415c14b439a634274893885907e2ea428a6e242154a58a031fedae31c73df7cd4e2f5591496cb",
1354 "tcId" : 149
1355 },
1356 {
1357 "comment" : "modify first byte of oid",
1358 "message" : "54657374",
1359 "name" : "RsaSignatureTestVector",
1360 "padding" : "3031300d060961864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1361 "result" : "invalid",
1362 "sig" : "8f3b544724810d462cc9b19f356e61efe7c192dd63511a9f1f63286ca81f89477c2b464f8e51a97ee138dcf8c6709d79a78591081384af7cb5e182c9867b826013e6191efddddcc39909d3ffbb18944503b69d774c959831a8092f4790a4933521100c3e9741c3b58e1d24b75425ee28fde4e40c249b4dccd726cb06cb9ad2e3",
1363 "tcId" : 150
1364 },
1365 {
1366 "comment" : "modify last byte of oid",
1367 "message" : "54657374",
1368 "name" : "RsaSignatureTestVector",
1369 "padding" : "3031300d060960864801650304020005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1370 "result" : "invalid",
1371 "sig" : "3933d6937e977caac37a07a5c4ae503565af57e6c4e830004147f8bbf6784f79666d89cb4cac60e3f0aff2d5ed6a182921e490c958bfa49c86fcf0270914c102275b0878f01795c7a2f44a8a6f5306aa67a81f9294089876801503989e749d152c3e34906291f1f54bb6232fdd3d51e807f70927bf38ef70bd2ba45f0323acf2",
1372 "tcId" : 151
1373 },
1374 {
1375 "comment" : "truncate oid",
1376 "message" : "54657374",
1377 "name" : "RsaSignatureTestVector",
1378 "padding" : "3030300c0608608648016503040205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1379 "result" : "invalid",
1380 "sig" : "7b2f6581fb0b4f913ed38c0ea20dff2bd60723f2bc3f1022ceb946e48adb75b1e0be031dd8b706d82967f93c6b6ba496d8c4b49aea9970e139b18fefdce30a4ec04f77625eaca4c7d1265cebbbcf53b63a113cf06bc50e4a416a771cd28785a0075631a3ef60c9212e224aaa063e7d8109c27e248e6422b26acd02ec012b7bf3",
1381 "tcId" : 152
1382 },
1383 {
1384 "comment" : "truncate oid",
1385 "message" : "54657374",
1386 "name" : "RsaSignatureTestVector",
1387 "padding" : "3030300c0608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1388 "result" : "invalid",
1389 "sig" : "4dc9e86e076a395b530868d9fec9f858bd6e8c10cc1e32cae7653abb3f23991c677e970ee468c7f35022f3241f5d35673a8cf4ce9134b1e63a994dc7abc8cf4b9dbbb126b314312539931a0163c911f0234f5c3f683c9376f2ecaa3294d71a1274f6c63b84ea8faf826eacb05e4fa5459b787ff384b2cfe0f1f4c755f32b5c50",
1390 "tcId" : 153
1391 },
1392 {
1393 "comment" : "wrong oid",
1394 "message" : "54657374",
1395 "name" : "RsaSignatureTestVector",
1396 "padding" : "302d300906052b0e03021a05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1397 "result" : "invalid",
1398 "sig" : "8bbc9167821885a728260bf9831120ecc42c14b2b07854169c86421146367d1bec66d8c3daadd115f16a29754e7fa8fb70a63966f7838484615d4364311b6c3f6e73ecd8ced0adb52db2c374297119f5fe571bd5396529d13b7225e87db5b5b0df38e4c56f2349071b09ff5c1ded919b398d4aff38c6ae29af6f6ff99d3e8836",
1399 "tcId" : 154
1400 },
1401 {
1402 "comment" : "longer oid",
1403 "message" : "54657374",
1404 "name" : "RsaSignatureTestVector",
1405 "padding" : "3032300e060a6086480165030402010105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1406 "result" : "invalid",
1407 "sig" : "2054d402bf6a148b52972b830c8c8a16a6aeddbcd5c2ae3fd83de67c666e712fa98650308658837a67ab87b2c444bedc7cf995c19af433da9343f260049b1bcb436ebe27d8a502728dfb0daac5d2710e2c39fa000b909aede07ad7a0d27629e0ac27ed9fcd41a39e09f7acdec4c2df77f38c535f46e3b96f2772a81e65e74bb8",
1408 "tcId" : 155
1409 },
1410 {
1411 "comment" : "oid with modified node",
1412 "message" : "54657374",
1413 "name" : "RsaSignatureTestVector",
1414 "padding" : "3031300d060960864801650304021105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1415 "result" : "invalid",
1416 "sig" : "3a94d241563a2ad97574ec82baefccd9dd114e21fa9169d0f54c4d0f57826224804ddc9b29c1905c59f39bd6aa3366705a85f5e6e18c0eb0f67986b5265e7371865b618e90e5c5313f0b6fce2343aa12d4ed44d6770fa08d4f1342608a4fb627a273f3a1f1340d1f5c55957ce51048e3690a845851009cbfe38d3c96e96d4172",
1417 "tcId" : 156
1418 },
1419 {
1420 "comment" : "oid with modified node",
1421 "message" : "54657374",
1422 "name" : "RsaSignatureTestVector",
1423 "padding" : "30353011060d6086480165030402888080800105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1424 "result" : "invalid",
1425 "sig" : "079cb62831dbeb40a638402865cc92cb49913dae214babc3f4f8d69d64cf14362c23c8dd6ebcee9c44633dd54a62bb2f0042c20033728fc2f8ff482cf0be3ee103bacf757b50319495d9a838844ea1064f4bd1f1ebdc1b71a318c3c8f7d76ebd79ef2f3991d4d87e110d60e5fc655adfa4a8e792e46c1c7aa96156b884e2f7a9",
1426 "tcId" : 157
1427 },
1428 {
1429 "comment" : "large integer in oid",
1430 "message" : "54657374",
1431 "name" : "RsaSignatureTestVector",
1432 "padding" : "303a3016061260864801650304028280808080808080800105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1433 "result" : "invalid",
1434 "sig" : "2c9083459ba6504dc10e0e63edf8ede8bdb4a9728673306908ad4e8f25656d4865f0748b9fd2cf7b51db0a2c659e0ce021fef3d2d3d0cf7c45343729c2001a19d37e29398a9a7e92d7f62693252261f1f7406b54af5447db6e846f981722059b7bb09ba95268c321c156ff659e0ce8e709d2819d5ce15f5dcfa54c55114a611a",
1435 "tcId" : 158
1436 },
1437 {
1438 "comment" : "oid with invalid node",
1439 "message" : "54657374",
1440 "name" : "RsaSignatureTestVector",
1441 "padding" : "3032300e060a608648016503040201e005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1442 "result" : "invalid",
1443 "sig" : "9a76669c75f0f11399699f76e7bfbefc0d29feb5a8d86de1f751eedbb5c9e7b81ecbc224534db67cfe1b611951a6ff499d86e11cac4a1725e2ff707085a81a76c73d5b53d1b0b2c4fab2d2eebe57eca83242a261cfca768abcd8e1f42e3841d698bef3d4f16ac2dfab0fd42ef0abb0463474367dff7ec99d665a9838f2cfc24c",
1444 "tcId" : 159
1445 },
1446 {
1447 "comment" : "oid with invalid node",
1448 "message" : "54657374",
1449 "name" : "RsaSignatureTestVector",
1450 "padding" : "3032300e060a6080864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1451 "result" : "invalid",
1452 "sig" : "6674ec2352f0d3e90f4b72086f39815db11b056babc57644c8a703014f439baa46e8ed961714d5c7b5f0ec97ba3fe5ab867c16b7e1de089868dcb195fc20cc42fa1b3d3060f50cca77281bb6be18d65a1ee8e5a381e21e7f02e819752b71327a28719c7284f6425bc9241abb08d000faf58d48848d7f4b8d68b28266e663f36b",
1453 "tcId" : 160
1454 },
1455 {
1456 "comment" : "appending 0's to null",
1457 "message" : "54657374",
1458 "name" : "RsaSignatureTestVector",
1459 "padding" : "3033300f0609608648016503040201050200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1460 "result" : "invalid",
1461 "sig" : "8d18a5e0a81522b56eb9e4f43bee15475cdfc7881006150cc230e76028283375a13425fe5a106f2626346a65817010a5510b157b234a16fcb9426909a524a288161537be91ab13033ed296f5f8c1e5c3bdb963f12d7b5eded46106f7c2dc1ae9c451415303cb7e6a3f59809b922183b9638197909d5730e5b1e89705fbbe8464",
1462 "tcId" : 161
1463 },
1464 {
1465 "comment" : "composed null",
1466 "message" : "54657374",
1467 "name" : "RsaSignatureTestVector",
1468 "padding" : "3037301306096086480165030402012580aa00bb0000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1469 "result" : "invalid",
1470 "sig" : "80c9add3930a98b726fe543b4350c593d28e77f9f53f1ea04c2bfca30f157309eeb41e5a675bc0045823df8e99f2e55d2567f4b78e36eb8af1b45c50e33e6634dcfdc4094407b760d8b60f76995edd05920a6a89e22168a788557bfc7cf01d47d21448a65f9766bb217bcac1124020b6b062fd0e7bbe3e142ec88652eb617513",
1471 "tcId" : 162
1472 },
1473 {
1474 "comment" : "appending 0's to digest",
1475 "message" : "54657374",
1476 "name" : "RsaSignatureTestVector",
1477 "padding" : "3033300d060960864801650304020105000422532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000",
1478 "result" : "invalid",
1479 "sig" : "51640e26e8764936a7d9d709b3e0f52a5f1843453f2c6107a8e7fd6dad8b1c02ecc71659cd4134be952c03ee83c190bea4ea7260e5472c3cdf87b6ad45b5c974957ee9b4bf6f30152c2d939f722cff32e5482db96f3e283532b96716d3624daf16767e0ecdad16c97e56e4e076d64b92af329d2d6a2f8d14b59d1b84853659ab",
1480 "tcId" : 163
1481 },
1482 {
1483 "comment" : "prepending 0's to digest",
1484 "message" : "54657374",
1485 "name" : "RsaSignatureTestVector",
1486 "padding" : "3033300d0609608648016503040201050004220000532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1487 "result" : "invalid",
1488 "sig" : "9080bd4ac03b7ecedd45f8165360d4848bdfe1c9212ee1a4debc1aa92886cd7947a2df5435789bbb0b3e8f78815aac80e2cff14e1939e9ec32f42e7c29ed4029c88cafb64e8523dc85217c40d1bba900468a69c5bd4d12ac67401698fbffaa5159907ad459d3843e12487b3b2315c585881bc42e45543f7cf25110ab7e0a19f4",
1489 "tcId" : 164
1490 },
1491 {
1492 "comment" : "dropping value of digest",
1493 "message" : "54657374",
1494 "name" : "RsaSignatureTestVector",
1495 "padding" : "3011300d060960864801650304020105000400",
1496 "result" : "invalid",
1497 "sig" : "5f66f645307346216d3ba9c3d8b29e96270cb3b2e686a676fe975c10b8c26fda8d8eb172628bb3dcd726160c13ab8c5afb1d6ae943ea4c18d00465d97c0d2bcc27a63c18457ff8d6e3f5ba373b4be7b6f4c610f83578613f4fe41a40d86230afce0bb8d4496425a5bf0a80c6b1b1e2a981cd44c31a9aa603748c3d2fd2b85478",
1498 "tcId" : 165
1499 },
1500 {
1501 "comment" : "modify first byte of digest",
1502 "message" : "54657374",
1503 "name" : "RsaSignatureTestVector",
1504 "padding" : "3031300d060960864801650304020105000420522eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1505 "result" : "invalid",
1506 "sig" : "8ccff4ab4fd8534b6b50593f775bf6684391225adc37745e7ff25a4c4baff78a252aa1177ea3f3f09d2791da50ba19cef40ab8915379f128bba3271069cc2c02725e09f0b2cdfa0d313eba3f5a7e231588fd617b7d90b285e88a944d7d0a7fe9cc558dfe8103391ab2e6fbf762d829a55ed4486b5d888957078ffcf49e8ec352",
1507 "tcId" : 166
1508 },
1509 {
1510 "comment" : "modify last byte of digest",
1511 "message" : "54657374",
1512 "name" : "RsaSignatureTestVector",
1513 "padding" : "3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e24",
1514 "result" : "invalid",
1515 "sig" : "694b90d259b8dbe290f5851ede2ebf3bb718c1674ab1d3b7b6418e8ef7ea0760bf3ce69d98a7a3baae5aee488cddfb877972fa88ad05996879d0ce15aca53591423bf1b1b3ff02f823cdbb26bb80e3f7b83c3b7ac01ad7806335f871cd7b7e9e64708c200a9cd092589131aeb7db15655174000cf7db782bd54325ea956a1a15",
1516 "tcId" : 167
1517 },
1518 {
1519 "comment" : "truncate digest",
1520 "message" : "54657374",
1521 "name" : "RsaSignatureTestVector",
1522 "padding" : "3030300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e",
1523 "result" : "invalid",
1524 "sig" : "888cd9bdece5ceeef0fea92727ef1a1d996960f3f551bf108682f8103590323669ba1ab48becd14a49b87a900434d0ca7670d094b08b2f851834757bef580d2d3278d85b88036ea90d4c2a673dfafeb0c3701332c2b77493110d9b28dade7e985ec27240c90498372fc00ac8e0e5547e4d59cdd19022b8d961f3b63630b5448d",
1525 "tcId" : 168
1526 },
1527 {
1528 "comment" : "truncate digest",
1529 "message" : "54657374",
1530 "name" : "RsaSignatureTestVector",
1531 "padding" : "3030300d06096086480165030402010500041f2eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1532 "result" : "invalid",
1533 "sig" : "762c745262627d0df634d6cce41fb8af3cb855fc2d974b8093b035e9d11e510b9b7e7d61581b8f262fc1c4b8a6da3f6d609512e32f16416c7449c623c1773417032ddf2a559d7eb3af129fd02f83b5e35f5b5c065b1e0bc6481f38b6361f0b018b5e7166e8e67dddcf1550222f125efde241a27b0e7f670d15346dde082a8c4e",
1534 "tcId" : 169
1535 },
1536 {
1537 "comment" : "wrong hash in padding",
1538 "message" : "54657374",
1539 "name" : "RsaSignatureTestVector",
1540 "padding" : "3030300c06082a864886f70d020505000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1541 "result" : "invalid",
1542 "sig" : "27830ed405bc9d34009ec6258b766100273b4dcf2a9b3cf6ae31029837c6e24cf6e819734c1fd10c2c23db34d227d98d3498850f083ecd78b648baccfd4647a572607dedbc2b8ab7a595c0594ece904380e7f395ba4840a81367e99275cde1064fc6f7fbd564c5f26ddd0103991ae8262eaf16623685b43f77ea7a05d080166a",
1543 "tcId" : 170
1544 },
1545 {
1546 "comment" : "wrong hash in padding",
1547 "message" : "54657374",
1548 "name" : "RsaSignatureTestVector",
1549 "padding" : "3031300d060960864801650304020205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1550 "result" : "invalid",
1551 "sig" : "4cdfa8cd615bcdefa253d75212e4ed0a1fd60841656c6a749690cb0c6c3cd723b518560c3b11a734010acf6e38f0526338351d9b58351826b360c851d3c86429f38eb689e8555aa2a23157e197faebdd29bc49f84c10dacca655cd5fa50fdec86a72f0ff1c7f8feeec31fee188fbfa72776a7b5cdae1c1506830bd3a00181b13",
1552 "tcId" : 171
1553 },
1554 {
1555 "comment" : "wrong hash in padding",
1556 "message" : "54657374",
1557 "name" : "RsaSignatureTestVector",
1558 "padding" : "3031300d060960864801650304020305000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25",
1559 "result" : "invalid",
1560 "sig" : "024746d8dd71ecfe33cf0ad7ab8ddab9dfeb5740ec47b8ddd668f07b8f7610f726692404ac14c3a1947ff4246fe0a9e216131489125e71df68d60930fac06a20e948a3e4948aff5e3f9772155f8bd6772b1cefd8180ae719afc061e2f0d68a69769930b8d90ca4ecd6c7b20d04f0cc939502e698ad1c500403763c0205f6870d",
1561 "tcId" : 172
1562 },
1563 {
1564 "comment" : "wrong hash in signature",
1565 "message" : "54657374",
1566 "name" : "RsaSignatureTestVector",
1567 "padding" : "3020300c06082a864886f70d0205050004100cbc6611f5540bd0809a388dc95a615b",
1568 "result" : "invalid",
1569 "sig" : "3a152ced8b5e0efa33cd57d4afe67f31ed3b9fb22e7b0ff32795cd9510374fa09fc63a3366465f83ba4d44e36418a5c1d171b6ca05d8c74a242983d5e5912cd05bdbd75fcfd5b4eda7cadab21e6dcefca8e2ab7303871ef360beff45564a01bdc887d9e849e407c6aa5b12055647f6c9df49758d1272f7cb476f51088e21f246",
1570 "tcId" : 173
1571 },
1572 {
1573 "comment" : "wrong hash in signature",
1574 "message" : "54657374",
1575 "name" : "RsaSignatureTestVector",
1576 "padding" : "3021300906052b0e03021a05000414640ab2bae07bedc4c163f679a746f7ab7fb5d1fa",
1577 "result" : "invalid",
1578 "sig" : "3765b8800e6ccf29544d834034e39f8fe7a2e6dfd7e6b4a8f81df091bbfd7aa17edfa6005024fe04d35c340a2215fd3f1cf4b4dfdd3c8ad09e6df2c2256c7541e19c2e80051d1ef5df5c384bfb6be88c4415eb2740db2d9fb3214890a8a0f19146dfb7897bacc02700a89139dc8fb21b2a7bbfbd43604d7f384cc00aecefb4ef",
1579 "tcId" : 174
1580 },
1581 {
1582 "comment" : "wrong hash in signature",
1583 "message" : "54657374",
1584 "name" : "RsaSignatureTestVector",
1585 "padding" : "3041300d0609608648016503040202050004307b8f4654076b80eb963911f19cfad1aaf4285ed48e826f6cde1b01a79aa73fadb5446e667fc4f90417782c91270540f3",
1586 "result" : "invalid",
1587 "sig" : "5c5b097c21ac2eb156de39d1eaebe3b96082f54b0171469a94edf7d2027ebfdebc0837f766cfefec577e7b797c7a082df2ecc826e55d39927b01c2da26f8f6814ec993e3b93ee87a3418322b65ac652b3bba6d34373a13fd40b66be489938fadf67bbda762f6ee09a1ddc41382051d4a9a946e0df832bc65b7d5dd58cc5a402b",
1588 "tcId" : 175
1589 },
1590 {
1591 "comment" : "wrong hash in signature",
1592 "message" : "54657374",
1593 "name" : "RsaSignatureTestVector",
1594 "padding" : "3051300d060960864801650304020305000440c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31",
1595 "result" : "invalid",
1596 "sig" : "0ede4ac9ffcb6d3d42c75cf73303a28ba6089941f68dcf392a75b071f6c149a109cab95b80a679ca3b29ae44e51c18a2db4c72211ae6b959c7f22e854c45f20f5560446f33be4819f08d981d2fb176d48039ac4acd28127d593f9e219ad40e2a5ee911b334b3b8bb290f2327524e3faae2c028745e03d58882bfe503c4ff04b2",
1597 "tcId" : 176
1598 },
1599 {
1600 "comment" : "using PKCS#1 encryption padding",
1601 "message" : "54657374",
1602 "name" : "RsaSignatureTestVector",
1603 "padding" : "0002ff...00<asn wrapped hash>",
1604 "result" : "invalid",
1605 "sig" : "6c0b3edf5f6e5d3f07057d0b752e89cfdd1c289ad18a0ba94670cd36547734e2c7bb32dd49709f0f7149944c450c23b7f2d360e3602cad5ddff7fd9d711eef6dd4c32e66c4433f041fffefe112024a655bc5bacbd0914bbb2b2a41a91b1293fe9478ddca926a13e6131cc5e9b70625eac1e533ce8171a2dc7b2c4a490e966445",
1606 "tcId" : 177
1607 },
1608 {
1609 "comment" : "using PKCS#1 encryption padding",
1610 "message" : "54657374",
1611 "name" : "RsaSignatureTestVector",
1612 "padding" : "0002ff...00<hash>",
1613 "result" : "invalid",
1614 "sig" : "1acce04e348a5c8377c54d8ddd8ec2d8c5cb9b195863c32eb716745f3462b5f249b612aefb31ba484949d0a0cb5cb8e1f06c1cec58fe5ffff6ba796218c46c3e527c7ab0c4276ccbafd133812faec33721a08542e7e3a34449bebbb28bd0f28994c6801ba5c971991004e31de8f728f6bc37a4ec7b049c1f2dc64d4be9415462",
1615 "tcId" : 178
1616 },
1617 {
1618 "comment" : "invalid PKCS#1 signature padding",
1619 "message" : "54657374",
1620 "name" : "RsaSignatureTestVector",
1621 "padding" : "0001ff...ee00",
1622 "result" : "invalid",
1623 "sig" : "61a4066d0b64964100ecf583325cad10b53912aba1bf3606720d2bdd8e21120bb0b5e4323987d96039819ccce0e5e90854bc0e5c239ab198f75b00355a04e4eb1f855f76697cd65732820575306eb9323954bc5913568a7278fcdeff8e8acad4481e3559f8c44a0be3bc02bae437c3146e4516632b3fe788c3a0e44171155728",
1624 "tcId" : 179
1625 },
1626 {
1627 "comment" : "PKCS#1 padding too short",
1628 "message" : "54657374",
1629 "name" : "RsaSignatureTestVector",
1630 "padding" : "000001ff...",
1631 "result" : "invalid",
1632 "sig" : "979a313677883b0980997f1cb525f43401739945860149dcad80f602df8abed4fd85bcd6e174d9183a5a44008fd77b5a5abcffbcfd4f47ccd2dabef963d9b228310d99000ed0cebbf61438cbe586985bcffb3923a8467a97ae791d0b04925c0894b5a41583d6de72d4369f481f66abce41a577fb128fc0b0aeec746ec089d834",
1633 "tcId" : 180
1634 },
1635 {
1636 "comment" : "invalid length",
1637 "message" : "54657374",
1638 "name" : "RsaSignatureTestVector",
1639 "padding" : "2 bytes too long",
1640 "result" : "invalid",
1641 "sig" : "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0000",
1642 "tcId" : 181
1643 }
1644 ]
1645 },
1646 {
1647 "e" : "10001",
1648 "keyAsn" : "308189028181009e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170203010001",
1649 "keyDer" : "30819f300d06092a864886f70d010101050003818d00308189028181009e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170203010001",
1650 "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeYjN+99T6vsJWG7RaGKNiAisj\nZmVxu8diwccXoUpG2PWBGQcqomJF5x/GlFVAM1FjeY/L3qBLMQTuI/LDh0u/s+fg\nwbpfH8qQkmUnRBTbaVel62aODjajiHhDVdUo5RpqSpqca2q5EoEqJo2sncrPHBNQ\nd2jmOx+C+K8pw3hqFwIDAQAB\n-----END PUBLIC KEY-----",
1651 "keysize" : 1024,
1652 "n" : "09e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a17",
1653 "sha" : "SHA-1",
1654 "type" : "RSASigVer",
1655 "tests" : [
1656 {
1657 "comment" : "valid",
1658 "message" : "48656c6c6f",
1659 "name" : "RsaSignatureTestVector",
1660 "padding" : "3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1661 "result" : "valid",
1662 "sig" : "8aa2c8a167fa230a1d1ea6bf5286d3ba6e675ca57cc5ca8cb26fdf465810c19af36cbdf843319f7af9b2954f372ef16891918aaa2ab64dbd1cd0ea54351ff2b3437fae5ec947971662c1f75ef6892b6899b77343fe87665c5b74df322b59f017e5488a67ec836ccc3f873788d60992d43f64b736507c455b649119373ba1aea4",
1663 "tcId" : 182
1664 },
1665 {
1666 "comment" : "Legacy:missing NULL",
1667 "message" : "48656c6c6f",
1668 "name" : "RsaSignatureTestVector",
1669 "padding" : "301f300706052b0e03021a0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1670 "result" : "acceptable",
1671 "sig" : "707e19417b5b3cb975795e5d53cb2db69bf80699e69114955aea5ff45755eb365fd34a18290db1975c32388eaed0d446b44138bf18b012f7da3ed067de6e444a5a66a35633c875254ed3d1b120ce657873e888af703e649076b368e90d761cb3e14cf79099026cb4a4c1f20c771c1d7544fccebd6d642506146e3d28acb6cf6b",
1672 "tcId" : 183
1673 },
1674 {
1675 "comment" : "long form encoding of length",
1676 "message" : "48656c6c6f",
1677 "name" : "RsaSignatureTestVector",
1678 "padding" : "308121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1679 "result" : "invalid",
1680 "sig" : "5b4cb0b22300dc4913e7c1cb82e86663462e4b30d03053f697d59252e01339cd230b72afc8623e185db939108f3a47814f418b5411dbd3365d45b609f93b1f4fa10b7b908430a9f7d97037161cbeb2a1af0223b6657179a9bd2efa8c40a2f57b20755042b401e81d3fa3d4faf69d05cfdf3b7c3d5d3cce8fe036e9899db34de5",
1681 "tcId" : 184
1682 },
1683 {
1684 "comment" : "long form encoding of length",
1685 "message" : "48656c6c6f",
1686 "name" : "RsaSignatureTestVector",
1687 "padding" : "302230810906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1688 "result" : "invalid",
1689 "sig" : "264bb84974efc808ded6a363c50bba6c1ad8acea4d26f86afb81839d8ecfe7041db3ace271f308399bf3bd2effd70c3b17e968f084867a0d95299a8dd0bc27e516925d3b8c0e748d5f91dfc87eebc383ecfdf6bf46cd28912bd4cfb9949f7660f1dbdba527db82cfca5aad1f99cebb1d7b554d4038238a4755b25c2348397e2f",
1690 "tcId" : 185
1691 },
1692 {
1693 "comment" : "long form encoding of length",
1694 "message" : "48656c6c6f",
1695 "name" : "RsaSignatureTestVector",
1696 "padding" : "3022300a0681052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1697 "result" : "invalid",
1698 "sig" : "23fad8546f338cec2aa7fd93387b8f1e735e3fc3337350276efad8950161e6cbc7dfd28c7272be65c9dd469cbfc8ddeb6945880234a60c0778d5e8f185b95b0caeda346ce5b8231f94c076d056e2aa7245072ee055f37e7392ad4c158dab92263e4803d82939c7ede603c3467c14c61a5743df002358cc63eab3648d8ca8ec2a",
1699 "tcId" : 186
1700 },
1701 {
1702 "comment" : "long form encoding of length",
1703 "message" : "48656c6c6f",
1704 "name" : "RsaSignatureTestVector",
1705 "padding" : "3022300a06052b0e03021a0581000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1706 "result" : "invalid",
1707 "sig" : "64513a079e0bd31939110d49d36101fd2a49c6d940637b9900fd317a64d174ef64acea808329b700954471c8282d1f246ca3172481fddfda77bbe24deb8d3d20200e78ee9cfbd97b063c1da700a50f635cc32ed74efc59407b8af422e01f728997c9a2dd6f8fd0fc89c9c5a9b0a2038cb006f3e8a8bd86ec129db6ae95b18ffd",
1708 "tcId" : 187
1709 },
1710 {
1711 "comment" : "long form encoding of length",
1712 "message" : "48656c6c6f",
1713 "name" : "RsaSignatureTestVector",
1714 "padding" : "3022300906052b0e03021a0500048114f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1715 "result" : "invalid",
1716 "sig" : "79547cc01aba5ccca5e0337304e02c48455df528e61037516262e151d4378f3447a730b894d63974c3df0cecd708bffd53742c908b718ea1e09786f00b58f434a10e5014fc5ee96c8c87aa0cd73348a470c369b71bee3d78e3b7a640d605736f3b3691253d853473e34e0eee9533abf655e0e490744a354309c3639ca5e0e084",
1717 "tcId" : 188
1718 },
1719 {
1720 "comment" : "length contains leading 0",
1721 "message" : "48656c6c6f",
1722 "name" : "RsaSignatureTestVector",
1723 "padding" : "30820021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1724 "result" : "invalid",
1725 "sig" : "6dde5d8a638e4cda4551a295aa037c0db901578d70b6943d58f842e2b334822e986506768fbd73bd46e62f11acc308eb9b0f9fc8831729fdf630bb0b9ac8a9ce484e1fdf5d1099659ff452c132096d085b624e521ec0cd76449f50e57fa39adfb91d1c4cad4b9651cfda905689c24b3118970f78ca6240b48cba83d19da8ae91",
1726 "tcId" : 189
1727 },
1728 {
1729 "comment" : "length contains leading 0",
1730 "message" : "48656c6c6f",
1731 "name" : "RsaSignatureTestVector",
1732 "padding" : "30233082000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1733 "result" : "invalid",
1734 "sig" : "28a4c4957ee24b104aa7f68d8d7fe5275abfe1c449f6e2d41d2741081e4e0248ff40acbfe0bf7652af44f4f369de583c355af6a5af87500330710b976f1bd3a705c216255d71589c341b237024337d38161946dd0ee3fc822b06c96775c6be57a906eb7c6178751537bb181e47acae959862253c34e979c3def80038488d0482",
1735 "tcId" : 190
1736 },
1737 {
1738 "comment" : "length contains leading 0",
1739 "message" : "48656c6c6f",
1740 "name" : "RsaSignatureTestVector",
1741 "padding" : "3023300b068200052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1742 "result" : "invalid",
1743 "sig" : "08cc5258ab3d68d796e5dd868d676ce9c2774d1eb6a16b4bbf0acaa0baf9d812ed0138a17ab8a64dbb913e33a88a388883889bfde6922cca5ca98d5fd1ac13fa87eb1b5701cb4ef5271057b39cceafa0f8509f9151383058a1349460db1895b3d7fbc043771ebd48538e9c208c34719f21b2d60dfb7a06a3ef42d1f2a90826b8",
1744 "tcId" : 191
1745 },
1746 {
1747 "comment" : "length contains leading 0",
1748 "message" : "48656c6c6f",
1749 "name" : "RsaSignatureTestVector",
1750 "padding" : "3023300b06052b0e03021a058200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1751 "result" : "invalid",
1752 "sig" : "118bdd711ce909f3e6894be2c5f7fbd21b6e542205e63447848bd6be079874f2858e9640ca8723cd4f73d1d272780aef52200d991cf620f7345f20ed4b5c978f93dfa495a24680c762ff1f1c4c3d0513b818b2cdedc63cacaa76af3b4672e0c3eae523b410d7c03ce4b9d2f65f92e580e4e7f04d3f62047db3968e33f0f1f40c",
1753 "tcId" : 192
1754 },
1755 {
1756 "comment" : "length contains leading 0",
1757 "message" : "48656c6c6f",
1758 "name" : "RsaSignatureTestVector",
1759 "padding" : "3023300906052b0e03021a050004820014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1760 "result" : "invalid",
1761 "sig" : "7c2ddfeb9611939302c4791b44d2eaec63ba700853c84c928e11f50a5fb15c47a2f0ad91962aa88e944c0a655db19ea4bda87e386ae820fea49725c75e13b26a7c7d9dc63e353259d318246a3ec3c4b7d2ff8e6af164fe73ef35eeb76e921a523f48db83d541b3abca995d807968cb960fe192ffc0501a0840a1f5bf1b332123",
1762 "tcId" : 193
1763 },
1764 {
1765 "comment" : "wrong length",
1766 "message" : "48656c6c6f",
1767 "name" : "RsaSignatureTestVector",
1768 "padding" : "3022300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1769 "result" : "invalid",
1770 "sig" : "5065698891c73f55ade9d829053b14086b977af8f8ddcb9d2b5d236bced0821b00cca31a26b43a838ed36f96d823205fe79644ab4d431d2072f823bf9dd60bde8c2af3e2f4af0fcd734f285c0f8e0b9e5cfb5b7cf5d4131ad2122862c7bb6d9a9d6a7ec674703c79e4712ea84bc178da4bbf08355b2c248a5887a9b87702f70d",
1771 "tcId" : 194
1772 },
1773 {
1774 "comment" : "wrong length",
1775 "message" : "48656c6c6f",
1776 "name" : "RsaSignatureTestVector",
1777 "padding" : "3020300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1778 "result" : "invalid",
1779 "sig" : "33ab162433e5c9677c2ef33d2949c64167afc165223a79ea96bc1096e0654db370f84b30f3ae03da910e6343fdc9f7413e9422f76dfe4287dfaf7250567076a4b2cba812b784410ff19f412df89f1af8b9a5ea4809b7f60b8b5b4063d07dd17311b5b0b75599ea8988c605b06cee2b6bcf79f20ad7c4bd67cf179511ceb9fb21",
1780 "tcId" : 195
1781 },
1782 {
1783 "comment" : "wrong length",
1784 "message" : "48656c6c6f",
1785 "name" : "RsaSignatureTestVector",
1786 "padding" : "3021300a06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1787 "result" : "invalid",
1788 "sig" : "7cb2655e9bc1e633b46656d28db5bf457cfd6a6557ebe511a694ecd36987fcf94a6de7a3f73d47777990697b5663fe59b838fc0a7fcc0604a08e951fb1ef4dcdae0bc09c6733815a65ed465e86e98bd08ccce8df0a7822f1dd74fd8ff7add8314387ed2bb5474c7c282333bcc962af3f0506a15971f30967f49bbb22cf3e99d4",
1789 "tcId" : 196
1790 },
1791 {
1792 "comment" : "wrong length",
1793 "message" : "48656c6c6f",
1794 "name" : "RsaSignatureTestVector",
1795 "padding" : "3021300806052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1796 "result" : "invalid",
1797 "sig" : "5e147003f7061b46a6046dc91374cbb2f1113ddb56dee64f203a513b421330655c123fc2c51a79ce70fef2884b6b444ff8639d5448a0781f8f0503009cac89a58fa0bf73b698011d80986379dfa0b8923591f2c310cdea8982f8b87dffc4ce27e5a1a75f44c40e95898d0ae12cabb94fff41116f1d96dfc8fb5834965b750cbc",
1798 "tcId" : 197
1799 },
1800 {
1801 "comment" : "wrong length",
1802 "message" : "48656c6c6f",
1803 "name" : "RsaSignatureTestVector",
1804 "padding" : "3021300906062b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1805 "result" : "invalid",
1806 "sig" : "8cf10e501268713c12ae5c26c5982c082a912ba2d22501a12438118067ac19957b0191498fb2113d1ca2db5fad32761f282b4c7684827b35a1709297c9bded1fe61a4e1963d32aaf4cd0ba5c51ad9c1aa3494c47afca86a264293d9a940310d6c1d8bc3e51ea3e12488e87f624e738f3568b21ab5f7a8b299b5eb0d7147ca794",
1807 "tcId" : 198
1808 },
1809 {
1810 "comment" : "wrong length",
1811 "message" : "48656c6c6f",
1812 "name" : "RsaSignatureTestVector",
1813 "padding" : "3021300906042b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1814 "result" : "invalid",
1815 "sig" : "8ee3b703c37759112397fbc6410d9c95a93084f544a26756071b298ba563b2c22962befb038d995912ef5b48f5ffb9d187be72f835d0afa764eaaaffa2cf42b0918e8b364bdef42a482e571cb949342654c91e3012776620cdb590323326e2861d1abdae6ea2fae95d7304b25255aae9d7309324bfb6b47cc2555e5191e95a79",
1816 "tcId" : 199
1817 },
1818 {
1819 "comment" : "wrong length",
1820 "message" : "48656c6c6f",
1821 "name" : "RsaSignatureTestVector",
1822 "padding" : "3021300906052b0e03021a05010414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1823 "result" : "invalid",
1824 "sig" : "7ab24ebda94da9c07a8742a96884e7006e36c15fadc0d41721d8192581ace97b040af10f79bdf1041ce48bfbdfe0e2807042ef91efb0136acd592346bc8c572bd0da5f6400406971b8d84b021c0550e32b9ae8cc4481b8979979170d7690158dc95f2fea00e05566a2369a3eb34794cfa6792128d72774eb0fb504490a5e9484",
1825 "tcId" : 200
1826 },
1827 {
1828 "comment" : "wrong length",
1829 "message" : "48656c6c6f",
1830 "name" : "RsaSignatureTestVector",
1831 "padding" : "3021300906052b0e03021a05000415f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1832 "result" : "invalid",
1833 "sig" : "49877ff5a25db5d9736e7c0198f7908dd0eaf2f2ac754d6456073df7a1b8d87f49fe9ed7caac03e92cf8bf253626c2ec049c4dd4615bacc5a617ffd874934ad868db7c5d7db8e37bddaa22b557b49bf8ee769bcd0d0faee45adaeca042fdfabe0864256a64389208ea8a825d373c439e220a60fb30ddf96427741e5771b89200",
1834 "tcId" : 201
1835 },
1836 {
1837 "comment" : "wrong length",
1838 "message" : "48656c6c6f",
1839 "name" : "RsaSignatureTestVector",
1840 "padding" : "3021300906052b0e03021a05000413f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1841 "result" : "invalid",
1842 "sig" : "6acf67de89d21ac6c0e0360dc872eabd3d9f315a46921fbc835391f4e5df2d5a73826cccc3ae099c76c5e0b5dcf13f76316cad72f2715be8927fe83273cb5b10dce6b4a58236e90028146519ee975599e2cfce518be7e20701b82d24e1448654a89a52cdad64c33ef916e1d3a40eaeb07a7b1509a151ca7a8c3f37b734dbcdd3",
1843 "tcId" : 202
1844 },
1845 {
1846 "comment" : "uint32 overflow in length",
1847 "message" : "48656c6c6f",
1848 "name" : "RsaSignatureTestVector",
1849 "padding" : "30850100000021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1850 "result" : "invalid",
1851 "sig" : "8291239e82027853aad5ec6526dc14eb2e4d6f62459cec895e311302e531a472dc720a55f01089ad3ff96608cd0804dcc4816441f92e77b9dc59d85a7b750cef32013fc888ce4bab028152ed07d31e1232cfbdcdbf096cfbbed22be93a8cca41ffd69575c3e47aa6f3c4bb895690622ad253c60db7fad789b3508252120f2905",
1852 "tcId" : 203
1853 },
1854 {
1855 "comment" : "uint32 overflow in length",
1856 "message" : "48656c6c6f",
1857 "name" : "RsaSignatureTestVector",
1858 "padding" : "30263085010000000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1859 "result" : "invalid",
1860 "sig" : "0c0a60f4426a0922599d12bf623821ef3a69e88b8f3df39c998b91951bf8fd9f12f379db75bd051943076b73f145f6de4e82c050bdff9989bfb7430c6b4483502d291e666fc1b93e61a2e7dfc4f3b3d0f695ac605772a8f54a85148b76285aa0ae2a993d5061dccac1afeb9605771de9b51d6891e875c384d8827faef2388555",
1861 "tcId" : 204
1862 },
1863 {
1864 "comment" : "uint32 overflow in length",
1865 "message" : "48656c6c6f",
1866 "name" : "RsaSignatureTestVector",
1867 "padding" : "3026300e068501000000052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1868 "result" : "invalid",
1869 "sig" : "52d65dbd6d48dce0dbc538883d3508588966c4932afcb22457221c34414a59d8effbcb805c6320b5edb024c745afec75bb7c698d9e903fffeaf7a4ee8c36d7f44482f5116d8d7758f08c889ad777405f204e1c5b75e1dd2721f46679fa13a98f8bfc07885ad67a43fe4c05ded4c36f8d7e1bf5695bd348192986f1b40c60527e",
1870 "tcId" : 205
1871 },
1872 {
1873 "comment" : "uint32 overflow in length",
1874 "message" : "48656c6c6f",
1875 "name" : "RsaSignatureTestVector",
1876 "padding" : "3026300e06052b0e03021a058501000000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1877 "result" : "invalid",
1878 "sig" : "485b9c137230f1bd439b4b5753be8267f386e1725d63d6c29bef2759c8fc81d4bfe2b5759e9dfd1772fe2cb661d320ec8fc831cf6e4abe8e18d622893a7ee92c64907c15427e7748faa3d1445e7721260e70be4f32167d60462fae53bfc2d943501b8634e443a940d9f41a1391119305a0367799909a7b83fdf7374721d4efcc",
1879 "tcId" : 206
1880 },
1881 {
1882 "comment" : "uint32 overflow in length",
1883 "message" : "48656c6c6f",
1884 "name" : "RsaSignatureTestVector",
1885 "padding" : "3026300906052b0e03021a050004850100000014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1886 "result" : "invalid",
1887 "sig" : "73c06cbffd5b65aa863f4d61321d840689ab69885ecc340748b8c4ad290945074fb58c73a419ea9f56e9ad70d1b133567a6c3e8e42a9b009241179eb154d7fd1603b6e25db969bb62eac8477addf62f1437d225c57725f3a017073c7418e70adf1e5caf81740e9503ff395b956bc90aced537e846968d879e1a17f4823aa3ffc",
1888 "tcId" : 207
1889 },
1890 {
1891 "comment" : "uint64 overflow in length",
1892 "message" : "48656c6c6f",
1893 "name" : "RsaSignatureTestVector",
1894 "padding" : "3089010000000000000021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1895 "result" : "invalid",
1896 "sig" : "5d718291abc4c814b265b5eb7c41d96648ada9e6baeca90e4dc851a1655a64aadc072ed9402f583f6f56b1d885c9423f4b708afa978c3c941969188b44b04d4d787bb6079e3527d6c1e36cd5fffbd33178cb6f23c4e1302b3a59cebe6353b6b10a005e6f24a5ef8350900b3717646917d1efdaf8aab1a3e994d5627a8d11e577",
1897 "tcId" : 208
1898 },
1899 {
1900 "comment" : "uint64 overflow in length",
1901 "message" : "48656c6c6f",
1902 "name" : "RsaSignatureTestVector",
1903 "padding" : "302a308901000000000000000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1904 "result" : "invalid",
1905 "sig" : "1849ce77edf490fe5825f6bd1d6b4c312227fa9296ebb4f5e9a48dcb9b9a8918362a92d8a620dd3cec378f67beda0216b4c39fe07903bdeaed853f8884ba017fafce472c751284cfcd4db8fd5b93dd821eb43a202747927f1bcb947ad76ebd9d6085b616e8f8485b31889b95f28c4bf06dd4852142ac2f5ae707d1ed4f23cb5e",
1906 "tcId" : 209
1907 },
1908 {
1909 "comment" : "uint64 overflow in length",
1910 "message" : "48656c6c6f",
1911 "name" : "RsaSignatureTestVector",
1912 "padding" : "302a301206890100000000000000052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1913 "result" : "invalid",
1914 "sig" : "0d3eb2ba13141b7d5fb65b0ebca47b979bb51778e762bde3c4cf33b02f84b0567214eaf31dfdc8197c2e84d9a85af76e8bf832a5ca2797af79b0293d85f513e421714e364ac5a5551a066063f008d6eb7c3bfdda6c6fed53e0161cb607ff7e78916f301cd81dd63f351eab77395c718b56d8d0b73b4806229999fb98aaa7751a",
1915 "tcId" : 210
1916 },
1917 {
1918 "comment" : "uint64 overflow in length",
1919 "message" : "48656c6c6f",
1920 "name" : "RsaSignatureTestVector",
1921 "padding" : "302a301206052b0e03021a05890100000000000000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1922 "result" : "invalid",
1923 "sig" : "88b8e16d5527fc54feac2b63c905964e71c47701dad5944aba4847460b235c09e9ffa8bc6e59390dfa8d739893cbb32f5b06ec7f1fc918ffa0c364e0b5985dc05aafe98a8b86b18168d7705231dede7f0ffef76e6805a35a0ed9a78bebedcc274169f242aab6c33541c840a1e50cf09720b2aecfc356ed88ce1090bc54499f6c",
1924 "tcId" : 211
1925 },
1926 {
1927 "comment" : "uint64 overflow in length",
1928 "message" : "48656c6c6f",
1929 "name" : "RsaSignatureTestVector",
1930 "padding" : "302a300906052b0e03021a05000489010000000000000014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1931 "result" : "invalid",
1932 "sig" : "54bbb6fa9891afe6101547c34599fd1fb4bfb3dbe0c57fcaba3bd3700f0ee7d658ccd24bde5394aadc7480f181b90576a74de3c705b85bf214d9d8284be4b00b12678891989c3e3e16f53185fa590c016c29fd6ea02f97f1a872100969fdc57654b691122f2eddbeb6dc558ade5854fc8f26c11c5c32638bd4f7253099c7d1bf",
1933 "tcId" : 212
1934 },
1935 {
1936 "comment" : "length = 2**31 - 1",
1937 "message" : "48656c6c6f",
1938 "name" : "RsaSignatureTestVector",
1939 "padding" : "30847fffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1940 "result" : "invalid",
1941 "sig" : "0dd112d02c49ae5057f4b89c14b871e5a446e96dca84c6d0d012c95615cf43ebd42e79d034fdcdc93de62e3b11dc11dba63dacf300190d443e3796e0c95a5db3955f799ec1bcdd4ecf69b708fec727b76401e989f5cdd612773f65e1a357e0b2942b78aac09dea9eb0d86463aca289a0af876eb4ee031bdf10e0df27516ebafa",
1942 "tcId" : 213
1943 },
1944 {
1945 "comment" : "length = 2**31 - 1",
1946 "message" : "48656c6c6f",
1947 "name" : "RsaSignatureTestVector",
1948 "padding" : "302530847fffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1949 "result" : "invalid",
1950 "sig" : "603d34e2f71dabf90d862e828a0579fef915972f070c495da35fb279808ccf4bdbb0a43f666d203aa494f0a3012f5a4518c2a83fd8a8d3f1537be15174f22a355124657fef6e1b673c4010e8514cb133f63a15a7245ba9fd8acd03c080e4e89531c0ee3b41612e34b136c07c469c042b2b2718dc600cc1f4069063d0989fa188",
1951 "tcId" : 214
1952 },
1953 {
1954 "comment" : "length = 2**31 - 1",
1955 "message" : "48656c6c6f",
1956 "name" : "RsaSignatureTestVector",
1957 "padding" : "3025300d06847fffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1958 "result" : "invalid",
1959 "sig" : "11238413d11b4c1e0e311fee14bc4b3370c9943fc22c8b9429487bcb920e091d9edd0341bfc79070337854884267cbbc0f41dc34746c3e56096bc03cfa9d58e812d2bb9cf7dd90f3f16c048036255c0338c3777073a925f565ca9c9f78c7edb856f20a541275f84eef9a022e94dfeeeae4f07416cfefd742c21da502a1fe80c1",
1960 "tcId" : 215
1961 },
1962 {
1963 "comment" : "length = 2**31 - 1",
1964 "message" : "48656c6c6f",
1965 "name" : "RsaSignatureTestVector",
1966 "padding" : "3025300d06052b0e03021a05847fffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1967 "result" : "invalid",
1968 "sig" : "8364095ecbfbd1f50f2964bce941395095071e45e9ab55edfef6ec767dc3790ac237a11132e6e087e96c226fd338783d4de817abfb9e134c2dd61dd4e400188f50be2a7cf3f96804011b5240da29bb1e8f7d4337c8e1f2af0acc1536057b0114a23172c6d37f9128ba4c2b719158ad70c5c44033e532c58d0d79c4508470465e",
1969 "tcId" : 216
1970 },
1971 {
1972 "comment" : "length = 2**31 - 1",
1973 "message" : "48656c6c6f",
1974 "name" : "RsaSignatureTestVector",
1975 "padding" : "3025300906052b0e03021a050004847ffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1976 "result" : "invalid",
1977 "sig" : "8a3d7f621509191a435d03f94a338c1aeb99a824eac10a7c8575d1848f16af74dd87db6137a590d3e0cffa18cb5c52e1ab42688c2d50afa5a29730a98d6cd60e24f13c7dfd8500a9442954a23e773560a11b1a2a3fc087a28ff2520aeeff2a058928c9af14e90125b0d534bfec11eb1a02227e7d513569f3f8dc6e35f6fe6136",
1978 "tcId" : 217
1979 },
1980 {
1981 "comment" : "length = 2**32 - 1",
1982 "message" : "48656c6c6f",
1983 "name" : "RsaSignatureTestVector",
1984 "padding" : "3084ffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1985 "result" : "invalid",
1986 "sig" : "149a74b89d1eb542f383ce0f24f8665b1387529770f561cee91f39e3af3e82c1cb0f589f4d6d5e9fbe92a8105993d55c205cbf9b4ec4c3085739ae1ae2ef4615d43040926813981d4b626f3c71e08981b8c900952eb23d8b9da218fc3f1f113a27682ead4466157e9043188d331a9632c8972ac7bca5729132bcf4b76309fcf4",
1987 "tcId" : 218
1988 },
1989 {
1990 "comment" : "length = 2**32 - 1",
1991 "message" : "48656c6c6f",
1992 "name" : "RsaSignatureTestVector",
1993 "padding" : "30253084ffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
1994 "result" : "invalid",
1995 "sig" : "3b55f4f1b497c53dc4fe59e8e2c8bd48f9199bae420e43e5a22fcefe047a5fd6422de99742ab6b3f946a908d382852359f5f80037976287f4806ee3edbfb94a01d81fcc9c28afbbe8d824089bca34f939d5298152bfa11e69e047a6379723d5d187c1cee5f437517ea237d0a024d2d21316666f867411b0b84f6010dbf3fc2f7",
1996 "tcId" : 219
1997 },
1998 {
1999 "comment" : "length = 2**32 - 1",
2000 "message" : "48656c6c6f",
2001 "name" : "RsaSignatureTestVector",
2002 "padding" : "3025300d0684ffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2003 "result" : "invalid",
2004 "sig" : "99a4a625ecb0c1c339c42b058d05f8cc6cd47bb29deb1df909fc16083e08ea18f482dc3932f0f81a0881c8a4e450d52da647fe501baa9363ce0261729beb173e3c6b3ecfb392ce93d89ea4c0e911ee2b95574a966c23276b9495b2ef6dee3a054c728c4ebb1cb294c703e1320a7d3cace4acdb57c605ab1c197448d5b890e71c",
2005 "tcId" : 220
2006 },
2007 {
2008 "comment" : "length = 2**32 - 1",
2009 "message" : "48656c6c6f",
2010 "name" : "RsaSignatureTestVector",
2011 "padding" : "3025300d06052b0e03021a0584ffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2012 "result" : "invalid",
2013 "sig" : "4473370a0f1cbe032dd66017379c5605c69fb77c74af9f119f93b4df107cda358dd074a7c8a2a4b3afb3bdd4d6074be90e6e8018fe482121cea28e7d42b4a64e0fad25c86d4792099812b74dfd225efefe1a4c9b664a3786c9e2070bd7ec4bbf666a4fdacf5966d121fd17169db07d47f04beae689080c76592527346d3741ec",
2014 "tcId" : 221
2015 },
2016 {
2017 "comment" : "length = 2**32 - 1",
2018 "message" : "48656c6c6f",
2019 "name" : "RsaSignatureTestVector",
2020 "padding" : "3025300906052b0e03021a05000484fffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2021 "result" : "invalid",
2022 "sig" : "1157bd4955170a4d8dbb6c3e20faf50fdc20140cd2f0ba30f2b3b059742b747f501e8fd4df0c614d247d7c7ffb91365e6bfb5ce36d21364cde0ddf7d9b10c1b1fa0ef1aa37deecfcb0002094a6b2971854f70912e62e91275091ecdbf0c218c0a3a4d7c5ddc7eed97c317f46ea2b554d391d08a5d015ffdf1c51de55f8048d1f",
2023 "tcId" : 222
2024 },
2025 {
2026 "comment" : "length = 2**40 - 1",
2027 "message" : "48656c6c6f",
2028 "name" : "RsaSignatureTestVector",
2029 "padding" : "3085ffffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2030 "result" : "invalid",
2031 "sig" : "50af5b10a7fb4f26fe6abe148cbf8169fc5f7260e732f4ae4ccb79877a3b1c8d6fbc476a43db9f5e94c8c13fb256ce767aacd02445b47bcc54f535ce67251ee94a63b33dac77cff65d3de5aff42f12939f10320d40ac448cde70bcd8a40fa20dc91354f97521d847e45aaeb9fe38a8c9c0a3ebaaa34046a620654e305cbc3289",
2032 "tcId" : 223
2033 },
2034 {
2035 "comment" : "length = 2**40 - 1",
2036 "message" : "48656c6c6f",
2037 "name" : "RsaSignatureTestVector",
2038 "padding" : "30263085ffffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2039 "result" : "invalid",
2040 "sig" : "4635e85ef3201bd0c0f1e57a2fda4c1a7b68f36db6ca9f1f034c75bad695a67964086d3d7f7a7505ff10cd77f1017908634f309fd5e0d4a406c1c579b08b397305e0e6a57390738c2e663449a72c0894bb3beb0933cd12c469181b139ee21ca9954dfd88b0ebc6f0e8d29c7b45b2bf5714e17ea9950e0d5b476b55aa0b717bfc",
2041 "tcId" : 224
2042 },
2043 {
2044 "comment" : "length = 2**40 - 1",
2045 "message" : "48656c6c6f",
2046 "name" : "RsaSignatureTestVector",
2047 "padding" : "3026300e0685ffffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2048 "result" : "invalid",
2049 "sig" : "6cec5f74cea80f137a424880ca5254507315b6e50376a969a444aa0c33d5a9079fbdd417662c16048a249a94d251685742ebe4fba882e797bc77f6d28105136b2ba9bd5ec3080343d00d7bb9f579a334c945c1239680c11170e0470e801bdf6f9789a5428cf97b0af0f2fa77db2f8fc00182b1bf9601acde6fd5158b4f57bcaf",
2050 "tcId" : 225
2051 },
2052 {
2053 "comment" : "length = 2**40 - 1",
2054 "message" : "48656c6c6f",
2055 "name" : "RsaSignatureTestVector",
2056 "padding" : "3026300e06052b0e03021a0585ffffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2057 "result" : "invalid",
2058 "sig" : "0513eb217a06590004cbfcb0bc94c0c6f79b488fffbba9d85e289e42b91824c8c4e1dc04f3ad6f6ce6e8480c96889bef3c62105bdff8af972264cf0110b4e522fd26ff6af8147990143828fa3aa2ba25066369357e19fce0b8f90d048ac1ef19380fe493fb70ac9660d5258dc0657a6270166d3400c2421bbf57bcfe10e2ad64",
2059 "tcId" : 226
2060 },
2061 {
2062 "comment" : "length = 2**40 - 1",
2063 "message" : "48656c6c6f",
2064 "name" : "RsaSignatureTestVector",
2065 "padding" : "3026300906052b0e03021a05000485fffffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2066 "result" : "invalid",
2067 "sig" : "5b0df944013467b97409704eb2130b06e537f746c5387dbb858651f4446887f874977dfbe9d5fd26d0be6ed9ed9381b9a8511710d0756434ce897cb00863c652ddf3a6b2df37f9308a46dcf2027ea523f124c9f32c2d9a09b5d1928e2677dfaf5e0d8a00c3d0edc5c1441f017011a16f2e0788fb2d8d22e395b4d79a8375ba49",
2068 "tcId" : 227
2069 },
2070 {
2071 "comment" : "length = 2**64 - 1",
2072 "message" : "48656c6c6f",
2073 "name" : "RsaSignatureTestVector",
2074 "padding" : "3088ffffffffffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2075 "result" : "invalid",
2076 "sig" : "52be2fd82c24a1fcbcc3d832732eb97b1032933fa6af3b7fd8d63fca652d4b3a40c8488695414049f416f4eb01095767d75325662accd8c47bb75500ea4a99ac1fbd01815d0b8ddf450e097380c53715298c22fd3150b8417a66f499495372f07e98578e407ca2d226c69533c80b08f58e1fc0ca1cacb8652fc9374e12f6278e",
2077 "tcId" : 228
2078 },
2079 {
2080 "comment" : "length = 2**64 - 1",
2081 "message" : "48656c6c6f",
2082 "name" : "RsaSignatureTestVector",
2083 "padding" : "30293088ffffffffffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2084 "result" : "invalid",
2085 "sig" : "2703db8b7d2f7a879c235f95a9a39870074efea76b73663c50c4581eb2debb494472402d271b115a14fdc14eaea36cdb4c199260abd321d8cfbd1f56b1954761c5c61ad3ec1e440b53f1cceb156d8638b597eee1eb717b110f30fcea92f47e7c1ba438b1b161967f555bd14f0bcbcd21833aeb2c6b8b3f5c4727d07ddf009b11",
2086 "tcId" : 229
2087 },
2088 {
2089 "comment" : "length = 2**64 - 1",
2090 "message" : "48656c6c6f",
2091 "name" : "RsaSignatureTestVector",
2092 "padding" : "302930110688ffffffffffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2093 "result" : "invalid",
2094 "sig" : "927d2fcf22048a79d64b34aaa94de24a10770a95e32f0a6e2b9bd5a9c1e502e9fca540e54aca240091923bf4a64fd703b30fb5cec96c8da5431373bfec653da1ab25cff5024e1a029cca12469db0ca362ecefadf60991fc1c1615154450d9e1b54abad613f5ddccb5545e615c6168d0247f8e7c061659c9946c3af1e373a618a",
2095 "tcId" : 230
2096 },
2097 {
2098 "comment" : "length = 2**64 - 1",
2099 "message" : "48656c6c6f",
2100 "name" : "RsaSignatureTestVector",
2101 "padding" : "3029301106052b0e03021a0588ffffffffffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2102 "result" : "invalid",
2103 "sig" : "1da7bb65b41d9e5fb8b895882b9b6c2aa5ba32e7297c8eb3d64e5ae4311ad229692296cc27eb84e8673c29b65c35b1d52038d8b4136b334f4bd385621d7ddd6e0b5718c65834dcee0e7841a154f1953b130573995ad5cb29849490366936ee8a383f33f6cab3221d21d86c42ad8fff91efc5257ab8e9279df968d477167e75cb",
2104 "tcId" : 231
2105 },
2106 {
2107 "comment" : "length = 2**64 - 1",
2108 "message" : "48656c6c6f",
2109 "name" : "RsaSignatureTestVector",
2110 "padding" : "3029300906052b0e03021a05000488fffffffffffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2111 "result" : "invalid",
2112 "sig" : "4c3a7204c4807d5b44fc36eff6b0513730fde67c74eb7a7d0484b7a5b89e444e89b07170ec0ff4ec4f58b9f13c3bb82cba0081b737f62277dbbc678933dc3faad4dcdd61c8b4d62c7a1c9a6dc40c564b36bcfb9aff90e9c642afd81a8c9911351e3f0b78e0ad6850c937a69ee2a639be88473682d7c4a6edc77365cfcfe91075",
2113 "tcId" : 232
2114 },
2115 {
2116 "comment" : "incorrect length",
2117 "message" : "48656c6c6f",
2118 "name" : "RsaSignatureTestVector",
2119 "padding" : "30ff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2120 "result" : "invalid",
2121 "sig" : "32107f36c8b86cee3154d197a6e281869070fa9947177aff8cfea5942b3fbc323452b002f957f19083b57d59e6279d80821fa33c1f450ef5f805eabf1782f729dad2f9d0e63462e901dcd449c7fb14a8c42ec9599d30cf1b16b45550061f5b6f7f91c4c2bcb1613daaec5984e634fdd65a19cf24cd29d093406d7f5f4c443a23",
2122 "tcId" : 233
2123 },
2124 {
2125 "comment" : "incorrect length",
2126 "message" : "48656c6c6f",
2127 "name" : "RsaSignatureTestVector",
2128 "padding" : "302130ff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2129 "result" : "invalid",
2130 "sig" : "5ebb4faf49a82b1fda92b2ccc8de0d158bf62f819359d06c6a4a2a508bf728635296d188d5a221b40cde9d51e107b8e8f73ed2a0c3cbd92325ddea1cad1f72ff6491133ab7a2847f3d339cb2317e8b9e336516a7a9d84fa8fb2b481df9e1ec397fe97d18227ab98c2fa55f080569aedc7025af770674a5b33c61b811922058dd",
2131 "tcId" : 234
2132 },
2133 {
2134 "comment" : "incorrect length",
2135 "message" : "48656c6c6f",
2136 "name" : "RsaSignatureTestVector",
2137 "padding" : "3021300906ff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2138 "result" : "invalid",
2139 "sig" : "531ddbfca4d3202639ecda32eed51b2fcffaa0cc6a0e97bdc1df71ab3b800f3e80f661b118d9cd82dfa1ae35cc3a364dd2a1c688e90cb6b6a215485e5e30679838bea37edcbe982ae858ebb461a45ff687332be102eb65746d9539a693b489c3cd5901adecc2d4afeca278fcf3b21774f2d11090f436d949d4ef96480839b678",
2140 "tcId" : 235
2141 },
2142 {
2143 "comment" : "incorrect length",
2144 "message" : "48656c6c6f",
2145 "name" : "RsaSignatureTestVector",
2146 "padding" : "3021300906052b0e03021a05ff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2147 "result" : "invalid",
2148 "sig" : "4ec4e1b4bb0ce0b002b8cc0b47fbc2baa9be415e35d77fb95906620322a63fed39595837d1a547cffc5f50c34a4daebf3a15d7d7ede9e583ffefb77ca4e4cd953b91a8608ede58a5500dbb71ad24bfa2b07bbec03b702c53baf4a1053d4834376b205854cee7e0dbaa1ec60f72ef238fbce20d76f9549b485b41173da58356aa",
2149 "tcId" : 236
2150 },
2151 {
2152 "comment" : "incorrect length",
2153 "message" : "48656c6c6f",
2154 "name" : "RsaSignatureTestVector",
2155 "padding" : "3021300906052b0e03021a050004fff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2156 "result" : "invalid",
2157 "sig" : "7d54aa05c2043d5f6330ab97726ae0407d0f6be65cc1146b374d3e7f75583beb5ad0ba0361b2cd6bcfcfa01987cfdd4423047fa6f909b3fe3840262c55b3f2c0385cd8474cb92eedf9eb9113e9e83d0ae220124493c3df2380df4cea3e88b81d9e3947feebd788c2417c644974f6b909c1e44b75b74240b370f8663e9a1f63b3",
2158 "tcId" : 237
2159 },
2160 {
2161 "comment" : "indefinte length without termination",
2162 "message" : "48656c6c6f",
2163 "name" : "RsaSignatureTestVector",
2164 "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2165 "result" : "invalid",
2166 "sig" : "1573e93ebc5caf4eba58c9d80b89c0b62de2073a85f5872a22ea283f37366fbb8c6c7f4b0a4f459505d95da2921d8aefa640d81f5dffb9e0e679c69ccb310eda59f36d49b33219b30ee3b0f680e2794654c99e63effef73b09891f67c403283999943d4ded2c823797ac2773aed7a0af88cade66f4a203fe91c8d86d720fbd36",
2167 "tcId" : 238
2168 },
2169 {
2170 "comment" : "indefinte length without termination",
2171 "message" : "48656c6c6f",
2172 "name" : "RsaSignatureTestVector",
2173 "padding" : "3021308006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2174 "result" : "invalid",
2175 "sig" : "9dc2d9a253cf809bf178002806d1c9883f5c74a0734f70dea7e322f2ea00a00a3bc864dc4f0fa90bdf0af0a8e46f893f6405a63998ed27f18cdffd1b46a183763e3bcfc4c491a023468f1b355d12be2118e4381d960fa2548afa12a6ea46da03268d1d050bd942ec8c2bf584f8d2ff00ff975860686311b1dd17d1ad6f262d66",
2176 "tcId" : 239
2177 },
2178 {
2179 "comment" : "indefinte length without termination",
2180 "message" : "48656c6c6f",
2181 "name" : "RsaSignatureTestVector",
2182 "padding" : "3021300906802b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2183 "result" : "invalid",
2184 "sig" : "3b1240c785cab25d0ebd26078da7323bd28352a878cd405419cef18938d27dede67112d32f6a60d22b14c78e0f5c392bc9f53f2a71769e21a9dd4b5d8495a203ff0e715a1173ce69f3c966d83e8ac9a45ad534c36b77d1cd120a6a3236ce023099b19acb39a25ec420f8765829b77cb048a5136b597645caafbc34d3c09723c1",
2185 "tcId" : 240
2186 },
2187 {
2188 "comment" : "indefinte length without termination",
2189 "message" : "48656c6c6f",
2190 "name" : "RsaSignatureTestVector",
2191 "padding" : "3021300906052b0e03021a05800414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2192 "result" : "invalid",
2193 "sig" : "84bbedc08a146e7f8923dbc116c9793d1bac3608d71f962664d2a155bc06b8a02d3a346e067f347cdf50ba537c14c1c8bfabcae5ff982e5543b626f89627d1a4bace0928115d22d2b0daa5285afab45c9d54e5fe1832494f432b32bafb8a922360f5f545b15dc189b7e64dfbe96372b401ad519162488f0123934a9c0512b4d3",
2194 "tcId" : 241
2195 },
2196 {
2197 "comment" : "indefinte length without termination",
2198 "message" : "48656c6c6f",
2199 "name" : "RsaSignatureTestVector",
2200 "padding" : "3021300906052b0e03021a05000480f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2201 "result" : "invalid",
2202 "sig" : "15a6c89db01ecf6d5f4d3a1535bdadcab861655619500b010851340b88cf8ec2547bf402137751006ac9d675b42308f939eed23d010fa36006eee53b94d63c3ef3800665038ffb4f017c1f3f5f8e9b909fd555e67cb002fbe261a42bd7b617525c5027d5af82aae2b6fd29abe4f503dc5f2620aff14d7b7798fdb8d4a7629db2",
2203 "tcId" : 242
2204 },
2205 {
2206 "comment" : "removing sequence",
2207 "message" : "48656c6c6f",
2208 "name" : "RsaSignatureTestVector",
2209 "padding" : "",
2210 "result" : "invalid",
2211 "sig" : "14951bfe3fa22176d5ff4ad5f7dec0d0954e25a2381c91bc17707034ba19087c9f5b167d250129b95b41c883c69a5628196f9733cdff2daacb49ab61ee430582aab7c785e4f70f2320ea1d18da9ed0bd4f96e597977c2aaf0c2b8a3dfd8015d08195e3446efe12788fb7cbfd612d309a13952682b65f03a8c9440fd735fb2078",
2212 "tcId" : 243
2213 },
2214 {
2215 "comment" : "removing sequence",
2216 "message" : "48656c6c6f",
2217 "name" : "RsaSignatureTestVector",
2218 "padding" : "30160414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2219 "result" : "invalid",
2220 "sig" : "40868e6b6d88f66b2478d680ea58466d642e141951f69c1f25bc3f23211100441857b33253b4cf1668b6568b858d1c604e6062022c71c0d764f260c1924972ce44a89b508a3a220cc5b545c4166974e6b619d3d6cfd0b72be7f31070e743eb7611230b4da746f64dec399f71bbe8aa998a99f746bd422be6d02f0e80f5e9a337",
2221 "tcId" : 244
2222 },
2223 {
2224 "comment" : "appending 0's to sequence",
2225 "message" : "48656c6c6f",
2226 "name" : "RsaSignatureTestVector",
2227 "padding" : "3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000",
2228 "result" : "invalid",
2229 "sig" : "34bff75efb6f79769cdf1dae7cbf4be4644b03b7e44ba74a277281e229a6bdd96f922884fdf97705a456ad07e13f90578ce2b3aad819879be2c4097ebe5329e8eb72598005d02c6e73d8ecdbb45fab138cd88259320397f6b90a5108adab63ea07e1b86f5e20455368cfec220782a63aa7aea41761ead5952f9c7da59135f0e9",
2230 "tcId" : 245
2231 },
2232 {
2233 "comment" : "appending 0's to sequence",
2234 "message" : "48656c6c6f",
2235 "name" : "RsaSignatureTestVector",
2236 "padding" : "3023300b06052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2237 "result" : "invalid",
2238 "sig" : "96d9ab79a2c8db9e9a483d5c36c0c3ee430eed6bd8385e4b7b655b7428a28d609ef4a9d413269572cc4be679497329042a1e1b0b090cfbc9a9236b94942e33e2e54a593efc3821ced8110042f4e56a521f4f46a3305dfcd1b899c0f092aeba78ecb8731a91c2a64bfbe7e00d46d85275a04c2269a74cbdf3ee6d6aa4867c8728",
2239 "tcId" : 246
2240 },
2241 {
2242 "comment" : "prepending 0's to sequence",
2243 "message" : "48656c6c6f",
2244 "name" : "RsaSignatureTestVector",
2245 "padding" : "30230000300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2246 "result" : "invalid",
2247 "sig" : "26ec2f6585eb6e732d8430faad988f8223db0f11b8e56c14370697f083f16daf1ce571f73ed43162b40abe8736a43b99cb3c6c6e4a2fd5e2cc75bf779f10abd718eb0f252fa867b4d08cd8ab3f80745c2d368ceaac264427b96dac8b4b7aeeb3303cf4bdb7a45cac40f991c1fe53e8dc530c6dd76302dd8f6bfcd86d6ab290b2",
2248 "tcId" : 247
2249 },
2250 {
2251 "comment" : "prepending 0's to sequence",
2252 "message" : "48656c6c6f",
2253 "name" : "RsaSignatureTestVector",
2254 "padding" : "3023300b000006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2255 "result" : "invalid",
2256 "sig" : "9e4c79c5fe53b5514cd9a3f3d6d898b53f92859d7f862f66b08585ebd6efcead5b69df6d12b1dfed30abf729558f340def7ffd341bc599102ee3cad5459b11457a2a463cdc40594fea9b7d8d0a99b952aa442a25f77991d34a2dbb0b5d73946d5780c176f0cd977a4e2c26b3b25406b7092c2d8ca14205007fcd0b776d01278b",
2257 "tcId" : 248
2258 },
2259 {
2260 "comment" : "appending unused 0's",
2261 "message" : "48656c6c6f",
2262 "name" : "RsaSignatureTestVector",
2263 "padding" : "3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000",
2264 "result" : "invalid",
2265 "sig" : "94c2d05aa194c25bbf274f9b1a312f87128d3c177cda66961cc8388a3ed5c658cdf320bc6af14e57b1569ee6f96280e5fa98ca6eb67017cf3077fa63d9f7a916c445dceacf73d06fe53060a11a4c9ebf0e6203890c0da57324d86fa92e8f9b854c262b57046b1422c9aabd40edbef96f97c015690a4dd1f84bcc02867067d35c",
2266 "tcId" : 249
2267 },
2268 {
2269 "comment" : "appending unused 0's",
2270 "message" : "48656c6c6f",
2271 "name" : "RsaSignatureTestVector",
2272 "padding" : "3023300906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2273 "result" : "invalid",
2274 "sig" : "789468845b4388391ff3baafc966a3957f2db65a01fb34132be2445c22b303fcdaa4379c14a9291f3a7e1f23948c5c6b3d1d61934d3e5689267a14b122017df19da59a762114b4db56b17fd61043caede4ad0c8f89ddf180456d5695b337525f6dee1d1806c69a14868ccbe6edfa523795a9422057a3dd9ca8636e5026ca74ea",
2275 "tcId" : 250
2276 },
2277 {
2278 "comment" : "appending unused 0's",
2279 "message" : "48656c6c6f",
2280 "name" : "RsaSignatureTestVector",
2281 "padding" : "3023300b06052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2282 "result" : "invalid",
2283 "sig" : "65929dfb1cfa05e3a405e1fd566e86a0627ad471101f5b2ace5d2a225641a521ecf2638b5de2c9f691dc0d4260ec49ce2b05bac8064e5a16881bba6dcf7fbb890896c27ca5fad9bfe6259aaaca16d94f01c24f13e30285caa9d610ad26457376c332bba7ab26d6bf832c7aeb2746faa914936c9ee51f9475861db055a89a1cf0",
2284 "tcId" : 251
2285 },
2286 {
2287 "comment" : "appending null value",
2288 "message" : "48656c6c6f",
2289 "name" : "RsaSignatureTestVector",
2290 "padding" : "3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00500",
2291 "result" : "invalid",
2292 "sig" : "81bacc6576415739b7cdf7ec09bbe148be54e8e9b1941992d6c3108cfd3bf095e9f2b4d0c9101136def16587e2121e6ce9d705be253c1597b4963ec43e99ff48d2cfc1ca6141a7c6c309d7a09312dcc5d2b985c38c89bc532578e19f544a0d22262306482973163a93a0e7845479214300f00cb9a01bc5253650d79446c4aa7d",
2293 "tcId" : 252
2294 },
2295 {
2296 "comment" : "appending null value",
2297 "message" : "48656c6c6f",
2298 "name" : "RsaSignatureTestVector",
2299 "padding" : "3023300b06052b0e03021a050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2300 "result" : "invalid",
2301 "sig" : "42b488de85d7a4dfd153e07d965116dc20c05b971faf7c7c899dda96b3325947a36652cf1c6861011307c47b45fccdf1520c39a56e5ecc1292f336ae19256a2e68ca1d3e8930456e53b3778ccaf50a79f8bbce54489281f7dfd376473951f1a893460503cdec4ed81c722906fbde5b9553ace4f794e600b00e79b11822d13ff0",
2302 "tcId" : 253
2303 },
2304 {
2305 "comment" : "appending null value",
2306 "message" : "48656c6c6f",
2307 "name" : "RsaSignatureTestVector",
2308 "padding" : "3023300b06072b0e03021a050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2309 "result" : "invalid",
2310 "sig" : "497311a6c38b7b78634e563139cd5255d5db5f49950b9a45928f0e0b84c9db2bda1072389bdd5c44b229a4038d5dd111e4681fd94fa09775e7670fa7de90f1362621f1ca85fb9c79d941fc34b121f60e38b211b3bbed00edbada6f53aaec2555ed59145af32235232a322519fd408ace24b819e0e3c9bd0a6597d84f9530d208",
2311 "tcId" : 254
2312 },
2313 {
2314 "comment" : "appending null value",
2315 "message" : "48656c6c6f",
2316 "name" : "RsaSignatureTestVector",
2317 "padding" : "3023300b06052b0e03021a050205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2318 "result" : "invalid",
2319 "sig" : "637bfa1961468a3ceae4f91bb9fdf7815d171cdc947a8cedb8beb9077f2096b65500a15c99f512c34acde371be79690acb660bcfe55c0d1a812d12d079f516a6d48b3d35c5c10f21987ac6ba830839a83b1d140c15c57a9df09dd0b1cceb323b1c9a0d854510116d0fa5d16443ea5fec8fc1ec782c76936beef5bd420d789494",
2320 "tcId" : 255
2321 },
2322 {
2323 "comment" : "appending null value",
2324 "message" : "48656c6c6f",
2325 "name" : "RsaSignatureTestVector",
2326 "padding" : "3023300906052b0e03021a05000416f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00500",
2327 "result" : "invalid",
2328 "sig" : "7fbadbb2cb7b323b8f1dfe78abd8e6b78df62aee4cd2d261ba32c05fa321caabf2ec7486bc9811999e48b3b1b06fa1c590fb7b014fe6137165357b4977821e74323eb64a338e98cb0133cc2a9a46e1691fe45dec76781e60022eecbaa6773e911589e831ac2a485c9654fdf3cfc73b66029295eef4c8065f831abafd960ac0b7",
2329 "tcId" : 256
2330 },
2331 {
2332 "comment" : "including garbage",
2333 "message" : "48656c6c6f",
2334 "name" : "RsaSignatureTestVector",
2335 "padding" : "30264981773021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2336 "result" : "invalid",
2337 "sig" : "7d63040570a002364293787b3c0340b7c460eea2cc307d4a6542662a04c0f07ebbc27457f1745129eeddf08156c977e8e346b112024b50c2e3d3686b8e87dd0e35d4f5499cb14049e61e81a5b43fe306ef02b644f20f8db8ed738de9dc630dca8de629a9bc268bee600b7c13c35eaebbbd4e018df9659354efd9bcd5452f578d",
2338 "tcId" : 257
2339 },
2340 {
2341 "comment" : "including garbage",
2342 "message" : "48656c6c6f",
2343 "name" : "RsaSignatureTestVector",
2344 "padding" : "302525003021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2345 "result" : "invalid",
2346 "sig" : "0cc6704e2d24718199b007a9a590a3a63aad1d5f769bb29d2c233f38cd994ad8359522e9c1af260bd8c526de9528de4bf67ea0a34286eaf9e015e4276be490214a52e4f66d44d6f71b7e5c07850a18072ef3e15ce31ad0a085ac59501abc4552a5a2762d484ab494a281801eeebe59d20187f3b6a168cf23f0893b3ea100bba8",
2347 "tcId" : 258
2348 },
2349 {
2350 "comment" : "including garbage",
2351 "message" : "48656c6c6f",
2352 "name" : "RsaSignatureTestVector",
2353 "padding" : "30233021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00004deadbeef",
2354 "result" : "invalid",
2355 "sig" : "2916f598221ebb2894a79ae4580d3e7cf6af6a5d345d4be8b254b9efa08d267e3c25570a515ae47a22fe24a914218bd7bb8322e96d49cf16076cd5cefab88db6609438d939f392c2c985272c7561726e51c85ade312ea1b77cc96b0d681f6f2695106d6e8dd5fd5556ed88151cc0a4302f61f5f3db1e714ce11356fd6c6d46e2",
2356 "tcId" : 259
2357 },
2358 {
2359 "comment" : "including garbage",
2360 "message" : "48656c6c6f",
2361 "name" : "RsaSignatureTestVector",
2362 "padding" : "3026300e498177300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2363 "result" : "invalid",
2364 "sig" : "934016d53fdc1e94095ad0c3b39fd01983a037a5344c486edf74efe2daa9da8e1b8e597176faba7ecc9562d432ff98dc205d00cb3937221a6efd35c42674058db4edeec5b6bc86f49e31201e8c6d5b0fe3d0463e2b36bfcd9bbfd055e89034446da971bc3dfe793350f2f85862baf328c542199ad55fd56bd1f75094eb5e09e2",
2365 "tcId" : 260
2366 },
2367 {
2368 "comment" : "including garbage",
2369 "message" : "48656c6c6f",
2370 "name" : "RsaSignatureTestVector",
2371 "padding" : "3025300d2500300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2372 "result" : "invalid",
2373 "sig" : "5ef2282d6b3b03eeb68b8f1fa17bb20d7f3bd2a66f2450ad97048183c3647de4cf533442f92e2ea850b09c552be9e99419a48891e4952a0d4d886cc1a7115563a49c3490fb8e146b368d3a9f9d98567d6ad03799e6d6415cd325a413d43be0ddd2d5b3706c0bb0432989bda8a5d4543b832638ff3ee4ceaaf239acf0c1ac2f53",
2374 "tcId" : 261
2375 },
2376 {
2377 "comment" : "including garbage",
2378 "message" : "48656c6c6f",
2379 "name" : "RsaSignatureTestVector",
2380 "padding" : "3029300b300906052b0e03021a05000004deadbeef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2381 "result" : "invalid",
2382 "sig" : "88f59da879a63cb4fa4523cda167443e78b2878e8143a54cb0e237ff51e45d34d17d59ce704b72c185346c7093b79fcc0700516dec9c5cb8c3bd7bc21a1f46f593b38b4dc52f80e06a1eb7631bf2590dc7001c122bd2fbe260547c9d13010094ad1e5e75255cbbda3539b1454e3914e6c1e8c93f58b36381b844c39d08770c64",
2383 "tcId" : 262
2384 },
2385 {
2386 "comment" : "including garbage",
2387 "message" : "48656c6c6f",
2388 "name" : "RsaSignatureTestVector",
2389 "padding" : "3026300e260a49817706052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2390 "result" : "invalid",
2391 "sig" : "1458cdaa71d53e60633583b0ca0edd905eaae3dc86350c4803a5fb5d1620b31713930cbe5d21d9530cd791c1cd10007078799a9359b09f39c61394f0d2ffe366efd4485830aceff2296da12a1f9b6677a1b8349cf6b832e7b9821e1be8d5e39a7e892062926066312b231306ba32cff73b03e9be39f12eb1a559e7e18d912f85",
2392 "tcId" : 263
2393 },
2394 {
2395 "comment" : "including garbage",
2396 "message" : "48656c6c6f",
2397 "name" : "RsaSignatureTestVector",
2398 "padding" : "3025300d2609250006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2399 "result" : "invalid",
2400 "sig" : "7f2c73434ec35a0db8a6e89d81171d7df1e1479d4b5e00da0d5e1223c95ebf9eaecb9f5d7b2705ea3e06f42828fc6c6c3cd3af52e3dc20c164789785aa88cbdb63c4b973b4f871c085670039612d4a9f50f0ff84e38c576b09bcc9d55d6c66418f0e8737b1c0e8abc3c2dcee84d7861e58d4cbe887d022a3250f28059c5d4288",
2401 "tcId" : 264
2402 },
2403 {
2404 "comment" : "including garbage",
2405 "message" : "48656c6c6f",
2406 "name" : "RsaSignatureTestVector",
2407 "padding" : "30293011260706052b0e03021a0004deadbeef05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2408 "result" : "invalid",
2409 "sig" : "51d48f38227999d2d1af07719ec317d34e2ee5e42650a6b59b2d0057b7df31a2b551a736c621f5a8e4345fa755f57e55ff80a61c041c7c28e9148b020913b72d6a0ea7cf2f956b567eaed32ea647687505e11d756581fa1d0b593207c6f2db3a75a0923a375731b925779fc3ade0a00997ce4cda3ec6e981e91e1af78b12dc26",
2410 "tcId" : 265
2411 },
2412 {
2413 "comment" : "including garbage",
2414 "message" : "48656c6c6f",
2415 "name" : "RsaSignatureTestVector",
2416 "padding" : "3026300e06052b0e03021a250549817705000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2417 "result" : "invalid",
2418 "sig" : "55dc53df20ba602ce3b36914347d0a2c22ece2b11ca27b9f8807ffd36545ae33f4a665b6a125253a5cd7c358c52d75b65cac14f9553252ec770c25ad03693a1b6f44470a7418bb55ef5d6a0528ff0174119b1b43c1fd1d07a2506603def7f66d45afb99ba70178b3774cc1f3b4421addb8fee0c22e86416b0b1f3c19356ee38f",
2419 "tcId" : 266
2420 },
2421 {
2422 "comment" : "including garbage",
2423 "message" : "48656c6c6f",
2424 "name" : "RsaSignatureTestVector",
2425 "padding" : "3025300d06052b0e03021a2504250005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2426 "result" : "invalid",
2427 "sig" : "1ff67456aa711438c0bf7e46aedf2cd4ebca7d0e9f8b3f98af54c949a1e27026281f77ecc61ae1a981afda0bf7aae38619c5447508b0fea79a588d0d2806ae0f67b32d6dac4b2ad58dfd413d235543666ddfe31d8545015edf25b5b90cf0f8c592f048d009a293dfd1e7bb50a37d52c1540bccf99d8fe2c1299cdbc563d96b45",
2428 "tcId" : 267
2429 },
2430 {
2431 "comment" : "including garbage",
2432 "message" : "48656c6c6f",
2433 "name" : "RsaSignatureTestVector",
2434 "padding" : "3029301106052b0e03021a250205000004deadbeef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2435 "result" : "invalid",
2436 "sig" : "6af2cd04b32de5d3cf8ce985bca6f581e96dfb4ec483b1d2c06cf4439bde888524b2e6675c4fd4e10277752d269c87fe1c4eb70a72a2596cf53f1f4f0ba3e82212e72e09774781c888a96e8870658bd9c248bb1f0f7e3c44f4cd284dd6c611cda266f2f841ec1215295edb5291ff1e5111701258441f06b1ed85e16452a02cf5",
2437 "tcId" : 268
2438 },
2439 {
2440 "comment" : "including garbage",
2441 "message" : "48656c6c6f",
2442 "name" : "RsaSignatureTestVector",
2443 "padding" : "3026300906052b0e03021a050024194981770414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2444 "result" : "invalid",
2445 "sig" : "0541e9a8f0735076b58133e205803982f403cd1203407ebff3534a48eb35f06842fd496d505739fb07dd85f48b3b24685e1d6c7be539edc862cd9b6869097c7344847201842aeea3ebe3595557cb93269898e2109226a2f4eca5bfef0851a5fceb2d6bac753faf6dec4911610e6b40d827a00502537a6fe743d616558813df8a",
2446 "tcId" : 269
2447 },
2448 {
2449 "comment" : "including garbage",
2450 "message" : "48656c6c6f",
2451 "name" : "RsaSignatureTestVector",
2452 "padding" : "3025300906052b0e03021a0500241825000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2453 "result" : "invalid",
2454 "sig" : "5e21d6a684e3daf0be25155cf79874a6bfaee2b771d38ab8895f031cf25a9a05fc8e1d421ce78944bf57a3f0214ee090c42cec51decdc0dc3ab376deaa4603d59eb3ec8b4470e6d8b00b53651873d48f6f2cbd035bacd0f7b24633a025b8ea9dc7c55dfc6578601849e9aaaccdf5fd4d1611b45ed3abe2010079e64de8ab74e0",
2455 "tcId" : 270
2456 },
2457 {
2458 "comment" : "including garbage",
2459 "message" : "48656c6c6f",
2460 "name" : "RsaSignatureTestVector",
2461 "padding" : "3029300906052b0e03021a050024160414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00004deadbeef",
2462 "result" : "invalid",
2463 "sig" : "1f96486457eb037dc9e2464e507d720adcf90f48a0dd1d42bf4239df64e5ef25556ec27290a8d87fc9fb89ad0a8547980f6b2bd7efd0dbe425559bdf08005fb762b92d0aea2f33c17002ab9a911e457532f0134d2e35db6b3393436de160faca0a2c82509ec929d2893bf82a83bfe1a59fc9189e7ca846998b39919d3ec4d6ed",
2464 "tcId" : 271
2465 },
2466 {
2467 "comment" : "including undefined tags",
2468 "message" : "48656c6c6f",
2469 "name" : "RsaSignatureTestVector",
2470 "padding" : "3029aa00bb00cd003021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2471 "result" : "invalid",
2472 "sig" : "48eedcec184b7ade4fb34efac030a4ce140fcd91a1a1e986bf5232e8db9160f076d9ae36ca23246efd53ece2014ea56d5e596b42ce66e3c585d5e6a4cadcd779c6df0d8c43e7945cf02a07dd3851258ed021ade9cfe6fc3df222ebbd6b9e3f39b4331a11c4ea401592883b4f8da7372526f4f3e7acfdad447846ac8160e5ce38",
2473 "tcId" : 272
2474 },
2475 {
2476 "comment" : "including undefined tags",
2477 "message" : "48656c6c6f",
2478 "name" : "RsaSignatureTestVector",
2479 "padding" : "3027aa02aabb3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2480 "result" : "invalid",
2481 "sig" : "107ae9af715ac312dcae1f831a818dd55caa33e659ac6f1a15ef41ebed6207cb54a7faa7e45b519a3ca9c304a645f24ee9ad3eb83d6856ce4809e5d7137ed30e919c9615382e9e8767495495cb7dc4cc27e2ee8932c47cdc6c9154391993108cf952fbada535823368843adbfb06d874c14634659f7dd89b02a14377a5c1e8c0",
2482 "tcId" : 273
2483 },
2484 {
2485 "comment" : "including undefined tags",
2486 "message" : "48656c6c6f",
2487 "name" : "RsaSignatureTestVector",
2488 "padding" : "30293011aa00bb00cd00300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2489 "result" : "invalid",
2490 "sig" : "34b98ee9fe1600e2806f67ea122dfc989aa727f16c8e2cf704b1f05026105b595528692c16a052725a2ea47c4ea2ef13c2f5f9a9304d11607a25b8cb261e64658c6047627e9a7651730b81376d9fd978547c270d15f5c57126e3b41b39ca687d6c8be52bf2552104ca06ef64dfe317095b835cdac2840d4f0d3febcc3863684c",
2491 "tcId" : 274
2492 },
2493 {
2494 "comment" : "including undefined tags",
2495 "message" : "48656c6c6f",
2496 "name" : "RsaSignatureTestVector",
2497 "padding" : "3027300faa02aabb300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2498 "result" : "invalid",
2499 "sig" : "358ce2879366fcebb1212839560958d6a3cfc4cffe2a05e9c7ccbdf18b6427f419a2c1e85fd82e27bc63315a9742d141ca157a435c4f20758e4011b8b0b33b9fb5f0006170c3bbdf4d2fe16888404dbf8b9c00ef30bf45ea68371b76a692f98e79c6c5a574e410a8505d5166112f43cffc506a9d46276cbedfec64f1b2697584",
2500 "tcId" : 275
2501 },
2502 {
2503 "comment" : "including undefined tags",
2504 "message" : "48656c6c6f",
2505 "name" : "RsaSignatureTestVector",
2506 "padding" : "30293011260daa00bb00cd0006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2507 "result" : "invalid",
2508 "sig" : "5affee843b343a6d142406d3d89366a9149d642ca12a661c5d0eb0c1b5e15d3c90dc134eb76aff110b1964ed6566469c47e54aba7145c5601412cd38c630e05236c169f2ac6491795408d410a763f0090e299ad9022ebacfcf2f8f0f248674402479db2387e9eefe47c86c2430e529cd13e213753332fc4a3541de49dd1f3920",
2509 "tcId" : 276
2510 },
2511 {
2512 "comment" : "including undefined tags",
2513 "message" : "48656c6c6f",
2514 "name" : "RsaSignatureTestVector",
2515 "padding" : "3027300f260baa02aabb06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2516 "result" : "invalid",
2517 "sig" : "5cf35c6711fb8b297ec405496e8db527ad1cbcc55ce6122b24ed917fb989c28e369354900abb96f41457f15754fd1060710c6e984db30eb73300cfd890454e97957a589de151225827b5a12384717a7ad92aeb941e1e148e8d008e11598bc7b8a3eac35f2af5584f61335a608c5206e5e24cf934ef2009367f3403e8da2dd0cb",
2518 "tcId" : 277
2519 },
2520 {
2521 "comment" : "including undefined tags",
2522 "message" : "48656c6c6f",
2523 "name" : "RsaSignatureTestVector",
2524 "padding" : "3029301106052b0e03021a2508aa00bb00cd0005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2525 "result" : "invalid",
2526 "sig" : "6e037fa40b3ce48ea72b28bc1ce8cc01188e6f84addcbefa2c729179043b3804d6ff1f25d85c2b9d72acce9c9c64e3f63ecffac670f76b2be75d63b3cee45b72f8758345021177ed13b66ecf0082e3c4418cc92713bb9867c8d28b78f30ff599e82f17734d0772e1e733c0b74fbf31c4f1ee99dbb89b5b113a7f628742d3b2a2",
2527 "tcId" : 278
2528 },
2529 {
2530 "comment" : "including undefined tags",
2531 "message" : "48656c6c6f",
2532 "name" : "RsaSignatureTestVector",
2533 "padding" : "3027300f06052b0e03021a2506aa02aabb05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2534 "result" : "invalid",
2535 "sig" : "5e7bf33ad4d9393d6b368764fac6395ed8ba3da7bf04a0f95d8426684bf0e9f2f78c9e49189bbeec883955af428e6e4527b871aeac21feb8231162f5380077c1fdf63a7cd4be65f813663dd82e732cfb3e1cd09298abbc42fbddc3551772f492627e657febca487db5c03c54850327eacc44dbf4a7c230f1c8166138cbd95587",
2536 "tcId" : 279
2537 },
2538 {
2539 "comment" : "including undefined tags",
2540 "message" : "48656c6c6f",
2541 "name" : "RsaSignatureTestVector",
2542 "padding" : "3029300906052b0e03021a0500241caa00bb00cd000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2543 "result" : "invalid",
2544 "sig" : "0c57e98c13628c8188a0095b98d312cf0fa1a1d2039700ab4c607fe75ea0fab11c2c84e5d22d26b014ae1c2aa948efbb1197e39eafc49cf9f010a7b2be4ab9dfa94ad48ce5dcd5c7fd405f55922146cbc541b9ebc1c89f30a2a3f7cf4a8b14797ff4a60922ac710e7496931ff69e4c0d4e06375c05a7ef1910cbd6c3cae5bbb8",
2545 "tcId" : 280
2546 },
2547 {
2548 "comment" : "including undefined tags",
2549 "message" : "48656c6c6f",
2550 "name" : "RsaSignatureTestVector",
2551 "padding" : "3027300906052b0e03021a0500241aaa02aabb0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2552 "result" : "invalid",
2553 "sig" : "874f05aca449fe8b39b29dff1eb20b145ca4bccd25981176d33b6b41a1dcb48b7a668782549013deeceae3599309f541bfd4a15eb984a401bec4f0facce679c0608d962964b85df739ad19a926de875f6404ca5b209891d380f6e53140b1bfc05a2cf1db336d3a01e8777614299b6e2f683f2406b295f3366d77505cb2e56875",
2554 "tcId" : 281
2555 },
2556 {
2557 "comment" : "using composition with indefinite length",
2558 "message" : "48656c6c6f",
2559 "name" : "RsaSignatureTestVector",
2560 "padding" : "30803021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000",
2561 "result" : "invalid",
2562 "sig" : "123c3ba6d4a5de10837fe12e9b2c61ecb00c93c7d25aa440b7c739df817ccb37be122c5f5570e44a943ee345590c5ca0597605c1487986dfb75245f8e89e4f29aaf3c8eb5c5e8944a63baee4d0143ea2765b0f297a1da8a51981c26a807cf4f9a1aee00bb75cedfbf6466098f7aa27f1e3e63f4f0b7b8c40fc837c23248e914c",
2563 "tcId" : 282
2564 },
2565 {
2566 "comment" : "using composition with indefinite length",
2567 "message" : "48656c6c6f",
2568 "name" : "RsaSignatureTestVector",
2569 "padding" : "30253080300906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2570 "result" : "invalid",
2571 "sig" : "2220dc736ee3c63b5d5915050c6687b3861b52e664ce1ab501681d6e40990f02dfaf96f240adf2dfec05edcb268f6dda4129f901f7416660d56ab3a4145bc354fd11a1dc4e1535a4b8a61498508019ac38b61636356a641b8fb4d4739eb84b4fc49647fad35668ead0743aea841214a6e628ab2b5488de6e60d012c0566fe78d",
2572 "tcId" : 283
2573 },
2574 {
2575 "comment" : "using composition with indefinite length",
2576 "message" : "48656c6c6f",
2577 "name" : "RsaSignatureTestVector",
2578 "padding" : "3025300d268006052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2579 "result" : "invalid",
2580 "sig" : "51fc2dc54c9a46a30ea1c7ea262e86c85110f8bbe42d5abaa3eafb13fa7f3e2424090476c2e50e5eb74d3b6f5e5fe379f3935afe5ed940d443fbcb8686f999c6fdc9e508a5fc7c27bc17169eb5d8e0421ebe7d04260c60435f56d4f614ab9dc0b9298c45fd660c352d35d2985831622eea08010bc27c887f95cb33699759e630",
2581 "tcId" : 284
2582 },
2583 {
2584 "comment" : "using composition with indefinite length",
2585 "message" : "48656c6c6f",
2586 "name" : "RsaSignatureTestVector",
2587 "padding" : "3025300d06052b0e03021a2580050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2588 "result" : "invalid",
2589 "sig" : "87fb9a61395878aafc1fb4a872d8e2db7db123ce4b2d67cd36a7f6e7e190d0bef9487f54340c28fe55d1bd9c38afe166924c787169890493d5cd2a5c79317064313b77a481ddb8bff9a917da32899448d9104ab67dcc856aee617a0a65631609f0632d58bb6585b4dd0c4a8bb41fa0dab99a08489feda41f1e7e5e1fde382952",
2590 "tcId" : 285
2591 },
2592 {
2593 "comment" : "using composition with indefinite length",
2594 "message" : "48656c6c6f",
2595 "name" : "RsaSignatureTestVector",
2596 "padding" : "3025300906052b0e03021a050024800414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000",
2597 "result" : "invalid",
2598 "sig" : "442ac72092d6956bc846d7be909704dc4633e3e59e6ff4bcc97bc9d412645dc17ec3db8bd885150bacfbb085dc90bdf26129637876a4d5713beee0385cb5ea7fa6ae57208df368b4ba95720a716d58ca6ee5a03ede1cc7f2ef31d8c459576ef72f6ba1b5d9409efc74932543ed601f957913a12304c2e29dac219d78ed12203a",
2599 "tcId" : 286
2600 },
2601 {
2602 "comment" : "using composition with wrong tag",
2603 "message" : "48656c6c6f",
2604 "name" : "RsaSignatureTestVector",
2605 "padding" : "30803121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000",
2606 "result" : "invalid",
2607 "sig" : "2ebe12f793a821425e9513256ce1517b03b6bc19e2c2347e94651054caffb1f5d6101d4f3402d5945b4aecd04dacc3ba89d1123916d44941715951e9fd59bf0614a0534762e86275a8f1b0b16fd9a9d146946cff740c206ba6b27b26e8d1fc43b2b4d117e144973091674607844f86fce6f07a2a63acf8df67d3827141ad432b",
2608 "tcId" : 287
2609 },
2610 {
2611 "comment" : "using composition with wrong tag",
2612 "message" : "48656c6c6f",
2613 "name" : "RsaSignatureTestVector",
2614 "padding" : "30253080310906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2615 "result" : "invalid",
2616 "sig" : "6e4d642285fa7a46daf985135181712e84efd52cebe8885b52c61a5cec753c1f8c8ba42886b584faf1551da81232214c2088060e6843d0d319a5e877bd4c500f6832f537306285011e5d8b98e2fe00bd38885211478f27b0d037c34d79d7f4d5828403d20b5463a7e1e2de2398c79fed33bc9eee2fdab52bb40acf9fb68a16a8",
2617 "tcId" : 288
2618 },
2619 {
2620 "comment" : "using composition with wrong tag",
2621 "message" : "48656c6c6f",
2622 "name" : "RsaSignatureTestVector",
2623 "padding" : "3025300d268007052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2624 "result" : "invalid",
2625 "sig" : "0de20757fb64e3633c36e8965fcc20631e9e890152e3a1d2d6a91fbe9ebd56bb99126050c79b41ef0c107086106738a91d0e815d3218404c1db9d4e8526e085ae10195b9cee788fdf7ba9d28c614bce268af0cc58b8a959fb4c24bfceeb5bcfcc4e326d9de825bcbd8eed0df37de2add59f8879326a7e6bfa2a36eb48eba2f36",
2626 "tcId" : 289
2627 },
2628 {
2629 "comment" : "using composition with wrong tag",
2630 "message" : "48656c6c6f",
2631 "name" : "RsaSignatureTestVector",
2632 "padding" : "3025300d06052b0e03021a2580040000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2633 "result" : "invalid",
2634 "sig" : "2e48a4122de8e1779d169f5a6ab72eba7ca3b0c31ea73d41fd82047e18559ff9706acb85f92872124b4020ae001dadc76b61c0e166df0af677f886cde8e13dc8c2b5c93d62cee44cf3bbdc74756d249d3c59834e079154f6646a8c69a2320cf7bc3925523bc2ca3f8fa7d63650321d2a4de3ef3726f74a2020ff5db397454242",
2635 "tcId" : 290
2636 },
2637 {
2638 "comment" : "using composition with wrong tag",
2639 "message" : "48656c6c6f",
2640 "name" : "RsaSignatureTestVector",
2641 "padding" : "3025300906052b0e03021a050024800514f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000",
2642 "result" : "invalid",
2643 "sig" : "6726053471ecf6651529165c96db60559a525efb27d31de913a44d885d33e404fa9dd7d28de94a7d8dfaed297ae500a55bb3535d77dad3031f7edf7bcd636534621d870c28fe64f7b4752f59cb1490208405bf38dc054311473286c52a59a8c6060827ce9a2ccaae9739030927aaa5225d45655be1fd826eaa6b27a8e20a4f31",
2644 "tcId" : 291
2645 },
2646 {
2647 "comment" : "changing tag value",
2648 "message" : "48656c6c6f",
2649 "name" : "RsaSignatureTestVector",
2650 "padding" : "2e21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2651 "result" : "invalid",
2652 "sig" : "4aba9d2c7a58610d7d3f1050cf5c1558369823c1a344c1573b64d3e8483e04995176f05c255ba67e8bfdcc6c7ca640a4ae423bb3c027f8b14318467e6ce1086db7307c0c9c56acd0372c9f53ad17e117df0557e5548d8d7bb6b9545ace3354f5400b832accea7c60c2585b34881461ee6595f0fd564de7f49a7f0228a042c39d",
2653 "tcId" : 292
2654 },
2655 {
2656 "comment" : "changing tag value",
2657 "message" : "48656c6c6f",
2658 "name" : "RsaSignatureTestVector",
2659 "padding" : "3221300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2660 "result" : "invalid",
2661 "sig" : "8c7108f3eab93fdfe930ff1a149a071019936122a4ba0524e309c9af89664f4a202a4f49a4288d80f759521de7e0e04409b5d9f4cb93a722724e34bce76607f9a4c46081abc5a606cda70a859ac1fc931afd10d22a7a4c224cffea888979cb314e9a8dd75a85059bc282c923ca5fd6b508cf4e0c21a93f5d179d05228316eed2",
2662 "tcId" : 293
2663 },
2664 {
2665 "comment" : "changing tag value",
2666 "message" : "48656c6c6f",
2667 "name" : "RsaSignatureTestVector",
2668 "padding" : "ff21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2669 "result" : "invalid",
2670 "sig" : "5200334dfd766b1052dbe9d422f94b979b60afe3d9a2d60aa5eccf0e449357296eccc321561534450ddec51de1b6dc6b94e1e8b1ca52714230f9f7081a36eab655827defce738670c769953dce9696110689c1db5d475c4b1b030db86cab46745b4f23d68dbe3951e089786101d19548816f78343c942f31373519aabee6e520",
2671 "tcId" : 294
2672 },
2673 {
2674 "comment" : "changing tag value",
2675 "message" : "48656c6c6f",
2676 "name" : "RsaSignatureTestVector",
2677 "padding" : "30212e0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2678 "result" : "invalid",
2679 "sig" : "3fc2126ef4b90f42dc8817fb368e4fc5ca34105ae98b3298425af76d2a304ffdabf8d246a53385e0b1c2a2c46205d64eae7be9edb22d5d9bbfa50bca0ca7a8b279ca8eb0ef3aa94d48ec1120010148a58bb576258ec2fd57d10c3d60ed4d94160c5256a24973e5a8333a4f54c288a18494eeff5579e52ee8a45af1ef9943d6a8",
2680 "tcId" : 295
2681 },
2682 {
2683 "comment" : "changing tag value",
2684 "message" : "48656c6c6f",
2685 "name" : "RsaSignatureTestVector",
2686 "padding" : "3021320906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2687 "result" : "invalid",
2688 "sig" : "8cda31b963c774894aeea363abc4af9a8b83cd4aec6cc9197423e7bf9f6935bce978a148d9179f47c092f3de5bf9229f37f86e7586d8fe197cabf27b99a902e561d722b0359a738523aef87286d19cb36d7b430aef83d9828df1aa334ec3835648b3b2af8c2c65f9ac8990d2f4df370d49da6f81dc93cb7035ee931093d843dc",
2689 "tcId" : 296
2690 },
2691 {
2692 "comment" : "changing tag value",
2693 "message" : "48656c6c6f",
2694 "name" : "RsaSignatureTestVector",
2695 "padding" : "3021ff0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2696 "result" : "invalid",
2697 "sig" : "426aa261ad32507dbd08dc315b39368e8909824128abb746c65743fee574b42840489d54c8c5d6c5553e8ae1a3f14bdf4ae3677fec308864ad9d5ac5439976e9379904c6ae5a24e73daa34822e846a0eced7314b4cddc0111c21387d56f89f03a470b79514dfa97c405c8ca9dfbb6f2e3610a8eb5d6c52b37b200a1519026e7e",
2698 "tcId" : 297
2699 },
2700 {
2701 "comment" : "changing tag value",
2702 "message" : "48656c6c6f",
2703 "name" : "RsaSignatureTestVector",
2704 "padding" : "3021300904052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2705 "result" : "invalid",
2706 "sig" : "126d30c8acb2fdaee4e622a2b4f2a16c56b50d03c3fa4ef5a417e9aac346512483e1f4fb7217ff640197d31b0d6f4c41403945dcef37da312f33eb845fb862ec9994060b085c005c6feb382547a4fa1a7d6e7383c81c8ff7a51b539cb55c94d41fa804d9d6968b57a2e8c946f5260d835167b3b5a8302bb054638b9842ac963b",
2707 "tcId" : 298
2708 },
2709 {
2710 "comment" : "changing tag value",
2711 "message" : "48656c6c6f",
2712 "name" : "RsaSignatureTestVector",
2713 "padding" : "3021300908052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2714 "result" : "invalid",
2715 "sig" : "44715b61effca0e94098d7dba43839ab8999dca771968c09b9263a9d732d000db443e4253394eb357cb05bc0d2a715d4d9a0a64b64e3ae7938e040bc9ce6f2b2a5172a564bf970a56a12dbe54d96bc9a6d5d1ee78b112e7c5447015dd461ce824062161f513f17cce02f259a80fa78e655b9c09d5f129fcab8df0a045d19142f",
2716 "tcId" : 299
2717 },
2718 {
2719 "comment" : "changing tag value",
2720 "message" : "48656c6c6f",
2721 "name" : "RsaSignatureTestVector",
2722 "padding" : "30213009ff052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2723 "result" : "invalid",
2724 "sig" : "5ec2194d5f835d6dba9c4ab2bdebbed946f106fcd2a3c6a623e67e6f8ed7ffd8eb4d41f0bbfdcaad34a34d84f9a735f78de159748efe2fe3629f7f185e681dbc5c48025469fc890222e5be9884c550e5cc483f6854184df13162f20d1daeab78eccbc52988815997887e4e52ab7b756885442c7ddb557e726642bccabdfe78fb",
2725 "tcId" : 300
2726 },
2727 {
2728 "comment" : "changing tag value",
2729 "message" : "48656c6c6f",
2730 "name" : "RsaSignatureTestVector",
2731 "padding" : "3021300906052b0e03021a03000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2732 "result" : "invalid",
2733 "sig" : "2fb77b5a5766d1e898af896192abf3f347100053b920dbaa931a8f210f1b84d522b283e59f6f6f5b7b13d4a3ffd21d2e0b64d1b275501b0bfadd23e89361f327e8fc7f29992dde2e5ecd85ae81cc1740228f983b02bb9875eb30597fd247a8351ba87a5ad5ae32cc4596b4105904a19e5805b92c266f66a9516fc2ca519ceb14",
2734 "tcId" : 301
2735 },
2736 {
2737 "comment" : "changing tag value",
2738 "message" : "48656c6c6f",
2739 "name" : "RsaSignatureTestVector",
2740 "padding" : "3021300906052b0e03021a07000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2741 "result" : "invalid",
2742 "sig" : "6a853a5244bf6d3795dd7047da88403f24831169f0fe2f7b789109f279d01e092d5e35d837644c4b83614bd40ae164290cb4fe6fb6eea7dd271195d0b81715a32184342c8c83a82ab6fc62ad58e299b619489d5670c65a6f9faae11909a825da0c4486ea2ba1002f5f8d1dfaccfee2312c9098ee684675f920e61a3f6ff11480",
2743 "tcId" : 302
2744 },
2745 {
2746 "comment" : "changing tag value",
2747 "message" : "48656c6c6f",
2748 "name" : "RsaSignatureTestVector",
2749 "padding" : "3021300906052b0e03021aff000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2750 "result" : "invalid",
2751 "sig" : "16f7787a9f5760f025b2e03886ae1a6c83a99a7495eb57e01b687434a1aa27e5f73e0440a0e6d45d7dae80b7f3d9dda8e2bd37540eac08bfd75f13371daa98a334af10762a55b684bef3c67ee6072717ee9fe67397fd612837e0c449d0404382a1b59adb19bebe32f29b1374b36f9649c0c5fe838252c15e2c8b92ba02bf607d",
2752 "tcId" : 303
2753 },
2754 {
2755 "comment" : "changing tag value",
2756 "message" : "48656c6c6f",
2757 "name" : "RsaSignatureTestVector",
2758 "padding" : "3021300906052b0e03021a05000214f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2759 "result" : "invalid",
2760 "sig" : "71629cae46ffacf0f7af338c56deb86464d037b1c38baf338eea05164a1bc15db208b8e3054d828dfa10aa5595d20e9010d071baff42f5d39264ba7a10ab263a30cf169021bafc2647bccb1f624abd87ea18750fb3380e7b0bcc0e12f96ffb6b98caebf9f2faee4644c8d6f0d8d33511725ac390f99fae9b40968de60a50dbb2",
2761 "tcId" : 304
2762 },
2763 {
2764 "comment" : "changing tag value",
2765 "message" : "48656c6c6f",
2766 "name" : "RsaSignatureTestVector",
2767 "padding" : "3021300906052b0e03021a05000614f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2768 "result" : "invalid",
2769 "sig" : "656312f836bcfdfb4e38f88994a2295bb55ecff0e745974753b22a15c67c64c92c329693917050fae66f565310f8ef8cf4b37dd47eae088adafc34cb0a2eb1d34223ff51bd230d3946fd8d4abb8ed8d4c923bdff7011052e07b358bc5d59deca4a3d82999e54fb5d521564e9ce1fc69c3968adf31a5837fdecc0c9552297ecda",
2770 "tcId" : 305
2771 },
2772 {
2773 "comment" : "changing tag value",
2774 "message" : "48656c6c6f",
2775 "name" : "RsaSignatureTestVector",
2776 "padding" : "3021300906052b0e03021a0500ff14f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2777 "result" : "invalid",
2778 "sig" : "8fe1efcfcfb09cb4bcea76590fb8fac5ad9428898848d3c20efb256ba2532dcd77603bbc2cb7c5902e099081f6a54ecfa4b0669d5391c10f391aebfc636fef14bb7bda71f12e0d9f164a2ad47abba6103986eba5cbb0b1a4bc3887a51ebe614e0dfa60afe1c5c0bd76911d01450952408384fb88e795897c0ed64e28c5f00b71",
2779 "tcId" : 306
2780 },
2781 {
2782 "comment" : "dropping value of sequence",
2783 "message" : "48656c6c6f",
2784 "name" : "RsaSignatureTestVector",
2785 "padding" : "3000",
2786 "result" : "invalid",
2787 "sig" : "2b58ee609310e66e3d812f20eb3a9e2995bbd5947b5569c0c23aad8638590a43c8610e25fe6c248b74392ebe9f4edabb1e5b918e227f49bb9df288f5755d06f7a22e8e7e3d63b21ac023d35067142f301bde6f6ce017ffdd256647861801e3dcf38b18888b9986eb2c944937fe1706e28988f0781b7acc83c4a0ef4b40b25b44",
2788 "tcId" : 307
2789 },
2790 {
2791 "comment" : "dropping value of sequence",
2792 "message" : "48656c6c6f",
2793 "name" : "RsaSignatureTestVector",
2794 "padding" : "301830000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2795 "result" : "invalid",
2796 "sig" : "1bf19d3dbdc4d1ce61350bb52d11ef6ecde6816b875ce7fa7361bb2edf84115313cb95d21f3472b7d178e27c0701c6ab528a735fc0ced0a8af81c78d96227ffecc545c8cb7a49fe269e97d647b5b01e0996f29689504b1ff4e4d8e08fab6756ce9603c0bd622b4e74eb8c18373ac1efd5074d08ddaf8fd7c3204e25fc0c99328",
2797 "tcId" : 308
2798 },
2799 {
2800 "comment" : "using composition",
2801 "message" : "48656c6c6f",
2802 "name" : "RsaSignatureTestVector",
2803 "padding" : "302530013030200906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2804 "result" : "invalid",
2805 "sig" : "5e1f0d448504349b31c8a5ed03e066c7dd7878622fe42d645bae8592aee87e1056504d92a88a3626c54fe3da07649ae6bb30315f3c3b358beed1afd38d414785906dbbc6d0e188f9006756a545a1d1979a496449689ee3cc067072624ef5f2de8a1f6f0c798e8bbbb9b6e14db12512feaff11063dc3ca3a5b3bd5926bcabbd78",
2806 "tcId" : 309
2807 },
2808 {
2809 "comment" : "using composition",
2810 "message" : "48656c6c6f",
2811 "name" : "RsaSignatureTestVector",
2812 "padding" : "3025300d3001063008052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2813 "result" : "invalid",
2814 "sig" : "18d30faf84664f79faa0dd0285c408fe54793df5858ed7cc367d62847470e32f433edb77c30f0d0dd549220cb18eba18d1076820ec27ac37bbd8b989b847ed8c84ed1930e7ea8566a9d043807b0f03fae51aa0046483343ae06831743fa79f4438190164e9d5e75610bb5fb9201365dd9dd4aa6b5dcafcfd73161dde7da40e99",
2815 "tcId" : 310
2816 },
2817 {
2818 "comment" : "using composition",
2819 "message" : "48656c6c6f",
2820 "name" : "RsaSignatureTestVector",
2821 "padding" : "3025300d260906012b06040e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2822 "result" : "invalid",
2823 "sig" : "981a4523b61116d28d4bdb8d80969f7fe1cfbb06f4dd218d05fa332680b1342d20f0e4d4a1a6401ad777615fc56e3ca2fccaf07139f43ebe1d92d20605f8c894d88e8c062487fa86f51b2026dd12ba68077c3551d928990848bf0de07cd880194f2ac276af86c1e55e25044be3c7204ddafdcd61795a9e3b7885a88f43aa6b8f",
2824 "tcId" : 311
2825 },
2826 {
2827 "comment" : "using composition",
2828 "message" : "48656c6c6f",
2829 "name" : "RsaSignatureTestVector",
2830 "padding" : "3025300906052b0e03021a050024180401f70413ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2831 "result" : "invalid",
2832 "sig" : "98d603185c1e2927622056c9053a62e17ea4aab5808418725cf8887720f5f3500cfe6ffa00513e45b72c9fe44d288d06555bf715282f6feb685df2f44bfcb3ed541653139eeeaeabeae9d52514495b604512a9ad6223f68a860612b668f5a0993ebd5c9ce9cc00baa80484d60b01c23a6abf40be03cd1cce3317563b1f9326f5",
2833 "tcId" : 312
2834 },
2835 {
2836 "comment" : "truncate sequence",
2837 "message" : "48656c6c6f",
2838 "name" : "RsaSignatureTestVector",
2839 "padding" : "3020300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab",
2840 "result" : "invalid",
2841 "sig" : "3b5c1e0d3dc103755b67feb766d58968f94e8d8af6a209f6d28e7c0541a4fdf7a6976f664414f5ee0beb9369a59681291fb2c902853fcaa01bd065fb7a1da967849cf45bf558e375058591b3af1b5c8a18da21d5dd7598e7e3aebe0478180200294b86d88b1c39e224bc1dc22f1a8e537e05db467b5a04dc70ab9346c79fddd0",
2842 "tcId" : 313
2843 },
2844 {
2845 "comment" : "truncate sequence",
2846 "message" : "48656c6c6f",
2847 "name" : "RsaSignatureTestVector",
2848 "padding" : "30200906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2849 "result" : "invalid",
2850 "sig" : "61b6f98e16e4809448e56d9845850b748bdb64064ed4851c141c57e93c37744bd91f54f5ffd9264f151294e6f73bc8d5a51daa06b9121bfea1f28847229875ab87a7297dc383987db1f6bc1133e344a95af6d34fd18105d154ca951e4e6f64f9fde7994207ddd5eb6bb2a07037f13c8d853a8b8684431d5ecf1cc9bde41cda49",
2851 "tcId" : 314
2852 },
2853 {
2854 "comment" : "truncate sequence",
2855 "message" : "48656c6c6f",
2856 "name" : "RsaSignatureTestVector",
2857 "padding" : "3020300806052b0e03021a050414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2858 "result" : "invalid",
2859 "sig" : "8c05912e8ebe5f2cc9fcbc2410bcb63b217756cd961db8caba316634c6ce191f365a21137602373f357461e9020b702025c61e3571cac6967a8f68375a9cd4792222b59c54e21649776f6e7d5995448779f7f9d32bb4e0e4e2b612b5c2b8574d98d01b9cdd26965541c0a67d484e13d4f49095ff7030b180569058376c7926a5",
2860 "tcId" : 315
2861 },
2862 {
2863 "comment" : "truncate sequence",
2864 "message" : "48656c6c6f",
2865 "name" : "RsaSignatureTestVector",
2866 "padding" : "30203008052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2867 "result" : "invalid",
2868 "sig" : "8bf895e0a26741d142767e67e73f102180a5e2083ee27d869585cd02c0211673641ab3e4f84cfdb2748b0a3a39db047fca2261c7ab3a7bac575990741d15c543f83f9da27fb5da3362ad1ce1a0eccf853b9e0a36f851b6cb5734cd22bc3b621193db37e13dd06d8854ff111dac2c939618aa041abce70123cb14d62d527223c1",
2869 "tcId" : 316
2870 },
2871 {
2872 "comment" : "indefinite length",
2873 "message" : "48656c6c6f",
2874 "name" : "RsaSignatureTestVector",
2875 "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000",
2876 "result" : "invalid",
2877 "sig" : "5280f9fd14542d5b61a951893b081540d922ba15a7a650aced363106d97b69aff5b1ad624528b7560dce27c3a3e8f8657c8b0e9b83ab63342550fea7469ec14ef1cf48ed33515d56c7872d5eae8cf2480ae7549a8ce4c56748d08c4f3a61bd13b9c9ead6bcaa113bf3f85a112057658689ea075fc8ac7d74216918d588865ec7",
2878 "tcId" : 317
2879 },
2880 {
2881 "comment" : "indefinite length",
2882 "message" : "48656c6c6f",
2883 "name" : "RsaSignatureTestVector",
2884 "padding" : "3023308006052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2885 "result" : "invalid",
2886 "sig" : "88cd60c74205ced62ae7bf35eae4c86826ca946a9b3bf190ab8069734489058191b6a501b6766fce0f5a3e5f7a39c0deae40aa66ab36b5a2a39d955650118ded3a8dba0df5b50056058cd643630133c4f2cbaaf8055cbe96e63e8fef8074fa23e1f1d5a1b5cb5ecde5fde92c78441f2907aa53ae9e3e09f0a7a7628e4e2be5df",
2887 "tcId" : 318
2888 },
2889 {
2890 "comment" : "prepend empty sequence",
2891 "message" : "48656c6c6f",
2892 "name" : "RsaSignatureTestVector",
2893 "padding" : "30233000300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2894 "result" : "invalid",
2895 "sig" : "91c68a2673606cff82abf69c9e2d591315595a3a0b612d6d2708528be0184c9116195f58cb4109a69f8d2f7cbf4036affcebe7a1615a914833b921b915ea12b16324e6e74f95d6eb5b03201d67b945f03296ffb37ef7cda908e83f44dbed24a54e81b71f840668fa4fd82b29c0e1c5b1c021d481c73a662668603d3fbf5182dd",
2896 "tcId" : 319
2897 },
2898 {
2899 "comment" : "prepend empty sequence",
2900 "message" : "48656c6c6f",
2901 "name" : "RsaSignatureTestVector",
2902 "padding" : "3023300b300006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2903 "result" : "invalid",
2904 "sig" : "17c921fb3a8535f2e472df2c447a60f2fe49a4afeefa065f1c84e50dc97f989268ae6bf1e8d77f5b2edd59c2c7f3653b7565902c5b889ec7007fb9006f244257649888a4a1883146c88828717d381018b1f00d656d5e092172f49fadb42f913a92ae1eb4e01e3c2490e1dc52a109e37094188bcaa181898d97ea2c0203a885a8",
2905 "tcId" : 320
2906 },
2907 {
2908 "comment" : "append empty sequence",
2909 "message" : "48656c6c6f",
2910 "name" : "RsaSignatureTestVector",
2911 "padding" : "3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf03000",
2912 "result" : "invalid",
2913 "sig" : "077b2d2e79ff380612aa3f9c79e8b7a580ffafdab8ca3ec86501c40248b3459c0c7b2590fc18ccfba2b0e7a34c67b8d3a7ed92fa686170475666570d38464720b4983e5c374f1b6c604226284a62e20a8a37341abd72f238aec8a2cdfeff00c512c28e608ce98e4bf3640c61509ec56f7e2143216214eb5b06bfd0fa448ba633",
2914 "tcId" : 321
2915 },
2916 {
2917 "comment" : "append empty sequence",
2918 "message" : "48656c6c6f",
2919 "name" : "RsaSignatureTestVector",
2920 "padding" : "3023300b06052b0e03021a050030000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2921 "result" : "invalid",
2922 "sig" : "2121389e8b2282bf6022c45e7a3ac9f42bd7f13ea37060f6989bacc72fb6e887db8128024698a5c76adea034c69604b1f56e062627c840cd2f80802e6f2764606b96b78506614198844319bf7726b95afdfd19d5ffda1ccb159646bee5c3d81adf56f2b54edf749ca99a86bc9452f6a307eae06f028f86b4af17137f6a2352cb",
2923 "tcId" : 322
2924 },
2925 {
2926 "comment" : "sequence of sequence",
2927 "message" : "48656c6c6f",
2928 "name" : "RsaSignatureTestVector",
2929 "padding" : "30233021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2930 "result" : "invalid",
2931 "sig" : "059efdc649108b988ee6a63697701a3c98bf7c770dd525844dd6e936d0f468b3c786f82a03c4b1d23caca0dd2a62a6ac43f58b6cb311a819f7b9f48cb9b59b17306deebf1d69a7d93a2d9381e48ddd0ef1d0a07dc5a5568eeefb3832dbbad503e21141f6dd58a5bf503a469d49dd3edc5f3a712b7e63d8ae734ee1808a9654f9",
2932 "tcId" : 323
2933 },
2934 {
2935 "comment" : "sequence of sequence",
2936 "message" : "48656c6c6f",
2937 "name" : "RsaSignatureTestVector",
2938 "padding" : "3023300b300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2939 "result" : "invalid",
2940 "sig" : "21d94c3d46c49bc86f376e2d4fba1495f98558e9f76136ba001f1f90befb6311771b700c1252894a5348491c262329e99cc52ee68e577615ebe73d59210f8ddd8b91ddced5fe98cd832b57a4c583318377892bb15bb7d545cc7a182fb47c3149b99e4db5f12df9105a055d0925d8f3d747a2f25ba1dd00a5184afa46695197e3",
2941 "tcId" : 324
2942 },
2943 {
2944 "comment" : "truncated sequence",
2945 "message" : "48656c6c6f",
2946 "name" : "RsaSignatureTestVector",
2947 "padding" : "300b300906052b0e03021a0500",
2948 "result" : "invalid",
2949 "sig" : "690c052df7c7079aa3bbcc9d4699ac50bf0dd90b1d6822046c7ad1429900ce2c4882af9decd580fab0698e5ce3185bcc234561e051533283d022831fd8b19434e4bdbc84223ddcd99d1a8f28a9ba222394312d11d81ee95831b4264d5434c3122c30afaf6b990ccb4f6991f60e78195d3aed5f670c4c2fdc034a514b92c67519",
2950 "tcId" : 325
2951 },
2952 {
2953 "comment" : "repeat element in sequence",
2954 "message" : "48656c6c6f",
2955 "name" : "RsaSignatureTestVector",
2956 "padding" : "3037300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2957 "result" : "invalid",
2958 "sig" : "4f4f38364932377af52adb8c51c5bd705088ddbfda713458377c3997915766ae05da5c797cbf24a9c73d36fa61b1b0bfb9c14e429c0b66fd6fe1ec041b9d14946588dc384a7a69bf2ab69fd8da67d0e1fab2dbf1838959cadd0d3ca03c9c0bc929d207be60ff8e08bfbb03f4423cd81fc5f587bbff3985d2beef69dce295b903",
2959 "tcId" : 326
2960 },
2961 {
2962 "comment" : "removing oid",
2963 "message" : "48656c6c6f",
2964 "name" : "RsaSignatureTestVector",
2965 "padding" : "301a300205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2966 "result" : "invalid",
2967 "sig" : "6ea8317813355faec271a659d62cc94f7408fe73178a2de00407136a53b69d77136b9ef4533e3cda580761f42a683d4a02a2abb7aeb941a44854832d18950d8efc43ae8de29c0c97873761d126e15e7816d173dcaf9315dfa045681d9a4b37b2ce1578ffcbfb4c30cba6e1746ec3f95d310839d75ea873ffcc0ee82513342a71",
2968 "tcId" : 327
2969 },
2970 {
2971 "comment" : "appending 0's to oid",
2972 "message" : "48656c6c6f",
2973 "name" : "RsaSignatureTestVector",
2974 "padding" : "3023300b06072b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2975 "result" : "invalid",
2976 "sig" : "990ac0a5dbe9f30114427c45925353e49c235ec8fc5b19724bffa75eb7e93987ed97dc3107e2ec26b9bb2c51d53f92158fca0baea0d881cb829e0bfcbc88f0021bf967e44a245eadf78fa8eed67aee696fde1a2a79e05a7c6a049f3af282a394f743bb4eedc9798b2d3290e8255a2339fb7a694e789a6fa38e2a236b948f48e1",
2977 "tcId" : 328
2978 },
2979 {
2980 "comment" : "prepending 0's to oid",
2981 "message" : "48656c6c6f",
2982 "name" : "RsaSignatureTestVector",
2983 "padding" : "3023300b060700002b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2984 "result" : "invalid",
2985 "sig" : "3c8995341ca2811f9e976e8157e708aa59b38f8e1a24ed16d8b30a19fa23c5df8b1ac2b3c82fbf91800918a2ad6b9320b10e39fb391254a3d954a278faffa97a2052513ccc8b17783faed189b8a4d997d7baba3053d6ab6493e2e36b3ee5046ea62d37a835a51390252dff088cc3a0a33cd1a82e557a0be0d5871b4fa18c05e2",
2986 "tcId" : 329
2987 },
2988 {
2989 "comment" : "dropping value of oid",
2990 "message" : "48656c6c6f",
2991 "name" : "RsaSignatureTestVector",
2992 "padding" : "301c3004060005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
2993 "result" : "invalid",
2994 "sig" : "87b5cb8841fa252f38c375b39ccce2d0361397a8436d2f37ca3e2293e554ca27fea1095683e42f274ccead1876d89dbb4e5dcca8e28972aeabe3d818144e96c020bef1de944724d1c2a813c633f8e7f8b6f8c8950d2c89dd26534430ff9cb6f5f08b332638b1385770a69bbbf6f76342b8270e2bd440df058c2ad55f9a0dd679",
2995 "tcId" : 330
2996 },
2997 {
2998 "comment" : "modify first byte of oid",
2999 "message" : "48656c6c6f",
3000 "name" : "RsaSignatureTestVector",
3001 "padding" : "3021300906052a0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3002 "result" : "invalid",
3003 "sig" : "288ea84a615e75c398407dc72e2482ffc013e09b1ba302790d17d0949e286c156584e6098858501b0c5c763615e59d840ec53269bf0ff5bab1f79c8e717497e705724fe933343106bab5b9e619b0a111a59b72be36372efb6fb981be725e3408a1185a5f42d486d8c052af448f0abedbeafaa1d5d8caf5fc03d85329fe675f9a",
3004 "tcId" : 331
3005 },
3006 {
3007 "comment" : "modify last byte of oid",
3008 "message" : "48656c6c6f",
3009 "name" : "RsaSignatureTestVector",
3010 "padding" : "3021300906052b0e03021b05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3011 "result" : "invalid",
3012 "sig" : "222c07c03d0c5bb3cbe70a8835447ff9af92ce32245f0e1de0481d87bd174731093f9b84aa5381b107c00fde8ed78030026d87951f8e5b6180827ff2a0a277db3a8f5031a82b83259bf6baab154cda64b372ba3cac5c629459284d986f3c2367e8b14f6dec7d38628e4ecb884158cc78ac39f4c9ee537d45370b089418d7227e",
3013 "tcId" : 332
3014 },
3015 {
3016 "comment" : "truncate oid",
3017 "message" : "48656c6c6f",
3018 "name" : "RsaSignatureTestVector",
3019 "padding" : "3020300806042b0e030205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3020 "result" : "invalid",
3021 "sig" : "3fcd54aa3d66afce987282cbfe09f0a6eb30d0c94227bef8a2c9fccba44f1c8aa080b361b13eed4c9d0d37caf26fe61ddac8347102d9080cb17f2cfdba7e217df3f8c19039d466241264ae8caf15652c8f72a6ae292dc71c80049d679034ad19bc745d6155cb2efde963f738cfea08f7bba8894f472beff5deebe33173033317",
3022 "tcId" : 333
3023 },
3024 {
3025 "comment" : "truncate oid",
3026 "message" : "48656c6c6f",
3027 "name" : "RsaSignatureTestVector",
3028 "padding" : "3020300806040e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3029 "result" : "invalid",
3030 "sig" : "4ad8a7e4a92ee9aeb1bf3ee9392abe141d435a6ebd1799d90f5417e6daef65d37bf33c8c5255d52ce5d8b2cc223cd0c68a6061450df5c6694e2b911c8c25e6384a70fb19a50e10bfbc494fe5a62d9db915b7c77a27d17788f0567110bb046b8aa42d3ee1ea444c20b983226cf094f4cbfab24855c68f1e2e9fefd41b2dc7903b",
3031 "tcId" : 334
3032 },
3033 {
3034 "comment" : "wrong oid",
3035 "message" : "48656c6c6f",
3036 "name" : "RsaSignatureTestVector",
3037 "padding" : "3025300d060960864801650304020105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3038 "result" : "invalid",
3039 "sig" : "949fecb83ddc236d3c622c9b6118fe0bf524080594c731636eb735e7d1285b5b6c527a2346b51c42fcf706184c4edd79ac98750dcf35973920aa19dee689cb7654b4785d2755b0dde4113c293e301f4e0331cf166bd8c7ae07031165fa4c02a3d6d70422fe42c7c6077a1f1dcbdc0de257363d51951ed1e2b8cb66684d42a8b4",
3040 "tcId" : 335
3041 },
3042 {
3043 "comment" : "longer oid",
3044 "message" : "48656c6c6f",
3045 "name" : "RsaSignatureTestVector",
3046 "padding" : "3022300a06062b0e03021a0105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3047 "result" : "invalid",
3048 "sig" : "8a52f6b0275fe745b429d0a4a42122269277de6a5eacd0daf79166cf8ab8ad061e74d91ee1877bb6ca50b9bcc5f0677702184e6d8ffc841fe3b6c24c9cd6dc017824bad65d89a47a21e54f87005afb3f13cf11d10383458548394211074f19da555205026f4fcdfafb73041bb84f1dd9e8012bb1473314c85bb3460d51ab5f13",
3049 "tcId" : 336
3050 },
3051 {
3052 "comment" : "oid with modified node",
3053 "message" : "48656c6c6f",
3054 "name" : "RsaSignatureTestVector",
3055 "padding" : "3021300906052b0e03022a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3056 "result" : "invalid",
3057 "sig" : "216fc9e3ee6438bf1934f30ea7a86aba6ecbfc04fbbced4576a6c59f7a9f5a761d6a97d262142489807e4ca1b9bc02c86a80e093b55fc97bc943be0403bcf390f6140de964199f753b7afe430308b871fc0c596c1b08ca74006a10bdbd6a53064796747bbc203383ac7916ca1ef1a2def714e9f5f9ce9584cb09bd677ef374be",
3058 "tcId" : 337
3059 },
3060 {
3061 "comment" : "oid with modified node",
3062 "message" : "48656c6c6f",
3063 "name" : "RsaSignatureTestVector",
3064 "padding" : "3025300d06092b0e0302888080801a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3065 "result" : "invalid",
3066 "sig" : "135f14404b953bbcf4580133f0432cd746a5601ae01c5542924a1b28fc422c501c732dc330bb81d8df7a2a3829e6c5a151e81333832cb124d513f5b6fe799e207999c3010bf30689cc4b8b3bdb081d7351b47196de41e9f988c2eed49c22c7b0a6ca3eed511080fdc17d263b82ba668d3225da4fe66bffae68c536c4e38b2dcc",
3067 "tcId" : 338
3068 },
3069 {
3070 "comment" : "large integer in oid",
3071 "message" : "48656c6c6f",
3072 "name" : "RsaSignatureTestVector",
3073 "padding" : "302a3012060e2b0e03028280808080808080801a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3074 "result" : "invalid",
3075 "sig" : "21fb0d97e5e1a178b08e2bd646f59ab8ad1a7a955afa71d4c0e4631069ec8436abff03327b696c90b91f7769fe0b085a83ed2bed876a9da05f273b58ed057429ddf25a8b1bc0c87ccfbc8394864405c0b7c27d4a4b589d7a5711f36d8922729169520d7bffd52aefc41205a6ee8a54609d0533c64bc8e88b3d58ed9a04d2f9fa",
3076 "tcId" : 339
3077 },
3078 {
3079 "comment" : "oid with invalid node",
3080 "message" : "48656c6c6f",
3081 "name" : "RsaSignatureTestVector",
3082 "padding" : "3022300a06062b0e03021ae005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3083 "result" : "invalid",
3084 "sig" : "9be13e0d25b9cd6a1b8544fb488254319505a1fb27fda933f8b91f6f325b5beffdb71dbf377093da2e0ca3098c891cf7d8a8762e1e27ba1d4e6491ac3fa4c8ad3d4e4937621904a347d197fb373c62766ad14525e2c32913e7fe6f045eaca77c9a5025a6746f9c7b94cab054c476548dd1eb3e01c5923ed681fa04d47ba126d2",
3085 "tcId" : 340
3086 },
3087 {
3088 "comment" : "oid with invalid node",
3089 "message" : "48656c6c6f",
3090 "name" : "RsaSignatureTestVector",
3091 "padding" : "3022300a06062b800e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3092 "result" : "invalid",
3093 "sig" : "4738deff4b32a30dd68b0abc1971dd2af9a500b5f6922558b96ac9b1ab4a50328b2ba9a48e7c207a02ddf642728930f4004d337483eaa0a01fb038a7a6c289672bdaf1016120f2faea563f179d3d623d3ec9bb5d936ea2a7f74d2bd70a06c83e904df55f5142c5c6b6f75221397dabcb19e069436b94ca764a5016141496503d",
3094 "tcId" : 341
3095 },
3096 {
3097 "comment" : "appending 0's to null",
3098 "message" : "48656c6c6f",
3099 "name" : "RsaSignatureTestVector",
3100 "padding" : "3023300b06052b0e03021a050200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3101 "result" : "invalid",
3102 "sig" : "977a5c762a4dcbe9551a4a0bcfe96114aa59187e6dd0164cbbec2d28ff9d11e413a1de7f274704c24229c99ce9b5a3d98872db56310be7259a2fa44e652c4d02f8802360d3a29ded2a7de0a183001e74b3aa3fe594867294461d6a23160481ecdee9c05c28ce066021847a23366cb147013f57ce53a24791dd1873527f1323f0",
3103 "tcId" : 342
3104 },
3105 {
3106 "comment" : "composed null",
3107 "message" : "48656c6c6f",
3108 "name" : "RsaSignatureTestVector",
3109 "padding" : "3027300f06052b0e03021a2580aa00bb0000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3110 "result" : "invalid",
3111 "sig" : "79a42d1f294f82bd6ad48818f1f634733fbefea7def5ea32a1ed56de994ac047011695a0c8a11813d042ee6784cb172da76aa0ed892e53d4bf99fc21301a91181e7c93a56646190aeeb4a1c212d34d17484521580d84adb41b2a5cc285963509d0c832e5a2252e5cb028839d9db7bdabb7689219b97d699277ed004ca6389b61",
3112 "tcId" : 343
3113 },
3114 {
3115 "comment" : "appending 0's to digest",
3116 "message" : "48656c6c6f",
3117 "name" : "RsaSignatureTestVector",
3118 "padding" : "3023300906052b0e03021a05000416f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000",
3119 "result" : "invalid",
3120 "sig" : "37ddb1b141539dfc350974039429b948cfd8acc40ecab7270b3e560f0876cec68fa22c8dbf09c8c25955819a5cfc6d251ab99cd06c013792207caa2ada95d4fc01a6d89329e211869c02c648a64b721e92ef3aa767569ba2f0c7c376772926a95ededa5d3f0ce10ab3b2b25f70fee1702dfedb0605ef6401f3f44c464ee98110",
3121 "tcId" : 344
3122 },
3123 {
3124 "comment" : "prepending 0's to digest",
3125 "message" : "48656c6c6f",
3126 "name" : "RsaSignatureTestVector",
3127 "padding" : "3023300906052b0e03021a050004160000f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3128 "result" : "invalid",
3129 "sig" : "85c2c430e7cc2e989e729186cb1256a5f7e78bbb6e135b36a43059389f57cc7fd67ccf20becc0d9e63731ae4ee77e926754ee5226991f9bd46203f7fb88562b00974dad035b1a0f39cba567dc0ed3cb3f7bf51326e62b0f82d8aaf8cc8dfb96c08c64235dc2a4f612bc29a8d4fb4b1edff1cd517d1c981a809ce9708a547a765",
3130 "tcId" : 345
3131 },
3132 {
3133 "comment" : "dropping value of digest",
3134 "message" : "48656c6c6f",
3135 "name" : "RsaSignatureTestVector",
3136 "padding" : "300d300906052b0e03021a05000400",
3137 "result" : "invalid",
3138 "sig" : "708e3d4577c0ced7b4d729b5124169f67836738bc18f82537dbe1c9a48054769ed0888751a823eedd05408ed934a555655d473dcec0fb5c6f19aee82f1dedf3f4fa14171c3ccbd3f1f9920f233a21be4341134f25636cbdd55918e9da76568c3ba55c630ee3e9eaa4dba7bd989fe0534925d1c47592214eb4869bcd42b60c92d",
3139 "tcId" : 346
3140 },
3141 {
3142 "comment" : "modify first byte of digest",
3143 "message" : "48656c6c6f",
3144 "name" : "RsaSignatureTestVector",
3145 "padding" : "3021300906052b0e03021a05000414f6ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3146 "result" : "invalid",
3147 "sig" : "0a581f33a2e1e1665032331dcd1baefb9048af3efa9d6e24ae8e73fb0611422db4426bf804c08ea5ee7089574d4b657cb526437bf677fe3f9e140ee76f4ee2a9514bf0772670de18141840d93f12975013b84dfb74fb450f3bf2cf1cb0cd0267fe521f01d85efd8726be12e9c574907e97a2834cf00910b164732e5daeff4acc",
3148 "tcId" : 347
3149 },
3150 {
3151 "comment" : "modify last byte of digest",
3152 "message" : "48656c6c6f",
3153 "name" : "RsaSignatureTestVector",
3154 "padding" : "3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf1",
3155 "result" : "invalid",
3156 "sig" : "0c64af0070eb86bb4abe059fce3fe3ced43fb4c19d1c3560877ef54c575530d0473ff2691781c2f7d7aa971b07e517888dc50cd63b0b07e2eb5aa18c6c5ea7f5c9e8e4c7d283808e40920c83cdba64a7e9d01b1e15710b1caa6da8686cc2e4e3b8cc276204c3e21f3e352e81e081660b18a8e6057f2227b117c2c9c5021be26d",
3157 "tcId" : 348
3158 },
3159 {
3160 "comment" : "truncate digest",
3161 "message" : "48656c6c6f",
3162 "name" : "RsaSignatureTestVector",
3163 "padding" : "3020300906052b0e03021a05000413f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab",
3164 "result" : "invalid",
3165 "sig" : "313624a0449c7f2f19878797dab59c91ed45ca0910aed355737635283d56edc7f470628e119a70f7d40b238e0ead042ec1c1c377272fa3ca975cc21eeec934f758ce70f19e00f592a0e5a4aad8e9956d9fd7dbbc126b6a001f20c42b517ba54511630382612f2bacb9711c87d9a19897c8c44f7905f548b558fada6a2c9912c7",
3166 "tcId" : 349
3167 },
3168 {
3169 "comment" : "truncate digest",
3170 "message" : "48656c6c6f",
3171 "name" : "RsaSignatureTestVector",
3172 "padding" : "3020300906052b0e03021a05000413ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3173 "result" : "invalid",
3174 "sig" : "4a3539eaceb4691d856020b9acc11854892df705ad7994759dea2efe0c5384e8f86ebeb3f4360ab0bc7d35c8ca520c8d0a1c869f3979ddedbb60437e798332a0ef7a52ca86b430ebc6aa57114f6057c8f18066ca1483cbe8a8ad3a1e96476a21d53ac6f6a4e18ee965371ebe58184fdcec67f0d42cd16d6ce6800ec87978b759",
3175 "tcId" : 350
3176 },
3177 {
3178 "comment" : "wrong hash in padding",
3179 "message" : "48656c6c6f",
3180 "name" : "RsaSignatureTestVector",
3181 "padding" : "3024300c06082a864886f70d020505000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3182 "result" : "invalid",
3183 "sig" : "1d8eb339d60f873bf3dd07816dbd8a5b5e61805e26654e5a5869fcbef176a61a3b2c173778ce5fb7323dee2f4e42a272474576e8942ce04c66a17d2ccc093e529df580d047159f7c1266af51b7a7f07f43a28e309111540a80fa76b25b6d86f9d2fc99a28d1715567545509f80beb700fe9cfb82be7bc801794b7d32eb9b584d",
3184 "tcId" : 351
3185 },
3186 {
3187 "comment" : "wrong hash in padding",
3188 "message" : "48656c6c6f",
3189 "name" : "RsaSignatureTestVector",
3190 "padding" : "3025300d060960864801650304020205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3191 "result" : "invalid",
3192 "sig" : "3b2ead8d64cf96e26db3ba9d1ff63a187a715d04e3a7dfcf6c85790896793bc19c0ea6c5266cd4ebc25b859a07ad6459942eb46f3efcb9adbc29f3fa5acf0013d5baf3089e3ec5cd3401ae282670d27493b0ee33e391a9d32283b224036405c9d61bbb470dc8a69762bc35483d3d26c1c8e16c311e5d3e284f1d51383ce7bdcb",
3193 "tcId" : 352
3194 },
3195 {
3196 "comment" : "wrong hash in padding",
3197 "message" : "48656c6c6f",
3198 "name" : "RsaSignatureTestVector",
3199 "padding" : "3025300d060960864801650304020305000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0",
3200 "result" : "invalid",
3201 "sig" : "6b23ad94314f022d64a7b525aa933b7aef8184b66473572bf41c00f899dbeeb95755da7c749a0ce5cb09d3567ebd4ceb0033a1b16cfa13e85fd1745640a5306229a14a9c67c07f75058ad1dfebee25c44ba3bbf75fa053ef74717ea7f972dcf7d7d23901a3aed841e0ca419aa570a605e0d189d2b51ce3f00497c0bf16998ade",
3202 "tcId" : 353
3203 },
3204 {
3205 "comment" : "wrong hash in signature",
3206 "message" : "48656c6c6f",
3207 "name" : "RsaSignatureTestVector",
3208 "padding" : "3020300c06082a864886f70d0205050004108b1a9953c4611296a827abf8c47804d7",
3209 "result" : "invalid",
3210 "sig" : "53ee28bf3582045ff9a6f7d813b9453fc5813245b198d98cb141f6f36202240746b9d3778006aa4cd3905bffed0fde38157d8e8809228871fb48037706ddaaebd31ecebe3dae0516539509bfaea18dc1fc3c7f29620f3214db5d70005e1323094aa8f94ac9d64d9d02ff2010178425027145740b40640a43ff24db043a7a2d2b",
3211 "tcId" : 354
3212 },
3213 {
3214 "comment" : "wrong hash in signature",
3215 "message" : "48656c6c6f",
3216 "name" : "RsaSignatureTestVector",
3217 "padding" : "3031300d060960864801650304020105000420185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969",
3218 "result" : "invalid",
3219 "sig" : "171b1a7fa8cf97283809515866708d449f184d675613cbd33e91586f8e238946f860915f0fb6a390bc7cedfcf7d1621f49f3c6f39b7412d75660fbe3c2326c48399b7d41dfceeadabf0cbfc4b7dd756d8bdc38d28e80fb60e743fdf6d81973959d2c6b111fa0d8f3c9c8677c0c8030001b12f3e2c5990822154b1b762162dd7d",
3220 "tcId" : 355
3221 },
3222 {
3223 "comment" : "wrong hash in signature",
3224 "message" : "48656c6c6f",
3225 "name" : "RsaSignatureTestVector",
3226 "padding" : "3041300d0609608648016503040202050004303519fe5ad2c596efe3e276a6f351b8fc0b03db861782490d45f7598ebd0ab5fd5520ed102f38c4a5ec834e98668035fc",
3227 "result" : "invalid",
3228 "sig" : "9810d39416595ad79cf376b41e6e5f94fb89f61ae78bc5a0c710fab15d369dd7f050b035e5c2b8cdfe10d06be739bae08b47afd0b7dd2b226905f3ee718ccd5b5fb5b951558a62d83a2f3ba5dd1990d2d3e05c461e33ccaa1bbc22350c3ca157351a5b88ad3b1f524fc5cec5c1714a8ab3ef709e462434a6048133846fd1d85b",
3229 "tcId" : 356
3230 },
3231 {
3232 "comment" : "wrong hash in signature",
3233 "message" : "48656c6c6f",
3234 "name" : "RsaSignatureTestVector",
3235 "padding" : "3051300d0609608648016503040203050004403615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315",
3236 "result" : "invalid",
3237 "sig" : "57532194f33bfddba2e848b9342342114e2c6dcffe228cb97b72ac9e26b77cd336a6fa5c8152db0d536c6fb3cc48487a89cfcf42990593fd0dad420b46fa87ea2b9c9962025dcc2b8a6d5a0476408a62d9c276fb5eb8e97e5f1726918fef41c0d12ad420525a803d804002061c3bf355a3c4fee4ce42016cb0e0531d2657726d",
3238 "tcId" : 357
3239 },
3240 {
3241 "comment" : "using PKCS#1 encryption padding",
3242 "message" : "48656c6c6f",
3243 "name" : "RsaSignatureTestVector",
3244 "padding" : "0002ff...00<asn wrapped hash>",
3245 "result" : "invalid",
3246 "sig" : "572ecc55660cc4f8888559092f54e4ee0dc6a57d0722bcba6b608869bc0e86ed53f8d88180b40c006ff10dbf32ba2c6bf3558e22a688f7d68a6d38740b99dd2a2eaa6fc94fe9fa76a0bf775c0eca5751ce7837a3da3db7dc648fb94ed0def4996eb40e168d49417dfd82c86f2c586fc49dfa37a6335b8a76aee84c755610948b",
3247 "tcId" : 358
3248 },
3249 {
3250 "comment" : "using PKCS#1 encryption padding",
3251 "message" : "48656c6c6f",
3252 "name" : "RsaSignatureTestVector",
3253 "padding" : "0002ff...00<hash>",
3254 "result" : "invalid",
3255 "sig" : "849f48195c7ae50b762ff93e350bacdf52e3eef5f86dbec5115d74ccfb2c9a49cc91115f6935b71deb424865666ba070299e17e64c3ce5019e1481ee195cffb4fc1f92f026cea579bbe9f78d7c665dd7f65af7c3221bae50d5c0b50ede25a3993979d167a86db511b9ace4f11c331f892f06e72d17e934da9a83a3c703b3409b",
3256 "tcId" : 359
3257 },
3258 {
3259 "comment" : "invalid PKCS#1 signature padding",
3260 "message" : "48656c6c6f",
3261 "name" : "RsaSignatureTestVector",
3262 "padding" : "0001ff...ee00",
3263 "result" : "invalid",
3264 "sig" : "29b9b831e6694768910397fbe53e0a6868f75e3910d600e3421349bc4321d93067c78f6294b00e52e9c2fafdef67e0a460c3d76e6196fec6aab5c4964a4782c5da021466908d106193ec1b6b0bae4c9a5e3fcc4a355565c1dcfb76c489b4c3ad11b6f2182188470edf748eaf81646fcc164c60c1a55e9334076d8b5ce3d09808",
3265 "tcId" : 360
3266 },
3267 {
3268 "comment" : "PKCS#1 padding too short",
3269 "message" : "48656c6c6f",
3270 "name" : "RsaSignatureTestVector",
3271 "padding" : "000001ff...",
3272 "result" : "invalid",
3273 "sig" : "583dc8ac657ac9d55c74b6505f1a7a4b2225c038f36cc66d76a7eb8c818195b138e8bb2b26ac5a01ce32aa3f590815f0ecdf693877bdb12c5dd55b947b91f83d66639874ca263d1227dd0b6531e3eedf0b1e87a92b8db4be7c3c40d70865f56c8e0b6cf6607d47ed44acff9c4360d65f847f4ae947a13e4a56dff1d11503bc9b",
3274 "tcId" : 361
3275 },
3276 {
3277 "comment" : "invalid length",
3278 "message" : "48656c6c6f",
3279 "name" : "RsaSignatureTestVector",
3280 "padding" : "2 bytes too long",
3281 "result" : "invalid",
3282 "sig" : "9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170000",
3283 "tcId" : 362
3284 }
3285 ]
3286 }
3287 ]
3288 }
+0
-244
t/wycheproof.t less more
0 # rebuild:
1 # rm -f src/liballinone.a && touch CryptX.xs && make && perl -Mblib t/wycheproof.t
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7
8 plan skip_all => "No JSON::* module installed" unless eval { require JSON::PP } || eval { require JSON::XS } || eval { require Cpanel::JSON::XS };
9 plan tests => 1298;
10
11 use CryptX;
12 use Crypt::Misc 'read_rawfile';
13 use Crypt::Digest 'digest_data';
14
15 if (1) {
16 use Crypt::AuthEnc::GCM qw(gcm_encrypt_authenticate gcm_decrypt_verify);
17
18 my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/aes_gcm_test.json';
19 for my $g (@{$tests->{testGroups}}) {
20 my $type = $g->{type};
21 for my $t (@{$g->{tests}}) {
22 my $tcId = $t->{tcId}; # 1
23 my $comment = $t->{comment}; # ""
24 my $result = $t->{result}; # "valid"
25 my $aad = pack "H*", $t->{aad}; # "6578616d706c65"
26 my $ct = pack "H*", $t->{ct}; # "5d349ead175ef6b1def6fd"
27 my $iv = pack "H*", $t->{iv}; # "752abad3e0afb5f434dc4310"
28 my $key = pack "H*", $t->{key}; # "ee8e1ed9ff2540ae8f2ba9f50bc2f27c"
29 my $msg = pack "H*", $t->{msg}; # "48656c6c6f20776f726c64"
30 my $tag = pack "H*", $t->{tag}; # "4fbcdeb7e4793f4a1d7e4faa70100af1"
31 # do the test
32 my ($ct2, $tag2) = eval { gcm_encrypt_authenticate('AES', $key, $iv, $aad, $msg) };
33 my $pt2 = eval { gcm_decrypt_verify('AES', $key, $iv, $aad, $ct, $tag) };
34 my $testname = "type=$type tcId=$tcId comment='$comment' expected-result=$result";
35 if ($result eq 'valid') {
36 is(unpack("H*", $ct2), $t->{ct}, "$testname CT-v");
37 is(unpack("H*", $tag2), $t->{tag}, "$testname TAG-v");
38 is(unpack("H*", $pt2), $t->{msg}, "$testname PT-v");
39 }
40 elsif ($result eq 'invalid') {
41 #isnt(unpack("H*", $ct2), $t->{ct}, "$testname CT-i");
42 #isnt(unpack("H*", $tag2), $t->{tag}, "$testname TAG-i");
43 is($pt2, undef, "$testname PT-i");
44 }
45 else {
46 ok(0, "UNEXPECTED result=$result");
47 }
48 }
49 }
50 }
51
52 if (1) {
53 use Crypt::PK::RSA;
54
55 my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/rsa_signature_test.json';
56 for my $g (@{$tests->{testGroups}}) {
57 my $type = $g->{type};
58 my $keyDer = pack "H*", $g->{keyDer};
59 my $keyPem = $g->{keyPem};
60 my $sha = $g->{sha};
61 $sha =~ s/-//g; # SHA-1 >> SHA1
62 ok(Crypt::PK::RSA->new( \$keyDer ), "Crypt::PK::RSA->new + DER type: $type/$sha");
63 ok(Crypt::PK::RSA->new( \$keyPem ), "Crypt::PK::RSA->new + PEM type: $type/$sha");
64 for my $t (@{$g->{tests}}) {
65 my $tcId = $t->{tcId};
66 my $comment = $t->{comment};
67 my $result = $t->{result};
68 my $message = pack "H*", $t->{message};
69 my $sig = pack "H*", $t->{sig};
70 # do the test
71 my $testname = "type=$type/$sha tcId=$tcId comment='$comment' expected-result=$result";
72 my $pk = Crypt::PK::RSA->new( \$keyPem );
73 my $valid = $pk->verify_message($sig, $message, $sha,"v1.5");
74 if ($result eq 'valid' || $result eq 'acceptable') {
75 ok($valid, $testname);
76 }
77 elsif ($result eq 'invalid') {
78 ok(!$valid, $testname);
79 }
80 else {
81 ok(0, "UNEXPECTED result=$result");
82 }
83 }
84 }
85 }
86
87 if (1) {
88 use Crypt::PK::DSA;
89
90 my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/dsa_test.json';
91 for my $g (@{$tests->{testGroups}}) {
92 my $type = $g->{type}; # "DSAVer"
93 my $keyDer = pack "H*", $g->{keyDer};
94 my $keyPem = $g->{keyPem};
95 my $sha = $g->{sha}; # "SHA-1"
96 $sha =~ s/-//g; # SHA-1 >> SHA1
97 ok(Crypt::PK::DSA->new( \$keyDer ), "Crypt::PK::DSA->new + DER type=$type/$sha");
98 ok(Crypt::PK::DSA->new( \$keyPem ), "Crypt::PK::DSA->new + PEM type=$type/$sha");
99 for my $t (@{$g->{tests}}) {
100 my $tcId = $t->{tcId};
101 my $comment = $t->{comment};
102 my $result = $t->{result};
103 my $message = pack "H*", $t->{message};
104 my $sig = pack "H*", $t->{sig};
105 # skip unsupported tests:
106 next if $tcId==12 && $result eq 'acceptable' && $comment eq "Legacy:ASN encoding of s misses leading 0";
107 next if $tcId==13 && $result eq 'acceptable' && $comment eq "BER:long form encoding of length";
108 next if $tcId==14 && $result eq 'acceptable' && $comment eq "BER:long form encoding of length";
109 next if $tcId==15 && $result eq 'acceptable' && $comment eq "BER:long form encoding of length";
110 next if $tcId==16 && $result eq 'acceptable' && $comment eq "BER:length contains leading 0";
111 next if $tcId==17 && $result eq 'acceptable' && $comment eq "BER:length contains leading 0";
112 next if $tcId==18 && $result eq 'acceptable' && $comment eq "BER:length contains leading 0";
113 next if $tcId==19 && $result eq 'acceptable' && $comment eq "BER:indefinite length";
114 next if $tcId==20 && $result eq 'acceptable' && $comment eq "BER:prepending 0's to integer";
115 next if $tcId==21 && $result eq 'acceptable' && $comment eq "BER:prepending 0's to integer";
116 # do the test
117 my $testname = "type=$type/$sha tcId=$tcId comment='$comment' expected-result=$result";
118 my $pk = Crypt::PK::DSA->new( \$keyPem );
119 my $hash = digest_data($sha, $message);
120 my $valid_h = $pk->verify_hash($sig, $hash);
121 my $valid = $pk->verify_message($sig, $message, $sha);
122 if ($result eq 'valid' || $result eq 'acceptable') {
123 ok($valid, $testname);
124 }
125 elsif ($result eq 'invalid') {
126 ok(!$valid, $testname);
127 }
128 else {
129 ok(0, "UNEXPECTED result=$result");
130 }
131 }
132 }
133 }
134
135 if (1) {
136 use Crypt::PK::ECC;
137
138 my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/ecdsa_test.json';
139 for my $g (@{$tests->{testGroups}}) {
140 my $type = $g->{type};
141 my $keyDer = pack "H*", $g->{keyDer};
142 my $keyPem = $g->{keyPem};
143 my $sha = $g->{sha};
144 $sha =~ s/-//g; # SHA-1 >> SHA1
145 ok(Crypt::PK::ECC->new( \$keyDer ), "Crypt::PK::ECC->new + DER type=$type/$sha");
146 ok(Crypt::PK::ECC->new( \$keyPem ), "Crypt::PK::ECC->new + PEM type=$type/$sha");
147 for my $t (@{$g->{tests}}) {
148 my $tcId = $t->{tcId};
149 my $comment = $t->{comment};
150 my $result = $t->{result};
151 my $message = pack "H*", $t->{message};
152 my $sig = pack "H*", $t->{sig};
153 # skip unsupported tests:
154 next if $tcId==9 && $result eq 'acceptable' && $comment eq "BER:long form encoding of length";
155 next if $tcId==10 && $result eq 'acceptable' && $comment eq "BER:long form encoding of length";
156 next if $tcId==12 && $result eq 'acceptable' && $comment eq "BER:length contains leading 0";
157 next if $tcId==13 && $result eq 'acceptable' && $comment eq "BER:length contains leading 0";
158 next if $tcId==14 && $result eq 'acceptable' && $comment eq "BER:indefinite length";
159 next if $tcId==15 && $result eq 'acceptable' && $comment eq "BER:prepending 0's to integer";
160 next if $tcId==16 && $result eq 'acceptable' && $comment eq "BER:prepending 0's to integer";
161 # do the test
162 my $testname = "type=$type/$sha tcId=$tcId comment='$comment' expected-result=$result";
163 my $pk = Crypt::PK::ECC->new( \$keyPem );
164 my $valid = $pk->verify_message($sig, $message, $sha);
165 if ($result eq 'valid' || $result eq 'acceptable') {
166 ok($valid, "$testname verify_message=$valid");
167 }
168 elsif ($result eq 'invalid') {
169 ok(!$valid, "$testname verify_message=$valid");
170 }
171 else {
172 ok(0, "UNEXPECTED result=$result");
173 }
174 }
175 }
176 }
177
178 if (1) {
179 use Crypt::PK::ECC;
180
181 my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/ecdsa_webcrypto_test.json';
182 for my $g (@{$tests->{testGroups}}) {
183 my $type = $g->{type};
184 my $keyDer = pack "H*", $g->{keyDer};
185 my $keyPem = $g->{keyPem};
186 my $sha = $g->{sha};
187 my $jwk = $g->{jwk};
188 $sha =~ s/-//g; # SHA-1 >> SHA1
189 ok(Crypt::PK::ECC->new( \$keyDer ), "Crypt::PK::ECC->new + DER type=$type/$sha");
190 ok(Crypt::PK::ECC->new( \$keyPem ), "Crypt::PK::ECC->new + PEM type=$type/$sha");
191 ok(Crypt::PK::ECC->new( $jwk ), "Crypt::PK::ECC->new + JWK type=$type/$sha");
192 for my $t (@{$g->{tests}}) {
193 my $tcId = $t->{tcId};
194 my $comment = $t->{comment};
195 my $result = $t->{result};
196 my $message = pack "H*", $t->{message};
197 my $sig = pack "H*", $t->{sig};
198 # do the test
199 my $testname = "type=$type/$sha tcId=$tcId comment='$comment' expected-result=$result";
200 my $pk = Crypt::PK::ECC->new( \$keyPem );
201 my $valid = $pk->verify_message_rfc7518($sig, $message, $sha);
202 if ($result eq 'valid' || $result eq 'acceptable') {
203 ok($valid, "$testname verify_message=$valid");
204 }
205 elsif ($result eq 'invalid') {
206 ok(!$valid, "$testname verify_message=$valid");
207 }
208 else {
209 ok(0, "UNEXPECTED result=$result");
210 }
211 }
212 }
213 }
214
215 if (1) {
216 use Crypt::PK::ECC;
217
218 my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/ecdh_webcrypto_test.json';
219 for my $g (@{$tests->{testGroups}}) {
220 my $type = $g->{type};
221 for my $t (@{$g->{tests}}) {
222 my $tcId = $t->{tcId};
223 my $comment = $t->{comment};
224 my $name = $t->{name};
225 my $result = $t->{result};
226 my $shared = pack "H*", $t->{shared};
227 # do the test
228 my $testname = "type=$type/$name tcId=$tcId comment='$comment' expected-result=$result";
229 my $pub = Crypt::PK::ECC->new( $t->{public} );
230 my $pri = Crypt::PK::ECC->new( $t->{private} );
231 my $shared_hex = unpack "H*", $pri->shared_secret($pub);
232 if ($result eq 'valid' || $result eq 'acceptable') {
233 is($shared_hex, $t->{shared}, $testname);
234 }
235 elsif ($result eq 'invalid') {
236 isnt($shared_hex, $t->{shared}, $testname);
237 }
238 else {
239 ok(0, "UNEXPECTED result=$result");
240 }
241 }
242 }
243 }