diff --git a/Changes b/Changes index 452e491..c20e3a5 100644 --- a/Changes +++ b/Changes @@ -1,4 +1,14 @@ Changes for CryptX + +0.062 2018-10-30 + - bundled libtommath update branch:develop (commit:8b9f98ba 2018-09-23) + stdint.h workaround + - bundled libtomcrypt update branch:develop (commit:f413335b 2018-10-29) + - fix #45 doc only - sign_message_rfc7518 / sign_message_rfc7518 + - fix $46 tests only - t/mbi_ltm_bigintpm.t etc. started to fail with latest Math::BigInt + - fix #47 gcm_decrypt_verify + chacha20poly1305_decrypt_verify don't verify the tag - SERIOUS SECURITY BUG! + - improved CBC/ECB padding (using libtomcrypt's functions: padding_depad + padding_pad) + - enable pkcs#8 encrypted RSA keys (supported by the latest libtomcrypt) + - exclude wycheproof tests (too big) from dist tarball (via MANIFEST.SKIP) 0.061 2018-06-07 - bundled libtommath update (+stdint.h workaround) diff --git a/CryptX.xs b/CryptX.xs index 53db25a..2495a3b 100644 --- a/CryptX.xs +++ b/CryptX.xs @@ -281,7 +281,7 @@ } } -int _ecc_set_dp_from_SV(ecc_key *key, SV *curve) +int _ecc_set_curve_from_SV(ecc_key *key, SV *curve) { dTHX; /* fetch context */ HV *hc, *h; @@ -317,8 +317,8 @@ /* string - curve name */ const ltc_ecc_curve *cu; ptr_crv = SvPV(sv_crv, len_crv); - if (ecc_get_curve(ptr_crv, &cu) != CRYPT_OK) croak("FATAL: ecparams: unknown curve '%s'", ptr_crv); - return ecc_set_dp(cu, key); + if (ecc_find_curve(ptr_crv, &cu) != CRYPT_OK) croak("FATAL: ecparams: unknown curve '%s'", ptr_crv); + return ecc_set_curve(cu, key); } else { /* hashref */ @@ -353,7 +353,7 @@ cu.Gy = SvPV_nolen(*sv_Gy); cu.cofactor = (unsigned long)SvUV(*sv_cofactor); - if ((err = ecc_set_dp(&cu, key)) != CRYPT_OK) return err; + if ((err = ecc_set_curve(&cu, key)) != CRYPT_OK) return err; if (key->dp.oidlen == 0) _ecc_oid_lookup(key); return CRYPT_OK; } diff --git a/MANIFEST b/MANIFEST index 967df7d..365391b 100644 --- a/MANIFEST +++ b/MANIFEST @@ -357,10 +357,15 @@ src/ltc/misc/mem_neq.c src/ltc/misc/padding/padding_depad.c src/ltc/misc/padding/padding_pad.c -src/ltc/misc/pk_get_oid.c -src/ltc/misc/pk_oid_str.c +src/ltc/misc/pbes/pbes.c +src/ltc/misc/pbes/pbes1.c +src/ltc/misc/pbes/pbes2.c +src/ltc/misc/pkcs12/pkcs12_kdf.c +src/ltc/misc/pkcs12/pkcs12_utf8_to_utf16.c src/ltc/misc/pkcs5/pkcs_5_1.c src/ltc/misc/pkcs5/pkcs_5_2.c +src/ltc/misc/ssh/ssh_decode_sequence_multi.c +src/ltc/misc/ssh/ssh_encode_sequence_multi.c src/ltc/misc/zeromem.c src/ltc/modes/cbc/cbc_decrypt.c src/ltc/modes/cbc/cbc_done.c @@ -448,6 +453,10 @@ src/ltc/pk/asn1/der/utf8/der_decode_utf8_string.c src/ltc/pk/asn1/der/utf8/der_encode_utf8_string.c src/ltc/pk/asn1/der/utf8/der_length_utf8_string.c +src/ltc/pk/asn1/oid/pk_get_oid.c +src/ltc/pk/asn1/oid/pk_oid_cmp.c +src/ltc/pk/asn1/oid/pk_oid_str.c +src/ltc/pk/asn1/pkcs8/pkcs8_decode_flexi.c src/ltc/pk/asn1/x509/x509_decode_subject_public_key_info.c src/ltc/pk/asn1/x509/x509_encode_subject_public_key_info.c src/ltc/pk/dh/dh.c @@ -481,8 +490,8 @@ src/ltc/pk/ecc/ecc_encrypt_key.c src/ltc/pk/ecc/ecc_export.c src/ltc/pk/ecc/ecc_export_openssl.c +src/ltc/pk/ecc/ecc_find_curve.c src/ltc/pk/ecc/ecc_free.c -src/ltc/pk/ecc/ecc_get_curve.c src/ltc/pk/ecc/ecc_get_key.c src/ltc/pk/ecc/ecc_get_oid_str.c src/ltc/pk/ecc/ecc_get_size.c @@ -491,12 +500,14 @@ src/ltc/pk/ecc/ecc_import_pkcs8.c src/ltc/pk/ecc/ecc_import_x509.c src/ltc/pk/ecc/ecc_make_key.c -src/ltc/pk/ecc/ecc_set_dp.c -src/ltc/pk/ecc/ecc_set_dp_internal.c +src/ltc/pk/ecc/ecc_recover_key.c +src/ltc/pk/ecc/ecc_set_curve.c +src/ltc/pk/ecc/ecc_set_curve_internal.c src/ltc/pk/ecc/ecc_set_key.c src/ltc/pk/ecc/ecc_shared_secret.c src/ltc/pk/ecc/ecc_sign_hash.c src/ltc/pk/ecc/ecc_sizes.c +src/ltc/pk/ecc/ecc_ssh_ecdsa_encode_name.c src/ltc/pk/ecc/ecc_verify_hash.c src/ltc/pk/ecc/ltc_ecc_export_point.c src/ltc/pk/ecc/ltc_ecc_import_point.c @@ -546,18 +557,25 @@ src/ltc/stream/chacha/chacha_ivctr32.c src/ltc/stream/chacha/chacha_ivctr64.c src/ltc/stream/chacha/chacha_keystream.c +src/ltc/stream/chacha/chacha_memory.c src/ltc/stream/chacha/chacha_setup.c src/ltc/stream/rabbit/rabbit.c +src/ltc/stream/rabbit/rabbit_memory.c src/ltc/stream/rc4/rc4_stream.c +src/ltc/stream/rc4/rc4_stream_memory.c src/ltc/stream/salsa20/salsa20_crypt.c src/ltc/stream/salsa20/salsa20_done.c src/ltc/stream/salsa20/salsa20_ivctr64.c src/ltc/stream/salsa20/salsa20_keystream.c +src/ltc/stream/salsa20/salsa20_memory.c src/ltc/stream/salsa20/salsa20_setup.c +src/ltc/stream/salsa20/xsalsa20_memory.c src/ltc/stream/salsa20/xsalsa20_setup.c src/ltc/stream/sober128/sober128_stream.c +src/ltc/stream/sober128/sober128_stream_memory.c src/ltc/stream/sober128/sober128tab.c src/ltc/stream/sosemanuk/sosemanuk.c +src/ltc/stream/sosemanuk/sosemanuk_memory.c src/ltm/bn_error.c src/ltm/bn_fast_mp_invmod.c src/ltm/bn_fast_mp_montgomery_reduce.c @@ -577,6 +595,7 @@ src/ltm/bn_mp_cmp_d.c src/ltm/bn_mp_cmp_mag.c src/ltm/bn_mp_cnt_lsb.c +src/ltm/bn_mp_complement.c src/ltm/bn_mp_copy.c src/ltm/bn_mp_count_bits.c src/ltm/bn_mp_div.c @@ -664,6 +683,10 @@ src/ltm/bn_mp_sub.c src/ltm/bn_mp_sub_d.c src/ltm/bn_mp_submod.c +src/ltm/bn_mp_tc_and.c +src/ltm/bn_mp_tc_div_2d.c +src/ltm/bn_mp_tc_or.c +src/ltm/bn_mp_tc_xor.c src/ltm/bn_mp_to_signed_bin.c src/ltm/bn_mp_to_signed_bin_n.c src/ltm/bn_mp_to_unsigned_bin.c @@ -994,11 +1017,4 @@ t/prng_sober128.t t/prng_yarrow.t t/sshkey.t -t/wycheproof.t -t/wycheproof/aes_gcm_test.json -t/wycheproof/dsa_test.json -t/wycheproof/ecdh_webcrypto_test.json -t/wycheproof/ecdsa_test.json -t/wycheproof/ecdsa_webcrypto_test.json -t/wycheproof/rsa_signature_test.json typemap diff --git a/META.json b/META.json index 2eefb32..fff96d1 100644 --- a/META.json +++ b/META.json @@ -45,6 +45,6 @@ "url" : "https://github.com/DCIT/perl-CryptX" } }, - "version" : "0.061", + "version" : "0.062", "x_serialization_backend" : "JSON::PP version 2.94" } diff --git a/META.yml b/META.yml index bb093d1..9239045 100644 --- a/META.yml +++ b/META.yml @@ -22,5 +22,5 @@ resources: bugtracker: https://github.com/DCIT/perl-CryptX/issues repository: https://github.com/DCIT/perl-CryptX -version: '0.061' +version: '0.062' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff --git a/Makefile.PL b/Makefile.PL index 891df7e..af0bbe5 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -101,6 +101,8 @@ } if $^O eq 'MSWin32' && $Config{cc} =~ /gcc/; $extra_targets .= q{ +update-libtom: + $(NOECHO) perl src/update-libtom.pl versionsync: $(NOECHO) perl _generators/version_patch.pl sync versioninc: diff --git a/inc/CryptX_Mode_CBC.xs.inc b/inc/CryptX_Mode_CBC.xs.inc index c7cbe0a..c12f1fe 100644 --- a/inc/CryptX_Mode_CBC.xs.inc +++ b/inc/CryptX_Mode_CBC.xs.inc @@ -211,45 +211,48 @@ finish(Crypt::Mode::CBC self) CODE: { - unsigned char tmp_block[MAXBLOCKSIZE], ch; - int i, j, rv, blen = (&self->state)->blocklen; + unsigned char tmp_block[MAXBLOCKSIZE]; + int rv; + unsigned long blen = (&self->state)->blocklen; + unsigned long padmode; if (self->direction == 1) { - if (self->padlen<0 || self->padlen>=blen) croak("FATAL: invalid padlen"); - if (self->padding_mode == 1) { /* pkcs5|7 padding */ - i = blen - self->padlen; - if (i == 0) i = blen; - for(j=self->padlen; jpad[j] = (unsigned char)i; + if (self->padlen < 0 || self->padlen >= (int)blen) croak("FATAL: invalid padlen"); + if (self->padding_mode != 0) { + if (self->padding_mode == 1) { padmode = LTC_PAD_PKCS7 | (&self->state)->blocklen; } + else if (self->padding_mode == 2) { padmode = LTC_PAD_ONE_AND_ZERO | (&self->state)->blocklen; } + else if (self->padding_mode == 3) { padmode = LTC_PAD_ANSI_X923 | (&self->state)->blocklen; } + else if (self->padding_mode == 4) { padmode = LTC_PAD_ZERO | (&self->state)->blocklen; } + else if (self->padding_mode == 5) { padmode = LTC_PAD_ZERO_ALWAYS | (&self->state)->blocklen; } + else { croak("FATAL: unknown padding"); } + blen = sizeof(self->pad); + rv = padding_pad(self->pad, self->padlen, &blen, padmode); + if (rv != CRYPT_OK) croak("FATAL: padding_pad failed: %s", error_to_string(rv)); rv = cbc_encrypt(self->pad, tmp_block, blen, &self->state); if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv)); } - else if (self->padding_mode == 2) { /* oneandzeroes padding */ - self->pad[self->padlen] = 0x80; - for(j=self->padlen+1; jpad[j] = 0; - rv = cbc_encrypt(self->pad, tmp_block, blen, &self->state); - if (rv != CRYPT_OK) croak("FATAL: cbc_encrypt failed: %s", error_to_string(rv)); - } else { - if (self->padlen>0) croak("FATAL: cbc_encrypt, input data length not multiple of %d", blen); + if (self->padlen > 0) croak("FATAL: cbc_encrypt, input data length not multiple of %d", (int)blen); blen = 0; } } else if (self->direction == -1) { if (self->padlen > 0) { - if (self->padlen != blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", blen, self->padlen); + if (self->padlen != (int)blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", (int)blen, self->padlen); rv = cbc_decrypt(self->pad, tmp_block, blen, &self->state); if (rv != CRYPT_OK) croak("FATAL: cbc_decrypt failed: %s", error_to_string(rv)); - if (self->padding_mode == 0) { /* no padding */ - /* we already have blen */ - } - else if (self->padding_mode == 1) { /* pkcs5|7 padding */ - ch = tmp_block[blen-1]; - blen = blen - (ch > blen ? blen : ch); - } - else if (self->padding_mode == 2) { /* oneandzeroes padding */ - while ((unsigned char)tmp_block[blen - 1] == 0x00) blen--; - if ((unsigned char)tmp_block[blen - 1] == 0x80) blen--; - if (blen < 0) blen = 0; + if (self->padding_mode != 0) { + if (self->padding_mode == 1) { padmode = LTC_PAD_PKCS7 | (&self->state)->blocklen; } + else if (self->padding_mode == 2) { padmode = LTC_PAD_ONE_AND_ZERO | (&self->state)->blocklen; } + else if (self->padding_mode == 3) { padmode = LTC_PAD_ANSI_X923 | (&self->state)->blocklen; } + else if (self->padding_mode == 4) { padmode = LTC_PAD_ZERO | (&self->state)->blocklen; } + else if (self->padding_mode == 5) { padmode = LTC_PAD_ZERO_ALWAYS | (&self->state)->blocklen; } + else { croak("FATAL: unknown padding"); } + rv = padding_depad(tmp_block, &blen, padmode); + if (rv != CRYPT_OK) croak("FATAL: padding_depad failed: %s", error_to_string(rv)); + } + else { + /* "no padding" == there is no need to do anything */ } } else { @@ -257,7 +260,7 @@ } } else { - XSRETURN_UNDEF; + croak("FATAL: invalid direction"); } self->direction = 0; diff --git a/inc/CryptX_Mode_ECB.xs.inc b/inc/CryptX_Mode_ECB.xs.inc index 8d34adb..cdb100c 100644 --- a/inc/CryptX_Mode_ECB.xs.inc +++ b/inc/CryptX_Mode_ECB.xs.inc @@ -204,45 +204,48 @@ finish(Crypt::Mode::ECB self) CODE: { - unsigned char tmp_block[MAXBLOCKSIZE], ch; - int i, j, rv, blen = (&self->state)->blocklen; + unsigned char tmp_block[MAXBLOCKSIZE]; + int rv; + unsigned long blen = (&self->state)->blocklen; + unsigned long padmode; if (self->direction == 1) { - if (self->padlen<0 || self->padlen>=blen) croak("FATAL: invalid padlen"); - if (self->padding_mode == 1) { /* pkcs5|7 padding */ - i = blen - self->padlen; - if (i == 0) i = blen; - for(j=self->padlen; jpad[j] = (unsigned char)i; + if (self->padlen < 0 || self->padlen >= (int)blen) croak("FATAL: invalid padlen"); + if (self->padding_mode != 0) { + if (self->padding_mode == 1) { padmode = LTC_PAD_PKCS7 | (&self->state)->blocklen; } + else if (self->padding_mode == 2) { padmode = LTC_PAD_ONE_AND_ZERO | (&self->state)->blocklen; } + else if (self->padding_mode == 3) { padmode = LTC_PAD_ANSI_X923 | (&self->state)->blocklen; } + else if (self->padding_mode == 4) { padmode = LTC_PAD_ZERO | (&self->state)->blocklen; } + else if (self->padding_mode == 5) { padmode = LTC_PAD_ZERO_ALWAYS | (&self->state)->blocklen; } + else { croak("FATAL: unknown padding"); } + blen = sizeof(self->pad); + rv = padding_pad(self->pad, self->padlen, &blen, padmode); + if (rv != CRYPT_OK) croak("FATAL: padding_pad failed: %s", error_to_string(rv)); rv = ecb_encrypt(self->pad, tmp_block, blen, &self->state); if (rv != CRYPT_OK) croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv)); } - else if (self->padding_mode == 2) { /* oneandzeroes padding */ - self->pad[self->padlen] = 0x80; - for(j=self->padlen+1; jpad[j] = 0; - rv = ecb_encrypt(self->pad, tmp_block, blen, &self->state); - if (rv != CRYPT_OK) croak("FATAL: ecb_encrypt failed: %s", error_to_string(rv)); - } else { - if (self->padlen>0) croak("FATAL: ecb_encrypt, input data length not multiple of %d", blen); + if (self->padlen > 0) croak("FATAL: ecb_encrypt, input data length not multiple of %d", (int)blen); blen = 0; } } else if (self->direction == -1) { if (self->padlen > 0) { - if (self->padlen != blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", blen, self->padlen); + if (self->padlen != (int)blen) croak("FATAL: cipher text length has to be multiple of %d (%d)", (int)blen, self->padlen); rv = ecb_decrypt(self->pad, tmp_block, blen, &self->state); if (rv != CRYPT_OK) croak("FATAL: ecb_decrypt failed: %s", error_to_string(rv)); - if (self->padding_mode == 0) { /* no padding */ - /* we already have blen */ - } - else if (self->padding_mode == 1) { /* pkcs5|7 padding */ - ch = tmp_block[blen-1]; - blen = blen - (ch > blen ? blen : ch); - } - else if (self->padding_mode == 2) { /* oneandzeroes padding */ - while ((unsigned char)tmp_block[blen - 1] == 0x00) blen--; - if ((unsigned char)tmp_block[blen - 1] == 0x80) blen--; - if (blen < 0) blen = 0; + if (self->padding_mode != 0) { + if (self->padding_mode == 1) { padmode = LTC_PAD_PKCS7 | (&self->state)->blocklen; } + else if (self->padding_mode == 2) { padmode = LTC_PAD_ONE_AND_ZERO | (&self->state)->blocklen; } + else if (self->padding_mode == 3) { padmode = LTC_PAD_ANSI_X923 | (&self->state)->blocklen; } + else if (self->padding_mode == 4) { padmode = LTC_PAD_ZERO | (&self->state)->blocklen; } + else if (self->padding_mode == 5) { padmode = LTC_PAD_ZERO_ALWAYS | (&self->state)->blocklen; } + else { croak("FATAL: unknown padding"); } + rv = padding_depad(tmp_block, &blen, padmode); + if (rv != CRYPT_OK) croak("FATAL: padding_depad failed: %s", error_to_string(rv)); + } + else { + /* "no padding" == there is no need to do anything */ } } else { @@ -250,7 +253,7 @@ } } else { - XSRETURN_UNDEF; + croak("FATAL: invalid direction"); } self->direction = 0; diff --git a/inc/CryptX_PK_ECC.xs.inc b/inc/CryptX_PK_ECC.xs.inc index 03f0891..26c752a 100644 --- a/inc/CryptX_PK_ECC.xs.inc +++ b/inc/CryptX_PK_ECC.xs.inc @@ -30,8 +30,8 @@ { int rv; /* setup dp structure */ - rv = _ecc_set_dp_from_SV(&self->key, curve); /* croaks on error */ - if (rv != CRYPT_OK) croak("FATAL: ecc_set_dp failed: %s", error_to_string(rv)); + rv = _ecc_set_curve_from_SV(&self->key, curve); /* croaks on error */ + if (rv != CRYPT_OK) croak("FATAL: ecc_set_curve failed: %s", error_to_string(rv)); /* gen the key */ rv = ecc_generate_key(&self->pstate, self->pindex, &self->key); if (rv != CRYPT_OK) croak("FATAL: ecc_generate_key failed: %s", error_to_string(rv)); @@ -112,8 +112,8 @@ data = (unsigned char *)SvPVbyte(key_data, data_len); if (self->key.type != -1) { ecc_free(&self->key); self->key.type = -1; } /* setup dp structure */ - rv = _ecc_set_dp_from_SV(&self->key, curve); /* croaks on error */ - if (rv != CRYPT_OK) croak("FATAL: ecc_set_dp failed: %s", error_to_string(rv)); + rv = _ecc_set_curve_from_SV(&self->key, curve); /* croaks on error */ + if (rv != CRYPT_OK) croak("FATAL: ecc_set_curve failed: %s", error_to_string(rv)); /* import key */ type = (data_len == (STRLEN)ecc_get_size(&self->key)) ? PK_PRIVATE : PK_PUBLIC; rv = ecc_set_key(data, (unsigned long)data_len, type, &self->key); diff --git a/lib/Crypt/AuthEnc/CCM.pm b/lib/Crypt/AuthEnc/CCM.pm index 117016d..ef18321 100644 --- a/lib/Crypt/AuthEnc/CCM.pm +++ b/lib/Crypt/AuthEnc/CCM.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw( ccm_encrypt_authenticate ccm_decrypt_verify )] ); diff --git a/lib/Crypt/AuthEnc/ChaCha20Poly1305.pm b/lib/Crypt/AuthEnc/ChaCha20Poly1305.pm index 7a303cc..b575235 100644 --- a/lib/Crypt/AuthEnc/ChaCha20Poly1305.pm +++ b/lib/Crypt/AuthEnc/ChaCha20Poly1305.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw( chacha20poly1305_encrypt_authenticate chacha20poly1305_decrypt_verify )] ); diff --git a/lib/Crypt/AuthEnc/EAX.pm b/lib/Crypt/AuthEnc/EAX.pm index 7184a65..16658a5 100644 --- a/lib/Crypt/AuthEnc/EAX.pm +++ b/lib/Crypt/AuthEnc/EAX.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw( eax_encrypt_authenticate eax_decrypt_verify )] ); diff --git a/lib/Crypt/AuthEnc/GCM.pm b/lib/Crypt/AuthEnc/GCM.pm index 0fec7c9..407bdc9 100644 --- a/lib/Crypt/AuthEnc/GCM.pm +++ b/lib/Crypt/AuthEnc/GCM.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw( gcm_encrypt_authenticate gcm_decrypt_verify )] ); diff --git a/lib/Crypt/AuthEnc/OCB.pm b/lib/Crypt/AuthEnc/OCB.pm index b8397fb..3e74e6d 100644 --- a/lib/Crypt/AuthEnc/OCB.pm +++ b/lib/Crypt/AuthEnc/OCB.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw( ocb_encrypt_authenticate ocb_decrypt_verify )] ); diff --git a/lib/Crypt/AuthEnc.pm b/lib/Crypt/AuthEnc.pm index 7c3cc24..980195c 100644 --- a/lib/Crypt/AuthEnc.pm +++ b/lib/Crypt/AuthEnc.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; ### not used diff --git a/lib/Crypt/Checksum/Adler32.pm b/lib/Crypt/Checksum/Adler32.pm index 985ac4c..690ac9d 100644 --- a/lib/Crypt/Checksum/Adler32.pm +++ b/lib/Crypt/Checksum/Adler32.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Checksum Exporter); our %EXPORT_TAGS = ( all => [qw( adler32_data adler32_data_hex adler32_data_int adler32_file adler32_file_hex adler32_file_int )] ); diff --git a/lib/Crypt/Checksum/CRC32.pm b/lib/Crypt/Checksum/CRC32.pm index ffba040..0059710 100644 --- a/lib/Crypt/Checksum/CRC32.pm +++ b/lib/Crypt/Checksum/CRC32.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Checksum Exporter); our %EXPORT_TAGS = ( all => [qw( crc32_data crc32_data_hex crc32_data_int crc32_file crc32_file_hex crc32_file_int )] ); diff --git a/lib/Crypt/Checksum.pm b/lib/Crypt/Checksum.pm index cf66972..61f223c 100644 --- a/lib/Crypt/Checksum.pm +++ b/lib/Crypt/Checksum.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw/ adler32_data adler32_data_hex adler32_data_int adler32_file adler32_file_hex adler32_file_int diff --git a/lib/Crypt/Cipher/AES.pm b/lib/Crypt/Cipher/AES.pm index 39af110..49bb316 100644 --- a/lib/Crypt/Cipher/AES.pm +++ b/lib/Crypt/Cipher/AES.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/Anubis.pm b/lib/Crypt/Cipher/Anubis.pm index 782c925..46a1054 100644 --- a/lib/Crypt/Cipher/Anubis.pm +++ b/lib/Crypt/Cipher/Anubis.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/Blowfish.pm b/lib/Crypt/Cipher/Blowfish.pm index d1aa74f..48e0102 100644 --- a/lib/Crypt/Cipher/Blowfish.pm +++ b/lib/Crypt/Cipher/Blowfish.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/CAST5.pm b/lib/Crypt/Cipher/CAST5.pm index a3d4342..40522f4 100644 --- a/lib/Crypt/Cipher/CAST5.pm +++ b/lib/Crypt/Cipher/CAST5.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/Camellia.pm b/lib/Crypt/Cipher/Camellia.pm index 36cc8cd..d93d2d7 100644 --- a/lib/Crypt/Cipher/Camellia.pm +++ b/lib/Crypt/Cipher/Camellia.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/DES.pm b/lib/Crypt/Cipher/DES.pm index be46f01..1de6383 100644 --- a/lib/Crypt/Cipher/DES.pm +++ b/lib/Crypt/Cipher/DES.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/DES_EDE.pm b/lib/Crypt/Cipher/DES_EDE.pm index c141204..b81db08 100644 --- a/lib/Crypt/Cipher/DES_EDE.pm +++ b/lib/Crypt/Cipher/DES_EDE.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/IDEA.pm b/lib/Crypt/Cipher/IDEA.pm index 3ec3e0c..5d0d1c1 100644 --- a/lib/Crypt/Cipher/IDEA.pm +++ b/lib/Crypt/Cipher/IDEA.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/KASUMI.pm b/lib/Crypt/Cipher/KASUMI.pm index 41c8820..4f81b57 100644 --- a/lib/Crypt/Cipher/KASUMI.pm +++ b/lib/Crypt/Cipher/KASUMI.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/Khazad.pm b/lib/Crypt/Cipher/Khazad.pm index f915b41..16ec06e 100644 --- a/lib/Crypt/Cipher/Khazad.pm +++ b/lib/Crypt/Cipher/Khazad.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/MULTI2.pm b/lib/Crypt/Cipher/MULTI2.pm index 67bbc00..ca2d9f2 100644 --- a/lib/Crypt/Cipher/MULTI2.pm +++ b/lib/Crypt/Cipher/MULTI2.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/Noekeon.pm b/lib/Crypt/Cipher/Noekeon.pm index e8ce83b..08824d9 100644 --- a/lib/Crypt/Cipher/Noekeon.pm +++ b/lib/Crypt/Cipher/Noekeon.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/RC2.pm b/lib/Crypt/Cipher/RC2.pm index 57acf8d..797a081 100644 --- a/lib/Crypt/Cipher/RC2.pm +++ b/lib/Crypt/Cipher/RC2.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/RC5.pm b/lib/Crypt/Cipher/RC5.pm index 4dfc23e..98d0c5d 100644 --- a/lib/Crypt/Cipher/RC5.pm +++ b/lib/Crypt/Cipher/RC5.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/RC6.pm b/lib/Crypt/Cipher/RC6.pm index 737ed0c..94b4320 100644 --- a/lib/Crypt/Cipher/RC6.pm +++ b/lib/Crypt/Cipher/RC6.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/SAFERP.pm b/lib/Crypt/Cipher/SAFERP.pm index 8e616dc..ffec31f 100644 --- a/lib/Crypt/Cipher/SAFERP.pm +++ b/lib/Crypt/Cipher/SAFERP.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/SAFER_K128.pm b/lib/Crypt/Cipher/SAFER_K128.pm index 762910f..37658b7 100644 --- a/lib/Crypt/Cipher/SAFER_K128.pm +++ b/lib/Crypt/Cipher/SAFER_K128.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/SAFER_K64.pm b/lib/Crypt/Cipher/SAFER_K64.pm index 65e6c31..32da925 100644 --- a/lib/Crypt/Cipher/SAFER_K64.pm +++ b/lib/Crypt/Cipher/SAFER_K64.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/SAFER_SK128.pm b/lib/Crypt/Cipher/SAFER_SK128.pm index b2d2629..3a3fbc5 100644 --- a/lib/Crypt/Cipher/SAFER_SK128.pm +++ b/lib/Crypt/Cipher/SAFER_SK128.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/SAFER_SK64.pm b/lib/Crypt/Cipher/SAFER_SK64.pm index db6d69e..5885d44 100644 --- a/lib/Crypt/Cipher/SAFER_SK64.pm +++ b/lib/Crypt/Cipher/SAFER_SK64.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/SEED.pm b/lib/Crypt/Cipher/SEED.pm index 22202d5..36e1b7e 100644 --- a/lib/Crypt/Cipher/SEED.pm +++ b/lib/Crypt/Cipher/SEED.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/Serpent.pm b/lib/Crypt/Cipher/Serpent.pm index d795feb..42f277f 100644 --- a/lib/Crypt/Cipher/Serpent.pm +++ b/lib/Crypt/Cipher/Serpent.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/Skipjack.pm b/lib/Crypt/Cipher/Skipjack.pm index 989a164..cad371c 100644 --- a/lib/Crypt/Cipher/Skipjack.pm +++ b/lib/Crypt/Cipher/Skipjack.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/Twofish.pm b/lib/Crypt/Cipher/Twofish.pm index 96e472d..b8ff178 100644 --- a/lib/Crypt/Cipher/Twofish.pm +++ b/lib/Crypt/Cipher/Twofish.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher/XTEA.pm b/lib/Crypt/Cipher/XTEA.pm index 1e6e793..3b39aa6 100644 --- a/lib/Crypt/Cipher/XTEA.pm +++ b/lib/Crypt/Cipher/XTEA.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Cipher); diff --git a/lib/Crypt/Cipher.pm b/lib/Crypt/Cipher.pm index 2d07760..744cacb 100644 --- a/lib/Crypt/Cipher.pm +++ b/lib/Crypt/Cipher.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use Carp; $Carp::Internal{(__PACKAGE__)}++; diff --git a/lib/Crypt/Digest/BLAKE2b_160.pm b/lib/Crypt/Digest/BLAKE2b_160.pm index a99fe65..83fffa9 100644 --- a/lib/Crypt/Digest/BLAKE2b_160.pm +++ b/lib/Crypt/Digest/BLAKE2b_160.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/BLAKE2b_256.pm b/lib/Crypt/Digest/BLAKE2b_256.pm index d0e620a..5b5504d 100644 --- a/lib/Crypt/Digest/BLAKE2b_256.pm +++ b/lib/Crypt/Digest/BLAKE2b_256.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/BLAKE2b_384.pm b/lib/Crypt/Digest/BLAKE2b_384.pm index ea69f39..5784785 100644 --- a/lib/Crypt/Digest/BLAKE2b_384.pm +++ b/lib/Crypt/Digest/BLAKE2b_384.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/BLAKE2b_512.pm b/lib/Crypt/Digest/BLAKE2b_512.pm index e3a0cbe..e79471e 100644 --- a/lib/Crypt/Digest/BLAKE2b_512.pm +++ b/lib/Crypt/Digest/BLAKE2b_512.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/BLAKE2s_128.pm b/lib/Crypt/Digest/BLAKE2s_128.pm index 52a0cca..343dfe4 100644 --- a/lib/Crypt/Digest/BLAKE2s_128.pm +++ b/lib/Crypt/Digest/BLAKE2s_128.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/BLAKE2s_160.pm b/lib/Crypt/Digest/BLAKE2s_160.pm index c16bffa..482d374 100644 --- a/lib/Crypt/Digest/BLAKE2s_160.pm +++ b/lib/Crypt/Digest/BLAKE2s_160.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/BLAKE2s_224.pm b/lib/Crypt/Digest/BLAKE2s_224.pm index 62b23a7..cf67024 100644 --- a/lib/Crypt/Digest/BLAKE2s_224.pm +++ b/lib/Crypt/Digest/BLAKE2s_224.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/BLAKE2s_256.pm b/lib/Crypt/Digest/BLAKE2s_256.pm index 6fc1d54..76c609d 100644 --- a/lib/Crypt/Digest/BLAKE2s_256.pm +++ b/lib/Crypt/Digest/BLAKE2s_256.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/CHAES.pm b/lib/Crypt/Digest/CHAES.pm index 7e4a184..1e68ae7 100644 --- a/lib/Crypt/Digest/CHAES.pm +++ b/lib/Crypt/Digest/CHAES.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( chaes chaes_hex chaes_b64 chaes_b64u chaes_file chaes_file_hex chaes_file_b64 chaes_file_b64u )] ); diff --git a/lib/Crypt/Digest/Keccak224.pm b/lib/Crypt/Digest/Keccak224.pm index fd98f88..b20d0c3 100644 --- a/lib/Crypt/Digest/Keccak224.pm +++ b/lib/Crypt/Digest/Keccak224.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( keccak224 keccak224_hex keccak224_b64 keccak224_b64u keccak224_file keccak224_file_hex keccak224_file_b64 keccak224_file_b64u )] ); diff --git a/lib/Crypt/Digest/Keccak256.pm b/lib/Crypt/Digest/Keccak256.pm index c64e32f..5d2dbee 100644 --- a/lib/Crypt/Digest/Keccak256.pm +++ b/lib/Crypt/Digest/Keccak256.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( keccak256 keccak256_hex keccak256_b64 keccak256_b64u keccak256_file keccak256_file_hex keccak256_file_b64 keccak256_file_b64u )] ); diff --git a/lib/Crypt/Digest/Keccak384.pm b/lib/Crypt/Digest/Keccak384.pm index 516ba37..863a8e4 100644 --- a/lib/Crypt/Digest/Keccak384.pm +++ b/lib/Crypt/Digest/Keccak384.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( keccak384 keccak384_hex keccak384_b64 keccak384_b64u keccak384_file keccak384_file_hex keccak384_file_b64 keccak384_file_b64u )] ); diff --git a/lib/Crypt/Digest/Keccak512.pm b/lib/Crypt/Digest/Keccak512.pm index f64be76..0a764e9 100644 --- a/lib/Crypt/Digest/Keccak512.pm +++ b/lib/Crypt/Digest/Keccak512.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( keccak512 keccak512_hex keccak512_b64 keccak512_b64u keccak512_file keccak512_file_hex keccak512_file_b64 keccak512_file_b64u )] ); diff --git a/lib/Crypt/Digest/MD2.pm b/lib/Crypt/Digest/MD2.pm index 6922dfd..78a1909 100644 --- a/lib/Crypt/Digest/MD2.pm +++ b/lib/Crypt/Digest/MD2.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( md2 md2_hex md2_b64 md2_b64u md2_file md2_file_hex md2_file_b64 md2_file_b64u )] ); diff --git a/lib/Crypt/Digest/MD4.pm b/lib/Crypt/Digest/MD4.pm index 63defec..ee4b6cd 100644 --- a/lib/Crypt/Digest/MD4.pm +++ b/lib/Crypt/Digest/MD4.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( md4 md4_hex md4_b64 md4_b64u md4_file md4_file_hex md4_file_b64 md4_file_b64u )] ); diff --git a/lib/Crypt/Digest/MD5.pm b/lib/Crypt/Digest/MD5.pm index f6d1a84..702d644 100644 --- a/lib/Crypt/Digest/MD5.pm +++ b/lib/Crypt/Digest/MD5.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( md5 md5_hex md5_b64 md5_b64u md5_file md5_file_hex md5_file_b64 md5_file_b64u )] ); diff --git a/lib/Crypt/Digest/RIPEMD128.pm b/lib/Crypt/Digest/RIPEMD128.pm index 84811a0..02c969e 100644 --- a/lib/Crypt/Digest/RIPEMD128.pm +++ b/lib/Crypt/Digest/RIPEMD128.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( ripemd128 ripemd128_hex ripemd128_b64 ripemd128_b64u ripemd128_file ripemd128_file_hex ripemd128_file_b64 ripemd128_file_b64u )] ); diff --git a/lib/Crypt/Digest/RIPEMD160.pm b/lib/Crypt/Digest/RIPEMD160.pm index 201e254..cfd9fc6 100644 --- a/lib/Crypt/Digest/RIPEMD160.pm +++ b/lib/Crypt/Digest/RIPEMD160.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( ripemd160 ripemd160_hex ripemd160_b64 ripemd160_b64u ripemd160_file ripemd160_file_hex ripemd160_file_b64 ripemd160_file_b64u )] ); diff --git a/lib/Crypt/Digest/RIPEMD256.pm b/lib/Crypt/Digest/RIPEMD256.pm index 3c6852d..c9bacca 100644 --- a/lib/Crypt/Digest/RIPEMD256.pm +++ b/lib/Crypt/Digest/RIPEMD256.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( ripemd256 ripemd256_hex ripemd256_b64 ripemd256_b64u ripemd256_file ripemd256_file_hex ripemd256_file_b64 ripemd256_file_b64u )] ); diff --git a/lib/Crypt/Digest/RIPEMD320.pm b/lib/Crypt/Digest/RIPEMD320.pm index 364f875..f5be39f 100644 --- a/lib/Crypt/Digest/RIPEMD320.pm +++ b/lib/Crypt/Digest/RIPEMD320.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( ripemd320 ripemd320_hex ripemd320_b64 ripemd320_b64u ripemd320_file ripemd320_file_hex ripemd320_file_b64 ripemd320_file_b64u )] ); diff --git a/lib/Crypt/Digest/SHA1.pm b/lib/Crypt/Digest/SHA1.pm index 82e0713..f2a7cf5 100644 --- a/lib/Crypt/Digest/SHA1.pm +++ b/lib/Crypt/Digest/SHA1.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( sha1 sha1_hex sha1_b64 sha1_b64u sha1_file sha1_file_hex sha1_file_b64 sha1_file_b64u )] ); diff --git a/lib/Crypt/Digest/SHA224.pm b/lib/Crypt/Digest/SHA224.pm index d17d7e3..b27ca3e 100644 --- a/lib/Crypt/Digest/SHA224.pm +++ b/lib/Crypt/Digest/SHA224.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( sha224 sha224_hex sha224_b64 sha224_b64u sha224_file sha224_file_hex sha224_file_b64 sha224_file_b64u )] ); diff --git a/lib/Crypt/Digest/SHA256.pm b/lib/Crypt/Digest/SHA256.pm index 6b8ee3a..e04c2fc 100644 --- a/lib/Crypt/Digest/SHA256.pm +++ b/lib/Crypt/Digest/SHA256.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( sha256 sha256_hex sha256_b64 sha256_b64u sha256_file sha256_file_hex sha256_file_b64 sha256_file_b64u )] ); diff --git a/lib/Crypt/Digest/SHA384.pm b/lib/Crypt/Digest/SHA384.pm index 49fa060..5f964ac 100644 --- a/lib/Crypt/Digest/SHA384.pm +++ b/lib/Crypt/Digest/SHA384.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( sha384 sha384_hex sha384_b64 sha384_b64u sha384_file sha384_file_hex sha384_file_b64 sha384_file_b64u )] ); diff --git a/lib/Crypt/Digest/SHA3_224.pm b/lib/Crypt/Digest/SHA3_224.pm index 2b9beef..f091692 100644 --- a/lib/Crypt/Digest/SHA3_224.pm +++ b/lib/Crypt/Digest/SHA3_224.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/SHA3_256.pm b/lib/Crypt/Digest/SHA3_256.pm index a8c0f03..e4478d4 100644 --- a/lib/Crypt/Digest/SHA3_256.pm +++ b/lib/Crypt/Digest/SHA3_256.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/SHA3_384.pm b/lib/Crypt/Digest/SHA3_384.pm index 47e9e06..4e9623e 100644 --- a/lib/Crypt/Digest/SHA3_384.pm +++ b/lib/Crypt/Digest/SHA3_384.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/SHA3_512.pm b/lib/Crypt/Digest/SHA3_512.pm index 2f0c522..d4ca57d 100644 --- a/lib/Crypt/Digest/SHA3_512.pm +++ b/lib/Crypt/Digest/SHA3_512.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/SHA512.pm b/lib/Crypt/Digest/SHA512.pm index 2e5468b..a84cf2b 100644 --- a/lib/Crypt/Digest/SHA512.pm +++ b/lib/Crypt/Digest/SHA512.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( sha512 sha512_hex sha512_b64 sha512_b64u sha512_file sha512_file_hex sha512_file_b64 sha512_file_b64u )] ); diff --git a/lib/Crypt/Digest/SHA512_224.pm b/lib/Crypt/Digest/SHA512_224.pm index 5f10aa2..11a5c37 100644 --- a/lib/Crypt/Digest/SHA512_224.pm +++ b/lib/Crypt/Digest/SHA512_224.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/SHA512_256.pm b/lib/Crypt/Digest/SHA512_256.pm index 8a24196..eb0976b 100644 --- a/lib/Crypt/Digest/SHA512_256.pm +++ b/lib/Crypt/Digest/SHA512_256.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); 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 )] ); diff --git a/lib/Crypt/Digest/SHAKE.pm b/lib/Crypt/Digest/SHAKE.pm index 4f3bcb9..ba10f79 100644 --- a/lib/Crypt/Digest/SHAKE.pm +++ b/lib/Crypt/Digest/SHAKE.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use Carp; $Carp::Internal{(__PACKAGE__)}++; diff --git a/lib/Crypt/Digest/Tiger192.pm b/lib/Crypt/Digest/Tiger192.pm index 3c17338..d458381 100644 --- a/lib/Crypt/Digest/Tiger192.pm +++ b/lib/Crypt/Digest/Tiger192.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( tiger192 tiger192_hex tiger192_b64 tiger192_b64u tiger192_file tiger192_file_hex tiger192_file_b64 tiger192_file_b64u )] ); diff --git a/lib/Crypt/Digest/Whirlpool.pm b/lib/Crypt/Digest/Whirlpool.pm index 963a925..13b8822 100644 --- a/lib/Crypt/Digest/Whirlpool.pm +++ b/lib/Crypt/Digest/Whirlpool.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Digest Exporter); our %EXPORT_TAGS = ( all => [qw( whirlpool whirlpool_hex whirlpool_b64 whirlpool_b64u whirlpool_file whirlpool_file_hex whirlpool_file_b64 whirlpool_file_b64u )] ); diff --git a/lib/Crypt/Digest.pm b/lib/Crypt/Digest.pm index 5cef5fd..623ee19 100644 --- a/lib/Crypt/Digest.pm +++ b/lib/Crypt/Digest.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; 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 )] ); diff --git a/lib/Crypt/KeyDerivation.pm b/lib/Crypt/KeyDerivation.pm index 0411030..4ddf57a 100644 --- a/lib/Crypt/KeyDerivation.pm +++ b/lib/Crypt/KeyDerivation.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw(pbkdf1 pbkdf2 hkdf hkdf_expand hkdf_extract)] ); diff --git a/lib/Crypt/Mac/BLAKE2b.pm b/lib/Crypt/Mac/BLAKE2b.pm index a033ab5..ae6d069 100644 --- a/lib/Crypt/Mac/BLAKE2b.pm +++ b/lib/Crypt/Mac/BLAKE2b.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Mac Exporter); our %EXPORT_TAGS = ( all => [qw( blake2b blake2b_hex blake2b_b64 blake2b_b64u )] ); diff --git a/lib/Crypt/Mac/BLAKE2s.pm b/lib/Crypt/Mac/BLAKE2s.pm index 6439d54..e1317b1 100644 --- a/lib/Crypt/Mac/BLAKE2s.pm +++ b/lib/Crypt/Mac/BLAKE2s.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Mac Exporter); our %EXPORT_TAGS = ( all => [qw( blake2s blake2s_hex blake2s_b64 blake2s_b64u )] ); diff --git a/lib/Crypt/Mac/F9.pm b/lib/Crypt/Mac/F9.pm index 83b49ba..a11d1cf 100644 --- a/lib/Crypt/Mac/F9.pm +++ b/lib/Crypt/Mac/F9.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Mac Exporter); our %EXPORT_TAGS = ( all => [qw( f9 f9_hex f9_b64 f9_b64u )] ); diff --git a/lib/Crypt/Mac/HMAC.pm b/lib/Crypt/Mac/HMAC.pm index 10f2f2a..a692476 100644 --- a/lib/Crypt/Mac/HMAC.pm +++ b/lib/Crypt/Mac/HMAC.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Mac Exporter); our %EXPORT_TAGS = ( all => [qw( hmac hmac_hex hmac_b64 hmac_b64u )] ); diff --git a/lib/Crypt/Mac/OMAC.pm b/lib/Crypt/Mac/OMAC.pm index 7daad33..d47b2ea 100644 --- a/lib/Crypt/Mac/OMAC.pm +++ b/lib/Crypt/Mac/OMAC.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Mac Exporter); our %EXPORT_TAGS = ( all => [qw( omac omac_hex omac_b64 omac_b64u )] ); diff --git a/lib/Crypt/Mac/PMAC.pm b/lib/Crypt/Mac/PMAC.pm index 756a6e4..735b7af 100644 --- a/lib/Crypt/Mac/PMAC.pm +++ b/lib/Crypt/Mac/PMAC.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Mac Exporter); our %EXPORT_TAGS = ( all => [qw( pmac pmac_hex pmac_b64 pmac_b64u )] ); diff --git a/lib/Crypt/Mac/Pelican.pm b/lib/Crypt/Mac/Pelican.pm index 7d0b460..21ec80e 100644 --- a/lib/Crypt/Mac/Pelican.pm +++ b/lib/Crypt/Mac/Pelican.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Mac Exporter); our %EXPORT_TAGS = ( all => [qw( pelican pelican_hex pelican_b64 pelican_b64u )] ); diff --git a/lib/Crypt/Mac/Poly1305.pm b/lib/Crypt/Mac/Poly1305.pm index a1683e5..8902f83 100644 --- a/lib/Crypt/Mac/Poly1305.pm +++ b/lib/Crypt/Mac/Poly1305.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Mac Exporter); our %EXPORT_TAGS = ( all => [qw( poly1305 poly1305_hex poly1305_b64 poly1305_b64u )] ); diff --git a/lib/Crypt/Mac/XCBC.pm b/lib/Crypt/Mac/XCBC.pm index bf1ce69..0849740 100644 --- a/lib/Crypt/Mac/XCBC.pm +++ b/lib/Crypt/Mac/XCBC.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::Mac Exporter); our %EXPORT_TAGS = ( all => [qw( xcbc xcbc_hex xcbc_b64 xcbc_b64u )] ); diff --git a/lib/Crypt/Mac.pm b/lib/Crypt/Mac.pm index a35e8c5..afecda7 100644 --- a/lib/Crypt/Mac.pm +++ b/lib/Crypt/Mac.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use Carp; $Carp::Internal{(__PACKAGE__)}++; diff --git a/lib/Crypt/Misc.pm b/lib/Crypt/Misc.pm index 36aa240..b9b19c9 100644 --- a/lib/Crypt/Misc.pm +++ b/lib/Crypt/Misc.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 5.57 'import'; use Carp 'croak'; diff --git a/lib/Crypt/Mode/CBC.pm b/lib/Crypt/Mode/CBC.pm index 9db011b..19ed4f6 100644 --- a/lib/Crypt/Mode/CBC.pm +++ b/lib/Crypt/Mode/CBC.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use Crypt::Cipher; @@ -70,9 +70,12 @@ # 'SAFERP', 'SAFER_K128', 'SAFER_K64', 'SAFER_SK128', 'SAFER_SK64', # 'SEED', 'Skipjack', 'Twofish', 'XTEA', 'IDEA', 'Serpent' # simply any for which there exists Crypt::Cipher:: - # $padding .... 0 no padding (plaintext size has to be myltiple of block length) + # $padding .... 0 no padding (plaintext size has to be multiple of block length) # 1 PKCS5 padding, Crypt::CBC's "standard" - DEFAULT # 2 Crypt::CBC's "oneandzeroes" + # 3 ANSI X.923 padding + # 4 zero padding + # 5 zero padding (+a block of zeros if the output length is divisible by the blocksize) # $cipher_rounds ... optional num of rounds for given cipher =head2 encrypt diff --git a/lib/Crypt/Mode/CFB.pm b/lib/Crypt/Mode/CFB.pm index 565a759..eef218a 100644 --- a/lib/Crypt/Mode/CFB.pm +++ b/lib/Crypt/Mode/CFB.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use Crypt::Cipher; diff --git a/lib/Crypt/Mode/CTR.pm b/lib/Crypt/Mode/CTR.pm index b6bd6ef..9b69acc 100644 --- a/lib/Crypt/Mode/CTR.pm +++ b/lib/Crypt/Mode/CTR.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use Crypt::Cipher; diff --git a/lib/Crypt/Mode/ECB.pm b/lib/Crypt/Mode/ECB.pm index b3e7778..4e7c7f4 100644 --- a/lib/Crypt/Mode/ECB.pm +++ b/lib/Crypt/Mode/ECB.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use Crypt::Cipher; @@ -71,9 +71,12 @@ # 'SAFERP', 'SAFER_K128', 'SAFER_K64', 'SAFER_SK128', 'SAFER_SK64', # 'SEED', 'Skipjack', 'Twofish', 'XTEA', 'IDEA', 'Serpent' # simply any for which there exists Crypt::Cipher:: - # $padding .... 0 no padding (plaintext size has to be myltiple of block length) + # $padding .... 0 no padding (plaintext size has to be multiple of block length) # 1 PKCS5 padding, Crypt::CBC's "standard" - DEFAULT # 2 Crypt::CBC's "oneandzeroes" + # 3 ANSI X.923 padding + # 4 zero padding + # 5 zero padding (+a block of zeros if the output length is divisible by the blocksize) # $cipher_rounds ... optional num of rounds for given cipher =head2 encrypt diff --git a/lib/Crypt/Mode/OFB.pm b/lib/Crypt/Mode/OFB.pm index 71f05f9..367c62d 100644 --- a/lib/Crypt/Mode/OFB.pm +++ b/lib/Crypt/Mode/OFB.pm @@ -4,7 +4,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use Crypt::Cipher; diff --git a/lib/Crypt/Mode.pm b/lib/Crypt/Mode.pm index 779f477..8918e34 100644 --- a/lib/Crypt/Mode.pm +++ b/lib/Crypt/Mode.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; ### not used diff --git a/lib/Crypt/PK/DH.pm b/lib/Crypt/PK/DH.pm index faf1a53..abc9e9c 100644 --- a/lib/Crypt/PK/DH.pm +++ b/lib/Crypt/PK/DH.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw( dh_shared_secret )] ); diff --git a/lib/Crypt/PK/DSA.pm b/lib/Crypt/PK/DSA.pm index 89e3a70..95f8764 100644 --- a/lib/Crypt/PK/DSA.pm +++ b/lib/Crypt/PK/DSA.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw( dsa_encrypt dsa_decrypt dsa_sign_message dsa_verify_message dsa_sign_hash dsa_verify_hash )] ); diff --git a/lib/Crypt/PK/ECC.pm b/lib/Crypt/PK/ECC.pm index ef4887e..9e76efa 100644 --- a/lib/Crypt/PK/ECC.pm +++ b/lib/Crypt/PK/ECC.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw( ecc_encrypt ecc_decrypt ecc_sign_message ecc_verify_message ecc_sign_hash ecc_verify_hash ecc_shared_secret )] ); @@ -42,6 +42,8 @@ "wap-wsg-idm-ecid-wtls6" => 'secp112r1', "wap-wsg-idm-ecid-wtls7" => 'secp160r2', "wap-wsg-idm-ecid-wtls12" => 'secp224r1', + # extra aliases + 'P-256K' => 'secp256k1', ); our %curve_oid2name = ( # must be "our" as we use it from XS code @@ -87,6 +89,7 @@ '1.2.840.10045.3.1.1' => 'P-192', # secp192r1 '1.3.132.0.33' => 'P-224', # secp224r1 '1.2.840.10045.3.1.7' => 'P-256', # secp256r1 + '1.3.132.0.10' => 'P-256K',# secp256k1 '1.3.132.0.34' => 'P-384', # secp384r1 '1.3.132.0.35' => 'P-521', # secp521r1 'nistp192' => 'P-192', @@ -99,6 +102,7 @@ 'secp192r1' => 'P-192', 'secp224r1' => 'P-224', 'secp256r1' => 'P-256', + 'secp256k1' => 'P-256K', 'secp384r1' => 'P-384', 'secp521r1' => 'P-521', ); @@ -828,6 +832,10 @@ Same as L only the signature format is as defined by L (JWA - JSON Web Algorithms). +B This creates signatures according to the structure that RFC 7518 describes but does not apply +the RFC logic for the hashing algorithm selection. You'll still need to specify, e.g., SHA256 for a P-256 key +to get a fully RFC-7518-compliant signature. + =head2 verify_message my $pk = Crypt::PK::ECC->new($pub_key_filename); @@ -843,6 +851,10 @@ Same as L only the signature format is as defined by L (JWA - JSON Web Algorithms). + +B This verifies signatures according to the structure that RFC 7518 describes but does not apply +the RFC logic for the hashing algorithm selection. You'll still need to specify, e.g., SHA256 for a P-256 key +to get a fully RFC-7518-compliant signature. =head2 sign_hash diff --git a/lib/Crypt/PK/RSA.pm b/lib/Crypt/PK/RSA.pm index 69b0271..43b2d4b 100644 --- a/lib/Crypt/PK/RSA.pm +++ b/lib/Crypt/PK/RSA.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw(rsa_encrypt rsa_decrypt rsa_sign_message rsa_verify_message rsa_sign_hash rsa_verify_hash)] ); @@ -128,11 +128,12 @@ elsif ($data =~ /-----BEGIN PRIVATE KEY-----(.*?)-----END/sg) { # PKCS#8 PrivateKeyInfo (PEM header: BEGIN PRIVATE KEY) $data = pem_to_der($data, $password); - return $self->_import_pkcs8($data, $password) if $data; + return $self->_import_pkcs8($data, $password); } elsif ($data =~ /-----BEGIN ENCRYPTED PRIVATE KEY-----(.*?)-----END/sg) { - # XXX-TODO: PKCS#8 EncryptedPrivateKeyInfo (PEM header: BEGIN ENCRYPTED PRIVATE KEY) - croak "FATAL: encrypted pkcs8 RSA private keys are not supported"; + # PKCS#8 PrivateKeyInfo (PEM header: BEGIN ENCRYPTED PRIVATE KEY) + $data = pem_to_der($data, $password); + return $self->_import_pkcs8($data, $password); } elsif ($data =~ /^\s*(\{.*?\})\s*$/s) { # JSON Web Key (JWK) - http://tools.ietf.org/html/draft-ietf-jose-json-web-key @@ -418,7 +419,7 @@ fyoy4t3yHT+/nw== -----END PRIVATE KEY----- -=item * PKCS#8 encrypted private keys ARE NOT SUPPORTED YET! +=item * PKCS#8 encrypted private keys - password protected keys (supported since: CryptX-0.062) -----BEGIN ENCRYPTED PRIVATE KEY----- MIICojAcBgoqhkiG9w0BDAEDMA4ECCQk+Rr1yzzcAgIIAASCAoD/mgpUFjxxM/Ty diff --git a/lib/Crypt/PK.pm b/lib/Crypt/PK.pm index 3f8cd72..59837e5 100644 --- a/lib/Crypt/PK.pm +++ b/lib/Crypt/PK.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use Carp; diff --git a/lib/Crypt/PRNG/ChaCha20.pm b/lib/Crypt/PRNG/ChaCha20.pm index 8db4d03..df32904 100644 --- a/lib/Crypt/PRNG/ChaCha20.pm +++ b/lib/Crypt/PRNG/ChaCha20.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::PRNG Exporter); our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); diff --git a/lib/Crypt/PRNG/Fortuna.pm b/lib/Crypt/PRNG/Fortuna.pm index 6414642..aeccf5a 100644 --- a/lib/Crypt/PRNG/Fortuna.pm +++ b/lib/Crypt/PRNG/Fortuna.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::PRNG Exporter); our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); diff --git a/lib/Crypt/PRNG/RC4.pm b/lib/Crypt/PRNG/RC4.pm index 054b717..65741c8 100644 --- a/lib/Crypt/PRNG/RC4.pm +++ b/lib/Crypt/PRNG/RC4.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::PRNG Exporter); our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); diff --git a/lib/Crypt/PRNG/Sober128.pm b/lib/Crypt/PRNG/Sober128.pm index 79fae50..b2d7a47 100644 --- a/lib/Crypt/PRNG/Sober128.pm +++ b/lib/Crypt/PRNG/Sober128.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::PRNG Exporter); our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); diff --git a/lib/Crypt/PRNG/Yarrow.pm b/lib/Crypt/PRNG/Yarrow.pm index c6f2433..8364f1f 100644 --- a/lib/Crypt/PRNG/Yarrow.pm +++ b/lib/Crypt/PRNG/Yarrow.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use base qw(Crypt::PRNG Exporter); our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); diff --git a/lib/Crypt/PRNG.pm b/lib/Crypt/PRNG.pm index 9d9b37c..66dd712 100644 --- a/lib/Crypt/PRNG.pm +++ b/lib/Crypt/PRNG.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; our %EXPORT_TAGS = ( all => [qw(random_bytes random_bytes_hex random_bytes_b64 random_bytes_b64u random_string random_string_from rand irand)] ); diff --git a/lib/Crypt/Stream/ChaCha.pm b/lib/Crypt/Stream/ChaCha.pm index bc2c8ea..b5dda83 100644 --- a/lib/Crypt/Stream/ChaCha.pm +++ b/lib/Crypt/Stream/ChaCha.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use CryptX; diff --git a/lib/Crypt/Stream/RC4.pm b/lib/Crypt/Stream/RC4.pm index 5c893b7..1f9e594 100644 --- a/lib/Crypt/Stream/RC4.pm +++ b/lib/Crypt/Stream/RC4.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use CryptX; diff --git a/lib/Crypt/Stream/Rabbit.pm b/lib/Crypt/Stream/Rabbit.pm index 9d03342..c5d25e8 100644 --- a/lib/Crypt/Stream/Rabbit.pm +++ b/lib/Crypt/Stream/Rabbit.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use CryptX; diff --git a/lib/Crypt/Stream/Salsa20.pm b/lib/Crypt/Stream/Salsa20.pm index 45f8758..8616fa0 100644 --- a/lib/Crypt/Stream/Salsa20.pm +++ b/lib/Crypt/Stream/Salsa20.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use CryptX; diff --git a/lib/Crypt/Stream/Sober128.pm b/lib/Crypt/Stream/Sober128.pm index eaa5e6a..6cf5c63 100644 --- a/lib/Crypt/Stream/Sober128.pm +++ b/lib/Crypt/Stream/Sober128.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use CryptX; diff --git a/lib/Crypt/Stream/Sosemanuk.pm b/lib/Crypt/Stream/Sosemanuk.pm index 1b0a078..ceecba2 100644 --- a/lib/Crypt/Stream/Sosemanuk.pm +++ b/lib/Crypt/Stream/Sosemanuk.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use CryptX; diff --git a/lib/CryptX.pm b/lib/CryptX.pm index 663408f..64605c1 100644 --- a/lib/CryptX.pm +++ b/lib/CryptX.pm @@ -2,7 +2,7 @@ use strict; use warnings ; -our $VERSION = '0.061'; +our $VERSION = '0.062'; require XSLoader; XSLoader::load('CryptX', $VERSION); diff --git a/lib/Math/BigInt/LTM.pm b/lib/Math/BigInt/LTM.pm index c361b7c..a736c6a 100644 --- a/lib/Math/BigInt/LTM.pm +++ b/lib/Math/BigInt/LTM.pm @@ -2,7 +2,7 @@ use strict; use warnings; -our $VERSION = '0.061'; +our $VERSION = '0.062'; use CryptX; diff --git a/src/Makefile b/src/Makefile index 05bed2b..d08de80 100644 --- a/src/Makefile +++ b/src/Makefile @@ -41,22 +41,24 @@ ltc/mac/xcbc/xcbc_process.o ltc/math/ltm_desc.o ltc/math/multi.o ltc/math/radix_to_bin.o \ ltc/math/rand_bn.o ltc/math/rand_prime.o ltc/math/tfm_desc.o ltc/math/fp/ltc_ecc_fp_mulmod.o \ ltc/misc/adler32.o ltc/misc/burn_stack.o ltc/misc/compare_testvector.o ltc/misc/copy_or_zeromem.o \ -ltc/misc/crc32.o ltc/misc/error_to_string.o ltc/misc/mem_neq.o ltc/misc/pk_get_oid.o \ -ltc/misc/pk_oid_str.o ltc/misc/zeromem.o ltc/misc/base16/base16_decode.o ltc/misc/base16/base16_encode.o \ -ltc/misc/base32/base32_decode.o ltc/misc/base32/base32_encode.o ltc/misc/base64/base64_decode.o \ -ltc/misc/base64/base64_encode.o ltc/misc/crypt/crypt.o ltc/misc/crypt/crypt_argchk.o \ -ltc/misc/crypt/crypt_cipher_descriptor.o ltc/misc/crypt/crypt_cipher_is_valid.o ltc/misc/crypt/crypt_constants.o \ -ltc/misc/crypt/crypt_find_cipher.o ltc/misc/crypt/crypt_find_cipher_any.o ltc/misc/crypt/crypt_find_cipher_id.o \ -ltc/misc/crypt/crypt_find_hash.o ltc/misc/crypt/crypt_find_hash_any.o ltc/misc/crypt/crypt_find_hash_id.o \ -ltc/misc/crypt/crypt_find_hash_oid.o ltc/misc/crypt/crypt_find_prng.o ltc/misc/crypt/crypt_fsa.o \ -ltc/misc/crypt/crypt_hash_descriptor.o ltc/misc/crypt/crypt_hash_is_valid.o ltc/misc/crypt/crypt_inits.o \ -ltc/misc/crypt/crypt_ltc_mp_descriptor.o ltc/misc/crypt/crypt_prng_descriptor.o ltc/misc/crypt/crypt_prng_is_valid.o \ -ltc/misc/crypt/crypt_prng_rng_descriptor.o ltc/misc/crypt/crypt_register_all_ciphers.o \ -ltc/misc/crypt/crypt_register_all_hashes.o ltc/misc/crypt/crypt_register_all_prngs.o \ -ltc/misc/crypt/crypt_register_cipher.o ltc/misc/crypt/crypt_register_hash.o ltc/misc/crypt/crypt_register_prng.o \ -ltc/misc/crypt/crypt_sizes.o ltc/misc/crypt/crypt_unregister_cipher.o ltc/misc/crypt/crypt_unregister_hash.o \ -ltc/misc/crypt/crypt_unregister_prng.o ltc/misc/hkdf/hkdf.o ltc/misc/padding/padding_depad.o \ -ltc/misc/padding/padding_pad.o ltc/misc/pkcs5/pkcs_5_1.o ltc/misc/pkcs5/pkcs_5_2.o \ +ltc/misc/crc32.o ltc/misc/error_to_string.o ltc/misc/mem_neq.o ltc/misc/zeromem.o \ +ltc/misc/base16/base16_decode.o ltc/misc/base16/base16_encode.o ltc/misc/base32/base32_decode.o \ +ltc/misc/base32/base32_encode.o ltc/misc/base64/base64_decode.o ltc/misc/base64/base64_encode.o \ +ltc/misc/crypt/crypt.o ltc/misc/crypt/crypt_argchk.o ltc/misc/crypt/crypt_cipher_descriptor.o \ +ltc/misc/crypt/crypt_cipher_is_valid.o ltc/misc/crypt/crypt_constants.o ltc/misc/crypt/crypt_find_cipher.o \ +ltc/misc/crypt/crypt_find_cipher_any.o ltc/misc/crypt/crypt_find_cipher_id.o ltc/misc/crypt/crypt_find_hash.o \ +ltc/misc/crypt/crypt_find_hash_any.o ltc/misc/crypt/crypt_find_hash_id.o ltc/misc/crypt/crypt_find_hash_oid.o \ +ltc/misc/crypt/crypt_find_prng.o ltc/misc/crypt/crypt_fsa.o ltc/misc/crypt/crypt_hash_descriptor.o \ +ltc/misc/crypt/crypt_hash_is_valid.o ltc/misc/crypt/crypt_inits.o ltc/misc/crypt/crypt_ltc_mp_descriptor.o \ +ltc/misc/crypt/crypt_prng_descriptor.o ltc/misc/crypt/crypt_prng_is_valid.o ltc/misc/crypt/crypt_prng_rng_descriptor.o \ +ltc/misc/crypt/crypt_register_all_ciphers.o ltc/misc/crypt/crypt_register_all_hashes.o \ +ltc/misc/crypt/crypt_register_all_prngs.o ltc/misc/crypt/crypt_register_cipher.o \ +ltc/misc/crypt/crypt_register_hash.o ltc/misc/crypt/crypt_register_prng.o ltc/misc/crypt/crypt_sizes.o \ +ltc/misc/crypt/crypt_unregister_cipher.o ltc/misc/crypt/crypt_unregister_hash.o ltc/misc/crypt/crypt_unregister_prng.o \ +ltc/misc/hkdf/hkdf.o ltc/misc/padding/padding_depad.o ltc/misc/padding/padding_pad.o \ +ltc/misc/pbes/pbes.o ltc/misc/pbes/pbes1.o ltc/misc/pbes/pbes2.o ltc/misc/pkcs12/pkcs12_kdf.o \ +ltc/misc/pkcs12/pkcs12_utf8_to_utf16.o ltc/misc/pkcs5/pkcs_5_1.o ltc/misc/pkcs5/pkcs_5_2.o \ +ltc/misc/ssh/ssh_decode_sequence_multi.o ltc/misc/ssh/ssh_encode_sequence_multi.o \ ltc/modes/cbc/cbc_decrypt.o ltc/modes/cbc/cbc_done.o ltc/modes/cbc/cbc_encrypt.o \ ltc/modes/cbc/cbc_getiv.o ltc/modes/cbc/cbc_setiv.o ltc/modes/cbc/cbc_start.o ltc/modes/cfb/cfb_decrypt.o \ ltc/modes/cfb/cfb_done.o ltc/modes/cfb/cfb_encrypt.o ltc/modes/cfb/cfb_getiv.o ltc/modes/cfb/cfb_setiv.o \ @@ -93,49 +95,55 @@ ltc/pk/asn1/der/utctime/der_decode_utctime.o ltc/pk/asn1/der/utctime/der_encode_utctime.o \ ltc/pk/asn1/der/utctime/der_length_utctime.o ltc/pk/asn1/der/utf8/der_decode_utf8_string.o \ ltc/pk/asn1/der/utf8/der_encode_utf8_string.o ltc/pk/asn1/der/utf8/der_length_utf8_string.o \ -ltc/pk/asn1/x509/x509_decode_subject_public_key_info.o ltc/pk/asn1/x509/x509_encode_subject_public_key_info.o \ -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 \ -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 \ -ltc/pk/dh/dh_set_pg_dhparam.o ltc/pk/dh/dh_shared_secret.o ltc/pk/dsa/dsa_decrypt_key.o \ -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 \ -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 \ -ltc/pk/dsa/dsa_set_pqg_dsaparam.o ltc/pk/dsa/dsa_shared_secret.o ltc/pk/dsa/dsa_sign_hash.o \ -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 \ -ltc/pk/ecc/ecc_ansi_x963_import.o ltc/pk/ecc/ecc_decrypt_key.o ltc/pk/ecc/ecc_encrypt_key.o \ -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 \ +ltc/pk/asn1/oid/pk_get_oid.o ltc/pk/asn1/oid/pk_oid_cmp.o ltc/pk/asn1/oid/pk_oid_str.o \ +ltc/pk/asn1/pkcs8/pkcs8_decode_flexi.o ltc/pk/asn1/x509/x509_decode_subject_public_key_info.o \ +ltc/pk/asn1/x509/x509_encode_subject_public_key_info.o 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 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 ltc/pk/dh/dh_set_pg_dhparam.o ltc/pk/dh/dh_shared_secret.o \ +ltc/pk/dsa/dsa_decrypt_key.o 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 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 ltc/pk/dsa/dsa_set_pqg_dsaparam.o \ +ltc/pk/dsa/dsa_shared_secret.o ltc/pk/dsa/dsa_sign_hash.o 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 ltc/pk/ecc/ecc_ansi_x963_import.o \ +ltc/pk/ecc/ecc_decrypt_key.o ltc/pk/ecc/ecc_encrypt_key.o ltc/pk/ecc/ecc_export.o \ +ltc/pk/ecc/ecc_export_openssl.o ltc/pk/ecc/ecc_find_curve.o ltc/pk/ecc/ecc_free.o \ 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 \ ltc/pk/ecc/ecc_import_openssl.o ltc/pk/ecc/ecc_import_pkcs8.o ltc/pk/ecc/ecc_import_x509.o \ -ltc/pk/ecc/ecc_make_key.o ltc/pk/ecc/ecc_set_dp.o ltc/pk/ecc/ecc_set_dp_internal.o \ -ltc/pk/ecc/ecc_set_key.o ltc/pk/ecc/ecc_shared_secret.o ltc/pk/ecc/ecc_sign_hash.o \ -ltc/pk/ecc/ecc_sizes.o ltc/pk/ecc/ecc_verify_hash.o ltc/pk/ecc/ltc_ecc_export_point.o \ -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 \ -ltc/pk/ecc/ltc_ecc_map.o ltc/pk/ecc/ltc_ecc_mul2add.o ltc/pk/ecc/ltc_ecc_mulmod.o \ -ltc/pk/ecc/ltc_ecc_mulmod_timing.o 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 ltc/pk/ecc/ltc_ecc_verify_key.o ltc/pk/pkcs1/pkcs_1_i2osp.o \ -ltc/pk/pkcs1/pkcs_1_mgf1.o ltc/pk/pkcs1/pkcs_1_oaep_decode.o ltc/pk/pkcs1/pkcs_1_oaep_encode.o \ -ltc/pk/pkcs1/pkcs_1_os2ip.o 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 ltc/pk/pkcs1/pkcs_1_v1_5_encode.o ltc/pk/rsa/rsa_decrypt_key.o \ -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 \ -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 \ +ltc/pk/ecc/ecc_make_key.o ltc/pk/ecc/ecc_recover_key.o ltc/pk/ecc/ecc_set_curve.o \ +ltc/pk/ecc/ecc_set_curve_internal.o ltc/pk/ecc/ecc_set_key.o ltc/pk/ecc/ecc_shared_secret.o \ +ltc/pk/ecc/ecc_sign_hash.o ltc/pk/ecc/ecc_sizes.o ltc/pk/ecc/ecc_ssh_ecdsa_encode_name.o \ +ltc/pk/ecc/ecc_verify_hash.o ltc/pk/ecc/ltc_ecc_export_point.o 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 ltc/pk/ecc/ltc_ecc_map.o \ +ltc/pk/ecc/ltc_ecc_mul2add.o ltc/pk/ecc/ltc_ecc_mulmod.o ltc/pk/ecc/ltc_ecc_mulmod_timing.o \ +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 \ +ltc/pk/ecc/ltc_ecc_verify_key.o ltc/pk/pkcs1/pkcs_1_i2osp.o ltc/pk/pkcs1/pkcs_1_mgf1.o \ +ltc/pk/pkcs1/pkcs_1_oaep_decode.o ltc/pk/pkcs1/pkcs_1_oaep_encode.o ltc/pk/pkcs1/pkcs_1_os2ip.o \ +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 \ +ltc/pk/pkcs1/pkcs_1_v1_5_encode.o ltc/pk/rsa/rsa_decrypt_key.o 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 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 \ 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 \ ltc/pk/rsa/rsa_verify_hash.o ltc/prngs/chacha20.o ltc/prngs/fortuna.o ltc/prngs/rc4.o \ ltc/prngs/rng_get_bytes.o ltc/prngs/rng_make_prng.o ltc/prngs/sober128.o ltc/prngs/sprng.o \ ltc/prngs/yarrow.o ltc/stream/chacha/chacha_crypt.o ltc/stream/chacha/chacha_done.o \ ltc/stream/chacha/chacha_ivctr32.o ltc/stream/chacha/chacha_ivctr64.o ltc/stream/chacha/chacha_keystream.o \ -ltc/stream/chacha/chacha_setup.o ltc/stream/rabbit/rabbit.o ltc/stream/rc4/rc4_stream.o \ +ltc/stream/chacha/chacha_memory.o ltc/stream/chacha/chacha_setup.o ltc/stream/rabbit/rabbit.o \ +ltc/stream/rabbit/rabbit_memory.o ltc/stream/rc4/rc4_stream.o ltc/stream/rc4/rc4_stream_memory.o \ ltc/stream/salsa20/salsa20_crypt.o ltc/stream/salsa20/salsa20_done.o ltc/stream/salsa20/salsa20_ivctr64.o \ -ltc/stream/salsa20/salsa20_keystream.o ltc/stream/salsa20/salsa20_setup.o ltc/stream/salsa20/xsalsa20_setup.o \ -ltc/stream/sober128/sober128_stream.o ltc/stream/sosemanuk/sosemanuk.o ltm/bncore.o \ -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 \ -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 \ -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 \ -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 \ -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 \ -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 \ -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 \ -ltm/bn_mp_exptmod_fast.o ltm/bn_mp_expt_d.o ltm/bn_mp_expt_d_ex.o ltm/bn_mp_exteuclid.o \ -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 \ -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 \ +ltc/stream/salsa20/salsa20_keystream.o ltc/stream/salsa20/salsa20_memory.o ltc/stream/salsa20/salsa20_setup.o \ +ltc/stream/salsa20/xsalsa20_memory.o ltc/stream/salsa20/xsalsa20_setup.o ltc/stream/sober128/sober128_stream.o \ +ltc/stream/sober128/sober128_stream_memory.o ltc/stream/sosemanuk/sosemanuk.o ltc/stream/sosemanuk/sosemanuk_memory.o \ +ltm/bncore.o 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 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 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 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 ltm/bn_mp_cnt_lsb.o ltm/bn_mp_complement.o \ +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 \ +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 \ +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 \ +ltm/bn_mp_expt_d.o ltm/bn_mp_expt_d_ex.o ltm/bn_mp_exteuclid.o 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 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 \ ltm/bn_mp_init_set.o ltm/bn_mp_init_set_int.o ltm/bn_mp_init_size.o ltm/bn_mp_invmod.o \ ltm/bn_mp_invmod_slow.o ltm/bn_mp_is_square.o ltm/bn_mp_jacobi.o ltm/bn_mp_karatsuba_mul.o \ 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 \ @@ -151,11 +159,12 @@ 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 \ ltm/bn_mp_shrink.o ltm/bn_mp_signed_bin_size.o ltm/bn_mp_sqr.o ltm/bn_mp_sqrmod.o \ 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 \ -ltm/bn_mp_toom_mul.o ltm/bn_mp_toom_sqr.o ltm/bn_mp_toradix.o ltm/bn_mp_toradix_n.o \ -ltm/bn_mp_to_signed_bin.o ltm/bn_mp_to_signed_bin_n.o ltm/bn_mp_to_unsigned_bin.o \ -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 \ -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 \ -ltm/bn_s_mp_mul_high_digs.o ltm/bn_s_mp_sqr.o ltm/bn_s_mp_sub.o +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 \ +ltm/bn_mp_toom_sqr.o ltm/bn_mp_toradix.o ltm/bn_mp_toradix_n.o ltm/bn_mp_to_signed_bin.o \ +ltm/bn_mp_to_signed_bin_n.o ltm/bn_mp_to_unsigned_bin.o 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 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 ltm/bn_s_mp_mul_high_digs.o \ +ltm/bn_s_mp_sqr.o ltm/bn_s_mp_sub.o LIB_EXT =.a OBJ_EXT =.o @@ -176,4 +185,4 @@ .SUFFIXES: .o .c .c$(OBJ_EXT): - $(CC) -Iltm -Iltc/headers -DLTC_SOURCE -DLTC_NO_TEST -DLTC_NO_PROTOTYPES -DLTM_DESC $(CFLAGS) -c $< -o $@ + $(CC) -Iltm -Iltc/headers -DLTC_SOURCE -DLTC_NO_TEST -DLTC_NO_PROTOTYPES -DLTM_DESC $(CFLAGS) -DARGTYPE=4 -c $< -o $@ diff --git a/src/Makefile.nmake b/src/Makefile.nmake index 47703d5..c78076a 100644 --- a/src/Makefile.nmake +++ b/src/Makefile.nmake @@ -44,23 +44,25 @@ ltc/mac/xcbc/xcbc_process.obj ltc/math/ltm_desc.obj ltc/math/multi.obj ltc/math/radix_to_bin.obj \ ltc/math/rand_bn.obj ltc/math/rand_prime.obj ltc/math/tfm_desc.obj ltc/math/fp/ltc_ecc_fp_mulmod.obj \ ltc/misc/adler32.obj ltc/misc/burn_stack.obj ltc/misc/compare_testvector.obj ltc/misc/copy_or_zeromem.obj \ -ltc/misc/crc32.obj ltc/misc/error_to_string.obj ltc/misc/mem_neq.obj ltc/misc/pk_get_oid.obj \ -ltc/misc/pk_oid_str.obj ltc/misc/zeromem.obj ltc/misc/base16/base16_decode.obj ltc/misc/base16/base16_encode.obj \ -ltc/misc/base32/base32_decode.obj ltc/misc/base32/base32_encode.obj ltc/misc/base64/base64_decode.obj \ -ltc/misc/base64/base64_encode.obj ltc/misc/crypt/crypt.obj ltc/misc/crypt/crypt_argchk.obj \ -ltc/misc/crypt/crypt_cipher_descriptor.obj ltc/misc/crypt/crypt_cipher_is_valid.obj \ -ltc/misc/crypt/crypt_constants.obj ltc/misc/crypt/crypt_find_cipher.obj ltc/misc/crypt/crypt_find_cipher_any.obj \ -ltc/misc/crypt/crypt_find_cipher_id.obj ltc/misc/crypt/crypt_find_hash.obj ltc/misc/crypt/crypt_find_hash_any.obj \ -ltc/misc/crypt/crypt_find_hash_id.obj ltc/misc/crypt/crypt_find_hash_oid.obj ltc/misc/crypt/crypt_find_prng.obj \ -ltc/misc/crypt/crypt_fsa.obj ltc/misc/crypt/crypt_hash_descriptor.obj ltc/misc/crypt/crypt_hash_is_valid.obj \ -ltc/misc/crypt/crypt_inits.obj ltc/misc/crypt/crypt_ltc_mp_descriptor.obj ltc/misc/crypt/crypt_prng_descriptor.obj \ +ltc/misc/crc32.obj ltc/misc/error_to_string.obj ltc/misc/mem_neq.obj ltc/misc/zeromem.obj \ +ltc/misc/base16/base16_decode.obj ltc/misc/base16/base16_encode.obj ltc/misc/base32/base32_decode.obj \ +ltc/misc/base32/base32_encode.obj ltc/misc/base64/base64_decode.obj ltc/misc/base64/base64_encode.obj \ +ltc/misc/crypt/crypt.obj ltc/misc/crypt/crypt_argchk.obj ltc/misc/crypt/crypt_cipher_descriptor.obj \ +ltc/misc/crypt/crypt_cipher_is_valid.obj ltc/misc/crypt/crypt_constants.obj ltc/misc/crypt/crypt_find_cipher.obj \ +ltc/misc/crypt/crypt_find_cipher_any.obj ltc/misc/crypt/crypt_find_cipher_id.obj \ +ltc/misc/crypt/crypt_find_hash.obj ltc/misc/crypt/crypt_find_hash_any.obj ltc/misc/crypt/crypt_find_hash_id.obj \ +ltc/misc/crypt/crypt_find_hash_oid.obj ltc/misc/crypt/crypt_find_prng.obj ltc/misc/crypt/crypt_fsa.obj \ +ltc/misc/crypt/crypt_hash_descriptor.obj ltc/misc/crypt/crypt_hash_is_valid.obj ltc/misc/crypt/crypt_inits.obj \ +ltc/misc/crypt/crypt_ltc_mp_descriptor.obj ltc/misc/crypt/crypt_prng_descriptor.obj \ ltc/misc/crypt/crypt_prng_is_valid.obj ltc/misc/crypt/crypt_prng_rng_descriptor.obj \ ltc/misc/crypt/crypt_register_all_ciphers.obj ltc/misc/crypt/crypt_register_all_hashes.obj \ ltc/misc/crypt/crypt_register_all_prngs.obj ltc/misc/crypt/crypt_register_cipher.obj \ ltc/misc/crypt/crypt_register_hash.obj ltc/misc/crypt/crypt_register_prng.obj ltc/misc/crypt/crypt_sizes.obj \ ltc/misc/crypt/crypt_unregister_cipher.obj ltc/misc/crypt/crypt_unregister_hash.obj \ ltc/misc/crypt/crypt_unregister_prng.obj ltc/misc/hkdf/hkdf.obj ltc/misc/padding/padding_depad.obj \ -ltc/misc/padding/padding_pad.obj ltc/misc/pkcs5/pkcs_5_1.obj ltc/misc/pkcs5/pkcs_5_2.obj \ +ltc/misc/padding/padding_pad.obj ltc/misc/pbes/pbes.obj ltc/misc/pbes/pbes1.obj ltc/misc/pbes/pbes2.obj \ +ltc/misc/pkcs12/pkcs12_kdf.obj ltc/misc/pkcs12/pkcs12_utf8_to_utf16.obj ltc/misc/pkcs5/pkcs_5_1.obj \ +ltc/misc/pkcs5/pkcs_5_2.obj ltc/misc/ssh/ssh_decode_sequence_multi.obj ltc/misc/ssh/ssh_encode_sequence_multi.obj \ ltc/modes/cbc/cbc_decrypt.obj ltc/modes/cbc/cbc_done.obj ltc/modes/cbc/cbc_encrypt.obj \ ltc/modes/cbc/cbc_getiv.obj ltc/modes/cbc/cbc_setiv.obj ltc/modes/cbc/cbc_start.obj \ ltc/modes/cfb/cfb_decrypt.obj ltc/modes/cfb/cfb_done.obj ltc/modes/cfb/cfb_encrypt.obj \ @@ -99,26 +101,28 @@ ltc/pk/asn1/der/utctime/der_decode_utctime.obj ltc/pk/asn1/der/utctime/der_encode_utctime.obj \ ltc/pk/asn1/der/utctime/der_length_utctime.obj ltc/pk/asn1/der/utf8/der_decode_utf8_string.obj \ ltc/pk/asn1/der/utf8/der_encode_utf8_string.obj ltc/pk/asn1/der/utf8/der_length_utf8_string.obj \ -ltc/pk/asn1/x509/x509_decode_subject_public_key_info.obj ltc/pk/asn1/x509/x509_encode_subject_public_key_info.obj \ -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 \ -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 \ -ltc/pk/dh/dh_set_pg_dhparam.obj ltc/pk/dh/dh_shared_secret.obj ltc/pk/dsa/dsa_decrypt_key.obj \ -ltc/pk/dsa/dsa_encrypt_key.obj ltc/pk/dsa/dsa_export.obj ltc/pk/dsa/dsa_free.obj \ -ltc/pk/dsa/dsa_generate_key.obj ltc/pk/dsa/dsa_generate_pqg.obj 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 \ +ltc/pk/asn1/oid/pk_get_oid.obj ltc/pk/asn1/oid/pk_oid_cmp.obj ltc/pk/asn1/oid/pk_oid_str.obj \ +ltc/pk/asn1/pkcs8/pkcs8_decode_flexi.obj ltc/pk/asn1/x509/x509_decode_subject_public_key_info.obj \ +ltc/pk/asn1/x509/x509_encode_subject_public_key_info.obj 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 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 ltc/pk/dh/dh_set_pg_dhparam.obj ltc/pk/dh/dh_shared_secret.obj \ +ltc/pk/dsa/dsa_decrypt_key.obj ltc/pk/dsa/dsa_encrypt_key.obj ltc/pk/dsa/dsa_export.obj \ +ltc/pk/dsa/dsa_free.obj ltc/pk/dsa/dsa_generate_key.obj ltc/pk/dsa/dsa_generate_pqg.obj \ +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 \ ltc/pk/dsa/dsa_shared_secret.obj ltc/pk/dsa/dsa_sign_hash.obj ltc/pk/dsa/dsa_verify_hash.obj \ ltc/pk/dsa/dsa_verify_key.obj ltc/pk/ecc/ecc.obj ltc/pk/ecc/ecc_ansi_x963_export.obj \ ltc/pk/ecc/ecc_ansi_x963_import.obj ltc/pk/ecc/ecc_decrypt_key.obj ltc/pk/ecc/ecc_encrypt_key.obj \ -ltc/pk/ecc/ecc_export.obj ltc/pk/ecc/ecc_export_openssl.obj ltc/pk/ecc/ecc_free.obj \ -ltc/pk/ecc/ecc_get_curve.obj ltc/pk/ecc/ecc_get_key.obj ltc/pk/ecc/ecc_get_oid_str.obj \ +ltc/pk/ecc/ecc_export.obj ltc/pk/ecc/ecc_export_openssl.obj ltc/pk/ecc/ecc_find_curve.obj \ +ltc/pk/ecc/ecc_free.obj ltc/pk/ecc/ecc_get_key.obj ltc/pk/ecc/ecc_get_oid_str.obj \ ltc/pk/ecc/ecc_get_size.obj ltc/pk/ecc/ecc_import.obj ltc/pk/ecc/ecc_import_openssl.obj \ ltc/pk/ecc/ecc_import_pkcs8.obj ltc/pk/ecc/ecc_import_x509.obj ltc/pk/ecc/ecc_make_key.obj \ -ltc/pk/ecc/ecc_set_dp.obj ltc/pk/ecc/ecc_set_dp_internal.obj ltc/pk/ecc/ecc_set_key.obj \ -ltc/pk/ecc/ecc_shared_secret.obj ltc/pk/ecc/ecc_sign_hash.obj ltc/pk/ecc/ecc_sizes.obj \ -ltc/pk/ecc/ecc_verify_hash.obj ltc/pk/ecc/ltc_ecc_export_point.obj ltc/pk/ecc/ltc_ecc_import_point.obj \ -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 \ -ltc/pk/ecc/ltc_ecc_mul2add.obj ltc/pk/ecc/ltc_ecc_mulmod.obj ltc/pk/ecc/ltc_ecc_mulmod_timing.obj \ -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 \ +ltc/pk/ecc/ecc_recover_key.obj ltc/pk/ecc/ecc_set_curve.obj ltc/pk/ecc/ecc_set_curve_internal.obj \ +ltc/pk/ecc/ecc_set_key.obj ltc/pk/ecc/ecc_shared_secret.obj ltc/pk/ecc/ecc_sign_hash.obj \ +ltc/pk/ecc/ecc_sizes.obj ltc/pk/ecc/ecc_ssh_ecdsa_encode_name.obj ltc/pk/ecc/ecc_verify_hash.obj \ +ltc/pk/ecc/ltc_ecc_export_point.obj ltc/pk/ecc/ltc_ecc_import_point.obj 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 ltc/pk/ecc/ltc_ecc_mul2add.obj \ +ltc/pk/ecc/ltc_ecc_mulmod.obj ltc/pk/ecc/ltc_ecc_mulmod_timing.obj 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 \ ltc/pk/ecc/ltc_ecc_verify_key.obj ltc/pk/pkcs1/pkcs_1_i2osp.obj ltc/pk/pkcs1/pkcs_1_mgf1.obj \ ltc/pk/pkcs1/pkcs_1_oaep_decode.obj ltc/pk/pkcs1/pkcs_1_oaep_encode.obj ltc/pk/pkcs1/pkcs_1_os2ip.obj \ 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 \ @@ -130,15 +134,18 @@ ltc/prngs/rng_get_bytes.obj ltc/prngs/rng_make_prng.obj ltc/prngs/sober128.obj ltc/prngs/sprng.obj \ ltc/prngs/yarrow.obj ltc/stream/chacha/chacha_crypt.obj ltc/stream/chacha/chacha_done.obj \ ltc/stream/chacha/chacha_ivctr32.obj ltc/stream/chacha/chacha_ivctr64.obj ltc/stream/chacha/chacha_keystream.obj \ -ltc/stream/chacha/chacha_setup.obj ltc/stream/rabbit/rabbit.obj ltc/stream/rc4/rc4_stream.obj \ +ltc/stream/chacha/chacha_memory.obj ltc/stream/chacha/chacha_setup.obj ltc/stream/rabbit/rabbit.obj \ +ltc/stream/rabbit/rabbit_memory.obj ltc/stream/rc4/rc4_stream.obj ltc/stream/rc4/rc4_stream_memory.obj \ ltc/stream/salsa20/salsa20_crypt.obj ltc/stream/salsa20/salsa20_done.obj ltc/stream/salsa20/salsa20_ivctr64.obj \ -ltc/stream/salsa20/salsa20_keystream.obj ltc/stream/salsa20/salsa20_setup.obj ltc/stream/salsa20/xsalsa20_setup.obj \ -ltc/stream/sober128/sober128_stream.obj ltc/stream/sosemanuk/sosemanuk.obj ltm/bncore.obj \ -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 \ -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 \ -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 \ -ltm/bn_mp_clear.obj ltm/bn_mp_clear_multi.obj ltm/bn_mp_cmp.obj ltm/bn_mp_cmp_d.obj \ -ltm/bn_mp_cmp_mag.obj ltm/bn_mp_cnt_lsb.obj ltm/bn_mp_copy.obj ltm/bn_mp_count_bits.obj \ +ltc/stream/salsa20/salsa20_keystream.obj ltc/stream/salsa20/salsa20_memory.obj ltc/stream/salsa20/salsa20_setup.obj \ +ltc/stream/salsa20/xsalsa20_memory.obj ltc/stream/salsa20/xsalsa20_setup.obj ltc/stream/sober128/sober128_stream.obj \ +ltc/stream/sober128/sober128_stream_memory.obj ltc/stream/sosemanuk/sosemanuk.obj \ +ltc/stream/sosemanuk/sosemanuk_memory.obj ltm/bncore.obj 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 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 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 ltm/bn_mp_clear.obj \ +ltm/bn_mp_clear_multi.obj ltm/bn_mp_cmp.obj ltm/bn_mp_cmp_d.obj ltm/bn_mp_cmp_mag.obj \ +ltm/bn_mp_cnt_lsb.obj ltm/bn_mp_complement.obj ltm/bn_mp_copy.obj ltm/bn_mp_count_bits.obj \ 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 \ ltm/bn_mp_dr_is_modulus.obj ltm/bn_mp_dr_reduce.obj ltm/bn_mp_dr_setup.obj ltm/bn_mp_exch.obj \ ltm/bn_mp_export.obj ltm/bn_mp_exptmod.obj ltm/bn_mp_exptmod_fast.obj ltm/bn_mp_expt_d.obj \ @@ -161,7 +168,8 @@ ltm/bn_mp_rshd.obj ltm/bn_mp_set.obj ltm/bn_mp_set_int.obj ltm/bn_mp_set_long.obj \ ltm/bn_mp_shrink.obj ltm/bn_mp_signed_bin_size.obj ltm/bn_mp_sqr.obj ltm/bn_mp_sqrmod.obj \ ltm/bn_mp_sqrt.obj ltm/bn_mp_sqrtmod_prime.obj ltm/bn_mp_sub.obj ltm/bn_mp_submod.obj \ -ltm/bn_mp_sub_d.obj ltm/bn_mp_toom_mul.obj ltm/bn_mp_toom_sqr.obj ltm/bn_mp_toradix.obj \ +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 \ +ltm/bn_mp_tc_xor.obj ltm/bn_mp_toom_mul.obj ltm/bn_mp_toom_sqr.obj ltm/bn_mp_toradix.obj \ ltm/bn_mp_toradix_n.obj ltm/bn_mp_to_signed_bin.obj ltm/bn_mp_to_signed_bin_n.obj \ ltm/bn_mp_to_unsigned_bin.obj ltm/bn_mp_to_unsigned_bin_n.obj ltm/bn_mp_unsigned_bin_size.obj \ 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 \ @@ -178,5 +186,5 @@ $(RM_F) $(OBJS) liballinone.lib .c.obj: - cl /Iltm /Iltc/headers /DLTC_SOURCE /DLTC_NO_TEST /DLTC_NO_PROTOTYPES /DLTM_DESC $(CFLAGS) /c $< /Fo$@ + cl /Iltm /Iltc/headers /DLTC_SOURCE /DLTC_NO_TEST /DLTC_NO_PROTOTYPES /DLTM_DESC /DARGTYPE=4 $(CFLAGS) /c $< /Fo$@ diff --git a/src/ltc/ciphers/aes/aes.c b/src/ltc/ciphers/aes/aes.c index 537fece..8ba1bfc 100644 --- a/src/ltc/ciphers/aes/aes.c +++ b/src/ltc/ciphers/aes/aes.c @@ -91,20 +91,20 @@ static ulong32 setup_mix(ulong32 temp) { - return (Te4_3[byte(temp, 2)]) ^ - (Te4_2[byte(temp, 1)]) ^ - (Te4_1[byte(temp, 0)]) ^ - (Te4_0[byte(temp, 3)]); + return (Te4_3[LTC_BYTE(temp, 2)]) ^ + (Te4_2[LTC_BYTE(temp, 1)]) ^ + (Te4_1[LTC_BYTE(temp, 0)]) ^ + (Te4_0[LTC_BYTE(temp, 3)]); } #ifndef ENCRYPT_ONLY #ifdef LTC_SMALL_CODE static ulong32 setup_mix2(ulong32 temp) { - return Td0(255 & Te4[byte(temp, 3)]) ^ - Td1(255 & Te4[byte(temp, 2)]) ^ - Td2(255 & Te4[byte(temp, 1)]) ^ - Td3(255 & Te4[byte(temp, 0)]); + return Td0(255 & Te4[LTC_BYTE(temp, 3)]) ^ + Td1(255 & Te4[LTC_BYTE(temp, 2)]) ^ + Td2(255 & Te4[LTC_BYTE(temp, 1)]) ^ + Td3(255 & Te4[LTC_BYTE(temp, 0)]); } #endif #endif @@ -235,28 +235,28 @@ #else temp = rrk[0]; rk[0] = - Tks0[byte(temp, 3)] ^ - Tks1[byte(temp, 2)] ^ - Tks2[byte(temp, 1)] ^ - Tks3[byte(temp, 0)]; + Tks0[LTC_BYTE(temp, 3)] ^ + Tks1[LTC_BYTE(temp, 2)] ^ + Tks2[LTC_BYTE(temp, 1)] ^ + Tks3[LTC_BYTE(temp, 0)]; temp = rrk[1]; rk[1] = - Tks0[byte(temp, 3)] ^ - Tks1[byte(temp, 2)] ^ - Tks2[byte(temp, 1)] ^ - Tks3[byte(temp, 0)]; + Tks0[LTC_BYTE(temp, 3)] ^ + Tks1[LTC_BYTE(temp, 2)] ^ + Tks2[LTC_BYTE(temp, 1)] ^ + Tks3[LTC_BYTE(temp, 0)]; temp = rrk[2]; rk[2] = - Tks0[byte(temp, 3)] ^ - Tks1[byte(temp, 2)] ^ - Tks2[byte(temp, 1)] ^ - Tks3[byte(temp, 0)]; + Tks0[LTC_BYTE(temp, 3)] ^ + Tks1[LTC_BYTE(temp, 2)] ^ + Tks2[LTC_BYTE(temp, 1)] ^ + Tks3[LTC_BYTE(temp, 0)]; temp = rrk[3]; rk[3] = - Tks0[byte(temp, 3)] ^ - Tks1[byte(temp, 2)] ^ - Tks2[byte(temp, 1)] ^ - Tks3[byte(temp, 0)]; + Tks0[LTC_BYTE(temp, 3)] ^ + Tks1[LTC_BYTE(temp, 2)] ^ + Tks2[LTC_BYTE(temp, 1)] ^ + Tks3[LTC_BYTE(temp, 0)]; #endif } @@ -311,28 +311,28 @@ for (r = 0; ; r++) { rk += 4; t0 = - Te0(byte(s0, 3)) ^ - Te1(byte(s1, 2)) ^ - Te2(byte(s2, 1)) ^ - Te3(byte(s3, 0)) ^ + Te0(LTC_BYTE(s0, 3)) ^ + Te1(LTC_BYTE(s1, 2)) ^ + Te2(LTC_BYTE(s2, 1)) ^ + Te3(LTC_BYTE(s3, 0)) ^ rk[0]; t1 = - Te0(byte(s1, 3)) ^ - Te1(byte(s2, 2)) ^ - Te2(byte(s3, 1)) ^ - Te3(byte(s0, 0)) ^ + Te0(LTC_BYTE(s1, 3)) ^ + Te1(LTC_BYTE(s2, 2)) ^ + Te2(LTC_BYTE(s3, 1)) ^ + Te3(LTC_BYTE(s0, 0)) ^ rk[1]; t2 = - Te0(byte(s2, 3)) ^ - Te1(byte(s3, 2)) ^ - Te2(byte(s0, 1)) ^ - Te3(byte(s1, 0)) ^ + Te0(LTC_BYTE(s2, 3)) ^ + Te1(LTC_BYTE(s3, 2)) ^ + Te2(LTC_BYTE(s0, 1)) ^ + Te3(LTC_BYTE(s1, 0)) ^ rk[2]; t3 = - Te0(byte(s3, 3)) ^ - Te1(byte(s0, 2)) ^ - Te2(byte(s1, 1)) ^ - Te3(byte(s2, 0)) ^ + Te0(LTC_BYTE(s3, 3)) ^ + Te1(LTC_BYTE(s0, 2)) ^ + Te2(LTC_BYTE(s1, 1)) ^ + Te3(LTC_BYTE(s2, 0)) ^ rk[3]; if (r == Nr-2) { break; @@ -349,28 +349,28 @@ r = Nr >> 1; for (;;) { t0 = - Te0(byte(s0, 3)) ^ - Te1(byte(s1, 2)) ^ - Te2(byte(s2, 1)) ^ - Te3(byte(s3, 0)) ^ + Te0(LTC_BYTE(s0, 3)) ^ + Te1(LTC_BYTE(s1, 2)) ^ + Te2(LTC_BYTE(s2, 1)) ^ + Te3(LTC_BYTE(s3, 0)) ^ rk[4]; t1 = - Te0(byte(s1, 3)) ^ - Te1(byte(s2, 2)) ^ - Te2(byte(s3, 1)) ^ - Te3(byte(s0, 0)) ^ + Te0(LTC_BYTE(s1, 3)) ^ + Te1(LTC_BYTE(s2, 2)) ^ + Te2(LTC_BYTE(s3, 1)) ^ + Te3(LTC_BYTE(s0, 0)) ^ rk[5]; t2 = - Te0(byte(s2, 3)) ^ - Te1(byte(s3, 2)) ^ - Te2(byte(s0, 1)) ^ - Te3(byte(s1, 0)) ^ + Te0(LTC_BYTE(s2, 3)) ^ + Te1(LTC_BYTE(s3, 2)) ^ + Te2(LTC_BYTE(s0, 1)) ^ + Te3(LTC_BYTE(s1, 0)) ^ rk[6]; t3 = - Te0(byte(s3, 3)) ^ - Te1(byte(s0, 2)) ^ - Te2(byte(s1, 1)) ^ - Te3(byte(s2, 0)) ^ + Te0(LTC_BYTE(s3, 3)) ^ + Te1(LTC_BYTE(s0, 2)) ^ + Te2(LTC_BYTE(s1, 1)) ^ + Te3(LTC_BYTE(s2, 0)) ^ rk[7]; rk += 8; @@ -379,28 +379,28 @@ } s0 = - Te0(byte(t0, 3)) ^ - Te1(byte(t1, 2)) ^ - Te2(byte(t2, 1)) ^ - Te3(byte(t3, 0)) ^ + Te0(LTC_BYTE(t0, 3)) ^ + Te1(LTC_BYTE(t1, 2)) ^ + Te2(LTC_BYTE(t2, 1)) ^ + Te3(LTC_BYTE(t3, 0)) ^ rk[0]; s1 = - Te0(byte(t1, 3)) ^ - Te1(byte(t2, 2)) ^ - Te2(byte(t3, 1)) ^ - Te3(byte(t0, 0)) ^ + Te0(LTC_BYTE(t1, 3)) ^ + Te1(LTC_BYTE(t2, 2)) ^ + Te2(LTC_BYTE(t3, 1)) ^ + Te3(LTC_BYTE(t0, 0)) ^ rk[1]; s2 = - Te0(byte(t2, 3)) ^ - Te1(byte(t3, 2)) ^ - Te2(byte(t0, 1)) ^ - Te3(byte(t1, 0)) ^ + Te0(LTC_BYTE(t2, 3)) ^ + Te1(LTC_BYTE(t3, 2)) ^ + Te2(LTC_BYTE(t0, 1)) ^ + Te3(LTC_BYTE(t1, 0)) ^ rk[2]; s3 = - Te0(byte(t3, 3)) ^ - Te1(byte(t0, 2)) ^ - Te2(byte(t1, 1)) ^ - Te3(byte(t2, 0)) ^ + Te0(LTC_BYTE(t3, 3)) ^ + Te1(LTC_BYTE(t0, 2)) ^ + Te2(LTC_BYTE(t1, 1)) ^ + Te3(LTC_BYTE(t2, 0)) ^ rk[3]; } @@ -411,31 +411,31 @@ * map cipher state to byte array block: */ s0 = - (Te4_3[byte(t0, 3)]) ^ - (Te4_2[byte(t1, 2)]) ^ - (Te4_1[byte(t2, 1)]) ^ - (Te4_0[byte(t3, 0)]) ^ + (Te4_3[LTC_BYTE(t0, 3)]) ^ + (Te4_2[LTC_BYTE(t1, 2)]) ^ + (Te4_1[LTC_BYTE(t2, 1)]) ^ + (Te4_0[LTC_BYTE(t3, 0)]) ^ rk[0]; STORE32H(s0, ct); s1 = - (Te4_3[byte(t1, 3)]) ^ - (Te4_2[byte(t2, 2)]) ^ - (Te4_1[byte(t3, 1)]) ^ - (Te4_0[byte(t0, 0)]) ^ + (Te4_3[LTC_BYTE(t1, 3)]) ^ + (Te4_2[LTC_BYTE(t2, 2)]) ^ + (Te4_1[LTC_BYTE(t3, 1)]) ^ + (Te4_0[LTC_BYTE(t0, 0)]) ^ rk[1]; STORE32H(s1, ct+4); s2 = - (Te4_3[byte(t2, 3)]) ^ - (Te4_2[byte(t3, 2)]) ^ - (Te4_1[byte(t0, 1)]) ^ - (Te4_0[byte(t1, 0)]) ^ + (Te4_3[LTC_BYTE(t2, 3)]) ^ + (Te4_2[LTC_BYTE(t3, 2)]) ^ + (Te4_1[LTC_BYTE(t0, 1)]) ^ + (Te4_0[LTC_BYTE(t1, 0)]) ^ rk[2]; STORE32H(s2, ct+8); s3 = - (Te4_3[byte(t3, 3)]) ^ - (Te4_2[byte(t0, 2)]) ^ - (Te4_1[byte(t1, 1)]) ^ - (Te4_0[byte(t2, 0)]) ^ + (Te4_3[LTC_BYTE(t3, 3)]) ^ + (Te4_2[LTC_BYTE(t0, 2)]) ^ + (Te4_1[LTC_BYTE(t1, 1)]) ^ + (Te4_0[LTC_BYTE(t2, 0)]) ^ rk[3]; STORE32H(s3, ct+12); @@ -490,28 +490,28 @@ for (r = 0; ; r++) { rk += 4; t0 = - Td0(byte(s0, 3)) ^ - Td1(byte(s3, 2)) ^ - Td2(byte(s2, 1)) ^ - Td3(byte(s1, 0)) ^ + Td0(LTC_BYTE(s0, 3)) ^ + Td1(LTC_BYTE(s3, 2)) ^ + Td2(LTC_BYTE(s2, 1)) ^ + Td3(LTC_BYTE(s1, 0)) ^ rk[0]; t1 = - Td0(byte(s1, 3)) ^ - Td1(byte(s0, 2)) ^ - Td2(byte(s3, 1)) ^ - Td3(byte(s2, 0)) ^ + Td0(LTC_BYTE(s1, 3)) ^ + Td1(LTC_BYTE(s0, 2)) ^ + Td2(LTC_BYTE(s3, 1)) ^ + Td3(LTC_BYTE(s2, 0)) ^ rk[1]; t2 = - Td0(byte(s2, 3)) ^ - Td1(byte(s1, 2)) ^ - Td2(byte(s0, 1)) ^ - Td3(byte(s3, 0)) ^ + Td0(LTC_BYTE(s2, 3)) ^ + Td1(LTC_BYTE(s1, 2)) ^ + Td2(LTC_BYTE(s0, 1)) ^ + Td3(LTC_BYTE(s3, 0)) ^ rk[2]; t3 = - Td0(byte(s3, 3)) ^ - Td1(byte(s2, 2)) ^ - Td2(byte(s1, 1)) ^ - Td3(byte(s0, 0)) ^ + Td0(LTC_BYTE(s3, 3)) ^ + Td1(LTC_BYTE(s2, 2)) ^ + Td2(LTC_BYTE(s1, 1)) ^ + Td3(LTC_BYTE(s0, 0)) ^ rk[3]; if (r == Nr-2) { break; @@ -529,28 +529,28 @@ for (;;) { t0 = - Td0(byte(s0, 3)) ^ - Td1(byte(s3, 2)) ^ - Td2(byte(s2, 1)) ^ - Td3(byte(s1, 0)) ^ + Td0(LTC_BYTE(s0, 3)) ^ + Td1(LTC_BYTE(s3, 2)) ^ + Td2(LTC_BYTE(s2, 1)) ^ + Td3(LTC_BYTE(s1, 0)) ^ rk[4]; t1 = - Td0(byte(s1, 3)) ^ - Td1(byte(s0, 2)) ^ - Td2(byte(s3, 1)) ^ - Td3(byte(s2, 0)) ^ + Td0(LTC_BYTE(s1, 3)) ^ + Td1(LTC_BYTE(s0, 2)) ^ + Td2(LTC_BYTE(s3, 1)) ^ + Td3(LTC_BYTE(s2, 0)) ^ rk[5]; t2 = - Td0(byte(s2, 3)) ^ - Td1(byte(s1, 2)) ^ - Td2(byte(s0, 1)) ^ - Td3(byte(s3, 0)) ^ + Td0(LTC_BYTE(s2, 3)) ^ + Td1(LTC_BYTE(s1, 2)) ^ + Td2(LTC_BYTE(s0, 1)) ^ + Td3(LTC_BYTE(s3, 0)) ^ rk[6]; t3 = - Td0(byte(s3, 3)) ^ - Td1(byte(s2, 2)) ^ - Td2(byte(s1, 1)) ^ - Td3(byte(s0, 0)) ^ + Td0(LTC_BYTE(s3, 3)) ^ + Td1(LTC_BYTE(s2, 2)) ^ + Td2(LTC_BYTE(s1, 1)) ^ + Td3(LTC_BYTE(s0, 0)) ^ rk[7]; rk += 8; @@ -560,28 +560,28 @@ s0 = - Td0(byte(t0, 3)) ^ - Td1(byte(t3, 2)) ^ - Td2(byte(t2, 1)) ^ - Td3(byte(t1, 0)) ^ + Td0(LTC_BYTE(t0, 3)) ^ + Td1(LTC_BYTE(t3, 2)) ^ + Td2(LTC_BYTE(t2, 1)) ^ + Td3(LTC_BYTE(t1, 0)) ^ rk[0]; s1 = - Td0(byte(t1, 3)) ^ - Td1(byte(t0, 2)) ^ - Td2(byte(t3, 1)) ^ - Td3(byte(t2, 0)) ^ + Td0(LTC_BYTE(t1, 3)) ^ + Td1(LTC_BYTE(t0, 2)) ^ + Td2(LTC_BYTE(t3, 1)) ^ + Td3(LTC_BYTE(t2, 0)) ^ rk[1]; s2 = - Td0(byte(t2, 3)) ^ - Td1(byte(t1, 2)) ^ - Td2(byte(t0, 1)) ^ - Td3(byte(t3, 0)) ^ + Td0(LTC_BYTE(t2, 3)) ^ + Td1(LTC_BYTE(t1, 2)) ^ + Td2(LTC_BYTE(t0, 1)) ^ + Td3(LTC_BYTE(t3, 0)) ^ rk[2]; s3 = - Td0(byte(t3, 3)) ^ - Td1(byte(t2, 2)) ^ - Td2(byte(t1, 1)) ^ - Td3(byte(t0, 0)) ^ + Td0(LTC_BYTE(t3, 3)) ^ + Td1(LTC_BYTE(t2, 2)) ^ + Td2(LTC_BYTE(t1, 1)) ^ + Td3(LTC_BYTE(t0, 0)) ^ rk[3]; } #endif @@ -591,31 +591,31 @@ * map cipher state to byte array block: */ s0 = - (Td4[byte(t0, 3)] & 0xff000000) ^ - (Td4[byte(t3, 2)] & 0x00ff0000) ^ - (Td4[byte(t2, 1)] & 0x0000ff00) ^ - (Td4[byte(t1, 0)] & 0x000000ff) ^ + (Td4[LTC_BYTE(t0, 3)] & 0xff000000) ^ + (Td4[LTC_BYTE(t3, 2)] & 0x00ff0000) ^ + (Td4[LTC_BYTE(t2, 1)] & 0x0000ff00) ^ + (Td4[LTC_BYTE(t1, 0)] & 0x000000ff) ^ rk[0]; STORE32H(s0, pt); s1 = - (Td4[byte(t1, 3)] & 0xff000000) ^ - (Td4[byte(t0, 2)] & 0x00ff0000) ^ - (Td4[byte(t3, 1)] & 0x0000ff00) ^ - (Td4[byte(t2, 0)] & 0x000000ff) ^ + (Td4[LTC_BYTE(t1, 3)] & 0xff000000) ^ + (Td4[LTC_BYTE(t0, 2)] & 0x00ff0000) ^ + (Td4[LTC_BYTE(t3, 1)] & 0x0000ff00) ^ + (Td4[LTC_BYTE(t2, 0)] & 0x000000ff) ^ rk[1]; STORE32H(s1, pt+4); s2 = - (Td4[byte(t2, 3)] & 0xff000000) ^ - (Td4[byte(t1, 2)] & 0x00ff0000) ^ - (Td4[byte(t0, 1)] & 0x0000ff00) ^ - (Td4[byte(t3, 0)] & 0x000000ff) ^ + (Td4[LTC_BYTE(t2, 3)] & 0xff000000) ^ + (Td4[LTC_BYTE(t1, 2)] & 0x00ff0000) ^ + (Td4[LTC_BYTE(t0, 1)] & 0x0000ff00) ^ + (Td4[LTC_BYTE(t3, 0)] & 0x000000ff) ^ rk[2]; STORE32H(s2, pt+8); s3 = - (Td4[byte(t3, 3)] & 0xff000000) ^ - (Td4[byte(t2, 2)] & 0x00ff0000) ^ - (Td4[byte(t1, 1)] & 0x0000ff00) ^ - (Td4[byte(t0, 0)] & 0x000000ff) ^ + (Td4[LTC_BYTE(t3, 3)] & 0xff000000) ^ + (Td4[LTC_BYTE(t2, 2)] & 0x00ff0000) ^ + (Td4[LTC_BYTE(t1, 1)] & 0x0000ff00) ^ + (Td4[LTC_BYTE(t0, 0)] & 0x000000ff) ^ rk[3]; STORE32H(s3, pt+12); @@ -723,18 +723,19 @@ { LTC_ARGCHK(keysize != NULL); - if (*keysize < 16) + if (*keysize < 16) { return CRYPT_INVALID_KEYSIZE; + } if (*keysize < 24) { *keysize = 16; return CRYPT_OK; - } else if (*keysize < 32) { + } + if (*keysize < 32) { *keysize = 24; return CRYPT_OK; - } else { - *keysize = 32; - return CRYPT_OK; } + *keysize = 32; + return CRYPT_OK; } #endif diff --git a/src/ltc/ciphers/anubis.c b/src/ltc/ciphers/anubis.c index 7bc3590..e0d7424 100644 --- a/src/ltc/ciphers/anubis.c +++ b/src/ltc/ciphers/anubis.c @@ -30,15 +30,7 @@ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; -#define MIN_N 4 #define MAX_N 10 -#define MIN_ROUNDS (8 + MIN_N) -#define MAX_ROUNDS (8 + MAX_N) -#define MIN_KEYSIZEB (4*MIN_N) -#define MAX_KEYSIZEB (4*MAX_N) -#define BLOCKSIZE 128 -#define BLOCKSIZEB (BLOCKSIZE/8) - /* * Though Anubis is endianness-neutral, the encryption tables are listed diff --git a/src/ltc/ciphers/blowfish.c b/src/ltc/ciphers/blowfish.c index caeb46e..b53e05b 100644 --- a/src/ltc/ciphers/blowfish.c +++ b/src/ltc/ciphers/blowfish.c @@ -373,9 +373,9 @@ } #ifndef __GNUC__ -#define F(x) ((S1[byte(x,3)] + S2[byte(x,2)]) ^ S3[byte(x,1)]) + S4[byte(x,0)] +#define F(x) ((S1[LTC_BYTE(x,3)] + S2[LTC_BYTE(x,2)]) ^ S3[LTC_BYTE(x,1)]) + S4[LTC_BYTE(x,0)] #else -#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)] +#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)] #endif /** @@ -580,7 +580,8 @@ if (*keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } else if (*keysize > 56) { + } + if (*keysize > 56) { *keysize = 56; } return CRYPT_OK; diff --git a/src/ltc/ciphers/cast5.c b/src/ltc/ciphers/cast5.c index 1089ade..d69dafc 100644 --- a/src/ltc/ciphers/cast5.c +++ b/src/ltc/ciphers/cast5.c @@ -508,7 +508,7 @@ ulong32 I; I = (Km + R); I = ROL(I, Kr); - return ((S1[byte(I, 3)] ^ S2[byte(I,2)]) - S3[byte(I,1)]) + S4[byte(I,0)]; + return ((S1[LTC_BYTE(I, 3)] ^ S2[LTC_BYTE(I,2)]) - S3[LTC_BYTE(I,1)]) + S4[LTC_BYTE(I,0)]; } INLINE static ulong32 FII(ulong32 R, ulong32 Km, ulong32 Kr) @@ -516,7 +516,7 @@ ulong32 I; I = (Km ^ R); I = ROL(I, Kr); - return ((S1[byte(I, 3)] - S2[byte(I,2)]) + S3[byte(I,1)]) ^ S4[byte(I,0)]; + return ((S1[LTC_BYTE(I, 3)] - S2[LTC_BYTE(I,2)]) + S3[LTC_BYTE(I,1)]) ^ S4[LTC_BYTE(I,0)]; } INLINE static ulong32 FIII(ulong32 R, ulong32 Km, ulong32 Kr) @@ -524,7 +524,7 @@ ulong32 I; I = (Km - R); I = ROL(I, Kr); - return ((S1[byte(I, 3)] + S2[byte(I,2)]) ^ S3[byte(I,1)]) - S4[byte(I,0)]; + return ((S1[LTC_BYTE(I, 3)] + S2[LTC_BYTE(I,2)]) ^ S3[LTC_BYTE(I,1)]) - S4[LTC_BYTE(I,0)]; } /** @@ -707,7 +707,8 @@ LTC_ARGCHK(keysize != NULL); if (*keysize < 5) { return CRYPT_INVALID_KEYSIZE; - } else if (*keysize > 16) { + } + if (*keysize > 16) { *keysize = 16; } return CRYPT_OK; diff --git a/src/ltc/ciphers/des.c b/src/ltc/ciphers/des.c index a72fdf5..44907dd 100644 --- a/src/ltc/ciphers/des.c +++ b/src/ltc/ciphers/des.c @@ -1432,14 +1432,14 @@ #else { ulong64 tmp; - tmp = des_ip[0][byte(leftt, 0)] ^ - des_ip[1][byte(leftt, 1)] ^ - des_ip[2][byte(leftt, 2)] ^ - des_ip[3][byte(leftt, 3)] ^ - des_ip[4][byte(right, 0)] ^ - des_ip[5][byte(right, 1)] ^ - des_ip[6][byte(right, 2)] ^ - des_ip[7][byte(right, 3)]; + tmp = des_ip[0][LTC_BYTE(leftt, 0)] ^ + des_ip[1][LTC_BYTE(leftt, 1)] ^ + des_ip[2][LTC_BYTE(leftt, 2)] ^ + des_ip[3][LTC_BYTE(leftt, 3)] ^ + des_ip[4][LTC_BYTE(right, 0)] ^ + des_ip[5][LTC_BYTE(right, 1)] ^ + des_ip[6][LTC_BYTE(right, 2)] ^ + des_ip[7][LTC_BYTE(right, 3)]; leftt = (ulong32)(tmp >> 32); right = (ulong32)(tmp & 0xFFFFFFFFUL); } @@ -1491,14 +1491,14 @@ #else { ulong64 tmp; - tmp = des_fp[0][byte(leftt, 0)] ^ - des_fp[1][byte(leftt, 1)] ^ - des_fp[2][byte(leftt, 2)] ^ - des_fp[3][byte(leftt, 3)] ^ - des_fp[4][byte(right, 0)] ^ - des_fp[5][byte(right, 1)] ^ - des_fp[6][byte(right, 2)] ^ - des_fp[7][byte(right, 3)]; + tmp = des_fp[0][LTC_BYTE(leftt, 0)] ^ + des_fp[1][LTC_BYTE(leftt, 1)] ^ + des_fp[2][LTC_BYTE(leftt, 2)] ^ + des_fp[3][LTC_BYTE(leftt, 3)] ^ + des_fp[4][LTC_BYTE(right, 0)] ^ + des_fp[5][LTC_BYTE(right, 1)] ^ + des_fp[6][LTC_BYTE(right, 2)] ^ + des_fp[7][LTC_BYTE(right, 3)]; leftt = (ulong32)(tmp >> 32); right = (ulong32)(tmp & 0xFFFFFFFFUL); } @@ -2068,8 +2068,9 @@ int des3_keysize(int *keysize) { LTC_ARGCHK(keysize != NULL); - if (*keysize < 16) + if (*keysize < 16) { return CRYPT_INVALID_KEYSIZE; + } if (*keysize < 24) { *keysize = 16; return CRYPT_OK; diff --git a/src/ltc/ciphers/kasumi.c b/src/ltc/ciphers/kasumi.c index fba9b65..ccd84e5 100644 --- a/src/ltc/ciphers/kasumi.c +++ b/src/ltc/ciphers/kasumi.c @@ -243,9 +243,8 @@ if (*keysize >= 16) { *keysize = 16; return CRYPT_OK; - } else { - return CRYPT_INVALID_KEYSIZE; } + return CRYPT_INVALID_KEYSIZE; } int kasumi_test(void) diff --git a/src/ltc/ciphers/khazad.c b/src/ltc/ciphers/khazad.c index c8d8d7a..175d513 100644 --- a/src/ltc/ciphers/khazad.c +++ b/src/ltc/ciphers/khazad.c @@ -30,10 +30,6 @@ }; #define R 8 -#define KEYSIZE 128 -#define KEYSIZEB (KEYSIZE/8) -#define BLOCKSIZE 64 -#define BLOCKSIZEB (BLOCKSIZE/8) static const ulong64 T0[256] = { CONST64(0xbad3d268bbb96a01), CONST64(0x54fc4d19e59a66b1), CONST64(0x2f71bc93e26514cd), CONST64(0x749ccdb925871b51), @@ -843,9 +839,8 @@ if (*keysize >= 16) { *keysize = 16; return CRYPT_OK; - } else { - return CRYPT_INVALID_KEYSIZE; } + return CRYPT_INVALID_KEYSIZE; } #endif diff --git a/src/ltc/ciphers/noekeon.c b/src/ltc/ciphers/noekeon.c index c933d45..8850273 100644 --- a/src/ltc/ciphers/noekeon.c +++ b/src/ltc/ciphers/noekeon.c @@ -314,10 +314,9 @@ LTC_ARGCHK(keysize != NULL); if (*keysize < 16) { return CRYPT_INVALID_KEYSIZE; - } else { - *keysize = 16; - return CRYPT_OK; - } + } + *keysize = 16; + return CRYPT_OK; } #endif diff --git a/src/ltc/ciphers/rc2.c b/src/ltc/ciphers/rc2.c index 61219fe..ba09573 100644 --- a/src/ltc/ciphers/rc2.c +++ b/src/ltc/ciphers/rc2.c @@ -401,7 +401,8 @@ LTC_ARGCHK(keysize != NULL); if (*keysize < 1) { return CRYPT_INVALID_KEYSIZE; - } else if (*keysize > 128) { + } + if (*keysize > 128) { *keysize = 128; } return CRYPT_OK; diff --git a/src/ltc/ciphers/rc5.c b/src/ltc/ciphers/rc5.c index 41305f0..77951eb 100644 --- a/src/ltc/ciphers/rc5.c +++ b/src/ltc/ciphers/rc5.c @@ -308,7 +308,8 @@ LTC_ARGCHK(keysize != NULL); if (*keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } else if (*keysize > 128) { + } + if (*keysize > 128) { *keysize = 128; } return CRYPT_OK; diff --git a/src/ltc/ciphers/rc6.c b/src/ltc/ciphers/rc6.c index 1a71e50..6d4ee2a 100644 --- a/src/ltc/ciphers/rc6.c +++ b/src/ltc/ciphers/rc6.c @@ -318,7 +318,8 @@ LTC_ARGCHK(keysize != NULL); if (*keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } else if (*keysize > 128) { + } + if (*keysize > 128) { *keysize = 128; } return CRYPT_OK; diff --git a/src/ltc/ciphers/safer/safer.c b/src/ltc/ciphers/safer/safer.c index 913e193..61b394a 100644 --- a/src/ltc/ciphers/safer/safer.c +++ b/src/ltc/ciphers/safer/safer.c @@ -113,8 +113,9 @@ unsigned char ka[LTC_SAFER_BLOCK_LEN + 1]; unsigned char kb[LTC_SAFER_BLOCK_LEN + 1]; - if (LTC_SAFER_MAX_NOF_ROUNDS < nof_rounds) + if (LTC_SAFER_MAX_NOF_ROUNDS < nof_rounds) { nof_rounds = LTC_SAFER_MAX_NOF_ROUNDS; + } *key++ = (unsigned char)nof_rounds; ka[LTC_SAFER_BLOCK_LEN] = (unsigned char)0; kb[LTC_SAFER_BLOCK_LEN] = (unsigned char)0; @@ -176,12 +177,12 @@ } #endif -int safer_k64_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey) +int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); - if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) { + if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -189,16 +190,16 @@ return CRYPT_INVALID_KEYSIZE; } - Safer_Expand_Userkey(key, key, (unsigned int)(numrounds != 0 ?numrounds:LTC_SAFER_K64_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); - return CRYPT_OK; -} - -int safer_sk64_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey) + Safer_Expand_Userkey(key, key, (unsigned int)(num_rounds != 0 ?num_rounds:LTC_SAFER_K64_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); + return CRYPT_OK; +} + +int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); - if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) { + if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -206,16 +207,16 @@ return CRYPT_INVALID_KEYSIZE; } - Safer_Expand_Userkey(key, key, (unsigned int)(numrounds != 0 ?numrounds:LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); - return CRYPT_OK; -} - -int safer_k128_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey) + Safer_Expand_Userkey(key, key, (unsigned int)(num_rounds != 0 ?num_rounds:LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); + return CRYPT_OK; +} + +int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); - if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) { + if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -223,16 +224,16 @@ return CRYPT_INVALID_KEYSIZE; } - Safer_Expand_Userkey(key, key+8, (unsigned int)(numrounds != 0 ?numrounds:LTC_SAFER_K128_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); - return CRYPT_OK; -} - -int safer_sk128_setup(const unsigned char *key, int keylen, int numrounds, symmetric_key *skey) + Safer_Expand_Userkey(key, key+8, (unsigned int)(num_rounds != 0 ?num_rounds:LTC_SAFER_K128_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); + return CRYPT_OK; +} + +int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); - if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) { + if (num_rounds != 0 && (num_rounds < 6 || num_rounds > LTC_SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -240,30 +241,30 @@ return CRYPT_INVALID_KEYSIZE; } - Safer_Expand_Userkey(key, key+8, (unsigned int)(numrounds != 0?numrounds:LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); - return CRYPT_OK; -} - -#ifdef LTC_CLEAN_STACK -static int _safer_ecb_encrypt(const unsigned char *block_in, - unsigned char *block_out, + Safer_Expand_Userkey(key, key+8, (unsigned int)(num_rounds != 0?num_rounds:LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); + return CRYPT_OK; +} + +#ifdef LTC_CLEAN_STACK +static int _safer_ecb_encrypt(const unsigned char *pt, + unsigned char *ct, const symmetric_key *skey) #else -int safer_ecb_encrypt(const unsigned char *block_in, - unsigned char *block_out, +int safer_ecb_encrypt(const unsigned char *pt, + unsigned char *ct, const symmetric_key *skey) #endif { unsigned char a, b, c, d, e, f, g, h, t; unsigned int round; const unsigned char *key; - LTC_ARGCHK(block_in != NULL); - LTC_ARGCHK(block_out != NULL); + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); LTC_ARGCHK(skey != NULL); key = skey->safer.key; - a = block_in[0]; b = block_in[1]; c = block_in[2]; d = block_in[3]; - e = block_in[4]; f = block_in[5]; g = block_in[6]; h = block_in[7]; + a = pt[0]; b = pt[1]; c = pt[2]; d = pt[3]; + e = pt[4]; f = pt[5]; g = pt[6]; h = pt[7]; if (LTC_SAFER_MAX_NOF_ROUNDS < (round = *key)) round = LTC_SAFER_MAX_NOF_ROUNDS; while(round-- > 0) { @@ -280,44 +281,44 @@ } a ^= *++key; b += *++key; c += *++key; d ^= *++key; e ^= *++key; f += *++key; g += *++key; h ^= *++key; - block_out[0] = a & 0xFF; block_out[1] = b & 0xFF; - block_out[2] = c & 0xFF; block_out[3] = d & 0xFF; - block_out[4] = e & 0xFF; block_out[5] = f & 0xFF; - block_out[6] = g & 0xFF; block_out[7] = h & 0xFF; + ct[0] = a & 0xFF; ct[1] = b & 0xFF; + ct[2] = c & 0xFF; ct[3] = d & 0xFF; + ct[4] = e & 0xFF; ct[5] = f & 0xFF; + ct[6] = g & 0xFF; ct[7] = h & 0xFF; return CRYPT_OK; } #ifdef LTC_CLEAN_STACK -int safer_ecb_encrypt(const unsigned char *block_in, - unsigned char *block_out, - const symmetric_key *skey) -{ - int err = _safer_ecb_encrypt(block_in, block_out, skey); +int safer_ecb_encrypt(const unsigned char *pt, + unsigned char *ct, + const symmetric_key *skey) +{ + int err = _safer_ecb_encrypt(pt, ct, skey); burn_stack(sizeof(unsigned char) * 9 + sizeof(unsigned int) + sizeof(unsigned char *)); return err; } #endif #ifdef LTC_CLEAN_STACK -static int _safer_ecb_decrypt(const unsigned char *block_in, - unsigned char *block_out, +static int _safer_ecb_decrypt(const unsigned char *ct, + unsigned char *pt, const symmetric_key *skey) #else -int safer_ecb_decrypt(const unsigned char *block_in, - unsigned char *block_out, +int safer_ecb_decrypt(const unsigned char *ct, + unsigned char *pt, const symmetric_key *skey) #endif { unsigned char a, b, c, d, e, f, g, h, t; unsigned int round; const unsigned char *key; - LTC_ARGCHK(block_in != NULL); - LTC_ARGCHK(block_out != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(pt != NULL); LTC_ARGCHK(skey != NULL); key = skey->safer.key; - a = block_in[0]; b = block_in[1]; c = block_in[2]; d = block_in[3]; - e = block_in[4]; f = block_in[5]; g = block_in[6]; h = block_in[7]; + a = ct[0]; b = ct[1]; c = ct[2]; d = ct[3]; + e = ct[4]; f = ct[5]; g = ct[6]; h = ct[7]; if (LTC_SAFER_MAX_NOF_ROUNDS < (round = *key)) round = LTC_SAFER_MAX_NOF_ROUNDS; key += LTC_SAFER_BLOCK_LEN * (1 + 2 * round); h ^= *key; g -= *--key; f -= *--key; e ^= *--key; @@ -335,19 +336,19 @@ d = LOG(d) ^ *--key; c = EXP(c) - *--key; b = EXP(b) - *--key; a = LOG(a) ^ *--key; } - block_out[0] = a & 0xFF; block_out[1] = b & 0xFF; - block_out[2] = c & 0xFF; block_out[3] = d & 0xFF; - block_out[4] = e & 0xFF; block_out[5] = f & 0xFF; - block_out[6] = g & 0xFF; block_out[7] = h & 0xFF; + pt[0] = a & 0xFF; pt[1] = b & 0xFF; + pt[2] = c & 0xFF; pt[3] = d & 0xFF; + pt[4] = e & 0xFF; pt[5] = f & 0xFF; + pt[6] = g & 0xFF; pt[7] = h & 0xFF; return CRYPT_OK; } #ifdef LTC_CLEAN_STACK -int safer_ecb_decrypt(const unsigned char *block_in, - unsigned char *block_out, - const symmetric_key *skey) -{ - int err = _safer_ecb_decrypt(block_in, block_out, skey); +int safer_ecb_decrypt(const unsigned char *ct, + unsigned char *pt, + const symmetric_key *skey) +{ + int err = _safer_ecb_decrypt(ct, pt, skey); burn_stack(sizeof(unsigned char) * 9 + sizeof(unsigned int) + sizeof(unsigned char *)); return err; } @@ -358,10 +359,9 @@ LTC_ARGCHK(keysize != NULL); if (*keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } else { - *keysize = 8; - return CRYPT_OK; - } + } + *keysize = 8; + return CRYPT_OK; } int safer_128_keysize(int *keysize) @@ -369,10 +369,9 @@ LTC_ARGCHK(keysize != NULL); if (*keysize < 16) { return CRYPT_INVALID_KEYSIZE; - } else { - *keysize = 16; - return CRYPT_OK; - } + } + *keysize = 16; + return CRYPT_OK; } int safer_k64_test(void) diff --git a/src/ltc/ciphers/safer/saferp.c b/src/ltc/ciphers/safer/saferp.c index e6e1c90..562b2e9 100644 --- a/src/ltc/ciphers/safer/saferp.c +++ b/src/ltc/ciphers/safer/saferp.c @@ -547,8 +547,9 @@ { LTC_ARGCHK(keysize != NULL); - if (*keysize < 16) + if (*keysize < 16) { return CRYPT_INVALID_KEYSIZE; + } if (*keysize < 24) { *keysize = 16; } else if (*keysize < 32) { diff --git a/src/ltc/ciphers/skipjack.c b/src/ltc/ciphers/skipjack.c index 8726af2..8df1f85 100644 --- a/src/ltc/ciphers/skipjack.c +++ b/src/ltc/ciphers/skipjack.c @@ -330,7 +330,8 @@ LTC_ARGCHK(keysize != NULL); if (*keysize < 10) { return CRYPT_INVALID_KEYSIZE; - } else if (*keysize > 10) { + } + if (*keysize > 10) { *keysize = 10; } return CRYPT_OK; diff --git a/src/ltc/ciphers/twofish/twofish.c b/src/ltc/ciphers/twofish/twofish.c index cbc85fa..c7965f6 100644 --- a/src/ltc/ciphers/twofish/twofish.c +++ b/src/ltc/ciphers/twofish/twofish.c @@ -37,8 +37,12 @@ }; /* the two polynomials */ +#ifndef LTC_TWOFISH_TABLES #define MDS_POLY 0x169 +#endif +#ifndef LTC_TWOFISH_ALL_TABLES #define RS_POLY 0x14D +#endif /* The 4x8 RS Linear Transform */ static const unsigned char RS[4][8] = { @@ -278,8 +282,8 @@ #endif /* the G function */ -#define g_func(x, dum) (S1[byte(x,0)] ^ S2[byte(x,1)] ^ S3[byte(x,2)] ^ S4[byte(x,3)]) -#define g1_func(x, dum) (S2[byte(x,0)] ^ S3[byte(x,1)] ^ S4[byte(x,2)] ^ S1[byte(x,3)]) +#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)]) +#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)]) #else @@ -689,23 +693,22 @@ int twofish_keysize(int *keysize) { LTC_ARGCHK(keysize); - if (*keysize < 16) + if (*keysize < 16) { return CRYPT_INVALID_KEYSIZE; + } if (*keysize < 24) { *keysize = 16; return CRYPT_OK; - } else if (*keysize < 32) { + } + if (*keysize < 32) { *keysize = 24; return CRYPT_OK; - } else { - *keysize = 32; - return CRYPT_OK; - } -} - -#endif - - + } + *keysize = 32; + return CRYPT_OK; +} + +#endif /* ref: $Format:%D$ */ diff --git a/src/ltc/encauth/ccm/ccm_init.c b/src/ltc/encauth/ccm/ccm_init.c index 20c2a17..b1bd12d 100644 --- a/src/ltc/encauth/ccm/ccm_init.c +++ b/src/ltc/encauth/ccm/ccm_init.c @@ -29,7 +29,6 @@ LTC_ARGCHK(ccm != NULL); LTC_ARGCHK(key != NULL); - LTC_ARGCHK(taglen != 0); XMEMSET(ccm, 0, sizeof(ccm_state)); @@ -41,17 +40,11 @@ return CRYPT_INVALID_CIPHER; } - /* make sure the taglen is even and <= 16 */ - ccm->taglen = taglen; - ccm->taglen &= ~1; - if (ccm->taglen > 16) { - ccm->taglen = 16; - } - - /* can't use < 4 */ - if (ccm->taglen < 4) { + /* make sure the taglen is valid */ + if (taglen < 4 || taglen > 16 || (taglen % 2) == 1) { return CRYPT_INVALID_ARG; } + ccm->taglen = taglen; /* schedule key */ if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, &ccm->K)) != CRYPT_OK) { diff --git a/src/ltc/encauth/ccm/ccm_memory.c b/src/ltc/encauth/ccm/ccm_memory.c index 40ecba6..7280133 100644 --- a/src/ltc/encauth/ccm/ccm_memory.c +++ b/src/ltc/encauth/ccm/ccm_memory.c @@ -80,14 +80,8 @@ return CRYPT_INVALID_CIPHER; } - /* make sure the taglen is even and <= 16 */ - *taglen &= ~1; - if (*taglen > 16) { - *taglen = 16; - } - - /* can't use < 4 */ - if (*taglen < 4) { + /* make sure the taglen is valid */ + if (*taglen < 4 || *taglen > 16 || (*taglen % 2) == 1) { return CRYPT_INVALID_ARG; } diff --git a/src/ltc/encauth/chachapoly/chacha20poly1305_decrypt.c b/src/ltc/encauth/chachapoly/chacha20poly1305_decrypt.c index f19cf18..493404f 100644 --- a/src/ltc/encauth/chachapoly/chacha20poly1305_decrypt.c +++ b/src/ltc/encauth/chachapoly/chacha20poly1305_decrypt.c @@ -25,7 +25,6 @@ unsigned long padlen; int err; - if (inlen == 0) return CRYPT_OK; /* nothing to do */ LTC_ARGCHK(st != NULL); if (st->aadflg) { diff --git a/src/ltc/encauth/chachapoly/chacha20poly1305_encrypt.c b/src/ltc/encauth/chachapoly/chacha20poly1305_encrypt.c index aeecc18..04c5515 100644 --- a/src/ltc/encauth/chachapoly/chacha20poly1305_encrypt.c +++ b/src/ltc/encauth/chachapoly/chacha20poly1305_encrypt.c @@ -25,7 +25,6 @@ unsigned long padlen; int err; - if (inlen == 0) return CRYPT_OK; /* nothing to do */ LTC_ARGCHK(st != NULL); if ((err = chacha_crypt(&st->chacha, in, inlen, out)) != CRYPT_OK) return err; diff --git a/src/ltc/encauth/chachapoly/chacha20poly1305_memory.c b/src/ltc/encauth/chachapoly/chacha20poly1305_memory.c index 34da912..ddd0517 100644 --- a/src/ltc/encauth/chachapoly/chacha20poly1305_memory.c +++ b/src/ltc/encauth/chachapoly/chacha20poly1305_memory.c @@ -43,6 +43,7 @@ LTC_ARGCHK(in != NULL); LTC_ARGCHK(out != NULL); LTC_ARGCHK(tag != NULL); + LTC_ARGCHK(taglen != NULL); if ((err = chacha20poly1305_init(&st, key, keylen)) != CRYPT_OK) { goto LBL_ERR; } if ((err = chacha20poly1305_setiv(&st, iv, ivlen)) != CRYPT_OK) { goto LBL_ERR; } @@ -51,15 +52,22 @@ } if (direction == CHACHA20POLY1305_ENCRYPT) { if ((err = chacha20poly1305_encrypt(&st, in, inlen, out)) != CRYPT_OK) { goto LBL_ERR; } + if ((err = chacha20poly1305_done(&st, tag, taglen)) != CRYPT_OK) { goto LBL_ERR; } } else if (direction == CHACHA20POLY1305_DECRYPT) { + unsigned char buf[MAXBLOCKSIZE]; + unsigned long buflen = sizeof(buf); if ((err = chacha20poly1305_decrypt(&st, in, inlen, out)) != CRYPT_OK) { goto LBL_ERR; } + if ((err = chacha20poly1305_done(&st, buf, &buflen)) != CRYPT_OK) { goto LBL_ERR; } + if (buflen != *taglen || XMEM_NEQ(buf, tag, buflen) != 0) { + err = CRYPT_ERROR; + goto LBL_ERR; + } } else { err = CRYPT_INVALID_ARG; goto LBL_ERR; } - err = chacha20poly1305_done(&st, tag, taglen); LBL_ERR: #ifdef LTC_CLEAN_STACK zeromem(&st, sizeof(chacha20poly1305_state)); diff --git a/src/ltc/encauth/gcm/gcm_memory.c b/src/ltc/encauth/gcm/gcm_memory.c index b318f7c..a9c6ac6 100644 --- a/src/ltc/encauth/gcm/gcm_memory.c +++ b/src/ltc/encauth/gcm/gcm_memory.c @@ -93,7 +93,24 @@ if ((err = gcm_process(gcm, pt, ptlen, ct, direction)) != CRYPT_OK) { goto LTC_ERR; } - err = gcm_done(gcm, tag, taglen); + if (direction == GCM_ENCRYPT) { + if ((err = gcm_done(gcm, tag, taglen)) != CRYPT_OK) { + goto LTC_ERR; + } + } + else if (direction == GCM_DECRYPT) { + unsigned char buf[MAXBLOCKSIZE]; + unsigned long buflen = sizeof(buf); + if ((err = gcm_done(gcm, buf, &buflen)) != CRYPT_OK) { + goto LTC_ERR; + } + if (buflen != *taglen || XMEM_NEQ(buf, tag, buflen) != 0) { + err = CRYPT_ERROR; + } + } + else { + err = CRYPT_INVALID_ARG; + } LTC_ERR: XFREE(orig); return err; diff --git a/src/ltc/encauth/ocb3/ocb3_decrypt_last.c b/src/ltc/encauth/ocb3/ocb3_decrypt_last.c index cb0b6ea..2b5158c 100644 --- a/src/ltc/encauth/ocb3/ocb3_decrypt_last.c +++ b/src/ltc/encauth/ocb3/ocb3_decrypt_last.c @@ -66,10 +66,11 @@ /* Checksum_* = Checksum_m xor (P_* || 1 || zeros(127-bitlen(P_*))) */ ocb3_int_xor_blocks(ocb->checksum, ocb->checksum, pt+full_blocks_len, last_block_len); for(x=last_block_len; xblock_len; x++) { - if (x == last_block_len) + if (x == last_block_len) { ocb->checksum[x] ^= 0x80; - else + } else { ocb->checksum[x] ^= 0x00; + } } /* Tag = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) xor HASH(K,A) */ diff --git a/src/ltc/encauth/ocb3/ocb3_encrypt_last.c b/src/ltc/encauth/ocb3/ocb3_encrypt_last.c index 5834ef4..0334305 100644 --- a/src/ltc/encauth/ocb3/ocb3_encrypt_last.c +++ b/src/ltc/encauth/ocb3/ocb3_encrypt_last.c @@ -68,10 +68,11 @@ /* Checksum_* = Checksum_m xor (P_* || 1 || zeros(127-bitlen(P_*))) */ ocb3_int_xor_blocks(ocb->checksum, ocb->checksum, pt+full_blocks_len, last_block_len); for(x=last_block_len; xblock_len; x++) { - if (x == last_block_len) + if (x == last_block_len) { ocb->checksum[x] ^= 0x80; - else + } else { ocb->checksum[x] ^= 0x00; + } } /* Tag = ENCIPHER(K, Checksum_* xor Offset_* xor L_$) xor HASH(K,A) */ @@ -82,8 +83,7 @@ if ((err = cipher_descriptor[ocb->cipher].ecb_encrypt(ocb->tag_part, ocb->tag_part, &ocb->key)) != CRYPT_OK) { goto LBL_ERR; } - } - else { + } else { /* Tag = ENCIPHER(K, Checksum_m xor Offset_m xor L_$) xor HASH(K,A) */ /* at this point we calculate only: Tag_part = ENCIPHER(K, Checksum_m xor Offset_m xor L_$) */ for(x=0; xblock_len; x++) { diff --git a/src/ltc/hashes/blake2b.c b/src/ltc/hashes/blake2b.c index 6b91a85..0f6f0c0 100644 --- a/src/ltc/hashes/blake2b.c +++ b/src/ltc/hashes/blake2b.c @@ -160,9 +160,9 @@ static void blake2b_set_lastblock(hash_state *md) { - if (md->blake2b.last_node) + if (md->blake2b.last_node) { blake2b_set_lastnode(md); - + } md->blake2b.f[0] = CONST64(0xffffffffffffffff); } @@ -177,8 +177,9 @@ unsigned long i; XMEMSET(&md->blake2b, 0, sizeof(md->blake2b)); - for (i = 0; i < 8; ++i) + for (i = 0; i < 8; ++i) { md->blake2b.h[i] = blake2b_IV[i]; + } } /* init xors IV with input parameter block */ @@ -219,11 +220,12 @@ LTC_ARGCHK(md != NULL); - if ((!outlen) || (outlen > BLAKE2B_OUTBYTES)) + if ((!outlen) || (outlen > BLAKE2B_OUTBYTES)) { return CRYPT_INVALID_ARG; - - if ((key && !keylen) || (keylen && !key) || (keylen > BLAKE2B_KEYBYTES)) + } + if ((key && !keylen) || (keylen && !key) || (keylen > BLAKE2B_KEYBYTES)) { return CRYPT_INVALID_ARG; + } XMEMSET(P, 0, sizeof(P)); @@ -416,16 +418,18 @@ /* if(md->blakebs.outlen != outlen) return CRYPT_INVALID_ARG; */ - if (blake2b_is_lastblock(md)) + if (blake2b_is_lastblock(md)) { return CRYPT_ERROR; + } blake2b_increment_counter(md, md->blake2b.curlen); blake2b_set_lastblock(md); XMEMSET(md->blake2b.buf + md->blake2b.curlen, 0, BLAKE2B_BLOCKBYTES - md->blake2b.curlen); /* Padding */ blake2b_compress(md, md->blake2b.buf); - for (i = 0; i < 8; ++i) /* Output full hash to temp buffer */ + for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */ STORE64L(md->blake2b.h[i], buffer + i * 8); + } XMEMCPY(out, buffer, md->blake2b.outlen); zeromem(md, sizeof(hash_state)); diff --git a/src/ltc/hashes/blake2s.c b/src/ltc/hashes/blake2s.c index 96439eb..2714ce6 100644 --- a/src/ltc/hashes/blake2s.c +++ b/src/ltc/hashes/blake2s.c @@ -152,9 +152,9 @@ static void blake2s_set_lastblock(hash_state *md) { - if (md->blake2s.last_node) + if (md->blake2s.last_node) { blake2s_set_lastnode(md); - + } md->blake2s.f[0] = 0xffffffffUL; } @@ -169,8 +169,9 @@ int i; XMEMSET(&md->blake2s, 0, sizeof(struct blake2s_state)); - for (i = 0; i < 8; ++i) + for (i = 0; i < 8; ++i) { md->blake2s.h[i] = blake2s_IV[i]; + } return CRYPT_OK; } @@ -213,11 +214,12 @@ LTC_ARGCHK(md != NULL); - if ((!outlen) || (outlen > BLAKE2S_OUTBYTES)) + if ((!outlen) || (outlen > BLAKE2S_OUTBYTES)) { return CRYPT_INVALID_ARG; - - if ((key && !keylen) || (keylen && !key) || (keylen > BLAKE2S_KEYBYTES)) + } + if ((key && !keylen) || (keylen && !key) || (keylen > BLAKE2S_KEYBYTES)) { return CRYPT_INVALID_ARG; + } XMEMSET(P, 0, sizeof(P)); @@ -308,8 +310,9 @@ LOAD32L(m[i], buf + i * sizeof(m[i])); } - for (i = 0; i < 8; ++i) + for (i = 0; i < 8; ++i) { v[i] = md->blake2s.h[i]; + } v[8] = blake2s_IV[0]; v[9] = blake2s_IV[1]; @@ -331,9 +334,9 @@ ROUND(8); ROUND(9); - for (i = 0; i < 8; ++i) + for (i = 0; i < 8; ++i) { md->blake2s.h[i] = md->blake2s.h[i] ^ v[i] ^ v[i + 8]; - + } return CRYPT_OK; } #undef G @@ -404,16 +407,17 @@ /* if(md->blake2s.outlen != outlen) return CRYPT_INVALID_ARG; */ - if (blake2s_is_lastblock(md)) + if (blake2s_is_lastblock(md)) { return CRYPT_ERROR; - + } blake2s_increment_counter(md, md->blake2s.curlen); blake2s_set_lastblock(md); XMEMSET(md->blake2s.buf + md->blake2s.curlen, 0, BLAKE2S_BLOCKBYTES - md->blake2s.curlen); /* Padding */ blake2s_compress(md, md->blake2s.buf); - for (i = 0; i < 8; ++i) /* Output full hash to temp buffer */ + for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */ STORE32L(md->blake2s.h[i], buffer + i * 4); + } XMEMCPY(out, buffer, md->blake2s.outlen); zeromem(md, sizeof(hash_state)); diff --git a/src/ltc/hashes/chc/chc.c b/src/ltc/hashes/chc/chc.c index bcb6947..0a526d6 100644 --- a/src/ltc/hashes/chc/chc.c +++ b/src/ltc/hashes/chc/chc.c @@ -160,7 +160,7 @@ @param len The length of the data (octets) @return CRYPT_OK if successful */ -static int _chc_process(hash_state * md, const unsigned char *buf, unsigned long len); +static int _chc_process(hash_state * md, const unsigned char *in, unsigned long inlen); static HASH_PROCESS(_chc_process, chc_compress, chc, (unsigned long)cipher_blocksize) /** diff --git a/src/ltc/hashes/sha3.c b/src/ltc/hashes/sha3.c index d9bbc8a..180344e 100644 --- a/src/ltc/hashes/sha3.c +++ b/src/ltc/hashes/sha3.c @@ -167,13 +167,14 @@ for(round = 0; round < SHA3_KECCAK_ROUNDS; round++) { /* Theta */ - for(i = 0; i < 5; i++) + for(i = 0; i < 5; i++) { bc[i] = s[i] ^ s[i + 5] ^ s[i + 10] ^ s[i + 15] ^ s[i + 20]; - + } for(i = 0; i < 5; i++) { t = bc[(i + 4) % 5] ^ ROL64(bc[(i + 1) % 5], 1); - for(j = 0; j < 25; j += 5) + for(j = 0; j < 25; j += 5) { s[j + i] ^= t; + } } /* Rho Pi */ t = s[1]; @@ -185,10 +186,12 @@ } /* Chi */ for(j = 0; j < 25; j += 5) { - for(i = 0; i < 5; i++) + for(i = 0; i < 5; i++) { bc[i] = s[j + i]; - for(i = 0; i < 5; i++) + } + for(i = 0; i < 5; i++) { s[j + i] ^= (~bc[(i + 1) % 5]) & bc[(i + 2) % 5]; + } } /* Iota */ s[0] ^= keccakf_rndc[round]; @@ -313,16 +316,16 @@ } #ifdef LTC_SHA3 -int sha3_done(hash_state *md, unsigned char *hash) -{ - return _done(md, hash, CONST64(0x06)); +int sha3_done(hash_state *md, unsigned char *out) +{ + return _done(md, out, CONST64(0x06)); } #endif #ifdef LTC_KECCAK -int keccak_done(hash_state *md, unsigned char *hash) -{ - return _done(md, hash, CONST64(0x01)); +int keccak_done(hash_state *md, unsigned char *out) +{ + return _done(md, out, CONST64(0x01)); } #endif diff --git a/src/ltc/hashes/tiger.c b/src/ltc/hashes/tiger.c index 0d3ba10..970582d 100644 --- a/src/ltc/hashes/tiger.c +++ b/src/ltc/hashes/tiger.c @@ -564,8 +564,8 @@ { ulong64 tmp; tmp = (*c ^= x); - *a -= t1[byte(tmp, 0)] ^ t2[byte(tmp, 2)] ^ t3[byte(tmp, 4)] ^ t4[byte(tmp, 6)]; - tmp = (*b += t4[byte(tmp, 1)] ^ t3[byte(tmp, 3)] ^ t2[byte(tmp,5)] ^ t1[byte(tmp,7)]); + *a -= t1[LTC_BYTE(tmp, 0)] ^ t2[LTC_BYTE(tmp, 2)] ^ t3[LTC_BYTE(tmp, 4)] ^ t4[LTC_BYTE(tmp, 6)]; + tmp = (*b += t4[LTC_BYTE(tmp, 1)] ^ t3[LTC_BYTE(tmp, 3)] ^ t2[LTC_BYTE(tmp,5)] ^ t1[LTC_BYTE(tmp,7)]); switch (mul) { case 5: *b = (tmp << 2) + tmp; break; case 7: *b = (tmp << 3) - tmp; break; diff --git a/src/ltc/headers/tomcrypt.h b/src/ltc/headers/tomcrypt.h index 1aca366..38641ae 100644 --- a/src/ltc/headers/tomcrypt.h +++ b/src/ltc/headers/tomcrypt.h @@ -27,13 +27,15 @@ /* version */ #define CRYPT 0x0118 -#define SCRYPT "1.18.1-develop" +#define SCRYPT "1.18.2-develop" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ #define MAXBLOCKSIZE 144 +#ifndef TAB_SIZE /* descriptor table size */ #define TAB_SIZE 34 +#endif /* error codes [will be expanded in future releases] */ enum { diff --git a/src/ltc/headers/tomcrypt_cipher.h b/src/ltc/headers/tomcrypt_cipher.h index 4b98359..90573b3 100644 --- a/src/ltc/headers/tomcrypt_cipher.h +++ b/src/ltc/headers/tomcrypt_cipher.h @@ -673,8 +673,8 @@ int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); -int safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *key); -int safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *key); +int safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); +int safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey); int safer_k64_test(void); int safer_sk64_test(void); int safer_sk128_test(void); @@ -1009,6 +1009,9 @@ int chacha_keystream(chacha_state *st, unsigned char *out, unsigned long outlen); int chacha_done(chacha_state *st); int chacha_test(void); +int chacha_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, + const unsigned char *iv, unsigned long ivlen, ulong64 counter, + const unsigned char *datain, unsigned long datalen, unsigned char *dataout); #endif /* LTC_CHACHA */ @@ -1028,6 +1031,9 @@ int salsa20_keystream(salsa20_state *st, unsigned char *out, unsigned long outlen); int salsa20_done(salsa20_state *st); int salsa20_test(void); +int salsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, + const unsigned char *iv, unsigned long ivlen, ulong64 counter, + const unsigned char *datain, unsigned long datalen, unsigned char *dataout); #endif /* LTC_SALSA20 */ @@ -1037,6 +1043,9 @@ const unsigned char *nonce, unsigned long noncelen, int rounds); int xsalsa20_test(void); +int xsalsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *datain, unsigned long datalen, unsigned char *dataout); #endif /* LTC_XSALSA20 */ @@ -1055,12 +1064,16 @@ unsigned ptr; } sosemanuk_state; -int sosemanuk_setup(sosemanuk_state *ss, const unsigned char *key, unsigned long keylen); -int sosemanuk_setiv(sosemanuk_state *ss, const unsigned char *iv, unsigned long ivlen); -int sosemanuk_crypt(sosemanuk_state *ss, const unsigned char *in, unsigned long datalen, unsigned char *out); -int sosemanuk_keystream(sosemanuk_state *ss, unsigned char *out, unsigned long outlen); -int sosemanuk_done(sosemanuk_state *ss); +int sosemanuk_setup(sosemanuk_state *st, const unsigned char *key, unsigned long keylen); +int sosemanuk_setiv(sosemanuk_state *st, const unsigned char *iv, unsigned long ivlen); +int sosemanuk_crypt(sosemanuk_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out); +int sosemanuk_keystream(sosemanuk_state *st, unsigned char *out, unsigned long outlen); +int sosemanuk_done(sosemanuk_state *st); int sosemanuk_test(void); +int sosemanuk_memory(const unsigned char *key, unsigned long keylen, + const unsigned char *iv, unsigned long ivlen, + const unsigned char *datain, unsigned long datalen, + unsigned char *dataout); #endif /* LTC_SOSEMANUK */ @@ -1085,6 +1098,10 @@ int rabbit_keystream(rabbit_state* st, unsigned char *out, unsigned long outlen); int rabbit_done(rabbit_state *st); int rabbit_test(void); +int rabbit_memory(const unsigned char *key, unsigned long keylen, + const unsigned char *iv, unsigned long ivlen, + const unsigned char *datain, unsigned long datalen, + unsigned char *dataout); #endif /* LTC_RABBIT */ @@ -1100,6 +1117,9 @@ int rc4_stream_keystream(rc4_state *st, unsigned char *out, unsigned long outlen); int rc4_stream_done(rc4_state *st); int rc4_stream_test(void); +int rc4_stream_memory(const unsigned char *key, unsigned long keylen, + const unsigned char *datain, unsigned long datalen, + unsigned char *dataout); #endif /* LTC_RC4_STREAM */ @@ -1119,6 +1139,10 @@ int sober128_stream_keystream(sober128_state *st, unsigned char *out, unsigned long outlen); int sober128_stream_done(sober128_state *st); int sober128_stream_test(void); +int sober128_stream_memory(const unsigned char *key, unsigned long keylen, + const unsigned char *iv, unsigned long ivlen, + const unsigned char *datain, unsigned long datalen, + unsigned char *dataout); #endif /* LTC_SOBER128_STREAM */ diff --git a/src/ltc/headers/tomcrypt_custom.h b/src/ltc/headers/tomcrypt_custom.h index 2772718..aedf08b 100644 --- a/src/ltc/headers/tomcrypt_custom.h +++ b/src/ltc/headers/tomcrypt_custom.h @@ -43,7 +43,10 @@ #define XMEM_NEQ mem_neq #endif #ifndef XSTRCMP -#define XSTRCMP strcmp +#define XSTRCMP strcmp +#endif +#ifndef XSTRNCPY +#define XSTRNCPY strncpy #endif #ifndef XCLOCK @@ -56,7 +59,7 @@ #if ( defined(malloc) || defined(realloc) || defined(calloc) || defined(free) || \ defined(memset) || defined(memcpy) || defined(memcmp) || defined(strcmp) || \ - defined(clock) || defined(qsort) ) && !defined(LTC_NO_PROTOTYPES) + defined(strncpy) || defined(clock) || defined(qsort) ) && !defined(LTC_NO_PROTOTYPES) #define LTC_NO_PROTOTYPES #endif @@ -417,7 +420,7 @@ #define LTC_DH1536 #define LTC_DH2048 -#ifndef TFM_DESC +#if defined(LTM_DESC) || defined(GMP_DESC) /* tfm has a problem in fp_isprime for larger key sizes */ #define LTC_DH3072 #define LTC_DH4096 @@ -463,6 +466,8 @@ #define LTC_PKCS_1 #define LTC_PKCS_5 +#define LTC_PKCS_8 +#define LTC_PKCS_12 /* Include ASN.1 DER (required by DSA/RSA) */ #define LTC_DER @@ -492,7 +497,11 @@ #define LTC_CRC32 +#define LTC_SSH + #define LTC_PADDING + +#define LTC_PBES #endif /* LTC_NO_MISC */ @@ -559,6 +568,15 @@ #define LTC_PKCS_1 #endif +#if defined(LTC_MRSA) || defined(LTC_MECC) + #define LTC_PKCS_8 +#endif + +#ifdef LTC_PKCS_8 + #define LTC_PADDING + #define LTC_PBES +#endif + #if defined(LTC_PELICAN) && !defined(LTC_RIJNDAEL) #error Pelican-MAC requires LTC_RIJNDAEL #endif diff --git a/src/ltc/headers/tomcrypt_hash.h b/src/ltc/headers/tomcrypt_hash.h index dbb6b9a..fb043ca 100644 --- a/src/ltc/headers/tomcrypt_hash.h +++ b/src/ltc/headers/tomcrypt_hash.h @@ -250,7 +250,7 @@ int chc_register(int cipher); int chc_init(hash_state * md); int chc_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int chc_done(hash_state * md, unsigned char *hash); +int chc_done(hash_state * md, unsigned char *out); int chc_test(void); extern const struct ltc_hash_descriptor chc_desc; #endif @@ -258,7 +258,7 @@ #ifdef LTC_WHIRLPOOL int whirlpool_init(hash_state * md); int whirlpool_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int whirlpool_done(hash_state * md, unsigned char *hash); +int whirlpool_done(hash_state * md, unsigned char *out); int whirlpool_test(void); extern const struct ltc_hash_descriptor whirlpool_desc; #endif @@ -282,7 +282,7 @@ extern const struct ltc_hash_descriptor sha3_256_desc; int sha3_224_test(void); extern const struct ltc_hash_descriptor sha3_224_desc; -int sha3_done(hash_state *md, unsigned char *hash); +int sha3_done(hash_state *md, unsigned char *out); /* SHAKE128 + SHAKE256 */ int sha3_shake_init(hash_state *md, int num); #define sha3_shake_process(a,b,c) sha3_process(a,b,c) @@ -305,13 +305,13 @@ int keccak_256_test(void); extern const struct ltc_hash_descriptor keccak_224_desc; int keccak_224_test(void); -int keccak_done(hash_state *md, unsigned char *hash); +int keccak_done(hash_state *md, unsigned char *out); #endif #ifdef LTC_SHA512 int sha512_init(hash_state * md); int sha512_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha512_done(hash_state * md, unsigned char *hash); +int sha512_done(hash_state * md, unsigned char *out); int sha512_test(void); extern const struct ltc_hash_descriptor sha512_desc; #endif @@ -322,7 +322,7 @@ #endif int sha384_init(hash_state * md); #define sha384_process sha512_process -int sha384_done(hash_state * md, unsigned char *hash); +int sha384_done(hash_state * md, unsigned char *out); int sha384_test(void); extern const struct ltc_hash_descriptor sha384_desc; #endif @@ -333,7 +333,7 @@ #endif int sha512_256_init(hash_state * md); #define sha512_256_process sha512_process -int sha512_256_done(hash_state * md, unsigned char *hash); +int sha512_256_done(hash_state * md, unsigned char *out); int sha512_256_test(void); extern const struct ltc_hash_descriptor sha512_256_desc; #endif @@ -344,7 +344,7 @@ #endif int sha512_224_init(hash_state * md); #define sha512_224_process sha512_process -int sha512_224_done(hash_state * md, unsigned char *hash); +int sha512_224_done(hash_state * md, unsigned char *out); int sha512_224_test(void); extern const struct ltc_hash_descriptor sha512_224_desc; #endif @@ -352,7 +352,7 @@ #ifdef LTC_SHA256 int sha256_init(hash_state * md); int sha256_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha256_done(hash_state * md, unsigned char *hash); +int sha256_done(hash_state * md, unsigned char *out); int sha256_test(void); extern const struct ltc_hash_descriptor sha256_desc; @@ -362,7 +362,7 @@ #endif int sha224_init(hash_state * md); #define sha224_process sha256_process -int sha224_done(hash_state * md, unsigned char *hash); +int sha224_done(hash_state * md, unsigned char *out); int sha224_test(void); extern const struct ltc_hash_descriptor sha224_desc; #endif @@ -371,7 +371,7 @@ #ifdef LTC_SHA1 int sha1_init(hash_state * md); int sha1_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int sha1_done(hash_state * md, unsigned char *hash); +int sha1_done(hash_state * md, unsigned char *out); int sha1_test(void); extern const struct ltc_hash_descriptor sha1_desc; #endif @@ -395,7 +395,7 @@ int blake2s_init(hash_state * md, unsigned long outlen, const unsigned char *key, unsigned long keylen); int blake2s_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int blake2s_done(hash_state * md, unsigned char *hash); +int blake2s_done(hash_state * md, unsigned char *out); #endif #ifdef LTC_BLAKE2B @@ -417,13 +417,13 @@ int blake2b_init(hash_state * md, unsigned long outlen, const unsigned char *key, unsigned long keylen); int blake2b_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int blake2b_done(hash_state * md, unsigned char *hash); +int blake2b_done(hash_state * md, unsigned char *out); #endif #ifdef LTC_MD5 int md5_init(hash_state * md); int md5_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int md5_done(hash_state * md, unsigned char *hash); +int md5_done(hash_state * md, unsigned char *out); int md5_test(void); extern const struct ltc_hash_descriptor md5_desc; #endif @@ -431,7 +431,7 @@ #ifdef LTC_MD4 int md4_init(hash_state * md); int md4_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int md4_done(hash_state * md, unsigned char *hash); +int md4_done(hash_state * md, unsigned char *out); int md4_test(void); extern const struct ltc_hash_descriptor md4_desc; #endif @@ -439,7 +439,7 @@ #ifdef LTC_MD2 int md2_init(hash_state * md); int md2_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int md2_done(hash_state * md, unsigned char *hash); +int md2_done(hash_state * md, unsigned char *out); int md2_test(void); extern const struct ltc_hash_descriptor md2_desc; #endif @@ -447,7 +447,7 @@ #ifdef LTC_TIGER int tiger_init(hash_state * md); int tiger_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int tiger_done(hash_state * md, unsigned char *hash); +int tiger_done(hash_state * md, unsigned char *out); int tiger_test(void); extern const struct ltc_hash_descriptor tiger_desc; #endif @@ -455,7 +455,7 @@ #ifdef LTC_RIPEMD128 int rmd128_init(hash_state * md); int rmd128_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int rmd128_done(hash_state * md, unsigned char *hash); +int rmd128_done(hash_state * md, unsigned char *out); int rmd128_test(void); extern const struct ltc_hash_descriptor rmd128_desc; #endif @@ -463,7 +463,7 @@ #ifdef LTC_RIPEMD160 int rmd160_init(hash_state * md); int rmd160_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int rmd160_done(hash_state * md, unsigned char *hash); +int rmd160_done(hash_state * md, unsigned char *out); int rmd160_test(void); extern const struct ltc_hash_descriptor rmd160_desc; #endif @@ -471,7 +471,7 @@ #ifdef LTC_RIPEMD256 int rmd256_init(hash_state * md); int rmd256_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int rmd256_done(hash_state * md, unsigned char *hash); +int rmd256_done(hash_state * md, unsigned char *out); int rmd256_test(void); extern const struct ltc_hash_descriptor rmd256_desc; #endif @@ -479,7 +479,7 @@ #ifdef LTC_RIPEMD320 int rmd320_init(hash_state * md); int rmd320_process(hash_state * md, const unsigned char *in, unsigned long inlen); -int rmd320_done(hash_state * md, unsigned char *hash); +int rmd320_done(hash_state * md, unsigned char *out); int rmd320_test(void); extern const struct ltc_hash_descriptor rmd320_desc; #endif diff --git a/src/ltc/headers/tomcrypt_mac.h b/src/ltc/headers/tomcrypt_mac.h index e4fdf14..cafb9a0 100644 --- a/src/ltc/headers/tomcrypt_mac.h +++ b/src/ltc/headers/tomcrypt_mac.h @@ -29,7 +29,7 @@ const unsigned char *in, unsigned long inlen, ...); int hmac_file(int hash, const char *fname, const unsigned char *key, unsigned long keylen, - unsigned char *dst, unsigned long *dstlen); + unsigned char *out, unsigned long *outlen); #endif #ifdef LTC_OMAC @@ -84,7 +84,7 @@ int pmac_memory(int cipher, const unsigned char *key, unsigned long keylen, - const unsigned char *msg, unsigned long msglen, + const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen); int pmac_memory_multi(int cipher, @@ -230,7 +230,7 @@ const unsigned char *in, unsigned long inlen, ...); int f9_file(int cipher, const unsigned char *key, unsigned long keylen, - const char *filename, + const char *fname, unsigned char *out, unsigned long *outlen); int f9_test(void); @@ -419,7 +419,7 @@ } ccm_state; int ccm_init(ccm_state *ccm, int cipher, - const unsigned char *key, int keylen, int ptlen, int taglen, int aad_len); + const unsigned char *key, int keylen, int ptlen, int taglen, int aadlen); int ccm_reset(ccm_state *ccm); diff --git a/src/ltc/headers/tomcrypt_macros.h b/src/ltc/headers/tomcrypt_macros.h index 94e368f..2e4eb00 100644 --- a/src/ltc/headers/tomcrypt_macros.h +++ b/src/ltc/headers/tomcrypt_macros.h @@ -429,13 +429,6 @@ #define LTC_UNUSED_PARAM(x) (void)(x) #endif -/* extract a byte portably */ -#ifdef _MSC_VER - #define byte(x, n) ((unsigned char)((x) >> (8 * (n)))) -#else - #define byte(x, n) (((x) >> (8 * (n))) & 255) -#endif - /* there is no snprintf before Visual C++ 2015 */ #if defined(_MSC_VER) && _MSC_VER < 1900 #define snprintf _snprintf diff --git a/src/ltc/headers/tomcrypt_misc.h b/src/ltc/headers/tomcrypt_misc.h index b30e087..78e233d 100644 --- a/src/ltc/headers/tomcrypt_misc.h +++ b/src/ltc/headers/tomcrypt_misc.h @@ -9,26 +9,26 @@ /* ---- LTC_BASE64 Routines ---- */ #ifdef LTC_BASE64 -int base64_encode(const unsigned char *in, unsigned long len, +int base64_encode(const unsigned char *in, unsigned long inlen, char *out, unsigned long *outlen); -int base64_decode(const char *in, unsigned long len, +int base64_decode(const char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen); -int base64_strict_decode(const char *in, unsigned long len, +int base64_strict_decode(const char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen); int base64_sane_decode(const char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen); #endif #ifdef LTC_BASE64_URL -int base64url_encode(const unsigned char *in, unsigned long len, +int base64url_encode(const unsigned char *in, unsigned long inlen, char *out, unsigned long *outlen); int base64url_strict_encode(const unsigned char *in, unsigned long inlen, char *out, unsigned long *outlen); -int base64url_decode(const char *in, unsigned long len, +int base64url_decode(const char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen); -int base64url_strict_decode(const char *in, unsigned long len, +int base64url_strict_decode(const char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen); int base64url_sane_decode(const char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen); @@ -84,7 +84,7 @@ /* ---- MEM routines ---- */ int mem_neq(const void *a, const void *b, size_t len); -void zeromem(volatile void *dst, size_t len); +void zeromem(volatile void *out, size_t outlen); void burn_stack(unsigned long len); const char *error_to_string(int err); @@ -154,6 +154,23 @@ int padding_depad(const unsigned char *data, unsigned long *length, unsigned long mode); #endif /* LTC_PADDING */ +#ifdef LTC_SSH +typedef enum ssh_data_type_ { + LTC_SSHDATA_BYTE, + LTC_SSHDATA_BOOLEAN, + LTC_SSHDATA_UINT32, + LTC_SSHDATA_UINT64, + LTC_SSHDATA_STRING, + LTC_SSHDATA_MPINT, + LTC_SSHDATA_NAMELIST, + LTC_SSHDATA_EOL +} ssh_data_type; + +/* VA list handy helpers with tuples of */ +int ssh_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...); +int ssh_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...); +#endif /* LTC_SSH */ + int compare_testvector(const void* is, const unsigned long is_len, const void* should, const unsigned long should_len, const char* what, int which); /* ref: $Format:%D$ */ diff --git a/src/ltc/headers/tomcrypt_pk.h b/src/ltc/headers/tomcrypt_pk.h index 64e83bd..49eeda5 100644 --- a/src/ltc/headers/tomcrypt_pk.h +++ b/src/ltc/headers/tomcrypt_pk.h @@ -244,6 +244,18 @@ void *k; } ecc_key; +/** Formats of ECC signatures */ +typedef enum ecc_signature_type_ { + /* ASN.1 encoded, ANSI X9.62 */ + LTC_ECCSIG_ANSIX962 = 0x0, + /* raw R, S values */ + LTC_ECCSIG_RFC7518 = 0x1, + /* raw R, S, V (+27) values */ + LTC_ECCSIG_ETH27 = 0x2, + /* SSH + ECDSA signature format defined by RFC5656 */ + LTC_ECCSIG_RFC5656 = 0x3, +} ecc_signature_type; + /** the ECC params provided */ extern const ltc_ecc_curve ltc_ecc_curves[]; @@ -251,8 +263,8 @@ void ecc_sizes(int *low, int *high); int ecc_get_size(const ecc_key *key); -int ecc_get_curve(const char* name_or_oid, const ltc_ecc_curve** cu); -int ecc_set_dp(const ltc_ecc_curve *cu, ecc_key *key); +int ecc_find_curve(const char* name_or_oid, const ltc_ecc_curve** cu); +int ecc_set_curve(const ltc_ecc_curve *cu, ecc_key *key); int ecc_generate_key(prng_state *prng, int wprng, ecc_key *key); int ecc_set_key(const unsigned char *in, unsigned long inlen, int type, ecc_key *key); int ecc_get_key(unsigned char *out, unsigned long *outlen, int type, const ecc_key *key); @@ -287,21 +299,30 @@ unsigned char *out, unsigned long *outlen, const ecc_key *key); -int ecc_sign_hash_rfc7518(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, const ecc_key *key); - -int ecc_sign_hash(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, const ecc_key *key); - -int ecc_verify_hash_rfc7518(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key); - -int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, +#define ecc_sign_hash_rfc7518(in_, inlen_, out_, outlen_, prng_, wprng_, key_) \ + ecc_sign_hash_ex(in_, inlen_, out_, outlen_, prng_, wprng_, LTC_ECCSIG_RFC7518, NULL, key_) + +#define ecc_sign_hash(in_, inlen_, out_, outlen_, prng_, wprng_, key_) \ + ecc_sign_hash_ex(in_, inlen_, out_, outlen_, prng_, wprng_, LTC_ECCSIG_ANSIX962, NULL, key_) + +#define ecc_verify_hash_rfc7518(sig_, siglen_, hash_, hashlen_, stat_, key_) \ + ecc_verify_hash_ex(sig_, siglen_, hash_, hashlen_, LTC_ECCSIG_RFC7518, stat_, key_) + +#define ecc_verify_hash(sig_, siglen_, hash_, hashlen_, stat_, key_) \ + ecc_verify_hash_ex(sig_, siglen_, hash_, hashlen_, LTC_ECCSIG_ANSIX962, stat_, key_) + +int ecc_sign_hash_ex(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, ecc_signature_type sigformat, + int *recid, const ecc_key *key); + +int ecc_verify_hash_ex(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + ecc_signature_type sigformat, int *stat, const ecc_key *key); + +int ecc_recover_key(const unsigned char *sig, unsigned long siglen, const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key); + int recid, ecc_signature_type sigformat, ecc_key *key); #endif @@ -573,7 +594,7 @@ /* INTEGER */ int der_encode_integer(void *num, unsigned char *out, unsigned long *outlen); int der_decode_integer(const unsigned char *in, unsigned long inlen, void *num); -int der_length_integer(void *num, unsigned long *len); +int der_length_integer(void *num, unsigned long *outlen); /* INTEGER -- handy for 0..2^32-1 values */ int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsigned long *num); diff --git a/src/ltc/headers/tomcrypt_pkcs.h b/src/ltc/headers/tomcrypt_pkcs.h index 247e538..0c99f7c 100644 --- a/src/ltc/headers/tomcrypt_pkcs.h +++ b/src/ltc/headers/tomcrypt_pkcs.h @@ -103,6 +103,7 @@ int pkcs_5_test (void); #endif /* LTC_PKCS_5 */ + /* ref: $Format:%D$ */ /* git commit: $Format:%H$ */ /* commit time: $Format:%ai$ */ diff --git a/src/ltc/headers/tomcrypt_private.h b/src/ltc/headers/tomcrypt_private.h index 865b7ad..e536d57 100644 --- a/src/ltc/headers/tomcrypt_private.h +++ b/src/ltc/headers/tomcrypt_private.h @@ -19,7 +19,7 @@ * Internal Enums */ -enum public_key_algorithms { +enum ltc_oid_id { PKA_RSA, PKA_DSA, PKA_EC, @@ -30,17 +30,41 @@ * Internal Types */ -typedef struct Oid { - unsigned long OID[16]; - /** Number of OID digits in use */ - unsigned long OIDlen; -} oid_st; - typedef struct { int size; const char *name, *base, *prime; } ltc_dh_set_type; + +typedef int (*fn_kdf_t)(const unsigned char *password, unsigned long password_len, + const unsigned char *salt, unsigned long salt_len, + int iteration_count, int hash_idx, + unsigned char *out, unsigned long *outlen); + +typedef struct { + /* KDF */ + fn_kdf_t kdf; + /* Hash or HMAC */ + const char* h; + /* cipher */ + const char* c; + unsigned long keylen; + /* not used for pbkdf2 */ + unsigned long blocklen; +} pbes_properties; + +typedef struct +{ + pbes_properties type; + const void *pwd; + unsigned long pwdlen; + ltc_asn1_list *enc_data; + ltc_asn1_list *salt; + ltc_asn1_list *iv; + unsigned long iterations; + /* only used for RC2 */ + unsigned long key_bits; +} pbes_arg; /* * Internal functions @@ -173,13 +197,18 @@ void copy_or_zeromem(const unsigned char* src, unsigned char* dest, unsigned long len, int coz); +int pbes_decrypt(const pbes_arg *arg, unsigned char *dec_data, unsigned long *dec_size); + +int pbes1_extract(const ltc_asn1_list *s, pbes_arg *res); +int pbes2_extract(const ltc_asn1_list *s, pbes_arg *res); + /* tomcrypt_pk.h */ int rand_bn_bits(void *N, int bits, prng_state *prng, int wprng); int rand_bn_upto(void *N, void *limit, prng_state *prng, int wprng); -int pk_get_oid(int pk, oid_st *st); +int pk_get_oid(enum ltc_oid_id id, const char **st); int pk_oid_str_to_num(const char *OID, unsigned long *oid, unsigned long *oidlen); int pk_oid_num_to_str(const unsigned long *oid, unsigned long oidlen, char *OID, unsigned long *outlen); @@ -192,9 +221,14 @@ /* ---- ECC Routines ---- */ #ifdef LTC_MECC -int ecc_set_dp_from_mpis(void *a, void *b, void *prime, void *order, void *gx, void *gy, unsigned long cofactor, ecc_key *key); -int ecc_copy_dp(const ecc_key *srckey, ecc_key *key); -int ecc_set_dp_by_size(int size, ecc_key *key); +int ecc_set_curve_from_mpis(void *a, void *b, void *prime, void *order, void *gx, void *gy, unsigned long cofactor, ecc_key *key); +int ecc_copy_curve(const ecc_key *srckey, ecc_key *key); +int ecc_set_curve_by_size(int size, ecc_key *key); +int ecc_import_subject_public_key_info(const unsigned char *in, unsigned long inlen, ecc_key *key); + +#ifdef LTC_SSH +int ecc_ssh_ecdsa_encode_name(char *buffer, unsigned long *buflen, const ecc_key *key); +#endif /* low level functions */ ecc_point *ltc_ecc_new_point(void); @@ -264,6 +298,9 @@ #endif /* LTC_MDSA */ #ifdef LTC_DER + +#define LTC_ASN1_IS_TYPE(e, t) (((e) != NULL) && ((e)->type == (t))) + /* DER handling */ int der_decode_custom_type_ex(const unsigned char *in, unsigned long inlen, ltc_asn1_list *root, @@ -274,7 +311,7 @@ int der_length_asn1_identifier(const ltc_asn1_list *id, unsigned long *idlen); int der_encode_asn1_length(unsigned long len, unsigned char* out, unsigned long* outlen); -int der_decode_asn1_length(const unsigned char* len, unsigned long* lenlen, unsigned long* outlen); +int der_decode_asn1_length(const unsigned char *in, unsigned long *inlen, unsigned long *outlen); int der_length_asn1_length(unsigned long len, unsigned long *outlen); int der_length_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, @@ -302,7 +339,34 @@ unsigned int algorithm, void* public_key, unsigned long* public_key_len, ltc_asn1_type parameters_type, ltc_asn1_list* parameters, unsigned long *parameters_len); +int pk_oid_cmp_with_ulong(const char *o1, const unsigned long *o2, unsigned long o2size); +int pk_oid_cmp_with_asn1(const char *o1, const ltc_asn1_list *o2); + #endif /* LTC_DER */ + +/* tomcrypt_pkcs.h */ + +#ifdef LTC_PKCS_8 + +int pkcs8_decode_flexi(const unsigned char *in, unsigned long inlen, + const void *pwd, unsigned long pwdlen, + ltc_asn1_list **decoded_list); + +#endif /* LTC_PKCS_8 */ + + +#ifdef LTC_PKCS_12 + +int pkcs12_utf8_to_utf16(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int pkcs12_kdf( int hash_id, + const unsigned char *pw, unsigned long pwlen, + const unsigned char *salt, unsigned long saltlen, + unsigned int iterations, unsigned char purpose, + unsigned char *out, unsigned long outlen); + +#endif /* LTC_PKCS_12 */ /* tomcrypt_prng.h */ @@ -328,6 +392,12 @@ return CRYPT_OK; \ } +/* extract a byte portably */ +#ifdef _MSC_VER + #define LTC_BYTE(x, n) ((unsigned char)((x) >> (8 * (n)))) +#else + #define LTC_BYTE(x, n) (((x) >> (8 * (n))) & 255) +#endif /* ref: $Format:%D$ */ /* git commit: $Format:%H$ */ diff --git a/src/ltc/mac/pelican/pelican.c b/src/ltc/mac/pelican/pelican.c index e8cea64..7c678d2 100644 --- a/src/ltc/mac/pelican/pelican.c +++ b/src/ltc/mac/pelican/pelican.c @@ -62,25 +62,25 @@ LOAD32H(s3, pelmac->state + 12); for (r = 0; r < 4; r++) { t0 = - Te0(byte(s0, 3)) ^ - Te1(byte(s1, 2)) ^ - Te2(byte(s2, 1)) ^ - Te3(byte(s3, 0)); + Te0(LTC_BYTE(s0, 3)) ^ + Te1(LTC_BYTE(s1, 2)) ^ + Te2(LTC_BYTE(s2, 1)) ^ + Te3(LTC_BYTE(s3, 0)); t1 = - Te0(byte(s1, 3)) ^ - Te1(byte(s2, 2)) ^ - Te2(byte(s3, 1)) ^ - Te3(byte(s0, 0)); + Te0(LTC_BYTE(s1, 3)) ^ + Te1(LTC_BYTE(s2, 2)) ^ + Te2(LTC_BYTE(s3, 1)) ^ + Te3(LTC_BYTE(s0, 0)); t2 = - Te0(byte(s2, 3)) ^ - Te1(byte(s3, 2)) ^ - Te2(byte(s0, 1)) ^ - Te3(byte(s1, 0)); + Te0(LTC_BYTE(s2, 3)) ^ + Te1(LTC_BYTE(s3, 2)) ^ + Te2(LTC_BYTE(s0, 1)) ^ + Te3(LTC_BYTE(s1, 0)); t3 = - Te0(byte(s3, 3)) ^ - Te1(byte(s0, 2)) ^ - Te2(byte(s1, 1)) ^ - Te3(byte(s2, 0)); + Te0(LTC_BYTE(s3, 3)) ^ + Te1(LTC_BYTE(s0, 2)) ^ + Te2(LTC_BYTE(s1, 1)) ^ + Te3(LTC_BYTE(s2, 0)); s0 = t0; s1 = t1; s2 = t2; s3 = t3; } STORE32H(s0, pelmac->state ); diff --git a/src/ltc/mac/pmac/pmac_done.c b/src/ltc/mac/pmac/pmac_done.c index 18296e0..347890f 100644 --- a/src/ltc/mac/pmac/pmac_done.c +++ b/src/ltc/mac/pmac/pmac_done.c @@ -15,51 +15,51 @@ #ifdef LTC_PMAC -int pmac_done(pmac_state *state, unsigned char *out, unsigned long *outlen) +int pmac_done(pmac_state *pmac, unsigned char *out, unsigned long *outlen) { int err, x; - LTC_ARGCHK(state != NULL); - LTC_ARGCHK(out != NULL); - if ((err = cipher_is_valid(state->cipher_idx)) != CRYPT_OK) { + LTC_ARGCHK(pmac != NULL); + LTC_ARGCHK(out != NULL); + if ((err = cipher_is_valid(pmac->cipher_idx)) != CRYPT_OK) { return err; } - if ((state->buflen > (int)sizeof(state->block)) || (state->buflen < 0) || - (state->block_len > (int)sizeof(state->block)) || (state->buflen > state->block_len)) { + if ((pmac->buflen > (int)sizeof(pmac->block)) || (pmac->buflen < 0) || + (pmac->block_len > (int)sizeof(pmac->block)) || (pmac->buflen > pmac->block_len)) { return CRYPT_INVALID_ARG; } /* handle padding. If multiple xor in L/x */ - if (state->buflen == state->block_len) { + if (pmac->buflen == pmac->block_len) { /* xor Lr against the checksum */ - for (x = 0; x < state->block_len; x++) { - state->checksum[x] ^= state->block[x] ^ state->Lr[x]; + for (x = 0; x < pmac->block_len; x++) { + pmac->checksum[x] ^= pmac->block[x] ^ pmac->Lr[x]; } } else { /* otherwise xor message bytes then the 0x80 byte */ - for (x = 0; x < state->buflen; x++) { - state->checksum[x] ^= state->block[x]; + for (x = 0; x < pmac->buflen; x++) { + pmac->checksum[x] ^= pmac->block[x]; } - state->checksum[x] ^= 0x80; + pmac->checksum[x] ^= 0x80; } /* encrypt it */ - if ((err = cipher_descriptor[state->cipher_idx].ecb_encrypt(state->checksum, state->checksum, &state->key)) != CRYPT_OK) { + if ((err = cipher_descriptor[pmac->cipher_idx].ecb_encrypt(pmac->checksum, pmac->checksum, &pmac->key)) != CRYPT_OK) { return err; } - cipher_descriptor[state->cipher_idx].done(&state->key); + cipher_descriptor[pmac->cipher_idx].done(&pmac->key); /* store it */ - for (x = 0; x < state->block_len && x < (int)*outlen; x++) { - out[x] = state->checksum[x]; + for (x = 0; x < pmac->block_len && x < (int)*outlen; x++) { + out[x] = pmac->checksum[x]; } *outlen = x; #ifdef LTC_CLEAN_STACK - zeromem(state, sizeof(*state)); + zeromem(pmac, sizeof(*pmac)); #endif return CRYPT_OK; } diff --git a/src/ltc/misc/adler32.c b/src/ltc/misc/adler32.c index c1d7c86..6f9a869 100644 --- a/src/ltc/misc/adler32.c +++ b/src/ltc/misc/adler32.c @@ -41,8 +41,9 @@ length--; } while (length % 8 != 0); - if (s1 >= _adler32_base) + if (s1 >= _adler32_base) { s1 -= _adler32_base; + } s2 %= _adler32_base; } @@ -67,8 +68,9 @@ length -= 8; input += 8; - if (s1 >= _adler32_base) + if (s1 >= _adler32_base) { s1 -= _adler32_base; + } s2 %= _adler32_base; } diff --git a/src/ltc/misc/base16/base16_encode.c b/src/ltc/misc/base16/base16_encode.c index f052fd1..5646ee9 100644 --- a/src/ltc/misc/base16/base16_encode.c +++ b/src/ltc/misc/base16/base16_encode.c @@ -52,8 +52,11 @@ x--; *outlen = x; /* returning the length without terminating NUL */ - if (options == 0) alphabet = alphabets[0]; - else alphabet = alphabets[1]; + if (options == 0) { + alphabet = alphabets[0]; + } else { + alphabet = alphabets[1]; + } for (i = 0; i < x; i += 2) { out[i] = alphabet[(in[i/2] >> 4) & 0x0f]; diff --git a/src/ltc/misc/base64/base64_decode.c b/src/ltc/misc/base64/base64_decode.c index 7506d50..9511ba1 100644 --- a/src/ltc/misc/base64/base64_decode.c +++ b/src/ltc/misc/base64/base64_decode.c @@ -104,16 +104,16 @@ continue; } if (c == 253) { - if (mode == strict) + if (mode == strict) { return CRYPT_INVALID_PACKET; - else - continue; /* allow to ignore white-spaces (relaxed+insane) */ + } + continue; /* allow to ignore white-spaces (relaxed+insane) */ } if (c == 255) { - if (mode == insane) + if (mode == insane) { continue; /* allow to ignore invalid garbage (insane) */ - else - return CRYPT_INVALID_PACKET; + } + return CRYPT_INVALID_PACKET; } if ((g > 0) && (mode != insane)) { /* we only allow '=' to be at the end (strict+relaxed) */ diff --git a/src/ltc/misc/burn_stack.c b/src/ltc/misc/burn_stack.c index b79f540..95fc699 100644 --- a/src/ltc/misc/burn_stack.c +++ b/src/ltc/misc/burn_stack.c @@ -21,8 +21,9 @@ { unsigned char buf[32]; zeromem(buf, sizeof(buf)); - if (len > (unsigned long)sizeof(buf)) + if (len > (unsigned long)sizeof(buf)) { burn_stack(len - sizeof(buf)); + } } diff --git a/src/ltc/misc/compare_testvector.c b/src/ltc/misc/compare_testvector.c index 842678a..b0d7baa 100644 --- a/src/ltc/misc/compare_testvector.c +++ b/src/ltc/misc/compare_testvector.c @@ -63,11 +63,11 @@ int compare_testvector(const void* is, const unsigned long is_len, const void* should, const unsigned long should_len, const char* what, int which) { int res = 0; - if(is_len != should_len) + if(is_len != should_len) { res = is_len > should_len ? -1 : 1; - else + } else { res = XMEMCMP(is, should, is_len); - + } #if defined(LTC_TEST) && defined(LTC_TEST_DBG) if (res != 0) { fprintf(stderr, "Testvector #%i of %s failed:\n", which, what); diff --git a/src/ltc/misc/copy_or_zeromem.c b/src/ltc/misc/copy_or_zeromem.c index 1cfd2bd..4e662cd 100644 --- a/src/ltc/misc/copy_or_zeromem.c +++ b/src/ltc/misc/copy_or_zeromem.c @@ -29,8 +29,8 @@ #endif unsigned char mask = 0xff; /* initialize mask at all ones */ - LTC_ARGCHK(src != NULL); - LTC_ARGCHK(dest != NULL); + LTC_ARGCHKVD(src != NULL); + LTC_ARGCHKVD(dest != NULL); if (coz != 0) coz = 1; y = 0; diff --git a/src/ltc/misc/crc32.c b/src/ltc/misc/crc32.c index 5c49f42..99c6645 100644 --- a/src/ltc/misc/crc32.c +++ b/src/ltc/misc/crc32.c @@ -153,8 +153,9 @@ LTC_ARGCHKVD(input != NULL); crc = ctx->crc; - while (length--) + while (length--) { crc = crc32_m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc); + } ctx->crc = crc; } diff --git a/src/ltc/misc/crypt/crypt.c b/src/ltc/misc/crypt/crypt.c index 1f76662..b6b25c1 100644 --- a/src/ltc/misc/crypt/crypt.c +++ b/src/ltc/misc/crypt/crypt.c @@ -436,11 +436,24 @@ #if defined(LTC_PKCS_5) " PKCS#5 " #endif +#if defined(LTC_PKCS_8) + " PKCS#8 " +#endif +#if defined(LTC_PKCS_12) + " PKCS#12 " +#endif #if defined(LTC_PADDING) " PADDING " #endif #if defined(LTC_HKDF) " HKDF " +#endif +#if defined(LTC_PBES) + " PBES1 " + " PBES2 " +#endif +#if defined(LTC_SSH) + " SSH " #endif #if defined(LTC_DEVRANDOM) " LTC_DEVRANDOM " diff --git a/src/ltc/misc/crypt/crypt_constants.c b/src/ltc/misc/crypt/crypt_constants.c index df8ab2d..a0d09af 100644 --- a/src/ltc/misc/crypt/crypt_constants.c +++ b/src/ltc/misc/crypt/crypt_constants.c @@ -258,20 +258,17 @@ int crypt_list_all_constants(char *names_list, unsigned int *names_list_size) { int i; unsigned int total_len = 0; - char number[32], *ptr; + char *ptr; int number_len; int count = sizeof(_crypt_constants) / sizeof(_crypt_constants[0]); /* calculate amount of memory required for the list */ for (i=0; i= sizeof(number))) + number_len = snprintf(NULL, 0, "%s,%d\n", _crypt_constants[i].name, _crypt_constants[i].value); + if (number_len < 0) { return -1; - total_len += number_len + 1; - /* this last +1 is for newlines (and ending NULL) */ + } + total_len += number_len; } if (names_list == NULL) { @@ -283,16 +280,11 @@ /* build the names list */ ptr = names_list; for (i=0; i total_len) return -1; + total_len -= number_len; ptr += number_len; - strcpy(ptr, "\n"); - ptr += 1; } /* to remove the trailing new-line */ ptr -= 1; diff --git a/src/ltc/misc/crypt/crypt_sizes.c b/src/ltc/misc/crypt/crypt_sizes.c index 1727414..e34197e 100644 --- a/src/ltc/misc/crypt/crypt_sizes.c +++ b/src/ltc/misc/crypt/crypt_sizes.c @@ -319,19 +319,17 @@ int crypt_list_all_sizes(char *names_list, unsigned int *names_list_size) { int i; unsigned int total_len = 0; - char number[32], *ptr; + char *ptr; int number_len; int count = sizeof(_crypt_sizes) / sizeof(_crypt_sizes[0]); /* calculate amount of memory required for the list */ for (i=0; i= sizeof(number))) + number_len = snprintf(NULL, 0, "%s,%u\n", _crypt_sizes[i].name, _crypt_sizes[i].size); + if (number_len < 0) { return -1; - total_len += (unsigned int)strlen(number) + 1; + } + total_len += number_len; /* this last +1 is for newlines (and ending NULL) */ } @@ -344,16 +342,11 @@ /* build the names list */ ptr = names_list; for (i=0; i total_len) return -1; + total_len -= number_len; ptr += number_len; - strcpy(ptr, "\n"); - ptr += 1; } /* to remove the trailing new-line */ ptr -= 1; diff --git a/src/ltc/misc/error_to_string.c b/src/ltc/misc/error_to_string.c index 64e5e6d..74b34b9 100644 --- a/src/ltc/misc/error_to_string.c +++ b/src/ltc/misc/error_to_string.c @@ -68,9 +68,8 @@ { if (err < 0 || err >= (int)(sizeof(err_2_str)/sizeof(err_2_str[0]))) { return "Invalid error code."; - } else { - return err_2_str[err]; } + return err_2_str[err]; } diff --git a/src/ltc/misc/hkdf/hkdf.c b/src/ltc/misc/hkdf/hkdf.c index 1ca3ae3..c43a162 100644 --- a/src/ltc/misc/hkdf/hkdf.c +++ b/src/ltc/misc/hkdf/hkdf.c @@ -30,9 +30,8 @@ valid results for HKDF. */ if (salt == NULL || saltlen == 0) { return hmac_memory(hash_idx, (const unsigned char *)"", 1, in, inlen, out, outlen); - } else { - return hmac_memory(hash_idx, salt, saltlen, in, inlen, out, outlen); } + return hmac_memory(hash_idx, salt, saltlen, in, inlen, out, outlen); } int hkdf_expand(int hash_idx, const unsigned char *info, unsigned long infolen, @@ -55,10 +54,12 @@ hashsize = hash_descriptor[hash_idx].hashsize; /* RFC5869 parameter restrictions */ - if (inlen < hashsize || outlen > hashsize * 255) + if (inlen < hashsize || outlen > hashsize * 255) { return CRYPT_INVALID_ARG; - if (info == NULL && infolen != 0) + } + if (info == NULL && infolen != 0) { return CRYPT_INVALID_ARG; + } LTC_ARGCHK(out != NULL); Tlen = hashsize + infolen + 1; @@ -87,8 +88,9 @@ } outoff += Noutlen; - if (outoff >= outlen) /* loop exit condition */ + if (outoff >= outlen) { /* loop exit condition */ break; + } /* All subsequent HMAC data T(N) DOES include the previous hash value */ XMEMCPY(T, out + hashsize * (N-1), hashsize); diff --git a/src/ltc/misc/padding/padding_depad.c b/src/ltc/misc/padding/padding_depad.c index e02077f..33353f9 100644 --- a/src/ltc/misc/padding/padding_depad.c +++ b/src/ltc/misc/padding/padding_depad.c @@ -36,7 +36,7 @@ if (type < LTC_PAD_ONE_AND_ZERO) { pad = data[padded_length - 1]; - if (pad > padded_length) return CRYPT_INVALID_ARG; + if (pad > padded_length || pad == 0) return CRYPT_INVALID_ARG; unpadded_length = padded_length - pad; } else { diff --git a/src/ltc/misc/padding/padding_pad.c b/src/ltc/misc/padding/padding_pad.c index ae1a8ae..b1745ae 100644 --- a/src/ltc/misc/padding/padding_pad.c +++ b/src/ltc/misc/padding/padding_pad.c @@ -99,8 +99,11 @@ type = mode & LTC_PAD_MASK; if (*padded_length < l) { - if (type != LTC_PAD_ISO_10126) *padded_length = l; - else *padded_length = length + 256; + if (type != LTC_PAD_ISO_10126) { + *padded_length = l; + } else { + *padded_length = length + 256; + } return CRYPT_BUFFER_OVERFLOW; } diff --git a/src/ltc/misc/pbes/pbes.c b/src/ltc/misc/pbes/pbes.c new file mode 100644 index 0000000..382548d --- /dev/null +++ b/src/ltc/misc/pbes/pbes.c @@ -0,0 +1,83 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ +#include "tomcrypt_private.h" + +#ifdef LTC_PBES + +/** + Decrypt Data encrypted via either PBES1 or PBES2 + + @param arg The according PBES parameters + @param dec_data [out] The decrypted data + @param dec_size [in/out] The length of the encrypted resp. decrypted data + @return CRYPT_OK on success +*/ +int pbes_decrypt(const pbes_arg *arg, unsigned char *dec_data, unsigned long *dec_size) +{ + int err, hid, cid; + unsigned char k[32], *iv; + unsigned long klen, keylen, dlen; + long diff; + symmetric_CBC cbc; + + LTC_ARGCHK(arg != NULL); + LTC_ARGCHK(arg->type.kdf != NULL); + LTC_ARGCHK(dec_data != NULL); + LTC_ARGCHK(dec_size != NULL); + + hid = find_hash(arg->type.h); + if (hid == -1) return CRYPT_INVALID_HASH; + cid = find_cipher(arg->type.c); + if (cid == -1) return CRYPT_INVALID_CIPHER; + + klen = arg->type.keylen; + + /* RC2 special case */ + if (arg->key_bits != 0) { + /* We can't handle odd lengths of Key Bits */ + if ((arg->key_bits % 8) != 0) return CRYPT_INVALID_KEYSIZE; + /* Internally we use bytes, not bits */ + klen = arg->key_bits / 8; + } + keylen = klen; + + if (arg->iv != NULL) { + iv = arg->iv->data; + } else { + iv = k + klen; + klen += arg->type.blocklen; + } + + if (klen > sizeof(k)) return CRYPT_INVALID_ARG; + + 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; + if ((err = cbc_start(cid, iv, k, keylen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR; + if ((err = cbc_decrypt(arg->enc_data->data, dec_data, arg->enc_data->size, &cbc)) != CRYPT_OK) goto LBL_ERROR; + if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR; + dlen = arg->enc_data->size; + if ((err = padding_depad(dec_data, &dlen, LTC_PAD_PKCS7)) != CRYPT_OK) goto LBL_ERROR; + diff = (long)arg->enc_data->size - (long)dlen; + if ((diff <= 0) || (diff > cipher_descriptor[cid].block_length)) { + err = CRYPT_PK_INVALID_PADDING; + goto LBL_ERROR; + } + *dec_size = dlen; + return CRYPT_OK; + +LBL_ERROR: + zeromem(k, sizeof(k)); + zeromem(dec_data, *dec_size); + return err; +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/misc/pbes/pbes1.c b/src/ltc/misc/pbes/pbes1.c new file mode 100644 index 0000000..2f0e919 --- /dev/null +++ b/src/ltc/misc/pbes/pbes1.c @@ -0,0 +1,127 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ +#include "tomcrypt_private.h" + +#ifdef LTC_PBES + +static int _pkcs_5_alg1_wrap(const unsigned char *password, unsigned long password_len, + const unsigned char *salt, unsigned long salt_len, + int iteration_count, int hash_idx, + unsigned char *out, unsigned long *outlen) +{ + LTC_UNUSED_PARAM(salt_len); + return pkcs_5_alg1(password, password_len, salt, iteration_count, hash_idx, out, outlen); +} + +static int _pkcs_12_wrap(const unsigned char *password, unsigned long password_len, + const unsigned char *salt, unsigned long salt_len, + int iteration_count, int hash_idx, + unsigned char *out, unsigned long *outlen) +{ + int err; + /* convert password to unicode/utf16-be */ + unsigned long pwlen = password_len * 2; + unsigned char* pw; + if (*outlen < 32) return CRYPT_INVALID_ARG; + pw = XMALLOC(pwlen + 2); + if (pw == NULL) return CRYPT_MEM; + if ((err = pkcs12_utf8_to_utf16(password, password_len, pw, &pwlen)) != CRYPT_OK) goto LBL_ERROR; + pw[pwlen++] = 0; + pw[pwlen++] = 0; + /* derive KEY */ + if ((err = pkcs12_kdf(hash_idx, pw, pwlen, salt, salt_len, iteration_count, 1, out, 24)) != CRYPT_OK) goto LBL_ERROR; + /* derive IV */ + if ((err = pkcs12_kdf(hash_idx, pw, pwlen, salt, salt_len, iteration_count, 2, out+24, 8)) != CRYPT_OK) goto LBL_ERROR; + + *outlen = 32; +LBL_ERROR: + zeromem(pw, pwlen); + XFREE(pw); + return err; +} + +static const pbes_properties _pbes1_types[] = { + { _pkcs_5_alg1_wrap, "md2", "des", 8, 8 }, + { _pkcs_5_alg1_wrap, "md2", "rc2", 8, 8 }, + { _pkcs_5_alg1_wrap, "md5", "des", 8, 8 }, + { _pkcs_5_alg1_wrap, "md5", "rc2", 8, 8 }, + { _pkcs_5_alg1_wrap, "sha1", "des", 8, 8 }, + { _pkcs_5_alg1_wrap, "sha1", "rc2", 8, 8 }, + { _pkcs_12_wrap, "sha1", "3des", 24, 8 }, +}; + +typedef struct { + const pbes_properties *data; + const char *oid; +} oid_to_pbes; + +static const oid_to_pbes _pbes1_list[] = { + { &_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 */ + { &_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 */ + { &_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 */ + { &_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 */ + { &_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 */ + { &_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 */ + { &_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 */ + { 0 }, +}; + +static int _pbes1_from_oid(const ltc_asn1_list *oid, pbes_properties *res) +{ + unsigned int i; + for (i = 0; _pbes1_list[i].data != NULL; ++i) { + if (pk_oid_cmp_with_asn1(_pbes1_list[i].oid, oid) == CRYPT_OK) { + if (res != NULL) *res = *_pbes1_list[i].data; + return CRYPT_OK; + } + } + return CRYPT_INVALID_ARG; +} + +/** + Extract PBES1 parameters + + @param s The start of the sequence with potential PBES1 parameters + @param res Pointer to where the extracted parameters should be stored + @return CRYPT_OK on success +*/ +int pbes1_extract(const ltc_asn1_list *s, pbes_arg *res) +{ + int err; + + LTC_ARGCHK(s != NULL); + LTC_ARGCHK(res != NULL); + + if ((err = _pbes1_from_oid(s, &res->type)) != CRYPT_OK) return err; + + if (!LTC_ASN1_IS_TYPE(s->next, LTC_ASN1_SEQUENCE) || + !LTC_ASN1_IS_TYPE(s->next->child, LTC_ASN1_OCTET_STRING) || + !LTC_ASN1_IS_TYPE(s->next->child->next, LTC_ASN1_INTEGER)) { + return CRYPT_INVALID_PACKET; + } + /* PBES1: encrypted pkcs8 - pbeWithMD5AndDES-CBC: + * 0:d=0 hl=4 l= 329 cons: SEQUENCE + * 4:d=1 hl=2 l= 27 cons: SEQUENCE + * 6:d=2 hl=2 l= 9 prim: OBJECT :pbeWithMD5AndDES-CBC (== 1.2.840.113549.1.5.3) (== *s) + * 17:d=2 hl=2 l= 14 cons: SEQUENCE (== *lalgparam) + * 19:d=3 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:8EDF749A06CCDE51 (== salt) + * 29:d=3 hl=2 l= 2 prim: INTEGER :0800 (== iterations) + * 33:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data) + */ + res->salt = s->next->child; + res->iterations = mp_get_int(s->next->child->next->data); + + return CRYPT_OK; +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/misc/pbes/pbes2.c b/src/ltc/misc/pbes/pbes2.c new file mode 100644 index 0000000..f5f98f2 --- /dev/null +++ b/src/ltc/misc/pbes/pbes2.c @@ -0,0 +1,208 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ +#include "tomcrypt_private.h" + +#ifdef LTC_PBES + +static const char * const _oid_pbes2 = "1.2.840.113549.1.5.13"; +static const char * const _oid_pbkdf2 = "1.2.840.113549.1.5.12"; + +typedef struct { + const char *oid; + const char *id; +} oid_id_st; + +static const oid_id_st _hmac_oid_names[] = { + { "1.2.840.113549.2.7", "sha1" }, + { "1.2.840.113549.2.8", "sha224" }, + { "1.2.840.113549.2.9", "sha256" }, + { "1.2.840.113549.2.10", "sha384" }, + { "1.2.840.113549.2.11", "sha512" }, + { "1.2.840.113549.2.12", "sha512-224" }, + { "1.2.840.113549.2.13", "sha512-256" }, +}; + +static const pbes_properties _pbes2_default_types[] = { + { pkcs_5_alg2, "sha1", "des", 8, 0 }, + { pkcs_5_alg2, "sha1", "rc2", 4, 0 }, + { pkcs_5_alg2, "sha1", "3des", 24, 0 }, + { pkcs_5_alg2, "sha1", "aes", 16, 0 }, + { pkcs_5_alg2, "sha1", "aes", 24, 0 }, + { pkcs_5_alg2, "sha1", "aes", 32, 0 }, +}; + +typedef struct { + const pbes_properties *data; + const char* oid; +} oid_to_pbes; + +static const oid_to_pbes _pbes2_list[] = { + { &_pbes2_default_types[0], "1.3.14.3.2.7" }, /* http://www.oid-info.com/get/1.3.14.3.2.7 desCBC */ + { &_pbes2_default_types[1], "1.2.840.113549.3.2" }, /* http://www.oid-info.com/get/1.2.840.113549.3.2 rc2CBC */ + { &_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 */ + { &_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 */ + { &_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 */ + { &_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 */ +}; + +static int _pbes2_from_oid(const ltc_asn1_list *cipher_oid, const ltc_asn1_list *hmac_oid, pbes_properties *res) +{ + unsigned int i; + for (i = 0; i < sizeof(_pbes2_list)/sizeof(_pbes2_list[0]); ++i) { + if (pk_oid_cmp_with_asn1(_pbes2_list[i].oid, cipher_oid) == CRYPT_OK) { + *res = *_pbes2_list[i].data; + break; + } + } + if (res->c == NULL) return CRYPT_INVALID_CIPHER; + if (hmac_oid != NULL) { + for (i = 0; i < sizeof(_hmac_oid_names)/sizeof(_hmac_oid_names[0]); ++i) { + if (pk_oid_cmp_with_asn1(_hmac_oid_names[i].oid, hmac_oid) == CRYPT_OK) { + res->h = _hmac_oid_names[i].id; + return CRYPT_OK; + } + } + return CRYPT_INVALID_HASH; + } + return CRYPT_OK; +} + + +/** + Extract PBES2 parameters + + @param s The start of the sequence with potential PBES2 parameters + @param res Pointer to where the extracted parameters should be stored + @return CRYPT_OK on success +*/ +int pbes2_extract(const ltc_asn1_list *s, pbes_arg *res) +{ + unsigned long klen; + ltc_asn1_list *lkdf, *lenc, *loptseq, *liter, *lhmac; + int err; + + LTC_ARGCHK(s != NULL); + LTC_ARGCHK(res != NULL); + + if ((err = pk_oid_cmp_with_asn1(_oid_pbes2, s)) != CRYPT_OK) return err; + + if (!LTC_ASN1_IS_TYPE(s->next, LTC_ASN1_SEQUENCE) || + !LTC_ASN1_IS_TYPE(s->next->child, LTC_ASN1_SEQUENCE) || + !LTC_ASN1_IS_TYPE(s->next->child->child, LTC_ASN1_OBJECT_IDENTIFIER) || + !LTC_ASN1_IS_TYPE(s->next->child->child->next, LTC_ASN1_SEQUENCE) || + !LTC_ASN1_IS_TYPE(s->next->child->next, LTC_ASN1_SEQUENCE) || + !LTC_ASN1_IS_TYPE(s->next->child->next->child, LTC_ASN1_OBJECT_IDENTIFIER)) { + return CRYPT_INVALID_PACKET; + } + /* PBES2: encrypted pkcs8 - PBES2+PBKDF2+des-ede3-cbc: + * 0:d=0 hl=4 l= 380 cons: SEQUENCE + * 4:d=1 hl=2 l= 78 cons: SEQUENCE + * 6:d=2 hl=2 l= 9 prim: OBJECT :PBES2 (== 1.2.840.113549.1.5.13) (== *s) + * 17:d=2 hl=2 l= 65 cons: SEQUENCE + * 19:d=3 hl=2 l= 41 cons: SEQUENCE + * 21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2 (== *lkdf) + * 32:d=4 hl=2 l= 28 cons: SEQUENCE + * 34:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:28BA4ABF6AA76A3D (== res->salt) + * 44:d=5 hl=2 l= 2 prim: INTEGER :0800 (== res->iterations, *liter) + * 48:d=5 hl=2 l= 12 cons: SEQUENCE (== *loptseq - this sequence is optional, may be missing) + * 50:d=6 hl=2 l= 8 prim: OBJECT :hmacWithSHA256 (== *lhmac) + * 60:d=6 hl=2 l= 0 prim: NULL + * 62:d=3 hl=2 l= 20 cons: SEQUENCE + * 64:d=4 hl=2 l= 8 prim: OBJECT :des-ede3-cbc (== *lenc) + * 74:d=4 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:B1404C4688DC9A5A + * 84:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data) + */ + lkdf = s->next->child->child; + lenc = s->next->child->next->child; + + if ((err = pk_oid_cmp_with_asn1(_oid_pbkdf2, lkdf)) != CRYPT_OK) return err; + + if (!LTC_ASN1_IS_TYPE(lkdf->next, LTC_ASN1_SEQUENCE) || + !LTC_ASN1_IS_TYPE(lkdf->next->child, LTC_ASN1_OCTET_STRING) || + !LTC_ASN1_IS_TYPE(lkdf->next->child->next, LTC_ASN1_INTEGER)) { + return CRYPT_INVALID_PACKET; + } + + liter = lkdf->next->child->next; + loptseq = liter->next; + res->salt = lkdf->next->child; + res->iterations = mp_get_int(liter->data); + + /* There's an optional INTEGER keyLength after the iterations, skip that if it's there. + * c.f. RFC 2898 A.2 PBKDF2 */ + if(LTC_ASN1_IS_TYPE(loptseq, LTC_ASN1_INTEGER)) { + loptseq = loptseq->next; + } + + /* this sequence is optional */ + lhmac = NULL; + if (LTC_ASN1_IS_TYPE(loptseq, LTC_ASN1_SEQUENCE) && + LTC_ASN1_IS_TYPE(loptseq->child, LTC_ASN1_OBJECT_IDENTIFIER)) { + lhmac = loptseq->child; + } + if ((err = _pbes2_from_oid(lenc, lhmac, &res->type)) != CRYPT_OK) return err; + + if (LTC_ASN1_IS_TYPE(lenc->next, LTC_ASN1_OCTET_STRING)) { + /* 'NON-RC2'-CBC */ + res->iv = lenc->next; + } else if (LTC_ASN1_IS_TYPE(lenc->next, LTC_ASN1_SEQUENCE)) { + /* RC2-CBC is a bit special ... + * + * RC2-CBC-Parameter ::= SEQUENCE { + * rc2ParameterVersion INTEGER OPTIONAL, + * iv OCTET STRING (SIZE(8)) } + */ + if (LTC_ASN1_IS_TYPE(lenc->next->child, LTC_ASN1_INTEGER) && + LTC_ASN1_IS_TYPE(lenc->next->child->next, LTC_ASN1_OCTET_STRING)) { + klen = mp_get_int(lenc->next->child->data); + res->iv = lenc->next->child->next; + /* + * Effective Key Bits Encoding + * 40 160 + * 64 120 + * 128 58 + * b >= 256 b + */ + switch (klen) { + case 160: + res->key_bits = 40; + break; + case 120: + res->key_bits = 64; + break; + case 58: + res->key_bits = 128; + break; + default: + /* We don't handle undefined Key Bits */ + if (klen < 256) return CRYPT_INVALID_KEYSIZE; + + res->key_bits = klen; + break; + } + } else if (LTC_ASN1_IS_TYPE(lenc->next->child, LTC_ASN1_OCTET_STRING)) { + res->iv = lenc->next->child; + /* + * If the rc2ParameterVersion field is omitted, the "effective key bits" + * defaults to 32. + */ + res->key_bits = 32; + } else { + return CRYPT_INVALID_PACKET; + } + } + + return CRYPT_OK; +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/misc/pk_get_oid.c b/src/ltc/misc/pk_get_oid.c deleted file mode 100644 index 35e35d6..0000000 --- a/src/ltc/misc/pk_get_oid.c +++ /dev/null @@ -1,60 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - */ -#include "tomcrypt_private.h" - -#ifdef LTC_DER -static const oid_st rsa_oid = { - { 1, 2, 840, 113549, 1, 1, 1 }, - 7, -}; - -static const oid_st dsa_oid = { - { 1, 2, 840, 10040, 4, 1 }, - 6, -}; - -static const oid_st ec_oid = { - { 1, 2, 840, 10045, 2, 1 }, - 6, -}; - -static const oid_st ec_primef = { - { 1, 2, 840, 10045, 1, 1 }, - 6, -}; - -/* - Returns the OID of the public key algorithm. - @return CRYPT_OK if valid -*/ -int pk_get_oid(int pk, oid_st *st) -{ - switch (pk) { - case PKA_RSA: - XMEMCPY(st, &rsa_oid, sizeof(*st)); - break; - case PKA_DSA: - XMEMCPY(st, &dsa_oid, sizeof(*st)); - break; - case PKA_EC: - XMEMCPY(st, &ec_oid, sizeof(*st)); - break; - case PKA_EC_PRIMEF: - XMEMCPY(st, &ec_primef, sizeof(*st)); - break; - default: - return CRYPT_INVALID_ARG; - } - return CRYPT_OK; -} -#endif - -/* ref: $Format:%D$ */ -/* git commit: $Format:%H$ */ -/* commit time: $Format:%ai$ */ diff --git a/src/ltc/misc/pk_oid_str.c b/src/ltc/misc/pk_oid_str.c deleted file mode 100644 index ef83fb1..0000000 --- a/src/ltc/misc/pk_oid_str.c +++ /dev/null @@ -1,82 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - */ - -#include "tomcrypt_private.h" - -int pk_oid_str_to_num(const char *OID, unsigned long *oid, unsigned long *oidlen) -{ - unsigned long i, j, limit; - - LTC_ARGCHK(oid != NULL); - LTC_ARGCHK(oidlen != NULL); - - limit = *oidlen; - *oidlen = 0; /* make sure that we return zero oidlen on error */ - for (i = 0; i < limit; i++) oid[i] = 0; - - if ((OID == NULL) || (strlen(OID) == 0)) return CRYPT_OK; - - for (i = 0, j = 0; i < strlen(OID); i++) { - if (OID[i] == '.') { - if (++j >= limit) return CRYPT_ERROR; - } - else if ((OID[i] >= '0') && (OID[i] <= '9')) { - oid[j] = oid[j] * 10 + (OID[i] - '0'); - } - else { - return CRYPT_ERROR; - } - } - if (j == 0) return CRYPT_ERROR; - *oidlen = j + 1; - return CRYPT_OK; -} - -int pk_oid_num_to_str(const unsigned long *oid, unsigned long oidlen, char *OID, unsigned long *outlen) -{ - int i; - unsigned long j, k; - char tmp[256] = { 0 }; - unsigned long tmpsz = sizeof(tmp); - - LTC_ARGCHK(oid != NULL); - LTC_ARGCHK(OID != NULL); - LTC_ARGCHK(outlen != NULL); - - for (i = oidlen - 1, k = 0; i >= 0; i--) { - j = oid[i]; - if (j == 0) { - tmp[k] = '0'; - if (++k >= tmpsz) return CRYPT_ERROR; - } - else { - while (j > 0) { - tmp[k] = '0' + (j % 10); - if (++k >= tmpsz) return CRYPT_ERROR; - j /= 10; - } - } - if (i > 0) { - tmp[k] = '.'; - if (++k >= tmpsz) return CRYPT_ERROR; - } - } - if (*outlen < k + 1) { - *outlen = k + 1; - return CRYPT_BUFFER_OVERFLOW; - } - for (j = 0; j < k; j++) OID[j] = tmp[k - j - 1]; - OID[k] = '\0'; - *outlen = k; /* the length without terminating NUL byte */ - return CRYPT_OK; -} - -/* ref: $Format:%D$ */ -/* git commit: $Format:%H$ */ -/* commit time: $Format:%ai$ */ diff --git a/src/ltc/misc/pkcs12/pkcs12_kdf.c b/src/ltc/misc/pkcs12/pkcs12_kdf.c new file mode 100644 index 0000000..a67b4fa --- /dev/null +++ b/src/ltc/misc/pkcs12/pkcs12_kdf.c @@ -0,0 +1,92 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_PKCS_12 + +int pkcs12_kdf( int hash_id, + const unsigned char *pw, unsigned long pwlen, + const unsigned char *salt, unsigned long saltlen, + unsigned int iterations, unsigned char purpose, + unsigned char *out, unsigned long outlen) +{ + unsigned long u = hash_descriptor[hash_id].hashsize; + unsigned long v = hash_descriptor[hash_id].blocksize; + unsigned long c = (outlen + u - 1) / u; + unsigned long Slen = ((saltlen + v - 1) / v) * v; + unsigned long Plen = ((pwlen + v - 1) / v) * v; + unsigned long k = (Plen + Slen) / v; + unsigned long Alen, keylen = 0; + unsigned int tmp, i, j, n; + unsigned char ch; + unsigned char D[MAXBLOCKSIZE], A[MAXBLOCKSIZE], B[MAXBLOCKSIZE]; + unsigned char *I, *key; + int err = CRYPT_ERROR; + + LTC_ARGCHK(pw != NULL); + LTC_ARGCHK(salt != NULL); + LTC_ARGCHK(out != NULL); + + key = XMALLOC(u * c); + I = XMALLOC(Plen + Slen); + if (key == NULL || I == NULL) goto DONE; + zeromem(key, u * c); + + for (i = 0; i < v; i++) D[i] = purpose; /* D - diversifier */ + for (i = 0; i < Slen; i++) I[i] = salt[i % saltlen]; + for (i = 0; i < Plen; i++) I[Slen + i] = pw[i % pwlen]; /* I = Salt || Pass */ + + for (i = 0; i < c; i++) { + Alen = sizeof(A); + err = hash_memory_multi(hash_id, A, &Alen, D, v, I, Slen + Plen, NULL); /* A = HASH(D || I) */ + if (err != CRYPT_OK) goto DONE; + for (j = 1; j < iterations; j++) { + err = hash_memory(hash_id, A, Alen, A, &Alen); /* A = HASH(A) */ + if (err != CRYPT_OK) goto DONE; + } + /* fill buffer B with A */ + for (j = 0; j < v; j++) B[j] = A[j % Alen]; + /* B += 1 */ + for (j = v; j > 0; j--) { + if (++B[j - 1] != 0) break; + } + /* I_n += B */ + for (n = 0; n < k; n++) { + ch = 0; + for (j = v; j > 0; j--) { + tmp = I[n * v + j - 1] + B[j - 1] + ch; + ch = (unsigned char)((tmp >> 8) & 0xFF); + I[n * v + j - 1] = (unsigned char)(tmp & 0xFF); + } + } + /* store derived key block */ + XMEMCPY(&key[keylen], A, Alen); + keylen += Alen; + } + + XMEMCPY(out, key, outlen); + err = CRYPT_OK; +DONE: + if (I) { + zeromem(I, Plen + Slen); + XFREE(I); + } + if (key) { + zeromem(key, u * c); + XFREE(key); + } + return err; +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/misc/pkcs12/pkcs12_utf8_to_utf16.c b/src/ltc/misc/pkcs12/pkcs12_utf8_to_utf16.c new file mode 100644 index 0000000..5175a15 --- /dev/null +++ b/src/ltc/misc/pkcs12/pkcs12_utf8_to_utf16.c @@ -0,0 +1,69 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_PKCS_12 + +int pkcs12_utf8_to_utf16(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { + unsigned long len = 0; + const unsigned char* in_end = in + inlen; + const ulong32 offset[6] = { + 0x00000000UL, 0x00003080UL, 0x000E2080UL, + 0x03C82080UL, 0xFA082080UL, 0x82082080UL + }; + int err = CRYPT_ERROR; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + while (in < in_end) { + ulong32 ch = 0; + unsigned short extra = 0; /* 0 */ + if (*in >= 192) extra++; /* 1 */ + if (*in >= 224) extra++; /* 2 */ + if (*in >= 240) extra++; /* 3 */ + if (*in >= 248) extra++; /* 4 */ + if (*in >= 252) extra++; /* 5 */ + if (in + extra >= in_end) goto ERROR; + switch (extra) { + case 5: ch += *in++; ch <<= 6; + /* FALLTHROUGH */ + case 4: ch += *in++; ch <<= 6; + /* FALLTHROUGH */ + case 3: ch += *in++; ch <<= 6; + /* FALLTHROUGH */ + case 2: ch += *in++; ch <<= 6; + /* FALLTHROUGH */ + case 1: ch += *in++; ch <<= 6; + /* FALLTHROUGH */ + case 0: ch += *in++; + } + ch -= offset[extra]; + if (ch > 0xFFFF) goto ERROR; + if (*outlen >= len + 2) { + out[len] = (unsigned short)((ch >> 8) & 0xFF); + out[len + 1] = (unsigned char)(ch & 0xFF); + } + len += 2; + } + + err = len > *outlen ? CRYPT_BUFFER_OVERFLOW : CRYPT_OK; + *outlen = len; +ERROR: + return err; +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/misc/pkcs5/pkcs_5_1.c b/src/ltc/misc/pkcs5/pkcs_5_1.c index 0794698..a90bc57 100644 --- a/src/ltc/misc/pkcs5/pkcs_5_1.c +++ b/src/ltc/misc/pkcs5/pkcs_5_1.c @@ -109,19 +109,23 @@ the output buffer (and how many bytes we have to copy) */ outidx = block*hash_descriptor[hash_idx].hashsize; nb = hash_descriptor[hash_idx].hashsize; - if(outidx+nb > *outlen) + if(outidx+nb > *outlen) { nb = *outlen - outidx; - if(nb > 0) + } + if(nb > 0) { XMEMCPY(out+outidx, buf, nb); + } block++; - if (!openssl_compat) + if (!openssl_compat) { break; + } } /* In strict mode, we always return the hashsize, in compat we filled it as much as was requested, so we leave it alone. */ - if(!openssl_compat) + if(!openssl_compat) { *outlen = hash_descriptor[hash_idx].hashsize; + } err = CRYPT_OK; LBL_ERR: diff --git a/src/ltc/misc/ssh/ssh_decode_sequence_multi.c b/src/ltc/misc/ssh/ssh_decode_sequence_multi.c new file mode 100644 index 0000000..5828cfb --- /dev/null +++ b/src/ltc/misc/ssh/ssh_decode_sequence_multi.c @@ -0,0 +1,162 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ +#include "tomcrypt_private.h" +#include + +/** + @file ssh_decode_sequence_multi.c + SSH data type representation as per RFC4251, Russ Williams +*/ + +#ifdef LTC_SSH + +/** + Decode a SSH sequence using a VA list + @param in Data to decode + @param inlen Length of buffer to decode + @remark <...> is of the form (int, void*) except for string + @return CRYPT_OK on success +*/ +int ssh_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...) +{ + int err; + va_list args; + ssh_data_type type; + void *vdata; + unsigned char *cdata; + char *sdata; + ulong32 *u32data; + ulong64 *u64data; + unsigned long bufsize; + ulong32 size; + + LTC_ARGCHK(in != NULL); + + /* Decode values from buffer */ + va_start(args, inlen); + while ((type = (ssh_data_type)va_arg(args, int)) != LTC_SSHDATA_EOL) { + /* Size of length field */ + if (type == LTC_SSHDATA_STRING || + type == LTC_SSHDATA_NAMELIST || + type == LTC_SSHDATA_MPINT) + { + /* Check we'll not read too far */ + if (inlen < 4) { + err = CRYPT_BUFFER_OVERFLOW; + goto error; + } + } + + /* Calculate (or read) length of data */ + size = 0xFFFFFFFFU; + switch (type) { + case LTC_SSHDATA_BYTE: + case LTC_SSHDATA_BOOLEAN: + size = 1; + break; + case LTC_SSHDATA_UINT32: + size = 4; + break; + case LTC_SSHDATA_UINT64: + size = 8; + break; + case LTC_SSHDATA_STRING: + case LTC_SSHDATA_NAMELIST: + case LTC_SSHDATA_MPINT: + LOAD32H(size, in); + in += 4; + inlen -= 4; + break; + + case LTC_SSHDATA_EOL: + /* Should never get here */ + err = CRYPT_INVALID_ARG; + goto error; + } + + /* Check we'll not read too far */ + if (inlen < size) { + err = CRYPT_BUFFER_OVERFLOW; + goto error; + } else { + inlen -= size; + } + + /* Read data */ + switch (type) { + case LTC_SSHDATA_BYTE: + cdata = va_arg(args, unsigned char*); + *cdata = *in++; + break; + case LTC_SSHDATA_BOOLEAN: + cdata = va_arg(args, unsigned char*); + /* + The value 0 represents FALSE, and the value 1 represents TRUE. All non-zero values MUST be + interpreted as TRUE; however, applications MUST NOT store values other than 0 and 1. + */ + *cdata = (*in++)?1:0; + break; + case LTC_SSHDATA_UINT32: + u32data = va_arg(args, ulong32*); + LOAD32H(*u32data, in); + in += 4; + break; + case LTC_SSHDATA_UINT64: + u64data = va_arg(args, ulong64*); + LOAD64H(*u64data, in); + in += 8; + break; + case LTC_SSHDATA_STRING: + case LTC_SSHDATA_NAMELIST: + sdata = va_arg(args, char*); + bufsize = va_arg(args, unsigned long); + if (size >= bufsize) { + err = CRYPT_BUFFER_OVERFLOW; + goto error; + } + if (size > 0) { + XSTRNCPY(sdata, (const char *)in, size); + sdata[size] = '\0'; /* strncpy doesn't NUL-terminate */ + } else { + *sdata = '\0'; + } + in += size; + break; + case LTC_SSHDATA_MPINT: + vdata = va_arg(args, void*); + if (size == 0) { + if ((err = mp_set(vdata, 0)) != CRYPT_OK) { goto error; } + } else if ((in[0] & 0x80) != 0) { + /* Negative number - not supported */ + err = CRYPT_INVALID_PACKET; + goto error; + } else { + if ((err = mp_read_unsigned_bin(vdata, (unsigned char *)in, size)) != CRYPT_OK) { goto error; } + } + in += size; + break; + + case LTC_SSHDATA_EOL: + /* Should never get here */ + err = CRYPT_INVALID_ARG; + goto error; + } + } + err = CRYPT_OK; + +error: + va_end(args); + return err; +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/misc/ssh/ssh_encode_sequence_multi.c b/src/ltc/misc/ssh/ssh_encode_sequence_multi.c new file mode 100644 index 0000000..96facd5 --- /dev/null +++ b/src/ltc/misc/ssh/ssh_encode_sequence_multi.c @@ -0,0 +1,168 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ +#include "tomcrypt_private.h" +#include + +/** + @file ssh_encode_sequence_multi.c + SSH data type representation as per RFC4251, Russ Williams +*/ + +#ifdef LTC_SSH + +/** + Encode a SSH sequence using a VA list + @param out [out] Destination for data + @param outlen [in/out] Length of buffer and resulting length of output + @remark <...> is of the form (int, void*) + @return CRYPT_OK on success +*/ +int ssh_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) +{ + int err; + va_list args; + ulong32 size; + ssh_data_type type; + void *vdata; + const char *sdata; + int idata; + ulong32 u32data; + ulong64 u64data; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* Check values and calculate output size */ + size = 0; + va_start(args, outlen); + while ((type = (ssh_data_type)va_arg(args, int)) != LTC_SSHDATA_EOL) { + switch (type) { + case LTC_SSHDATA_BYTE: + case LTC_SSHDATA_BOOLEAN: /* Both stored as 1 byte */ + LTC_UNUSED_PARAM( va_arg(args, int) ); + size++; + break; + case LTC_SSHDATA_UINT32: + LTC_UNUSED_PARAM( va_arg(args, ulong32) ); + size += 4; + break; + case LTC_SSHDATA_UINT64: + LTC_UNUSED_PARAM( va_arg(args, ulong64) ); + size += 8; + break; + case LTC_SSHDATA_STRING: + case LTC_SSHDATA_NAMELIST: + sdata = va_arg(args, char*); + size += 4; + size += strlen(sdata); + break; + case LTC_SSHDATA_MPINT: + vdata = va_arg(args, void*); + /* Calculate size */ + size += 4; + if (mp_iszero(vdata) != LTC_MP_YES) { + size += mp_unsigned_bin_size(vdata); + if ((mp_count_bits(vdata) & 7) == 0) size++; /* Zero padding if high bit set */ + } + break; + + case LTC_SSHDATA_EOL: /* Should never get here */ + err = CRYPT_INVALID_ARG; + goto error; + } + } + va_end(args); + + /* Check we have sufficient space */ + if (*outlen < size) { + *outlen = size; + err = CRYPT_BUFFER_OVERFLOW; + goto errornoargs; + } + *outlen = size; + + /* Encode values into buffer */ + va_start(args, outlen); + while ((type = (ssh_data_type)va_arg(args, int)) != LTC_SSHDATA_EOL) { + switch (type) { + case LTC_SSHDATA_BYTE: + idata = va_arg(args, int); + + *out++ = (unsigned char)(idata & 255); + break; + case LTC_SSHDATA_BOOLEAN: + idata = va_arg(args, int); + + /* + The value 0 represents FALSE, and the value 1 represents TRUE. All non-zero values MUST be + interpreted as TRUE; however, applications MUST NOT store values other than 0 and 1. + */ + *out++ = (idata)?1:0; + break; + case LTC_SSHDATA_UINT32: + u32data = va_arg(args, ulong32); + STORE32H(u32data, out); + out += 4; + break; + case LTC_SSHDATA_UINT64: + u64data = va_arg(args, ulong64); + STORE64H(u64data, out); + out += 8; + break; + case LTC_SSHDATA_STRING: + case LTC_SSHDATA_NAMELIST: + sdata = va_arg(args, char*); + size = strlen(sdata); + STORE32H(size, out); + out += 4; + XSTRNCPY((char *)out, sdata, size); + out += size; + break; + case LTC_SSHDATA_MPINT: + vdata = va_arg(args, void*); + if (mp_iszero(vdata) == LTC_MP_YES) { + STORE32H(0, out); + out += 4; + } else { + size = mp_unsigned_bin_size(vdata); + if ((mp_count_bits(vdata) & 7) == 0) { + /* Zero padding if high bit set */ + STORE32H(size+1, out); + out += 4; + *out++ = 0; + } else { + STORE32H(size, out); + out += 4; + } + if ((err = mp_to_unsigned_bin(vdata, out)) != CRYPT_OK) { + err = CRYPT_ERROR; + goto error; + } + out += size; + } + break; + + case LTC_SSHDATA_EOL: /* Should never get here */ + err = CRYPT_INVALID_ARG; + goto error; + } + } + err = CRYPT_OK; + +error: + va_end(args); +errornoargs: + return err; +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/modes/cbc/cbc_decrypt.c b/src/ltc/modes/cbc/cbc_decrypt.c index 9cbf6f3..fa56c69 100644 --- a/src/ltc/modes/cbc/cbc_decrypt.c +++ b/src/ltc/modes/cbc/cbc_decrypt.c @@ -58,32 +58,31 @@ if (cipher_descriptor[cbc->cipher].accel_cbc_decrypt != NULL) { return cipher_descriptor[cbc->cipher].accel_cbc_decrypt(ct, pt, len / cbc->blocklen, cbc->IV, &cbc->key); - } else { - while (len) { - /* decrypt */ - if ((err = cipher_descriptor[cbc->cipher].ecb_decrypt(ct, tmp, &cbc->key)) != CRYPT_OK) { - return err; - } + } + while (len) { + /* decrypt */ + if ((err = cipher_descriptor[cbc->cipher].ecb_decrypt(ct, tmp, &cbc->key)) != CRYPT_OK) { + return err; + } - /* xor IV against plaintext */ - #if defined(LTC_FAST) - for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { - tmpy = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) ^ *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)tmp + x)); - *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)ct + x)); - *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)pt + x)) = tmpy; - } - #else - for (x = 0; x < cbc->blocklen; x++) { - tmpy = tmp[x] ^ cbc->IV[x]; - cbc->IV[x] = ct[x]; - pt[x] = tmpy; - } - #endif + /* xor IV against plaintext */ +#if defined(LTC_FAST) + for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { + tmpy = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) ^ *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)tmp + x)); + *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)ct + x)); + *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)pt + x)) = tmpy; + } +#else + for (x = 0; x < cbc->blocklen; x++) { + tmpy = tmp[x] ^ cbc->IV[x]; + cbc->IV[x] = ct[x]; + pt[x] = tmpy; + } +#endif - ct += cbc->blocklen; - pt += cbc->blocklen; - len -= cbc->blocklen; - } + ct += cbc->blocklen; + pt += cbc->blocklen; + len -= cbc->blocklen; } return CRYPT_OK; } diff --git a/src/ltc/modes/cbc/cbc_encrypt.c b/src/ltc/modes/cbc/cbc_encrypt.c index 6ba9a0c..88f519d 100644 --- a/src/ltc/modes/cbc/cbc_encrypt.c +++ b/src/ltc/modes/cbc/cbc_encrypt.c @@ -52,39 +52,38 @@ if (cipher_descriptor[cbc->cipher].accel_cbc_encrypt != NULL) { return cipher_descriptor[cbc->cipher].accel_cbc_encrypt(pt, ct, len / cbc->blocklen, cbc->IV, &cbc->key); - } else { - while (len) { - /* xor IV against plaintext */ - #if defined(LTC_FAST) - for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { - *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) ^= *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)pt + x)); - } - #else - for (x = 0; x < cbc->blocklen; x++) { - cbc->IV[x] ^= pt[x]; - } - #endif + } + while (len) { + /* xor IV against plaintext */ +#if defined(LTC_FAST) + for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { + *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) ^= *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)pt + x)); + } +#else + for (x = 0; x < cbc->blocklen; x++) { + cbc->IV[x] ^= pt[x]; + } +#endif - /* encrypt */ - if ((err = cipher_descriptor[cbc->cipher].ecb_encrypt(cbc->IV, ct, &cbc->key)) != CRYPT_OK) { - return err; - } + /* encrypt */ + if ((err = cipher_descriptor[cbc->cipher].ecb_encrypt(cbc->IV, ct, &cbc->key)) != CRYPT_OK) { + return err; + } - /* store IV [ciphertext] for a future block */ - #if defined(LTC_FAST) - for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { - *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)ct + x)); - } - #else - for (x = 0; x < cbc->blocklen; x++) { - cbc->IV[x] = ct[x]; - } - #endif + /* store IV [ciphertext] for a future block */ +#if defined(LTC_FAST) + for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { + *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)cbc->IV + x)) = *(LTC_FAST_TYPE_PTR_CAST((unsigned char *)ct + x)); + } +#else + for (x = 0; x < cbc->blocklen; x++) { + cbc->IV[x] = ct[x]; + } +#endif - ct += cbc->blocklen; - pt += cbc->blocklen; - len -= cbc->blocklen; - } + ct += cbc->blocklen; + pt += cbc->blocklen; + len -= cbc->blocklen; } return CRYPT_OK; } diff --git a/src/ltc/modes/cfb/cfb_start.c b/src/ltc/modes/cfb/cfb_start.c index caccb5a..22b3e3c 100644 --- a/src/ltc/modes/cfb/cfb_start.c +++ b/src/ltc/modes/cfb/cfb_start.c @@ -43,8 +43,9 @@ /* copy data */ cfb->cipher = cipher; cfb->blocklen = cipher_descriptor[cipher].block_length; - for (x = 0; x < cfb->blocklen; x++) + for (x = 0; x < cfb->blocklen; x++) { cfb->IV[x] = IV[x]; + } /* init the cipher */ if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &cfb->key)) != CRYPT_OK) { diff --git a/src/ltc/modes/ecb/ecb_decrypt.c b/src/ltc/modes/ecb/ecb_decrypt.c index b8727d2..fdeec4d 100644 --- a/src/ltc/modes/ecb/ecb_decrypt.c +++ b/src/ltc/modes/ecb/ecb_decrypt.c @@ -39,15 +39,14 @@ /* check for accel */ if (cipher_descriptor[ecb->cipher].accel_ecb_decrypt != NULL) { return cipher_descriptor[ecb->cipher].accel_ecb_decrypt(ct, pt, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key); - } else { - while (len) { - if ((err = cipher_descriptor[ecb->cipher].ecb_decrypt(ct, pt, &ecb->key)) != CRYPT_OK) { - return err; - } - pt += cipher_descriptor[ecb->cipher].block_length; - ct += cipher_descriptor[ecb->cipher].block_length; - len -= cipher_descriptor[ecb->cipher].block_length; + } + while (len) { + if ((err = cipher_descriptor[ecb->cipher].ecb_decrypt(ct, pt, &ecb->key)) != CRYPT_OK) { + return err; } + pt += cipher_descriptor[ecb->cipher].block_length; + ct += cipher_descriptor[ecb->cipher].block_length; + len -= cipher_descriptor[ecb->cipher].block_length; } return CRYPT_OK; } diff --git a/src/ltc/modes/ecb/ecb_encrypt.c b/src/ltc/modes/ecb/ecb_encrypt.c index d31635b..e36c3d3 100644 --- a/src/ltc/modes/ecb/ecb_encrypt.c +++ b/src/ltc/modes/ecb/ecb_encrypt.c @@ -39,15 +39,14 @@ /* check for accel */ if (cipher_descriptor[ecb->cipher].accel_ecb_encrypt != NULL) { return cipher_descriptor[ecb->cipher].accel_ecb_encrypt(pt, ct, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key); - } else { - while (len) { - if ((err = cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key)) != CRYPT_OK) { - return err; - } - pt += cipher_descriptor[ecb->cipher].block_length; - ct += cipher_descriptor[ecb->cipher].block_length; - len -= cipher_descriptor[ecb->cipher].block_length; + } + while (len) { + if ((err = cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key)) != CRYPT_OK) { + return err; } + pt += cipher_descriptor[ecb->cipher].block_length; + ct += cipher_descriptor[ecb->cipher].block_length; + len -= cipher_descriptor[ecb->cipher].block_length; } return CRYPT_OK; } diff --git a/src/ltc/pk/asn1/der/general/der_decode_asn1_length.c b/src/ltc/pk/asn1/der/general/der_decode_asn1_length.c index 0021eea..bf8595d 100644 --- a/src/ltc/pk/asn1/der/general/der_decode_asn1_length.c +++ b/src/ltc/pk/asn1/der/general/der_decode_asn1_length.c @@ -41,9 +41,11 @@ real_len &= 0x7F; if (real_len == 0) { return CRYPT_PK_ASN1_ERROR; - } else if (real_len > sizeof(decoded_len)) { + } + if (real_len > sizeof(decoded_len)) { return CRYPT_OVERFLOW; - } else if (real_len > (*inlen - 1)) { + } + if (real_len > (*inlen - 1)) { return CRYPT_BUFFER_OVERFLOW; } decoded_len = 0; diff --git a/src/ltc/pk/asn1/der/general/der_encode_asn1_identifier.c b/src/ltc/pk/asn1/der/general/der_encode_asn1_identifier.c index c366ad3..38fcaf6 100644 --- a/src/ltc/pk/asn1/der/general/der_encode_asn1_identifier.c +++ b/src/ltc/pk/asn1/der/general/der_encode_asn1_identifier.c @@ -41,16 +41,15 @@ } *outlen = 1; return CRYPT_OK; - } else { - if (id->klass < LTC_ASN1_CL_UNIVERSAL || id->klass > LTC_ASN1_CL_PRIVATE) { - return CRYPT_INVALID_ARG; - } - if (id->pc < LTC_ASN1_PC_PRIMITIVE || id->pc > LTC_ASN1_PC_CONSTRUCTED) { - return CRYPT_INVALID_ARG; - } - if (id->tag > (ULONG_MAX >> (8 + 7))) { - return CRYPT_INVALID_ARG; - } + } + if (id->klass < LTC_ASN1_CL_UNIVERSAL || id->klass > LTC_ASN1_CL_PRIVATE) { + return CRYPT_INVALID_ARG; + } + if (id->pc < LTC_ASN1_PC_PRIMITIVE || id->pc > LTC_ASN1_PC_CONSTRUCTED) { + return CRYPT_INVALID_ARG; + } + if (id->tag > (ULONG_MAX >> (8 + 7))) { + return CRYPT_INVALID_ARG; } if (out != NULL) { diff --git a/src/ltc/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c b/src/ltc/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c index a5f8473..34ea828 100644 --- a/src/ltc/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c +++ b/src/ltc/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c @@ -112,7 +112,8 @@ /* now is it Z or . */ if (buf[x] == 'Z') { return CRYPT_OK; - } else if (buf[x] == '.') { + } + if (buf[x] == '.') { x++; while (buf[x] >= '0' && buf[x] <= '9') { unsigned fs = out->fs; @@ -127,14 +128,14 @@ /* now is it Z, +, - */ if (buf[x] == 'Z') { return CRYPT_OK; - } else if (buf[x] == '+' || buf[x] == '-') { + } + if (buf[x] == '+' || buf[x] == '-') { out->off_dir = (buf[x++] == '+') ? 0 : 1; DECODE_V(out->off_hh, 24); DECODE_V(out->off_mm, 60); return CRYPT_OK; - } else { - return CRYPT_INVALID_PACKET; } + return CRYPT_INVALID_PACKET; } #endif diff --git a/src/ltc/pk/asn1/der/object_identifier/der_decode_object_identifier.c b/src/ltc/pk/asn1/der/object_identifier/der_decode_object_identifier.c index f497862..23dcf77 100644 --- a/src/ltc/pk/asn1/der/object_identifier/der_decode_object_identifier.c +++ b/src/ltc/pk/asn1/der/object_identifier/der_decode_object_identifier.c @@ -71,8 +71,13 @@ y++; } else { if (y == 0) { - words[0] = t / 40; - words[1] = t % 40; + if (t <= 79) { + words[0] = t / 40; + words[1] = t % 40; + } else { + words[0] = 2; + words[1] = t - 80; + } y = 2; } else { words[y++] = t; diff --git a/src/ltc/pk/asn1/der/object_identifier/der_length_object_identifier.c b/src/ltc/pk/asn1/der/object_identifier/der_length_object_identifier.c index cc22a3c..e6cff37 100644 --- a/src/ltc/pk/asn1/der/object_identifier/der_length_object_identifier.c +++ b/src/ltc/pk/asn1/der/object_identifier/der_length_object_identifier.c @@ -48,8 +48,8 @@ return CRYPT_INVALID_ARG; } - /* word1 = 0,1,2,3 and word2 0..39 */ - if (words[0] > 3 || (words[0] < 2 && words[1] > 39)) { + /* word1 = 0,1,2 and word2 0..39 */ + if (words[0] > 2 || (words[0] < 2 && words[1] > 39)) { return CRYPT_INVALID_ARG; } diff --git a/src/ltc/pk/asn1/der/set/der_encode_set.c b/src/ltc/pk/asn1/der/set/der_encode_set.c index 636669c..2597197 100644 --- a/src/ltc/pk/asn1/der/set/der_encode_set.c +++ b/src/ltc/pk/asn1/der/set/der_encode_set.c @@ -33,9 +33,8 @@ if (r == 0) { /* their order in the original list now determines the position */ return A->used - B->used; - } else { - return r; } + return r; } /* diff --git a/src/ltc/pk/asn1/der/utctime/der_decode_utctime.c b/src/ltc/pk/asn1/der/utctime/der_decode_utctime.c index fba9184..c377396 100644 --- a/src/ltc/pk/asn1/der/utctime/der_decode_utctime.c +++ b/src/ltc/pk/asn1/der/utctime/der_decode_utctime.c @@ -95,7 +95,8 @@ /* now is it Z, +, - or 0-9 */ if (buf[x] == 'Z') { return CRYPT_OK; - } else if (buf[x] == '+' || buf[x] == '-') { + } + if (buf[x] == '+' || buf[x] == '-') { out->off_dir = (buf[x++] == '+') ? 0 : 1; DECODE_V(out->off_hh, 24); DECODE_V(out->off_mm, 60); @@ -108,14 +109,14 @@ /* now is it Z, +, - */ if (buf[x] == 'Z') { return CRYPT_OK; - } else if (buf[x] == '+' || buf[x] == '-') { + } + if (buf[x] == '+' || buf[x] == '-') { out->off_dir = (buf[x++] == '+') ? 0 : 1; DECODE_V(out->off_hh, 24); DECODE_V(out->off_mm, 60); return CRYPT_OK; - } else { - return CRYPT_INVALID_PACKET; } + return CRYPT_INVALID_PACKET; } #endif diff --git a/src/ltc/pk/asn1/der/utf8/der_length_utf8_string.c b/src/ltc/pk/asn1/der/utf8/der_length_utf8_string.c index 48eed3b..acece0c 100644 --- a/src/ltc/pk/asn1/der/utf8/der_length_utf8_string.c +++ b/src/ltc/pk/asn1/der/utf8/der_length_utf8_string.c @@ -23,18 +23,17 @@ { if (c <= 0x7F) { return 1; - } else if (c <= 0x7FF) { + } + if (c <= 0x7FF) { return 2; + } #if LTC_WCHAR_MAX == 0xFFFF - } else { + return 3; +#else + if (c <= 0xFFFF) { return 3; } -#else - } else if (c <= 0xFFFF) { - return 3; - } else { - return 4; - } + return 4; #endif } diff --git a/src/ltc/pk/asn1/oid/pk_get_oid.c b/src/ltc/pk/asn1/oid/pk_get_oid.c new file mode 100644 index 0000000..529cf66 --- /dev/null +++ b/src/ltc/pk/asn1/oid/pk_get_oid.c @@ -0,0 +1,45 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ +#include "tomcrypt_private.h" + +#ifdef LTC_DER + +typedef struct { + enum ltc_oid_id id; + const char* oid; +} oid_table_entry; + +static const oid_table_entry pka_oids[] = { + { PKA_RSA, "1.2.840.113549.1.1.1" }, + { PKA_DSA, "1.2.840.10040.4.1" }, + { PKA_EC, "1.2.840.10045.2.1" }, + { PKA_EC_PRIMEF, "1.2.840.10045.1.1" }, +}; + +/* + Returns the OID requested. + @return CRYPT_OK if valid +*/ +int pk_get_oid(enum ltc_oid_id id, const char **st) +{ + unsigned int i; + LTC_ARGCHK(st != NULL); + for (i = 0; i < sizeof(pka_oids)/sizeof(pka_oids[0]); ++i) { + if (pka_oids[i].id == id) { + *st = pka_oids[i].oid; + return CRYPT_OK; + } + } + return CRYPT_INVALID_ARG; +} +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/asn1/oid/pk_oid_cmp.c b/src/ltc/pk/asn1/oid/pk_oid_cmp.c new file mode 100644 index 0000000..5e3f120 --- /dev/null +++ b/src/ltc/pk/asn1/oid/pk_oid_cmp.c @@ -0,0 +1,54 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ +#include "tomcrypt_private.h" + +#ifdef LTC_DER + +/* + Compare an OID string to an array of `unsigned long`. + @return CRYPT_OK if equal +*/ +int pk_oid_cmp_with_ulong(const char *o1, const unsigned long *o2, unsigned long o2size) +{ + unsigned long i; + char tmp[256] = { 0 }; + int err; + + if (o1 == NULL || o2 == NULL) return CRYPT_ERROR; + + i = sizeof(tmp); + if ((err = pk_oid_num_to_str(o2, o2size, tmp, &i)) != CRYPT_OK) { + return err; + } + + if (XSTRCMP(o1, tmp) != 0) { + return CRYPT_PK_INVALID_TYPE; + } + + return CRYPT_OK; +} + +/* + Compare an OID string to an OID element decoded from ASN.1. + @return CRYPT_OK if equal +*/ +int pk_oid_cmp_with_asn1(const char *o1, const ltc_asn1_list *o2) +{ + if (o1 == NULL || o2 == NULL) return CRYPT_ERROR; + + if (o2->type != LTC_ASN1_OBJECT_IDENTIFIER) return CRYPT_INVALID_ARG; + + return pk_oid_cmp_with_ulong(o1, o2->data, o2->size); +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/asn1/oid/pk_oid_str.c b/src/ltc/pk/asn1/oid/pk_oid_str.c new file mode 100644 index 0000000..afe6a1e --- /dev/null +++ b/src/ltc/pk/asn1/oid/pk_oid_str.c @@ -0,0 +1,90 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +int pk_oid_str_to_num(const char *OID, unsigned long *oid, unsigned long *oidlen) +{ + unsigned long i, j, limit, OID_len, oid_j; + + LTC_ARGCHK(oidlen != NULL); + + limit = *oidlen; + *oidlen = 0; /* make sure that we return zero oidlen on error */ + for (i = 0; i < limit; i++) oid[i] = 0; + + if (OID == NULL) return CRYPT_OK; + + OID_len = strlen(OID); + if (OID_len == 0) return CRYPT_OK; + + for (i = 0, j = 0; i < OID_len; i++) { + if (OID[i] == '.') { + if (++j >= limit) continue; + } + else if ((OID[i] >= '0') && (OID[i] <= '9')) { + if ((j >= limit) || (oid == NULL)) continue; + oid_j = oid[j]; + oid[j] = oid[j] * 10 + (OID[i] - '0'); + if (oid[j] < oid_j) return CRYPT_OVERFLOW; + } + else { + return CRYPT_ERROR; + } + } + if (j == 0) return CRYPT_ERROR; + if (j >= limit) { + *oidlen = j; + return CRYPT_BUFFER_OVERFLOW; + } + *oidlen = j + 1; + return CRYPT_OK; +} + +int pk_oid_num_to_str(const unsigned long *oid, unsigned long oidlen, char *OID, unsigned long *outlen) +{ + int i; + unsigned long j, k; + char tmp[256] = { 0 }; + + LTC_ARGCHK(oid != NULL); + LTC_ARGCHK(OID != NULL); + LTC_ARGCHK(outlen != NULL); + + for (i = oidlen - 1, k = 0; i >= 0; i--) { + j = oid[i]; + if (j == 0) { + tmp[k] = '0'; + if (++k >= sizeof(tmp)) return CRYPT_ERROR; + } + else { + while (j > 0) { + tmp[k] = '0' + (j % 10); + if (++k >= sizeof(tmp)) return CRYPT_ERROR; + j /= 10; + } + } + if (i > 0) { + tmp[k] = '.'; + if (++k >= sizeof(tmp)) return CRYPT_ERROR; + } + } + if (*outlen < k + 1) { + *outlen = k + 1; + return CRYPT_BUFFER_OVERFLOW; + } + for (j = 0; j < k; j++) OID[j] = tmp[k - j - 1]; + OID[k] = '\0'; + *outlen = k; /* the length without terminating NUL byte */ + return CRYPT_OK; +} + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/asn1/pkcs8/pkcs8_decode_flexi.c b/src/ltc/pk/asn1/pkcs8/pkcs8_decode_flexi.c new file mode 100644 index 0000000..eef2f41 --- /dev/null +++ b/src/ltc/pk/asn1/pkcs8/pkcs8_decode_flexi.c @@ -0,0 +1,107 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ +#include "tomcrypt_private.h" + +#ifdef LTC_PKCS_8 + +/** + PKCS#8 decrypt if necessary & flexi-decode + + @param in Pointer to the ASN.1 encoded input data + @param inlen Length of the input data + @param pwd Pointer to the password that was used when encrypting + @param pwdlen Length of the password + @param decoded_list Pointer to a pointer for the flexi-decoded list + @return CRYPT_OK on success +*/ +int pkcs8_decode_flexi(const unsigned char *in, unsigned long inlen, + const void *pwd, unsigned long pwdlen, + ltc_asn1_list **decoded_list) +{ + unsigned long len = inlen; + unsigned long dec_size; + unsigned char *dec_data = NULL; + ltc_asn1_list *l = NULL; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(decoded_list != NULL); + + *decoded_list = NULL; + if ((err = der_decode_sequence_flexi(in, &len, &l)) == CRYPT_OK) { + /* the following "if" detects whether it is encrypted or not */ + /* PKCS8 Setup + * 0:d=0 hl=4 l= 380 cons: SEQUENCE + * 4:d=1 hl=2 l= 78 cons: SEQUENCE + * 6:d=2 hl=2 l= 9 prim: OBJECT :OID indicating PBES1 or PBES2 (== *lalgoid) + * 17:d=2 hl=2 l= 65 cons: SEQUENCE + * Stuff in between is dependent on whether it's PBES1 or PBES2 + * 84:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data) + */ + if (l->type == LTC_ASN1_SEQUENCE && + LTC_ASN1_IS_TYPE(l->child, LTC_ASN1_SEQUENCE) && + LTC_ASN1_IS_TYPE(l->child->child, LTC_ASN1_OBJECT_IDENTIFIER) && + LTC_ASN1_IS_TYPE(l->child->child->next, LTC_ASN1_SEQUENCE) && + LTC_ASN1_IS_TYPE(l->child->next, LTC_ASN1_OCTET_STRING)) { + ltc_asn1_list *lalgoid = l->child->child; + pbes_arg pbes; + + XMEMSET(&pbes, 0, sizeof(pbes)); + + if (pbes1_extract(lalgoid, &pbes) == CRYPT_OK) { + /* Successfully extracted PBES1 parameters */ + } else if (pbes2_extract(lalgoid, &pbes) == CRYPT_OK) { + /* Successfully extracted PBES2 parameters */ + } else { + /* unsupported encryption */ + err = CRYPT_INVALID_PACKET; + goto LBL_DONE; + } + + pbes.enc_data = l->child->next; + pbes.pwd = pwd; + pbes.pwdlen = pwdlen; + + dec_size = pbes.enc_data->size; + if ((dec_data = XMALLOC(dec_size)) == NULL) { + err = CRYPT_MEM; + goto LBL_DONE; + } + + if ((err = pbes_decrypt(&pbes, dec_data, &dec_size)) != CRYPT_OK) goto LBL_DONE; + + der_free_sequence_flexi(l); + l = NULL; + err = der_decode_sequence_flexi(dec_data, &dec_size, &l); + if (err != CRYPT_OK) goto LBL_DONE; + *decoded_list = l; + } + else { + /* not encrypted */ + err = CRYPT_OK; + *decoded_list = l; + } + /* Set l to NULL so it won't be free'd */ + l = NULL; + } + +LBL_DONE: + if (l) der_free_sequence_flexi(l); + if (dec_data) { + zeromem(dec_data, dec_size); + XFREE(dec_data); + } + return err; +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/asn1/x509/x509_decode_subject_public_key_info.c b/src/ltc/pk/asn1/x509/x509_decode_subject_public_key_info.c index ba51f29..bd84e7c 100644 --- a/src/ltc/pk/asn1/x509/x509_decode_subject_public_key_info.c +++ b/src/ltc/pk/asn1/x509/x509_decode_subject_public_key_info.c @@ -43,7 +43,7 @@ { int err; unsigned long len, alg_id_num; - oid_st oid; + const char* oid; unsigned char *tmpbuf; unsigned long tmpoid[16]; ltc_asn1_list alg_id[2]; @@ -92,11 +92,9 @@ *parameters_len = alg_id[1].size; } - if ((alg_id[0].size != oid.OIDlen) || - XMEMCMP(oid.OID, alg_id[0].data, oid.OIDlen * sizeof(oid.OID[0])) != 0) { - /* OID mismatch */ - err = CRYPT_PK_INVALID_TYPE; - goto LBL_ERR; + if ((err = pk_oid_cmp_with_asn1(oid, &alg_id[0])) != CRYPT_OK) { + /* OID mismatch */ + goto LBL_ERR; } len = subject_pubkey[1].size/8; diff --git a/src/ltc/pk/asn1/x509/x509_encode_subject_public_key_info.c b/src/ltc/pk/asn1/x509/x509_encode_subject_public_key_info.c index bb29fed..c9607b1 100644 --- a/src/ltc/pk/asn1/x509/x509_encode_subject_public_key_info.c +++ b/src/ltc/pk/asn1/x509/x509_encode_subject_public_key_info.c @@ -43,17 +43,22 @@ { int err; ltc_asn1_list alg_id[2]; - oid_st oid; + const char *OID; + unsigned long oid[16], oidlen; LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); - err = pk_get_oid(algorithm, &oid); - if (err != CRYPT_OK) { + if ((err = pk_get_oid(algorithm, &OID)) != CRYPT_OK) { return err; } - LTC_SET_ASN1(alg_id, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid.OID, oid.OIDlen); + oidlen = sizeof(oid)/sizeof(oid[0]); + if ((err = pk_oid_str_to_num(OID, oid, &oidlen)) != CRYPT_OK) { + return err; + } + + LTC_SET_ASN1(alg_id, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, oidlen); LTC_SET_ASN1(alg_id, 1, parameters_type, parameters, parameters_len); return der_encode_sequence_multi(out, outlen, diff --git a/src/ltc/pk/dh/dh_generate_key.c b/src/ltc/pk/dh/dh_generate_key.c index ba737fc..fc9e851 100644 --- a/src/ltc/pk/dh/dh_generate_key.c +++ b/src/ltc/pk/dh/dh_generate_key.c @@ -19,27 +19,25 @@ if (groupsize <= 0) { return 0; } - else if (groupsize <= 192) { + if (groupsize <= 192) { return 30; /* 1536-bit => key size 240-bit */ } - else if (groupsize <= 256) { + if (groupsize <= 256) { return 40; /* 2048-bit => key size 320-bit */ } - else if (groupsize <= 384) { + if (groupsize <= 384) { return 52; /* 3072-bit => key size 416-bit */ } - else if (groupsize <= 512) { + if (groupsize <= 512) { return 60; /* 4096-bit => key size 480-bit */ } - else if (groupsize <= 768) { + if (groupsize <= 768) { return 67; /* 6144-bit => key size 536-bit */ } - else if (groupsize <= 1024) { + if (groupsize <= 1024) { return 77; /* 8192-bit => key size 616-bit */ } - else { - return 0; - } + return 0; } int dh_generate_key(prng_state *prng, int wprng, dh_key *key) diff --git a/src/ltc/pk/dsa/dsa_export.c b/src/ltc/pk/dsa/dsa_export.c index 9058dd3..d254ae6 100644 --- a/src/ltc/pk/dsa/dsa_export.c +++ b/src/ltc/pk/dsa/dsa_export.c @@ -26,6 +26,7 @@ int dsa_export(unsigned char *out, unsigned long *outlen, int type, const dsa_key *key) { unsigned long zero=0; + unsigned char flags[1]; int err, std; LTC_ARGCHK(out != NULL); @@ -35,13 +36,8 @@ std = type & PK_STD; type &= ~PK_STD; - /* can we store the static header? */ if (type == PK_PRIVATE && key->type != PK_PRIVATE) { return CRYPT_PK_TYPE_MISMATCH; - } - - if (type != PK_PUBLIC && type != PK_PRIVATE) { - return CRYPT_INVALID_ARG; } if (type == PK_PRIVATE) { @@ -55,10 +51,8 @@ LTC_ASN1_INTEGER, 1UL, key->x, LTC_ASN1_EOL, 0UL, NULL); } - else { - unsigned char flags[1]; - flags[0] = 1; - return der_encode_sequence_multi(out, outlen, + flags[0] = 1; + return der_encode_sequence_multi(out, outlen, LTC_ASN1_BIT_STRING, 1UL, flags, LTC_ASN1_INTEGER, 1UL, key->g, LTC_ASN1_INTEGER, 1UL, key->p, @@ -66,8 +60,9 @@ LTC_ASN1_INTEGER, 1UL, key->y, LTC_ASN1_INTEGER, 1UL, key->x, LTC_ASN1_EOL, 0UL, NULL); - } - } else { + } + + if (type == PK_PUBLIC) { if (std) { unsigned long tmplen = (unsigned long)(mp_count_bits(key->y) / 8) + 8; unsigned char* tmp = XMALLOC(tmplen); @@ -94,18 +89,17 @@ XFREE(tmp); return err; } - else { - unsigned char flags[1]; - flags[0] = 0; - return der_encode_sequence_multi(out, outlen, + flags[0] = 0; + return der_encode_sequence_multi(out, outlen, LTC_ASN1_BIT_STRING, 1UL, flags, LTC_ASN1_INTEGER, 1UL, key->g, LTC_ASN1_INTEGER, 1UL, key->p, LTC_ASN1_INTEGER, 1UL, key->q, LTC_ASN1_INTEGER, 1UL, key->y, LTC_ASN1_EOL, 0UL, NULL); - } } + + return CRYPT_INVALID_ARG; } #endif diff --git a/src/ltc/pk/ecc/ecc_ansi_x963_import.c b/src/ltc/pk/ecc/ecc_ansi_x963_import.c index 6dbdd21..1dccfbe 100644 --- a/src/ltc/pk/ecc/ecc_ansi_x963_import.c +++ b/src/ltc/pk/ecc/ecc_ansi_x963_import.c @@ -41,11 +41,11 @@ /* initialize key->dp */ if (cu == NULL) { /* this case works only for uncompressed public keys */ - if ((err = ecc_set_dp_by_size((inlen-1)>>1, key)) != CRYPT_OK) { return err; } + if ((err = ecc_set_curve_by_size((inlen-1)>>1, key)) != CRYPT_OK) { return err; } } else { /* this one works for both compressed / uncompressed pubkeys */ - if ((err = ecc_set_dp(cu, key)) != CRYPT_OK) { return err; } + if ((err = ecc_set_curve(cu, key)) != CRYPT_OK) { return err; } } /* load public key */ diff --git a/src/ltc/pk/ecc/ecc_decrypt_key.c b/src/ltc/pk/ecc/ecc_decrypt_key.c index 8c29a17..d6b825e 100644 --- a/src/ltc/pk/ecc/ecc_decrypt_key.c +++ b/src/ltc/pk/ecc/ecc_decrypt_key.c @@ -85,7 +85,7 @@ } /* import ECC key from packet */ - if ((err = ecc_copy_dp(key, &pubkey)) != CRYPT_OK) { goto LBL_ERR; } + if ((err = ecc_copy_curve(key, &pubkey)) != CRYPT_OK) { goto LBL_ERR; } if ((err = ecc_set_key(decode[1].data, decode[1].size, PK_PUBLIC, &pubkey)) != CRYPT_OK) { goto LBL_ERR; } /* make shared key */ diff --git a/src/ltc/pk/ecc/ecc_encrypt_key.c b/src/ltc/pk/ecc/ecc_encrypt_key.c index 17201df..2ea7e35 100644 --- a/src/ltc/pk/ecc/ecc_encrypt_key.c +++ b/src/ltc/pk/ecc/ecc_encrypt_key.c @@ -52,7 +52,7 @@ } /* make a random key and export the public copy */ - if ((err = ecc_copy_dp(key, &pubkey)) != CRYPT_OK) { return err; } + if ((err = ecc_copy_curve(key, &pubkey)) != CRYPT_OK) { return err; } if ((err = ecc_generate_key(prng, wprng, &pubkey)) != CRYPT_OK) { return err; } pub_expt = XMALLOC(ECC_BUF_SIZE); diff --git a/src/ltc/pk/ecc/ecc_export_openssl.c b/src/ltc/pk/ecc/ecc_export_openssl.c index 08056fe..ab48ae5 100644 --- a/src/ltc/pk/ecc/ecc_export_openssl.c +++ b/src/ltc/pk/ecc/ecc_export_openssl.c @@ -27,7 +27,8 @@ unsigned char bin_a[256], bin_b[256], bin_k[256], bin_g[512], bin_xy[512]; unsigned long len_a, len_b, len_k, len_g, len_xy; unsigned long cofactor, one = 1; - oid_st oid; + const char *OID; + unsigned long oid[16], oidlen; ltc_asn1_list seq_fieldid[2], seq_curve[2], seq_ecparams[6], seq_priv[4], pub_xy, ecparams; int flag_oid = type & PK_CURVEOID ? 1 : 0; int flag_com = type & PK_COMPRESSED ? 1 : 0; @@ -72,7 +73,7 @@ cofactor = key->dp.cofactor; /* we support only prime-field EC */ - if ((err = pk_get_oid(PKA_EC_PRIMEF, &oid)) != CRYPT_OK) { goto error; } + if ((err = pk_get_oid(PKA_EC_PRIMEF, &OID)) != CRYPT_OK) { goto error; } if (flag_oid) { /* http://tools.ietf.org/html/rfc5912 @@ -102,8 +103,13 @@ } */ + oidlen = sizeof(oid)/sizeof(oid[0]); + if ((err = pk_oid_str_to_num(OID, oid, &oidlen)) != CRYPT_OK) { + goto error; + } + /* FieldID SEQUENCE */ - LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid.OID, oid.OIDlen); + LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, oidlen); LTC_SET_ASN1(seq_fieldid, 1, LTC_ASN1_INTEGER, prime, 1UL); /* Curve SEQUENCE */ diff --git a/src/ltc/pk/ecc/ecc_find_curve.c b/src/ltc/pk/ecc/ecc_find_curve.c new file mode 100644 index 0000000..d9544fd --- /dev/null +++ b/src/ltc/pk/ecc/ecc_find_curve.c @@ -0,0 +1,252 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_MECC + +static const struct { + const char *OID; + const char *names[6]; +} _curve_names[] = { +#ifdef LTC_ECC_SECP112R1 + { + "1.3.132.0.6", { "SECP112R1", "ECC-112", NULL } + }, +#endif +#ifdef LTC_ECC_SECP112R2 + { + "1.3.132.0.7", { "SECP112R2", NULL } + }, +#endif +#ifdef LTC_ECC_SECP128R1 + { + "1.3.132.0.28", { "SECP128R1", "ECC-128", NULL } + }, +#endif +#ifdef LTC_ECC_SECP128R2 + { + "1.3.132.0.29", { "SECP128R2", NULL } + }, +#endif +#ifdef LTC_ECC_SECP160R1 + { + "1.3.132.0.8", { "SECP160R1", "ECC-160", NULL } + }, +#endif +#ifdef LTC_ECC_SECP160R2 + { + "1.3.132.0.30", { "SECP160R2", NULL } + }, +#endif +#ifdef LTC_ECC_SECP160K1 + { + "1.3.132.0.9", { "SECP160K1", NULL } + }, +#endif +#ifdef LTC_ECC_SECP192R1 + { + "1.2.840.10045.3.1.1", { "SECP192R1", "NISTP192", "PRIME192V1", "ECC-192", "P-192", NULL } + }, +#endif +#ifdef LTC_ECC_PRIME192V2 + { + "1.2.840.10045.3.1.2", { "PRIME192V2", NULL } + }, +#endif +#ifdef LTC_ECC_PRIME192V3 + { + "1.2.840.10045.3.1.3", { "PRIME192V3", NULL } + }, +#endif +#ifdef LTC_ECC_SECP192K1 + { + "1.3.132.0.31", { "SECP192K1", NULL } + }, +#endif +#ifdef LTC_ECC_SECP224R1 + { + "1.3.132.0.33", { "SECP224R1", "NISTP224", "ECC-224", "P-224", NULL } + }, +#endif +#ifdef LTC_ECC_SECP224K1 + { + "1.3.132.0.32", { "SECP224K1", NULL } + }, +#endif +#ifdef LTC_ECC_SECP256R1 + { + "1.2.840.10045.3.1.7", { "SECP256R1", "NISTP256", "PRIME256V1", "ECC-256", "P-256", NULL } + }, +#endif +#ifdef LTC_ECC_SECP256K1 + { + "1.3.132.0.10", { "SECP256K1", NULL } + }, +#endif +#ifdef LTC_ECC_SECP384R1 + { + "1.3.132.0.34", { "SECP384R1", "NISTP384", "ECC-384", "P-384", NULL } + }, +#endif +#ifdef LTC_ECC_SECP521R1 + { + "1.3.132.0.35", { "SECP521R1", "NISTP521", "ECC-521", "P-521", NULL } + }, +#endif +#ifdef LTC_ECC_PRIME239V1 + { + "1.2.840.10045.3.1.4", { "PRIME239V1", NULL } + }, +#endif +#ifdef LTC_ECC_PRIME239V2 + { + "1.2.840.10045.3.1.5", { "PRIME239V2", NULL } + }, +#endif +#ifdef LTC_ECC_PRIME239V3 + { + "1.2.840.10045.3.1.6", { "PRIME239V3", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP160R1 + { + "1.3.36.3.3.2.8.1.1.1", { "BRAINPOOLP160R1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP192R1 + { + "1.3.36.3.3.2.8.1.1.3", { "BRAINPOOLP192R1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP224R1 + { + "1.3.36.3.3.2.8.1.1.5", { "BRAINPOOLP224R1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP256R1 + { + "1.3.36.3.3.2.8.1.1.7", { "BRAINPOOLP256R1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP320R1 + { + "1.3.36.3.3.2.8.1.1.9", { "BRAINPOOLP320R1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP384R1 + { + "1.3.36.3.3.2.8.1.1.11", { "BRAINPOOLP384R1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP512R1 + { + "1.3.36.3.3.2.8.1.1.13", { "BRAINPOOLP512R1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP160T1 + { + "1.3.36.3.3.2.8.1.1.2", { "BRAINPOOLP160T1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP192T1 + { + "1.3.36.3.3.2.8.1.1.4", { "BRAINPOOLP192T1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP224T1 + { + "1.3.36.3.3.2.8.1.1.6", { "BRAINPOOLP224T1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP256T1 + { + "1.3.36.3.3.2.8.1.1.8", { "BRAINPOOLP256T1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP320T1 + { + "1.3.36.3.3.2.8.1.1.10", { "BRAINPOOLP320T1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP384T1 + { + "1.3.36.3.3.2.8.1.1.12", { "BRAINPOOLP384T1", NULL } + }, +#endif +#ifdef LTC_ECC_BRAINPOOLP512T1 + { + "1.3.36.3.3.2.8.1.1.14", { "BRAINPOOLP512T1", NULL } + }, +#endif + { + NULL, { NULL } + } +}; + +/* case-insensitive match + ignore '-', '_', ' ' */ +static int _name_match(const char *left, const char *right) +{ + char lc_r, lc_l; + + while ((*left != '\0') && (*right != '\0')) { + while ((*left == ' ') || (*left == '-') || (*left == '_')) left++; + while ((*right == ' ') || (*right == '-') || (*right == '_')) right++; + if (*left == '\0' || *right == '\0') break; + lc_r = *right; + lc_l = *left; + if ((lc_r >= 'A') && (lc_r <= 'Z')) lc_r += 32; + if ((lc_l >= 'A') && (lc_l <= 'Z')) lc_l += 32; + if (lc_l != lc_r) return 0; + left++; + right++; + } + + if ((*left == '\0') && (*right == '\0')) return 1; + return 0; +} + +int ecc_find_curve(const char *name_or_oid, const ltc_ecc_curve **cu) +{ + int i, j; + const char *OID = NULL; + + LTC_ARGCHK(cu != NULL); + LTC_ARGCHK(name_or_oid != NULL); + + *cu = NULL; + + for (i = 0; _curve_names[i].OID != NULL && !OID; i++) { + if (XSTRCMP(_curve_names[i].OID, name_or_oid) == 0) { + OID = _curve_names[i].OID; + } + for (j = 0; _curve_names[i].names[j] != NULL && !OID; j++) { + if (_name_match(_curve_names[i].names[j], name_or_oid)) { + OID = _curve_names[i].OID; + } + } + } + + if (OID != NULL) { + for (i = 0; ltc_ecc_curves[i].prime != NULL; i++) { + if (XSTRCMP(ltc_ecc_curves[i].OID, OID) == 0) { + *cu = <c_ecc_curves[i]; + return CRYPT_OK; + } + } + } + + return CRYPT_INVALID_ARG; /* not found */ +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/ecc/ecc_get_curve.c b/src/ltc/pk/ecc/ecc_get_curve.c deleted file mode 100644 index a2f52b0..0000000 --- a/src/ltc/pk/ecc/ecc_get_curve.c +++ /dev/null @@ -1,254 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -static const struct { - const char *OID; - const char *names[6]; -} _curve_names[] = { -#ifdef LTC_ECC_SECP112R1 - { - "1.3.132.0.6", { "SECP112R1", "ECC-112", NULL } - }, -#endif -#ifdef LTC_ECC_SECP112R2 - { - "1.3.132.0.7", { "SECP112R2", NULL } - }, -#endif -#ifdef LTC_ECC_SECP128R1 - { - "1.3.132.0.28", { "SECP128R1", "ECC-128", NULL } - }, -#endif -#ifdef LTC_ECC_SECP128R2 - { - "1.3.132.0.29", { "SECP128R2", NULL } - }, -#endif -#ifdef LTC_ECC_SECP160R1 - { - "1.3.132.0.8", { "SECP160R1", "ECC-160", NULL } - }, -#endif -#ifdef LTC_ECC_SECP160R2 - { - "1.3.132.0.30", { "SECP160R2", NULL } - }, -#endif -#ifdef LTC_ECC_SECP160K1 - { - "1.3.132.0.9", { "SECP160K1", NULL } - }, -#endif -#ifdef LTC_ECC_SECP192R1 - { - "1.2.840.10045.3.1.1", { "SECP192R1", "NISTP192", "PRIME192V1", "ECC-192", "P-192", NULL } - }, -#endif -#ifdef LTC_ECC_PRIME192V2 - { - "1.2.840.10045.3.1.2", { "PRIME192V2", NULL } - }, -#endif -#ifdef LTC_ECC_PRIME192V3 - { - "1.2.840.10045.3.1.3", { "PRIME192V3", NULL } - }, -#endif -#ifdef LTC_ECC_SECP192K1 - { - "1.3.132.0.31", { "SECP192K1", NULL } - }, -#endif -#ifdef LTC_ECC_SECP224R1 - { - "1.3.132.0.33", { "SECP224R1", "NISTP224", "ECC-224", "P-224", NULL } - }, -#endif -#ifdef LTC_ECC_SECP224K1 - { - "1.3.132.0.32", { "SECP224K1", NULL } - }, -#endif -#ifdef LTC_ECC_SECP256R1 - { - "1.2.840.10045.3.1.7", { "SECP256R1", "NISTP256", "PRIME256V1", "ECC-256", "P-256", NULL } - }, -#endif -#ifdef LTC_ECC_SECP256K1 - { - "1.3.132.0.10", { "SECP256K1", NULL } - }, -#endif -#ifdef LTC_ECC_SECP384R1 - { - "1.3.132.0.34", { "SECP384R1", "NISTP384", "ECC-384", "P-384", NULL } - }, -#endif -#ifdef LTC_ECC_SECP521R1 - { - "1.3.132.0.35", { "SECP521R1", "NISTP521", "ECC-521", "P-521", NULL } - }, -#endif -#ifdef LTC_ECC_PRIME239V1 - { - "1.2.840.10045.3.1.4", { "PRIME239V1", NULL } - }, -#endif -#ifdef LTC_ECC_PRIME239V2 - { - "1.2.840.10045.3.1.5", { "PRIME239V2", NULL } - }, -#endif -#ifdef LTC_ECC_PRIME239V3 - { - "1.2.840.10045.3.1.6", { "PRIME239V3", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP160R1 - { - "1.3.36.3.3.2.8.1.1.1", { "BRAINPOOLP160R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP192R1 - { - "1.3.36.3.3.2.8.1.1.3", { "BRAINPOOLP192R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP224R1 - { - "1.3.36.3.3.2.8.1.1.5", { "BRAINPOOLP224R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP256R1 - { - "1.3.36.3.3.2.8.1.1.7", { "BRAINPOOLP256R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP320R1 - { - "1.3.36.3.3.2.8.1.1.9", { "BRAINPOOLP320R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP384R1 - { - "1.3.36.3.3.2.8.1.1.11", { "BRAINPOOLP384R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP512R1 - { - "1.3.36.3.3.2.8.1.1.13", { "BRAINPOOLP512R1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP160T1 - { - "1.3.36.3.3.2.8.1.1.2", { "BRAINPOOLP160T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP192T1 - { - "1.3.36.3.3.2.8.1.1.4", { "BRAINPOOLP192T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP224T1 - { - "1.3.36.3.3.2.8.1.1.6", { "BRAINPOOLP224T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP256T1 - { - "1.3.36.3.3.2.8.1.1.8", { "BRAINPOOLP256T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP320T1 - { - "1.3.36.3.3.2.8.1.1.10", { "BRAINPOOLP320T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP384T1 - { - "1.3.36.3.3.2.8.1.1.12", { "BRAINPOOLP384T1", NULL } - }, -#endif -#ifdef LTC_ECC_BRAINPOOLP512T1 - { - "1.3.36.3.3.2.8.1.1.14", { "BRAINPOOLP512T1", NULL } - }, -#endif - { - NULL, { NULL } - } -}; - -/* case-insensitive match + ignore '-', '_', ' ' */ -static int _name_match(const char *left, const char *right) -{ - char lc_r, lc_l; - - while ((*left != '\0') && (*right != '\0')) { - while ((*left == ' ') || (*left == '-') || (*left == '_')) left++; - while ((*right == ' ') || (*right == '-') || (*right == '_')) right++; - if (*left == '\0' || *right == '\0') break; - lc_r = *right; - lc_l = *left; - if ((lc_r >= 'A') && (lc_r <= 'Z')) lc_r += 32; - if ((lc_l >= 'A') && (lc_l <= 'Z')) lc_l += 32; - if (lc_l != lc_r) return 0; - left++; - right++; - } - - if ((*left == '\0') && (*right == '\0')) - return 1; - else - return 0; -} - -int ecc_get_curve(const char *name_or_oid, const ltc_ecc_curve **cu) -{ - int i, j; - const char *OID = NULL; - - LTC_ARGCHK(cu != NULL); - LTC_ARGCHK(name_or_oid != NULL); - - *cu = NULL; - - for (i = 0; _curve_names[i].OID != NULL && !OID; i++) { - if (XSTRCMP(_curve_names[i].OID, name_or_oid) == 0) { - OID = _curve_names[i].OID; - } - for (j = 0; _curve_names[i].names[j] != NULL && !OID; j++) { - if (_name_match(_curve_names[i].names[j], name_or_oid)) { - OID = _curve_names[i].OID; - } - } - } - - if (OID != NULL) { - for (i = 0; ltc_ecc_curves[i].prime != NULL; i++) { - if (XSTRCMP(ltc_ecc_curves[i].OID, OID) == 0) { - *cu = <c_ecc_curves[i]; - return CRYPT_OK; - } - } - } - - return CRYPT_INVALID_ARG; /* not found */ -} - -#endif - -/* ref: $Format:%D$ */ -/* git commit: $Format:%H$ */ -/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/ecc/ecc_import.c b/src/ltc/pk/ecc/ecc_import.c index e691add..74097a7 100644 --- a/src/ltc/pk/ecc/ecc_import.c +++ b/src/ltc/pk/ecc/ecc_import.c @@ -56,9 +56,9 @@ /* allocate & initialize the key */ if (cu == NULL) { - if ((err = ecc_set_dp_by_size(key_size, key)) != CRYPT_OK) { goto done; } + if ((err = ecc_set_curve_by_size(key_size, key)) != CRYPT_OK) { goto done; } } else { - if ((err = ecc_set_dp(cu, key)) != CRYPT_OK) { goto done; } + if ((err = ecc_set_curve(cu, key)) != CRYPT_OK) { goto done; } } if (flags[0] == 1) { diff --git a/src/ltc/pk/ecc/ecc_import_openssl.c b/src/ltc/pk/ecc/ecc_import_openssl.c index bf34c08..e765091 100644 --- a/src/ltc/pk/ecc/ecc_import_openssl.c +++ b/src/ltc/pk/ecc/ecc_import_openssl.c @@ -11,84 +11,22 @@ #ifdef LTC_MECC -int ecc_import_openssl(const unsigned char *in, unsigned long inlen, ecc_key *key) +static int _ecc_import_private_with_oid(const unsigned char *in, unsigned long inlen, ecc_key *key) { - void *prime, *order, *a, *b, *gx, *gy; - ltc_asn1_list seq_fieldid[2], seq_curve[3], seq_ecparams[6], seq_priv[4], custom[2]; - unsigned char bin_a[ECC_MAXSIZE], bin_b[ECC_MAXSIZE], bin_k[ECC_MAXSIZE]; - unsigned char bin_g[2*ECC_MAXSIZE+1], bin_xy[2*ECC_MAXSIZE+2], bin_seed[128]; - unsigned long len_a, len_b, len_k, len_g, len_xy, len_oid, len; - unsigned long cofactor = 0, ecver = 0, pkver = 0, tmpoid[16], curveoid[16]; + ltc_asn1_list seq_priv[4], custom[2]; + unsigned char bin_xy[2*ECC_MAXSIZE+2], bin_k[ECC_MAXSIZE]; + unsigned long len, pkver = 0, curveoid[16]; char OID[256]; const ltc_ecc_curve *curve; int err; - if ((err = mp_init_multi(&prime, &order, &a, &b, &gx, &gy, NULL)) != CRYPT_OK) { - return err; - } - - /* ### 1. try to load public key - no curve parameters just curve OID */ - - len_xy = sizeof(bin_xy); - len_oid = 16; - err = x509_decode_subject_public_key_info(in, inlen, PKA_EC, bin_xy, &len_xy, - LTC_ASN1_OBJECT_IDENTIFIER, (void *)curveoid, &len_oid); - if (err == CRYPT_OK) { - /* load curve parameters for given curve OID */ - len = sizeof(OID); - if ((err = pk_oid_num_to_str(curveoid, len_oid, OID, &len)) != CRYPT_OK) { goto error; } - if ((err = ecc_get_curve(OID, &curve)) != CRYPT_OK) { goto error; } - if ((err = ecc_set_dp(curve, key)) != CRYPT_OK) { goto error; } - /* load public key */ - if ((err = ecc_set_key(bin_xy, len_xy, PK_PUBLIC, key)) != CRYPT_OK) { goto error; } - goto success; - } - - /* ### 2. try to load public key - curve parameters included */ - - /* ECParameters SEQUENCE */ - LTC_SET_ASN1(seq_ecparams, 0, LTC_ASN1_SHORT_INTEGER, &ecver, 1UL); - LTC_SET_ASN1(seq_ecparams, 1, LTC_ASN1_SEQUENCE, seq_fieldid, 2UL); - LTC_SET_ASN1(seq_ecparams, 2, LTC_ASN1_SEQUENCE, seq_curve, 3UL); - LTC_SET_ASN1(seq_ecparams, 3, LTC_ASN1_OCTET_STRING, bin_g, (unsigned long)2*ECC_MAXSIZE+1); - LTC_SET_ASN1(seq_ecparams, 4, LTC_ASN1_INTEGER, order, 1UL); - LTC_SET_ASN1(seq_ecparams, 5, LTC_ASN1_SHORT_INTEGER, &cofactor, 1UL); - seq_ecparams[5].optional = 1; - /* FieldID SEQUENCE */ - LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, tmpoid, 16UL); - LTC_SET_ASN1(seq_fieldid, 1, LTC_ASN1_INTEGER, prime, 1UL); - /* Curve SEQUENCE */ - LTC_SET_ASN1(seq_curve, 0, LTC_ASN1_OCTET_STRING, bin_a, (unsigned long)ECC_MAXSIZE); - LTC_SET_ASN1(seq_curve, 1, LTC_ASN1_OCTET_STRING, bin_b, (unsigned long)ECC_MAXSIZE); - LTC_SET_ASN1(seq_curve, 2, LTC_ASN1_RAW_BIT_STRING, bin_seed, (unsigned long)8*128); - seq_curve[2].optional = 1; - /* try to load public key */ - len_xy = sizeof(bin_xy); - len = 6; - err = x509_decode_subject_public_key_info(in, inlen, PKA_EC, bin_xy, &len_xy, LTC_ASN1_SEQUENCE, seq_ecparams, &len); - - if (err == CRYPT_OK) { - len_a = seq_curve[0].size; - len_b = seq_curve[1].size; - len_g = seq_ecparams[3].size; - /* create bignums */ - if ((err = mp_read_unsigned_bin(a, bin_a, len_a)) != CRYPT_OK) { goto error; } - if ((err = mp_read_unsigned_bin(b, bin_b, len_b)) != CRYPT_OK) { goto error; } - if ((err = ltc_ecc_import_point(bin_g, len_g, prime, a, b, gx, gy)) != CRYPT_OK) { goto error; } - /* load curve parameters */ - if ((err = ecc_set_dp_from_mpis(a, b, prime, order, gx, gy, cofactor, key)) != CRYPT_OK) { goto error; } - /* load public key */ - if ((err = ecc_set_key(bin_xy, len_xy, PK_PUBLIC, key)) != CRYPT_OK) { goto error; } - goto success; - } - - /* ### 3. try to load private key - no curve parameters just curve OID */ + /* ### try to load private key - no curve parameters just curve OID */ /* ECPrivateKey SEQUENCE */ LTC_SET_ASN1(custom, 0, LTC_ASN1_OBJECT_IDENTIFIER, curveoid, 16UL); - LTC_SET_ASN1(custom, 1, LTC_ASN1_RAW_BIT_STRING, bin_xy, (unsigned long)8*(2*ECC_MAXSIZE+2)); + LTC_SET_ASN1(custom, 1, LTC_ASN1_RAW_BIT_STRING, bin_xy, 8UL*sizeof(bin_xy)); LTC_SET_ASN1(seq_priv, 0, LTC_ASN1_SHORT_INTEGER, &pkver, 1UL); - LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, (unsigned long)ECC_MAXSIZE); + LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, sizeof(bin_k)); LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 2, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0, custom); /* context specific 0 */ LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 3, LTC_ASN1_CL_CONTEXT_SPECIFIC, 1, custom + 1); /* context specific 1 */ @@ -98,27 +36,43 @@ /* load curve parameters for given curve OID */ len = sizeof(OID); if ((err = pk_oid_num_to_str(curveoid, custom[0].size, OID, &len)) != CRYPT_OK) { goto error; } - if ((err = ecc_get_curve(OID, &curve)) != CRYPT_OK) { goto error; } - if ((err = ecc_set_dp(curve, key)) != CRYPT_OK) { goto error; } + if ((err = ecc_find_curve(OID, &curve)) != CRYPT_OK) { goto error; } + if ((err = ecc_set_curve(curve, key)) != CRYPT_OK) { goto error; } /* load private+public key */ - if ((err = ecc_set_key(bin_k, seq_priv[1].size, PK_PRIVATE, key)) != CRYPT_OK) { goto error; } - goto success; + err = ecc_set_key(bin_k, seq_priv[1].size, PK_PRIVATE, key); + } +error: + return err; +} + +static int _ecc_import_private_with_curve(const unsigned char *in, unsigned long inlen, ecc_key *key) +{ + void *prime, *order, *a, *b, *gx, *gy; + ltc_asn1_list seq_fieldid[2], seq_curve[3], seq_ecparams[6], seq_priv[4], custom[2]; + unsigned char bin_a[ECC_MAXSIZE], bin_b[ECC_MAXSIZE], bin_k[ECC_MAXSIZE]; + unsigned char bin_g[2*ECC_MAXSIZE+1], bin_xy[2*ECC_MAXSIZE+2], bin_seed[128]; + unsigned long len_a, len_b, len_k, len_g; + unsigned long cofactor = 0, ecver = 0, pkver = 0, tmpoid[16]; + int err; + + if ((err = mp_init_multi(&prime, &order, &a, &b, &gx, &gy, NULL)) != CRYPT_OK) { + return err; } - /* ### 4. try to load private key - curve parameters included */ + /* ### try to load private key - curve parameters included */ /* ECPrivateKey SEQUENCE */ LTC_SET_ASN1(custom, 0, LTC_ASN1_SEQUENCE, seq_ecparams, 6UL); - LTC_SET_ASN1(custom, 1, LTC_ASN1_RAW_BIT_STRING, bin_xy, (unsigned long)8*(2*ECC_MAXSIZE+2)); + LTC_SET_ASN1(custom, 1, LTC_ASN1_RAW_BIT_STRING, bin_xy, 8UL*sizeof(bin_xy)); LTC_SET_ASN1(seq_priv, 0, LTC_ASN1_SHORT_INTEGER, &pkver, 1UL); - LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, (unsigned long)ECC_MAXSIZE); + LTC_SET_ASN1(seq_priv, 1, LTC_ASN1_OCTET_STRING, bin_k, sizeof(bin_k)); LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 2, LTC_ASN1_CL_CONTEXT_SPECIFIC, 0, custom); /* context specific 0 */ LTC_SET_ASN1_CUSTOM_CONSTRUCTED(seq_priv, 3, LTC_ASN1_CL_CONTEXT_SPECIFIC, 1, custom + 1); /* context specific 1 */ /* ECParameters SEQUENCE */ LTC_SET_ASN1(seq_ecparams, 0, LTC_ASN1_SHORT_INTEGER, &ecver, 1UL); LTC_SET_ASN1(seq_ecparams, 1, LTC_ASN1_SEQUENCE, seq_fieldid, 2UL); LTC_SET_ASN1(seq_ecparams, 2, LTC_ASN1_SEQUENCE, seq_curve, 3UL); - LTC_SET_ASN1(seq_ecparams, 3, LTC_ASN1_OCTET_STRING, bin_g, (unsigned long)2*ECC_MAXSIZE+1); + LTC_SET_ASN1(seq_ecparams, 3, LTC_ASN1_OCTET_STRING, bin_g, sizeof(bin_g)); LTC_SET_ASN1(seq_ecparams, 4, LTC_ASN1_INTEGER, order, 1UL); LTC_SET_ASN1(seq_ecparams, 5, LTC_ASN1_SHORT_INTEGER, &cofactor, 1UL); seq_ecparams[5].optional = 1; @@ -126,14 +80,13 @@ LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, tmpoid, 16UL); LTC_SET_ASN1(seq_fieldid, 1, LTC_ASN1_INTEGER, prime, 1UL); /* Curve SEQUENCE */ - LTC_SET_ASN1(seq_curve, 0, LTC_ASN1_OCTET_STRING, bin_a, (unsigned long)ECC_MAXSIZE); - LTC_SET_ASN1(seq_curve, 1, LTC_ASN1_OCTET_STRING, bin_b, (unsigned long)ECC_MAXSIZE); - LTC_SET_ASN1(seq_curve, 2, LTC_ASN1_RAW_BIT_STRING, bin_seed, (unsigned long)8*128); + LTC_SET_ASN1(seq_curve, 0, LTC_ASN1_OCTET_STRING, bin_a, sizeof(bin_a)); + LTC_SET_ASN1(seq_curve, 1, LTC_ASN1_OCTET_STRING, bin_b, sizeof(bin_b)); + LTC_SET_ASN1(seq_curve, 2, LTC_ASN1_RAW_BIT_STRING, bin_seed, 8UL*sizeof(bin_seed)); seq_curve[2].optional = 1; /* try to load private key */ err = der_decode_sequence(in, inlen, seq_priv, 4); if (err == CRYPT_OK) { - len_xy = custom[1].size; len_k = seq_priv[1].size; len_a = seq_curve[0].size; len_b = seq_curve[1].size; @@ -143,19 +96,30 @@ if ((err = mp_read_unsigned_bin(b, bin_b, len_b)) != CRYPT_OK) { goto error; } if ((err = ltc_ecc_import_point(bin_g, len_g, prime, a, b, gx, gy)) != CRYPT_OK) { goto error; } /* load curve parameters */ - if ((err = ecc_set_dp_from_mpis(a, b, prime, order, gx, gy, cofactor, key)) != CRYPT_OK) { goto error; } + if ((err = ecc_set_curve_from_mpis(a, b, prime, order, gx, gy, cofactor, key)) != CRYPT_OK) { goto error; } /* load private+public key */ - if ((err = ecc_set_key(bin_k, len_k, PK_PRIVATE, key)) != CRYPT_OK) { goto error; } + err = ecc_set_key(bin_k, len_k, PK_PRIVATE, key); + } +error: + mp_clear_multi(prime, order, a, b, gx, gy, NULL); + return err; +} + +int ecc_import_openssl(const unsigned char *in, unsigned long inlen, ecc_key *key) +{ + int err; + + if ((err = ecc_import_subject_public_key_info(in, inlen, key)) == CRYPT_OK) { goto success; } - /* ### 5. all attempts failed */ - goto error; + if ((err = _ecc_import_private_with_oid(in, inlen, key)) == CRYPT_OK) { + goto success; + } + + err = _ecc_import_private_with_curve(in, inlen, key); success: - err = CRYPT_OK; -error: - mp_clear_multi(prime, order, a, b, gx, gy, NULL); return err; } diff --git a/src/ltc/pk/ecc/ecc_import_pkcs8.c b/src/ltc/pk/ecc/ecc_import_pkcs8.c index fd60898..552bd89 100644 --- a/src/ltc/pk/ecc/ecc_import_pkcs8.c +++ b/src/ltc/pk/ecc/ecc_import_pkcs8.c @@ -11,447 +11,34 @@ #ifdef LTC_MECC -enum algorithm_oid { - PBE_MD2_DES, /* 0 */ - PBE_MD2_RC2, - PBE_MD5_DES, - PBE_MD5_RC2, - PBE_SHA1_DES, - PBE_SHA1_RC2, /* 5 */ - PBES2, - PBKDF2, - DES_CBC, - RC2_CBC, - DES_EDE3_CBC, /* 10 */ - HMAC_WITH_SHA1, - HMAC_WITH_SHA224, - HMAC_WITH_SHA256, - HMAC_WITH_SHA384, - HMAC_WITH_SHA512, /* 15 */ - PBE_SHA1_3DES -}; +typedef struct { + ltc_asn1_type t; + ltc_asn1_list **pp; +} der_flexi_check; -static const oid_st oid_list[] = { - { { 1,2,840,113549,1,5,1 }, 7 }, /* [0] http://www.oid-info.com/get/1.2.840.113549.1.5.1 pbeWithMD2AndDES-CBC */ - { { 1,2,840,113549,1,5,4 }, 7 }, /* [1] http://www.oid-info.com/get/1.2.840.113549.1.5.4 pbeWithMD2AndRC2-CBC */ - { { 1,2,840,113549,1,5,3 }, 7 }, /* [2] http://www.oid-info.com/get/1.2.840.113549.1.5.3 pbeWithMD5AndDES-CBC */ - { { 1,2,840,113549,1,5,6 }, 7 }, /* [3] http://www.oid-info.com/get/1.2.840.113549.1.5.6 pbeWithMD5AndRC2-CBC */ - { { 1,2,840,113549,1,5,10 }, 7 }, /* [4] http://www.oid-info.com/get/1.2.840.113549.1.5.10 pbeWithSHA1AndDES-CBC */ - { { 1,2,840,113549,1,5,11 }, 7 }, /* [5] http://www.oid-info.com/get/1.2.840.113549.1.5.11 pbeWithSHA1AndRC2-CBC */ - { { 1,2,840,113549,1,5,13 }, 7 }, /* [6] http://www.oid-info.com/get/1.2.840.113549.1.5.13 pbes2 */ - { { 1,2,840,113549,1,5,12 }, 7 }, /* [7] http://www.oid-info.com/get/1.2.840.113549.1.5.12 pBKDF2 */ - { { 1,3,14,3,2,7 }, 6 }, /* [8] http://www.oid-info.com/get/1.3.14.3.2.7 desCBC */ - { { 1,2,840,113549,3,2 }, 6 }, /* [9] http://www.oid-info.com/get/1.2.840.113549.3.2 rc2CBC */ - { { 1,2,840,113549,3,7 }, 6 }, /* [10] http://www.oid-info.com/get/1.2.840.113549.3.7 des-EDE3-CBC */ - { { 1,2,840,113549,2,7 }, 6 }, /* [11] http://www.oid-info.com/get/1.2.840.113549.2.7 hmacWithSHA1 */ - { { 1,2,840,113549,2,8 }, 6 }, /* [12] http://www.oid-info.com/get/1.2.840.113549.2.8 hmacWithSHA224 */ - { { 1,2,840,113549,2,9 }, 6 }, /* [13] http://www.oid-info.com/get/1.2.840.113549.2.9 hmacWithSHA256 */ - { { 1,2,840,113549,2,10 }, 6 }, /* [14] http://www.oid-info.com/get/1.2.840.113549.2.10 hmacWithSHA384 */ - { { 1,2,840,113549,2,11 }, 6 }, /* [15] http://www.oid-info.com/get/1.2.840.113549.2.11 hmacWithSHA512 */ - { { 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 */ - { { 0 }, 0 }, -}; +#define LTC_SET_DER_FLEXI_CHECK(list, index, Type, P) \ + do { \ + int LTC_SDFC_temp##__LINE__ = (index); \ + list[LTC_SDFC_temp##__LINE__].t = Type; \ + list[LTC_SDFC_temp##__LINE__].pp = P; \ + } while (0) -static int _simple_utf8_to_utf16(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen) { - unsigned long len = 0; - const unsigned char* in_end = in + inlen; - const ulong32 offset[6] = { - 0x00000000UL, 0x00003080UL, 0x000E2080UL, - 0x03C82080UL, 0xFA082080UL, 0x82082080UL - }; - int err = CRYPT_ERROR; - - while (in < in_end) { - ulong32 ch = 0; - unsigned short extra = 0; /* 0 */ - if (*in >= 192) extra++; /* 1 */ - if (*in >= 224) extra++; /* 2 */ - if (*in >= 240) extra++; /* 3 */ - if (*in >= 248) extra++; /* 4 */ - if (*in >= 252) extra++; /* 5 */ - if (in + extra >= in_end) goto ERROR; - switch (extra) { - case 5: ch += *in++; ch <<= 6; - case 4: ch += *in++; ch <<= 6; - case 3: ch += *in++; ch <<= 6; - case 2: ch += *in++; ch <<= 6; - case 1: ch += *in++; ch <<= 6; - case 0: ch += *in++; +static int _der_flexi_sequence_cmp(const ltc_asn1_list *flexi, der_flexi_check *check) +{ + const ltc_asn1_list *cur; + if (flexi->type != LTC_ASN1_SEQUENCE) { + return CRYPT_INVALID_PACKET; + } + cur = flexi->child; + while(check->t != LTC_ASN1_EOL) { + if (!LTC_ASN1_IS_TYPE(cur, check->t)) { + return CRYPT_INVALID_PACKET; } - ch -= offset[extra]; - if (ch > 0xFFFF) goto ERROR; - if (*outlen >= len + 2) { - out[len] = (unsigned short)((ch >> 8) & 0xFF); - out[len + 1] = (unsigned char)(ch & 0xFF); - } - len += 2; + if (check->pp != NULL) *check->pp = (ltc_asn1_list*)cur; + cur = cur->next; + check++; } - - err = len > *outlen ? CRYPT_BUFFER_OVERFLOW : CRYPT_OK; - *outlen = len; -ERROR: - return err; -} - -static int _kdf_pkcs12(int hash_id, const unsigned char *pw, unsigned long pwlen, - const unsigned char *salt, unsigned long saltlen, - unsigned int iterations, unsigned char purpose, - unsigned char *out, unsigned long outlen) -{ - unsigned long u = hash_descriptor[hash_id].hashsize; - unsigned long v = hash_descriptor[hash_id].blocksize; - unsigned long c = (outlen + u - 1) / u; - unsigned long Slen = ((saltlen + v - 1) / v) * v; - unsigned long Plen = ((pwlen + v - 1) / v) * v; - unsigned long k = (Plen + Slen) / v; - unsigned long Alen, keylen = 0; - unsigned int tmp, i, j, n; - unsigned char ch; - unsigned char D[MAXBLOCKSIZE], A[MAXBLOCKSIZE], B[MAXBLOCKSIZE]; - unsigned char *I = NULL, *key = NULL; - int err = CRYPT_ERROR; - - key = XMALLOC(u * c); - I = XMALLOC(Plen + Slen); - if (key == NULL || I == NULL) goto DONE; - zeromem(key, u * c); - - for (i = 0; i < v; i++) D[i] = purpose; /* D - diversifier */ - for (i = 0; i < Slen; i++) I[i] = salt[i % saltlen]; - for (i = 0; i < Plen; i++) I[Slen + i] = pw[i % pwlen]; /* I = Salt || Pass */ - - for (i = 0; i < c; i++) { - Alen = u; /* hash size */ - err = hash_memory_multi(hash_id, A, &Alen, D, v, I, Slen + Plen, NULL); /* A = HASH(D || I) */ - if (err != CRYPT_OK) goto DONE; - for (j = 1; j < iterations; j++) { - err = hash_memory(hash_id, A, Alen, A, &Alen); /* A = HASH(A) */ - if (err != CRYPT_OK) goto DONE; - } - /* fill buffer B with A */ - for (j = 0; j < v; j++) B[j] = A[j % Alen]; - /* B += 1 */ - for (j = v; j > 0; j--) { - if (++B[j - 1] != 0) break; - } - /* I_n += B */ - for (n = 0; n < k; n++) { - ch = 0; - for (j = v; j > 0; j--) { - tmp = I[n * v + j - 1] + B[j - 1] + ch; - ch = (unsigned char)((tmp >> 8) & 0xFF); - I[n * v + j - 1] = (unsigned char)(tmp & 0xFF); - } - } - /* store derived key block */ - for (j = 0; j < Alen; j++) key[keylen++] = A[j]; - } - - for (i = 0; i < outlen; i++) out[i] = key[i]; - err = CRYPT_OK; -DONE: - if (I) XFREE(I); - if (key) XFREE(key); - return err; -} - -static int _oid_to_id(const unsigned long *oid, unsigned long oid_size) -{ - int i, j; - for (j = 0; oid_list[j].OIDlen > 0; j++) { - int match = 1; - if (oid_list[j].OIDlen != oid_size) continue; - for (i = 0; i < (int)oid_size && match; i++) if (oid_list[j].OID[i] != oid[i]) match = 0; - if (match) return j; - } - return -1; -} - -static int _pbes1_decrypt(const unsigned char *enc_data, unsigned long enc_size, - const unsigned char *pass, unsigned long pass_size, - const unsigned char *salt, unsigned long salt_size, - unsigned long iterations, - const unsigned long *oid, unsigned long oid_size, - unsigned char *dec_data, unsigned long *dec_size) -{ - int id = _oid_to_id(oid, oid_size); - int err, hid = -1, cid = -1; - unsigned int keylen, blklen; - unsigned char key_iv[32] = { 0 }, pad; - unsigned long len = sizeof(key_iv), pwlen = pass_size; - symmetric_CBC cbc; - unsigned char *pw = NULL; - - /* https://tools.ietf.org/html/rfc8018#section-6.1.2 */ - if (id == PBE_MD2_DES || id == PBE_MD2_RC2) hid = find_hash("md2"); - if (id == PBE_MD5_DES || id == PBE_MD5_RC2) hid = find_hash("md5"); - if (id == PBE_SHA1_DES || id == PBE_SHA1_RC2 || id == PBE_SHA1_3DES) hid = find_hash("sha1"); - - if (id == PBE_MD2_RC2 || id == PBE_MD5_RC2 || id == PBE_SHA1_RC2) { - cid = find_cipher("rc2"); - keylen = 8; - blklen = 8; - } - if (id == PBE_MD2_DES || id == PBE_MD5_DES || id == PBE_SHA1_DES) { - cid = find_cipher("des"); - keylen = 8; - blklen = 8; - } - if (id == PBE_SHA1_3DES) { - cid = find_cipher("3des"); - keylen = 24; - blklen = 8; - } - - if (id == PBE_SHA1_3DES) { - /* convert password to unicode/utf16-be */ - pwlen = pass_size * 2; - pw = XMALLOC(pwlen + 2); - if (pw == NULL) goto LBL_ERROR; - if ((err = _simple_utf8_to_utf16(pass, pass_size, pw, &pwlen) != CRYPT_OK)) goto LBL_ERROR; - pw[pwlen++] = 0; - pw[pwlen++] = 0; - /* derive KEY */ - if ((err = _kdf_pkcs12(hid, pw, pwlen, salt, salt_size, iterations, 1, key_iv, keylen)) != CRYPT_OK) goto LBL_ERROR; - /* derive IV */ - if ((err = _kdf_pkcs12(hid, pw, pwlen, salt, salt_size, iterations, 2, key_iv+24, blklen)) != CRYPT_OK) goto LBL_ERROR; - } - else { - if ((err = pkcs_5_alg1(pass, pass_size, salt, iterations, hid, key_iv, &len)) != CRYPT_OK) goto LBL_ERROR; - /* the output has 16 bytes: [KEY-8-bytes][IV-8-bytes] */ - } - - if (hid != -1 && cid != -1) { - if (salt_size != 8 || enc_size < blklen) goto LBL_ERROR; - if ((err = cbc_start(cid, key_iv + keylen, key_iv, keylen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_decrypt(enc_data, dec_data, enc_size, &cbc)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR; - pad = dec_data[enc_size-1]; - if (pad < 1 || pad > blklen) goto LBL_ERROR; - *dec_size = enc_size - pad; - err = CRYPT_OK; - goto LBL_DONE; - } - -LBL_ERROR: - err = CRYPT_INVALID_ARG; -LBL_DONE: - zeromem(key_iv, sizeof(key_iv)); - if (pw) { zeromem(pw, pwlen); XFREE(pw); } - return err; -} - -static int _pbes2_pbkdf2_decrypt(const unsigned char *enc_data, unsigned long enc_size, - const unsigned char *pass, unsigned long pass_size, - const unsigned char *salt, unsigned long salt_size, - const unsigned char *iv, unsigned long iv_size, - unsigned long iterations, - int hmacid, - int encid, - int extra_arg, - unsigned char *dec_data, unsigned long *dec_size) -{ - int err, hid = -1, cid = -1; - unsigned char k[32], pad; - unsigned long klen = sizeof(k); - symmetric_CBC cbc; - - /* https://tools.ietf.org/html/rfc8018#section-6.2.2 */ - - if (hmacid == HMAC_WITH_SHA1) hid = find_hash("sha1"); - if (hmacid == HMAC_WITH_SHA224) hid = find_hash("sha224"); - if (hmacid == HMAC_WITH_SHA256) hid = find_hash("sha256"); - if (hmacid == HMAC_WITH_SHA384) hid = find_hash("sha384"); - if (hmacid == HMAC_WITH_SHA512) hid = find_hash("sha512"); - if (hid == -1) return CRYPT_INVALID_ARG; - - if (encid == DES_EDE3_CBC) { - /* https://tools.ietf.org/html/rfc8018#appendix-B.2.2 */ - cid = find_cipher("3des"); - klen = 24; - if (klen > sizeof(k) || iv_size != 8 || iv == NULL || cid == -1) goto LBL_ERROR; - if ((err = pkcs_5_alg2(pass, pass_size, salt, salt_size, iterations, hid, k, &klen)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_start(cid, iv, k, klen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_decrypt(enc_data, dec_data, enc_size, &cbc)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR; - pad = dec_data[enc_size-1]; - if (pad < 1 || pad > 8) goto LBL_ERROR; - *dec_size = enc_size - pad; - return CRYPT_OK; - } - - if (encid == DES_CBC) { - /* https://tools.ietf.org/html/rfc8018#appendix-B.2.1 */ - cid = find_cipher("des"); - klen = 8; /* 64 bits */ - if (klen > sizeof(k) || iv_size != 8 || iv == NULL || cid == -1) goto LBL_ERROR; - if ((err = pkcs_5_alg2(pass, pass_size, salt, salt_size, iterations, hid, k, &klen)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_start(cid, iv, k, klen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_decrypt(enc_data, dec_data, enc_size, &cbc)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR; - pad = dec_data[enc_size-1]; - if (pad < 1 || pad > 8) goto LBL_ERROR; - *dec_size = enc_size - pad; - return CRYPT_OK; - } - - if (encid == RC2_CBC) { - /* https://tools.ietf.org/html/rfc8018#appendix-B.2.3 */ - cid = find_cipher("rc2"); - klen = 4; /* default: 32 bits */ - if (extra_arg == 160) klen = 5; - if (extra_arg == 120) klen = 8; - if (extra_arg == 58) klen = 16; - if (extra_arg >= 256) klen = extra_arg / 8; - if (klen > sizeof(k) || iv_size != 8 || iv == NULL || cid == -1) goto LBL_ERROR; - if ((err = pkcs_5_alg2(pass, pass_size, salt, salt_size, iterations, hid, k, &klen)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_start(cid, iv, k, klen, 0, &cbc)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_decrypt(enc_data, dec_data, enc_size, &cbc)) != CRYPT_OK) goto LBL_ERROR; - if ((err = cbc_done(&cbc)) != CRYPT_OK) goto LBL_ERROR; - pad = dec_data[enc_size-1]; - if (pad < 1 || pad > 8) goto LBL_ERROR; - *dec_size = enc_size - pad; - return CRYPT_OK; - } - -LBL_ERROR: - zeromem(k, sizeof(k)); - return CRYPT_INVALID_ARG; -} - -static int _der_decode_pkcs8_flexi(const unsigned char *in, unsigned long inlen, - const void *pwd, unsigned long pwdlen, - ltc_asn1_list **decoded_list) -{ - unsigned long len = inlen; - unsigned long dec_size; - unsigned char *dec_data = NULL; - ltc_asn1_list *l = NULL; - int err; - - *decoded_list = NULL; - if ((err = der_decode_sequence_flexi(in, &len, &l)) == CRYPT_OK) { - /* the following "if" detects whether it is encrypted or not */ - if (l->type == LTC_ASN1_SEQUENCE && - l->child && l->child->type == LTC_ASN1_SEQUENCE && - l->child->child && l->child->child->type == LTC_ASN1_OBJECT_IDENTIFIER && - l->child->child->next && l->child->child->next->type == LTC_ASN1_SEQUENCE && - l->child->next && l->child->next->type == LTC_ASN1_OCTET_STRING) { - ltc_asn1_list *lalgoid = l->child->child; - ltc_asn1_list *lalgparam = l->child->child->next; - unsigned char *enc_data = l->child->next->data; - unsigned long enc_size = l->child->next->size; - dec_size = enc_size; - if ((dec_data = XMALLOC(dec_size)) == NULL) { - err = CRYPT_MEM; - goto LBL_DONE; - } - if (lalgparam->child && lalgparam->child->type == LTC_ASN1_OCTET_STRING && - lalgparam->child->next && lalgparam->child->next->type == LTC_ASN1_INTEGER) { - /* PBES1: encrypted pkcs8 - pbeWithMD5AndDES-CBC: - * 0:d=0 hl=4 l= 329 cons: SEQUENCE - * 4:d=1 hl=2 l= 27 cons: SEQUENCE (== *lalg) - * 6:d=2 hl=2 l= 9 prim: OBJECT :pbeWithMD5AndDES-CBC (== 1.2.840.113549.1.5.3) - * 17:d=2 hl=2 l= 14 cons: SEQUENCE (== *lalgparam) - * 19:d=3 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:8EDF749A06CCDE51 (== salt) - * 29:d=3 hl=2 l= 2 prim: INTEGER :0800 (== iterations) - * 33:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data) - */ - unsigned long iter = mp_get_int(lalgparam->child->next->data); - unsigned long salt_size = lalgparam->child->size; - unsigned char *salt = lalgparam->child->data; - err = _pbes1_decrypt(enc_data, enc_size, pwd, pwdlen, salt, salt_size, iter, lalgoid->data, lalgoid->size, dec_data, &dec_size); - if (err != CRYPT_OK) goto LBL_DONE; - } - else if (PBES2 == _oid_to_id(lalgoid->data, lalgoid->size) && - lalgparam->child && lalgparam->child->type == LTC_ASN1_SEQUENCE && - lalgparam->child->child && lalgparam->child->child->type == LTC_ASN1_OBJECT_IDENTIFIER && - lalgparam->child->child->next && lalgparam->child->child->next->type == LTC_ASN1_SEQUENCE && - lalgparam->child->next && lalgparam->child->next->type == LTC_ASN1_SEQUENCE && - lalgparam->child->next->child && lalgparam->child->next->child->type == LTC_ASN1_OBJECT_IDENTIFIER) { - /* PBES2: encrypted pkcs8 - PBES2+PBKDF2+des-ede3-cbc: - * 0:d=0 hl=4 l= 380 cons: SEQUENCE - * 4:d=1 hl=2 l= 78 cons: SEQUENCE (== *lalg) - * 6:d=2 hl=2 l= 9 prim: OBJECT :PBES2 (== 1.2.840.113549.1.5.13) - * 17:d=2 hl=2 l= 65 cons: SEQUENCE (== *lalgparam) - * 19:d=3 hl=2 l= 41 cons: SEQUENCE - * 21:d=4 hl=2 l= 9 prim: OBJECT :PBKDF2 - * 32:d=4 hl=2 l= 28 cons: SEQUENCE - * 34:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:28BA4ABF6AA76A3D (== salt) - * 44:d=5 hl=2 l= 2 prim: INTEGER :0800 (== iterations) - * 48:d=5 hl=2 l= 12 cons: SEQUENCE (this sequence is optional, may be missing) - * 50:d=6 hl=2 l= 8 prim: OBJECT :hmacWithSHA256 - * 60:d=6 hl=2 l= 0 prim: NULL - * 62:d=3 hl=2 l= 20 cons: SEQUENCE - * 64:d=4 hl=2 l= 8 prim: OBJECT :des-ede3-cbc - * 74:d=4 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:B1404C4688DC9A5A - * 84:d=1 hl=4 l= 296 prim: OCTET STRING :bytes (== encrypted data) - */ - ltc_asn1_list *lkdf = lalgparam->child->child; - ltc_asn1_list *lenc = lalgparam->child->next->child; - int kdfid = _oid_to_id(lkdf->data, lkdf->size); - int encid = _oid_to_id(lenc->data, lenc->size); - if (PBKDF2 == kdfid && - lkdf->next && lkdf->next->type == LTC_ASN1_SEQUENCE && - lkdf->next->child && lkdf->next->child->type == LTC_ASN1_OCTET_STRING && - lkdf->next->child->next && lkdf->next->child->next->type == LTC_ASN1_INTEGER) { - unsigned long iter = mp_get_int(lkdf->next->child->next->data); - unsigned long salt_size = lkdf->next->child->size; - unsigned char *salt = lkdf->next->child->data; - unsigned char *iv = NULL; - unsigned long iv_size = 0; - unsigned long arg = 0; - ltc_asn1_list *loptseq = lkdf->next->child->next->next; - int hmacid = HMAC_WITH_SHA1; /* this is default */ - if (loptseq && loptseq->type == LTC_ASN1_SEQUENCE && - loptseq->child && loptseq->child->type == LTC_ASN1_OBJECT_IDENTIFIER) { - /* this sequence is optional */ - hmacid = _oid_to_id(loptseq->child->data, loptseq->child->size); - } - if (lenc->next && lenc->next->type == LTC_ASN1_OCTET_STRING) { - /* DES-CBC + DES_EDE3_CBC */ - iv = lenc->next->data; - iv_size = lenc->next->size; - } - else if (lenc->next && lenc->next->type == LTC_ASN1_SEQUENCE && - lenc->next->child && lenc->next->child->type == LTC_ASN1_INTEGER && - lenc->next->child->next && lenc->next->child->next->type == LTC_ASN1_OCTET_STRING) { - /* RC2-CBC is a bit special */ - iv = lenc->next->child->next->data; - iv_size = lenc->next->child->next->size; - arg = mp_get_int(lenc->next->child->data); - } - err = _pbes2_pbkdf2_decrypt(enc_data, enc_size, pwd, pwdlen, salt, salt_size, iv, iv_size, iter, hmacid, encid, arg, dec_data, &dec_size); - if (err != CRYPT_OK) goto LBL_DONE; - } - else { - /* non-PBKDF2 algorithms are not supported */ - err = CRYPT_INVALID_PACKET; - goto LBL_DONE; - } - } - else { - /* unsupported encryption */ - err = CRYPT_INVALID_PACKET; - goto LBL_DONE; - } - der_free_sequence_flexi(l); - l = NULL; - err = der_decode_sequence_flexi(dec_data, &dec_size, &l); - if (err != CRYPT_OK) goto LBL_DONE; - *decoded_list = l; - } - else { - /* not encrypted */ - err = CRYPT_OK; - *decoded_list = l; - } - } - -LBL_DONE: - if (dec_data) XFREE(dec_data); - return err; + return CRYPT_OK; } /* NOTE: _der_decode_pkcs8_flexi & related stuff can be shared with rsa_import_pkcs8() */ @@ -461,108 +48,108 @@ ecc_key *key) { void *a, *b, *gx, *gy; - unsigned long len, cofactor; - oid_st ecoid; + unsigned long len, cofactor, n; + const char *pka_ec_oid; int err; char OID[256]; const ltc_ecc_curve *curve; ltc_asn1_list *p = NULL, *l = NULL; + der_flexi_check flexi_should[7]; + ltc_asn1_list *seq, *priv_key; LTC_ARGCHK(in != NULL); LTC_ARGCHK(key != NULL); LTC_ARGCHK(ltc_mp.name != NULL); /* get EC alg oid */ - err = pk_get_oid(PKA_EC, &ecoid); + err = pk_get_oid(PKA_EC, &pka_ec_oid); if (err != CRYPT_OK) return err; /* init key */ err = mp_init_multi(&a, &b, &gx, &gy, NULL); if (err != CRYPT_OK) return err; - if ((err = _der_decode_pkcs8_flexi(in, inlen, pwd, pwdlen, &l)) == CRYPT_OK) { - if (l->type == LTC_ASN1_SEQUENCE && - l->child && l->child->type == LTC_ASN1_INTEGER && - l->child->next && l->child->next->type == LTC_ASN1_SEQUENCE && - l->child->next->child && l->child->next->child->type == LTC_ASN1_OBJECT_IDENTIFIER && - l->child->next->next && l->child->next->next->type == LTC_ASN1_OCTET_STRING) { - ltc_asn1_list *lseq = l->child->next; - ltc_asn1_list *lpri = l->child->next->next; - ltc_asn1_list *lecoid = l->child->next->child; - if ((lecoid->size != ecoid.OIDlen) || - XMEMCMP(ecoid.OID, lecoid->data, ecoid.OIDlen * sizeof(ecoid.OID[0]))) { - err = CRYPT_PK_INVALID_TYPE; - goto LBL_DONE; + if ((err = pkcs8_decode_flexi(in, inlen, pwd, pwdlen, &l)) == CRYPT_OK) { + + /* Setup for basic structure */ + n=0; + LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_INTEGER, NULL); + LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_SEQUENCE, &seq); + LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_OCTET_STRING, &priv_key); + LTC_SET_DER_FLEXI_CHECK(flexi_should, n, LTC_ASN1_EOL, NULL); + + if (((err = _der_flexi_sequence_cmp(l, flexi_should)) == CRYPT_OK) && + (pk_oid_cmp_with_asn1(pka_ec_oid, seq->child) == CRYPT_OK)) { + ltc_asn1_list *version, *field, *point, *point_g, *order, *p_cofactor; + + /* Setup for CASE 2 */ + n=0; + LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_INTEGER, &version); + LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_SEQUENCE, &field); + LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_SEQUENCE, &point); + LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_OCTET_STRING, &point_g); + LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_INTEGER, &order); + LTC_SET_DER_FLEXI_CHECK(flexi_should, n++, LTC_ASN1_INTEGER, &p_cofactor); + LTC_SET_DER_FLEXI_CHECK(flexi_should, n, LTC_ASN1_EOL, NULL); + + if (LTC_ASN1_IS_TYPE(seq->child->next, LTC_ASN1_OBJECT_IDENTIFIER)) { + /* CASE 1: curve by OID (AKA short variant): + * 0:d=0 hl=2 l= 100 cons: SEQUENCE + * 2:d=1 hl=2 l= 1 prim: INTEGER :00 + * 5:d=1 hl=2 l= 16 cons: SEQUENCE (== *seq) + * 7:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey + * 16:d=2 hl=2 l= 5 prim: OBJECT :(== *curve_oid (e.g. secp256k1 (== 1.3.132.0.10))) + * 23:d=1 hl=2 l= 77 prim: OCTET STRING :bytes (== *priv_key) + */ + ltc_asn1_list *curve_oid = seq->child->next; + len = sizeof(OID); + if ((err = pk_oid_num_to_str(curve_oid->data, curve_oid->size, OID, &len)) != CRYPT_OK) { goto LBL_DONE; } + if ((err = ecc_find_curve(OID, &curve)) != CRYPT_OK) { goto LBL_DONE; } + if ((err = ecc_set_curve(curve, key)) != CRYPT_OK) { goto LBL_DONE; } } - - if (lseq->child->next && lseq->child->next->type == LTC_ASN1_OBJECT_IDENTIFIER) { - /* CASE 1: curve by OID (AKA short variant): - * 0:d=0 hl=2 l= 100 cons: SEQUENCE - * 2:d=1 hl=2 l= 1 prim: INTEGER :00 - * 5:d=1 hl=2 l= 16 cons: SEQUENCE (== *lseq) - * 7:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey - * 16:d=2 hl=2 l= 5 prim: OBJECT :secp256k1 (== 1.3.132.0.10) - * 23:d=1 hl=2 l= 77 prim: OCTET STRING :bytes (== privatekey) - */ - ltc_asn1_list *loid = lseq->child->next; - len = sizeof(OID); - if ((err = pk_oid_num_to_str(loid->data, loid->size, OID, &len)) != CRYPT_OK) { goto LBL_DONE; } - if ((err = ecc_get_curve(OID, &curve)) != CRYPT_OK) { goto LBL_DONE; } - if ((err = ecc_set_dp(curve, key)) != CRYPT_OK) { goto LBL_DONE; } - } - else if (lseq->child->next && lseq->child->next->type == LTC_ASN1_SEQUENCE) { + else if ((err = _der_flexi_sequence_cmp(seq->child->next, flexi_should)) == CRYPT_OK) { /* CASE 2: explicit curve parameters (AKA long variant): * 0:d=0 hl=3 l= 227 cons: SEQUENCE * 3:d=1 hl=2 l= 1 prim: INTEGER :00 - * 6:d=1 hl=3 l= 142 cons: SEQUENCE (== *lseq) + * 6:d=1 hl=3 l= 142 cons: SEQUENCE (== *seq) * 9:d=2 hl=2 l= 7 prim: OBJECT :id-ecPublicKey - * 18:d=2 hl=3 l= 130 cons: SEQUENCE (== *lcurve) + * 18:d=2 hl=3 l= 130 cons: SEQUENCE * 21:d=3 hl=2 l= 1 prim: INTEGER :01 - * 24:d=3 hl=2 l= 44 cons: SEQUENCE (== *lfield) + * 24:d=3 hl=2 l= 44 cons: SEQUENCE (== *field) * 26:d=4 hl=2 l= 7 prim: OBJECT :prime-field - * 35:d=4 hl=2 l= 33 prim: INTEGER :(== curve.prime) - * 70:d=3 hl=2 l= 6 cons: SEQUENCE (== *lpoint) + * 35:d=4 hl=2 l= 33 prim: INTEGER :(== *prime / curve.prime) + * 70:d=3 hl=2 l= 6 cons: SEQUENCE (== *point) * 72:d=4 hl=2 l= 1 prim: OCTET STRING :bytes (== curve.A) * 75:d=4 hl=2 l= 1 prim: OCTET STRING :bytes (== curve.B) - * 78:d=3 hl=2 l= 33 prim: OCTET STRING :bytes (== curve.G-point) - * 113:d=3 hl=2 l= 33 prim: INTEGER :(== curve.order) + * 78:d=3 hl=2 l= 33 prim: OCTET STRING :bytes (== *g_point / curve.G-point) + * 113:d=3 hl=2 l= 33 prim: INTEGER :(== *order / curve.order) * 148:d=3 hl=2 l= 1 prim: INTEGER :(== curve.cofactor) - * 151:d=1 hl=2 l= 77 prim: OCTET STRING :bytes (== privatekey) + * 151:d=1 hl=2 l= 77 prim: OCTET STRING :bytes (== *priv_key) */ - ltc_asn1_list *lcurve = lseq->child->next; - if (lcurve->child && lcurve->child->type == LTC_ASN1_INTEGER && - lcurve->child->next && lcurve->child->next->type == LTC_ASN1_SEQUENCE && - lcurve->child->next->next && lcurve->child->next->next->type == LTC_ASN1_SEQUENCE && - lcurve->child->next->next->next && lcurve->child->next->next->next->type == LTC_ASN1_OCTET_STRING && - lcurve->child->next->next->next->next && lcurve->child->next->next->next->next->type == LTC_ASN1_INTEGER && - lcurve->child->next->next->next->next->next && lcurve->child->next->next->next->next->next->type == LTC_ASN1_INTEGER) { + if (mp_get_int(version->data) != 1) { + goto LBL_DONE; + } + cofactor = mp_get_int(p_cofactor->data); - ltc_asn1_list *lfield = lcurve->child->next; - ltc_asn1_list *lpoint = lcurve->child->next->next; - ltc_asn1_list *lg = lcurve->child->next->next->next; - ltc_asn1_list *lorder = lcurve->child->next->next->next->next; - cofactor = mp_get_int(lcurve->child->next->next->next->next->next->data); + if (LTC_ASN1_IS_TYPE(field->child, LTC_ASN1_OBJECT_IDENTIFIER) && + LTC_ASN1_IS_TYPE(field->child->next, LTC_ASN1_INTEGER) && + LTC_ASN1_IS_TYPE(point->child, LTC_ASN1_OCTET_STRING) && + LTC_ASN1_IS_TYPE(point->child->next, LTC_ASN1_OCTET_STRING)) { - if (lfield->child && lfield->child->type == LTC_ASN1_OBJECT_IDENTIFIER && - lfield->child->next && lfield->child->next->type == LTC_ASN1_INTEGER && - lpoint->child && lpoint->child->type == LTC_ASN1_OCTET_STRING && - lpoint->child->next && lpoint->child->next->type == LTC_ASN1_OCTET_STRING) { - - ltc_asn1_list *lprime = lfield->child->next; - if ((err = mp_read_unsigned_bin(a, lpoint->child->data, lpoint->child->size)) != CRYPT_OK) { - goto LBL_DONE; - } - if ((err = mp_read_unsigned_bin(b, lpoint->child->next->data, lpoint->child->next->size)) != CRYPT_OK) { - goto LBL_DONE; - } - if ((err = ltc_ecc_import_point(lg->data, lg->size, lprime->data, a, b, gx, gy)) != CRYPT_OK) { - goto LBL_DONE; - } - if ((err = ecc_set_dp_from_mpis(a, b, lprime->data, lorder->data, gx, gy, cofactor, key)) != CRYPT_OK) { - goto LBL_DONE; - } + ltc_asn1_list *prime = field->child->next; + if ((err = mp_read_unsigned_bin(a, point->child->data, point->child->size)) != CRYPT_OK) { + goto LBL_DONE; + } + if ((err = mp_read_unsigned_bin(b, point->child->next->data, point->child->next->size)) != CRYPT_OK) { + goto LBL_DONE; + } + if ((err = ltc_ecc_import_point(point_g->data, point_g->size, prime->data, a, b, gx, gy)) != CRYPT_OK) { + goto LBL_DONE; + } + if ((err = ecc_set_curve_from_mpis(a, b, prime->data, order->data, gx, gy, cofactor, key)) != CRYPT_OK) { + goto LBL_DONE; } } } @@ -572,11 +159,11 @@ } /* load private key value 'k' */ - len = lpri->size; - if ((err = der_decode_sequence_flexi(lpri->data, &len, &p)) == CRYPT_OK) { + len = priv_key->size; + if ((err = der_decode_sequence_flexi(priv_key->data, &len, &p)) == CRYPT_OK) { if (p->type == LTC_ASN1_SEQUENCE && - p->child && p->child->type == LTC_ASN1_INTEGER && - p->child->next && p->child->next->type == LTC_ASN1_OCTET_STRING) { + LTC_ASN1_IS_TYPE(p->child, LTC_ASN1_INTEGER) && + LTC_ASN1_IS_TYPE(p->child->next, LTC_ASN1_OCTET_STRING)) { ltc_asn1_list *lk = p->child->next; if (mp_cmp_d(p->child->data, 1) != LTC_MP_EQ) { err = CRYPT_INVALID_PACKET; diff --git a/src/ltc/pk/ecc/ecc_import_x509.c b/src/ltc/pk/ecc/ecc_import_x509.c index 786e095..99a2750 100644 --- a/src/ltc/pk/ecc/ecc_import_x509.c +++ b/src/ltc/pk/ecc/ecc_import_x509.c @@ -9,6 +9,99 @@ #include "tomcrypt_private.h" #ifdef LTC_MECC + +static int _ecc_import_x509_with_oid(const unsigned char *in, unsigned long inlen, ecc_key *key) +{ + unsigned char bin_xy[2*ECC_MAXSIZE+2]; + unsigned long curveoid[16]; + unsigned long len_xy, len_oid, len; + char OID[256]; + const ltc_ecc_curve *curve; + int err; + + len_xy = sizeof(bin_xy); + len_oid = 16; + err = x509_decode_subject_public_key_info(in, inlen, PKA_EC, bin_xy, &len_xy, + LTC_ASN1_OBJECT_IDENTIFIER, (void *)curveoid, &len_oid); + if (err == CRYPT_OK) { + /* load curve parameters for given curve OID */ + len = sizeof(OID); + if ((err = pk_oid_num_to_str(curveoid, len_oid, OID, &len)) != CRYPT_OK) { goto error; } + if ((err = ecc_find_curve(OID, &curve)) != CRYPT_OK) { goto error; } + if ((err = ecc_set_curve(curve, key)) != CRYPT_OK) { goto error; } + /* load public key */ + err = ecc_set_key(bin_xy, len_xy, PK_PUBLIC, key); + } +error: + return err; +} + +static int _ecc_import_x509_with_curve(const unsigned char *in, unsigned long inlen, ecc_key *key) +{ + void *prime, *order, *a, *b, *gx, *gy; + ltc_asn1_list seq_fieldid[2], seq_curve[3], seq_ecparams[6]; + unsigned char bin_a[ECC_MAXSIZE], bin_b[ECC_MAXSIZE]; + unsigned char bin_g[2*ECC_MAXSIZE+1], bin_xy[2*ECC_MAXSIZE+2], bin_seed[128]; + unsigned long len_a, len_b, len_g, len_xy, len; + unsigned long cofactor = 0, ecver = 0, tmpoid[16]; + int err; + + if ((err = mp_init_multi(&prime, &order, &a, &b, &gx, &gy, NULL)) != CRYPT_OK) { + return err; + } + + /* ECParameters SEQUENCE */ + LTC_SET_ASN1(seq_ecparams, 0, LTC_ASN1_SHORT_INTEGER, &ecver, 1UL); + LTC_SET_ASN1(seq_ecparams, 1, LTC_ASN1_SEQUENCE, seq_fieldid, 2UL); + LTC_SET_ASN1(seq_ecparams, 2, LTC_ASN1_SEQUENCE, seq_curve, 3UL); + LTC_SET_ASN1(seq_ecparams, 3, LTC_ASN1_OCTET_STRING, bin_g, sizeof(bin_g)); + LTC_SET_ASN1(seq_ecparams, 4, LTC_ASN1_INTEGER, order, 1UL); + LTC_SET_ASN1(seq_ecparams, 5, LTC_ASN1_SHORT_INTEGER, &cofactor, 1UL); + seq_ecparams[5].optional = 1; + /* FieldID SEQUENCE */ + LTC_SET_ASN1(seq_fieldid, 0, LTC_ASN1_OBJECT_IDENTIFIER, tmpoid, 16UL); + LTC_SET_ASN1(seq_fieldid, 1, LTC_ASN1_INTEGER, prime, 1UL); + /* Curve SEQUENCE */ + LTC_SET_ASN1(seq_curve, 0, LTC_ASN1_OCTET_STRING, bin_a, sizeof(bin_a)); + LTC_SET_ASN1(seq_curve, 1, LTC_ASN1_OCTET_STRING, bin_b, sizeof(bin_b)); + LTC_SET_ASN1(seq_curve, 2, LTC_ASN1_RAW_BIT_STRING, bin_seed, 8u*sizeof(bin_seed)); + seq_curve[2].optional = 1; + /* try to load public key */ + len_xy = sizeof(bin_xy); + len = 6; + err = x509_decode_subject_public_key_info(in, inlen, PKA_EC, bin_xy, &len_xy, LTC_ASN1_SEQUENCE, seq_ecparams, &len); + + if (err == CRYPT_OK) { + len_a = seq_curve[0].size; + len_b = seq_curve[1].size; + len_g = seq_ecparams[3].size; + /* create bignums */ + if ((err = mp_read_unsigned_bin(a, bin_a, len_a)) != CRYPT_OK) { goto error; } + if ((err = mp_read_unsigned_bin(b, bin_b, len_b)) != CRYPT_OK) { goto error; } + if ((err = ltc_ecc_import_point(bin_g, len_g, prime, a, b, gx, gy)) != CRYPT_OK) { goto error; } + /* load curve parameters */ + if ((err = ecc_set_curve_from_mpis(a, b, prime, order, gx, gy, cofactor, key)) != CRYPT_OK) { goto error; } + /* load public key */ + err = ecc_set_key(bin_xy, len_xy, PK_PUBLIC, key); + } +error: + mp_clear_multi(prime, order, a, b, gx, gy, NULL); + return err; +} + +int ecc_import_subject_public_key_info(const unsigned char *in, unsigned long inlen, ecc_key *key) +{ + int err; + + if ((err = _ecc_import_x509_with_oid(in, inlen, key)) == CRYPT_OK) { + goto success; + } + + err = _ecc_import_x509_with_curve(in, inlen, key); + +success: + return err; +} /** Import an ECC key from a X.509 certificate @@ -38,7 +131,7 @@ l->child && l->child->type == LTC_ASN1_SEQUENCE && l->child->child && l->child->child->type == LTC_ASN1_OBJECT_IDENTIFIER && l->child->next && l->child->next->type == LTC_ASN1_BIT_STRING) { - err = ecc_import_openssl(l->data, l->size, key); + err = ecc_import_subject_public_key_info(l->data, l->size, key); goto LBL_DONE; } l = l->next; diff --git a/src/ltc/pk/ecc/ecc_make_key.c b/src/ltc/pk/ecc/ecc_make_key.c index da59585..4a8f91e 100644 --- a/src/ltc/pk/ecc/ecc_make_key.c +++ b/src/ltc/pk/ecc/ecc_make_key.c @@ -28,15 +28,15 @@ { int err; - if ((err = ecc_set_dp_by_size(keysize, key)) != CRYPT_OK) { return err; } - if ((err = ecc_generate_key(prng, wprng, key)) != CRYPT_OK) { return err; } + if ((err = ecc_set_curve_by_size(keysize, key)) != CRYPT_OK) { return err; } + if ((err = ecc_generate_key(prng, wprng, key)) != CRYPT_OK) { return err; } return CRYPT_OK; } int ecc_make_key_ex(prng_state *prng, int wprng, ecc_key *key, const ltc_ecc_curve *cu) { int err; - if ((err = ecc_set_dp(cu, key)) != CRYPT_OK) { return err; } + if ((err = ecc_set_curve(cu, key)) != CRYPT_OK) { return err; } if ((err = ecc_generate_key(prng, wprng, key)) != CRYPT_OK) { return err; } return CRYPT_OK; } diff --git a/src/ltc/pk/ecc/ecc_recover_key.c b/src/ltc/pk/ecc/ecc_recover_key.c new file mode 100644 index 0000000..d3a70df --- /dev/null +++ b/src/ltc/pk/ecc/ecc_recover_key.c @@ -0,0 +1,269 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_MECC + +#ifdef LTC_ECC_SHAMIR + +/** + @file ecc_recover_key.c + ECC Crypto, Russ Williams +*/ + +/** + Recover ECC public key from signature and hash + @param sig The signature to verify + @param siglen The length of the signature (octets) + @param hash The hash (message digest) that was signed + @param hashlen The length of the hash (octets) + @param recid The recovery ID ("v"), can be -1 if signature contains it + @param sigformat The format of the signature (ecc_signature_type) + @param key The recovered public ECC key + @return CRYPT_OK if successful (even if the signature is not valid) +*/ +int ecc_recover_key(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int recid, ecc_signature_type sigformat, ecc_key *key) +{ + ecc_point *mG = NULL, *mQ = NULL, *mR = NULL; + void *p, *m, *a, *b; + void *r, *s, *v, *w, *t1, *t2, *u1, *u2, *v1, *v2, *e, *x, *y, *a_plus3; + void *mu = NULL, *ma = NULL; + void *mp = NULL; + int err; + unsigned long pbits, pbytes, i, shift_right; + unsigned char ch, buf[MAXBLOCKSIZE]; + + LTC_ARGCHK(sig != NULL); + LTC_ARGCHK(hash != NULL); + LTC_ARGCHK(key != NULL); + + /* BEWARE: requires sqrtmod_prime */ + if (ltc_mp.sqrtmod_prime == NULL) { + return CRYPT_ERROR; + } + + /* allocate ints */ + if ((err = mp_init_multi(&r, &s, &v, &w, &t1, &t2, &u1, &u2, &v1, &v2, &e, &x, &y, &a_plus3, NULL)) != CRYPT_OK) { + return err; + } + + p = key->dp.order; + m = key->dp.prime; + a = key->dp.A; + b = key->dp.B; + if ((err = mp_add_d(a, 3, a_plus3)) != CRYPT_OK) { + goto error; + } + + /* allocate points */ + mG = ltc_ecc_new_point(); + mQ = ltc_ecc_new_point(); + mR = ltc_ecc_new_point(); + if (mR == NULL || mQ == NULL || mG == NULL) { + err = CRYPT_MEM; + goto error; + } + + if (sigformat == LTC_ECCSIG_ANSIX962) { + /* ANSI X9.62 format - ASN.1 encoded SEQUENCE{ INTEGER(r), INTEGER(s) } */ + if ((err = der_decode_sequence_multi_ex(sig, siglen, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_STRICT, + LTC_ASN1_INTEGER, 1UL, r, + LTC_ASN1_INTEGER, 1UL, s, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { goto error; } + } + else if (sigformat == LTC_ECCSIG_RFC7518) { + /* RFC7518 format - raw (r,s) */ + i = mp_unsigned_bin_size(key->dp.order); + if (siglen != (2*i)) { + err = CRYPT_INVALID_PACKET; + goto error; + } + if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, i)) != CRYPT_OK) { goto error; } + if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig+i, i)) != CRYPT_OK) { goto error; } + } + else if (sigformat == LTC_ECCSIG_ETH27) { + /* Ethereum (v,r,s) format */ + if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) { + /* Only valid for secp256k1 - OID 1.3.132.0.10 */ + err = CRYPT_ERROR; goto error; + } + if (siglen != 65) { /* Only secp256k1 curves use this format, so must be 65 bytes long */ + err = CRYPT_INVALID_PACKET; + goto error; + } + i = (unsigned long)sig[64]; + if ((i>=27) && (i<31)) i -= 27; /* Ethereum adds 27 to recovery ID */ + if (recid >= 0 && ((unsigned long)recid != i)) { + /* Recovery ID specified, but doesn't match signature */ + err = CRYPT_INVALID_PACKET; + goto error; + } + recid = i; + if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, 32)) != CRYPT_OK) { goto error; } + if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig+32, 32)) != CRYPT_OK) { goto error; } + } +#ifdef LTC_SSH + else if (sigformat == LTC_ECCSIG_RFC5656) { + char name[64], name2[64]; + unsigned long namelen = sizeof(name2); + + /* Decode as SSH data sequence, per RFC4251 */ + if ((err = ssh_decode_sequence_multi(sig, siglen, + LTC_SSHDATA_STRING, name, 64, + LTC_SSHDATA_MPINT, r, + LTC_SSHDATA_MPINT, s, + LTC_SSHDATA_EOL, NULL)) != CRYPT_OK) { goto error; } + + + /* Check curve matches identifier string */ + if ((err = ecc_ssh_ecdsa_encode_name(name2, &namelen, key)) != CRYPT_OK) { goto error; } + if (XSTRCMP(name,name2) != 0) { + err = CRYPT_INVALID_ARG; + goto error; + } + } +#endif + else { + /* Unknown signature format */ + err = CRYPT_ERROR; + goto error; + } + + if (recid < 0 || (unsigned long)recid >= 2*(key->dp.cofactor+1)) { + /* Recovery ID is out of range, reject it */ + err = CRYPT_INVALID_ARG; + goto error; + } + + /* check for zero */ + if (mp_cmp_d(r, 0) != LTC_MP_GT || mp_cmp_d(s, 0) != LTC_MP_GT || + mp_cmp(r, p) != LTC_MP_LT || mp_cmp(s, p) != LTC_MP_LT) { + err = CRYPT_INVALID_PACKET; + goto error; + } + + /* read hash - truncate if needed */ + pbits = mp_count_bits(p); + pbytes = (pbits+7) >> 3; + if (pbits > hashlen*8) { + if ((err = mp_read_unsigned_bin(e, (unsigned char *)hash, hashlen)) != CRYPT_OK) { goto error; } + } + else if (pbits % 8 == 0) { + if ((err = mp_read_unsigned_bin(e, (unsigned char *)hash, pbytes)) != CRYPT_OK) { goto error; } + } + else { + shift_right = 8 - pbits % 8; + for (i=0, ch=0; i> shift_right); + } + if ((err = mp_read_unsigned_bin(e, (unsigned char *)buf, pbytes)) != CRYPT_OK) { goto error; } + } + + /* decompress point from r=(x mod p) - BEWARE: requires sqrtmod_prime */ + /* x = r + p*(recid/2) */ + if ((err = mp_set(x, recid/2)) != CRYPT_OK) { goto error; } + if ((err = mp_mulmod(p, x, m, x)) != CRYPT_OK) { goto error; } + if ((err = mp_add(x, r, x)) != CRYPT_OK) { goto error; } + /* compute x^3 */ + if ((err = mp_sqr(x, t1)) != CRYPT_OK) { goto error; } + if ((err = mp_mulmod(t1, x, m, t1)) != CRYPT_OK) { goto error; } + /* compute x^3 + a*x */ + if ((err = mp_mulmod(a, x, m, t2)) != CRYPT_OK) { goto error; } + if ((err = mp_add(t1, t2, t1)) != CRYPT_OK) { goto error; } + /* compute x^3 + a*x + b */ + if ((err = mp_add(t1, b, t1)) != CRYPT_OK) { goto error; } + /* compute sqrt(x^3 + a*x + b) */ + if ((err = mp_sqrtmod_prime(t1, m, t2)) != CRYPT_OK) { goto error; } + + /* fill in mR */ + if ((err = mp_copy(x, mR->x)) != CRYPT_OK) { goto error; } + if ((mp_isodd(t2) && (recid%2)) || (!mp_isodd(t2) && !(recid%2))) { + if ((err = mp_mod(t2, m, mR->y)) != CRYPT_OK) { goto error; } + } + else { + if ((err = mp_submod(m, t2, m, mR->y)) != CRYPT_OK) { goto error; } + } + if ((err = mp_set(mR->z, 1)) != CRYPT_OK) { goto error; } + + /* w = r^-1 mod n */ + if ((err = mp_invmod(r, p, w)) != CRYPT_OK) { goto error; } + /* v1 = sw */ + if ((err = mp_mulmod(s, w, p, v1)) != CRYPT_OK) { goto error; } + /* v2 = -ew */ + if ((err = mp_mulmod(e, w, p, v2)) != CRYPT_OK) { goto error; } + if ((err = mp_submod(p, v2, p, v2)) != CRYPT_OK) { goto error; } + + /* w = s^-1 mod n */ + if ((err = mp_invmod(s, p, w)) != CRYPT_OK) { goto error; } + /* u1 = ew */ + if ((err = mp_mulmod(e, w, p, u1)) != CRYPT_OK) { goto error; } + /* u2 = rw */ + if ((err = mp_mulmod(r, w, p, u2)) != CRYPT_OK) { goto error; } + + /* find mG */ + if ((err = ltc_ecc_copy_point(&key->dp.base, mG)) != CRYPT_OK) { goto error; } + + /* find the montgomery mp */ + if ((err = mp_montgomery_setup(m, &mp)) != CRYPT_OK) { goto error; } + + /* for curves with a == -3 keep ma == NULL */ + if (mp_cmp(a_plus3, m) != LTC_MP_EQ) { + if ((err = mp_init_multi(&mu, &ma, NULL)) != CRYPT_OK) { goto error; } + if ((err = mp_montgomery_normalization(mu, m)) != CRYPT_OK) { goto error; } + if ((err = mp_mulmod(a, mu, m, ma)) != CRYPT_OK) { goto error; } + } + + /* recover mQ from mR */ + /* compute v1*mR + v2*mG = mQ using Shamir's trick */ + if ((err = ltc_mp.ecc_mul2add(mR, v1, mG, v2, mQ, ma, m)) != CRYPT_OK) { goto error; } + + /* compute u1*mG + u2*mQ = mG using Shamir's trick */ + if ((err = ltc_mp.ecc_mul2add(mG, u1, mQ, u2, mG, ma, m)) != CRYPT_OK) { goto error; } + + /* v = X_x1 mod n */ + if ((err = mp_mod(mG->x, p, v)) != CRYPT_OK) { goto error; } + + /* does v == r */ + if (mp_cmp(v, r) == LTC_MP_EQ) { + /* found public key which verifies signature */ + if ((err = ltc_ecc_copy_point(mQ, &key->pubkey)) != CRYPT_OK) { goto error; } + /* point on the curve + other checks */ + if ((err = ltc_ecc_verify_key(key)) != CRYPT_OK) { goto error; } + + key->type = PK_PUBLIC; + + err = CRYPT_OK; + } + else { + /* not found - recid is wrong or we're unable to calculate public key for some other reason */ + err = CRYPT_INVALID_ARG; + } + +error: + if (ma != NULL) mp_clear(ma); + if (mu != NULL) mp_clear(mu); + if (mp != NULL) mp_montgomery_free(mp); + if (mR != NULL) ltc_ecc_del_point(mR); + if (mQ != NULL) ltc_ecc_del_point(mQ); + if (mG != NULL) ltc_ecc_del_point(mG); + mp_clear_multi(a_plus3, y, x, e, v2, v1, u2, u1, t2, t1, w, v, s, r, NULL); + return err; +} + +#endif +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/ecc/ecc_set_curve.c b/src/ltc/pk/ecc/ecc_set_curve.c new file mode 100644 index 0000000..9fa44fd --- /dev/null +++ b/src/ltc/pk/ecc/ecc_set_curve.c @@ -0,0 +1,90 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_MECC + +int ecc_set_curve(const ltc_ecc_curve *cu, ecc_key *key) +{ + int err; + + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(cu != NULL); + + if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B, + &key->dp.base.x, &key->dp.base.y, &key->dp.base.z, + &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, + NULL)) != CRYPT_OK) { + return err; + } + + /* A, B, order, prime, Gx, Gy */ + if ((err = mp_read_radix(key->dp.prime, cu->prime, 16)) != CRYPT_OK) { goto error; } + if ((err = mp_read_radix(key->dp.order, cu->order, 16)) != CRYPT_OK) { goto error; } + if ((err = mp_read_radix(key->dp.A, cu->A, 16)) != CRYPT_OK) { goto error; } + if ((err = mp_read_radix(key->dp.B, cu->B, 16)) != CRYPT_OK) { goto error; } + if ((err = mp_read_radix(key->dp.base.x, cu->Gx, 16)) != CRYPT_OK) { goto error; } + if ((err = mp_read_radix(key->dp.base.y, cu->Gy, 16)) != CRYPT_OK) { goto error; } + if ((err = mp_set(key->dp.base.z, 1)) != CRYPT_OK) { goto error; } + /* cofactor & size */ + key->dp.cofactor = cu->cofactor; + key->dp.size = mp_unsigned_bin_size(key->dp.prime); + /* OID string >> unsigned long oid[16] + oidlen */ + key->dp.oidlen = 16; + if ((err = pk_oid_str_to_num(cu->OID, key->dp.oid, &key->dp.oidlen)) != CRYPT_OK) { goto error; } + /* success */ + return CRYPT_OK; + +error: + ecc_free(key); + return err; +} + +int ecc_set_curve_by_size(int size, ecc_key *key) +{ + const ltc_ecc_curve *cu = NULL; + int err = CRYPT_ERROR; + + /* for compatibility with libtomcrypt-1.17 the sizes below must match the specific curves */ + if (size <= 14) { + err = ecc_find_curve("SECP112R1", &cu); + } + else if (size <= 16) { + err = ecc_find_curve("SECP128R1", &cu); + } + else if (size <= 20) { + err = ecc_find_curve("SECP160R1", &cu); + } + else if (size <= 24) { + err = ecc_find_curve("SECP192R1", &cu); + } + else if (size <= 28) { + err = ecc_find_curve("SECP224R1", &cu); + } + else if (size <= 32) { + err = ecc_find_curve("SECP256R1", &cu); + } + else if (size <= 48) { + err = ecc_find_curve("SECP384R1", &cu); + } + else if (size <= 66) { + err = ecc_find_curve("SECP521R1", &cu); + } + + if (err == CRYPT_OK && cu != NULL) return ecc_set_curve(cu, key); + + return CRYPT_INVALID_ARG; +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/ecc/ecc_set_curve_internal.c b/src/ltc/pk/ecc/ecc_set_curve_internal.c new file mode 100644 index 0000000..aed515c --- /dev/null +++ b/src/ltc/pk/ecc/ecc_set_curve_internal.c @@ -0,0 +1,129 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_MECC + +static int _ecc_cmp_hex_bn(const char *left_hex, void *right_bn, void *tmp_bn) +{ + if (mp_read_radix(tmp_bn, left_hex, 16) != CRYPT_OK) return 0; + if (mp_cmp(tmp_bn, right_bn) != LTC_MP_EQ) return 0; + return 1; +} + +static void _ecc_oid_lookup(ecc_key *key) +{ + void *bn; + const ltc_ecc_curve *curve; + + key->dp.oidlen = 0; + if (mp_init(&bn) != CRYPT_OK) return; + for (curve = ltc_ecc_curves; curve->prime != NULL; curve++) { + if (_ecc_cmp_hex_bn(curve->prime, key->dp.prime, bn) != 1) continue; + if (_ecc_cmp_hex_bn(curve->order, key->dp.order, bn) != 1) continue; + if (_ecc_cmp_hex_bn(curve->A, key->dp.A, bn) != 1) continue; + if (_ecc_cmp_hex_bn(curve->B, key->dp.B, bn) != 1) continue; + if (_ecc_cmp_hex_bn(curve->Gx, key->dp.base.x, bn) != 1) continue; + if (_ecc_cmp_hex_bn(curve->Gy, key->dp.base.y, bn) != 1) continue; + if (key->dp.cofactor != curve->cofactor) continue; + break; /* found */ + } + mp_clear(bn); + if (curve->prime && curve->OID) { + key->dp.oidlen = 16; /* size of key->dp.oid */ + pk_oid_str_to_num(curve->OID, key->dp.oid, &key->dp.oidlen); + } +} + +int ecc_copy_curve(const ecc_key *srckey, ecc_key *key) +{ + unsigned long i; + int err; + + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(srckey != NULL); + + if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B, + &key->dp.base.x, &key->dp.base.y, &key->dp.base.z, + &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, + NULL)) != CRYPT_OK) { + return err; + } + + /* A, B, order, prime, Gx, Gy */ + if ((err = mp_copy(srckey->dp.prime, key->dp.prime )) != CRYPT_OK) { goto error; } + if ((err = mp_copy(srckey->dp.order, key->dp.order )) != CRYPT_OK) { goto error; } + if ((err = mp_copy(srckey->dp.A, key->dp.A )) != CRYPT_OK) { goto error; } + if ((err = mp_copy(srckey->dp.B, key->dp.B )) != CRYPT_OK) { goto error; } + if ((err = ltc_ecc_copy_point(&srckey->dp.base, &key->dp.base)) != CRYPT_OK) { goto error; } + /* cofactor & size */ + key->dp.cofactor = srckey->dp.cofactor; + key->dp.size = srckey->dp.size; + /* OID */ + if (srckey->dp.oidlen > 0) { + key->dp.oidlen = srckey->dp.oidlen; + for (i = 0; i < key->dp.oidlen; i++) key->dp.oid[i] = srckey->dp.oid[i]; + } + else { + _ecc_oid_lookup(key); /* try to find OID in ltc_ecc_curves */ + } + /* success */ + return CRYPT_OK; + +error: + ecc_free(key); + return err; +} + +int ecc_set_curve_from_mpis(void *a, void *b, void *prime, void *order, void *gx, void *gy, unsigned long cofactor, ecc_key *key) +{ + int err; + + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(a != NULL); + LTC_ARGCHK(b != NULL); + LTC_ARGCHK(prime != NULL); + LTC_ARGCHK(order != NULL); + LTC_ARGCHK(gx != NULL); + LTC_ARGCHK(gy != NULL); + + if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B, + &key->dp.base.x, &key->dp.base.y, &key->dp.base.z, + &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, + NULL)) != CRYPT_OK) { + return err; + } + + /* A, B, order, prime, Gx, Gy */ + if ((err = mp_copy(prime, key->dp.prime )) != CRYPT_OK) { goto error; } + if ((err = mp_copy(order, key->dp.order )) != CRYPT_OK) { goto error; } + if ((err = mp_copy(a, key->dp.A )) != CRYPT_OK) { goto error; } + if ((err = mp_copy(b, key->dp.B )) != CRYPT_OK) { goto error; } + if ((err = mp_copy(gx, key->dp.base.x)) != CRYPT_OK) { goto error; } + if ((err = mp_copy(gy, key->dp.base.y)) != CRYPT_OK) { goto error; } + if ((err = mp_set(key->dp.base.z, 1)) != CRYPT_OK) { goto error; } + /* cofactor & size */ + key->dp.cofactor = cofactor; + key->dp.size = mp_unsigned_bin_size(prime); + /* try to find OID in ltc_ecc_curves */ + _ecc_oid_lookup(key); + /* success */ + return CRYPT_OK; + +error: + ecc_free(key); + return err; +} + +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/ecc/ecc_set_dp.c b/src/ltc/pk/ecc/ecc_set_dp.c deleted file mode 100644 index 4c4f487..0000000 --- a/src/ltc/pk/ecc/ecc_set_dp.c +++ /dev/null @@ -1,90 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -int ecc_set_dp(const ltc_ecc_curve *curve, ecc_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(curve != NULL); - - if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B, - &key->dp.base.x, &key->dp.base.y, &key->dp.base.z, - &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, - NULL)) != CRYPT_OK) { - return err; - } - - /* A, B, order, prime, Gx, Gy */ - if ((err = mp_read_radix(key->dp.prime, curve->prime, 16)) != CRYPT_OK) { goto error; } - if ((err = mp_read_radix(key->dp.order, curve->order, 16)) != CRYPT_OK) { goto error; } - if ((err = mp_read_radix(key->dp.A, curve->A, 16)) != CRYPT_OK) { goto error; } - if ((err = mp_read_radix(key->dp.B, curve->B, 16)) != CRYPT_OK) { goto error; } - if ((err = mp_read_radix(key->dp.base.x, curve->Gx, 16)) != CRYPT_OK) { goto error; } - if ((err = mp_read_radix(key->dp.base.y, curve->Gy, 16)) != CRYPT_OK) { goto error; } - if ((err = mp_set(key->dp.base.z, 1)) != CRYPT_OK) { goto error; } - /* cofactor & size */ - key->dp.cofactor = curve->cofactor; - key->dp.size = mp_unsigned_bin_size(key->dp.prime); - /* OID string >> unsigned long oid[16] + oidlen */ - key->dp.oidlen = 16; - if ((err = pk_oid_str_to_num(curve->OID, key->dp.oid, &key->dp.oidlen)) != CRYPT_OK) { goto error; } - /* success */ - return CRYPT_OK; - -error: - ecc_free(key); - return err; -} - -int ecc_set_dp_by_size(int size, ecc_key *key) -{ - const ltc_ecc_curve *cu = NULL; - int err = CRYPT_ERROR; - - /* for compatibility with libtomcrypt-1.17 the sizes below must match the specific curves */ - if (size <= 14) { - err = ecc_get_curve("SECP112R1", &cu); - } - else if (size <= 16) { - err = ecc_get_curve("SECP128R1", &cu); - } - else if (size <= 20) { - err = ecc_get_curve("SECP160R1", &cu); - } - else if (size <= 24) { - err = ecc_get_curve("SECP192R1", &cu); - } - else if (size <= 28) { - err = ecc_get_curve("SECP224R1", &cu); - } - else if (size <= 32) { - err = ecc_get_curve("SECP256R1", &cu); - } - else if (size <= 48) { - err = ecc_get_curve("SECP384R1", &cu); - } - else if (size <= 66) { - err = ecc_get_curve("SECP521R1", &cu); - } - - if (err == CRYPT_OK && cu != NULL) return ecc_set_dp(cu, key); - - return CRYPT_INVALID_ARG; -} - -#endif - -/* ref: $Format:%D$ */ -/* git commit: $Format:%H$ */ -/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/ecc/ecc_set_dp_internal.c b/src/ltc/pk/ecc/ecc_set_dp_internal.c deleted file mode 100644 index cf9020b..0000000 --- a/src/ltc/pk/ecc/ecc_set_dp_internal.c +++ /dev/null @@ -1,129 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - */ - -#include "tomcrypt_private.h" - -#ifdef LTC_MECC - -static int _ecc_cmp_hex_bn(const char *left_hex, void *right_bn, void *tmp_bn) -{ - if (mp_read_radix(tmp_bn, left_hex, 16) != CRYPT_OK) return 0; - if (mp_cmp(tmp_bn, right_bn) != LTC_MP_EQ) return 0; - return 1; -} - -static void _ecc_oid_lookup(ecc_key *key) -{ - void *bn; - const ltc_ecc_curve *curve; - - key->dp.oidlen = 0; - if (mp_init(&bn) != CRYPT_OK) return; - for (curve = ltc_ecc_curves; curve->prime != NULL; curve++) { - if (_ecc_cmp_hex_bn(curve->prime, key->dp.prime, bn) != 1) continue; - if (_ecc_cmp_hex_bn(curve->order, key->dp.order, bn) != 1) continue; - if (_ecc_cmp_hex_bn(curve->A, key->dp.A, bn) != 1) continue; - if (_ecc_cmp_hex_bn(curve->B, key->dp.B, bn) != 1) continue; - if (_ecc_cmp_hex_bn(curve->Gx, key->dp.base.x, bn) != 1) continue; - if (_ecc_cmp_hex_bn(curve->Gy, key->dp.base.y, bn) != 1) continue; - if (key->dp.cofactor != curve->cofactor) continue; - break; /* found */ - } - mp_clear(bn); - if (curve->prime && curve->OID) { - key->dp.oidlen = 16; /* size of key->dp.oid */ - pk_oid_str_to_num(curve->OID, key->dp.oid, &key->dp.oidlen); - } -} - -int ecc_copy_dp(const ecc_key *srckey, ecc_key *key) -{ - unsigned long i; - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(srckey != NULL); - - if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B, - &key->dp.base.x, &key->dp.base.y, &key->dp.base.z, - &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, - NULL)) != CRYPT_OK) { - return err; - } - - /* A, B, order, prime, Gx, Gy */ - if ((err = mp_copy(srckey->dp.prime, key->dp.prime )) != CRYPT_OK) { goto error; } - if ((err = mp_copy(srckey->dp.order, key->dp.order )) != CRYPT_OK) { goto error; } - if ((err = mp_copy(srckey->dp.A, key->dp.A )) != CRYPT_OK) { goto error; } - if ((err = mp_copy(srckey->dp.B, key->dp.B )) != CRYPT_OK) { goto error; } - if ((err = ltc_ecc_copy_point(&srckey->dp.base, &key->dp.base)) != CRYPT_OK) { goto error; } - /* cofactor & size */ - key->dp.cofactor = srckey->dp.cofactor; - key->dp.size = srckey->dp.size; - /* OID */ - if (srckey->dp.oidlen > 0) { - key->dp.oidlen = srckey->dp.oidlen; - for (i = 0; i < key->dp.oidlen; i++) key->dp.oid[i] = srckey->dp.oid[i]; - } - else { - _ecc_oid_lookup(key); /* try to find OID in ltc_ecc_curves */ - } - /* success */ - return CRYPT_OK; - -error: - ecc_free(key); - return err; -} - -int ecc_set_dp_from_mpis(void *a, void *b, void *prime, void *order, void *gx, void *gy, unsigned long cofactor, ecc_key *key) -{ - int err; - - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(a != NULL); - LTC_ARGCHK(b != NULL); - LTC_ARGCHK(prime != NULL); - LTC_ARGCHK(order != NULL); - LTC_ARGCHK(gx != NULL); - LTC_ARGCHK(gy != NULL); - - if ((err = mp_init_multi(&key->dp.prime, &key->dp.order, &key->dp.A, &key->dp.B, - &key->dp.base.x, &key->dp.base.y, &key->dp.base.z, - &key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, - NULL)) != CRYPT_OK) { - return err; - } - - /* A, B, order, prime, Gx, Gy */ - if ((err = mp_copy(prime, key->dp.prime )) != CRYPT_OK) { goto error; } - if ((err = mp_copy(order, key->dp.order )) != CRYPT_OK) { goto error; } - if ((err = mp_copy(a, key->dp.A )) != CRYPT_OK) { goto error; } - if ((err = mp_copy(b, key->dp.B )) != CRYPT_OK) { goto error; } - if ((err = mp_copy(gx, key->dp.base.x)) != CRYPT_OK) { goto error; } - if ((err = mp_copy(gy, key->dp.base.y)) != CRYPT_OK) { goto error; } - if ((err = mp_set(key->dp.base.z, 1)) != CRYPT_OK) { goto error; } - /* cofactor & size */ - key->dp.cofactor = cofactor; - key->dp.size = mp_unsigned_bin_size(prime); - /* try to find OID in ltc_ecc_curves */ - _ecc_oid_lookup(key); - /* success */ - return CRYPT_OK; - -error: - ecc_free(key); - return err; -} - -#endif - -/* ref: $Format:%D$ */ -/* git commit: $Format:%H$ */ -/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/ecc/ecc_sign_hash.c b/src/ltc/pk/ecc/ecc_sign_hash.c index 360807e..c7a808d 100644 --- a/src/ltc/pk/ecc/ecc_sign_hash.c +++ b/src/ltc/pk/ecc/ecc_sign_hash.c @@ -16,12 +16,27 @@ ECC Crypto, Tom St Denis */ -static int _ecc_sign_hash(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, const ecc_key *key, int sigformat) +/** + Sign a message digest + @param in The message digest to sign + @param inlen The length of the digest + @param out [out] The destination for the signature + @param outlen [in/out] The max size and resulting size of the signature + @param prng An active PRNG state + @param wprng The index of the PRNG you wish to use + @param sigformat The format of the signature to generate (ecc_signature_type) + @param recid [out] The recovery ID for this signature (optional) + @param key A private ECC key + @return CRYPT_OK if successful +*/ +int ecc_sign_hash_ex(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, ecc_signature_type sigformat, + int *recid, const ecc_key *key) { ecc_key pubkey; - void *r, *s, *e, *p; + void *r, *s, *e, *p, *b; + int v = 0; int err, max_iterations = LTC_PK_MAX_RETRIES; unsigned long pbits, pbytes, i, shift_right; unsigned char ch, buf[MAXBLOCKSIZE]; @@ -37,7 +52,7 @@ } /* init the bignums */ - if ((err = mp_init_multi(&r, &s, &e, NULL)) != CRYPT_OK) { + if ((err = mp_init_multi(&r, &s, &e, &b, NULL)) != CRYPT_OK) { return err; } @@ -63,21 +78,36 @@ /* make up a key and export the public copy */ do { - if ((err = ecc_copy_dp(key, &pubkey)) != CRYPT_OK) { goto errnokey; } + if ((err = ecc_copy_curve(key, &pubkey)) != CRYPT_OK) { goto errnokey; } if ((err = ecc_generate_key(prng, wprng, &pubkey)) != CRYPT_OK) { goto errnokey; } /* find r = x1 mod n */ if ((err = mp_mod(pubkey.pubkey.x, p, r)) != CRYPT_OK) { goto error; } + if (recid || sigformat==LTC_ECCSIG_ETH27) { + /* find recovery ID (if needed) */ + v = 0; + if (mp_copy(pubkey.pubkey.x, s) != CRYPT_OK) { goto error; } + while (mp_cmp_d(s, 0) == LTC_MP_GT && mp_cmp(s, p) != LTC_MP_LT) { + /* Compute x1 div n... this will almost never be reached for curves with order 1 */ + v += 2; + if ((err = mp_sub(s, p, s)) != CRYPT_OK) { goto error; } + } + if (mp_isodd(pubkey.pubkey.y)) v += 1; + } + if (mp_iszero(r) == LTC_MP_YES) { ecc_free(&pubkey); } else { + if ((err = rand_bn_upto(b, p, prng, wprng)) != CRYPT_OK) { goto error; } /* b = blinding value */ /* find s = (e + xr)/k */ - if ((err = mp_invmod(pubkey.k, p, pubkey.k)) != CRYPT_OK) { goto error; } /* k = 1/k */ + if ((err = mp_mulmod(pubkey.k, b, p, pubkey.k)) != CRYPT_OK) { goto error; } /* k = kb */ + if ((err = mp_invmod(pubkey.k, p, pubkey.k)) != CRYPT_OK) { goto error; } /* k = 1/kb */ if ((err = mp_mulmod(key->k, r, p, s)) != CRYPT_OK) { goto error; } /* s = xr */ - if ((err = mp_add(e, s, s)) != CRYPT_OK) { goto error; } /* s = e + xr */ - if ((err = mp_mod(s, p, s)) != CRYPT_OK) { goto error; } /* s = e + xr */ - if ((err = mp_mulmod(s, pubkey.k, p, s)) != CRYPT_OK) { goto error; } /* s = (e + xr)/k */ + if ((err = mp_mulmod(pubkey.k, s, p, s)) != CRYPT_OK) { goto error; } /* s = xr/kb */ + if ((err = mp_mulmod(pubkey.k, e, p, e)) != CRYPT_OK) { goto error; } /* e = e/kb */ + if ((err = mp_add(e, s, s)) != CRYPT_OK) { goto error; } /* s = e/kb + xr/kb */ + if ((err = mp_mulmod(s, b, p, s)) != CRYPT_OK) { goto error; } /* s = b(e/kb + xr/kb) = (e + xr)/k */ ecc_free(&pubkey); if (mp_iszero(s) == LTC_MP_NO) { break; @@ -89,8 +119,17 @@ goto errnokey; } - if (sigformat == 1) { - /* RFC7518 format */ + if (recid) *recid = v; + + if (sigformat == LTC_ECCSIG_ANSIX962) { + /* store as ASN.1 SEQUENCE { r, s -- integer } */ + err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_INTEGER, 1UL, r, + LTC_ASN1_INTEGER, 1UL, s, + LTC_ASN1_EOL, 0UL, NULL); + } + else if (sigformat == LTC_ECCSIG_RFC7518) { + /* RFC7518 format - raw (r,s) */ if (*outlen < 2*pbytes) { err = CRYPT_MEM; goto errnokey; } zeromem(out, 2*pbytes); i = mp_unsigned_bin_size(r); @@ -100,55 +139,49 @@ *outlen = 2*pbytes; err = CRYPT_OK; } + else if (sigformat == LTC_ECCSIG_ETH27) { + /* Ethereum (v,r,s) format */ + if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) { + /* Only valid for secp256k1 - OID 1.3.132.0.10 */ + err = CRYPT_ERROR; goto errnokey; + } + if (*outlen < 65) { err = CRYPT_MEM; goto errnokey; } + zeromem(out, 65); + i = mp_unsigned_bin_size(r); + if ((err = mp_to_unsigned_bin(r, out + 32 - i)) != CRYPT_OK) { goto errnokey; } + i = mp_unsigned_bin_size(s); + if ((err = mp_to_unsigned_bin(s, out + 64 - i)) != CRYPT_OK) { goto errnokey; } + out[64] = (unsigned char)(v + 27); /* Recovery ID is 27/28 for Ethereum */ + *outlen = 65; + err = CRYPT_OK; + } +#ifdef LTC_SSH + else if (sigformat == LTC_ECCSIG_RFC5656) { + /* Get identifier string */ + char name[64]; + unsigned long namelen = sizeof(name); + if ((err = ecc_ssh_ecdsa_encode_name(name, &namelen, key)) != CRYPT_OK) { goto errnokey; } + + /* Store as SSH data sequence, per RFC4251 */ + err = ssh_encode_sequence_multi(out, outlen, + LTC_SSHDATA_STRING, name, + LTC_SSHDATA_MPINT, r, + LTC_SSHDATA_MPINT, s, + LTC_SSHDATA_EOL, NULL); + } +#endif else { - /* store as ASN.1 SEQUENCE { r, s -- integer } */ - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_INTEGER, 1UL, r, - LTC_ASN1_INTEGER, 1UL, s, - LTC_ASN1_EOL, 0UL, NULL); + /* Unknown signature format */ + err = CRYPT_ERROR; + goto error; } + goto errnokey; error: ecc_free(&pubkey); errnokey: - mp_clear_multi(r, s, e, NULL); + mp_clear_multi(r, s, e, b, NULL); return err; -} - -/** - Sign a message digest - @param in The message digest to sign - @param inlen The length of the digest - @param out [out] The destination for the signature - @param outlen [in/out] The max size and resulting size of the signature - @param prng An active PRNG state - @param wprng The index of the PRNG you wish to use - @param key A private ECC key - @return CRYPT_OK if successful -*/ -int ecc_sign_hash(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, const ecc_key *key) -{ - return _ecc_sign_hash(in, inlen, out, outlen, prng, wprng, key, 0); -} - -/** - Sign a message digest in RFC7518 format - @param in The message digest to sign - @param inlen The length of the digest - @param out [out] The destination for the signature - @param outlen [in/out] The max size and resulting size of the signature - @param prng An active PRNG state - @param wprng The index of the PRNG you wish to use - @param key A private ECC key - @return CRYPT_OK if successful -*/ -int ecc_sign_hash_rfc7518(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, const ecc_key *key) -{ - return _ecc_sign_hash(in, inlen, out, outlen, prng, wprng, key, 1); } #endif diff --git a/src/ltc/pk/ecc/ecc_ssh_ecdsa_encode_name.c b/src/ltc/pk/ecc/ecc_ssh_ecdsa_encode_name.c new file mode 100644 index 0000000..048f29d --- /dev/null +++ b/src/ltc/pk/ecc/ecc_ssh_ecdsa_encode_name.c @@ -0,0 +1,70 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ +#include "tomcrypt_private.h" + +/** + @file ecc_ssh_ecdsa_encode_name.c + Curve/OID to SSH+ECDSA name string mapping per RFC5656 + Russ Williams +*/ + +/** + Curve/OID to SSH+ECDSA name string mapping + @param buffer [out] The destination for the name + @param buflen [in/out] The max size and resulting size (including terminator) of the name + @param key A public or private ECC key + @return CRYPT_OK if successful +*/ +int ecc_ssh_ecdsa_encode_name(char *buffer, unsigned long *buflen, const ecc_key *key) +{ + char oidstr[64]; + unsigned long oidlen = sizeof(oidstr); + unsigned long size = 0; + int err; + + LTC_ARGCHK(buffer != NULL); + LTC_ARGCHK(buflen != NULL); + LTC_ARGCHK(key != NULL); + + /* Get the OID of the curve */ + if ((err = ecc_get_oid_str(oidstr, &oidlen, key)) != CRYPT_OK) goto error; + + /* Check for three named curves: nistp256, nistp384, nistp521 */ + if (XSTRCMP("1.2.840.10045.3.1.7", oidstr) == 0) { + /* nistp256 - secp256r1 - OID 1.2.840.10045.3.1.7 */ + size = snprintf(buffer, *buflen, "ecdsa-sha2-nistp256"); + } + else if (XSTRCMP("1.3.132.0.34", oidstr) == 0) { + /* nistp384 - secp384r1 - OID 1.3.132.0.34 */ + size = snprintf(buffer, *buflen, "ecdsa-sha2-nistp384"); + } + else if (XSTRCMP("1.3.132.0.35", oidstr) == 0) { + /* nistp521 - secp521r1 - OID 1.3.132.0.35 */ + size = snprintf(buffer, *buflen, "ecdsa-sha2-nistp521"); + } else { + /* Otherwise we use the OID... */ + size = snprintf(buffer, *buflen, "ecdsa-sha2-%s", oidstr); + } + + /* snprintf returns size that would have been written, but limits to buflen-1 chars plus terminator */ + if (size >= *buflen) { + err = CRYPT_BUFFER_OVERFLOW; + } else { + err = CRYPT_OK; + } + *buflen = size + 1; /* the string length + NUL byte */ + +error: + return err; +} + + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/pk/ecc/ecc_verify_hash.c b/src/ltc/pk/ecc/ecc_verify_hash.c index f2a5894..ec9e7f1 100644 --- a/src/ltc/pk/ecc/ecc_verify_hash.c +++ b/src/ltc/pk/ecc/ecc_verify_hash.c @@ -16,12 +16,24 @@ ECC Crypto, Tom St Denis */ -static int _ecc_verify_hash(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key, int sigformat) +/** + Verify an ECC signature in RFC7518 format + @param sig The signature to verify + @param siglen The length of the signature (octets) + @param hash The hash (message digest) that was signed + @param hashlen The length of the hash (octets) + @param sigformat The format of the signature (ecc_signature_type) + @param stat Result of signature, 1==valid, 0==invalid + @param key The corresponding public ECC key + @return CRYPT_OK if successful (even if the signature is not valid) +*/ +int ecc_verify_hash_ex(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + ecc_signature_type sigformat, int *stat, const ecc_key *key) { - ecc_point *mG = NULL, *mQ = NULL; - void *r, *s, *v, *w, *u1, *u2, *e, *p, *m, *a, *a_plus3 = NULL, *mu = NULL, *ma = NULL; + ecc_point *mG = NULL, *mQ = NULL; + void *r, *s, *v, *w, *u1, *u2, *e, *p, *m, *a, *a_plus3; + void *mu = NULL, *ma = NULL; void *mp = NULL; int err; unsigned long pbits, pbytes, i, shift_right; @@ -55,22 +67,61 @@ goto error; } - if (sigformat == 1) { - /* RFC7518 format */ - if ((siglen % 2) == 1) { - err = CRYPT_INVALID_PACKET; - goto error; - } - i = siglen / 2; - if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, i)) != CRYPT_OK) { goto error; } - if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig+i, i)) != CRYPT_OK) { goto error; } - } - else { - /* ASN.1 format */ + if (sigformat == LTC_ECCSIG_ANSIX962) { + /* ANSI X9.62 format - ASN.1 encoded SEQUENCE{ INTEGER(r), INTEGER(s) } */ if ((err = der_decode_sequence_multi_ex(sig, siglen, LTC_DER_SEQ_SEQUENCE | LTC_DER_SEQ_STRICT, LTC_ASN1_INTEGER, 1UL, r, LTC_ASN1_INTEGER, 1UL, s, LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { goto error; } + } + else if (sigformat == LTC_ECCSIG_RFC7518) { + /* RFC7518 format - raw (r,s) */ + i = mp_unsigned_bin_size(key->dp.order); + if (siglen != (2 * i)) { + err = CRYPT_INVALID_PACKET; + goto error; + } + if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, i)) != CRYPT_OK) { goto error; } + if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig+i, i)) != CRYPT_OK) { goto error; } + } + else if (sigformat == LTC_ECCSIG_ETH27) { + /* Ethereum (v,r,s) format */ + if (pk_oid_cmp_with_ulong("1.3.132.0.10", key->dp.oid, key->dp.oidlen) != CRYPT_OK) { + /* Only valid for secp256k1 - OID 1.3.132.0.10 */ + err = CRYPT_ERROR; goto error; + } + if (siglen != 65) { /* Only secp256k1 curves use this format, so must be 65 bytes long */ + err = CRYPT_INVALID_PACKET; + goto error; + } + if ((err = mp_read_unsigned_bin(r, (unsigned char *)sig, 32)) != CRYPT_OK) { goto error; } + if ((err = mp_read_unsigned_bin(s, (unsigned char *)sig+32, 32)) != CRYPT_OK) { goto error; } + } +#ifdef LTC_SSH + else if (sigformat == LTC_ECCSIG_RFC5656) { + char name[64], name2[64]; + unsigned long namelen = sizeof(name2); + + /* Decode as SSH data sequence, per RFC4251 */ + if ((err = ssh_decode_sequence_multi(sig, siglen, + LTC_SSHDATA_STRING, name, 64, + LTC_SSHDATA_MPINT, r, + LTC_SSHDATA_MPINT, s, + LTC_SSHDATA_EOL, NULL)) != CRYPT_OK) { goto error; } + + + /* Check curve matches identifier string */ + if ((err = ecc_ssh_ecdsa_encode_name(name2, &namelen, key)) != CRYPT_OK) { goto error; } + if (XSTRCMP(name,name2) != 0) { + err = CRYPT_INVALID_ARG; + goto error; + } + } +#endif + else { + /* Unknown signature format */ + err = CRYPT_ERROR; + goto error; } /* check for zero */ @@ -153,44 +204,8 @@ if (mu != NULL) mp_clear(mu); if (ma != NULL) mp_clear(ma); mp_clear_multi(r, s, v, w, u1, u2, e, a_plus3, NULL); - if (mp != NULL) { - mp_montgomery_free(mp); - } + if (mp != NULL) mp_montgomery_free(mp); return err; -} - -/** - Verify an ECC signature - @param sig The signature to verify - @param siglen The length of the signature (octets) - @param hash The hash (message digest) that was signed - @param hashlen The length of the hash (octets) - @param stat Result of signature, 1==valid, 0==invalid - @param key The corresponding public ECC key - @return CRYPT_OK if successful (even if the signature is not valid) -*/ -int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key) -{ - return _ecc_verify_hash(sig, siglen, hash, hashlen, stat, key, 0); -} - -/** - Verify an ECC signature in RFC7518 format - @param sig The signature to verify - @param siglen The length of the signature (octets) - @param hash The hash (message digest) that was signed - @param hashlen The length of the hash (octets) - @param stat Result of signature, 1==valid, 0==invalid - @param key The corresponding public ECC key - @return CRYPT_OK if successful (even if the signature is not valid) -*/ -int ecc_verify_hash_rfc7518(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int *stat, const ecc_key *key) -{ - return _ecc_verify_hash(sig, siglen, hash, hashlen, stat, key, 1); } #endif diff --git a/src/ltc/pk/ecc/ltc_ecc_is_point_at_infinity.c b/src/ltc/pk/ecc/ltc_ecc_is_point_at_infinity.c index 85bd47a..146f9f4 100644 --- a/src/ltc/pk/ecc/ltc_ecc_is_point_at_infinity.c +++ b/src/ltc/pk/ecc/ltc_ecc_is_point_at_infinity.c @@ -44,10 +44,11 @@ /* test y^2 == x^3 */ err = CRYPT_OK; - if ((mp_cmp(x3, y2) == LTC_MP_EQ) && !mp_iszero(y2)) + if ((mp_cmp(x3, y2) == LTC_MP_EQ) && !mp_iszero(y2)) { *retval = 1; - else + } else { *retval = 0; + } cleanup: mp_clear_multi(x3, y2, NULL); diff --git a/src/ltc/pk/rsa/rsa_export.c b/src/ltc/pk/rsa/rsa_export.c index 6bd2199..43ff7c3 100644 --- a/src/ltc/pk/rsa/rsa_export.c +++ b/src/ltc/pk/rsa/rsa_export.c @@ -26,14 +26,16 @@ int rsa_export(unsigned char *out, unsigned long *outlen, int type, const rsa_key *key) { unsigned long zero=0; - int err; + int err, std; LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); LTC_ARGCHK(key != NULL); - /* type valid? */ - if (!(key->type == PK_PRIVATE) && (type == PK_PRIVATE)) { - return CRYPT_PK_INVALID_TYPE; + std = type & PK_STD; + type &= ~PK_STD; + + if (type == PK_PRIVATE && key->type != PK_PRIVATE) { + return CRYPT_PK_TYPE_MISMATCH; } if (type == PK_PRIVATE) { @@ -52,12 +54,14 @@ LTC_ASN1_INTEGER, 1UL, key->dQ, LTC_ASN1_INTEGER, 1UL, key->qP, LTC_ASN1_EOL, 0UL, NULL); - } else { + } + + if (type == PK_PUBLIC) { /* public key */ unsigned long tmplen, *ptmplen; unsigned char* tmp = NULL; - if (type & PK_STD) { + if (std) { tmplen = (unsigned long)(mp_count_bits(key->N) / 8) * 2 + 8; tmp = XMALLOC(tmplen); ptmplen = &tmplen; @@ -75,7 +79,7 @@ LTC_ASN1_INTEGER, 1UL, key->e, LTC_ASN1_EOL, 0UL, NULL); - if ((err != CRYPT_OK) || !(type & PK_STD)) { + if ((err != CRYPT_OK) || !std) { goto finish; } @@ -83,11 +87,11 @@ PKA_RSA, tmp, tmplen, LTC_ASN1_NULL, NULL, 0); finish: - if (tmp != out) - XFREE(tmp); + if (tmp != out) XFREE(tmp); return err; + } - } + return CRYPT_INVALID_ARG; } #endif /* LTC_MRSA */ diff --git a/src/ltc/pk/rsa/rsa_import.c b/src/ltc/pk/rsa/rsa_import.c index bb8793d..69f5b23 100644 --- a/src/ltc/pk/rsa/rsa_import.c +++ b/src/ltc/pk/rsa/rsa_import.c @@ -116,9 +116,9 @@ mp_clear_multi(key->d, key->e, key->N, key->dQ, key->dP, key->qP, key->p, key->q, NULL); LBL_FREE: - if (tmpbuf != NULL) - XFREE(tmpbuf); - + if (tmpbuf != NULL) { + XFREE(tmpbuf); + } return err; } diff --git a/src/ltc/pk/rsa/rsa_import_pkcs8.c b/src/ltc/pk/rsa/rsa_import_pkcs8.c index 4deab5b..04f3850 100644 --- a/src/ltc/pk/rsa/rsa_import_pkcs8.c +++ b/src/ltc/pk/rsa/rsa_import_pkcs8.c @@ -56,9 +56,9 @@ unsigned char *buf1 = NULL, *buf2 = NULL; unsigned long buf1len, buf2len; unsigned long oid[16]; - oid_st rsaoid; + const char *rsaoid; ltc_asn1_list alg_seq[2], top_seq[3]; - ltc_asn1_list alg_seq_e[2], key_seq_e[2], top_seq_e[2]; + ltc_asn1_list *l = NULL; unsigned char *decrypted = NULL; unsigned long decryptedlen; @@ -83,25 +83,11 @@ if (err != CRYPT_OK) { goto LBL_FREE2; } /* try to decode encrypted priv key */ - LTC_SET_ASN1(key_seq_e, 0, LTC_ASN1_OCTET_STRING, buf1, buf1len); - LTC_SET_ASN1(key_seq_e, 1, LTC_ASN1_INTEGER, iter, 1UL); - LTC_SET_ASN1(alg_seq_e, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, 16UL); - LTC_SET_ASN1(alg_seq_e, 1, LTC_ASN1_SEQUENCE, key_seq_e, 2UL); - LTC_SET_ASN1(top_seq_e, 0, LTC_ASN1_SEQUENCE, alg_seq_e, 2UL); - LTC_SET_ASN1(top_seq_e, 1, LTC_ASN1_OCTET_STRING, buf2, buf2len); - err=der_decode_sequence(in, inlen, top_seq_e, 2UL); - if (err == CRYPT_OK) { - LTC_UNUSED_PARAM(passwd); - LTC_UNUSED_PARAM(passwdlen); - /* XXX: TODO encrypted pkcs8 not implemented yet */ - /* 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); */ - err = CRYPT_PK_INVALID_TYPE; + if ((err = pkcs8_decode_flexi(in, inlen, passwd, passwdlen, &l)) != CRYPT_OK) { goto LBL_ERR; } - else { - decrypted = (unsigned char *)in; - decryptedlen = inlen; - } + decrypted = l->data; + decryptedlen = l->size; /* try to decode unencrypted priv key */ LTC_SET_ASN1(alg_seq, 0, LTC_ASN1_OBJECT_IDENTIFIER, oid, 16UL); @@ -113,9 +99,7 @@ if (err != CRYPT_OK) { goto LBL_ERR; } /* check alg oid */ - if ((alg_seq[0].size != rsaoid.OIDlen) || - XMEMCMP(rsaoid.OID, alg_seq[0].data, rsaoid.OIDlen * sizeof(rsaoid.OID[0])) != 0) { - err = CRYPT_PK_INVALID_TYPE; + if ((err = pk_oid_cmp_with_asn1(rsaoid, &alg_seq[0])) != CRYPT_OK) { goto LBL_ERR; } @@ -138,6 +122,7 @@ LBL_ERR: rsa_free(key); LBL_FREE2: + if (l) der_free_sequence_flexi(l); mp_clear_multi(iter, zero, NULL); XFREE(buf2); LBL_FREE1: diff --git a/src/ltc/prngs/fortuna.c b/src/ltc/prngs/fortuna.c index ab56def..908f6a5 100644 --- a/src/ltc/prngs/fortuna.c +++ b/src/ltc/prngs/fortuna.c @@ -108,11 +108,13 @@ #ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED ulong64 now = _fortuna_current_time(); - if (now == prng->u.fortuna.wd) + if (now == prng->u.fortuna.wd) { return CRYPT_OK; + } #else - if (++prng->u.fortuna.wd < LTC_FORTUNA_WD) + if (++prng->u.fortuna.wd < LTC_FORTUNA_WD) { return CRYPT_OK; + } #endif /* new K == LTC_SHA256(K || s) where s == LTC_SHA256(P0) || LTC_SHA256(P1) ... */ diff --git a/src/ltc/prngs/rng_get_bytes.c b/src/ltc/prngs/rng_get_bytes.c index 10b3cad..1a32f33 100644 --- a/src/ltc/prngs/rng_get_bytes.c +++ b/src/ltc/prngs/rng_get_bytes.c @@ -30,9 +30,12 @@ LTC_UNUSED_PARAM(callback); #ifdef LTC_TRY_URANDOM_FIRST f = fopen("/dev/urandom", "rb"); - if (f == NULL) + if (f == NULL) { + f = fopen("/dev/random", "rb"); + } +#else + f = fopen("/dev/random", "rb"); #endif /* LTC_TRY_URANDOM_FIRST */ - f = fopen("/dev/random", "rb"); if (f == NULL) { return 0; diff --git a/src/ltc/prngs/sprng.c b/src/ltc/prngs/sprng.c index a587606..085e43a 100644 --- a/src/ltc/prngs/sprng.c +++ b/src/ltc/prngs/sprng.c @@ -102,6 +102,7 @@ @param prng The PRNG to export @return CRYPT_OK if successful */ +/* NOLINTNEXTLINE(readability-non-const-parameter) - silence clang-tidy warning */ int sprng_export(unsigned char *out, unsigned long *outlen, prng_state *prng) { LTC_ARGCHK(outlen != NULL); diff --git a/src/ltc/stream/chacha/chacha_memory.c b/src/ltc/stream/chacha/chacha_memory.c new file mode 100644 index 0000000..96ecf8b --- /dev/null +++ b/src/ltc/stream/chacha/chacha_memory.c @@ -0,0 +1,51 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_CHACHA + +/** + Encrypt (or decrypt) bytes of ciphertext (or plaintext) with ChaCha + @param key The key + @param keylen The key length + @param iv The initial vector + @param ivlen The initial vector length + @param datain The plaintext (or ciphertext) + @param datalen The length of the input and output (octets) + @param rounds The number of rounds + @param dataout [out] The ciphertext (or plaintext) + @return CRYPT_OK if successful +*/ +int chacha_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, + const unsigned char *iv, unsigned long ivlen, ulong64 counter, + const unsigned char *datain, unsigned long datalen, unsigned char *dataout) +{ + chacha_state st; + int err; + + LTC_ARGCHK(ivlen <= 8 || counter < 4294967296); /* 2**32 */ + + if ((err = chacha_setup(&st, key, keylen, rounds)) != CRYPT_OK) goto WIPE_KEY; + if (ivlen > 8) { + if ((err = chacha_ivctr32(&st, iv, ivlen, counter)) != CRYPT_OK) goto WIPE_KEY; + } else { + if ((err = chacha_ivctr64(&st, iv, ivlen, counter)) != CRYPT_OK) goto WIPE_KEY; + } + err = chacha_crypt(&st, datain, datalen, dataout); +WIPE_KEY: + chacha_done(&st); + return err; +} + +#endif /* LTC_CHACHA */ + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/stream/rabbit/rabbit.c b/src/ltc/stream/rabbit/rabbit.c index 4607bc9..9d7e0df 100644 --- a/src/ltc/stream/rabbit/rabbit.c +++ b/src/ltc/stream/rabbit/rabbit.c @@ -99,8 +99,9 @@ ulong32 g[8], c_old[8], i; /* Save old counter values */ - for (i=0; i<8; i++) + for (i=0; i<8; i++) { c_old[i] = p_instance->c[i]; + } /* Calculate new counter values */ p_instance->c[0] = (ulong32)(p_instance->c[0] + 0x4D34D34D + p_instance->carry); @@ -114,8 +115,9 @@ p_instance->carry = (p_instance->c[7] < c_old[7]); /* Calculate the g-values */ - for (i=0;i<8;i++) + for (i=0;i<8;i++) { g[i] = _rabbit_g_func((ulong32)(p_instance->x[i] + p_instance->c[i])); + } /* Calculate new state values */ p_instance->x[0] = (ulong32)(g[0] + ROLc(g[7],16) + ROLc(g[6], 16)); @@ -198,12 +200,14 @@ st->master_ctx.carry = 0; /* Iterate the master context four times */ - for (i=0; i<4; i++) + for (i=0; i<4; i++) { _rabbit_next_state(&(st->master_ctx)); + } /* Modify the counters */ - for (i=0; i<8; i++) + for (i=0; i<8; i++) { st->master_ctx.c[i] ^= st->master_ctx.x[(i+4)&0x7]; + } /* Copy master instance to work instance */ for (i=0; i<8; i++) { @@ -250,13 +254,15 @@ st->work_ctx.c[7] = st->master_ctx.c[7] ^ i3; /* Copy state variables */ - for (i=0; i<8; i++) + for (i=0; i<8; i++) { st->work_ctx.x[i] = st->master_ctx.x[i]; + } st->work_ctx.carry = st->master_ctx.carry; /* Iterate the work context four times */ - for (i=0; i<4; i++) + for (i=0; i<4; i++) { _rabbit_next_state(&(st->work_ctx)); + } /* reset keystream buffer and unused count */ XMEMSET(&(st->block), 0, sizeof(st->block)); @@ -297,13 +303,12 @@ /* copy remainder to block */ for (i = inlen; i < 16; ++i) st->block[i] = buf[i]; return CRYPT_OK; - } else { - /* XOR entire buf and send to out */ - for (i = 0; i < 16; ++i) out[i] = in[i] ^ buf[i]; - inlen -= 16; - out += 16; - in += 16; } + /* XOR entire buf and send to out */ + for (i = 0; i < 16; ++i) out[i] = in[i] ^ buf[i]; + inlen -= 16; + out += 16; + in += 16; } } @@ -416,19 +421,25 @@ if ((err = rabbit_crypt(&st, (unsigned char*)pt + 5, 29, out + 5)) != CRYPT_OK) return err; if ((err = rabbit_crypt(&st, (unsigned char*)pt + 34, 5, out + 34)) != CRYPT_OK) return err; if (compare_testvector(out, ptlen, ct, ptlen, "RABBIT-TV3", 1)) return CRYPT_FAIL_TESTVECTOR; + + /* --- Test 4 (crypt in a single call) ------------------------------------ */ + + if ((err = rabbit_memory(k, sizeof(k), iv, sizeof(iv), + (unsigned char*)pt, sizeof(pt), out)) != CRYPT_OK) return err; + if (compare_testvector(out, ptlen, ct, ptlen, "RABBIT-TV4", 1)) return CRYPT_FAIL_TESTVECTOR; /* use 'out' (ciphertext) in the next decryption test */ - /* --- Test 4 (decrypt ciphertext) ------------------------------------ */ + /* --- Test 5 (decrypt ciphertext) ------------------------------------ */ /* decrypt ct (out) and compare with pt (start with only setiv() to reset) */ if ((err = rabbit_setiv(&st, iv, sizeof(iv))) != CRYPT_OK) return err; if ((err = rabbit_crypt(&st, out, ptlen, out2)) != CRYPT_OK) return err; - if (compare_testvector(out2, ptlen, pt, ptlen, "RABBIT-TV4", 1)) return CRYPT_FAIL_TESTVECTOR; - - /* --- Test 5 (wipe state, incl key) ---------------------------------- */ + if (compare_testvector(out2, ptlen, pt, ptlen, "RABBIT-TV5", 1)) return CRYPT_FAIL_TESTVECTOR; + + /* --- Test 6 (wipe state, incl key) ---------------------------------- */ if ((err = rabbit_done(&st)) != CRYPT_OK) return err; - if (compare_testvector(&st, sizeof(st), nulls, sizeof(st), "RABBIT-TV5", 1)) return CRYPT_FAIL_TESTVECTOR; + if (compare_testvector(&st, sizeof(st), nulls, sizeof(st), "RABBIT-TV6", 1)) return CRYPT_FAIL_TESTVECTOR; } diff --git a/src/ltc/stream/rabbit/rabbit_memory.c b/src/ltc/stream/rabbit/rabbit_memory.c new file mode 100644 index 0000000..b3969b6 --- /dev/null +++ b/src/ltc/stream/rabbit/rabbit_memory.c @@ -0,0 +1,50 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +/* The implementation is based on: + * chacha-ref.c version 20080118 + * Public domain from D. J. Bernstein + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_RABBIT + +/** + Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Rabbit + @param key The key + @param keylen The key length + @param iv The initial vector + @param ivlen The initial vector length + @param datain The plaintext (or ciphertext) + @param datalen The length of the input and output (octets) + @param dataout [out] The ciphertext (or plaintext) + @return CRYPT_OK if successful +*/ +int rabbit_memory(const unsigned char *key, unsigned long keylen, + const unsigned char *iv, unsigned long ivlen, + const unsigned char *datain, unsigned long datalen, + unsigned char *dataout) +{ + rabbit_state st; + int err; + + if ((err = rabbit_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY; + if ((err = rabbit_setiv(&st, iv, ivlen)) != CRYPT_OK) goto WIPE_KEY; + err = rabbit_crypt(&st, datain, datalen, dataout); +WIPE_KEY: + rabbit_done(&st); + return err; +} + +#endif /* LTC_RABBIT */ + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/stream/rc4/rc4_stream_memory.c b/src/ltc/stream/rc4/rc4_stream_memory.c new file mode 100644 index 0000000..25ce04c --- /dev/null +++ b/src/ltc/stream/rc4/rc4_stream_memory.c @@ -0,0 +1,41 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_RC4_STREAM + +/** + Encrypt (or decrypt) bytes of ciphertext (or plaintext) with RC4 + @param key The key + @param keylen The key length + @param datain The plaintext (or ciphertext) + @param datalen The length of the input and output (octets) + @param dataout [out] The ciphertext (or plaintext) + @return CRYPT_OK if successful +*/ +int rc4_stream_memory(const unsigned char *key, unsigned long keylen, + const unsigned char *datain, unsigned long datalen, + unsigned char *dataout) +{ + rc4_state st; + int err; + + if ((err = rc4_stream_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY; + err = rc4_stream_crypt(&st, datain, datalen, dataout); +WIPE_KEY: + rc4_stream_done(&st); + return err; +} + +#endif /* LTC_RC4_STREAM */ + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/stream/salsa20/salsa20_memory.c b/src/ltc/stream/salsa20/salsa20_memory.c new file mode 100644 index 0000000..ea08c70 --- /dev/null +++ b/src/ltc/stream/salsa20/salsa20_memory.c @@ -0,0 +1,45 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_SALSA20 + +/** + Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Salsa20 + @param key The key + @param keylen The key length + @param iv The initial vector + @param ivlen The initial vector length + @param datain The plaintext (or ciphertext) + @param datalen The length of the input and output (octets) + @param rounds The number of rounds + @param dataout [out] The ciphertext (or plaintext) + @return CRYPT_OK if successful +*/ +int salsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, + const unsigned char *iv, unsigned long ivlen, ulong64 counter, + const unsigned char *datain, unsigned long datalen, unsigned char *dataout) +{ + salsa20_state st; + int err; + + if ((err = salsa20_setup(&st, key, keylen, rounds)) != CRYPT_OK) goto WIPE_KEY; + if ((err = salsa20_ivctr64(&st, iv, ivlen, counter)) != CRYPT_OK) goto WIPE_KEY; + err = salsa20_crypt(&st, datain, datalen, dataout); +WIPE_KEY: + salsa20_done(&st); + return err; +} + +#endif /* LTC_SALSA20 */ + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/stream/salsa20/xsalsa20_memory.c b/src/ltc/stream/salsa20/xsalsa20_memory.c new file mode 100644 index 0000000..73386a9 --- /dev/null +++ b/src/ltc/stream/salsa20/xsalsa20_memory.c @@ -0,0 +1,44 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_XSALSA20 + +/** + Encrypt (or decrypt) bytes of ciphertext (or plaintext) with XSalsa20 + @param key The key + @param keylen The key length + @param nonce The initial vector + @param noncelen The initial vector length + @param datain The plaintext (or ciphertext) + @param datalen The length of the input and output (octets) + @param rounds The number of rounds + @param dataout [out] The ciphertext (or plaintext) + @return CRYPT_OK if successful +*/ +int xsalsa20_memory(const unsigned char *key, unsigned long keylen, unsigned long rounds, + const unsigned char *nonce, unsigned long noncelen, + const unsigned char *datain, unsigned long datalen, unsigned char *dataout) +{ + salsa20_state st; + int err; + + if ((err = xsalsa20_setup(&st, key, keylen, nonce, noncelen, rounds)) != CRYPT_OK) goto WIPE_KEY; + err = salsa20_crypt(&st, datain, datalen, dataout); +WIPE_KEY: + salsa20_done(&st); + return err; +} + +#endif /* LTC_XSALSA20 */ + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/stream/sober128/sober128_stream.c b/src/ltc/stream/sober128/sober128_stream.c index 44e0c32..952d562 100644 --- a/src/ltc/stream/sober128/sober128_stream.c +++ b/src/ltc/stream/sober128/sober128_stream.c @@ -21,12 +21,9 @@ /* don't change these... */ #define N 17 -#define FOLD N /* how many iterations of folding to do */ #define INITKONST 0x6996c53a /* value of KONST to use during key loading */ #define KEYP 15 /* where to insert key words */ #define FOLDP 4 /* where to insert non-linear feedback */ - -#define B(x,i) ((unsigned char)(((x) >> (8*i)) & 0xFF)) static ulong32 BYTE2WORD(const unsigned char *b) { @@ -68,68 +65,68 @@ /* Return a non-linear function of some parts of the register. */ -#define NLFUNC(c,z) \ +#define NLFUNC(st,z) \ { \ - t = c->R[OFF(z,0)] + c->R[OFF(z,16)]; \ + t = st->R[OFF(z,0)] + st->R[OFF(z,16)]; \ t ^= Sbox[(t >> 24) & 0xFF]; \ t = RORc(t, 8); \ - t = ((t + c->R[OFF(z,1)]) ^ c->konst) + c->R[OFF(z,6)]; \ + t = ((t + st->R[OFF(z,1)]) ^ st->konst) + st->R[OFF(z,6)]; \ t ^= Sbox[(t >> 24) & 0xFF]; \ - t = t + c->R[OFF(z,13)]; \ -} - -static ulong32 nltap(const sober128_state *c) + t = t + st->R[OFF(z,13)]; \ +} + +static ulong32 nltap(const sober128_state *st) { ulong32 t; - NLFUNC(c, 0); + NLFUNC(st, 0); return t; } /* Save the current register state */ -static void s128_savestate(sober128_state *c) +static void s128_savestate(sober128_state *st) { int i; for (i = 0; i < N; ++i) { - c->initR[i] = c->R[i]; + st->initR[i] = st->R[i]; } } /* initialise to previously saved register state */ -static void s128_reloadstate(sober128_state *c) +static void s128_reloadstate(sober128_state *st) { int i; for (i = 0; i < N; ++i) { - c->R[i] = c->initR[i]; + st->R[i] = st->initR[i]; } } /* Initialise "konst" */ -static void s128_genkonst(sober128_state *c) +static void s128_genkonst(sober128_state *st) { ulong32 newkonst; do { - cycle(c->R); - newkonst = nltap(c); + cycle(st->R); + newkonst = nltap(st); } while ((newkonst & 0xFF000000) == 0); - c->konst = newkonst; + st->konst = newkonst; } /* Load key material into the register */ #define ADDKEY(k) \ - c->R[KEYP] += (k); + st->R[KEYP] += (k); #define XORNL(nl) \ - c->R[FOLDP] ^= (nl); + st->R[FOLDP] ^= (nl); /* nonlinear diffusion of register for key */ -#define DROUND(z) STEP(c->R,z); NLFUNC(c,(z+1)); c->R[OFF((z+1),FOLDP)] ^= t; -static void s128_diffuse(sober128_state *c) +#define DROUND(z) STEP(st->R,z); NLFUNC(st,(z+1)); st->R[OFF((z+1),FOLDP)] ^= t; +static void s128_diffuse(sober128_state *st) { ulong32 t; /* relies on FOLD == N == 17! */ @@ -154,16 +151,16 @@ /** Initialize an Sober128 context (only the key) - @param c [out] The destination of the Sober128 state + @param st [out] The destination of the Sober128 state @param key The secret key @param keylen The length of the secret key (octets) @return CRYPT_OK if successful */ -int sober128_stream_setup(sober128_state *c, const unsigned char *key, unsigned long keylen) +int sober128_stream_setup(sober128_state *st, const unsigned char *key, unsigned long keylen) { ulong32 i, k; - LTC_ARGCHK(c != NULL); + LTC_ARGCHK(st != NULL); LTC_ARGCHK(key != NULL); LTC_ARGCHK(keylen > 0); @@ -173,49 +170,49 @@ } /* Register initialised to Fibonacci numbers */ - c->R[0] = 1; - c->R[1] = 1; + st->R[0] = 1; + st->R[1] = 1; for (i = 2; i < N; ++i) { - c->R[i] = c->R[i-1] + c->R[i-2]; - } - c->konst = INITKONST; + st->R[i] = st->R[i-1] + st->R[i-2]; + } + st->konst = INITKONST; for (i = 0; i < keylen; i += 4) { k = BYTE2WORD((unsigned char *)&key[i]); ADDKEY(k); - cycle(c->R); - XORNL(nltap(c)); + cycle(st->R); + XORNL(nltap(st)); } /* also fold in the length of the key */ ADDKEY(keylen); /* now diffuse */ - s128_diffuse(c); - s128_genkonst(c); - s128_savestate(c); - c->nbuf = 0; + s128_diffuse(st); + s128_genkonst(st); + s128_savestate(st); + st->nbuf = 0; return CRYPT_OK; } /** Set IV to the Sober128 state - @param c The Sober12820 state + @param st The Sober12820 state @param iv The IV data to add @param ivlen The length of the IV (must be 12) @return CRYPT_OK on success */ -int sober128_stream_setiv(sober128_state *c, const unsigned char *iv, unsigned long ivlen) +int sober128_stream_setiv(sober128_state *st, const unsigned char *iv, unsigned long ivlen) { ulong32 i, k; - LTC_ARGCHK(c != NULL); + LTC_ARGCHK(st != NULL); LTC_ARGCHK(iv != NULL); LTC_ARGCHK(ivlen > 0); /* ok we are adding an IV then... */ - s128_reloadstate(c); + s128_reloadstate(st); /* ivlen must be multiple of 4 bytes */ if ((ivlen & 3) != 0) { @@ -225,45 +222,45 @@ for (i = 0; i < ivlen; i += 4) { k = BYTE2WORD((unsigned char *)&iv[i]); ADDKEY(k); - cycle(c->R); - XORNL(nltap(c)); + cycle(st->R); + XORNL(nltap(st)); } /* also fold in the length of the key */ ADDKEY(ivlen); /* now diffuse */ - s128_diffuse(c); - c->nbuf = 0; + s128_diffuse(st); + st->nbuf = 0; return CRYPT_OK; } /* XOR pseudo-random bytes into buffer */ -#define SROUND(z) STEP(c->R,z); NLFUNC(c,(z+1)); XORWORD(t, in+(z*4), out+(z*4)); +#define SROUND(z) STEP(st->R,z); NLFUNC(st,(z+1)); XORWORD(t, in+(z*4), out+(z*4)); /** Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Sober128 - @param c The Sober128 state + @param st The Sober128 state @param in The plaintext (or ciphertext) @param inlen The length of the input (octets) @param out [out] The ciphertext (or plaintext), length inlen @return CRYPT_OK if successful */ -int sober128_stream_crypt(sober128_state *c, const unsigned char *in, unsigned long inlen, unsigned char *out) +int sober128_stream_crypt(sober128_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out) { ulong32 t; if (inlen == 0) return CRYPT_OK; /* nothing to do */ LTC_ARGCHK(out != NULL); - LTC_ARGCHK(c != NULL); + LTC_ARGCHK(st != NULL); /* handle any previously buffered bytes */ - while (c->nbuf != 0 && inlen != 0) { - *out++ = *in++ ^ (unsigned char)(c->sbuf & 0xFF); - c->sbuf >>= 8; - c->nbuf -= 8; + while (st->nbuf != 0 && inlen != 0) { + *out++ = *in++ ^ (unsigned char)(st->sbuf & 0xFF); + st->sbuf >>= 8; + st->nbuf -= 8; --inlen; } @@ -295,8 +292,8 @@ /* do small or odd size buffers the slow way */ while (4 <= inlen) { - cycle(c->R); - t = nltap(c); + cycle(st->R); + t = nltap(st); XORWORD(t, in, out); out += 4; in += 4; @@ -305,13 +302,13 @@ /* handle any trailing bytes */ if (inlen != 0) { - cycle(c->R); - c->sbuf = nltap(c); - c->nbuf = 32; - while (c->nbuf != 0 && inlen != 0) { - *out++ = *in++ ^ (unsigned char)(c->sbuf & 0xFF); - c->sbuf >>= 8; - c->nbuf -= 8; + cycle(st->R); + st->sbuf = nltap(st); + st->nbuf = 32; + while (st->nbuf != 0 && inlen != 0) { + *out++ = *in++ ^ (unsigned char)(st->sbuf & 0xFF); + st->sbuf >>= 8; + st->nbuf -= 8; --inlen; } } @@ -319,23 +316,23 @@ return CRYPT_OK; } -int sober128_stream_keystream(sober128_state *c, unsigned char *out, unsigned long outlen) +int sober128_stream_keystream(sober128_state *st, unsigned char *out, unsigned long outlen) { if (outlen == 0) return CRYPT_OK; /* nothing to do */ LTC_ARGCHK(out != NULL); XMEMSET(out, 0, outlen); - return sober128_stream_crypt(c, out, outlen, out); + return sober128_stream_crypt(st, out, outlen, out); } /** Terminate and clear Sober128 state - @param c The Sober128 state + @param st The Sober128 state @return CRYPT_OK on success */ -int sober128_stream_done(sober128_state *c) -{ - LTC_ARGCHK(c != NULL); - XMEMSET(c, 0, sizeof(sober128_state)); +int sober128_stream_done(sober128_state *st) +{ + LTC_ARGCHK(st != NULL); + XMEMSET(st, 0, sizeof(sober128_state)); return CRYPT_OK; } diff --git a/src/ltc/stream/sober128/sober128_stream_memory.c b/src/ltc/stream/sober128/sober128_stream_memory.c new file mode 100644 index 0000000..084d135 --- /dev/null +++ b/src/ltc/stream/sober128/sober128_stream_memory.c @@ -0,0 +1,45 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_SOBER128_STREAM + +/** + Encrypt (or decrypt) bytes of ciphertext (or plaintext) with SOBER128 + @param key The key + @param keylen The key length + @param iv The initial vector + @param ivlen The initial vector length + @param datain The plaintext (or ciphertext) + @param datalen The length of the input and output (octets) + @param dataout [out] The ciphertext (or plaintext) + @return CRYPT_OK if successful +*/ +int sober128_stream_memory(const unsigned char *key, unsigned long keylen, + const unsigned char *iv, unsigned long ivlen, + const unsigned char *datain, unsigned long datalen, + unsigned char *dataout) +{ + sober128_state st; + int err; + + if ((err = sober128_stream_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY; + if ((err = sober128_stream_setiv(&st, iv, ivlen)) != CRYPT_OK) goto WIPE_KEY; + err = sober128_stream_crypt(&st, datain, datalen, dataout); +WIPE_KEY: + sober128_stream_done(&st); + return err; +} + +#endif /* LTC_SOBER128_STREAM */ + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltc/stream/sosemanuk/sosemanuk.c b/src/ltc/stream/sosemanuk/sosemanuk.c index 7c5a602..1c7cc27 100644 --- a/src/ltc/stream/sosemanuk/sosemanuk.c +++ b/src/ltc/stream/sosemanuk/sosemanuk.c @@ -196,12 +196,12 @@ /* * Initialize Sosemanuk's state by providing a key. The key is an array of * 1 to 32 bytes. - * @param ss The Sosemanuk state + * @param st The Sosemanuk state * @param key Key * @param keylen Length of key in bytes * @return CRYPT_OK on success */ -int sosemanuk_setup(sosemanuk_state *ss, const unsigned char *key, unsigned long keylen) +int sosemanuk_setup(sosemanuk_state *st, const unsigned char *key, unsigned long keylen) { /* * This key schedule is actually a truncated Serpent key schedule. @@ -216,10 +216,10 @@ r2 = w ## o2; \ r3 = w ## o3; \ S(r0, r1, r2, r3, r4); \ - ss->kc[i ++] = r ## d0; \ - ss->kc[i ++] = r ## d1; \ - ss->kc[i ++] = r ## d2; \ - ss->kc[i ++] = r ## d3; \ + st->kc[i ++] = r ## d0; \ + st->kc[i ++] = r ## d1; \ + st->kc[i ++] = r ## d2; \ + st->kc[i ++] = r ## d3; \ } while (0) #define SKS0 SKS(S0, 4, 5, 6, 7, 1, 4, 2, 0) @@ -255,7 +255,7 @@ ulong32 w0, w1, w2, w3, w4, w5, w6, w7; int i = 0; - LTC_ARGCHK(ss != NULL); + LTC_ARGCHK(st != NULL); LTC_ARGCHK(key != NULL); LTC_ARGCHK(keylen > 0 && keylen <= 32); @@ -266,8 +266,9 @@ XMEMCPY(wbuf, key, keylen); if (keylen < 32) { wbuf[keylen] = 0x01; - if (keylen < 31) + if (keylen < 31) { XMEMSET(wbuf + keylen + 1, 0, 31 - keylen); + } } LOAD32L(w0, wbuf); @@ -318,11 +319,7 @@ #undef WUP0 #undef WUP1 - /* - * Initialize with a zero-value iv to ensure state is correct in the - * event user fails to call setiv(). - */ - return sosemanuk_setiv(ss, NULL, 0); + return CRYPT_OK; } @@ -332,22 +329,22 @@ * encryptions/decryptions are to be performed with the same key and * sosemanuk_done() has not been called, only sosemanuk_setiv() need be called * to set the state. - * @param ss The Sosemanuk state + * @param st The Sosemanuk state * @param iv Initialization vector * @param ivlen Length of iv in bytes * @return CRYPT_OK on success */ -int sosemanuk_setiv(sosemanuk_state *ss, const unsigned char *iv, unsigned long ivlen) +int sosemanuk_setiv(sosemanuk_state *st, const unsigned char *iv, unsigned long ivlen) { /* * The Serpent key addition step. */ #define KA(zc, x0, x1, x2, x3) do { \ - x0 ^= ss->kc[(zc)]; \ - x1 ^= ss->kc[(zc) + 1]; \ - x2 ^= ss->kc[(zc) + 2]; \ - x3 ^= ss->kc[(zc) + 3]; \ + x0 ^= st->kc[(zc)]; \ + x1 ^= st->kc[(zc) + 1]; \ + x2 ^= st->kc[(zc) + 2]; \ + x3 ^= st->kc[(zc) + 3]; \ } while (0) /* @@ -377,7 +374,7 @@ ulong32 r0, r1, r2, r3, r4; unsigned char ivtmp[16] = {0}; - LTC_ARGCHK(ss != NULL); + LTC_ARGCHK(st != NULL); LTC_ARGCHK(ivlen <= 16); LTC_ARGCHK(iv != NULL || ivlen == 0); @@ -407,10 +404,10 @@ FSS(36, S1, 1, 3, 2, 4, 0, 2, 1, 4, 3); FSS(40, S2, 2, 1, 4, 3, 0, 4, 3, 1, 0); FSS(44, S3, 4, 3, 1, 0, 2, 3, 1, 0, 2); - ss->s09 = r3; - ss->s08 = r1; - ss->s07 = r0; - ss->s06 = r2; + st->s09 = r3; + st->s08 = r1; + st->s07 = r0; + st->s06 = r2; FSS(48, S4, 3, 1, 0, 2, 4, 1, 4, 3, 2); FSS(52, S5, 1, 4, 3, 2, 0, 4, 2, 1, 3); @@ -418,10 +415,10 @@ FSS(60, S7, 4, 2, 0, 1, 3, 3, 1, 2, 4); FSS(64, S0, 3, 1, 2, 4, 0, 1, 0, 2, 3); FSS(68, S1, 1, 0, 2, 3, 4, 2, 1, 3, 0); - ss->r1 = r2; - ss->s04 = r1; - ss->r2 = r3; - ss->s05 = r0; + st->r1 = r2; + st->s04 = r1; + st->r2 = r3; + st->s05 = r0; FSS(72, S2, 2, 1, 3, 0, 4, 3, 0, 1, 4); FSS(76, S3, 3, 0, 1, 4, 2, 0, 1, 4, 2); @@ -429,12 +426,12 @@ FSS(84, S5, 1, 3, 0, 2, 4, 3, 2, 1, 0); FSS(88, S6, 3, 2, 1, 0, 4, 3, 2, 4, 1); FSF(92, S7, 3, 2, 4, 1, 0, 0, 1, 2, 3); - ss->s03 = r0; - ss->s02 = r1; - ss->s01 = r2; - ss->s00 = r3; - - ss->ptr = sizeof(ss->buf); + st->s03 = r0; + st->s02 = r1; + st->s01 = r2; + st->s00 = r3; + + st->ptr = sizeof(st->buf); #undef KA #undef FSS @@ -588,7 +585,7 @@ * Compute the next block of bits of output stream. This is equivalent * to one full rotation of the shift register. */ -static LTC_INLINE void _sosemanuk_internal(sosemanuk_state *ss) +static LTC_INLINE void _sosemanuk_internal(sosemanuk_state *st) { /* * MUL_A(x) computes alpha * x (in F_{2^32}). @@ -659,24 +656,24 @@ */ #define SRD(S, x0, x1, x2, x3, ooff) do { \ S(u0, u1, u2, u3, u4); \ - STORE32L(u ## x0 ^ v0, ss->buf + ooff); \ - STORE32L(u ## x1 ^ v1, ss->buf + ooff + 4); \ - STORE32L(u ## x2 ^ v2, ss->buf + ooff + 8); \ - STORE32L(u ## x3 ^ v3, ss->buf + ooff + 12); \ - } while (0) - - ulong32 s00 = ss->s00; - ulong32 s01 = ss->s01; - ulong32 s02 = ss->s02; - ulong32 s03 = ss->s03; - ulong32 s04 = ss->s04; - ulong32 s05 = ss->s05; - ulong32 s06 = ss->s06; - ulong32 s07 = ss->s07; - ulong32 s08 = ss->s08; - ulong32 s09 = ss->s09; - ulong32 r1 = ss->r1; - ulong32 r2 = ss->r2; + STORE32L(u ## x0 ^ v0, st->buf + ooff); \ + STORE32L(u ## x1 ^ v1, st->buf + ooff + 4); \ + STORE32L(u ## x2 ^ v2, st->buf + ooff + 8); \ + STORE32L(u ## x3 ^ v3, st->buf + ooff + 12); \ + } while (0) + + ulong32 s00 = st->s00; + ulong32 s01 = st->s01; + ulong32 s02 = st->s02; + ulong32 s03 = st->s03; + ulong32 s04 = st->s04; + ulong32 s05 = st->s05; + ulong32 s06 = st->s06; + ulong32 s07 = st->s07; + ulong32 s08 = st->s08; + ulong32 s09 = st->s09; + ulong32 r1 = st->r1; + ulong32 r2 = st->r2; ulong32 u0, u1, u2, u3, u4; ulong32 v0, v1, v2, v3; @@ -706,18 +703,18 @@ STEP(09, 00, 01, 02, 03, 04, 05, 06, 07, 08, v3, u3); SRD(S2, 2, 3, 1, 4, 64); - ss->s00 = s00; - ss->s01 = s01; - ss->s02 = s02; - ss->s03 = s03; - ss->s04 = s04; - ss->s05 = s05; - ss->s06 = s06; - ss->s07 = s07; - ss->s08 = s08; - ss->s09 = s09; - ss->r1 = r1; - ss->r2 = r2; + st->s00 = s00; + st->s01 = s01; + st->s02 = s02; + st->s03 = s03; + st->s04 = s04; + st->s05 = s05; + st->s06 = s06; + st->s07 = s07; + st->s08 = s08; + st->s09 = s09; + st->r1 = r1; + st->r2 = r2; } /* @@ -729,8 +726,9 @@ static LTC_INLINE void _xorbuf(const unsigned char *in1, const unsigned char *in2, unsigned char *out, unsigned long datalen) { - while (datalen -- > 0) + while (datalen -- > 0) { *out ++ = *in1 ++ ^ *in2 ++; + } } @@ -739,40 +737,41 @@ * buffer, combined by XOR with the stream, and the result is written * in the "out" buffer. "in" and "out" must be either equal, or * reference distinct buffers (no partial overlap is allowed). - * @param ss The Sosemanuk state + * @param st The Sosemanuk state * @param in Data in * @param inlen Length of data in bytes * @param out Data out * @return CRYPT_OK on success */ -int sosemanuk_crypt(sosemanuk_state *ss, +int sosemanuk_crypt(sosemanuk_state *st, const unsigned char *in, unsigned long inlen, unsigned char *out) { - LTC_ARGCHK(ss != NULL); + LTC_ARGCHK(st != NULL); LTC_ARGCHK(in != NULL); LTC_ARGCHK(out != NULL); - if (ss->ptr < (sizeof(ss->buf))) { - unsigned long rlen = (sizeof(ss->buf)) - ss->ptr; - - if (rlen > inlen) + if (st->ptr < (sizeof(st->buf))) { + unsigned long rlen = (sizeof(st->buf)) - st->ptr; + + if (rlen > inlen) { rlen = inlen; - _xorbuf(ss->buf + ss->ptr, in, out, rlen); + } + _xorbuf(st->buf + st->ptr, in, out, rlen); in += rlen; out += rlen; inlen -= rlen; - ss->ptr += rlen; + st->ptr += rlen; } while (inlen > 0) { - _sosemanuk_internal(ss); - if (inlen >= sizeof(ss->buf)) { - _xorbuf(ss->buf, in, out, sizeof(ss->buf)); - in += sizeof(ss->buf); - out += sizeof(ss->buf); - inlen -= sizeof(ss->buf); + _sosemanuk_internal(st); + if (inlen >= sizeof(st->buf)) { + _xorbuf(st->buf, in, out, sizeof(st->buf)); + in += sizeof(st->buf); + out += sizeof(st->buf); + inlen -= sizeof(st->buf); } else { - _xorbuf(ss->buf, in, out, inlen); - ss->ptr = inlen; + _xorbuf(st->buf, in, out, inlen); + st->ptr = inlen; inlen = 0; } } @@ -784,29 +783,29 @@ /* * Cipher operation, as a PRNG: the provided output buffer is filled with * pseudo-random bytes as output from the stream cipher. - * @param ss The Sosemanuk state + * @param st The Sosemanuk state * @param out Data out * @param outlen Length of output in bytes * @return CRYPT_OK on success */ -int sosemanuk_keystream(sosemanuk_state *ss, unsigned char *out, unsigned long outlen) +int sosemanuk_keystream(sosemanuk_state *st, unsigned char *out, unsigned long outlen) { if (outlen == 0) return CRYPT_OK; /* nothing to do */ LTC_ARGCHK(out != NULL); XMEMSET(out, 0, outlen); - return sosemanuk_crypt(ss, out, outlen, out); + return sosemanuk_crypt(st, out, outlen, out); } /* * Terminate and clear Sosemanuk key context - * @param ss The Sosemanuk state + * @param st The Sosemanuk state * @return CRYPT_OK on success */ -int sosemanuk_done(sosemanuk_state *ss) +int sosemanuk_done(sosemanuk_state *st) { - LTC_ARGCHK(ss != NULL); - XMEMSET(ss, 0, sizeof(sosemanuk_state)); + LTC_ARGCHK(st != NULL); + XMEMSET(st, 0, sizeof(sosemanuk_state)); return CRYPT_OK; } diff --git a/src/ltc/stream/sosemanuk/sosemanuk_memory.c b/src/ltc/stream/sosemanuk/sosemanuk_memory.c new file mode 100644 index 0000000..e0eae16 --- /dev/null +++ b/src/ltc/stream/sosemanuk/sosemanuk_memory.c @@ -0,0 +1,45 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +#include "tomcrypt_private.h" + +#ifdef LTC_SOSEMANUK + +/** + Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Sosemanuk + @param key The key + @param keylen The key length + @param iv The initial vector + @param ivlen The initial vector length + @param datain The plaintext (or ciphertext) + @param datalen The length of the input and output (octets) + @param dataout [out] The ciphertext (or plaintext) + @return CRYPT_OK if successful +*/ +int sosemanuk_memory(const unsigned char *key, unsigned long keylen, + const unsigned char *iv, unsigned long ivlen, + const unsigned char *datain, unsigned long datalen, + unsigned char *dataout) +{ + sosemanuk_state st; + int err; + + if ((err = sosemanuk_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY; + if ((err = sosemanuk_setiv(&st, iv, ivlen)) != CRYPT_OK) goto WIPE_KEY; + err = sosemanuk_crypt(&st, datain, datalen, dataout); +WIPE_KEY: + sosemanuk_done(&st); + return err; +} + +#endif /* LTC_SOSEMANUK */ + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltm/bn_fast_mp_invmod.c b/src/ltm/bn_fast_mp_invmod.c index 91b5bf6..be1a810 100644 --- a/src/ltm/bn_fast_mp_invmod.c +++ b/src/ltm/bn_fast_mp_invmod.c @@ -138,6 +138,14 @@ goto LBL_ERR; } } + + /* too big */ + while (mp_cmp_mag(&D, b) != MP_LT) { + if ((res = mp_sub(&D, b, &D)) != MP_OKAY) { + goto LBL_ERR; + } + } + mp_exch(&D, c); c->sign = neg; res = MP_OKAY; diff --git a/src/ltm/bn_mp_complement.c b/src/ltm/bn_mp_complement.c new file mode 100644 index 0000000..9dfddc3 --- /dev/null +++ b/src/ltm/bn_mp_complement.c @@ -0,0 +1,26 @@ +#include "tommath_private.h" +#ifdef BN_MP_COMPLEMENT_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +/* b = ~a */ +int mp_complement(const mp_int *a, mp_int *b) +{ + int res = mp_neg(a, b); + return (res == MP_OKAY) ? mp_sub_d(b, 1uL, b) : res; +} +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltm/bn_mp_radix_smap.c b/src/ltm/bn_mp_radix_smap.c index 2aa12cd..caba69f 100644 --- a/src/ltm/bn_mp_radix_smap.c +++ b/src/ltm/bn_mp_radix_smap.c @@ -14,7 +14,7 @@ */ /* chars used in radix conversions */ -const char *mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; +const char *const mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; const unsigned char mp_s_rmap_reverse[] = { 0xff, 0xff, 0xff, 0x3e, 0xff, 0xff, 0xff, 0x3f, /* ()*+,-./ */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 01234567 */ diff --git a/src/ltm/bn_mp_rand.c b/src/ltm/bn_mp_rand.c index f65d728..af017f2 100644 --- a/src/ltm/bn_mp_rand.c +++ b/src/ltm/bn_mp_rand.c @@ -22,7 +22,7 @@ #define MP_GEN_RANDOM_MAX 0xffffffffu #define MP_GEN_RANDOM_SHIFT 32 -static int s_read_arc4random(mp_digit* p) +static int s_read_arc4random(mp_digit *p) { mp_digit d = 0, msk = 0; do { @@ -40,11 +40,11 @@ #define MP_WIN_CSP #ifndef _WIN32_WINNT - #define _WIN32_WINNT 0x0400 +#define _WIN32_WINNT 0x0400 #endif #ifdef _WIN32_WCE - #define UNDER_CE - #define ARM +#define UNDER_CE +#define ARM #endif #define WIN32_LEAN_AND_MEAN @@ -59,20 +59,20 @@ hProv = 0; } -static int s_read_win_csp(mp_digit* p) +static int s_read_win_csp(mp_digit *p) { int ret = -1; if (hProv == 0) { if (!CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, (CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET)) && - !CryptAcquireContext (&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, + !CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET)) { hProv = 0; return ret; } atexit(s_cleanup_win_csp); } - if (CryptGenRandom(hProv, sizeof(*p), (void*)p) == TRUE) { + if (CryptGenRandom(hProv, sizeof(*p), (void *)p) == TRUE) { ret = MP_OKAY; } return ret; @@ -85,12 +85,12 @@ #include #include -static int s_read_getrandom(mp_digit* p) +static int s_read_getrandom(mp_digit *p) { int ret; do { ret = getrandom(p, sizeof(*p), 0); - } while((ret == -1) && (errno == EINTR)); + } while ((ret == -1) && (errno == EINTR)); if (ret == sizeof(*p)) return MP_OKAY; return -1; } @@ -108,17 +108,17 @@ #include #include -static int s_read_dev_urandom(mp_digit* p) +static int s_read_dev_urandom(mp_digit *p) { ssize_t r; int fd; do { fd = open(MP_DEV_URANDOM, O_RDONLY); - } while((fd == -1) && (errno == EINTR)); + } while ((fd == -1) && (errno == EINTR)); if (fd == -1) return -1; do { r = read(fd, p, sizeof(*p)); - } while((r == -1) && (errno == EINTR)); + } while ((r == -1) && (errno == EINTR)); close(fd); if (r != sizeof(*p)) return -1; return MP_OKAY; @@ -129,17 +129,17 @@ unsigned long (*ltm_rng)(unsigned char *out, unsigned long outlen, void (*callback)(void)); void (*ltm_rng_callback)(void); -static int s_read_ltm_rng(mp_digit* p) +static int s_read_ltm_rng(mp_digit *p) { unsigned long ret; if (ltm_rng == NULL) return -1; - ret = ltm_rng((void*)p, sizeof(*p), ltm_rng_callback); + ret = ltm_rng((void *)p, sizeof(*p), ltm_rng_callback); if (ret != sizeof(*p)) return -1; return MP_OKAY; } #endif -static int s_rand_digit(mp_digit* p) +static int s_rand_digit(mp_digit *p) { int ret = -1; diff --git a/src/ltm/bn_mp_tc_and.c b/src/ltm/bn_mp_tc_and.c new file mode 100644 index 0000000..e9fe4c6 --- /dev/null +++ b/src/ltm/bn_mp_tc_and.c @@ -0,0 +1,89 @@ +#include "tommath_private.h" +#ifdef BN_MP_TC_AND_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +/* two complement and */ +int mp_tc_and(const mp_int *a, const mp_int *b, mp_int *c) +{ + int res = MP_OKAY, bits; + int as = mp_isneg(a), bs = mp_isneg(b); + mp_int *mx = NULL, _mx, acpy, bcpy; + + if ((as != MP_NO) || (bs != MP_NO)) { + bits = MAX(mp_count_bits(a), mp_count_bits(b)); + res = mp_init_set_int(&_mx, 1uL); + if (res != MP_OKAY) { + goto end; + } + + mx = &_mx; + res = mp_mul_2d(mx, bits + 1, mx); + if (res != MP_OKAY) { + goto end; + } + + if (as != MP_NO) { + res = mp_init(&acpy); + if (res != MP_OKAY) { + goto end; + } + + res = mp_add(mx, a, &acpy); + if (res != MP_OKAY) { + mp_clear(&acpy); + goto end; + } + a = &acpy; + } + if (bs != MP_NO) { + res = mp_init(&bcpy); + if (res != MP_OKAY) { + goto end; + } + + res = mp_add(mx, b, &bcpy); + if (res != MP_OKAY) { + mp_clear(&bcpy); + goto end; + } + b = &bcpy; + } + } + + res = mp_and(a, b, c); + + if ((as != MP_NO) && (bs != MP_NO) && (res == MP_OKAY)) { + res = mp_sub(c, mx, c); + } + +end: + if (a == &acpy) { + mp_clear(&acpy); + } + + if (b == &bcpy) { + mp_clear(&bcpy); + } + + if (mx == &_mx) { + mp_clear(mx); + } + + return res; +} +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltm/bn_mp_tc_div_2d.c b/src/ltm/bn_mp_tc_div_2d.c new file mode 100644 index 0000000..ea190c3 --- /dev/null +++ b/src/ltm/bn_mp_tc_div_2d.c @@ -0,0 +1,36 @@ +#include "tommath_private.h" +#ifdef BN_MP_TC_DIV_2D_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +/* two complement right shift */ +int mp_tc_div_2d(const mp_int *a, int b, mp_int *c) +{ + int res; + if (mp_isneg(a) == MP_NO) { + return mp_div_2d(a, b, c, NULL); + } + + res = mp_add_d(a, 1uL, c); + if (res != MP_OKAY) { + return res; + } + + res = mp_div_2d(c, b, c, NULL); + return (res == MP_OKAY) ? mp_sub_d(c, 1uL, c) : res; +} +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltm/bn_mp_tc_or.c b/src/ltm/bn_mp_tc_or.c new file mode 100644 index 0000000..91b6b40 --- /dev/null +++ b/src/ltm/bn_mp_tc_or.c @@ -0,0 +1,89 @@ +#include "tommath_private.h" +#ifdef BN_MP_TC_OR_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +/* two complement or */ +int mp_tc_or(const mp_int *a, const mp_int *b, mp_int *c) +{ + int res = MP_OKAY, bits; + int as = mp_isneg(a), bs = mp_isneg(b); + mp_int *mx = NULL, _mx, acpy, bcpy; + + if ((as != MP_NO) || (bs != MP_NO)) { + bits = MAX(mp_count_bits(a), mp_count_bits(b)); + res = mp_init_set_int(&_mx, 1uL); + if (res != MP_OKAY) { + goto end; + } + + mx = &_mx; + res = mp_mul_2d(mx, bits + 1, mx); + if (res != MP_OKAY) { + goto end; + } + + if (as != MP_NO) { + res = mp_init(&acpy); + if (res != MP_OKAY) { + goto end; + } + + res = mp_add(mx, a, &acpy); + if (res != MP_OKAY) { + mp_clear(&acpy); + goto end; + } + a = &acpy; + } + if (bs != MP_NO) { + res = mp_init(&bcpy); + if (res != MP_OKAY) { + goto end; + } + + res = mp_add(mx, b, &bcpy); + if (res != MP_OKAY) { + mp_clear(&bcpy); + goto end; + } + b = &bcpy; + } + } + + res = mp_or(a, b, c); + + if (((as != MP_NO) || (bs != MP_NO)) && (res == MP_OKAY)) { + res = mp_sub(c, mx, c); + } + +end: + if (a == &acpy) { + mp_clear(&acpy); + } + + if (b == &bcpy) { + mp_clear(&bcpy); + } + + if (mx == &_mx) { + mp_clear(mx); + } + + return res; +} +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltm/bn_mp_tc_xor.c b/src/ltm/bn_mp_tc_xor.c new file mode 100644 index 0000000..50fb12d --- /dev/null +++ b/src/ltm/bn_mp_tc_xor.c @@ -0,0 +1,89 @@ +#include "tommath_private.h" +#ifdef BN_MP_TC_XOR_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + */ + +/* two complement xor */ +int mp_tc_xor(const mp_int *a, const mp_int *b, mp_int *c) +{ + int res = MP_OKAY, bits; + int as = mp_isneg(a), bs = mp_isneg(b); + mp_int *mx = NULL, _mx, acpy, bcpy; + + if ((as != MP_NO) || (bs != MP_NO)) { + bits = MAX(mp_count_bits(a), mp_count_bits(b)); + res = mp_init_set_int(&_mx, 1uL); + if (res != MP_OKAY) { + goto end; + } + + mx = &_mx; + res = mp_mul_2d(mx, bits + 1, mx); + if (res != MP_OKAY) { + goto end; + } + + if (as != MP_NO) { + res = mp_init(&acpy); + if (res != MP_OKAY) { + goto end; + } + + res = mp_add(mx, a, &acpy); + if (res != MP_OKAY) { + mp_clear(&acpy); + goto end; + } + a = &acpy; + } + if (bs != MP_NO) { + res = mp_init(&bcpy); + if (res != MP_OKAY) { + goto end; + } + + res = mp_add(mx, b, &bcpy); + if (res != MP_OKAY) { + mp_clear(&bcpy); + goto end; + } + b = &bcpy; + } + } + + res = mp_xor(a, b, c); + + if ((as != bs) && (res == MP_OKAY)) { + res = mp_sub(c, mx, c); + } + +end: + if (a == &acpy) { + mp_clear(&acpy); + } + + if (b == &bcpy) { + mp_clear(&bcpy); + } + + if (mx == &_mx) { + mp_clear(mx); + } + + return res; +} +#endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ diff --git a/src/ltm/tommath.h b/src/ltm/tommath.h index 0093d55..c6145f4 100644 --- a/src/ltm/tommath.h +++ b/src/ltm/tommath.h @@ -37,10 +37,10 @@ defined(__LP64__) || defined(_LP64) || defined(__64BIT__) # if !(defined(MP_32BIT) || defined(MP_16BIT) || defined(MP_8BIT)) # if defined(__GNUC__) - /* we support 128bit integers only via: __attribute__((mode(TI))) */ +/* we support 128bit integers only via: __attribute__((mode(TI))) */ # define MP_64BIT # else - /* otherwise we fall back to MP_32BIT even on 64bit platforms */ +/* otherwise we fall back to MP_32BIT even on 64bit platforms */ # define MP_32BIT # endif # endif @@ -295,7 +295,22 @@ /* c = a AND b */ int mp_and(const mp_int *a, const mp_int *b, mp_int *c); +/* c = a XOR b (two complement) */ +int mp_tc_xor(const mp_int *a, const mp_int *b, mp_int *c); + +/* c = a OR b (two complement) */ +int mp_tc_or(const mp_int *a, const mp_int *b, mp_int *c); + +/* c = a AND b (two complement) */ +int mp_tc_and(const mp_int *a, const mp_int *b, mp_int *c); + +/* right shift (two complement) */ +int mp_tc_div_2d(const mp_int *a, int b, mp_int *c); + /* ---> Basic arithmetic <--- */ + +/* b = ~a */ +int mp_complement(const mp_int *a, mp_int *b); /* b = -a */ int mp_neg(const mp_int *a, mp_int *b); diff --git a/src/ltm/tommath_class.h b/src/ltm/tommath_class.h index f700d66..1989054 100644 --- a/src/ltm/tommath_class.h +++ b/src/ltm/tommath_class.h @@ -27,6 +27,7 @@ # define BN_MP_CMP_D_C # define BN_MP_CMP_MAG_C # define BN_MP_CNT_LSB_C +# define BN_MP_COMPLEMENT_C # define BN_MP_COPY_C # define BN_MP_COUNT_BITS_C # define BN_MP_DIV_C @@ -116,6 +117,10 @@ # define BN_MP_SUB_C # define BN_MP_SUB_D_C # define BN_MP_SUBMOD_C +# define BN_MP_TC_AND_C +# define BN_MP_TC_DIV_2D_C +# define BN_MP_TC_OR_C +# define BN_MP_TC_XOR_C # define BN_MP_TO_SIGNED_BIN_C # define BN_MP_TO_SIGNED_BIN_N_C # define BN_MP_TO_UNSIGNED_BIN_C @@ -147,12 +152,12 @@ # define BN_MP_INIT_MULTI_C # define BN_MP_COPY_C # define BN_MP_MOD_C +# define BN_MP_ISZERO_C # define BN_MP_SET_C # define BN_MP_DIV_2_C # define BN_MP_ISODD_C # define BN_MP_SUB_C # define BN_MP_CMP_C -# define BN_MP_ISZERO_C # define BN_MP_CMP_D_C # define BN_MP_ADD_C # define BN_MP_EXCH_C @@ -239,6 +244,11 @@ #if defined(BN_MP_CNT_LSB_C) # define BN_MP_ISZERO_C +#endif + +#if defined(BN_MP_COMPLEMENT_C) +# define BN_MP_NEG_C +# define BN_MP_SUB_D_C #endif #if defined(BN_MP_COPY_C) @@ -390,7 +400,8 @@ #if defined(BN_MP_FREAD_C) # define BN_MP_ZERO_C -# define BN_MP_S_RMAP_C +# define BN_MP_S_RMAP_REVERSE_SZ_C +# define BN_MP_S_RMAP_REVERSE_C # define BN_MP_MUL_D_C # define BN_MP_ADD_D_C # define BN_MP_CMP_D_C @@ -462,9 +473,8 @@ #endif #if defined(BN_MP_INVMOD_C) -# define BN_MP_ISZERO_C +# define BN_MP_CMP_D_C # define BN_MP_ISODD_C -# define BN_MP_CMP_D_C # define BN_FAST_MP_INVMOD_C # define BN_MP_INVMOD_SLOW_C #endif @@ -541,6 +551,7 @@ #endif #if defined(BN_MP_LSHD_C) +# define BN_MP_ISZERO_C # define BN_MP_GROW_C # define BN_MP_RSHD_C #endif @@ -714,6 +725,8 @@ #if defined(BN_MP_RADIX_SMAP_C) # define BN_MP_S_RMAP_C +# define BN_MP_S_RMAP_REVERSE_C +# define BN_MP_S_RMAP_REVERSE_SZ_C #endif #if defined(BN_MP_RAND_C) @@ -724,7 +737,8 @@ #if defined(BN_MP_READ_RADIX_C) # define BN_MP_ZERO_C -# define BN_MP_S_RMAP_C +# define BN_MP_S_RMAP_REVERSE_SZ_C +# define BN_MP_S_RMAP_REVERSE_C # define BN_MP_MUL_D_C # define BN_MP_ADD_D_C # define BN_MP_ISZERO_C @@ -904,6 +918,49 @@ # define BN_MP_MOD_C #endif +#if defined(BN_MP_TC_AND_C) +# define BN_MP_ISNEG_C +# define BN_MP_COUNT_BITS_C +# define BN_MP_INIT_SET_INT_C +# define BN_MP_MUL_2D_C +# define BN_MP_INIT_C +# define BN_MP_ADD_C +# define BN_MP_CLEAR_C +# define BN_MP_AND_C +# define BN_MP_SUB_C +#endif + +#if defined(BN_MP_TC_DIV_2D_C) +# define BN_MP_ISNEG_C +# define BN_MP_DIV_2D_C +# define BN_MP_ADD_D_C +# define BN_MP_SUB_D_C +#endif + +#if defined(BN_MP_TC_OR_C) +# define BN_MP_ISNEG_C +# define BN_MP_COUNT_BITS_C +# define BN_MP_INIT_SET_INT_C +# define BN_MP_MUL_2D_C +# define BN_MP_INIT_C +# define BN_MP_ADD_C +# define BN_MP_CLEAR_C +# define BN_MP_OR_C +# define BN_MP_SUB_C +#endif + +#if defined(BN_MP_TC_XOR_C) +# define BN_MP_ISNEG_C +# define BN_MP_COUNT_BITS_C +# define BN_MP_INIT_SET_INT_C +# define BN_MP_MUL_2D_C +# define BN_MP_INIT_C +# define BN_MP_ADD_C +# define BN_MP_CLEAR_C +# define BN_MP_XOR_C +# define BN_MP_SUB_C +#endif + #if defined(BN_MP_TO_SIGNED_BIN_C) # define BN_MP_TO_UNSIGNED_BIN_C #endif diff --git a/src/ltm/tommath_private.h b/src/ltm/tommath_private.h index cf4ebc3..e9dbd5b 100644 --- a/src/ltm/tommath_private.h +++ b/src/ltm/tommath_private.h @@ -73,7 +73,7 @@ int s_mp_exptmod(const mp_int *G, const mp_int *X, const mp_int *P, mp_int *Y, int redmode); void bn_reverse(unsigned char *s, int len); -extern const char *mp_s_rmap; +extern const char *const mp_s_rmap; extern const unsigned char mp_s_rmap_reverse[]; extern const size_t mp_s_rmap_reverse_sz; diff --git a/t/auth_enc_ccm.t b/t/auth_enc_ccm.t index 1f32583..19b9902 100644 --- a/t/auth_enc_ccm.t +++ b/t/auth_enc_ccm.t @@ -1,7 +1,7 @@ use strict; use warnings; -use Test::More tests => 13; +use Test::More tests => 15; use Crypt::AuthEnc::CCM qw( ccm_encrypt_authenticate ccm_decrypt_verify ); @@ -42,6 +42,9 @@ is(unpack('H*', $tag), "9485c6d5709b43431a4f05370cc22603", "ccm_encrypt_authenticate: tag"); my $pt = ccm_decrypt_verify('AES', $key, $nonce, "header-abc", $ct, $tag); is($pt, "plain_halfplain_half", "ccm_decrypt_verify: plaintext"); + substr($tag, 0, 1) = pack("H2", "AA"); + $pt = ccm_decrypt_verify('AES', $key, $nonce, "header-abc", $ct, $tag); + is($pt, undef, "ccm_decrypt_verify: plaintext / bad tag"); } { @@ -52,4 +55,7 @@ is(unpack('H*', $tag), "9e9cba5dd4939d0d8e2687c85c5d3b89", "ccm_encrypt_authenticate: tag (no header)"); my $pt = ccm_decrypt_verify('AES', $key, $nonce, "", $ct, $tag); is($pt, "plain_halfplain_half", "ccm_decrypt_verify: plaintext (no header)"); + substr($tag, 0, 1) = pack("H2", "AA"); + $pt = ccm_decrypt_verify('AES', $key, $nonce, "", $ct, $tag); + is($pt, undef, "ccm_decrypt_verify: plaintext (no header) / bad tag"); } diff --git a/t/auth_enc_chacha20poly1305.t b/t/auth_enc_chacha20poly1305.t index b2ccfe9..94b4056 100644 --- a/t/auth_enc_chacha20poly1305.t +++ b/t/auth_enc_chacha20poly1305.t @@ -1,7 +1,7 @@ use strict; use warnings; -use Test::More tests => 12; +use Test::More tests => 14; use Crypt::AuthEnc::ChaCha20Poly1305 qw( chacha20poly1305_encrypt_authenticate chacha20poly1305_decrypt_verify ); @@ -44,6 +44,9 @@ is(unpack('H*', $tag), "d081beb3c3fe560c77f6c4e0da1d0dac", "chacha20poly1305_encrypt_authenticate: tag (no header)"); my $pt = chacha20poly1305_decrypt_verify($key, "123456789012", "", $ct, $tag); is($pt, "plain_halfplain_half", "chacha20poly1305_decrypt_verify: plaintext (no header)"); + substr($tag, 0, 1) = pack("H2", "AA"); + $pt = chacha20poly1305_decrypt_verify($key, "123456789012", "", $ct, $tag); + is($pt, undef, "chacha20poly1305_decrypt_verify: plaintext (no header) / bad tag"); } { @@ -52,4 +55,7 @@ is(unpack('H*', $tag), "e6f20b492b7bf34c914c72717af6f232", "chacha20poly1305_encrypt_authenticate: tag (no header)"); my $pt = chacha20poly1305_decrypt_verify($key, "123456789012", "adata-123456789012", $ct, $tag); is($pt, "plain_halfplain_half", "chacha20poly1305_decrypt_verify: plaintext (no header)"); + substr($tag, 0, 1) = pack("H2", "AA"); + $pt = chacha20poly1305_decrypt_verify($key, "123456789012", "adata-123456789012", $ct, $tag); + is($pt, undef, "chacha20poly1305_decrypt_verify: plaintext (no header) / bad tag"); } diff --git a/t/auth_enc_eax.t b/t/auth_enc_eax.t index ad9c110..f3c5d43 100644 --- a/t/auth_enc_eax.t +++ b/t/auth_enc_eax.t @@ -1,7 +1,7 @@ use strict; use warnings; -use Test::More tests => 12; +use Test::More tests => 14; use Crypt::AuthEnc::EAX qw( eax_encrypt_authenticate eax_decrypt_verify ); @@ -49,6 +49,9 @@ is(unpack('H*', $tag), "f83d77e5cf20979b3325266ff2fe342c", "eax_encrypt_authenticate: tag"); my $pt = eax_decrypt_verify('AES', $key, $nonce, "abc", $ct, $tag); is($pt, "plain_halfplain_half", "eax_decrypt_verify: plaintext"); + substr($tag, 0, 1) = pack("H2", "AA"); + $pt = eax_decrypt_verify('AES', $key, $nonce, "abc", $ct, $tag); + is($pt, undef, "eax_decrypt_verify: plaintext / bad tag"); } { @@ -57,4 +60,7 @@ is(unpack('H*', $tag), "e5ad22aa2ba3b30cd50eb59593364f1b", "eax_encrypt_authenticate: tag (no header)"); my $pt = eax_decrypt_verify('AES', $key, $nonce, "", $ct, $tag); is($pt, "plain_halfplain_half", "eax_decrypt_verify: plaintext (no header)"); + substr($tag, 0, 1) = pack("H2", "AA"); + $pt = eax_decrypt_verify('AES', $key, $nonce, "", $ct, $tag); + is($pt, undef, "eax_decrypt_verify: plaintext (no header) / bad tag"); } diff --git a/t/auth_enc_gcm.t b/t/auth_enc_gcm.t index 1ff09fe..36b9b5a 100644 --- a/t/auth_enc_gcm.t +++ b/t/auth_enc_gcm.t @@ -1,7 +1,7 @@ use strict; use warnings; -use Test::More tests => 12; +use Test::More tests => 14; use Crypt::AuthEnc::GCM qw( gcm_encrypt_authenticate gcm_decrypt_verify ); @@ -47,6 +47,9 @@ is(unpack('H*', $tag), "1685ba0eda059ace4aab6539980c30c0", "gcm_encrypt_authenticate: tag (no header)"); my $pt = gcm_decrypt_verify('AES', $key, "123456789012", "", $ct, $tag); is($pt, "plain_halfplain_half", "gcm_decrypt_verify: plaintext (no header)"); + substr($tag, 0, 1) = pack("H2", "AA"); + $pt = gcm_decrypt_verify('AES', $key, "123456789012", "", $ct, $tag); + is($pt, undef, "gcm_decrypt_verify: plaintext (no header) / bad tag"); } { @@ -55,4 +58,7 @@ is(unpack('H*', $tag), "d225e849d4d076cf9e85d5303450e793", "gcm_encrypt_authenticate: tag (no header)"); my $pt = gcm_decrypt_verify('AES', $key, "123456789012", "adata-123456789012", $ct, $tag); is($pt, "plain_halfplain_half", "gcm_decrypt_verify: plaintext (no header)"); + substr($tag, 0, 1) = pack("H2", "AA"); + $pt = gcm_decrypt_verify('AES', $key, "123456789012", "adata-123456789012", $ct, $tag); + is($pt, undef, "gcm_decrypt_verify: plaintext (no header) / bad tag"); } diff --git a/t/auth_enc_ocb.t b/t/auth_enc_ocb.t index df242cd..d42ee7f 100644 --- a/t/auth_enc_ocb.t +++ b/t/auth_enc_ocb.t @@ -1,7 +1,7 @@ use strict; use warnings; -use Test::More tests => 10; +use Test::More tests => 12; use Crypt::AuthEnc::OCB qw( ocb_encrypt_authenticate ocb_decrypt_verify ); @@ -35,6 +35,9 @@ is(unpack('H*', $tag), "dfdfab80aca060268c0cc467040af4f9", "ocb_encrypt_authenticate: tag (no header)"); my $pt = ocb_decrypt_verify('AES', $key, "123456789012", "", $ct, $tag); is($pt, "plain_half_12345plain_half_12345", "ocb_decrypt_verify: plaintext (no header)"); + substr($tag, 0, 1) = pack("H2", "AA"); + $pt = ocb_decrypt_verify('AES', $key, "123456789012", "", $ct, $tag); + is($pt, undef, "ocb_decrypt_verify: plaintext (no header) / bad tag"); } { @@ -43,4 +46,7 @@ is(unpack('H*', $tag), "bd7a6a0aaf24420f97bf239ea5740a40", "ocb_encrypt_authenticate: tag (no header)"); my $pt = ocb_decrypt_verify('AES', $key, "123456789012", "adata-123456789012", $ct, $tag); is($pt, "plain_half_12345plain_half_12345", "ocb_decrypt_verify: plaintext (no header)"); + substr($tag, 0, 1) = pack("H2", "AA"); + $pt = ocb_decrypt_verify('AES', $key, "123456789012", "adata-123456789012", $ct, $tag); + is($pt, undef, "ocb_decrypt_verify: plaintext (no header) / bad tag"); } diff --git a/t/cipher_des_ede.t b/t/cipher_des_ede.t index b8134db..9730400 100644 --- a/t/cipher_des_ede.t +++ b/t/cipher_des_ede.t @@ -20,7 +20,7 @@ is( Crypt::Cipher::DES_EDE->min_keysize, 16, '->min_keysize'); is( Crypt::Cipher::DES_EDE->default_rounds, 16, '->default_rounds'); -my $min_key = 'kkkkkkkkkkkkkkkkkkkkkkkk'; +my $min_key = 'kkkkkkkkkkkkkkkk'; my $max_key = 'KKKKKKKKKKKKKKKKKKKKKKKK'; is( Crypt::Cipher::blocksize('DES_EDE'), 8, 'Cipher->blocksize'); diff --git a/t/mbi_ltm/bigintpm.inc b/t/mbi_ltm/bigintpm.inc index 35efeca..013ac7f 100644 --- a/t/mbi_ltm/bigintpm.inc +++ b/t/mbi_ltm/bigintpm.inc @@ -2401,16 +2401,17 @@ +281474976710656:0:0 +281474976710656:1:0 +281474976710656:+281474976710656:281474976710656 -281474976710656:-1:281474976710656 --2:-3:-4 --1:-1:-1 --6:-6:-6 --7:-4:-8 --7:4:0 --4:7:4 -# negative argument is bitwise shorter than positive [perl #26559] -30:-3:28 -123:-1:123 +#### does not work since Math::BigInt 1.999815 +##281474976710656:-1:281474976710656 +##-2:-3:-4 +##-1:-1:-1 +##-6:-6:-6 +##-7:-4:-8 +##-7:4:0 +##-4:7:4 +### negative argument is bitwise shorter than positive [perl #26559] +##30:-3:28 +##123:-1:123 # equal arguments are treated special, so also do some test with unequal ones 0xFFFF:0xFFFF:0x0xFFFF 0xFFFFFF:0xFFFFFF:0x0xFFFFFF @@ -2438,16 +2439,17 @@ +281474976710656:0:281474976710656 +281474976710656:1:281474976710657 +281474976710656:281474976710656:281474976710656 --2:-3:-1 --1:-1:-1 --6:-6:-6 --7:4:-3 --4:7:-1 -+281474976710656:-1:-1 -30:-3:-1 -30:-4:-2 -300:-76:-68 --76:300:-68 +#### does not work since Math::BigInt 1.999815 +##-2:-3:-1 +##-1:-1:-1 +##-6:-6:-6 +##-7:4:-3 +##-4:7:-1 +##+281474976710656:-1:-1 +##30:-3:-1 +##30:-4:-2 +##300:-76:-68 +##-76:300:-68 # equal arguments are treated special, so also do some test with unequal ones 0xFFFF:0xFFFF:0x0xFFFF 0xFFFFFF:0xFFFFFF:0x0xFFFFFF @@ -2490,17 +2492,18 @@ +281474976710656:0:281474976710656 +281474976710656:1:281474976710657 +281474976710656:281474976710656:0 --2:-3:3 --1:-1:0 --6:-6:0 --7:4:-3 --4:7:-5 -4:-7:-3 --4:-7:5 -30:-3:-29 -30:-4:-30 -300:-76:-360 --76:300:-360 +#### does not work since Math::BigInt 1.999815 +##-2:-3:3 +##-1:-1:0 +##-6:-6:0 +##-7:4:-3 +##-4:7:-5 +##4:-7:-3 +##-4:-7:5 +##30:-3:-29 +##30:-4:-30 +##300:-76:-360 +##-76:300:-360 # equal arguments are treated special, so also do some test with unequal ones 0xFFFF:0xFFFF:0 0xFFFFFF:0xFFFFFF:0 diff --git a/t/mbi_ltm_bigintpm.t b/t/mbi_ltm_bigintpm.t index 976e7b1..18d528c 100644 --- a/t/mbi_ltm_bigintpm.t +++ b/t/mbi_ltm_bigintpm.t @@ -7,7 +7,7 @@ BEGIN { plan skip_all => "requires Math::BigInt 1.999712+" unless eval { require Math::BigInt && eval($Math::BigInt::VERSION) >= 1.999712 }; - plan tests => 3712 # tests in require'd file + plan tests => 3652 # tests in require'd file + 6; # tests in this file } diff --git a/t/mbi_ltm_bugs.t b/t/mbi_ltm_bugs.t index 976e7b1..18d528c 100644 --- a/t/mbi_ltm_bugs.t +++ b/t/mbi_ltm_bugs.t @@ -7,7 +7,7 @@ BEGIN { plan skip_all => "requires Math::BigInt 1.999712+" unless eval { require Math::BigInt && eval($Math::BigInt::VERSION) >= 1.999712 }; - plan tests => 3712 # tests in require'd file + plan tests => 3652 # tests in require'd file + 6; # tests in this file } diff --git a/t/pkcs8.t b/t/pkcs8.t index feb1a86..c7fdadb 100644 --- a/t/pkcs8.t +++ b/t/pkcs8.t @@ -1,6 +1,6 @@ use strict; use warnings; -use Test::More tests => 12; +use Test::More tests => 14; use Crypt::PK::RSA; use Crypt::PK::ECC; @@ -36,11 +36,10 @@ ok($rsa->is_private, "RSA is_private $f"); } -### XXX-FIXME password protected pkcs8 private keys are not supported -### for my $f (qw/pkcs8.rsa-priv-pass.der pkcs8.rsa-priv-pass.pem/) { -### $rsa->import_key("t/data/$f", "secret"); -### ok($rsa->is_private, "RSA is_private $f"); -### } +for my $f (qw/pkcs8.rsa-priv-pass.der pkcs8.rsa-priv-pass.pem/) { + $rsa->import_key("t/data/$f", "secret"); + ok($rsa->is_private, "RSA is_private $f"); +} 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/) { $ec->import_key("t/data/$f"); diff --git a/t/wycheproof/aes_gcm_test.json b/t/wycheproof/aes_gcm_test.json deleted file mode 100644 index 2173922..0000000 --- a/t/wycheproof/aes_gcm_test.json +++ /dev/null @@ -1,669 +0,0 @@ -{ - "algorithm": "AES-GCM", - "generatorVersion": "0.0a8", - "numberOfTests": 50, - "testGroups": [ - { - "ivSize": 96, - "keySize": 128, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "", - "ct": "26073cc1d851beff176384dc9896d5ff", - "iv": "028318abc1824029138141a2", - "key": "5b9604fe14eadba931b0ccf34843dab9", - "msg": "001d0c231287c1182784554ca3a21908", - "result": "valid", - "tag": "0a3ea7a5487cb5f7d70fb6c58d038554", - "tcId": 1 - }, - { - "aad": "00112233445566778899aabbccddeeff", - "comment": "", - "ct": "49d8b9783e911913d87094d1f63cc765", - "iv": "921d2507fa8007b7bd067d34", - "key": "5b9604fe14eadba931b0ccf34843dab9", - "msg": "001d0c231287c1182784554ca3a21908", - "result": "valid", - "tag": "1e348ba07cca2cf04c618cb4d43a5b92", - "tcId": 2 - }, - { - "aad": "aac39231129872a2", - "comment": "", - "ct": "eea945f3d0f98cc0fbab472a0cf24e87", - "iv": "0432bc49ac34412081288127", - "key": "aa023d0478dcb2b2312498293d9a9129", - "msg": "2035af313d1346ab00154fea78322105", - "result": "valid", - "tag": "4bb9b4812519dadf9e1232016d068133", - "tcId": 3 - }, - { - "aad": "", - "comment": "", - "ct": "ff", - "iv": "327182bee515d2b15f949477", - "key": "dc25a94c28b9d18a6468f41428fae84d", - "msg": "6f", - "result": "valid", - "tag": "62870f416e1fb63486127df9555ebcdb", - "tcId": 4 - }, - { - "aad": "", - "comment": "", - "ct": "4bd185849ab0f4d0", - "iv": "0cfe85626ce523b3204ca873", - "key": "bd6ffed2d59c492aec86368e02f6baeb", - "msg": "3c3b3a363f3a504e", - "result": "valid", - "tag": "742f379ab07b2c8c0c0eff4ce9327218", - "tcId": 5 - }, - { - "aad": "", - "comment": "", - "ct": "11afae2b91b71126e31d868e3482f907", - "iv": "5fe1b8445d7a2bce3ffd01c5", - "key": "6b21264d4ffdaa70021f6ea94f3f7729", - "msg": "6538395b746031796f5b60303261684e", - "result": "valid", - "tag": "b5133f5ce864f55641c121fb48c77e8c", - "tcId": 6 - }, - { - "aad": "", - "comment": "", - "ct": "ca741e2b8f4bfb75f3a897869664982be5e1feb1c3588621", - "iv": "1e0055ab643fe8d851f27501", - "key": "3f89802f2f430d027d9d27ab10095a1e", - "msg": "78446a4e313d634d524834637040456b793c6e4d4166544c", - "result": "valid", - "tag": "ab9a540db92381a4768ea81f08230100", - "tcId": 7 - }, - { - "aad": "15", - "comment": "", - "ct": "fa2ac3a4d15e01d64b642c4dc75f95e0", - "iv": "2071ec1a1d0ff802349fc01b", - "key": "f08afe018379b19417388302c3508983", - "msg": "566464646d4639476d5e4673653e3838", - "result": "valid", - "tag": "d95cea01fafb2c8c21cebfcbc412f87a", - "tcId": 8 - }, - { - "aad": "0b2bc21ab1fbff11e376e1a65ca2a1", - "comment": "", - "ct": "1e3373677b4615745a57ce43c0874702", - "iv": "460b321e66c90ae86f878da7", - "key": "7c7337a75c47230f579ff763e544b63b", - "msg": "4c565d4051404f4f35633a63455d7676", - "result": "valid", - "tag": "6c0314734528fe2863f2dc16f313e5ff", - "tcId": 9 - }, - { - "aad": "2eb61446950c83695522fdeb92220645", - "comment": "", - "ct": "107150b5349540a6b953c033d3ed0eec", - "iv": "787c817bf07a25ec613f4fbb", - "key": "9bd978c97f84c67e967a6dc71a9dd29a", - "msg": "4d36343f6e38716e476476394764635b", - "result": "valid", - "tag": "87ec1d4fee69de2efe606138b99a1c56", - "tcId": 10 - }, - { - "aad": "62a76634d40bb93ce8bd140e418bf88f002e1b88396511f5ddd9b099abe7b722", - "comment": "", - "ct": "8e0b9ca71471c5d509167fb138d65834", - "iv": "da22d5718083aee0b1ecf18c", - "key": "a3b604ee4889e9986b1d760779acb0da", - "msg": "453b3b34344076413d3b5b46373f725c", - "result": "valid", - "tag": "7cc68eb3039691eeea5b211c9f39244a", - "tcId": 11 - }, - { - "aad": "", - "comment": "special case", - "ct": "f62d84d649e56bc8cfedc5d74a51e2f7", - "iv": "000000000000000000000000", - "key": "00112233445566778899aabbccddeeff", - "msg": "ebd4a3e10cf6d41c50aeae007563b072", - "result": "valid", - "tag": "ffffffffffffffffffffffffffffffff", - "tcId": 12 - }, - { - "aad": "", - "comment": "special case", - "ct": "431f31e6840931fd95f94bf88296ff69", - "iv": "ffffffffffffffffffffffff", - "key": "00112233445566778899aabbccddeeff", - "msg": "d593c4d8224f1b100c35e4f6c4006543", - "result": "valid", - "tag": "00000000000000000000000000000000", - "tcId": 13 - }, - { - "aad": "", - "comment": "special case", - "ct": "d8eba6a5a03403851abc27f6e15d84c0", - "iv": "00112233445566778899aabb", - "key": "00112233445566778899aabbccddeeff", - "msg": "7fd49ba712d0d28f02ef54ed18db43f8", - "result": "valid", - "tag": "00000000000000000000000000000000", - "tcId": 14 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 64, - "keySize": 128, - "tagSize": 128, - "tests": [ - { - "aad": "aac39231129872a2", - "comment": "", - "ct": "64c36bb3b732034e3a7d04efc5197785", - "iv": "0432bc49ac344120", - "key": "aa023d0478dcb2b2312498293d9a9129", - "msg": "2035af313d1346ab00154fea78322105", - "result": "valid", - "tag": "b7d0dd70b00d65b97cfd080ff4b819d1", - "tcId": 15 - }, - { - "aad": "", - "comment": "unusual IV size", - "ct": "553763110458769a08e3c5d9", - "iv": "22117438f0762c77", - "key": "b215270c3e1055888599f1e5f6188e57", - "msg": "7675613a6c356e663d483264", - "result": "valid", - "tag": "14fed4270ed847fec690988c729672d1", - "tcId": 16 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 128, - "keySize": 128, - "tagSize": 128, - "tests": [ - { - "aad": "1a0293d8f90219058902139013908190bc490890d3ff12a3", - "comment": "", - "ct": "64069c2d58690561f27ee199e6b479b6369eec688672bde9", - "iv": "3254202d854734812398127a3d134421", - "key": "2034a82547276c83dd3212a813572bce", - "msg": "02efd2e5782312827ed5d230189a2a342b277ce048462193", - "result": "valid", - "tag": "9b7abadd6e69c1d9ec925786534f5075", - "tcId": 17 - }, - { - "aad": "", - "comment": "J0:000102030405060708090a0b0c0d0e0f", - "ct": "00078d109d92143fcd5df56721b884fac64ac7762cc09eea2a3c68e92a17bdb575f87bda18be564e", - "iv": "f95fde4a751913202aeeee32a0b55753", - "key": "00112233445566778899aabbccddeeff", - "msg": "00000000000000000000000000000000000000000000000000000000000000000000000000000000", - "result": "valid", - "tag": "152a65045fe674f97627427af5be22da", - "tcId": 18 - }, - { - "aad": "", - "comment": "J0:00000000000000000000000000000000", - "ct": "84d4c9c08b4f482861e3a9c6c35bc4d91df927374513bfd49f436bd73f325285daef4ff7e13d46a6", - "iv": "7b95b8c356810a84711d68150a1b7750", - "key": "00112233445566778899aabbccddeeff", - "msg": "00000000000000000000000000000000000000000000000000000000000000000000000000000000", - "result": "valid", - "tag": "213a3cb93855d18e69337eee66aeec07", - "tcId": 19 - }, - { - "aad": "", - "comment": "J0:ffffffffffffffffffffffffffffffff", - "ct": "948ca37a8e6649e88aeffb1c598f3607007702417ea0e0bc3c60ad5a949886de968cf53ea6462aed", - "iv": "1a552e67cdc4dc1a33b824874ebf0bed", - "key": "00112233445566778899aabbccddeeff", - "msg": "00000000000000000000000000000000000000000000000000000000000000000000000000000000", - "result": "valid", - "tag": "99b381bfa2af9751c39d1b6e86d1be6a", - "tcId": 20 - }, - { - "aad": "", - "comment": "J0:000102030405060708090a0bffffffff", - "ct": "127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4af37d0fe9af033052bd537c4ae978f60", - "iv": "99821c2dd5daecded07300f577f7aff1", - "key": "00112233445566778899aabbccddeeff", - "msg": "00000000000000000000000000000000000000000000000000000000000000000000000000000000", - "result": "valid", - "tag": "07eb2fe4a958f8434d40684899507c7c", - "tcId": 21 - }, - { - "aad": "", - "comment": "J0:000102030405060708090a0bfffffffe", - "ct": "0cf6ae47156b14dce03c8a07a2e172b1127af9b39ecdfc57bb11a2847c7c2d3d8f938f40f877e0c4", - "iv": "5e4a3900142358d1c774d8d124d8d27d", - "key": "00112233445566778899aabbccddeeff", - "msg": "00000000000000000000000000000000000000000000000000000000000000000000000000000000", - "result": "valid", - "tag": "f145c2dcaf339eede427be934357eac0", - "tcId": 22 - }, - { - "aad": "", - "comment": "special case", - "ct": "1cd5a06214235ceb044d4bad7b047312", - "iv": "ffffffffffffffffffffffffffffffff", - "key": "00112233445566778899aabbccddeeff", - "msg": "4d82639c39d3f3490ee903dd0be7afcf", - "result": "valid", - "tag": "ffffffffffffffffffffffffffffffff", - "tcId": 23 - }, - { - "aad": "", - "comment": "unusual IV size", - "ct": "d6db136eb9bd4cdaf0bd1913", - "iv": "44b926c2a249611e14475b6cfe4d7dae", - "key": "c79117e417d6d45e37a52441cbfaa47b", - "msg": "623734365060575b423b303a", - "result": "valid", - "tag": "54132cb206112184c889e1f15b83fe1f", - "tcId": 24 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 96, - "keySize": 256, - "tagSize": 128, - "tests": [ - { - "aad": "00000000ffffffff", - "comment": "", - "ct": "e27abdd2d2a53d2f136b", - "iv": "00112233445566778899aabb", - "key": "92ace3e348cd821092cd921aa3546374299ab46209691bc28b8752d17f123c20", - "msg": "00010203040506070809", - "result": "valid", - "tag": "9a4a2579529301bcfb71c78d4060f52c", - "tcId": 25 - }, - { - "aad": "aabbccddeeff", - "comment": "", - "ct": "", - "iv": "00112233445566778899aabb", - "key": "29d3a44f8723dc640239100c365423a312934ac80239212ac3df3421a2098123", - "msg": "", - "result": "valid", - "tag": "2a7d77fa526b8250cb296078926b5020", - "tcId": 26 - }, - { - "aad": "", - "comment": "", - "ct": "11", - "iv": "61de8c2f27065bb3f1235d55", - "key": "a68e06009f0c9630fed700e67d4960378cc1c86ae6cc79a6ac6a9042bf83039a", - "msg": "7a", - "result": "valid", - "tag": "05402b6d9671f281c34848fed708da8b", - "tcId": 27 - }, - { - "aad": "", - "comment": "", - "ct": "aecefdde647dbfd9", - "iv": "27f3c472caf75d6102ef5f0d", - "key": "fe65ab5e97e2adff16bb5cf71f31d09754ce2a246aeaedc5647afb54dce7b68d", - "msg": "493d425c4b3f6d51", - "result": "valid", - "tag": "02af89a1eadcb29077a26203314a7dc3", - "tcId": 28 - }, - { - "aad": "", - "comment": "", - "ct": "3ddf2af410318b26750139bf4ec13460", - "iv": "6f5485754cd243aecd2c9e43", - "key": "9c6edc8b05d7bceb455a6b915f16f117e244ff788a8c20c25fd6e0a49566d781", - "msg": "5031613a625a7348753b323c4f3f7835", - "result": "valid", - "tag": "4e4bc7648e7fb0976c4cb9c2fb3ca540", - "tcId": 29 - }, - { - "aad": "", - "comment": "", - "ct": "28bbe0d13c0f43422df882a2dc9e011b4d4fd5bc9e73c515", - "iv": "3d3f629413e65f8b6e55ec8e", - "key": "c786bc3074dad0f11efecfd24dd9f9df9fec79161d1ffd5acb18fc69fe3f3e0f", - "msg": "635569643f32513f655a6e5c423547744259725e454b616d", - "result": "valid", - "tag": "bbf623568c0bd3b94b5201af8711a8d2", - "tcId": 30 - }, - { - "aad": "45", - "comment": "", - "ct": "69c3ee7e6d4bae0d747164980d6b9b0c", - "iv": "c0dfc8a34a8c946504f882c5", - "key": "44a85d703964debdf04efe8748c7953da193ecd7ce4453673d86b96c5a1b3154", - "msg": "5a416a725a6d69746269316f6c747566", - "result": "valid", - "tag": "5221ece0acc54017981f0cdad17839b2", - "tcId": 31 - }, - { - "aad": "e19b62570639e9329109d81795f82f", - "comment": "", - "ct": "54d25cd9f65a56ee17a4cb88fbc7489d", - "iv": "6f6a2fc05f916819550e1ec0", - "key": "afc8d84a39c7b984670d42712c1e6b86aa8bf9458e20054da9aa4de627aadb69", - "msg": "45353c45306243584277445f317a355a", - "result": "valid", - "tag": "8e535d739362959710ec3ddb486e8bc2", - "tcId": 32 - }, - { - "aad": "d0468a40ded0439cdf41cfa5662181d8", - "comment": "", - "ct": "ec23144c64749090e581928d86681f3e", - "iv": "b74599e72c0309e162658615", - "key": "62f210a5cdfaa9c341c5c25ca1510fbbe611d433091d064eb62dbbcfbc95f15b", - "msg": "5a6551343a4b45685c49795b5a557449", - "result": "valid", - "tag": "ce0594dabb2b4db89460e085bc44e684", - "tcId": 33 - }, - { - "aad": "6387afe729e73233e3860de9c1a6617b37bab1eedaba9fcb53618e7eac3d8009", - "comment": "", - "ct": "fcfc653448912e1d9f5413dc92c7678b", - "iv": "74852c78eb5a479ec8620ae4", - "key": "34135b6afae2248312d68c1e28db5a4cbbfd3ccc5b4aab357353bd2541d45c59", - "msg": "34356b523f4a6d5c3237325043353e50", - "result": "valid", - "tag": "1b3acf71c1fdcfa8d61d585d10004f6d", - "tcId": 34 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 96, - "keySize": 192, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "", - "ct": "7a", - "iv": "e6bfc54c87a8e2a9b539eedb", - "key": "6c7a0c4c8515ed6c7d4eca4916bb0c8362d282afeacbe3f9", - "msg": "3c", - "result": "valid", - "tag": "106daeade85585d997e65bc4564fe125", - "tcId": 35 - }, - { - "aad": "", - "comment": "", - "ct": "16f812c2be4121b6", - "iv": "6d7baec9ed558f82aa1128cd", - "key": "35a0d16c02ec630e360e9d7243a82c76ac36668c0b59413e", - "msg": "5c513c3a74763674", - "result": "valid", - "tag": "f35ba677c07a76aea8e70a81918d35cf", - "tcId": 36 - }, - { - "aad": "", - "comment": "", - "ct": "21c250e0f28c494c944bd1345d6daa51", - "iv": "cffd1a7e8d52cf3c0c4bbb8e", - "key": "ddeb7f10bbd1b82c115165e6c1547d224e3449933ea3bfe9", - "msg": "526a3b4e7472324a5b3a5b553b4b443f", - "result": "valid", - "tag": "bbaea6623cf22328efcd21bf3656987e", - "tcId": 37 - }, - { - "aad": "", - "comment": "", - "ct": "034c477eee703e11b0f354d5912c16fd512c69cccbc22211", - "iv": "56f2119df4070d2e767861e8", - "key": "b567dc2ed4684ccfb582d80ff9b15ef520a325f0b8201cdc", - "msg": "306c3e337a60677956536e346472534679707a6552624e3f", - "result": "valid", - "tag": "d8ecc0925d544d9e2906504e4f006bea", - "tcId": 38 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 120, - "keySize": 128, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "unusual IV size", - "ct": "fde7899c326af98d67b07890", - "iv": "ca2a23ea38e82a4304021e0984800c", - "key": "a9ded7b2cbce3621d310006444ce80a3", - "msg": "665470423738756779357345", - "result": "valid", - "tag": "a545ed6b98a8b49c6588232e3d876de7", - "tcId": 39 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 160, - "keySize": 128, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "unusual IV size", - "ct": "35a123fa123571aa0d242a66", - "iv": "9ce715dd2a59b4a6bf7451c7a144b97f3e62c0a0", - "key": "1e7cc3c9116b0a2d25154e1f4ae97796", - "msg": "6c74623b3346665333613c3d", - "result": "valid", - "tag": "831a00839d8c008c9d1cb0f9a8d17255", - "tcId": 40 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 64, - "keySize": 256, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "unusual IV size", - "ct": "99add354679e324c3277506c", - "iv": "bd3b080f33229c69", - "key": "b22f6e946ab41994781b4bfff1e3f44e3daaf4d9ad788bbfa39a8caa2bc112cf", - "msg": "3b353b365e37784a5833354c", - "result": "valid", - "tag": "174fd057b60654548d833f9d6d9626e8", - "tcId": 41 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 120, - "keySize": 256, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "unusual IV size", - "ct": "992b01084e37fbe3a6cfd456", - "iv": "479e398a4805a347a5c4c16ddfe621", - "key": "0d20b8ef8b05c48f691a5dd9b49b6c0637aee0567257b6c3ce35a5823c337294", - "msg": "527979696037335d553a4767", - "result": "valid", - "tag": "1cd717548e768aa0f9932311d443bf0e", - "tcId": 42 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 128, - "keySize": 256, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "unusual IV size", - "ct": "fa93631a76a63d8096bb11f3", - "iv": "ad581e8f55a8d283f0dfebae9d0c6484", - "key": "cc4a246cb3e166c194e59f465db9adf92a8974cd472744c062728ccbae687aac", - "msg": "6b4d3e67695a79544b725046", - "result": "valid", - "tag": "fb1c7f1c3d5c0155ae18eb9bc13f7758", - "tcId": 43 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 160, - "keySize": 256, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "unusual IV size", - "ct": "b35920ed04f6a7dcf8d075a9", - "iv": "3293e555aa1cb29f839d571e811b8e84807a0031", - "key": "3a95937dd23f0997fae31a26821d99e8e338016c05ad30718f41fa04aced12f8", - "msg": "5578554a61324e4c3142483a", - "result": "valid", - "tag": "fa0c75f97432e5ef97445ccf99a90231", - "tcId": 44 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 0, - "keySize": 128, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "0 size IV is not valid", - "ct": "", - "iv": "", - "key": "b1e11d771f1ea274a3386d3879738d64", - "msg": "", - "result": "invalid", - "tag": "ec5c4805da277942d7ad6ea2d212d909", - "tcId": 45 - }, - { - "aad": "", - "comment": "0 size IV is not valid", - "ct": "8766b19d2e07b51ddfe8c85ea440ee2e", - "iv": "", - "key": "fb6c0503a1cd5219a2d5daa2e32a1520", - "msg": "446e39493339594b7247494d41344739", - "result": "invalid", - "tag": "5154e473735b026452a57060f3be5f66", - "tcId": 46 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 0, - "keySize": 192, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "0 size IV is not valid", - "ct": "", - "iv": "", - "key": "0955fa25af91994f0407ff1e2f3b09af4074c13fbba6aa0b", - "msg": "", - "result": "invalid", - "tag": "bec27fcd432323a3162cbcfc4a4ae53b", - "tcId": 47 - }, - { - "aad": "", - "comment": "0 size IV is not valid", - "ct": "a284cb5110f73225954d0a74fc24b024", - "iv": "", - "key": "0750d0d5d4df4985fcc726177e6b325e90c7e9c5f4922e43", - "msg": "793b50665c4c79647534646231496748", - "result": "invalid", - "tag": "8fe5ddb632fa6d72af5fe114c95bcaa3", - "tcId": 48 - } - ], - "type": "AES-GCM" - }, - { - "ivSize": 0, - "keySize": 256, - "tagSize": 128, - "tests": [ - { - "aad": "", - "comment": "0 size IV is not valid", - "ct": "", - "iv": "", - "key": "57163950d52c957068dc2ae7184911402887458e65ae212e54369eac864376a8", - "msg": "", - "result": "invalid", - "tag": "6397e0239baa358c90bc5a8bb69d3330", - "tcId": 49 - }, - { - "aad": "", - "comment": "0 size IV is not valid", - "ct": "77bbd2bc21a7cb2f1b62510a659db421", - "iv": "", - "key": "c242c762169e049fa7952d14123f61add08f9cd3cdb0784d7241f073244f0580", - "msg": "3669513131313f386240783b573b666f", - "result": "invalid", - "tag": "b2015bf3387d68cd2e9785d0b8bc46c8", - "tcId": 50 - } - ], - "type": "AES-GCM" - } - ] -} diff --git a/t/wycheproof/dsa_test.json b/t/wycheproof/dsa_test.json deleted file mode 100644 index a3c78c6..0000000 --- a/t/wycheproof/dsa_test.json +++ /dev/null @@ -1,1494 +0,0 @@ -{ - "algorithm" : "DSA", - "generatorVersion" : "0.0a10", - "numberOfTests" : 206, - "testGroups" : [ - { - "keyDer" : "3081f03081a806072a8648ce38040130819c024100fca682ce8e12caba26efccf7110e526db078b05edecbcd1eb4a208f3ae1617ae01f35b91a47e6df63413c5e12ed0899bcd132acd50d99151bdc43ee737592e17021500962eddcc369cba8ebb260ee6b6a126d9346e38c50240678471b27a9cf44ee91a49c5147db1a9aaf244f05a434d6486931d2d14271b9e35030b71fd73da179069b32e2935630e1c2062354d0da20a6c416e50be794ca403430002407cc153f191171bdf13b6541c07dc611debc41efa18e1df5c2e42c2612e0e936abdcc28e66ce73bdedf449b5d39ec8e509a4767907345f38710638abe5c316ce5", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIHwMIGoBgcqhkjOOAQBMIGcAkEA/KaCzo4Syrom78z3EQ5SbbB4sF7ey80etKII\n864WF64B81uRpH5t9jQTxeEu0ImbzRMqzVDZkVG9xD7nN1kuFwIVAJYu3cw2nLqO\nuyYO5rahJtk0bjjFAkBnhHGyepz0TukaScUUfbGpqvJE8FpDTWSGkx0tFCcbnjUD\nC3H9c9oXkGmzLik1Yw4cIGI1TQ2iCmxBblC+eUykA0MAAkB8wVPxkRcb3xO2VBwH\n3GEd68Qe+hjh31wuQsJhLg6Tar3MKOZs5zve30SbXTnsjlCaR2eQc0XzhxBjir5c\nMWzl\n-----END PUBLIC KEY-----", - "sha" : "SHA-1", - "type" : "DSAVer", - "key" : { - "g" : "678471b27a9cf44ee91a49c5147db1a9aaf244f05a434d6486931d2d14271b9e35030b71fd73da179069b32e2935630e1c2062354d0da20a6c416e50be794ca4", - "keyType" : "DSA public key", - "p" : "0fca682ce8e12caba26efccf7110e526db078b05edecbcd1eb4a208f3ae1617ae01f35b91a47e6df63413c5e12ed0899bcd132acd50d99151bdc43ee737592e17", - "q" : "0962eddcc369cba8ebb260ee6b6a126d9346e38c5", - "y" : "7cc153f191171bdf13b6541c07dc611debc41efa18e1df5c2e42c2612e0e936abdcc28e66ce73bdedf449b5d39ec8e509a4767907345f38710638abe5c316ce5" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "302c021426184de880bd04090541530d4951dffb2200b2cf02143c2cfef8b2c62eb572547f173fb4973ac7225207", - "tcId" : 1 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "302c02141c71bdda8343c3b8c8503772a3dca7f5ebc3e018021421c7aff53838a6ee5fdf4c4b66f7ae67241021f1", - "tcId" : 2 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "302c02142b6a1d97f043cf8ac1574af5eae78b3d01e444e80214787affc9a23bf98848ccb99a0339ef9ec7ae767e", - "tcId" : 3 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "302d02150087e0e4ae54fe9fa55abe4914380dccd7d546eee902147a075d0115c06d17194665739ab713a0734b3d36", - "tcId" : 4 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "302c02144ce8e8d2abb5f230a5fdcf6f2d8f81bb1b80ed5502140d63dbfd1100d3caf0580d93101f21e699633a56", - "tcId" : 5 - } - ] - }, - { - "keyDer" : "308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201001e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931", - "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-----", - "sha" : "SHA-224", - "type" : "DSAVer", - "key" : { - "g" : "16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde", - "keyType" : "DSA public key", - "p" : "08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", - "q" : "0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", - "y" : "1e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931" - }, - "tests" : [ - { - "comment" : "valid", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 6 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303c021c5970bf65c8cd0da10edfe80430ab0b456cefbc3913116a31f024f240021c58ca06a899c7fadedb2d31abf917f9de2e4b97d1b3c323de04fd519d", - "tcId" : 7 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303d021c00ff3f02204b98d07a502c00ff8a59a41497c38f5193e68ccc16d080021d00b51491eae8112ce48ed85896ba2632cd90fd02e83a7a17a420157b0e", - "tcId" : 8 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303d021c39fcb3f986c4fb681f2f5d4a50dd9b3b898ca8df674fbf2760666294021d00b0205076df3997e815fefa0a20e33700460ec66f53415799eb58802a", - "tcId" : 9 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303e021d008588cdf67cff154f19b9007b0b9e8149902c24771435c02c807713e5021d008595d7291eabc7bd81dc7566544e8abba81b764d4edb0dc619cf14c0", - "tcId" : 10 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303c021c521c90b08df83c821e329c7275b88648a9c16031b3acd223806a61bd021c6443cc6666b43702f1a158430ce20529883b03e02ce2d6869c62084e", - "tcId" : 11 - }, - { - "comment" : "Legacy:ASN encoding of s misses leading 0", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 12 - }, - { - "comment" : "BER:long form encoding of length", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "30813d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 13 - }, - { - "comment" : "BER:long form encoding of length", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "303e02811c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 14 - }, - { - "comment" : "BER:long form encoding of length", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02811d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 15 - }, - { - "comment" : "BER:length contains leading 0", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "3082003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 16 - }, - { - "comment" : "BER:length contains leading 0", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "303f0282001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 17 - }, - { - "comment" : "BER:length contains leading 0", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0282001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 18 - }, - { - "comment" : "BER:indefinite length", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", - "tcId" : 19 - }, - { - "comment" : "BER:prepending 0's to integer", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "303f021e00001e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 20 - }, - { - "comment" : "BER:prepending 0's to integer", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f000000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 21 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 22 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 23 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021d1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 24 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 25 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021e00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 26 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 27 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3085010000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 28 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30420285010000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 29 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0285010000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 30 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "308901000000000000003d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 31 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046028901000000000000001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 32 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd028901000000000000001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 33 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30847fffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 34 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304102847fffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 35 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02847fffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 36 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3084ffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 37 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30410284ffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 38 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0284ffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 39 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3085ffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 40 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30420285ffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 41 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0285ffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 42 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3088ffffffffffffffff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 43 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30450288ffffffffffffffff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 44 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0288ffffffffffffffff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 45 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30ff021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 46 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d02ff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 47 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd02ff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 48 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3080021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 49 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d02801e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 50 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd028000ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 51 - }, - { - "comment" : "removing sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "", - "tcId" : 52 - }, - { - "comment" : "appending 0's to sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", - "tcId" : 53 - }, - { - "comment" : "prepending 0's to sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f0000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 54 - }, - { - "comment" : "appending unused 0's", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", - "tcId" : 55 - }, - { - "comment" : "appending unused 0's", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 56 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360500", - "tcId" : 57 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 58 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360500", - "tcId" : 59 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3042498177303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 60 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30412500303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 61 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360004deadbeef", - "tcId" : 62 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30422221498177021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 63 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304122202500021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 64 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045221e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0004deadbeef021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 65 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3042021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2222498177021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 66 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd22212500021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 67 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd221f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360004deadbeef", - "tcId" : 68 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045aa00bb00cd00303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 69 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3043aa02aabb303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 70 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30452224aa00bb00cd00021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 71 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30432222aa02aabb021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 72 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2225aa00bb00cd00021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 73 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3043021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2223aa02aabb021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 74 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3080303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", - "tcId" : 75 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30412280021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 76 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2280021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", - "tcId" : 77 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3080313d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", - "tcId" : 78 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30412280031c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 79 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2280031d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", - "tcId" : 80 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "2e3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 81 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "323d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 82 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ff3d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 83 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d001c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 84 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d041c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 85 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303dff1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 86 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd001d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 87 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd041d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 88 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cdff1d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 89 - }, - { - "comment" : "dropping value of sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3000", - "tcId" : 90 - }, - { - "comment" : "using composition", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3041300102303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 91 - }, - { - "comment" : "using composition", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3041222002011e021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 92 - }, - { - "comment" : "using composition", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3041021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd2221020100021cade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 93 - }, - { - "comment" : "truncate sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862", - "tcId" : 94 - }, - { - "comment" : "truncate sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303c1c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 95 - }, - { - "comment" : "prepend empty sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f3000021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 96 - }, - { - "comment" : "append empty sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862363000", - "tcId" : 97 - }, - { - "comment" : "sequence of sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 98 - }, - { - "comment" : "truncated sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "301e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd", - "tcId" : 99 - }, - { - "comment" : "repeat element in sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "305c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 100 - }, - { - "comment" : "removing integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "301f021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 101 - }, - { - "comment" : "appending 0's to integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f021e1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0000021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 102 - }, - { - "comment" : "appending 0's to integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303f021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021f00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862360000", - "tcId" : 103 - }, - { - "comment" : "dropping value of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30210200021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 104 - }, - { - "comment" : "dropping value of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3020021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd0200", - "tcId" : 105 - }, - { - "comment" : "modify first byte of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1f41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 106 - }, - { - "comment" : "modify first byte of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d01ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 107 - }, - { - "comment" : "modify last byte of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cc021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 108 - }, - { - "comment" : "modify last byte of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786237", - "tcId" : 109 - }, - { - "comment" : "truncate integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303c021b1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 110 - }, - { - "comment" : "truncate integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303c021b41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 111 - }, - { - "comment" : "truncate integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe87862", - "tcId" : 112 - }, - { - "comment" : "leading ff in integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021dff1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 113 - }, - { - "comment" : "leading ff in integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021eff00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 114 - }, - { - "comment" : "infinity", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022090180021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 115 - }, - { - "comment" : "infinity", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3021021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd090180", - "tcId" : 116 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d00d9384b2032d060e59848f87cb4535936bc25fa77959e96d7f88e332a021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 117 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021dff634b1dd327de7125da7903ad2163ca2addc096101fd395567ee36070021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 118 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021ce1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 119 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d009cb4e22cd8218eda2586fc52de9c35d5223f69efe02c6aa9811c9f90021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 120 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021dff26c7b4dfcd2f9f1a67b707834baca6c943da05886a6169280771ccd6021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 121 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d011e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 122 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d00e1be4b8652a896fa469f01eb15246e4f330cb7bc2546e9e8c4473633021d00ade65988d237d30f9ef41dd424a4e1c8f16967cf3365813fe8786236", - "tcId" : 123 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021d0168dcf02f57b0caef7ddc183bee1ca94ee09c1a02ee4b0200a54dcb93", - "tcId" : 124 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021cf2efc2e24cbedb2fc00c236c5b2d1a430236b59b7880007f2ba2f8d9", - "tcId" : 125 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021dff5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca", - "tcId" : 126 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c0d103d1db34124d03ff3dc93a4d2e5bcfdc94a64877fff80d45d0727", - "tcId" : 127 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303d021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021dfe97230fd0a84f35108223e7c411e356b11f63e5fd11b4fdff5ab2346d", - "tcId" : 128 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303c021c1e41b479ad576905b960fe14eadb91b0ccf34843dab916173bb8c9cd021c5219a6772dc82cf0610be22bdb5b1e370e969830cc9a7ec017879dca", - "tcId" : 129 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022020100021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", - "tcId" : 130 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3006020100020100", - "tcId" : 131 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3006020100020101", - "tcId" : 132 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30060201000201f0", - "tcId" : 133 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", - "tcId" : 134 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022020100021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", - "tcId" : 135 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022020100021d0100000000000000000000000000000000000000000000000000000000", - "tcId" : 136 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082010802010002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", - "tcId" : 137 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3008020100090380fe01", - "tcId" : 138 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022020101021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", - "tcId" : 139 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3006020101020100", - "tcId" : 140 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3006020101020101", - "tcId" : 141 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30060201010201f0", - "tcId" : 142 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", - "tcId" : 143 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022020101021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", - "tcId" : 144 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022020101021d0100000000000000000000000000000000000000000000000000000000", - "tcId" : 145 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082010802010102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", - "tcId" : 146 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3008020101090380fe01", - "tcId" : 147 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30220201f0021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", - "tcId" : 148 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30060201f0020100", - "tcId" : 149 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30060201f0020101", - "tcId" : 150 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30060201f00201f0", - "tcId" : 151 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30220201f0021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", - "tcId" : 152 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30220201f0021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", - "tcId" : 153 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30220201f0021d0100000000000000000000000000000000000000000000000000000000", - "tcId" : 154 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "308201080201f002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", - "tcId" : 155 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30080201f0090380fe01", - "tcId" : 156 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", - "tcId" : 157 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020100", - "tcId" : 158 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d020101", - "tcId" : 159 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0201f0", - "tcId" : 160 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", - "tcId" : 161 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", - "tcId" : 162 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d021d0100000000000000000000000000000000000000000000000000000000", - "tcId" : 163 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", - "tcId" : 164 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d090380fe01", - "tcId" : 165 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", - "tcId" : 166 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020100", - "tcId" : 167 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e020101", - "tcId" : 168 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e0201f0", - "tcId" : 169 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", - "tcId" : 170 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", - "tcId" : 171 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e021d0100000000000000000000000000000000000000000000000000000000", - "tcId" : 172 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30820124021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", - "tcId" : 173 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3024021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e090380fe01", - "tcId" : 174 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", - "tcId" : 175 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022021d0100000000000000000000000000000000000000000000000000000000020100", - "tcId" : 176 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022021d0100000000000000000000000000000000000000000000000000000000020101", - "tcId" : 177 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3022021d01000000000000000000000000000000000000000000000000000000000201f0", - "tcId" : 178 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", - "tcId" : 179 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", - "tcId" : 180 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "303e021d0100000000000000000000000000000000000000000000000000000000021d0100000000000000000000000000000000000000000000000000000000", - "tcId" : 181 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30820124021d010000000000000000000000000000000000000000000000000000000002820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", - "tcId" : 182 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3024021d0100000000000000000000000000000000000000000000000000000000090380fe01", - "tcId" : 183 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", - "tcId" : 184 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020100", - "tcId" : 185 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667020101", - "tcId" : 186 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082010802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd6670201f0", - "tcId" : 187 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", - "tcId" : 188 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", - "tcId" : 189 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082012402820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d0100000000000000000000000000000000000000000000000000000000", - "tcId" : 190 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082020a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd66702820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", - "tcId" : 191 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082010a02820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667090380fe01", - "tcId" : 192 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3024090380fe01021dff450969597a870820211805983688387a10cd4dcc451a7f3f432a96a3", - "tcId" : 193 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3008090380fe01020100", - "tcId" : 194 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3008090380fe01020101", - "tcId" : 195 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3008090380fe010201f0", - "tcId" : 196 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", - "tcId" : 197 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3024090380fe01021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695e", - "tcId" : 198 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3024090380fe01021d0100000000000000000000000000000000000000000000000000000000", - "tcId" : 199 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3082010a090380fe0102820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", - "tcId" : 200 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "300a090380fe01090380fe01", - "tcId" : 201 - } - ] - }, - { - "keyDer" : "308203423082023506072a8648ce3804013082022802820101008f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667021d00baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d0282010016a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde0382010500028201001e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931", - "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-----", - "sha" : "SHA-256", - "type" : "DSAVer", - "key" : { - "g" : "16a65c58204850704e7502a39757040d34da3a3478c154d4e4a5c02d242ee04f96e61e4bd0904abdac8f37eeb1e09f3182d23c9043cb642f88004160edf9ca09b32076a79c32a627f2473e91879ba2c4e744bd2081544cb55b802c368d1fa83ed489e94e0fa0688e32428a5c78c478c68d0527b71c9a3abb0b0be12c44689639e7d3ce74db101a65aa2b87f64c6826db3ec72f4b5599834bb4edb02f7c90e9a496d3a55d535bebfc45d4f619f63f3dedbb873925c2f224e07731296da887ec1e4748f87efb5fdeb75484316b2232dee553ddaf02112b0d1f02da30973224fe27aeda8b9d4b2922d9ba8be39ed9e103a63c52810bc688b7e2ed4316e1ef17dbde", - "keyType" : "DSA public key", - "p" : "08f7935d9b9aae9bfabed887acf4951b6f32ec59e3baf3718e8eac4961f3efd3606e74351a9c4183339b809e7c2ae1c539ba7475b85d011adb8b47987754984695cac0e8f14b3360828a22ffa27110a3d62a993453409a0fe696c4658f84bdd20819c3709a01057b195adcd00233dba5484b6291f9d648ef883448677979cec04b434a6ac2e75e9985de23db0292fc1118c9ffa9d8181e7338db792b730d7b9e349592f68099872153915ea3d6b8b4653c633458f803b32a4c2e0f27290256e4e3f8a3b0838a1c450e4e18c1a29a37ddf5ea143de4b66ff04903ed5cf1623e158d487c608e97f211cd81dca23cb6e380765f822e342be484c05763939601cd667", - "q" : "0baf696a68578f7dfdee7fa67c977c785ef32b233bae580c0bcd5695d", - "y" : "1e77f842b1ae0fcd9929d394161d41e14614ff7507a9a31f4a1f14d22e2a627a1f4e596624883f1a5b168e9425146f22d5f6ee28757414714bb994ba1129f015d6e04a717edf9b530a5d5cab94f14631e8b4cf79aeb358cc741845553841e8ac461630e804a62f43676ba6794af66899c377b869ea612a7b9fe6611aa96be52eb8b62c979117bbbcca8a7ec1e1ffab1c7dfcfc7048700d3ae3858136e897701d7c2921b5dfef1d1f897f50d96ca1b5c2edc58cada18919e35642f0807eebfa00c99a32f4d095c3188f78ed54711be0325c4b532aeccd6540a567c327225440ea15319bde06510479a1861799e25b57decc73c036d75a0702bd373ca231349931" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "54657374", - "result" : "valid", - "sig" : "303c021c50ab097237324f8fc734140e23c11d515939277a182712f7914986a1021c24a4522acf7885deae134d25b679fea410f8c24afdb140c909522d14", - "tcId" : 202 - }, - { - "comment" : "random signature", - "message" : "54657374", - "result" : "valid", - "sig" : "303d021c79bacf75ffe84e6a2159e0152d568781f7fd41e0a14c1200b21b21b7021d00962f1d0404b0318b0e6eee0b95d22d94eb36b51b6f8884e70b973812", - "tcId" : 203 - }, - { - "comment" : "random signature", - "message" : "54657374", - "result" : "valid", - "sig" : "303e021d008dea6005d17a3eaad584bed597ff29ca1c91833e1d93a398640a05c9021d00a871f0d68ac9ff53e4714555c8cdc498ccd28ec4924aaf42a65c0db9", - "tcId" : 204 - }, - { - "comment" : "random signature", - "message" : "54657374", - "result" : "valid", - "sig" : "303d021d00b5e1ee34d2b07ec24262238d3ef3f691827780baaa2107be3131cfb9021c2bdbe0d5cffee75072c5c4c358a7b6dac45e763555430739b593c2fe", - "tcId" : 205 - }, - { - "comment" : "random signature", - "message" : "54657374", - "result" : "valid", - "sig" : "303d021d00adf128e21e06d3d22c819904f0be159bdedfbf21fc22843255762b07021c646f551ee7e3455f8c3299e9568c581f81d31bc1d1a0373407b18dc6", - "tcId" : 206 - } - ] - } - ] -} diff --git a/t/wycheproof/ecdh_webcrypto_test.json b/t/wycheproof/ecdh_webcrypto_test.json deleted file mode 100644 index 87cebc9..0000000 --- a/t/wycheproof/ecdh_webcrypto_test.json +++ /dev/null @@ -1,1300 +0,0 @@ -{ - "algorithm" : "ECDH", - "generatorVersion" : "0.0a11", - "numberOfTests" : 57, - "testGroups" : [ - { - "type" : "ECDHComp", - "tests" : [ - { - "comment" : "normal case", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "5af492c029f055e700150fdf074bbc3b376b3286a0e1a4feb267960bbb0a148e", - "tcId" : 1, - "private" : { - "crv" : "P-256", - "d" : "TEKm94QkBRnu2W9CQgBCYrabdRQ436q7mBfeypPoHIc", - "ext" : "true", - "kty" : "EC", - "x" : "WyqqM6oDsZdjGfMIvj6sGGkXhyB-6RPNgCNYBbHz7F4", - "y" : "h5IjGBoRRdQKxucb6rv-EVZwIqZv2XRLi3_rvK-dxSI" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "yISNawZIGrhSC2XREZbJe30drwGpT6gWmocmXgm12So", - "y" : "0dac4Rq3NgDALW02mtKKwd0hPoqR-H3kK7FohxSMzkc" - } - }, - { - "comment" : "normal case", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "7ee811a7cc92be6c5d6879d6399c467675c34c1f9c2261e1df4ad7d4dc4de93d192a5020feeb61712e4401cf369700ff", - "tcId" : 2, - "private" : { - "crv" : "P-384", - "d" : "XPNFF3sB7GKqQwJJE7JfjRq-9B92mXqz1v1fWh6-uQ3mnecJw5JwbbWAPsI7NhAt", - "ext" : "true", - "kty" : "EC", - "x" : "ymo32uc2KIgSIck9N6h11vy4zGzXuOnw0-jvC3h_IqlOvEJ9gUXeK8XUkn7xBGvh", - "y" : "D0e3Bgt0wn4KwyJJDKwHqV6FB7xe3afuTXKBEV7hpj_rqFQqZZsrdz8TJUqjtD5Z" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "y5F1hPIu6IHPMTVd_4jagQ4S6NqKEWrV4bF5Rr04FfqRRqWWoSBNBQVhQuK_OFur", - "y" : "0nxF1hhtRBy9qvLFZka-r4cSfZyb86ICsdIIIJqJ6My4vouAeLucCI5TTuJqTEQ-" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "0000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 4, - "private" : { - "crv" : "P-256", - "d" : "V3__4ATEMyhY8ARpZPC-Tl_iZS6vzyYWdDu8Y6sBg3k", - "ext" : "true", - "kty" : "EC", - "x" : "I7gdSwHAhxe3tQ8izFrv0PsGLoIA2Mskr1QoWPE4Bi8", - "y" : "CNN26pJpxC4OZYPeFbigQYBnb4r1OrUsf1l2wz5uIuc" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "Z_TxDYzhUV5lUiOTCuRbbYQwp1KNzMBZ7L9_8NSZzpQ", - "y" : "PVLyBeRI9xmjw-s9oUkWNH4Vurydaps86bzHPismQWg" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000", - "tcId" : 5, - "private" : { - "crv" : "P-256", - "d" : "FY8M1ObgQ6QJpszBP4-649T22PFI17GyzzxJeMqUGng", - "ext" : "true", - "kty" : "EC", - "x" : "SjM1g2j5_2Np3xDBYW_i7BsxFkFO2cl5OGRVGhfrHBg", - "y" : "AvVlj5C266JG6T5Ohhu2idHQcrIjuJsbvRApRAhXQvk" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "3wOehQMUhX2O2yc_8yPZ0mb5l0jvPn_PUsqRbOs2PwM", - "y" : "zZycmVJCIQlJaHWyUSEz7taOqXI4v_0UEJQz2sSp-Nk" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001", - "tcId" : 6, - "private" : { - "crv" : "P-256", - "d" : "GQkQmmjEUaDxUMYyhE-cMN5WPQXe4YHR-Sd4b_bkD_0", - "ext" : "true", - "kty" : "EC", - "x" : "cTTJ44nkV_b62xyriRhErvgE0Ul0WY8594uT18wY2eI", - "y" : "lCFFPIrYYgK2qZCzIb8Mp6dT0-8UMEmc_HOU_R75coA" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "JdqrnBMBeqmPeE1x15Q8XnaPABJIH7yncU43kF2FTwY", - "y" : "WPiNVKFUExBWMeKqfay65gysGzyd4XOfJ6nCv9I0oOw" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", - "tcId" : 7, - "private" : { - "crv" : "P-256", - "d" : "00-WuNQUk2E8yO_NxDljiGGOdWRVGL1sGd7JOOkPnOM", - "ext" : "true", - "kty" : "EC", - "x" : "2f8GYyCcsHFQo0hGPSu8FbTOIychG7d-b7d8iEch_-0", - "y" : "yCsGEV5BgWq-Y-7zt21qghpZVy9P3cMS09tC2DrO0QA" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "gGBkbTWiSK0C0KjZBpUn0G6pwplS9Y2mCQusShezSx4", - "y" : "vmXp2Bh6znrY0dNYS07MxpmpV-4yfzwy6rrC3UlZetM" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "8000000000000000000000000000000000000000000000000000000000000004", - "tcId" : 8, - "private" : { - "crv" : "P-256", - "d" : "Wj2UZ9nw8WmL8VSGJ4L0NhUMjBA9iMqrImBT1zA_pcA", - "ext" : "true", - "kty" : "EC", - "x" : "LXoHReBeihHt83forxIbehHNNH1VLhs1eYvKUGkKrY0", - "y" : "uTDrHtcNtyhy-Y_6_Mc-t5e2-iOvqNWgJw7sC7AozgU" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "q8GaAT7v2FB6SxuTPVFVM8y_rSoSnqiwpxZ_Hu8ObQI", - "y" : "nHZLhfynaWPPWAFvx1K9UdzX8z_UCU5d55A5SX550CY" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff", - "tcId" : 9, - "private" : { - "crv" : "P-256", - "d" : "X3n2bE6P1Vjxqea9LDFYrzhmrpNC6ec_AsYE0efWmbw", - "ext" : "true", - "kty" : "EC", - "x" : "g35sLwD15_TqXQUHszyc5c_N9hsfLqsFp9mtBjSmqSM", - "y" : "-UvQSiSIpJkLPEKy33MbvcJc9nENkv4QExgUBQB4HtE" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "nhtwFE914Csb_UApjwESl2tZvPbtRJHPqISi4x2-y5o", - "y" : "SQBYhqVRzPNiih8_eNfCqRRQGc-SxYmdMbJwoisd2Fs" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", - "tcId" : 10, - "private" : { - "crv" : "P-256", - "d" : "GYByC6k5US0eYVKwWavZdx7F-OpKAbWiO-ZpsDU4Qr0", - "ext" : "true", - "kty" : "EC", - "x" : "lGtMphj7_zUNmVfFHAcS9z9OCSweJ04l6DkWSLBszHE", - "y" : "vGESfIjmiAXDa9zDhdHfBwBWWBxHmY86bc9TKCBSlng" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "cnH8JXOPBGBW9uU-OZgIAev9HXPPlGwxcmFUHywlTyc", - "y" : "0lOb82YIt-6rvGd7oXZs_1mIcCj7D8oKEUZX5k105qg" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 11, - "private" : { - "crv" : "P-384", - "d" : "yUtG-GHczuzVFQuXWBtPedDrkt2tG4GeX_yy6V6Hm4005blcOLYd45gjX3N8zYKq", - "ext" : "true", - "kty" : "EC", - "x" : "XvcwMIRsP7gKVAjdPBhULB3ylSxbQyD1fBLFgakWnEFluAosTL2QU95E2xpVN0MV", - "y" : "uraiwhV9ED1BvbZPq5UitbdZg33hohJRadF86SCyN7-GmNrlOhEFqnF-o7PB9rDp" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "gfuq69ezpardRLQ9VEmrstzpzpWxSRy4r1I_rOkKHg_kFSQzVn3vDNzEqQeKQHIA", - "y" : "1oBddqoXFUrLWBx0zVJ5JUGnt0OkcjJSNEKlM_BBq6XjO5-Ctpy9uS8lpk_49ih2" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", - "tcId" : 12, - "private" : { - "crv" : "P-384", - "d" : "0N7muMMenSJu_bYD1y3wN7FIIGFBp60fq9ZNr_DyTEDFaRab1c2PLWnxZwvU1xm8", - "ext" : "true", - "kty" : "EC", - "x" : "M3DOkQjZ_j2pDm-PDGzdW88lBrWNfSolI7LyJJlsAFDO9cog1Lf_MWGm80oJDdgW", - "y" : "FfrGsxqv2nffIfMUy1GCEzLTPOeEr2m6_0PuMW9fm2UCAMsVUCxbzBtb1nyZXvFt" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "MFLwgeT22ujEUvcNdw2mxUYaJtF-oCheDNYr6qfIRhroSvz5R3lBSMeZj0rquHhJ", - "y" : "iJ6-sff5hF5m2LniNu0JWAGz5htREd0C9036d9S2oFubcjApcHXNohUPya1P1TM0" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", - "tcId" : 13, - "private" : { - "crv" : "P-384", - "d" : "D7CfwAS8fz2OvdO9t33e1bFAW0fEYFQV4taAGHJVAnDNf8TmZXVFPOCvr7gpClTM", - "ext" : "true", - "kty" : "EC", - "x" : "175rvtMdoJASJSXZ4VsugjNMUIB9wpGSznSKUChjy-jq47szrk23ZpiC0yBXtk-v", - "y" : "_ZUyY4erc7k4B89v4n_kB6kTI1NBO2fxTxZabkubimochVwNvk0kbXQq41NLcZS5" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "Gb-ku-UUrJjEFct4kO-FCIkUj67HU4j2VJBeGnrPC-bmXzJUwa39tChOIc4YrTrM", - "y" : "wZ6iWL9Z5S9L-9AbHReSxTNeSxqy56tfrGMP7cIOeP3GLip85xCl1HGyLc4gDCv_" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", - "tcId" : 14, - "private" : { - "crv" : "P-384", - "d" : "xgpoyacaA-DRj0mqSoDPW99cNakj57inqOZIC_aljU_-ja1QnveTu5VT-IErVFaJ", - "ext" : "true", - "kty" : "EC", - "x" : "lj9GrksnYrR5iKn1mIHL1IAuMP5B5Elp0Xvv27YI_PTQccaq-Ou5ntPylMUzHe1y", - "y" : "PAwkFHgnQuMabaPPjsIvr4DdBXSR1dJ00Asz6ZyslCorTVKCbxGQDo7qTtHTWKtT" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "OCSThhnjCYVKqk07KFHarvYBy1-n5zHy71-nIFZ19yZn4wnaK3OzCDhHbvH-vfy_", - "y" : "oc9rkMnhsPjxuRxG4YIZ4SV67wSf1mMNeF8xefnXBw9_BIO857pbbHifq6k7K3K4" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000", - "tcId" : 15, - "private" : { - "crv" : "P-384", - "d" : "I6ItVmh5RIJtO8XLTtOromnKohI1JTbDzNo0hb-Q_Ri1TJ1kkqcznWN4yBmp0zpf", - "ext" : "true", - "kty" : "EC", - "x" : "wg18n8h9e5guY6l2vF7UdlWMeLKlk3X0-EBJctlkbSpOmBUKOUHLlPZ62zJcXH9c", - "y" : "38LiWgWKuv0NRjUc8rCFo2d6Q6T98KYC-DxXD9jepg11vtF5tNqn--ofXADnusHx" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "0-m3-Cpll7v4BfekNYHAln410f-wlPXfaG2msh7DNzKZesFccMNsdDiidzq2rVQ1", - "y" : "1qsGv2ekstg34nybDH-FzDrf0kRuKKpLVgOU9JQ81FdsH4Bb_Uh3WoK4_jXtzM_Z" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", - "tcId" : 16, - "private" : { - "crv" : "P-384", - "d" : "bWHZtZfa2RzHtC0YGCUb-KOwmJUhqZUjgaU9rL2abeOdxqkModI_b35D3_dlS9Nh", - "ext" : "true", - "kty" : "EC", - "x" : "lctf7qgcgdK9ln0siFC1KkaKiDNgE51ulveCH65ZJ1xiy_6HFWvGljuDttMUkdq-", - "y" : "tXCGiAA0_9g8AET2oclM88neIGgDpmdHSHxslcAr0ds8Irl2sSAjraJ95NSu2gyn" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "3sfFArTfOdx4alKo4SVuMNhLAPyQM6eJFttq3Ql5rqu_i5M1lvHtYeZqIq2cH6m9", - "y" : "QvGllFc0mOVgaAqQF_GvoXQmoVJg0QTIIabHh3Wspy7qy0irVm8dpKxzbit8qJOf" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff", - "tcId" : 17, - "private" : { - "crv" : "P-384", - "d" : "mKcUqEZN55w554M6uYXPc1Kfei2DkBygNyAoQV8DtwYqmOUiECDxlyNQYludwUnG", - "ext" : "true", - "kty" : "EC", - "x" : "jOm7u_gNzMp5wd3aUrkybrTPSAGQ7mmuEkYqePSD_LM3TktieWl7dcgeQ73rNLFv", - "y" : "zCP24hQmQnEbi3iQC2VBn_1Ah-inR5ppHBgPzEvXWwFoz1lK_uzIKm69qoIgYZw9" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "zbs2N62pGygHN1n2u4O0akBKWnvmWD7qLJu4TTlhRVxXzdmh9_6AtOM4dKy2GyXX", - "y" : "RmNU8rZfvXZjWRVtcAKs6hGWqRYXMvA0Vp5dNWqZcUnwgFnFXxk4f-3wtCsRHg6Q" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", - "tcId" : 18, - "private" : { - "crv" : "P-384", - "d" : "wSOgjOGyS0THIPlyqZdqYTnSLi0UolDiO9gKInMIkThJi-77xLTiPpQdN124OyiR", - "ext" : "true", - "kty" : "EC", - "x" : "U1vW-LFEqwLorzODSawOWSrZdUiiRSM_vrzMGzz1VqzGM2iIDWSW8pBYeecvvFAe", - "y" : "UqmVNd3fqF_zdBhGbfCLoH1A2NBnuXWbnRKLgkrQM4qUJSI4zI3oLJcUBKyTbPhV" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "FX2pFpSuM62j94lwjdrK-8ppETMSLJUZoSAGdhvDkZAlFgT--DrJXnZ18GldlQQC", - "y" : "Zajmf3FRa4jAEVbwLP3habKSJjF2jLhqUBNmh1nBnMJRjt07gEACpuwJhAxRdC_L" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe", - "tcId" : 19, - "private" : { - "crv" : "P-384", - "d" : "xh8uHXNp6vfEyQcCNQy50MOnMVFVbRb5_mgEimS9pWMwtdYTTtFvYZfyxI1KCTB1", - "ext" : "true", - "kty" : "EC", - "x" : "aIb04bpycj0d6zAvDMjTpM6T1FwDtnziNt8sQLqlAeuCKdQO619P9uwU4_tilLKq", - "y" : "Tq3rWf3EYkB1IxTDSoWhZNpC2h7kfpGtkbfyQqzviz6RWKp4Ue1ICfu9qVZa91eu" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "q39AYquQt0BdQ6VKuiNC30e55iTHfHqs9ogJK_kunUCWu0vDsnn2tWVbYDii57go", - "y" : "uqIRUwq6RUG3v49Sy4L-8H9Czx6RO_x0o2ZoZjVjEYcdpEv7I3rwFqO1yLcSbrRS" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 20, - "private" : { - "crv" : "P-521", - "d" : "AVKh0rHG7Pkd3_PuLDYXWSHmODNUmBjhPcYkoayV1g3HZnZRlu1fROV3rOIloeHvRYdrFx_NB5INebN1qaUMNRqB", - "ext" : "true", - "kty" : "EC", - "x" : "AKlNmCvHHVNVD7yVQZDT0ndwQrHFb-CUb1Q5hpcyIZBfm6ztMv2w23vx6l4-7rWaxEaCGFhFuKs4UFt8JBIs3g6Z", - "y" : "AM9y8f1YkPLcaCxYgDGJVlltBFJNpRu6tFaMueJmi_4TQPdHMfUACPTu3ZPiMOJfLAHjdj-40SuS1DE95PcxdVtE" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AS3urkDLLXtha3NhL90XI0u07sy8om0WO7EbHvsPeJgM0iufl35-RuReyDHZzV10rh-AoHn8y1zITpqxnu8oblJ_", - "y" : "AC3Pf4WBRCJec-AxWwruShMAKA3GE5e-XD4HhAxEVsJQ8VDNT4dlBhjpmUs91Vl-Yq-nhAVSbVRceiYm8-ripeex" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 21, - "private" : { - "crv" : "P-521", - "d" : "ATmak4nm7hXp1MKCw8hx9rnwRfslPzg0E48tyiLkTJq0PiUlXPIop9zJLOp_zTJxol0otFSGDMQHN7UUuOWataAG", - "ext" : "true", - "kty" : "EC", - "x" : "AVjKsZhF9cafY1ZWqEl5rWLBHKUYICfLSotbTrFxs1Gzqsp5rPvXEiGTw3JoUXUanYAiTlDO4D35pYKrehMka8e6", - "y" : "AZpeA_ZGbMfb9gefRvzM66QJF4ywd7fX4i7bD6LxWN6X4YvP0TA-9IgEY9P8rmNtEVWNHOQ7lYMXyG3pSJXCiVmo" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "Ab3YIomLurxIHOuHAhK8KzsSUsU-YK4Gr379y2CHaIo9kgP_rh18DiXCoUEvoIIx8gwGTZzzOeRuTPbZRQo5tA8d", - "y" : "ADD0l0D-8kB5R3GyXenua2pqLjvxMB7XKkYTVTvikv-dr7kj5-zdWAI0bvdYua9iDydcbvNBIfCqnIMrcCuN-tTv" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", - "tcId" : 22, - "private" : { - "crv" : "P-521", - "d" : "Ae0B8AuUv5AvAslCh-nNsc5Rp3aiJaOeDq2r5hDxZOtHXDFWPlYZLG4IVeRITPyvroD8ajdheE5fLTk9xkAwLAlN", - "ext" : "true", - "kty" : "EC", - "x" : "AMJZVTWNZBnvGzroqMvz7iQ_l7EdyH_wfH82VUN-yh5HRB8Zhixc1_ZrRAFIBTRXbG3OhpnkbBynsz93elFLmrS1", - "y" : "ADUZa4-xrZuR6TkvperZvyQpU9LA6anRWvtBpfErRRutoNOXNNqZd4iJM9UrOwgMuwD3EcjHi5LcFlU9fnhAX-4F" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AWImM20DIMkwVqKq5Oj8KGQB7lAiAamgp-MsdmgGpbGoRdHD7BC70po-yvLRKWx0j8wcvDtLBgSlN56X9IiV3_-8", - "y" : "ALjyFlEqqyfyfxY2USOCXRU1-NNCJgg95ZaX3AwhJK2osJI_5gl6ZGsR269YSc8lvzz-DMQSkSN6izsJewFYWE35" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "00003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", - "tcId" : 23, - "private" : { - "crv" : "P-521", - "d" : "AHCj4dIfcZmOPuhsdHE1_QFbirc5UuwhQSVRGJvnNfMqbvkgwJdDwoh35_rOrvDobZkMCUo2gjywt-jeb1MoTXXL", - "ext" : "true", - "kty" : "EC", - "x" : "AckwlINJRsmZceEqzmdGd6OkBOpgGt7BuIL1_1qKj8KPd0IEVzJOnMIKtllYm6mcb5CjImhB9OTMf2TfbfikDx8z", - "y" : "AYop_NDJXvj0A2PHJ4oHLfNybIsJ_yuprFdBxil-CDxyYfOoxxKYwZJqv5dFvahgBq2pcxlUtY_edhyo3t87W5Vn" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AFRRtylPwcqFK3-rIUMWNocMLgrAOgcbHuBpzjmQe8H-F4PQb22UmMthmg5bV3HUTAUo8CN_fKYHG5Mp-vhlCDw0", - "y" : "APnnz_jAwOl6YVA6S-X3i32oAfBRIKgvAGP6-4a1rn3bUxbbX0E6DHxyvXDHBagiswvCTcpmbgf1K2DWl0lYAdvr" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 24, - "private" : { - "crv" : "P-521", - "d" : "AWkrrEpAH1ySoeLzWa29MPCf1d_1AGnmgl5ctM38yHn5HJnANExaKUqMBrOBv5uqqplBUFX7nNL3l4dd7WqaPFIa", - "ext" : "true", - "kty" : "EC", - "x" : "AC3_tgsEuNpiRbo91tSKWj56AQpSbGt1tXpheP-BY-x73ByOHUyH6yiBYeHcdXwi1iLr9utUubAOk0eXUANOYOfe", - "y" : "AZPGwdcwZSHbhKuduwfvNyo44kzrWP7Hao6soA6tRAB8bWu-ZqY9VfazCp4UviSfL5npVBVlyWHrbJzm6_rZZ6u5" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "ACpQ9eN9V7C6ykS76ZP0u-UARYdeEbXT1ktF1049JBufZvm7AjNXgEIh5smS5edyPsQ2E3CpKCrRb9zBsZDfeUmm", - "y" : "ADRPkod4ORmJNXBkni6W6xjFgQWzJYWyineMsSJcIx5SgFJzFd0wKpJ4r4NoMEQYP7Hro6pwuPb8lzsh3kXq8k3o" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "01ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", - "tcId" : 25, - "private" : { - "crv" : "P-521", - "d" : "AVvfMqtnNDa9_sm8S7JMZH6FGX8Rtx3uHHwwqabohiviiTJISFwRwEdc3rrO5XcEbY0R4h2JFj2D_51KB0TsYnt6", - "ext" : "true", - "kty" : "EC", - "x" : "Afrx9MyHjAQXLzWtY8E3Npgc5RHmb_7NJZBnC8IScQExr1Mw6YLdSIApLgebYCItsxn8NI1ePq7Yel40vdYjDmHF", - "y" : "AQgpwUfPeLtojxZr3CZ7TRkfOW94MFH6Qd3-RKrNxCfWhDbFn08eizxx9MeDYTTBi7QP7YjgGsNwQHdYynaQCrJl" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AapJCiTqodo1UEqh71rQPTFdFWAingHpYzYEcQkoNlaN78YHsEh13mq3t4rfAySlSHISiAxhLCUoNE8A0qJH9-uo", - "y" : "AbGIwEWcIGbHLtJ8jZdQZlvsq5PPXrp9nv66HuRZIvv4zFjE6EFlmiy05SRbQVdNIxXTPRYzTc3zD2ap0AI6Sp8F" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "01ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000", - "tcId" : 26, - "private" : { - "crv" : "P-521", - "d" : "AQRGx7aakMJAtvNZjVcMNtuPiKmi0sR4HbQvx2SiPwIE8av5AQ4489sfWCLJEQT1LJmr7z7uCs_RkZnYQfA5nsRY", - "ext" : "true", - "kty" : "EC", - "x" : "AOzcaMvbri-f4B1RYhnAj0-ma1NDDxi4bTiA56rGUB1jToLVVmtUlf19ejkW7IXaEbIxdOvoPFDyEuQ25lEVviI2", - "y" : "AAALPmt-i6XKCpayvbbEsXVQgACrzwFm1hH2apTQZ9AuXHMCxqlRtuLWox49b3UWQQxguKUxC-Wp3N6Vc69L0258" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "ARcwdNExeWI1KkBYFq3NrPwHLihiab5Om7EWUye1rUJQ_sqBLSAZ8aH5gunT3LS4govxtGeFJT3591GYZCCx_YR4", - "y" : "AL6RaKyYB3FkjvdvupBdCR-TMtMFZoTeiYdiOF17lbowRVEuU0ueOZtC3g-oeUVdR38PAb8qjyBuTUjTfy-PAwFg" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "01ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", - "tcId" : 27, - "private" : { - "crv" : "P-521", - "d" : "AEf0gpI9gWUpV2YOJXZbq-_NNs1-0gaz_cqsTCWJryIlZIFpjfAR7E7TYsVWJJOcQ06KThPTq_f465-pNYV6GM0e", - "ext" : "true", - "kty" : "EC", - "x" : "AbbjwscOPKDPxOhuY5Adis_BFWuAtvp6CACwigg7nQsVVMfmmz-2rabNDVM9xfO-IyJluN2iIXfWqfsso9ZfqwNa", - "y" : "AN0O-aSlTwMFZMh61_w6Dd6WFF4RSgvTUTKrgBbfwvJ51oEFS2N9wkAO6n9BF5LtGEs05Rk4c7YiHW7cduSTGaP7" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "ALerrg1ExBfKvxgAcbHCrRng59VuQrYtenCecu0zFvM6qCfT-K25W10QlV0CUb2ghufXhEHoYcloPvqAs_9s4fbK", - "y" : "ADkJ75dRag1VYGkeFmYAoHo4srO0iLCnA-UkhCPnFnBeMgYymD1w2jgvQAgaklc0Hu-9UaD7p1_Nf-1TjpWJtUow" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "01ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000002", - "tcId" : 28, - "private" : { - "crv" : "P-521", - "d" : "AVq5Tiol6wETE9p3S4QwJkOnBOLHsjacK2jJwqKNg29fcQYU2F1VfIXn_z_W2gCOA1pfV1nxjFHy71Zbvjt0On74", - "ext" : "true", - "kty" : "EC", - "x" : "AAiC9FSE0AUJRyxhAyzUpiQ9jx6rK--jcvGKfjhV3wOQc8ESnfvM6Ht6a6q4et-ZpudHxtKYEVbg_Sj-DFPf3In-", - "y" : "AS4ou5BmSLHuNP15FUxCpaWYcVSAZbEpByTXeaAF4pGrjKAn-QJQTEoeCRzSpaRNOnNuQ4R_RmEYxhWBKGg0GMGV" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AIADDBIkyBDQ9Mdh5Q55qU38Z5MKqGaZMc6u-lYk_BxYqWpjzkBnNLFnfnEPNB5Pe1VB5rBZ2Bgnklo-E_DErnUV", - "y" : "ATMiYwjDaF7zYFgwtWB1j-yPSeB86uTsOl-jZn1xcuIrFJ5rt5SRZCD770ODhWqd0FZ6XimVkkN_C86DfLhRNFtV" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", - "tcId" : 29, - "private" : { - "crv" : "P-521", - "d" : "AV9Wm2yFPuZTEtzoREML-T4ePjFF-qBX1fuKnACO_UXwGLXX63QY8BnW3yTKIRHsLbYZAYl-mcln98Lf031gFvE9", - "ext" : "true", - "kty" : "EC", - "x" : "AFRFfw2juwn-o9pRWj-iWoh6CJnQK-PQuGrRxgCv3-PY4MGCuEWkS9vm4uBoebJqLLrktoCQk9QajjOVO54eXX3Q", - "y" : "AWBlktVWdA9WSpA2tAU7qiJrt6wahs1APs0DpDra-co5-_qPVJ4MNRGccMm8NIalEpH-BKTzTa0ulEnkKO_WGkzH" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AcV8ffR7tx_RPXFPhG66Wy6v_YdvF_DPBRyC2MBdVnqkDA5qRbb13O7MPDOKIbZByBSPo0fYwWWuJJQyHy6ifvhB", - "y" : "AVEsOm9DnGCIOdriD6SoT3HpQV6AsJzKG51vehjIngB9QGWjwcMhTZc1vy4FqnOk135hOH18JdBMyp2RvezglWmQ" - } - }, - { - "comment" : "edge cases for shared secret", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", - "tcId" : 30, - "private" : { - "crv" : "P-521", - "d" : "AE4aqLfxx8CRwT3QCLZlGuNRCmYhcpKx1cQKa5yYRCJdoRoFfHBmXKEFpPcn02d56w84wAxo5IqLuiSF6iwBXSP7", - "ext" : "true", - "kty" : "EC", - "x" : "ASeR1fEZFj-lqdUm56zzdw9ye2XQ9rZuNGed20Y89cvpCC3k-qGhjERJWVCJEwvbGWHfG3dikPws3bd4BpNF8imw", - "y" : "AUTDJdEeJ3cOzU0w5QHaygcoV7heHoc6mIxLepOattgSh86q9gpuMlEToVuILBB-XLmDXDPcUAfcTugkSgMt0Cb3" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AGjidY0tiJL7AbgOV75-ZWrkGFHTKhuYfycXv1yUfBUcy97QljiYb9SOHs8g_tdMc-iclHf9jMP33Anyc6mLWIke", - "y" : "AEWBC6A7bwhGzO7Km2FkS2gAMDm36KRmlOJ4y_EHSwh3wtC-AwMkUesZLwA7bIlsvLGom3MC4Hi9E7Nczgurhg0H" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "64ebddd0211545e08fff948c3c252bafdb61245146915b8524f27cd6ec766d4f", - "tcId" : 31, - "private" : { - "crv" : "P-256", - "d" : "9WHNIE2tXPb9P1qiTZSGfw8xzSIXbrwjDlu4IMNDGK4", - "ext" : "true", - "kty" : "EC", - "x" : "G5TtS3gQhifa-fzyckvupwbKxmfGuveNC2CwLpchqH8", - "y" : "FBD5sLTkev2U75DG792XrwCybeK4X-rSkP7OeenV668" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "y" : "ZkhceA4vg9ckM71dhKBrtlQcKvMdrocXKL-FahdPk_Q" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "11c2b3d789d5879ae2b6c5bf25e970d246ae19f27e96d2a53b85b844662bfeba", - "tcId" : 32, - "private" : { - "crv" : "P-256", - "d" : "37nCPA2bNyQYlt2dwyPl499ok2n2P9GDC1PC6Kq3_ps", - "ext" : "true", - "kty" : "EC", - "x" : "qPLjpu-qN03vykV-b3Zmsev1gum3iwur3ptEBN1jqO4", - "y" : "33Y3hU4lZy8u_ZKc1TJGIhY5TFyqHWH7NGVwikCbE2g" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "AAAAAP____8AAAAA_____wAAAAD_____AAAAAQAAAAA", - "y" : "RiwEZuQYAiONbJJey-_HR8_lBeoZavmi0RtihQ_OlG4" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "827b389dd5c08c79f1315302342539be601a7f755bdca98d6702846107a31870", - "tcId" : 33, - "private" : { - "crv" : "P-256", - "d" : "fQCkXannaJDeh2kAnq5HI7wLxvzj6x5t-HoWWOhDLMY", - "ext" : "true", - "kty" : "EC", - "x" : "_FJoFGfalGIOTH-b1D-ibY0CN8prxadt3__i8MY5nhw", - "y" : "DgvkRsg976wXQkGkRFNW8a8fN1Vr8bD3Ak3V03Q0wgQ" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wABAAE", - "y" : "aEyKlYbtb5y-RHBYp9ohCLqx5eCmDR9z5OLnE_Cj3-A" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "bb25fc9cb64eb69e52f9d1d4c0d9dc7563d2342738b8545bd849c9616f7c35b8", - "tcId" : 34, - "private" : { - "crv" : "P-256", - "d" : "7y30Hg3QXiSRil8iTHd33Y9yg3JzVR_PUJ2SaUeNfOQ", - "ext" : "true", - "kty" : "EC", - "x" : "HwhwsMS0T9wPDfjxu0mxkLOfESsQUmIYa4V1KwHrlDc", - "y" : "H5yuPQ9-ah6D2MO84W-0MBzRBQzBP4Q11teY74VB7ZA" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "f_8AAf_8AAf_8AAf_8AAf_8AAf_8AAf_8AAf_8AAf_8", - "y" : "LiITyvAwM-D9D3lRFU9ubDqSRKcvrKZenOnutcjhzqk" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "01d6936718941de1c689a8d11cf98c0d50cd18b40589e5e4efc2ab7692e9a11d", - "tcId" : 35, - "private" : { - "crv" : "P-256", - "d" : "ynQhnwWzXOkr-9Ne4QB_C_gSAjx2gdpSX_aFifK9S0Q", - "ext" : "true", - "kty" : "EC", - "x" : "3v4g84h9rNVn81C14Uxr2QQWp1VZpW33GQ8qfm34ulI", - "y" : "SEPuncA58RBm9OslWclcvGWZOoNftu-1vu1Efc4sYiE" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ", - "y" : "K-h4nbgbtIcKnmDFwYyAyD3kZCdygfGvHmQIQ6GjFI4" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "b040da667e626da3ecba81774abe5c78b0913269c4a338e96169280cd960cb11", - "tcId" : 36, - "private" : { - "crv" : "P-256", - "d" : "dbAXHkNIjNBS9ai8xc1rlIBwtq5u2HFxAHATVr7xORA", - "ext" : "true", - "kty" : "EC", - "x" : "ioFLm07OAbhKONV6TmTlamuJaIwHEzSeeGuNcosgoLk", - "y" : "jPuKN9axMkHxUMyjgbTTnE9Tq-QJq5u-gmnJ8Y2iFlQ" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "_wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8", - "y" : "XfgPxsria2wZUvvQDtF07hIJ0GkzX1tIWI4p6AuRka0" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-256", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "4936cc116991029c526353880d1662c358030966cd55a9a8160fe2d159aeb4e7", - "tcId" : 37, - "private" : { - "crv" : "P-256", - "d" : "XOqmj1_5DbRu0cV4_bPB1JTKV2EImMcAmCiQxztru9Y", - "ext" : "true", - "kty" : "EC", - "x" : "oXuqPe7_EUlvhfee5l1fOFn5X5Jb1wNjVcenVgTJyJg", - "y" : "29Xvv-xNR8wUyBM_47j4bGb-C3vDFXLKhv0iCc391vo" - }, - "public" : { - "crv" : "P-256", - "ext" : "true", - "kty" : "EC", - "x" : "__8AAAAD____8AAAAD____8AAAAD____8AAAAD____8", - "y" : "LGNlDmpdMy4ph90Jp5AI6PqrvTfknLAWv7ksjND12nc" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "4e895e34c332213a5df19fabddc6b902d692839babb725d3df788565dab301ce21297ac9bb22634d28f4591bdca4bbbb", - "tcId" : 38, - "private" : { - "crv" : "P-384", - "d" : "T1tn2EWp3XrtJUF4-8hqnhI17p1Y3MLSIw4g_yMkj1ZeJVbJxfeCYc-Kh5O34xL5", - "ext" : "true", - "kty" : "EC", - "x" : "SnFhQe1E4hE8LFnQIHsmKuPj1Hvfp7ghcjeQ6l1Abj1bdfwmQexehMePbqPkz7mx", - "y" : "FdjHSmVoLnYQaACnx952lcm_Le0dPco8Mf83dOx8nZ6JyWoDe1tk2eInNlmxyJD3" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "y" : "PPme8E9RpepjC6P5-WDdWToUyb45_SvSFdO0sIqq-Gu_kn8sRuUqsG-3QriFDlIe" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "359842f1ba4c9be3d068c74399581ba6a322c6d3ab720d0224f71cf5ca550d1071a2b385adc8fb47fbfe74d25d4736a9", - "tcId" : 39, - "private" : { - "crv" : "P-384", - "d" : "50d0UvWbIrGM0eMD2D1wZuZPg6OCsnGbhPgVynGjTaKmbAPI4aj78fDP4HjyZNoe", - "ext" : "true", - "kty" : "EC", - "x" : "bIby6GKIm_c1VxP2_R3JJaD2a7WfrGIbGhKoFbDY6zWN4Lwzb8ujjRJhB0BlG4sK", - "y" : "dcKT0WCM0Sf9srQn-YUtmD--lpd9jZkD5AIWKzrDg10igwmh0lgQi_w1NgUguTXB" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC", - "y" : "cyFSRC-27lw-bOHZIMBZvGI1Y4FNeQQrkDzmDx1Eh_zNRQqG2gPz5u1SXQIBe_2z" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "71716edde561d5f3160f49150d65d2d7288d828de14ca915b835547687e3b9156bc2575e24687393ad6aae3544367355", - "tcId" : 40, - "private" : { - "crv" : "P-384", - "d" : "rzWr72rzurTFbm6_jsnAgXH-H9VodWaGyETRKJC5n7ao06d5zoivfDUYh8iehcLH", - "ext" : "true", - "kty" : "EC", - "x" : "Ir2zHCrFMrmIUiUr4Zy6260S1oKzexrvWSUEu0e9BlXZZQqHf69RUmhxsbwPsf05", - "y" : "zRVH8sgQIsx9VOscHN-EAGyLiMQwny0x5faJVqFFE6uqtq05Jq7Peg0Jiwd-sEBk" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "AAAAAP____8AAAAA_____wAAAAD_____AAAAAP____8AAAAA_____wAAAAD_____", - "y" : "cDcDhUE9Pv9vo0B7ok9oLCsBtRRF299e97DdCXnxfnE-CQgVcfHpTftmvyggAvOf" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "54a2e9e30ff3dcdf15bb0630dff2af17ae2ddadc9a908a6e844762af8f43b7dc3bb59212e626be44adf94efd3c9bf748", - "tcId" : 41, - "private" : { - "crv" : "P-384", - "d" : "lat_maoDiHjgtmOALbi0oV019jqEsoSKVEW8Hadq-sDPpexpBAH7c2TlUhfVKOfb", - "ext" : "true", - "kty" : "EC", - "x" : "k7C1k5ErkiAP3jUFHdgT5sw2WF4oPXNIUuLiWazarSE1mNY6uPCnvPvzc19-ufIR", - "y" : "p3OImY5TpcRNr0cht6RZOo14saiFmxNNQKWKXVmGl7s-9dJ9ulpYqf_Sp3vWts5-" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__", - "y" : "ES4ZHx94u8VLbMTwseWa6Mb_Ggf1Eo5B36KCjhtlONT6LKI5TGqrNEncs_xOtEwJ" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "6125603f2419093887c94cdc24030a53774e68436d9db29e58199ff5043f38850c94a843ced979247f2ca1bd48e712f7", - "tcId" : 42, - "private" : { - "crv" : "P-384", - "d" : "OriTivAVWkEw0xPlfSEL1XuyfRoo9WXwPFrlaxFY_jHpWXKku0EjnQis9js5i716", - "ext" : "true", - "kty" : "EC", - "x" : "BnGd_rVJP9RPKD1nBm4EJHkAk6UuM3n1WH9-w2tUGC-HHM-ELlLY2imgCV205lLz", - "y" : "9DWhsjsMME952LVjIxeC8Gw-KTiK1jmnOTmWHbLj9lw0hiK8t9RPS4iQ4bCwxAB2" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "AH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAIAA", - "y" : "AopMjaWgURL-YCXvQZCJad4g0F2WaOXIUu8tSSFy3cKgpiL8SIFk_MGgdrhylCry" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "60d73748120e538409c65508f4fd2c4575ee333d1103be329fd95eda92fdb45665de27db2d3f3ba5c5ce0d448d33442d", - "tcId" : 43, - "private" : { - "crv" : "P-384", - "d" : "LgLDmLopfrvWYzRGKWleU8ZSMaPiSMLLBKrJWGwXPvD-USKpohFKBUCxI-x6hDuZ", - "ext" : "true", - "kty" : "EC", - "x" : "P0lK0BgW2hvIautb__wcM9wJxsgN0h_9jP6OEkt2uVQSlzOxnkWGjlQrnQthW8W2", - "y" : "h_lSVNmK7k9renQhp30NyVF_PTDhBNH7CDUQi2O9ttMZsu2LgMCzUmQYcdIRDcy8" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC", - "y" : "B5faTAdRztFt6A0Wq3xlSl3CfQkmJtCGWhkqHF6nwbiMn8qwV5RnQeQcwoyA7Aua" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "acafe3aa06c90ff391128a2ba4b569d3f76b65ff1ec1e9c98780722c336810768014be29db1c7b523c68f3246b2765c4", - "tcId" : 44, - "private" : { - "crv" : "P-384", - "d" : "u5P9WvZZwf3krTQVlA_9dx6HLwp4CwBuEWupeU7xskBvkFQkLEsWgc6ODACeDJ34", - "ext" : "true", - "kty" : "EC", - "x" : "aahIFrSc4nFAKY6U6YSFH8SbW5tLaXzgNUzMwFQB4mV9yshGl_J30i-pYrqgf-KT", - "y" : "kKd0wGLab0vwL9vcZXrF4f9Wwl_YpTtBgdTNBVAsfN7gnDO0_KgUjyiuC8V0YADC" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "__AAAAAf____wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8AAAAB_____", - "y" : "bHCJiub7MfovCGViry0QSGukxv1eQd_kqmFZi0cHo7wnamL-sbmFV-OxfAJfet9O" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "2f6bdffd0381853dc2c493512138ee843d4f7f0d19fde184f1a438887c741acb066654e45ea79d230c3f3cb376c22665", - "tcId" : 45, - "private" : { - "crv" : "P-384", - "d" : "t7k8StSVU9m_UnPXIr7cpsZHinyGKtb-ihWaapXGXvBb_Q_7DAkhlodltTuOjBNa", - "ext" : "true", - "kty" : "EC", - "x" : "rZ7Tz-zApVpyC7uD66RRSVxnXAtg9qLorxkVbamhRqt52ztcCT6isv5C73FO_J9S", - "y" : "SeQr0j5HOA0cdzcPNj1tHq5RNO7DXT47l07tk41gIEPN2TI6h8CQ1teO7oliUXzl" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____", - "y" : "SYerrkEoCcL6SP0jsb355iL1pgbEQRchX_phsY70blSn-78R-aa6WcmRtK5QH-3O" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-384", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "7ac7f7cf745457b1a58ea3cddc0337d47211b44403ab4ea47559be4350e8e87ef1aaf153e88eee72a3bdfa88aff1bad1", - "tcId" : 46, - "private" : { - "crv" : "P-384", - "d" : "G6nOPd7d4YRu2aiuR2rGsJhaHbgu-YD4KWcolBGqjhFF7r4vEut4Z7hJPHCmkYfo", - "ext" : "true", - "kty" : "EC", - "x" : "OdLPzPwjOGKxUaUEWtPkWQcU-lZMiMY7ltEg-sv8cDexBg1YAehFcvNHTNd9Eoco", - "y" : "4cv-rRGl9hZpU7SdqV25z_tQxBHl3H9M8zYJ-rQ1gvjsvszDI9lWfc2Yda6GEauI" - }, - "public" : { - "crv" : "P-384", - "ext" : "true", - "kty" : "EC", - "x" : "__________________________________________7_____AAAAAAAAAAD____-", - "y" : "cyFSRC-27lw-bOHZIMBZvGI1Y4FNeQQrkDzmDx1Eh_zNRQqG2gPz5u1SXQIBe_2z" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "008a0e65c8611c570562e3eef2172e5fef175d211ca7613d3f301dd8babd9b47d400c31551ac4c06ef3850750a4cc6a012f31bcc556c41ba61054eb6af6829360842", - "tcId" : 47, - "private" : { - "crv" : "P-521", - "d" : "AKpIH05r5B-hJdYsfs2K1lPebZvuR-CKsJizim-_8jVMkK26amEEKxpylsbVT-aP0kR6-Rx_Jxl9IzyBSyPyWHCt", - "ext" : "true", - "kty" : "EC", - "x" : "AP9uLiYau8O5k7k5b5HVp4wr56kfwhAkJk7K5GoGBaQ79oEgzdbbZA4-Xk5kvHcCt6A9JjhR98ADxmEoAR-GtHN6", - "y" : "ACu39ZDjMkyQwIVvi1B4bwOPxZcAuitpWsXGXkh4vWzxvL9hKQ1exhkyu1gLyYipMAM8zZRQgcnGqQncxm8syuWK" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "y" : "ANIOyf6mtXfBDSbKG7RG9AspnmSLGtUIqtBoiW_uP45hS8YwVNV3K_AaZdQS4LyqjpZdL10zLX85-EbUQK4AH0-H" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "012d650d8f3b211999aea626d97a2a359c98cf42ee4a7ce3353ddfea8e303102d60f1b82c207524bfe2c8f280d9d6c1345fe3f61ff889071310cbc5644a6d8683e66", - "tcId" : 48, - "private" : { - "crv" : "P-521", - "d" : "AR4Zxy_JL1yzPdR6rG0nq-06vo32mba1JskRrZPRiBAjcf6dNrGITYhWC_V3gtyeEODQbSDlmdvbI4BLN8vPGfxe", - "ext" : "true", - "kty" : "EC", - "x" : "ACZGXGdGsWYaZ0fOuHCpoJ-8D_caLh8TQQYbcZgB8nXUpBKqn0vKcW1f9_XZVzTVYFKiDjyDIDH34dkf6d3yJwec", - "y" : "AKv_XqoNtUyzdkKqU1ivxekOMmpKa7PKe9PjeCF5pzeVVg-1-6QBZcVOmAlXm2Y-QARvqtvTQbx0FValfOTeNgAj" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB", - "y" : "ABDlm-k8TyacAmnHnir9ZdauqptwHqzBlPs-4D30eEm_VQ7GNuvuDd1KFvHNlAZgWvOPWEVndw4_Jy1ojIMuhDVk" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "0090cd100d3a35ce5f9fc6c3dbefd3810d5096ed63e5ee046c26c28984f825a0ce6ff3d643e7ea1648b21dc8daad4286673aa84e28f256bbd978606a1fcca2942f7e", - "tcId" : 49, - "private" : { - "crv" : "P-521", - "d" : "AcfptciIDkTS-s55K0RvlPXZYl3MiXLWQIhQApWyG0rNBlExohWmt4I37TqsKPkuUetp6E5-LNjKfG72RFUZbfi2", - "ext" : "true", - "kty" : "EC", - "x" : "ADmHGMepW0phM-0eOFYStqNF3raQTXAi9FSxb0e8UJiElG4uB4qS_48UaRfqxOrmt-RUoB2lmqmVveoTdSdvtotC", - "y" : "AMxzlDgVrRolQOtp84UBNp9LX_n01wzS7y9RhaAQC_asgVt8IOymIuOAsdGo4JNeYUI7Zg30fS-elK8XVMa8DPzO" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC", - "y" : "ANklT9-ABJasszeQsQPF7p-sEoMv5UbGMiJbD3_OPaRXSxqHm2I9ci-o_DTV_CqHMarWkamou4tVTJWgUdaqUFrP" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "019c5a8fb31bfec0a892308140c2d4db952066bf0fb5b613c2674634723269da8fd19f1f93cbab0acd80a268f9d108b9a6103505e710b49ed6f3ec10a9a1aab0cb1d", - "tcId" : 50, - "private" : { - "crv" : "P-521", - "d" : "AEYv-AnJxUVNa43Cn7jWp0rMBxXHi-pd25Nfu2wd2vVNiw1OAP_KhduvhluBC6KWTZhpHwCNJhbyy5WiMbbfiKxL", - "ext" : "true", - "kty" : "EC", - "x" : "AYMOoz0H-qWHNgCRhOi5vBMJcnSwGP9TKaNfoNthhA0misgNSJuLwEAUct3lk61FnOLDp-wOXWyWfxtiV14LZKIb", - "y" : "AYLV9C9-sY5659HSeOojg7nt3Y_TZKiZR_XaavQZZZT9HwWOFVCA8s4OAbURON0bCi1DBqInrCxJ7WiiXp3HmzyZ" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____AAAAA_____", - "y" : "AM0oOdhXtGmfXI6KAZR4biaoYvCGtLqAdGrlIl7Tqmj5a3quxVIlgwu5j1LXUiEUGJe6SdejHrvwttfTE1LlJmGQ" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "001e6f34d1c431b605ba5ad341a6d4b21b7c9691d79ae8070fd56705d5ee60c98e3956f12ce58bb831452541b43ffafd102dea31bb4e964da6a3023745554011ebbe", - "tcId" : 51, - "private" : { - "crv" : "P-521", - "d" : "AeONg5fKDfXtk9-RlPUuOZz26gPs_jHUcxlqe5XPrG3PBxAmMQESzT1ZbWy1aZx6Gtqcq-rZOO2WrosQZgs-MV53", - "ext" : "true", - "kty" : "EC", - "x" : "ALwl2eMdd-N5-DAfX84o2w-_iUTtYgq47BBS5uSGUWcYHug7BU3CTUBrKmYafhUQIqnIYxRPsflRVMqnncnxJglb", - "y" : "AOq4DoCisqFOiANEtfs0lwIipGH_vkuPHGWNgaWw4oZlzT424fTyWIC4sj_RZc1sTPWD4kT5ROCnZcemPrVRkzyn" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "y" : "AAgT2YKRGfQv-pX-qLqegeTNamypf7B3jhLl9d_jUgHdTMqOyg0uOVVVmXBBOB5qwfGN30x04LbpBBz9yh0cEDCR" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "01367e24697254f96336f32098b6a35dd364c1dfc897c03404ccc8b7b9d207b1fdb9c66bc55d586002c561651842f7a11a7b8f4208ffa14f2b81c867ed6ac5b311d8", - "tcId" : 52, - "private" : { - "crv" : "P-521", - "d" : "AEsWMPirCvc1jgUh5gZJQumH5N4pnOSFfhhCOuXC-URm2HqR6JudLVfMJ_2mSTDEf8ZtYb0Kw4N7s-D_VL_wlzvt", - "ext" : "true", - "kty" : "EC", - "x" : "AWZCsAy5TErC8oCtxpdkWNdeBmsBC_blA3Z9OTcgnfqH6Z6YQvUtj3_XaVS2vShKMd_xkPc9CyEjNPIsUJ_5miOd", - "y" : "Acgw-GCBGqMPwDF4k9giSYYiEXXYJUhe848wvoZfqL3OqY6cBY9bZXMGRMzwNWVjJK8TpITJHqUq_PXSQpRTrDVP" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "Af8AAAAA_____wAAAAD_____AAAAAP____8AAAAA_____wAAAAD_____AAAAAP____8AAAAA_____wAAAAD_____", - "y" : "AB_oAMUOVAErdaM-S-fQfI1g8paAo5XpUaajHFCWsOqSj8LL8yfdeE3Ap8pG6nOZK3WLVkE2S0q6Oek3mKTZJaAI" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "0028cde4500ebb4f53aa89d08b162020d53921d43035d585d5645172334c9b0df46e6b0bf66a5240239d51ef1017c14173313317fb544a889efa83effccece7eaea5", - "tcId" : 53, - "private" : { - "crv" : "P-521", - "d" : "AGSRnAUCVCS-_7fN2JLqlXl1gLNlaiyaC9C6UKFmcZN4yeeg79TzMqFPwCHCrhhe89p2BAs4U9Y5gycIOmTa7B96", - "ext" : "true", - "kty" : "EC", - "x" : "AQ8Us1RKPVn2xxhkRI0_7tqkE5acYGGaG9hnqgp7Nbvw1UprVgWUO8tp2rwfyfvlGc56FIcbmahQTFhNnKq4k6T_", - "y" : "AAd77iaKst0JYgHEOnz79w-ZseypWs56oKGXzM1CJ_DUj3zHw45O2GhZ_VfAVEHd1prLKYgqN6n6FQ6EuWhJ9Qih" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "Af8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAP__AAD__wAA__8AAQAA", - "y" : "AI3Rih9eSCFAvnm7ZaIa1gyJh-UyyENF8BNa_9Ruxx7wKxyjrVbzAdlV-jBsEi1EHW_tz4uFXvJWNQv2nSOnIHrZ" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "01f11556b0c2544695555c2c142ebbf72572244e043b755dfca7adcd32d1ff68177a70af88fdbad573f22943522c5e40a99794e3e629518d471f302bdd5cf0be729b", - "tcId" : 54, - "private" : { - "crv" : "P-521", - "d" : "ADl_dtWjNwzJxNPMypvvZQIh4hL8nLY-0GZQoinG9y5L9dh-erUW3nwCgLn1-mZI4F9qIxNxpdPL6WuapnyEJuPE", - "ext" : "true", - "kty" : "EC", - "x" : "AOVtRhkHpYEOdY37Ctitf8tdcazfFeYJpGDIND4IE5Zsurd8gqMeSyp89mOH84HYc1-sBF5JhQ-bF3Pqj2W4-vhi", - "y" : "ASX4TFfru6w_bk3u9k71gKNWFQgDENvSHSLRQhDSCi7w2PHTs9tdJM48O9C7WYw7EImq4oiK3D1jnHbkOyCwLfyd" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "Af_AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__AAH__", - "y" : "ALEcZo-9VJ82iJ97Y0NAUdom8VcFg5E2sbFKCRUtehgup4BsNUeKMtOqPJwWJ6YVGevscbNvp3RJAluIKeJ_MHg0" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "00f8f1e1940e2a69e733f8a7a5c9a2d30cad0dd901e702a0687cc83913f0123bbf9ffe5ae4ff6c5630118268e8e67f4327482b9b7e69a93ef4da1d3abe00e3692482", - "tcId" : 55, - "private" : { - "crv" : "P-521", - "d" : "AGiax25EUHBf6o5rTio6wNt2Z1BZdO3Y2ht6Nwj-nUi2sP8oGnmRfx1Qo3k8tGyzTke1Bisrhb_NFo_oByKuRVxt", - "ext" : "true", - "kty" : "EC", - "x" : "ATu4_yZKbhiOikpAwZFrAw5TthD8lUyOjEfH3F8Pwx65KrWdzCTsUxlytYdvO2VGVGGLrfIBRKQeQA6DHxTeRIN1", - "y" : "AY6_5hJv8HywySeUmLI64-Tyjrwof-9xEGkcF13wZC5t780Nsn78-whvVaeMxfl--bKWCF-8cq-ylayu-LRueG_p" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "Af___wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8AAAAB_____AAAAAf____wAAAAH____8AAAACAAAAC", - "y" : "AKp178Co2qwdc_MsnFUkFLzPRK-OdDMbR0OefcxJoTWz7mHp9pcX2JtLujVnoZWu2hP77GNL8phLXsa2-A9ZeO1a" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "008567b96fddfb4acc4b0317e5a8144b879e762bd611a8d8d0825c7af7a464d27eee6b721f7bf4aa431b095743299f36c27b0b520432472b040a9807f21abdb78dcb", - "tcId" : 56, - "private" : { - "crv" : "P-521", - "d" : "AMRVHZr067NGsXtKirPSRFaj2KL9oSIC90jdOYlU4CJTLzssF1bZC0BqnOX9AzxAz3C7-ny0LK7Ik3VbgnDy6GQ8", - "ext" : "true", - "kty" : "EC", - "x" : "ABLN5qTrWH6RKn_frzdnVX3XWnW-sQ63iWeknyzshq-U1Fw_tEFN0AN7sV-JzjQaDDkuHyegXmtxfNuJPBI2AzBe", - "y" : "AM6aaQYwMBmQKDRt1cvTDEdK6CMahJOePc7IYRix5VKgsbmBfCv7F9_xE5nexRTjDzGv309LnvVJQ0kk9Fv6f2u7" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "Af_____________________________________________________________________________________9", - "y" : "ABDlm-k8TyacAmnHnir9ZdauqptwHqzBlPs-4D30eEm_VQ7GNuvuDd1KFvHNlAZgWvOPWEVndw4_Jy1ojIMuhDVk" - } - }, - { - "comment" : "edge cases for ephemeral key", - "curve" : "P-521", - "name" : "EcdhTestVector", - "result" : "valid", - "shared" : "01c0ed430408acb310910db1933c22d021030c8b9c011b201325484911eec542605283f2a41c02f20ea6d96291293ce16794a759bbe1428bd6f4bc53a1db40e80b0e", - "tcId" : 57, - "private" : { - "crv" : "P-521", - "d" : "AWFrDPqiz_GzwVebeJ-MTnUZsc0Aw-nLZ8PkYl70WQdMhFe9aMQTp5ocQCC0h1_QQBEQxzTYioxfyLTVqA7W7xQ9", - "ext" : "true", - "kty" : "EC", - "x" : "AfAnhZSidHsHhjPfcqc0MsllGBwegXg2tIcHQB3vOeRRvgjL_bLoaYHmp8fZ5ZVrBQcGQ7AMBfB86XiKe-27q_zS", - "y" : "AE16Vy45Ij40KlRqhAFe_SSI7u5tfr5GfAmAPyeHVlM7ryOAOoohrLymiwSLJEmHCukT97D3xbIPdX_1eQyPWrit" - }, - "public" : { - "crv" : "P-521", - "ext" : "true", - "kty" : "EC", - "x" : "Af_____________________________________________________________________________________-", - "y" : "ANklT9-ABJasszeQsQPF7p-sEoMv5UbGMiJbD3_OPaRXSxqHm2I9ci-o_DTV_CqHMarWkamou4tVTJWgUdaqUFrP" - } - } - ] - } - ] -} diff --git a/t/wycheproof/ecdsa_test.json b/t/wycheproof/ecdsa_test.json deleted file mode 100644 index 2322cf0..0000000 --- a/t/wycheproof/ecdsa_test.json +++ /dev/null @@ -1,2254 +0,0 @@ -{ - "algorithm" : "ECDSA", - "generatorVersion" : "0.0a10", - "numberOfTests" : 273, - "testGroups" : [ - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044af4f6d1d734798d4c4c6f97c4fff392ee65dc252d617b154ca835ea1535b104fb069171d00e87a92e6c4db1d892bc09b04b5da8bd9b09cfaa41d0a526e55237", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESvT20dc0eY1MTG+XxP/zku5l3CUt\nYXsVTKg16hU1sQT7BpFx0A6HqS5sTbHYkrwJsEtdqL2bCc+qQdClJuVSNw==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "4af4f6d1d734798d4c4c6f97c4fff392ee65dc252d617b154ca835ea1535b104", - "wy" : "0fb069171d00e87a92e6c4db1d892bc09b04b5da8bd9b09cfaa41d0a526e55237" - }, - "tests" : [ - { - "comment" : "signature malleability", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221008b8d6e21d0c0bb5185319715ccbce2902802e1eca070b7226dec70ceca023883", - "tcId" : 1 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3046022100dc6483cb966474fc22f2e68660e5e52f3bfa403b962de583576177c0dab2a260022100db4526559f5145e2fc5aa10d1d993a811973144f99b86474599a9f1e212c07f1", - "tcId" : 2 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "304402201f0819fe1695c49555d6f3c1648a04c24cc59bad4120b3a66e997481d4e973a002206cf5660873b490ee99563c958a02178890191b7da31bd87e43161d83a6ad0efe", - "tcId" : 3 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3046022100b925b7d5a274ec43833fc87d66e50d8bf0be579912d882be3300e7167985448f022100e319bfd2931d9a83b709dd5509d0d907188fa03d3025f842ca9123d052be6c70", - "tcId" : 4 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3046022100d2cb5feded860091556d8710ad7e7aab7a6350d2d97238177604d8d330e0357a022100cab37fcb3ef1fd4485aca7d75dd4685b56f5078383936ad84f8af4c12b874c40", - "tcId" : 5 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3045022100bcf08f55b39ec37c3939d58e9eb6d42f21bccff63f661eecd06c89acb689067b022062e2ba2ec55bb9fe5aaa888d5836deff0abf45cbbaf2f8228b31d2cefa380466", - "tcId" : 6 - }, - { - "comment" : "valid", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 7 - }, - { - "comment" : "BER:long form encoding of length", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "308145022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 8 - }, - { - "comment" : "BER:long form encoding of length", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "304602812100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 9 - }, - { - "comment" : "BER:long form encoding of length", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f028120747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 10 - }, - { - "comment" : "BER:length contains leading 0", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "30820045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 11 - }, - { - "comment" : "BER:length contains leading 0", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "30470282002100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 12 - }, - { - "comment" : "BER:length contains leading 0", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02820020747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 13 - }, - { - "comment" : "BER:indefinite length", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "3080022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000", - "tcId" : 14 - }, - { - "comment" : "BER:prepending 0's to integer", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "30470223000000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 15 - }, - { - "comment" : "BER:prepending 0's to integer", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02220000747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 16 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 17 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 18 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022200b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 19 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 20 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 21 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f021f747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 22 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30850100000045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 23 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304a0285010000002100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 24 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304a022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02850100000020747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 25 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3089010000000000000045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 26 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304e028901000000000000002100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 27 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304e022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0289010000000000000020747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 28 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30847fffffff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 29 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304902847fffffff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 30 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02847fffffff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 31 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3084ffffffff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 32 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30490284ffffffff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 33 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0284ffffffff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 34 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3085ffffffffff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 35 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304a0285ffffffffff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 36 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304a022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0285ffffffffff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 37 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3088ffffffffffffffff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 38 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304d0288ffffffffffffffff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 39 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304d022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0288ffffffffffffffff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 40 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30ff022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 41 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304502ff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 42 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02ff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 43 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3080022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 44 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045028000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 45 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0280747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 46 - }, - { - "comment" : "removing sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "", - "tcId" : 47 - }, - { - "comment" : "appending 0's to sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000", - "tcId" : 48 - }, - { - "comment" : "prepending 0's to sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30470000022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 49 - }, - { - "comment" : "appending unused 0's", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000", - "tcId" : 50 - }, - { - "comment" : "appending unused 0's", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f00000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 51 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0500", - "tcId" : 52 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3047022300b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f05000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 53 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0222747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0500", - "tcId" : 54 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304a4981773045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 55 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304925003045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 56 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30473045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0004deadbeef", - "tcId" : 57 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304a2226498177022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 58 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304922252500022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 59 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304d2223022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0004deadbeef0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 60 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304a022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f22254981770220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 61 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f222425000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 62 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304d022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f22220220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0004deadbeef", - "tcId" : 63 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304daa00bb00cd003045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 64 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304baa02aabb3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 65 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304d2229aa00bb00cd00022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 66 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304b2227aa02aabb022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 67 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304d022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f2228aa00bb00cd000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 68 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304b022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f2226aa02aabb0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 69 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30803045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000", - "tcId" : 70 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30492280022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f00000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 71 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f22800220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000", - "tcId" : 72 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30803145022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000", - "tcId" : 73 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30492280032100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f00000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 74 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f22800320747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000", - "tcId" : 75 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "2e45022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 76 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3245022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 77 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ff45022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 78 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045002100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 79 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045042100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 80 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045ff2100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 81 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0020747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 82 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0420747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 83 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3fff20747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 84 - }, - { - "comment" : "dropping value of sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3000", - "tcId" : 85 - }, - { - "comment" : "using composition", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304930010230442100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 86 - }, - { - "comment" : "using composition", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "304922250201000220b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 87 - }, - { - "comment" : "using composition", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3049022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f2224020174021f7291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 88 - }, - { - "comment" : "truncate sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ec", - "tcId" : 89 - }, - { - "comment" : "truncate sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30442100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 90 - }, - { - "comment" : "prepend empty sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30473000022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 91 - }, - { - "comment" : "append empty sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce3000", - "tcId" : 92 - }, - { - "comment" : "sequence of sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30473045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 93 - }, - { - "comment" : "truncated sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3023022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f", - "tcId" : 94 - }, - { - "comment" : "repeat element in sequence", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3067022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 95 - }, - { - "comment" : "removing integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30220220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 96 - }, - { - "comment" : "appending 0's to integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3047022300b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f00000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 97 - }, - { - "comment" : "appending 0's to integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3047022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0222747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce0000", - "tcId" : 98 - }, - { - "comment" : "dropping value of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "302402000220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 99 - }, - { - "comment" : "dropping value of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3025022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0200", - "tcId" : 100 - }, - { - "comment" : "modify first byte of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022101b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 101 - }, - { - "comment" : "modify first byte of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220757291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 102 - }, - { - "comment" : "modify last byte of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3e0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 103 - }, - { - "comment" : "modify last byte of integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260eccf", - "tcId" : 104 - }, - { - "comment" : "truncate integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3044022000b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 105 - }, - { - "comment" : "truncate integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30440220b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 106 - }, - { - "comment" : "truncate integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f021f747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ec", - "tcId" : 107 - }, - { - "comment" : "truncate integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3044022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f021f7291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 108 - }, - { - "comment" : "leading ff in integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30460222ff00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 109 - }, - { - "comment" : "leading ff in integer", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221ff747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 110 - }, - { - "comment" : "infinity", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30250901800220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 111 - }, - { - "comment" : "infinity", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f090180", - "tcId" : 112 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022101b7babae8332b54b9a3a05b7004579821656e9c5fbb7d96607df713de366051900220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 113 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30440220b7babaea332b54b7a3a05b7004579821eba0a7046d4e595696837e583d9a06ee0220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 114 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30450221ff48454516ccd4ab475c5fa48ffba867de57785e4deb9a082475c2b6e4c602d3c10220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 115 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3044022048454515ccd4ab485c5fa48ffba867de145f58fb92b1a6a9697c81a7c265f9120220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 116 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30450221fe48454517ccd4ab465c5fa48ffba867de9a9163a04482699f8208ec21c99fae700220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 117 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3044022048454516ccd4ab475c5fa48ffba867de57785e4deb9a082475c2b6e4c602d3c10220747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 118 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f022101747291dc2f3f44b07ace68ea33431d6f51cb136eadbe85e7798724b72ec4121f", - "tcId" : 119 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221ff747291de2f3f44ae7ace68ea33431d6fd7fd1e135f8f48dd92138f3135fdc77d", - "tcId" : 120 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3045022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f02208b8d6e22d0c0bb5085319715ccbce2906b1be73ef959189d7a32a60bcd9f1332", - "tcId" : 121 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221fe8b8d6e23d0c0bb4f85319715ccbce290ae34ec9152417a188678db48d13bede1", - "tcId" : 122 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f022101747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 123 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f0221008b8d6e22d0c0bb5085319715ccbce2906b1be73ef959189d7a32a60bcd9f1332", - "tcId" : 124 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3006020100020100", - "tcId" : 125 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3006020100020101", - "tcId" : 126 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30060201000201f0", - "tcId" : 127 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 128 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 129 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 130 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026020100022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 131 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026020100022100ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 132 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3008020100090380fe01", - "tcId" : 133 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3006020101020100", - "tcId" : 134 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3006020101020101", - "tcId" : 135 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30060201010201f0", - "tcId" : 136 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 137 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 138 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 139 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026020101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 140 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026020101022100ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 141 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3008020101090380fe01", - "tcId" : 142 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30060201f0020100", - "tcId" : 143 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30060201f0020101", - "tcId" : 144 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30060201f00201f0", - "tcId" : 145 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30260201f0022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 146 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30260201f0022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 147 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30260201f0022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 148 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30260201f0022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 149 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30260201f0022100ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 150 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "30080201f0090380fe01", - "tcId" : 151 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100", - "tcId" : 152 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101", - "tcId" : 153 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201f0", - "tcId" : 154 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 155 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 156 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 157 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 158 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 159 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551090380fe01", - "tcId" : 160 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020100", - "tcId" : 161 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020101", - "tcId" : 162 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500201f0", - "tcId" : 163 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 164 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 165 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 166 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 167 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 168 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550090380fe01", - "tcId" : 169 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020100", - "tcId" : 170 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020101", - "tcId" : 171 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520201f0", - "tcId" : 172 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 173 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 174 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 175 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 176 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 177 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552090380fe01", - "tcId" : 178 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020100", - "tcId" : 179 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020101", - "tcId" : 180 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0201f0", - "tcId" : 181 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 182 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 183 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 184 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 185 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 186 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3028022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff090380fe01", - "tcId" : 187 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020100", - "tcId" : 188 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020101", - "tcId" : 189 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3026022100ffffffff000000010000000000000000000000010000000000000000000000000201f0", - "tcId" : 190 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 191 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 192 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 193 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 194 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 195 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "3028022100ffffffff00000001000000000000000000000001000000000000000000000000090380fe01", - "tcId" : 196 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1wXRb4CYfi2bGmlX0pziL+v30Q+l\nFRUxgkFcg2G6rKSx/BBe5c6A1RTsEji+riA3pvg2JVk2INRggZ6GghYJJg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "0d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4", - "wy" : "0b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926" - }, - "tests" : [ - { - "comment" : "k*G has a large x-coordinate", - "message" : "54657374", - "result" : "valid", - "sig" : "303502104319055358e8617b0c46353d039cdaab022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", - "tcId" : 197 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1wXRb4CYfi2bGmlX0pziL+v30Q+l\nFRUxgkFcg2G6rKSx/BBe5c6A1RTsEji+riA3pvg2JVk2INRggZ6GghYJJg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "0d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4", - "wy" : "0b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926" - }, - "tests" : [ - { - "comment" : "r too large", - "message" : "54657374", - "result" : "invalid", - "sig" : "3046022100ffffffff00000001000000000000000000000000fffffffffffffffffffffffc022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", - "tcId" : 198 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPNjS+B1pU7CETAnXtWDVJ80u9nBW\niT6tr6UshQE4fVnuQf200QQCznoMXjt0et+jpJC2Kmt3GQaJA0hcC7bcLQ==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "3cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59", - "wy" : "0ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d" - }, - "tests" : [ - { - "comment" : "r,s are large", - "message" : "54657374", - "result" : "valid", - "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", - "tcId" : 199 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5", - "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0" - }, - "tests" : [ - { - "comment" : "small r and s", - "message" : "54657374", - "result" : "valid", - "sig" : "3006020105020101", - "tcId" : 200 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5", - "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0" - }, - "tests" : [ - { - "comment" : "r is larger than n", - "message" : "54657374", - "result" : "invalid", - "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632556020101", - "tcId" : 201 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5", - "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0" - }, - "tests" : [ - { - "comment" : "s is larger than n", - "message" : "54657374", - "result" : "invalid", - "sig" : "3026020105022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 202 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de04503434383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAgNzb8sZixXY16DID2bd3RUlkkCq\neNCKrmfEZ94EUDQ0ODQ41QQeqaOH7o5NToS0RxsWDGvPJWiwcvjyDoeplg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de045034", - "wy" : "34383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996" - }, - "tests" : [ - { - "comment" : "point at infinity during verify", - "message" : "54657374", - "result" : "invalid", - "sig" : "304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a80220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", - "tcId" : 203 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoX9bdaNe1kYjyly/H5GVEpLbDCPw\nwuokw9DK0JiMq8CDp6YYYlwiiUBzC0+j7mT67Lsvwg/d58WLOj9jAEJNxg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "0a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc0", - "wy" : "083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6" - }, - "tests" : [ - { - "comment" : "u1 == 1", - "message" : "54657374", - "result" : "valid", - "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "tcId" : 204 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c31f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBLoMuikaN9sT8zv5DatijATsg5Og\nIAQZ6eqh68yftcMfOgoOaCOkm2Ja1XsSoy1AR5cPw0KPDwBJ7PQmXcEvYg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "4ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c3", - "wy" : "1f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62" - }, - "tests" : [ - { - "comment" : "u1 == n - 1", - "message" : "54657374", - "result" : "valid", - "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c", - "tcId" : 205 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900efa1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaStsgo4P7tY9iuqitzIvnMvocjoe\n058inyBKQ0uJAO+h9varyzjqO4/eOLmMfCcfJ0r1aoxWKNwzKQaa5N1XFg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900ef", - "wy" : "0a1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716" - }, - "tests" : [ - { - "comment" : "u2 == 1", - "message" : "54657374", - "result" : "valid", - "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", - "tcId" : 206 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAM79kWLRPmTLk2h6nNj5dV67Wj73\nYy+AD4SHGHTM7wlUPsvq9+gETvchvi+19UnkuEgNJYdATr99u+8sVLwMsQ==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "0cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09", - "wy" : "543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1" - }, - "tests" : [ - { - "comment" : "u2 == n - 1", - "message" : "54657374", - "result" : "valid", - "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1", - "tcId" : 207 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI34qlk/ADTd6hZK4thqvp6Sqp8e5/StB1uDhe9G6VnftzQ==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e", - "wy" : "2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd" - }, - "tests" : [ - { - "comment" : "weak key", - "message" : "54657374", - "result" : "valid", - "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8", - "tcId" : 208 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237ed569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI37VabA+8siFe21HSeVQWFtVWDhGA9S+KR8ehC5FqYgSMg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e", - "wy" : "0d569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232" - }, - "tests" : [ - { - "comment" : "duplication bug", - "message" : "54657374", - "result" : "invalid", - "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8", - "tcId" : 209 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043f7137e42b6c5d98c6bb61bce91426f8e2c2f33fdc893a0d32be1ba0042c21c59c0df75782993e9a31ef773dc73eeb038cd6594f43ecca77fe586105efa19833", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEP3E35CtsXZjGu2G86RQm+OLC8z/c\niToNMr4boAQsIcWcDfdXgpk+mjHvdz3HPusDjNZZT0Psynf+WGEF76GYMw==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "3f7137e42b6c5d98c6bb61bce91426f8e2c2f33fdc893a0d32be1ba0042c21c5", - "wy" : "09c0df75782993e9a31ef773dc73eeb038cd6594f43ecca77fe586105efa19833" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "304502203c3fe1264b2995df966337a6ede98fc5c71893e352696703cf863c7e63ac0627022100bcb0a9a02e57ce80f72d91eee92a99ba5b16a3411f9dd541bfdf44a7f2ad54cc", - "tcId" : 210 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "3045022100a3f9d3ea2c35bb1899508129e0edaf40292ec3b895dc0c6396d9b162b8d88134022073a92358fc9921bf80b3f0f6244d73b141f007a632e8c3cd1f988752e6492c79", - "tcId" : 211 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "304402203c137c3cf8feb9eb4f7f5984e954918dd408b4df79534150919694d07877067f02202ca4c9d4440262934ca5c8b2cc4bfab3348462b5ab3a308d097dee9b8077a0c0", - "tcId" : 212 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "3045022005916c5b5d012f85a11fb8adccee8403674dd259e9b158594a3979346d38620c022100945e551009e002951ad9551ed507feca41103c3bf23a156eaefd0c844f3567be", - "tcId" : 213 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "3044022007c1801de1ec0c089fcbc6301deaa0c161ae59c7e367c6f0376d3fcfcbc6a3e5022006d8ff0b593ed08b35e781551e8ca8222a8f4524e07dc055ec9b78567fe7cd81", - "tcId" : 214 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "30450220204ff2e911d442d3e46979b2177894bd07cf25485b990f6f162335f916e9d2d00221009825c6539cc3a4d1be8ef523fe28f99f5445377f70471bffbd88362909ee4fde", - "tcId" : 215 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "304502206a2e4b1eda9b5e5426e0fe6f2fe3180793ec1ae414b4c1164c1cb85a85af49b00221008a40315be22f196eb6d4dca64adab267778eaef5884a074573cb4f2bed185519", - "tcId" : 216 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "3045022100aaedd77d46a678ca6200a38fcb35550d6c523b6e929efe621673307c295c7de602201dbf3d1edcebd7f7caa604ec3d967a213c57ca2f016ed1c281a2bbce2978c59a", - "tcId" : 217 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "304402204491da1b704c0410cf6d3ed7c40e770f35d54dd79eb7646537b5e48654b9a28e02204118b53ab6da09a9fcc23af86d8fb8db903a596883167c29042bc13618a3a1b1", - "tcId" : 218 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "304502205f9da7e8a353a0b324b512a6d7bc9daa655041c09e1aebd281f85b6445ba7ca3022100fb1386685b75f05d836a9a7c2aa698b543fac3cb3a54a256efa9f6f1efaaaedb", - "tcId" : 219 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004013d6e38dfa75ddb2e7822a68192ba40b947bdbbb666d40c63d03b757eb512ed826bfe58bb2706af6ed7b771c98d86133a8d6f5ac6ec22c589cef90e43480f2b2bee0061d76af46853de2a9e2b444cba5adbeb38ad82541a483350c313ff259b93e0d64085566c6c2bb6ff0fbdbd46e69c48b37ec3905d06234bbbd8ca4198d564c8e465", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBPW4436dd2y54IqaBkrpAuUe9u7Zm\n1Axj0Dt1frUS7YJr/li7Jwavbte3ccmNhhM6jW9axuwixYnO+Q5DSA8rK+4AYddq\n9GhT3iqeK0RMulrb6zitglQaSDNQwxP/JZuT4NZAhVZsbCu2/w+9vUbmnEizfsOQ\nXQYjS7vYykGY1WTI5GU=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp521r1", - "type" : "ECPublicKey", - "wx" : "13d6e38dfa75ddb2e7822a68192ba40b947bdbbb666d40c63d03b757eb512ed826bfe58bb2706af6ed7b771c98d86133a8d6f5ac6ec22c589cef90e43480f2b2bee", - "wy" : "61d76af46853de2a9e2b444cba5adbeb38ad82541a483350c313ff259b93e0d64085566c6c2bb6ff0fbdbd46e69c48b37ec3905d06234bbbd8ca4198d564c8e465" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "30818702411b01186e46e19d71dc2062453be3b4b94c27556069ac5211f6cdb99d4b4d89405c2da8663a32dcec5515cb7357564b32a6ce33f379f3df35b4e2a5db855ad1d7be024200efea92828d6cf125504a247141adc9ecf35fde30c7e0487eff4fbe2f3949b7788d034968a198dcfb4ad1bb6b873ef9f5c8683757aa716f8c00dbc1ccc534c2fece", - "tcId" : 220 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "3081880242016f39b566c7e037f0c5dfe9f453fb1dc488fa610c341408333326cb632d16dda66af7286e4237de3310cffd6863398257fe2c9e1deb30d61d098c7d5c255b4b45d9024201a49858926129db492d53130bedd4c9be18ac9f7bfd7d62eaf99fe12f58e81d2786b12da9c13b3f025f94f5398e784e909ff363125b98dc35ba850400ef8e4efa2d", - "tcId" : 221 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "308187024200fcec8495af424d3d6468cf79a0b2d6a2ff7d3c249e78ea1f157e1558066e5118558a830ba105dc8a29b8375642593f0e5c2d23b62a39954ad7a4be3e82a69d817b02410960873c13cd81af95e3980db5fdc537bebfc9ebae4d94d05a276d3bdd86b65ec60175471ae661e16c225c6e17635664a20e8160f7365e4034ca625642de17d479", - "tcId" : 222 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "308187024171ad3beb8abd01e53fed56ea34f1bd9ae252d290e5c5ae364ae60ce67b0f42186254db2783333a97eeabf2a84b6bcb4683107e03d97bb3e67d400cc8c314a20939024200dc4afe3dca6572fd4a56ba150d3a5266d7828f2c764c416fa2b2e64b1c694040d1fe8061e742c9212ec4330a0d1e312ad65ec4623821d3327da583b78e6a2539ed", - "tcId" : 223 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "308188024200e53d62a974603f05997fce2df0cb2df83a34cc34b56d71db12cf980db9834e1a322a17fad9ba8d7ea58e2d31de4688527fc5f18424470a51383dbcb177c97c2f6f024201668d2e11b296637f7886291eb339ecfbd630be841b622f81df118cdd16ecebfd0999dca4f82b7fc4f17be81c64d6903ca2a9d854702b6783b1bb47455fc9665032", - "tcId" : 224 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "308186024107250d6a30bc7c47a63f2aebb3eb0b7b9be3bf833f761bf6a56cd1300224e5753c85987f9e61401c0434ab1566b6a3e5519575415c24417c69c39fc43dab11d3cb024157f319ebf47bbfe2b7d38a3da246b135f31baa455c72c5869016d7fcabdaec581efc5b756d0f451ad079f697961225e55495fbac374bb246fd499c1ba7b9bbae57", - "tcId" : 225 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "308188024200d2b0e8938f97fad395fa00d91888f9ba29d4df80626cc278ad233c9a9fdc5fd1762cb6a53bc34d1f6f0b1b42dd0ac5bde7c3f95becf6fe39f356a47ffa7cc2343a024201cb90ceb1c46d9d0f584d0e8b58b21a5e9d7b101dc253a1109fe99715f32223b4e02ac3a880e8eeb7d4a92a7d10d33543fad8c78cfb0700bf794f0497f4c8276c3c", - "tcId" : 226 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "3081880242018a4cffe3fbacdaffe208bbd0c682ffdfc7d77a41d05e71f8e5bfe3685279bc62dd35e3ac1c6bec556bfe3ba0b12c6ef6124dcf05bc61d66856c00740bd271856c8024200a6105606f6bdf923a8dd1a70802a98d42b83293dbd8e78799d9093e22819edc20754e0da61f05c0650069a2f766c0e2caea947d436c9a4cf1d7c4881315fa840b6", - "tcId" : 227 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "3081880242010bc1d5bcda1e17bb6abffe483005885455d6042eb89dc346765017a270524ad03d8bce116860c79f9a33085b6d9a9ec0bd03944bd117cc24a46e4cfd58a75afa18024201db04999a96b4caa3725d1fd178e0471e05ea8800fce35e1cf52d1c8006083898a28cf8b106eb58588a0aa642bb91581aa940f3e02b9fdcb064cf29cf012b449cb4", - "tcId" : 228 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "3081880242017381d2a07c84ebe2fb4356f07c27a2d110d6d1ef7c0a23dfb3a038dbbc53d457d3207039bdfb46bacae9d9ed821d46ce328d3d2acdf9641331b28713998d0398dd024200b6b943a7300d396d07a76c29e80a88c1ff1a6def766fb72022db7bb006e311e6cfbc4452390962461e767a97383d2f908122645e82710dd7fbbeff947d2e488bad", - "tcId" : 229 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e10ba0fabf162af055b859b7d939435cce257ffa274349456403292bb8cb60e9fa1a0a6408df5e4e3675f47621c8f29cda59832a7acedcd3315f6a8ea848afc8", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4Qug+r8WKvBVuFm32TlDXM4lf/on\nQ0lFZAMpK7jLYOn6GgpkCN9eTjZ19HYhyPKc2lmDKnrO3NMxX2qOqEivyA==\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "0e10ba0fabf162af055b859b7d939435cce257ffa274349456403292bb8cb60e9", - "wy" : "0fa1a0a6408df5e4e3675f47621c8f29cda59832a7acedcd3315f6a8ea848afc8" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3045022100f5a4fa630913d5ad82d46e31c305e6b0933b4d9aaaf52997cf86527e36fb784c02206534b74e9d19ae8756afdde2876ad90195863f7c04ee61997eab183d175cf770", - "tcId" : 230 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "304502204ccf6585c28ed8ec75d4023f2f8827c3e87c30fa884d992f53b3515ea6060d6b022100b80de22c729068f2191aa7bb638cb26b0018914981b4ab20a09d48333147b9a4", - "tcId" : 231 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "30460221009f14dfcd5b7963d2f6d3ea0925bfcbdbf3b6a9500d080efbb787f6b792886312022100eae1881b232e64f10dd41b0b94c8c4e662ff3be7d25f1137ede60737664a2c7b", - "tcId" : 232 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3046022100e43b319bd4d94cd6beeb23caf950dbb448d713de4830ac4f749a30149932cdfb0221008118d54087fae841c61eca28622f95a315f8d9f505ba30fea43c17a7b48e6f9a", - "tcId" : 233 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3045022100d66f8bfe727d5697feda9fd2a7be014454329f6a72414b69a181a7a7bc6614d402203e7aa1f19cb90fa30cebd30ce5c3022748f050a418d1d42550a76f4eb497b0e7", - "tcId" : 234 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3046022100db555ffefc339c394d1a8059390a78aa9eba72dc008421f581f78ed1b29c3e910221009082dba3909cfc596ade6108a199d66fc1f726016eae2871c8e343bc14639bb3", - "tcId" : 235 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "30440220190dd08a839b27641f1145fc8e04e8d71a55f2be835d360bd1c5f5d357c749490220474915b4bc6d81437eaff2f438e05bedcfd10f4222984782f3202ee32b55253d", - "tcId" : 236 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "304502200159de0f5c777d001cf22e46cccd10dc01a124f12bc707aaaf305d3e05f0fc1a022100c2314c660d0107473edaf36e718248971522c20adea9e7b1f01fe174510ab00d", - "tcId" : 237 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3045022100ed5137b13ce59346a00a2380e3ff1a874f52172ecd601652dd12e38ce638bb410220776161b448299c2cbcd9856dcd2aeea99423d817895ce9c5d3071c81bf7b0218", - "tcId" : 238 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "304402206c5fa55a3cc7d21fcdbbd353acaff2c33bcce0a7768277dfea9999c49b80e78e022029316ba855bcfdfed36032e648413beaea51675286ed5fc7c67a623ec6ab550b", - "tcId" : 239 - } - ] - }, - { - "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004043d002e8a7578988a8013868221598c76b22591f95b6328a07f60ff1bb55957b1a83fce6aeeb38f2c1489d170e51fd3ba396e4dd4997314", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEBD0ALop1eJiKgBOGgiFZjHayJZH5W2Mo\noH9g/xu1WVexqD/Oau6zjywUidFw5R/TujluTdSZcxQ=\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp224r1", - "type" : "ECPublicKey", - "wx" : "43d002e8a7578988a8013868221598c76b22591f95b6328a07f60ff", - "wy" : "1bb55957b1a83fce6aeeb38f2c1489d170e51fd3ba396e4dd4997314" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303c021c31788aeb1f7e5a8ef02691c94b6ef09c178177e1efd0b66024e2bbf0021c61b855d33928aa6a06ce4744459246912bb546299dc1361afe8b54f6", - "tcId" : 240 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303d021c535fd315dc20cffdb12d9760e78f265b372cbab47d16d452b7323e29021d00b647908b7afbc054bd8da42a2c919542e3f46ee500c701c73077bcdb", - "tcId" : 241 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303e021d00c4732d71dfa662e7954ff9bebfd649d0979fb3b1cff0f003d2bb2491021d00a646d691a1298e7c35a97a3b466a24fb6920b4fadbe879c7753b6cc0", - "tcId" : 242 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303c021c5234ab61f3968397d91b43782dd4c1d6fb9d3efe408179350776fbc9021c2eb655fb47d872f419455708db8eeb887798c8b4f2c7a97676dba7b8", - "tcId" : 243 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303d021c0130551eb38f5031878979407512b41539e433dc286d1fede4b80be3021d009bd60de297786209c5432b806a54b7631621d46de47d48842ff681c5", - "tcId" : 244 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303c021c27d821f9c9cf6318f2a037de60fa4782c351ba4ff80d932d213c4d07021c62ee9b287ba2a0b3e30ddd3fc64e7929bdad9113a1282c10643ad592", - "tcId" : 245 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303c021c1016ed7dbcb22340942aa8f0e7a84101d96dc42eb55ca2d681632e90021c5c16afccd82d04f8c444de978fe63d5450d07e12b203c32b2196b495", - "tcId" : 246 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303d021d00ed965e2d4693550bb57f5e02ddb4decd39a6e04877acff12a73a8235021c355bcf5024e4c59fbd085b93309d9c5bbe1a46753ffb4f721a893886", - "tcId" : 247 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303e021d00bafa121f3eaa86be5126d205415bbac620a5629055ca27d3df9b8678021d00b85d2b3b11517a994317139d28b75772dec6aeb21b1e9fa07886ad8c", - "tcId" : 248 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "303d021d00dc63d34b62603b5f6f5e3a55b65d0571b5d1c5aebe0b2ebb5ffac3a9021c6a88c49cb0d3dd86bae375f93c299dcd32c372ce201e4ab50b31d233", - "tcId" : 249 - } - ] - }, - { - "keyDer" : "3076301006072a8648ce3d020106052b810400220362000437c5fdb948494b3fd8bb5ec5930025276fa55d43f660e1f06b74a4462063f4735ed0a6d9dfdee6797b70655755e8e2e373d53d1f06fe73b766f5c4e06b788dea92b7a17d7cc1abb95d2c90cb2c09b5a2de2e672126debc46516e910952a91dfa", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEN8X9uUhJSz/Yu17FkwAlJ2+lXUP2YOHw\na3SkRiBj9HNe0KbZ397meXtwZVdV6OLjc9U9Hwb+c7dm9cTga3iN6pK3oX18wau5\nXSyQyywJtaLeLmchJt68RlFukQlSqR36\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp384r1", - "type" : "ECPublicKey", - "wx" : "37c5fdb948494b3fd8bb5ec5930025276fa55d43f660e1f06b74a4462063f4735ed0a6d9dfdee6797b70655755e8e2e3", - "wy" : "73d53d1f06fe73b766f5c4e06b788dea92b7a17d7cc1abb95d2c90cb2c09b5a2de2e672126debc46516e910952a91dfa" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3064023063a13e9cff9933f28be9d5512a41e7d360267d969787bb547de033ec25f4ce8d4241739136ef85c87d4fc26b508e6b0a02300d58575ba57ac5677cf1c0c482310f2ac49bd8e7777cbae1c4255a203b43fc4c57cf80d29054305a4816fa585d1d796f", - "tcId" : 250 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3064022f2d4f256b6cb1a53506a80dcc9168819143d406429c5d6a250382de196d5d85f15d55a03c2f75438c50ee88e500bfcc023100fb09a8ac3864ae3392d4ff8c6735525daccc3c406abf2b55127c1073e637a2d6ffebed7d7e76c33080323732f932b061", - "tcId" : 251 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3066023100ab7f86f08c50b3d270130751f841d7872d9cd9da32a20d45af87829ad1b3114ed37c40971abf1b9b901bb90e86ec66ed023100f7a2d3aed355f4fa173e5011da4759bf842c607f45e9716f95a55d9c164901113ed50df4883c52b83db7905d34edb7cf", - "tcId" : 252 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3066023100d6b7b5fb43b88233c0c08039489b0ff9c356488887aead4a4c67761d9dae82ae53346cc4d962453c95d8c6cc8138b15a0231009f9651cff09767563d5821940d16ef418d80b682af5137bfef8ff12ad0c5b0df90cd936b4ac75b750f52b8609b49cb00", - "tcId" : 253 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "30650231009f04654cfa89783482e23f24a63e0161108b963353856216e8f668b61ce33cb552d9eaf110c1ebf0c7d674410e9efbf20230411c2050c857b0f312ccc3e69afff849bf89e0ff3868ff5693d69c16d901d4d976306b8f5e7cc0a908faa88a06aa4839", - "tcId" : 254 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "30650230221ce3308b394973315c1ae936d41cbe103b3c480d0249063b491c6f282b6a003910cd1b53f78333d1d6bd0fc45cb775023100f7ae3e8c0849282145e8d411e69bb9abf8df77da4c794b639d0fa16e828ca74034e0d190636fb902cce42d29df3ae674", - "tcId" : 255 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3066023100fe157fe0d7830b2df78a6f41581b3982e2fe2b37d0c50a90804b9fa51fafb64f88b8a4a2a8899eb85709805626bb2374023100b5e8e146185dd26e1a7178f64377456e2bb56e6e3322d27bc8899a14bed7d8652e09d03dfc1730e3ac8ba1f6f0d7fe8d", - "tcId" : 256 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3065023100d9533df0741a9d3435366d9347259457bf1ace27f436b809a36a04f73a6499aaf1778bfdae763b16f6ab8329beef4cba0230282693221bf9ee2883c2793bccf45bcc50eceafeae3d6f0b0e7e55edda06bc36deebaabb3aee25339b37e7b2fc420f1d", - "tcId" : 257 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "306402304b36a23584076fc30ab2ef9e6b026ce1e60a7d380dc6be69fe2c1e1ec6edb737a8cc85c1486e810d00190cbcb6272bc6023030c794a0cca240578eda7d89b5f0a34b05330e926f7576327550fc444c3aee66c4d913c8d90be9b405486c8c879d1080", - "tcId" : 258 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3065023100d1993840050f853b6b046e3761a6007dca17f24bd96cc38cf08cee3b25ce1142cbe1b23bd97f49f1f73667f9956a0b8502305d1b757f67de261d5b7729a0cb582a0d4133ba6ffb329315328e43a2d3345b670a6c44ddaef6ff4b400616cdc0ecaf83", - "tcId" : 259 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400252ba02b52511e0d27c926f51933deb9da574b65790d0586514afe02478a384c7709702304fa45d891f74ea5b7774658ec7f6bd665b7b857a19946ed97a13e12370122a5e01c6cc84e4ccf55a27b836a31e3faa91a27b8967b85abd815595f76bf7a0ed524ac8730bcb3b0c536907c8d492718bbbcc581d27b8d347fbe7844f65675fb", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAJSugK1JRHg0nySb1GTPeudpXS2V5\nDQWGUUr+AkeKOEx3CXAjBPpF2JH3TqW3d0ZY7H9r1mW3uFehmUbtl6E+EjcBIqXg\nHGzITkzPVaJ7g2ox4/qpGie4lnuFq9gVWV92v3oO1SSshzC8s7DFNpB8jUknGLu8\nxYHSe400f754RPZWdfs=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp521r1", - "type" : "ECPublicKey", - "wx" : "252ba02b52511e0d27c926f51933deb9da574b65790d0586514afe02478a384c7709702304fa45d891f74ea5b7774658ec7f6bd665b7b857a19946ed97a13e1237", - "wy" : "122a5e01c6cc84e4ccf55a27b836a31e3faa91a27b8967b85abd815595f76bf7a0ed524ac8730bcb3b0c536907c8d492718bbbcc581d27b8d347fbe7844f65675fb" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "30818702412a996b82715ac9f1fe285a850a617e51ebabf92b521aa0c8548b6ab3fd218ae9bfd63f04416943a4c6ea6a9d679b770a40fb2298511c9e1541f08f63680dcb920d0242011e06a29b2b4b4342d23a5e1986fd5ec5970719a9afa019b17be2b29655187b0ed1d81359dd48d3dcb8c8ca201b33038dfb5980165de4797ae9108d3544dce9e9f2", - "tcId" : 260 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "30818802420143eefbaa995087d553835fe93afcf43364d834e37302317c0587b7c86604dde272474e7f2501463280e0e979eb59e79e9f7a3236d967230fc5677fad4b29b424a1024201578a2dbb28cb4e7ca50bd237253b7912f3c8a7cb455d7da98c599855838b0dde6ed83276ab8eaefb312756cd3e16e53377358a98b8c612168e84261b510ea42253", - "tcId" : 261 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "30818702420131247501344d5aac53cdc31d65e22ab02bf552c246f0fa92ea7d24999bf6df4474c64af6c892ad05b1c3d83634c3420f55993d10589352674ffbec71552ff66bb102412655b482f9231e3ba0283b96d0a934c6f0c6282f7907e8d0aa1e6707d0410a78d036461b5e5d3cf7f0e7ceb23c24f334d6cbc2f1d1684039a14c22d8538debb62b", - "tcId" : 262 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "308188024201538632e5ba4b1119240dbe68e026a9ffe934ad46f129fae49dd30caf2dec9e45504be132685474c6ba473f39f9439717939b3dc725a82488c77b17358511a3eae90242015d36c05195a17382a229a61a011639f8c309696d68e1f3b95d0053ee23bf6cb6249bf7a4fc9f1517147a33438c66edef6c587f00d3de8635be84a785d5e7baf319", - "tcId" : 263 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "308188024200fafebd657159b7a0f5d9e3b58ceffcb30056407fdbbf345f416d9cfadfc22edd4f31d9ba39a8e3a0ab1a4154f2417ed99cf80600cf95ecb5ce8b0e7ee79cf84c7a024201c47968f0a10144d6f399a270bf8c663eb083c2c6629f13704e855a84d78fe4fd9e4ffd81191882b6ba51b220cb6bc94c55f89a8182460a321325a0c978f57bc17b", - "tcId" : 264 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3081870241138ffe382f05a34b2aea9bc90c2c5cac363d2cbd3af5c4fd1b39e75a92b34d6a1e6f0304a29a1b53651bda15840e1a93971bf20121c2d72d61481b95c3777116cc024201076665a62dd5dc147b30eb6521deaab06125d77b020c756940b21e1ff66f0d9b18b0013427b72a5ace91ccb790f94d0fea8f058f75324d4803283d2d3ea725a09c", - "tcId" : 265 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "308188024201a1f9f065bab50e83ab6c8c9008df1bfcb74f344f02efadab68c41d6f89c082157b978562bd4afea4769fbab392224682ef2683b449888f83205917e0918bbec217024201f7c1b72a0c0be8dddda08219060254bfc1e3e3c65427e89eff7868a7d9cfee31ee6653d455041ffa273b1ea383518b33231da95ea353a4d9ff3e5fa8c94c99e8f7", - "tcId" : 266 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3081880242018270e7745dad6d8488720f4c93b69700d9717503887288c671d916cd649595f9783591833116b2ef912fa72d259ab7114ae3a182a9864a7edd4e6fcb3990649ce702420146242a4a3483946bc090a40ac39339fc124368e7535c84530a98aa3bbcece21909605d4c045b22f611ee5bc33179f11dd0d528c7b64ca241a47a273430b5a4e844", - "tcId" : 267 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "308188024201a04b162ee70667cd609d86eb5410b9d7c0c72a95ff3b3cab5c2d51023806a221d18db37a130be74b32356b29f6e6420bc022f83f60999b4176d5c9e31d900f226b0242011eb2c375e10607769fee41fa0ab61bd7c4b2761776851590e75bc2c91a0d1f5db1e8031df3ae6ae753e7ee9465c7fb547f97ebf080f756d33e323b0ba0afeeef23", - "tcId" : 268 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "3081880242009dc34469da72d84ac5addcb57e8b47186733860fc0ed44ea83ed28987cec9549102e537db86589e27204015cd2b2bf197dba0c21f28f01bcb16e0c0ee623e395fb024200db1653be45deca922f80d620f5524d9ce88cbcc9e5ee6c6be6227836f8badf6d99138bdde1ba7b9ee3395382e827f2adbea608ca51175a64c483f1342193f52bbd", - "tcId" : 269 - } - ] - }, - { - "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d90c6ccc60a40e92013f34fbeaa6d9e765e4a25f937f53faf6dc8595e603a9c4b1a60a5a51531b2fb1b57e38151a859c204f0f6c27b6feb6", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE2QxszGCkDpIBPzT76qbZ52Xkol+Tf1P6\n9tyFleYDqcSxpgpaUVMbL7G1fjgVGoWcIE8PbCe2/rY=\n-----END PUBLIC KEY-----", - "sha" : "SHA-1", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp224r1", - "type" : "ECPublicKey", - "wx" : "0d90c6ccc60a40e92013f34fbeaa6d9e765e4a25f937f53faf6dc8595", - "wy" : "0e603a9c4b1a60a5a51531b2fb1b57e38151a859c204f0f6c27b6feb6" - }, - "tests" : [ - { - "comment" : "Hash weaker than DL-group", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "303d021d00a2dfa28cce02d4006d07d3251a8ad54328571941869f48f3fcbcc316021c6d5cbf4e497d80bb1ad7955b441917872580c8977b4c026420ff449d", - "tcId" : 270 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e49b6e5e078e9aa4364583f037efd94fb1058b9de125cb2a471981c343e662b2beaa75937c479c738574093053a2d54218753a967da74c0064d52e6a4db2cd73", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5JtuXgeOmqQ2RYPwN+/ZT7EFi53h\nJcsqRxmBw0PmYrK+qnWTfEecc4V0CTBTotVCGHU6ln2nTABk1S5qTbLNcw==\n-----END PUBLIC KEY-----", - "sha" : "SHA-224", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp256r1", - "type" : "ECPublicKey", - "wx" : "0e49b6e5e078e9aa4364583f037efd94fb1058b9de125cb2a471981c343e662b2", - "wy" : "0beaa75937c479c738574093053a2d54218753a967da74c0064d52e6a4db2cd73" - }, - "tests" : [ - { - "comment" : "Hash weaker than DL-group", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "30460221008febf29c959ccc9c138a3190b9e22d1721a14351ddb2be669aa4370b944fc318022100d41f7637c75f4f4631aa2dbd42e1282f8a9ac13fb869339d10c3a00a5953397b", - "tcId" : 271 - } - ] - }, - { - "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a884162c27b9b66355f98c71d58a568d1306a3cbb530f527355deabc9a91ee1e7c9a0f0667435ec7ccb2507eb93c5ea8b2326d0e69c1e053e49b55de8d6257a07f1421dcfd49290c962d71ea5e5585917d406bd78a345f721e183e2d53a394b2", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqIQWLCe5tmNV+Yxx1YpWjRMGo8u1MPUn\nNV3qvJqR7h58mg8GZ0Nex8yyUH65PF6osjJtDmnB4FPkm1XejWJXoH8UIdz9SSkM\nli1x6l5VhZF9QGvXijRfch4YPi1To5Sy\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp384r1", - "type" : "ECPublicKey", - "wx" : "0a884162c27b9b66355f98c71d58a568d1306a3cbb530f527355deabc9a91ee1e7c9a0f0667435ec7ccb2507eb93c5ea8", - "wy" : "0b2326d0e69c1e053e49b55de8d6257a07f1421dcfd49290c962d71ea5e5585917d406bd78a345f721e183e2d53a394b2" - }, - "tests" : [ - { - "comment" : "Hash weaker than DL-group", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "306502305158cdcc24d284b3427c1364844c04129b5d2d802bfa10401f81fc9c6fc0a4e66dd9c3d9a9964707494c497a5f702949023100c48ae0e2e4610bf39902f14e9abd0e3e785218711320dd353b0c5c4699f575570e0d6855dfcc8cbf28e88cadc3802cea", - "tcId" : 272 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040024654b7e0621518502ecf70d7dce95c1000dacc7ea72be66462b2ae13befdc7fcbcb188f811c41ab67b0cb6490a8fd51a6561103b7b8b61413ce7324574ef9aa37009a61befa9b2b32c250b96e7868cb9de26e480b7ff608fdd64e02a392e216098a0d3383975375df15671fbe8d32165bf954e8b4b3efcef764ecca11dfda98e2073c", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAJGVLfgYhUYUC7PcNfc6VwQANrMfq\ncr5mRisq4Tvv3H/LyxiPgRxBq2ewy2SQqP1RplYRA7e4thQTznMkV075qjcAmmG+\n+psrMsJQuW54aMud4m5IC3/2CP3WTgKjkuIWCYoNM4OXU3XfFWcfvo0yFlv5VOi0\ns+/O92TsyhHf2pjiBzw=\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "key" : { - "curve" : "secp521r1", - "type" : "ECPublicKey", - "wx" : "24654b7e0621518502ecf70d7dce95c1000dacc7ea72be66462b2ae13befdc7fcbcb188f811c41ab67b0cb6490a8fd51a6561103b7b8b61413ce7324574ef9aa37", - "wy" : "09a61befa9b2b32c250b96e7868cb9de26e480b7ff608fdd64e02a392e216098a0d3383975375df15671fbe8d32165bf954e8b4b3efcef764ecca11dfda98e2073c" - }, - "tests" : [ - { - "comment" : "Hash weaker than DL-group", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "308188024201d9422e516e19f29b1d44450c9a7f63c6621a111f6ac69bbd58a0bcb19dc76d4ffe32dd3ebe796f3b5bf908f882545ba40025bbfd7a67d02507789fe6696384f921024201878e7aa8b9c5dda694c3e9f4bc702ad74ce1e30d959097dfffd173fe57a55fbacfeabe6f514654ea21961f9f2d1f07782f7db156c2807df333de15ec57f58d8099", - "tcId" : 273 - } - ] - } - ] -} diff --git a/t/wycheproof/ecdsa_webcrypto_test.json b/t/wycheproof/ecdsa_webcrypto_test.json deleted file mode 100644 index 021d152..0000000 --- a/t/wycheproof/ecdsa_webcrypto_test.json +++ /dev/null @@ -1,1594 +0,0 @@ -{ - "algorithm" : "ECDSA", - "generatorVersion" : "0.0a11", - "numberOfTests" : 123, - "testGroups" : [ - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044af4f6d1d734798d4c4c6f97c4fff392ee65dc252d617b154ca835ea1535b104fb069171d00e87a92e6c4db1d892bc09b04b5da8bd9b09cfaa41d0a526e55237", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESvT20dc0eY1MTG+XxP/zku5l3CUt\nYXsVTKg16hU1sQT7BpFx0A6HqS5sTbHYkrwJsEtdqL2bCc+qQdClJuVSNw==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "SvT20dc0eY1MTG-XxP_zku5l3CUtYXsVTKg16hU1sQQ", - "y" : "-waRcdAOh6kubE2x2JK8CbBLXai9mwnPqkHQpSblUjc" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "4af4f6d1d734798d4c4c6f97c4fff392ee65dc252d617b154ca835ea1535b104", - "wy" : "0fb069171d00e87a92e6c4db1d892bc09b04b5da8bd9b09cfaa41d0a526e55237" - }, - "tests" : [ - { - "comment" : "signature malleability", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f8b8d6e21d0c0bb5185319715ccbce2902802e1eca070b7226dec70ceca023883", - "tcId" : 1 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "f67dd15cef0128e9a4fb3c3e9958dd08039eba90453e8993a54251e667a317ab7e59ce34928cc502a3b3c3758cfb6f4907a2d463b0aba52291793b5854245944", - "tcId" : 2 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "56179fa191744e602ae7f6ae46e42312c6e336fc83a628ee455c6229b46c33413f0bd962a1a81406a29bc03a4b61c08e9503e75eba0bc29e8bc65494a25d3744", - "tcId" : 3 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "ca3503dfdf49e158b08046eb3ff169ae4b7f299cfd432ad9d7598ec952dac1c11cfc4c46c9eea69e577310202df187d32c058d9fef2d32bc5283642b79d1373b", - "tcId" : 4 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "9483c852f5b725da505e8cf57b9148b2772a1f2acc6f479fe8f176e69e1377f5b3cce9b6a9d46d9af3b992f8e947b72b165ac9e216966d34c533a6626796164b", - "tcId" : 5 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "1656802176c0e98da5512de8f9080f4dd91163c8a7422d1e930d58075309edef88be892159f048816a046d05d426f5d38d38e3f41d52617239fe8f5ae93b1abc", - "tcId" : 6 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "01b7babae8332b54b9a3a05b7004579821656e9c5fbb7d96607df713de3660519000747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 7 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "48454515ccd4ab485c5fa48ffba867de145f58fb92b1a6a9697c81a7c265f912747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 8 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "01b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f00747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 9 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "48454516ccd4ab475c5fa48ffba867de57785e4deb9a082475c2b6e4c602d3c1747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 10 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f01747291dc2f3f44b07ace68ea33431d6f51cb136eadbe85e7798724b72ec4121f", - "tcId" : 11 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "00b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f01747291dd2f3f44af7ace68ea33431d6f94e418c106a6e76285cd59f43260ecce", - "tcId" : 12 - }, - { - "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "b7babae9332b54b8a3a05b7004579821a887a1b21465f7db8a3d491b39fd2c3f8b8d6e22d0c0bb5085319715ccbce2906b1be73ef959189d7a32a60bcd9f1332", - "tcId" : 13 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 14 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 15 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 16 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 17 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 18 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 19 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 20 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 21 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 22 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 23 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 24 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 25 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 26 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 27 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 28 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 29 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 30 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 31 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 32 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 33 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 34 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 35 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 36 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 37 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 38 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 39 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 40 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 41 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 42 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 43 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 44 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 45 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 46 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 47 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 48 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 49 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 50 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 51 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 52 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 53 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 54 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 55 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "tcId" : 56 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 57 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", - "tcId" : 58 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", - "tcId" : 59 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 60 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", - "tcId" : 61 - }, - { - "comment" : "Signatures with special case values for r and s.", - "message" : "48656c6c6f", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000001000000000000000000000000ffffffff00000001000000000000000000000001000000000000000000000000", - "tcId" : 62 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1wXRb4CYfi2bGmlX0pziL+v30Q+l\nFRUxgkFcg2G6rKSx/BBe5c6A1RTsEji+riA3pvg2JVk2INRggZ6GghYJJg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "1wXRb4CYfi2bGmlX0pziL-v30Q-lFRUxgkFcg2G6rKQ", - "y" : "sfwQXuXOgNUU7BI4vq4gN6b4NiVZNiDUYIGehoIWCSY" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "0d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4", - "wy" : "0b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926" - }, - "tests" : [ - { - "comment" : "k*G has a large x-coordinate", - "message" : "54657374", - "result" : "valid", - "sig" : "000000000000000000000000000000004319055358e8617b0c46353d039cdaabffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", - "tcId" : 63 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1wXRb4CYfi2bGmlX0pziL+v30Q+l\nFRUxgkFcg2G6rKSx/BBe5c6A1RTsEji+riA3pvg2JVk2INRggZ6GghYJJg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "1wXRb4CYfi2bGmlX0pziL-v30Q-lFRUxgkFcg2G6rKQ", - "y" : "sfwQXuXOgNUU7BI4vq4gN6b4NiVZNiDUYIGehoIWCSY" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "0d705d16f80987e2d9b1a6957d29ce22febf7d10fa515153182415c8361baaca4", - "wy" : "0b1fc105ee5ce80d514ec1238beae2037a6f83625593620d460819e8682160926" - }, - "tests" : [ - { - "comment" : "r too large", - "message" : "54657374", - "result" : "invalid", - "sig" : "ffffffff00000001000000000000000000000000fffffffffffffffffffffffcffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", - "tcId" : 64 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPNjS+B1pU7CETAnXtWDVJ80u9nBW\niT6tr6UshQE4fVnuQf200QQCznoMXjt0et+jpJC2Kmt3GQaJA0hcC7bcLQ==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "PNjS-B1pU7CETAnXtWDVJ80u9nBWiT6tr6UshQE4fVk", - "y" : "7kH9tNEEAs56DF47dHrfo6SQtiprdxkGiQNIXAu23C0" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "3cd8d2f81d6953b0844c09d7b560d527cd2ef67056893eadafa52c8501387d59", - "wy" : "0ee41fdb4d10402ce7a0c5e3b747adfa3a490b62a6b7719068903485c0bb6dc2d" - }, - "tests" : [ - { - "comment" : "r,s are large", - "message" : "54657374", - "result" : "valid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", - "tcId" : 65 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "SgPvn5LrJoyvpgEHJImlY4D6DcQxcddxKBOzoZoeteU", - "y" : "PiE-KKYIzpovShf9gwxmVAGKebPgJj2RqLqQYi328vA" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5", - "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0" - }, - "tests" : [ - { - "comment" : "small r and s", - "message" : "54657374", - "result" : "valid", - "sig" : "00000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 66 - }, - { - "comment" : "incorrect size of signature", - "message" : "54657374", - "result" : "acceptable", - "sig" : "0501", - "tcId" : 67 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "SgPvn5LrJoyvpgEHJImlY4D6DcQxcddxKBOzoZoeteU", - "y" : "PiE-KKYIzpovShf9gwxmVAGKebPgJj2RqLqQYi328vA" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5", - "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0" - }, - "tests" : [ - { - "comment" : "r is larger than n", - "message" : "54657374", - "result" : "invalid", - "sig" : "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325560000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 68 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e53e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESgPvn5LrJoyvpgEHJImlY4D6DcQx\ncddxKBOzoZoeteU+IT4opgjOmi9KF/2DDGZUAYp5s+AmPZGoupBiLfby8A==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "SgPvn5LrJoyvpgEHJImlY4D6DcQxcddxKBOzoZoeteU", - "y" : "PiE-KKYIzpovShf9gwxmVAGKebPgJj2RqLqQYi328vA" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "4a03ef9f92eb268cafa601072489a56380fa0dc43171d7712813b3a19a1eb5e5", - "wy" : "3e213e28a608ce9a2f4a17fd830c6654018a79b3e0263d91a8ba90622df6f2f0" - }, - "tests" : [ - { - "comment" : "s is larger than n", - "message" : "54657374", - "result" : "invalid", - "sig" : "0000000000000000000000000000000000000000000000000000000000000005ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", - "tcId" : 69 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de04503434383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAgNzb8sZixXY16DID2bd3RUlkkCq\neNCKrmfEZ94EUDQ0ODQ41QQeqaOH7o5NToS0RxsWDGvPJWiwcvjyDoeplg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "AgNzb8sZixXY16DID2bd3RUlkkCqeNCKrmfEZ94EUDQ", - "y" : "NDg0ONUEHqmjh-6OTU6EtEcbFgxrzyVosHL48g6HqZY" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "203736fcb198b15d8d7a0c80f66dddd15259240aa78d08aae67c467de045034", - "wy" : "34383438d5041ea9a387ee8e4d4e84b4471b160c6bcf2568b072f8f20e87a996" - }, - "tests" : [ - { - "comment" : "point at infinity during verify", - "message" : "54657374", - "result" : "invalid", - "sig" : "7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", - "tcId" : 70 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoX9bdaNe1kYjyly/H5GVEpLbDCPw\nwuokw9DK0JiMq8CDp6YYYlwiiUBzC0+j7mT67Lsvwg/d58WLOj9jAEJNxg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "oX9bdaNe1kYjyly_H5GVEpLbDCPwwuokw9DK0JiMq8A", - "y" : "g6emGGJcIolAcwtPo-5k-uy7L8IP3efFizo_YwBCTcY" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "0a17f5b75a35ed64623ca5cbf1f91951292db0c23f0c2ea24c3d0cad0988cabc0", - "wy" : "083a7a618625c228940730b4fa3ee64faecbb2fc20fdde7c58b3a3f6300424dc6" - }, - "tests" : [ - { - "comment" : "u1 == 1", - "message" : "54657374", - "result" : "valid", - "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "tcId" : 71 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c31f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBLoMuikaN9sT8zv5DatijATsg5Og\nIAQZ6eqh68yftcMfOgoOaCOkm2Ja1XsSoy1AR5cPw0KPDwBJ7PQmXcEvYg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "BLoMuikaN9sT8zv5DatijATsg5OgIAQZ6eqh68yftcM", - "y" : "HzoKDmgjpJtiWtV7EqMtQEeXD8NCjw8ASez0Jl3BL2I" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "4ba0cba291a37db13f33bf90dab628c04ec8393a0200419e9eaa1ebcc9fb5c3", - "wy" : "1f3a0a0e6823a49b625ad57b12a32d4047970fc3428f0f0049ecf4265dc12f62" - }, - "tests" : [ - { - "comment" : "u1 == n - 1", - "message" : "54657374", - "result" : "valid", - "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70acd155416a8b77f34089464733ff7cd39c400e9c69af7beb9eac5054ed2ec72c", - "tcId" : 72 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900efa1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaStsgo4P7tY9iuqitzIvnMvocjoe\n058inyBKQ0uJAO+h9varyzjqO4/eOLmMfCcfJ0r1aoxWKNwzKQaa5N1XFg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "aStsgo4P7tY9iuqitzIvnMvocjoe058inyBKQ0uJAO8", - "y" : "ofb2q8s46juP3ji5jHwnHydK9WqMVijcMykGmuTdVxY" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "692b6c828e0feed63d8aeaa2b7322f9ccbe8723a1ed39f229f204a434b8900ef", - "wy" : "0a1f6f6abcb38ea3b8fde38b98c7c271f274af56a8c5628dc3329069ae4dd5716" - }, - "tests" : [ - { - "comment" : "u2 == 1", - "message" : "54657374", - "result" : "valid", - "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", - "tcId" : 73 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAM79kWLRPmTLk2h6nNj5dV67Wj73\nYy+AD4SHGHTM7wlUPsvq9+gETvchvi+19UnkuEgNJYdATr99u+8sVLwMsQ==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "AM79kWLRPmTLk2h6nNj5dV67Wj73Yy-AD4SHGHTM7wk", - "y" : "VD7L6vfoBE73Ib4vtfVJ5LhIDSWHQE6_fbvvLFS8DLE" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "0cefd9162d13e64cb93687a9cd8f9755ebb5a3ef7632f800f84871874ccef09", - "wy" : "543ecbeaf7e8044ef721be2fb5f549e4b8480d2587404ebf7dbbef2c54bc0cb1" - }, - "tests" : [ - { - "comment" : "u2 == n - 1", - "message" : "54657374", - "result" : "valid", - "sig" : "555555550000000055555555555555553ef7a8e48d07df81a693439654210c70aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1", - "tcId" : 74 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI34qlk/ADTd6hZK4thqvp6Sqp8e5/StB1uDhe9G6VnftzQ==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "AVgTd1W5AfeXqQ1MqIh-Ajyy72OyuiwNRV7a70LPI34", - "y" : "KpZPwA03eoWSuLYar6ekqqfHuf0rQdbg4XvRulZ37c0" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e", - "wy" : "2a964fc00d377a8592b8b61aafa7a4aaa7c7b9fd2b41d6e0e17bd1ba5677edcd" - }, - "tests" : [ - { - "comment" : "weak key", - "message" : "54657374", - "result" : "valid", - "sig" : "6f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8", - "tcId" : 75 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237ed569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAVgTd1W5AfeXqQ1MqIh+Ajyy72Oy\nuiwNRV7a70LPI37VabA+8siFe21HSeVQWFtVWDhGA9S+KR8ehC5FqYgSMg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "AVgTd1W5AfeXqQ1MqIh-Ajyy72OyuiwNRV7a70LPI34", - "y" : "1WmwPvLIhXttR0nlUFhbVVg4RgPUvikfHoQuRamIEjI" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "158137755b901f797a90d4ca8887e023cb2ef63b2ba2c0d455edaef42cf237e", - "wy" : "0d569b03ef2c8857b6d4749e550585b5558384603d4be291f1e842e45a9881232" - }, - "tests" : [ - { - "comment" : "duplication bug", - "message" : "54657374", - "result" : "invalid", - "sig" : "6f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569f21d907e3890916dc4fa1f4703c1e50d3f54ddf7383e44023a41de562aa18ed8", - "tcId" : 76 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004011d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f3500a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBHS/JlN8gS2PwWuhCDKOQVZuAxJiO\n9jm5XEaeXLJM8hZUDL68RwvKoEZmEtvebQMJjGmW4KBfApAhg866S1MPTzUAqZ5M\n3IpQwNmNhwlE5WVI3Ez2u789aXjvvI/Id4sz4TLSwYXCCETPPfOU1SIlkxfjkx8B\nMPI/ZQDIgPOoMZq0Sg4=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AR0vyZTfIEtj8FroQgyjkFWbgMSYjvY5uVxGnlyyTPIWVAy-vEcLyqBGZhLb3m0DCYxpluCgXwKQIYPOuktTD081", - "y" : "AKmeTNyKUMDZjYcJROVlSNxM9ru_PWl477yPyHeLM-Ey0sGFwghEzz3zlNUiJZMX45MfATDyP2UAyIDzqDGatEoO" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "11d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f35", - "wy" : "0a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e" - }, - "tests" : [ - { - "comment" : "k*G has a large x-coordinate", - "message" : "54657374", - "result" : "valid", - "sig" : "00000000000000000000000000000000000000000000000000000000000000000005ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf501fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", - "tcId" : 77 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004011d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f3500a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBHS/JlN8gS2PwWuhCDKOQVZuAxJiO\n9jm5XEaeXLJM8hZUDL68RwvKoEZmEtvebQMJjGmW4KBfApAhg866S1MPTzUAqZ5M\n3IpQwNmNhwlE5WVI3Ez2u789aXjvvI/Id4sz4TLSwYXCCETPPfOU1SIlkxfjkx8B\nMPI/ZQDIgPOoMZq0Sg4=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AR0vyZTfIEtj8FroQgyjkFWbgMSYjvY5uVxGnlyyTPIWVAy-vEcLyqBGZhLb3m0DCYxpluCgXwKQIYPOuktTD081", - "y" : "AKmeTNyKUMDZjYcJROVlSNxM9ru_PWl477yPyHeLM-Ey0sGFwghEzz3zlNUiJZMX45MfATDyP2UAyIDzqDGatEoO" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "11d2fc994df204b63f05ae8420ca390559b80c4988ef639b95c469e5cb24cf216540cbebc470bcaa0466612dbde6d03098c6996e0a05f02902183ceba4b530f4f35", - "wy" : "0a99e4cdc8a50c0d98d870944e56548dc4cf6bbbf3d6978efbc8fc8778b33e132d2c185c20844cf3df394d522259317e3931f0130f23f6500c880f3a8319ab44a0e" - }, - "tests" : [ - { - "comment" : "r too large", - "message" : "54657374", - "result" : "invalid", - "sig" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", - "tcId" : 78 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004019a029c77fed04cab1ab8937fda8128fc19bf8c41a8f242f6a9ca6f0ae813c1709b8b03e26a9298fe59f99e3706ffc28c43d26a11690d2ffd815a33ea329076697800125b2a4b635f514fd5d63215672f311ae5935c1774ed5d8a44897b68191e6369ab26df915e2066a943e59a3577319dac5a86640bc8c718d2b159479fdd22d11441", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBmgKcd/7QTKsauJN/2oEo/Bm/jEGo\n8kL2qcpvCugTwXCbiwPiapKY/ln5njcG/8KMQ9JqEWkNL/2BWjPqMpB2aXgAElsq\nS2NfUU/V1jIVZy8xGuWTXBd07V2KRIl7aBkeY2mrJt+RXiBmqUPlmjV3MZ2sWoZk\nC8jHGNKxWUef3SLRFEE=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AZoCnHf-0EyrGriTf9qBKPwZv4xBqPJC9qnKbwroE8Fwm4sD4mqSmP5Z-Z43Bv_CjEPSahFpDS_9gVoz6jKQdml4", - "y" : "ABJbKktjX1FP1dYyFWcvMRrlk1wXdO1dikSJe2gZHmNpqybfkV4gZqlD5Zo1dzGdrFqGZAvIxxjSsVlHn90i0RRB" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "19a029c77fed04cab1ab8937fda8128fc19bf8c41a8f242f6a9ca6f0ae813c1709b8b03e26a9298fe59f99e3706ffc28c43d26a11690d2ffd815a33ea3290766978", - "wy" : "125b2a4b635f514fd5d63215672f311ae5935c1774ed5d8a44897b68191e6369ab26df915e2066a943e59a3577319dac5a86640bc8c718d2b159479fdd22d11441" - }, - "tests" : [ - { - "comment" : "r,s are large", - "message" : "54657374", - "result" : "valid", - "sig" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640701fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", - "tcId" : 79 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e99900a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAX1BZMINJ+eu7TRxVwK/M9iFi7B3R\nLvPtkGZWkk/9mcq58GsOshjP8HikZ3pc4cwHZSvJdq78cywo9n7weKQ06ZkApdFN\n8xBjDXbsA8tvm5W/GiJDgQXIjNn9PayA+Fet04Jx2LqQFoSybUNtSoWa1M2l6Wd7\nc8qz8+XkGj15lmByeas=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AF9QWTCDSfnru00cVcCvzPYhYuwd0S7z7ZBmVpJP_ZnKufBrDrIYz_B4pGd6XOHMB2UryXau_HMsKPZ-8HikNOmZ", - "y" : "AKXRTfMQYw127APLb5uVvxoiQ4EFyIzZ_T2sgPhXrdOCcdi6kBaEsm1DbUqFmtTNpelne3PKs_Pl5Bo9eZZgcnmr" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "5f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e999", - "wy" : "0a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab" - }, - "tests" : [ - { - "comment" : "small r and s", - "message" : "54657374", - "result" : "valid", - "sig" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 80 - }, - { - "comment" : "incorrect size of signature", - "message" : "54657374", - "result" : "acceptable", - "sig" : "0101", - "tcId" : 81 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e99900a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAX1BZMINJ+eu7TRxVwK/M9iFi7B3R\nLvPtkGZWkk/9mcq58GsOshjP8HikZ3pc4cwHZSvJdq78cywo9n7weKQ06ZkApdFN\n8xBjDXbsA8tvm5W/GiJDgQXIjNn9PayA+Fet04Jx2LqQFoSybUNtSoWa1M2l6Wd7\nc8qz8+XkGj15lmByeas=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AF9QWTCDSfnru00cVcCvzPYhYuwd0S7z7ZBmVpJP_ZnKufBrDrIYz_B4pGd6XOHMB2UryXau_HMsKPZ-8HikNOmZ", - "y" : "AKXRTfMQYw127APLb5uVvxoiQ4EFyIzZ_T2sgPhXrdOCcdi6kBaEsm1DbUqFmtTNpelne3PKs_Pl5Bo9eZZgcnmr" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "5f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e999", - "wy" : "0a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab" - }, - "tests" : [ - { - "comment" : "r is larger than n", - "message" : "54657374", - "result" : "invalid", - "sig" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "tcId" : 82 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e99900a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAX1BZMINJ+eu7TRxVwK/M9iFi7B3R\nLvPtkGZWkk/9mcq58GsOshjP8HikZ3pc4cwHZSvJdq78cywo9n7weKQ06ZkApdFN\n8xBjDXbsA8tvm5W/GiJDgQXIjNn9PayA+Fet04Jx2LqQFoSybUNtSoWa1M2l6Wd7\nc8qz8+XkGj15lmByeas=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AF9QWTCDSfnru00cVcCvzPYhYuwd0S7z7ZBmVpJP_ZnKufBrDrIYz_B4pGd6XOHMB2UryXau_HMsKPZ-8HikNOmZ", - "y" : "AKXRTfMQYw127APLb5uVvxoiQ4EFyIzZ_T2sgPhXrdOCcdi6kBaEsm1DbUqFmtTNpelne3PKs_Pl5Bo9eZZgcnmr" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "5f5059308349f9ebbb4d1c55c0afccf62162ec1dd12ef3ed906656924ffd99cab9f06b0eb218cff078a4677a5ce1cc07652bc976aefc732c28f67ef078a434e999", - "wy" : "0a5d14df310630d76ec03cb6f9b95bf1a22438105c88cd9fd3dac80f857add38271d8ba901684b26d436d4a859ad4cda5e9677b73cab3f3e5e41a3d7996607279ab" - }, - "tests" : [ - { - "comment" : "s is larger than n", - "message" : "54657374", - "result" : "invalid", - "sig" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", - "tcId" : 83 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004013b73be0ec4f18b36fdc20aac9675580a20cc725ed0de6fea63ab6111b4aaecc69b1fdf05bb1c7a71c4b7a5a1eaaff23be15604f405b5ecd3b3ed6afea8e49cd64900912180c981f480d2b8b7438988b03a0c5efdbd2da094f082f7fa57ecc41fde8c65d3c9d80f34f9124e151da55d96d2a9b991672de79449bcc1c0192b7650ae90b7", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBO3O+DsTxizb9wgqslnVYCiDMcl7Q\n3m/qY6thEbSq7MabH98Fuxx6ccS3paHqr/I74VYE9AW17NOz7Wr+qOSc1kkAkSGA\nyYH0gNK4t0OJiLA6DF79vS2glPCC9/pX7MQf3oxl08nYDzT5Ek4VHaVdltKpuZFn\nLeeUSbzBwBkrdlCukLc=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "ATtzvg7E8Ys2_cIKrJZ1WAogzHJe0N5v6mOrYRG0quzGmx_fBbscenHEt6Wh6q_yO-FWBPQFtezTs-1q_qjknNZJ", - "y" : "AJEhgMmB9IDSuLdDiYiwOgxe_b0toJTwgvf6V-zEH96MZdPJ2A80-RJOFR2lXZbSqbmRZy3nlEm8wcAZK3ZQrpC3" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "13b73be0ec4f18b36fdc20aac9675580a20cc725ed0de6fea63ab6111b4aaecc69b1fdf05bb1c7a71c4b7a5a1eaaff23be15604f405b5ecd3b3ed6afea8e49cd649", - "wy" : "0912180c981f480d2b8b7438988b03a0c5efdbd2da094f082f7fa57ecc41fde8c65d3c9d80f34f9124e151da55d96d2a9b991672de79449bcc1c0192b7650ae90b7" - }, - "tests" : [ - { - "comment" : "point at infinity during verify", - "message" : "54657374", - "result" : "invalid", - "sig" : "00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c320400aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", - "tcId" : 84 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401c01eab9ba6ddd21e33421034acd6ac923a409fab349e0380bfaa54b404890086a5e12fb09e1352712cfde15abc2563079a73d333c9c79c670fb06b5d802aa9b77600a76a28d03f657c61bf87ff78e7733a069556d2bd638b79316ab70b5a2809bc8a98a2a843238d4abe2698b2aa6aede1b2541bf3dcd007cf9cd5c4d4969c4f7ffccb", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBwB6rm6bd0h4zQhA0rNaskjpAn6s0\nngOAv6pUtASJAIal4S+wnhNScSz94Vq8JWMHmnPTM8nHnGcPsGtdgCqpt3YAp2oo\n0D9lfGG/h/9453M6BpVW0r1ji3kxarcLWigJvIqYoqhDI41KviaYsqpq7eGyVBvz\n3NAHz5zVxNSWnE9//Ms=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AcAeq5um3dIeM0IQNKzWrJI6QJ-rNJ4DgL-qVLQEiQCGpeEvsJ4TUnEs_eFavCVjB5pz0zPJx5xnD7BrXYAqqbd2", - "y" : "AKdqKNA_ZXxhv4f_eOdzOgaVVtK9Y4t5MWq3C1ooCbyKmKKoQyONSr4mmLKqau3hslQb89zQB8-c1cTUlpxPf_zL" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "1c01eab9ba6ddd21e33421034acd6ac923a409fab349e0380bfaa54b404890086a5e12fb09e1352712cfde15abc2563079a73d333c9c79c670fb06b5d802aa9b776", - "wy" : "0a76a28d03f657c61bf87ff78e7733a069556d2bd638b79316ab70b5a2809bc8a98a2a843238d4abe2698b2aa6aede1b2541bf3dcd007cf9cd5c4d4969c4f7ffccb" - }, - "tests" : [ - { - "comment" : "u1 == 1", - "message" : "54657374", - "result" : "valid", - "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad0000c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31", - "tcId" : 85 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400186365c73588807a51005412db004b45f5f7be3a6074e6119042978dbfbc5a431e16cc930747e6cd7511505b4c9349cedf908a5a9dbd33cdb0aeccbf69454457fb0014620a29a2691d8038d39e1e4de7c4243c8c42601e719945c1297c1a4b10d7415af37bf1ed0ddc9030bce530185dfdfc4658ff635f6bd9660becc8ff9eca4fddfa", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAGGNlxzWIgHpRAFQS2wBLRfX3vjpg\ndOYRkEKXjb+8WkMeFsyTB0fmzXURUFtMk0nO35CKWp29M82wrsy/aUVEV/sAFGIK\nKaJpHYA4054eTefEJDyMQmAecZlFwSl8GksQ10Fa83vx7Q3ckDC85TAYXf38Rlj/\nY19r2WYL7Mj/nspP3fo=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "ABhjZcc1iIB6UQBUEtsAS0X19746YHTmEZBCl42_vFpDHhbMkwdH5s11EVBbTJNJzt-QilqdvTPNsK7Mv2lFRFf7", - "y" : "ABRiCimiaR2AONOeHk3nxCQ8jEJgHnGZRcEpfBpLENdBWvN78e0N3JAwvOUwGF39_EZY_2Nfa9lmC-zI_57KT936" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "186365c73588807a51005412db004b45f5f7be3a6074e6119042978dbfbc5a431e16cc930747e6cd7511505b4c9349cedf908a5a9dbd33cdb0aeccbf69454457fb", - "wy" : "14620a29a2691d8038d39e1e4de7c4243c8c42601e719945c1297c1a4b10d7415af37bf1ed0ddc9030bce530185dfdfc4658ff635f6bd9660becc8ff9eca4fddfa" - }, - "tests" : [ - { - "comment" : "u1 == n - 1", - "message" : "54657374", - "result" : "valid", - "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad01ff391161cc30a398ea5e2eb7028c08ce777b4be52346e9fde1d43f17ff5a3a22625c72660ac8810da281f2732dfbfcc10768f07e5951e93c3119d63b6b562cd9d8", - "tcId" : 86 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002e2a746b55e05bc130d374c8abb8bf651a2e2b025404f08545befcb95c9f7f681f6f5b9bf2ebc45d4c8572921d3ab5dce144ea5d50ebec89b8c8f010ea31494863008c816f122d5d63b5fea00d1a00ed23577f7ef7d48f3973568353d468368ec77cbc9e3c5012839b74833087d51ba3e680ab5375be680ea8c18f7b619f32b141f281", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQALip0a1XgW8Ew03TIq7i/ZRouKwJU\nBPCFRb78uVyff2gfb1ub8uvEXUyFcpIdOrXc4UTqXVDr7Im4yPAQ6jFJSGMAjIFv\nEi1dY7X+oA0aAO0jV39+99SPOXNWg1PUaDaOx3y8njxQEoObdIMwh9Ubo+aAq1N1\nvmgOqMGPe2GfMrFB8oE=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AC4qdGtV4FvBMNN0yKu4v2UaLisCVATwhUW-_Llcn39oH29bm_LrxF1MhXKSHTq13OFE6l1Q6-yJuMjwEOoxSUhj", - "y" : "AIyBbxItXWO1_qANGgDtI1d_fvfUjzlzVoNT1Gg2jsd8vJ48UBKDm3SDMIfVG6PmgKtTdb5oDqjBj3thnzKxQfKB" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "2e2a746b55e05bc130d374c8abb8bf651a2e2b025404f08545befcb95c9f7f681f6f5b9bf2ebc45d4c8572921d3ab5dce144ea5d50ebec89b8c8f010ea31494863", - "wy" : "08c816f122d5d63b5fea00d1a00ed23577f7ef7d48f3973568353d468368ec77cbc9e3c5012839b74833087d51ba3e680ab5375be680ea8c18f7b619f32b141f281" - }, - "tests" : [ - { - "comment" : "u2 == 1", - "message" : "54657374", - "result" : "valid", - "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", - "tcId" : 87 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400d379f79826b04198df371ab0519d1a7f0a4f199d6149ca8b7f13a5da09cba024fbe7d4ff7fd7a8a93b5cbcaf3c68243f630d47d8f2b652b6a7d6b1c522a75fa9f201c660722d95c83c6b9457944acc671e881e8d17b07362f2f82799456f2f15d662d36aa09d5a5236288d3c1382e3e2308f46867d53c588a370857fae4d32f0a3ddaf", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA03n3mCawQZjfNxqwUZ0afwpPGZ1h\nScqLfxOl2gnLoCT759T/f9eoqTtcvK88aCQ/Yw1H2PK2Uran1rHFIqdfqfIBxmBy\nLZXIPGuUV5RKzGceiB6NF7BzYvL4J5lFby8V1mLTaqCdWlI2KI08E4Lj4jCPRoZ9\nU8WIo3CFf65NMvCj3a8=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "ANN595gmsEGY3zcasFGdGn8KTxmdYUnKi38TpdoJy6Ak--fU_3_XqKk7XLyvPGgkP2MNR9jytlK2p9axxSKnX6ny", - "y" : "AcZgci2VyDxrlFeUSsxnHogejRewc2Ly-CeZRW8vFdZi02qgnVpSNiiNPBOC4-Iwj0aGfVPFiKNwhX-uTTLwo92v" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "0d379f79826b04198df371ab0519d1a7f0a4f199d6149ca8b7f13a5da09cba024fbe7d4ff7fd7a8a93b5cbcaf3c68243f630d47d8f2b652b6a7d6b1c522a75fa9f2", - "wy" : "1c660722d95c83c6b9457944acc671e881e8d17b07362f2f82799456f2f15d662d36aa09d5a5236288d3c1382e3e2308f46867d53c588a370857fae4d32f0a3ddaf" - }, - "tests" : [ - { - "comment" : "u2 == n - 1", - "message" : "54657374", - "result" : "valid", - "sig" : "00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5c", - "tcId" : 88 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e01690d770806bde9f4d2760293aba6076066f1762e8448f0d08724ef311ff7596f35e8b6a9346de65bea924b9d30bb972e3b38878172f9040378a0db47299e979856", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBQA+jvIdILsG6dTRqEp7I95RW59Y0\nOypr4iSQiEuPi4kRTA5flVjXYnrerlP/jON7r5S5nQT3UJjKjj53xr4CvD4BaQ13\nCAa96fTSdgKTq6YHYGbxdi6ESPDQhyTvMR/3WW816LapNG3mW+qSS50wu5cuOziH\ngXL5BAN4oNtHKZ6XmFY=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AUAPo7yHSC7BunU0ahKeyPeUVufWNDsqa-IkkIhLj4uJEUwOX5VY12J63q5T_4zje6-UuZ0E91CYyo4-d8a-Arw-", - "y" : "AWkNdwgGven00nYCk6umB2Bm8XYuhEjw0Ick7zEf91lvNei2qTRt5lvqkkudMLuXLjs4h4Fy-QQDeKDbRymel5hW" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "1400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e", - "wy" : "1690d770806bde9f4d2760293aba6076066f1762e8448f0d08724ef311ff7596f35e8b6a9346de65bea924b9d30bb972e3b38878172f9040378a0db47299e979856" - }, - "tests" : [ - { - "comment" : "weak key", - "message" : "54657374", - "result" : "valid", - "sig" : "0090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf00a24fbd602ff7012b6b00e9aa1683b45bfa2d62dc768737e8da92cad52f069efbea526acc68096fc0ef9960c6b989bf8922aea38fd463d02c0e7c25e336f32b0874", - "tcId" : 89 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e0096f288f7f942160b2d89fd6c5459f89f990e89d17bb70f2f78db10cee008a690ca174956cb9219a4156db462cf4468d1c4c7787e8d06fbfc875f24b8d6616867a9", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBQA+jvIdILsG6dTRqEp7I95RW59Y0\nOypr4iSQiEuPi4kRTA5flVjXYnrerlP/jON7r5S5nQT3UJjKjj53xr4CvD4AlvKI\n9/lCFgstif1sVFn4n5kOidF7tw8veNsQzuAIppDKF0lWy5IZpBVttGLPRGjRxMd4\nfo0G+/yHXyS41mFoZ6k=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AUAPo7yHSC7BunU0ahKeyPeUVufWNDsqa-IkkIhLj4uJEUwOX5VY12J63q5T_4zje6-UuZ0E91CYyo4-d8a-Arw-", - "y" : "AJbyiPf5QhYLLYn9bFRZ-J-ZDonRe7cPL3jbEM7gCKaQyhdJVsuSGaQVbbRiz0Ro0cTHeH6NBvv8h18kuNZhaGep" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "1400fa3bc87482ec1ba75346a129ec8f79456e7d6343b2a6be22490884b8f8b89114c0e5f9558d7627adeae53ff8ce37baf94b99d04f75098ca8e3e77c6be02bc3e", - "wy" : "096f288f7f942160b2d89fd6c5459f89f990e89d17bb70f2f78db10cee008a690ca174956cb9219a4156db462cf4468d1c4c7787e8d06fbfc875f24b8d6616867a9" - }, - "tests" : [ - { - "comment" : "duplication bug", - "message" : "54657374", - "result" : "invalid", - "sig" : "0090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf00a24fbd602ff7012b6b00e9aa1683b45bfa2d62dc768737e8da92cad52f069efbea526acc68096fc0ef9960c6b989bf8922aea38fd463d02c0e7c25e336f32b0874", - "tcId" : 90 - } - ] - }, - { - "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000482efed52b9053723f669085c5aae160e7b995362aadfb715224c3b75c78c39ede4f52fd89da37fae31b852ce0f5ef5897dfc79de579435a938e1e723a2f4df06", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgu/tUrkFNyP2aQhcWq4WDnuZU2Kq\n37cVIkw7dceMOe3k9S/YnaN/rjG4Us4PXvWJffx53leUNak44ecjovTfBg==\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-256", - "kid" : "none", - "kty" : "EC", - "x" : "gu_tUrkFNyP2aQhcWq4WDnuZU2Kq37cVIkw7dceMOe0", - "y" : "5PUv2J2jf64xuFLOD171iX38ed5XlDWpOOHnI6L03wY" - }, - "key" : { - "curve" : "secp256r1", - "keySize" : 256, - "type" : "ECPublicKey", - "wx" : "082efed52b9053723f669085c5aae160e7b995362aadfb715224c3b75c78c39ed", - "wy" : "0e4f52fd89da37fae31b852ce0f5ef5897dfc79de579435a938e1e723a2f4df06" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "1e63913374b3ead80d4b27bfdf7a50eb063c39bc585ea43cbd12f9dce3071a44a7bbd74b1eac2c54fccec9a3523ca29c95b7ace517ab2b0f4995d220481ce326", - "tcId" : 91 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "e3f4fced8145c2ad8da913d8e15ba196f10a85d44a320c94a09cb194aea8ef1883afe416680a2c0cc915753ec869d9f2117256abecf234164613722bd7a8cb7c", - "tcId" : 92 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "9f30cc8eafbeacc166a1af87664bef8b2add9c1988841f5de200feaaee1393fdd986454e46e388e11d6d3fb10d7eea364b814751975327401ad124951dbdda45", - "tcId" : 93 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "67e8a0b9ba82d0c4e1ad9fad1592a179c6dac964215c8a519863141e053f55dd6c41d1be827bb6b5658ccf8c0ff16d87f3ce16d62a7641b64a107191d6531ad7", - "tcId" : 94 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "9963a72f589bcf7d4a561f8b0bed9af6e5a1309a1f5ab1791ce179d68478fe905c6870382a1ea973a84f85d8365b8d6e67527a5bdc9b80526a28968e7884758c", - "tcId" : 95 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "74a6f79b92039e101a3a45ad6287d16a05107d07899ec858eade5d51b7b5f61d79f33dc00dbed4edb967eda02768731b4dc5bffe6764e7258b2d7bbf223947c6", - "tcId" : 96 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "5a5599a21beec4979655e89a77ab145566296f71095c457a40ef52efd98c4bd5cb7b8beff27c7bb66c5ed2aad94b7e204c4c0a4748d1f35aff4b6eeb25236e4b", - "tcId" : 97 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "d1a536b7938286c12f3d7cc12d779cfd7662dd1b1a80a0e50d6f15d8ec34d1748eedd5e3bf94ce409210e4c58fae664657dc160d41525fd7f62a17d614ccae50", - "tcId" : 98 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "3e594afa1518a97360941a8930785150ec14cbd9d390da407155557e47540fd7590aeb35acb45eebf80e590585329e0543d3ebd6536321429cd6905541667d8f", - "tcId" : 99 - }, - { - "comment" : "random signature", - "message" : "00000000000000000000000000000000", - "result" : "valid", - "sig" : "ff84c44ad23cb2bb9a92309c92c41487e618442f54decd53532f84e14326c49787fccaa0107558605d49ddf10bf83c561dbd75035e3acfd17bb5d49f2de1e15f", - "tcId" : 100 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004008299c4e2bbbc1a061eb5d09c5ca6655e923fd85f08376cc8de849cf0e3cfa45d242976899c27551cccc30f9d9a82d2baa396e020def5454652239858d1eb44a33b00202ef1fbd2b2717fd75e40975aec6ed7f5c060fb04291711402d503840976b9f6ad826a05957f8691b4cfd8e2b4a774908d7c7ea94e47c33e5763309404cdd5e4a", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAgpnE4ru8GgYetdCcXKZlXpI/2F8I\nN2zI3oSc8OPPpF0kKXaJnCdVHMzDD52agtK6o5bgIN71RUZSI5hY0etEozsAIC7x\n+9KycX/XXkCXWuxu1/XAYPsEKRcRQC1QOECXa59q2CagWVf4aRtM/Y4rSndJCNfH\n6pTkfDPldjMJQEzdXko=\n-----END PUBLIC KEY-----", - "sha" : "SHA-512", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AIKZxOK7vBoGHrXQnFymZV6SP9hfCDdsyN6EnPDjz6RdJCl2iZwnVRzMww-dmoLSuqOW4CDe9UVGUiOYWNHrRKM7", - "y" : "ACAu8fvSsnF_115Al1rsbtf1wGD7BCkXEUAtUDhAl2ufatgmoFlX-GkbTP2OK0p3SQjXx-qU5Hwz5XYzCUBM3V5K" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "08299c4e2bbbc1a061eb5d09c5ca6655e923fd85f08376cc8de849cf0e3cfa45d242976899c27551cccc30f9d9a82d2baa396e020def5454652239858d1eb44a33b", - "wy" : "202ef1fbd2b2717fd75e40975aec6ed7f5c060fb04291711402d503840976b9f6ad826a05957f8691b4cfd8e2b4a774908d7c7ea94e47c33e5763309404cdd5e4a" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "01901935f873695f6d978537d1932a74b594e98ee672348f9a25abe2cf8b8aae31208c90f80fe508c356302f11f4b7d8180aa1c70207483c560133ada3060dce63c9004acb84ee9ca82af573e5ab9ec86820e60d12f20168862cf34429219dd6d8610298af6d01a57c4b5d867acbb9faab0628501a489a6ec63273022e72aa1aaec8dfc5", - "tcId" : 101 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "008b2d6f870aa5a329e2cfd2d7b557879ed300154058e2c55569312d929d43e44b761fba188745e047cabd77ad54b5ec3f301ad5725e41dc07e28cabdd0f948d10e201496e8da0f64dda20666dd78dfb529695f32df3d4c33e402dfe85db1ebce89396553aef4d62cb3bac401241ab9938040a6d22b36bb866d3878a7001c646e2ade4fd", - "tcId" : 102 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "0102dc32e8f53daeb00ac0b9ea88a3496b19be2831261660e2ef599c08623c3bb4cb7f9d4e5d24e9b50256b3243292b6a5d7de11e371aae3e88abdb01112b5fc31e400ed4642d1a5d4456a8bd94037d180cfe2faadb1fccf434fcbb12eb0a353064a9764bb8b8d689320e8a83af8045109c2007f1486627cc7ac0c5c713a419075862434", - "tcId" : 103 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "002be69063cb7c574e1f15b2f762b9499411ee01f786e1bd6876c753b640cf0c4861ec5e85f0a7ec4f430ac7f4cd6c8afda97df7f7914549770b46f429931c8a02ad00898a7ded6b2a1ae812bf52fa1afb219b9b28b6b5e8e09f2eb3a3a364eed565664ae25dde99fd3421821e241e28cc9b3168943fb5ef56c7c9fb3a7bbba4c4e20f75", - "tcId" : 104 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "0019c52156a6044e89a69d35d5ea3855108c39f038652be3a3819fd38c4f087510918c5a013b1e06c5c463db7aae0c584316dae3062d90da918ff474e687d7bd9c5101caf79795bca185e27c985083ee936455d1c60c1c7e3d95e032cef0d80bf1426df5cdf1b9a5edbec533bc737c24b77b4694f233ec2f5e88d9effdd2a9b8d3b800d4", - "tcId" : 105 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "00e903e8ad55d36cfdf951f631d4226b5bf79c17e7c2f53c4dabecfbf8675d38ed29e150fbf1d86f44c730df7777410e9df72a5a88cbe5f52e083585d1765ca3055300b85d63f3c4e2f36691e165026696a9eeb8adc4c0e32bf56c03de418eed3fd48057e9d402dc124d710e2536986472cf75b87ec283574223cb193af34966ea93183f", - "tcId" : 106 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "006c5437ca8b2f853c2a4216d9e7379c4400bd5fb2b74d6c4af5658589d4894eff0c754465569c45804c0b3b105a917ea53006cfbc7f0e967b14014dda4f1a6a3f0101620b46f91afbde439d2f479555ed03b5210df454926d2473513b6342016bbb24b1eb10f16d5666732b977ca4938dfed9bbf36aab261f924f153a4eded721da124b", - "tcId" : 107 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "005f49f8e46ee467fba634e7b2c7a089eabadfd82727a4dd4e8e20c2eef15d795cf287c62f86cc64cd988b83a4271084b32c2176ef15815026220c17a5d1255e953e01bae15b61f0ad85db8c4aaa70aab509e6ebf32ffab91c90e63da1670f94d1ea54d50e98dfb3f67626a27c047b457a20fdae6110acd4ffc96f17d38e90af8bd7b819", - "tcId" : 108 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "0044a5b08f9d5031efe823a3f7b2226ea7c88e7d770acd5943a5804fe6f48a1421aee3c530145c20680ae35b198e5a0565a71748b37f3944708d40e1acaf928bdd7f008d5fbe874e1b709f4b20e78e08755ce1792a724bdc2e48816193d77e95e021f1baf99c8d26a981b5c882c56a70f8a06dec227a3f29204f9f582c72eaccd1f96165", - "tcId" : 109 - }, - { - "comment" : "random signature", - "message" : "0000000000000000000000000000000000000000", - "result" : "valid", - "sig" : "0077751cca360c5abf093605729cfc68e1c80b255b01e3d12b632d00b6dfdc8e37c74cf4d862d66c7989d2f999af58d33720cae0aa83251a968be4db122d3470c9f901af02304c5bdc546c2d06785ef906367d7117e6efec63151ad02d5346f7253206a70125dde96824f17005aaaebaa50f7c4d2bc1f7b653075fbc9c1a8afa225630c2", - "tcId" : 110 - } - ] - }, - { - "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004820ee7b7457b52790f012e3f0a0e315d6a4270ff8ffeae9404a4c43d1e47a8fcfcae1a6ff4751635f42aaf94b0e3654de80847146fb7360f4aee71cdbf54eb16387d07d6e6894be68a5dfb62aed5b1f839596ea7bac188a4b766eb94e33f22d5", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEgg7nt0V7UnkPAS4/Cg4xXWpCcP+P/q6U\nBKTEPR5HqPz8rhpv9HUWNfQqr5Sw42VN6AhHFG+3Ng9K7nHNv1TrFjh9B9bmiUvm\nil37Yq7Vsfg5WW6nusGIpLdm65TjPyLV\n-----END PUBLIC KEY-----", - "sha" : "SHA-384", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-384", - "kid" : "none", - "kty" : "EC", - "x" : "gg7nt0V7UnkPAS4_Cg4xXWpCcP-P_q6UBKTEPR5HqPz8rhpv9HUWNfQqr5Sw42VN", - "y" : "6AhHFG-3Ng9K7nHNv1TrFjh9B9bmiUvmil37Yq7Vsfg5WW6nusGIpLdm65TjPyLV" - }, - "key" : { - "curve" : "secp384r1", - "keySize" : 384, - "type" : "ECPublicKey", - "wx" : "0820ee7b7457b52790f012e3f0a0e315d6a4270ff8ffeae9404a4c43d1e47a8fcfcae1a6ff4751635f42aaf94b0e3654d", - "wy" : "0e80847146fb7360f4aee71cdbf54eb16387d07d6e6894be68a5dfb62aed5b1f839596ea7bac188a4b766eb94e33f22d5" - }, - "tests" : [ - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "6d61307eb3042c72fa2e5051e5d7fd969357bbf7a77ef28db8e5c35431a253e47fd271c5b14a377f41e9db9353c33e848bf9412381b9fe33fdb00757af2e08440d36d4fc7ee0c085850daae1f8df972ab8299f381be2951e8e0b1e1eb9b5f803", - "tcId" : 111 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "87c43936c6b260236bc47417f0fdc6c5dabfd38576f74135dff1fad9daade052098c82e46e1dd4577168dab9a2af95f1a7f1fd50ee1a7b34b4ddeea66ce3b0455377c47cc75cbdcd7f7848b3dd6c567dcfcb77a29951ea6bf5e6d30bfbd7b064", - "tcId" : 112 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "cacd409cefcf1fc0d10b7f4cdfd751c4e207a71f7e602bfb855a592f5b33e6d666443ee9c9abd1258aa65ca06318447e50fbc450a2d2d6669a790cecac7748bc11111429fa0631a1c2f8ce0d8abb60d2b699db316f1b88e748f3f8af2b4623b2", - "tcId" : 113 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "8bfd7fe7562e19381fe51cdf5784fc8248e71a19ec73db9ab59a49eb28bd05763b0789072a6449dbcf32dc227eebaca8c7f49385fd9e3c8c4199030e238bf1c38b0000a03bd230d303cd0cb06e9a1cf70248c35da5258db2bb2047ff4b13bd9e", - "tcId" : 114 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "4936aacd98530d41afb1adcb0429d6e18d55b8956f7996f47dc5fe712bb5484ea9c992cc8fd7c5e50a5312c9a1fca21e68a97212b13a2d1d95fe45a434051cdebdb4886e9f23392384a32f61b50990e123241b06813095ffd557d181af38cdb3", - "tcId" : 115 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "323afee80faf41d30344b29d7c5dc63960c9f229f2cffe66a5d58fc0918ff15996e9e65879aad3c9ebddb3f67568db09f70abf2c40cd360dec66fd59df3dc3b845f90657e82f4b9f1da8aab9df5f45003224cb4b6519274d2925b245edbc3543", - "tcId" : 116 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "e52d47dc305382258dcfc364bcfbec863e844c75768dee340c9a5c6f0f98904726f500a2997f8f835a4db5968e6f727b7e9e3a2c64e66064f15a527a8a44396c29db47397058d0498cca36ed93ae76d92918087fd367e2db74ca807db6d33d1f", - "tcId" : 117 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "bffd543c002ab7740588aef8212205cef78baa907ab537634f5c3cfad76013d5085ec4f734fd085e0e153c6d86cf798bd237c58554f0c00888676c7b0147ffd7e336824775a4f675956be1daf617e2834abdc465c2e72b42032b6364ed926dc9", - "tcId" : 118 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "176847a307aebae41f08db05411eedac6f47f20ffde5a5e10c9bf45d1b244eef2c724497f4857f2f06aee4cac11ac37c9c80f7283350fde434d6b0fbccc8f26434ad2ad9a5bc9e3665dfd11009f68cb959aab1e1c5b2481cd987836854650f7d", - "tcId" : 119 - }, - { - "comment" : "random signature", - "message" : "48656c6c6f", - "result" : "valid", - "sig" : "be2eec483e0c2d9fad3e03163bdfaadc6baef5ffe3373aa1a48cfc0c00fd67da56dff871a98be8fab8645bf5ca645d65aae76f1d6acd4bfdbe683b5315a956ed96f57e82ff04932e837e759b40d8dcc73521a289508a7a71e430f680d6c0fb3d", - "tcId" : 120 - } - ] - }, - { - "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004031fbb3c18dfaff249ed5b7ddcfb0282197fda8708cc4d2c49000939c413dcb907e275efccaec2a13ef98638ebb90c07015df32d9c8cef5c0a3cbccff96d36d5738201b8430c231acde7c831bb5a270cec6d35f5427443a0b0242ff2289ba07c", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAx+7PBjfr/JJ7Vt93PsCghl/2ocIzE0s\nSQAJOcQT3LkH4nXvzK7CoT75hjjruQwHAV3zLZyM71wKPLzP+W021XOCAbhDDCMa\nzefIMbtaJwzsbTX1QnRDoLAkL/Iom6B8\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-384", - "kid" : "none", - "kty" : "EC", - "x" : "Ax-7PBjfr_JJ7Vt93PsCghl_2ocIzE0sSQAJOcQT3LkH4nXvzK7CoT75hjjruQwH", - "y" : "AV3zLZyM71wKPLzP-W021XOCAbhDDCMazefIMbtaJwzsbTX1QnRDoLAkL_Iom6B8" - }, - "key" : { - "curve" : "secp384r1", - "keySize" : 384, - "type" : "ECPublicKey", - "wx" : "31fbb3c18dfaff249ed5b7ddcfb0282197fda8708cc4d2c49000939c413dcb907e275efccaec2a13ef98638ebb90c07", - "wy" : "15df32d9c8cef5c0a3cbccff96d36d5738201b8430c231acde7c831bb5a270cec6d35f5427443a0b0242ff2289ba07c" - }, - "tests" : [ - { - "comment" : "Hash weaker than DL-group", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "f131a61e2bb3c8260b0f1b8fbbd57dfea3194fb9e4ea5eb1f343f67f013358e94f5b1a550bcccd6d6e40d065be590706bba3db852eef1c12d71f5e351c8d1790e8a11af575f13b0c992c4984e1e17d259e4e02917f480847e5c2b9430335ba94", - "tcId" : 121 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400f3762f3ceb3a7dbbad769c6733b665aec3a802f8069345173dfbabe93fa6624e2a65ade6b849e05c59b01c7b709d36933c50c6ffd89e85e959571f8f9a25c1603701fb8f0d50bdfb4dca4e25d746dde110524b00cd6c272b2f5e6db3c99382bcf0b8eec5034645dc139baac5dc23f43c1f91ff8ed086d33192ee2f534fd0ca7a840e85", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA83YvPOs6fbutdpxnM7ZlrsOoAvgG\nk0UXPfur6T+mYk4qZa3muEngXFmwHHtwnTaTPFDG/9iehelZVx+PmiXBYDcB+48N\nUL37TcpOJddG3eEQUksAzWwnKy9ebbPJk4K88LjuxQNGRdwTm6rF3CP0PB+R/47Q\nhtMxku4vU0/QynqEDoU=\n-----END PUBLIC KEY-----", - "sha" : "SHA-384", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "APN2LzzrOn27rXacZzO2Za7DqAL4BpNFFz37q-k_pmJOKmWt5rhJ4FxZsBx7cJ02kzxQxv_YnoXpWVcfj5olwWA3", - "y" : "AfuPDVC9-03KTiXXRt3hEFJLAM1sJysvXm2zyZOCvPC47sUDRkXcE5uqxdwj9Dwfkf-O0IbTMZLuL1NP0Mp6hA6F" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "0f3762f3ceb3a7dbbad769c6733b665aec3a802f8069345173dfbabe93fa6624e2a65ade6b849e05c59b01c7b709d36933c50c6ffd89e85e959571f8f9a25c16037", - "wy" : "1fb8f0d50bdfb4dca4e25d746dde110524b00cd6c272b2f5e6db3c99382bcf0b8eec5034645dc139baac5dc23f43c1f91ff8ed086d33192ee2f534fd0ca7a840e85" - }, - "tests" : [ - { - "comment" : "Hash weaker than DL-group", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "016e9c9ec1320d9403f5b86df59158da27830857f77f58d5c4d34bad9af3f5a422be7f406c994ed865ed6555c326a8f1c7749212cd8dded24f943ff9655072d233bb0127b8318f719866ece8b0092e9c4cbdd212c99e644c1bde2b9c97ff82af6e2e40bbac92e0acd01a2d7a1fa10a7ee725c140b7418c1d5f56688ca0096726987e3aa2", - "tcId" : 122 - } - ] - }, - { - "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004016894136702a1ff2de14be80fa8ee832777d885caa90182281195187a8c24dfeb92bd33685a78dd348ae4042a02fa25524b7c111f04111df9fe3df830dabd8a8dcf00abe007cdd100461bec9a3dc0c51a6da36f9637aec3fee4c781cf016b190c67f87392a59e6afbba6ca89603dcb1ae07a6c695e6e1694ec440fae62214e016db01f5", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBaJQTZwKh/y3hS+gPqO6DJ3fYhcqp\nAYIoEZUYeowk3+uSvTNoWnjdNIrkBCoC+iVSS3wRHwQRHfn+Pfgw2r2Kjc8Aq+AH\nzdEARhvsmj3AxRpto2+WN67D/uTHgc8BaxkMZ/hzkqWeavu6bKiWA9yxrgemxpXm\n4WlOxED65iIU4BbbAfU=\n-----END PUBLIC KEY-----", - "sha" : "SHA-256", - "type" : "ECDSAVer", - "jwk" : { - "crv" : "P-521", - "kid" : "none", - "kty" : "EC", - "x" : "AWiUE2cCof8t4UvoD6jugyd32IXKqQGCKBGVGHqMJN_rkr0zaFp43TSK5AQqAvolUkt8ER8EER35_j34MNq9io3P", - "y" : "AKvgB83RAEYb7Jo9wMUabaNvljeuw_7kx4HPAWsZDGf4c5Klnmr7umyolgPcsa4HpsaV5uFpTsRA-uYiFOAW2wH1" - }, - "key" : { - "curve" : "secp521r1", - "keySize" : 521, - "type" : "ECPublicKey", - "wx" : "16894136702a1ff2de14be80fa8ee832777d885caa90182281195187a8c24dfeb92bd33685a78dd348ae4042a02fa25524b7c111f04111df9fe3df830dabd8a8dcf", - "wy" : "0abe007cdd100461bec9a3dc0c51a6da36f9637aec3fee4c781cf016b190c67f87392a59e6afbba6ca89603dcb1ae07a6c695e6e1694ec440fae62214e016db01f5" - }, - "tests" : [ - { - "comment" : "Hash weaker than DL-group", - "message" : "48656c6c6f", - "result" : "acceptable", - "sig" : "0062ecd31c77761bc89143b044efcb514e9c6ef4b5a0999203e14aba19d3f7b484e20b3833ade5f5f49d30e1282a2b22a14ee8816709595edf8f42f5630f92d303450147d4a41d4ada8896a4462d925fcb7cfd95e57048b73de44f2e292ab3009e3877723b8d0641046b622c65d5c0bde0ff46789ca2c205c6117736c5f971fd208eae8f", - "tcId" : 123 - } - ] - } - ] -} diff --git a/t/wycheproof/rsa_signature_test.json b/t/wycheproof/rsa_signature_test.json deleted file mode 100644 index fca44a1..0000000 --- a/t/wycheproof/rsa_signature_test.json +++ /dev/null @@ -1,3289 +0,0 @@ -{ - "algorithm" : "RSASig", - "generatorVersion" : "0.0a10", - "numberOfTests" : 362, - "testGroups" : [ - { - "e" : "10001", - "keyAsn" : "30818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", - "keyDer" : "30819f300d06092a864886f70d010101050003818d0030818902818100ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0203010001", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrkBTcR9RLbSYPwf75qwIgQv2V\nZunXtgxUEAy24dTtyYWQRn0FAsF/zmnQCsXvtAsssWfYpEq5PXPE0PEJ+1omwviC\nMjb/UXz4RBLhc2ec+uQuBDtv7IH52YS1YlF+b+vh9yKV28P9/BnTJAqnVRVWPzHa\n2DVj86MVrPmgs1GiPwIDAQAB\n-----END PUBLIC KEY-----", - "keysize" : 1024, - "n" : "0ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f", - "sha" : "SHA-256", - "type" : "RSASigVer", - "tests" : [ - { - "comment" : "valid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "valid", - "sig" : "68ea71ee1911687eb54b3d19cedcfd44719d0b24accccc59bdafd84e4eba48ef0be7f115e7073f9f273286a7dcee3b94cdbe208e30ae496987479d3aa12ab0e12685ab592d7693a494e6ad27d526ed3ab5912c7f81e09983931794c2165c22fd859e0f9af1a93a4dfe144098c562731e6059d236b52cb865996c87a9baf7f103", - "tcId" : 1 - }, - { - "comment" : "Legacy:missing NULL", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "302f300b06096086480165030402010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "acceptable", - "sig" : "253e1d19bbe91064f2364c1e7db3ba8eb6dc5b19202e440eab6fbdf28c8c6ec05b812983713c338c72b6e99b8edf506a89ff9fc8e5c2c52362097a56dc228060eca01e1ff318c6c81617691438703411c1f953b21cd74331f87c9b8b189fdffdfe8550bd2bd1d47be915f8604a0f472199dd705e19b1b815f99b68d60bc257c7", - "tcId" : 2 - }, - { - "comment" : "long form encoding of length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "308131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "52f46d508e31f030b17c537888585f919037562e15f1924543601a41f9b701ee416ad73d6576b4eaaa64e685289dc478751dfe2d7e588252bfe2d43f4b3a31c6c6c39a9df884a2fc2e45f09c2150a830974b1c9d26090830b37bf06f1d57be1da34ebb016e9db7ce2c34e94872c89567ff6f2ab35a1a9fb6632e100c7d7af834", - "tcId" : 3 - }, - { - "comment" : "long form encoding of length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303230810d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3f34017b3172aaeec72d208308e9b83150699f86634b948847eab56f0169fef51b5636a96866f4f0f4c649400489e047803a91f2b2f32ab715065e20770c4e2788946b85aca5c90efdd6a9458dd9b6f797f96a3de88d2e4896afe147d8c0389943828100061903a30eaff1dadd98d3e49dba56cdcfa5f215d9c615f974f4a0bc", - "tcId" : 4 - }, - { - "comment" : "long form encoding of length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3032300e06810960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "1478337676aa47ca72ea7557facff06f6c777f56063f4487d345e43dc56a6bc5f8a891085d53a32c9d1c3cf7f469e7f56847b0b1b9b5b784526078271f21d0550afc40f81e2b8e8dec851d87511cace965edceb83cb96c8d6616e1ee75bb22c54412fc942a6f71c9fc609a31a69d34b774a97c1ba4f85cca28d9993db8543f75", - "tcId" : 5 - }, - { - "comment" : "long form encoding of length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3032300e06096086480165030402010581000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "77ba423e600bdd761ed10e7c00698a87fe1322f5f42b2902a0be7a24b1cf44f613fa55edeb2ded0475f8e1a13e5368f9a2bfc4f2f926ef289a2207bf3689fc1c8ec3e5463064a7f51bbc993966cc4016319b7c95f282372f1ff848d7fca753a81d905b3341b0fbf60ba186e750f3171cfc84288eff8742bda432bd6c8dc04f9f", - "tcId" : 6 - }, - { - "comment" : "long form encoding of length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3032300d06096086480165030402010500048120532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "9460ee79bb990bc3fe28cfca92363e6ff6900e3b61b3a402f06024a72b7a65d62094b4419e93900995eb121327f72b26b139bab3e5e2bd0c82e0cf6357f3b16f1c1dd4407a9a820f20e3baaa2259614d9ee3e015e1c1778befa13aff1e545ea1758cba4713631d63180a91b52df394294441642964a024f45b2251c90e002ec0", - "tcId" : 7 - }, - { - "comment" : "length contains leading 0", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30820031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "96ac043d3cada45aed0dbdc4662dcf7855553a5effa1077048b51c7e9bfff7c2bb3486ea42894d4b4afb26a3b3bd32cb68d5c4d8ca2622f50d8c56fdc25baf83b9909ecb096419ddc13578dcc8121007f7204ee82c517ae03de70fa23ef2390602029a0cbc8a96c5b781d857dbf12802aa561f5f41ea35aa0babb91b9f891762", - "tcId" : 8 - }, - { - "comment" : "length contains leading 0", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30333082000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "2a70643572a7cda975d9e2c0827837e60eaa78c297b1ff75b84f654a91fe33294ccbeda52676ece50fcc03018151e66c24940bd0574ab85a6599231d587f4a6e0ae841cb6696e7dcfd182cb75001304e36887bc4fe3b373828f8b0e62ac2300a626c9e6a2cd05bb7910e74da2978dae1948f855b3b455cd30367160e21581cab", - "tcId" : 9 - }, - { - "comment" : "length contains leading 0", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f0682000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "27778e39b45dee1e7003f1d315d3466fc111791187ddc056784c158df92097e123021e11918b6df8d905304db732e83d904bc914271b03def4ee129c3fc8adcc4f81b690e09e70e46c8b920093f304e64ecb7358740e976d28538a9eecf09ec1e1cd47df9107968207b21538cabe076bcc07c3862c46a793fcf638c70a972885", - "tcId" : 10 - }, - { - "comment" : "length contains leading 0", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f0609608648016503040201058200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3a879e9f883b158908014f3617cae3315d47afdadd30840494f68d91c04dfe81bd16a40c7d21238cd1816928d989a232a3492325ab0f95d4426e3fb7d58c9908191dc557d8779dabb282287b7860c30e0796283428e0276447235809882ee990deb0f4312c01e7ddf0690406eeacb660acc6957bb670904cfd8d04df5e3ebda2", - "tcId" : 11 - }, - { - "comment" : "length contains leading 0", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300d0609608648016503040201050004820020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "2b82155f363a3b283ae455f59e41c29dec2fbd8c7438b0e347aec5b38c7c895cb7d326870e4fbdb935fcbb561f223bd926dbe8b95ef5eaab27920dbe30c641e99f526a9bc356af54198b459b59383135a82cd5b6edab7da0b1a51d939b2f9951e1432d637c4f04a3546ed9c890143ae364602b94eabdaa2a45e4bdf0b5bdfa71", - "tcId" : 12 - }, - { - "comment" : "wrong length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3032300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "1dda56dc953aeee7fd76ae7166d92ab9e3d1d9759e76f8f1d7634a73cbf69e39d8249153d7c2d83c9664db13552f0c78df34b8a67e7b6c10bcc61b5ead7ba62ce0ec7ba8ac78d146f7e4cadee6f6250e0bc3100660e7afbe3afa17fa288d97549b4c8cacc00ac5c942673485739f89c9e5e63ad2be97a8f2313f5c5b095e7542", - "tcId" : 13 - }, - { - "comment" : "wrong length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "692c143b82196a391a3546607336e6f3bc047412645cf0def0d62d1b42234c14da138bb7f451b45073bbda2aba23412e83bc40d4e7de3e0684f2cad7d059f2d6831aa3d2ece4964ca75cd41dce23c5ba495c15345b36947b4b5a051fe1b84e148b5ae21f112d2245b1acbaeef9dc4a0c408829b9d2b1b5ab1d3a40af0a27b99e", - "tcId" : 14 - }, - { - "comment" : "wrong length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300e060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "66c31a45b2287425a20f65c3eba9cc58c370882f5fc62921935491fbd516df9baf9b28304a21d9008b61a92779ecfb3b0c03f6d74354f5159956e3fc1d35bd7376289378f05d7a71e05ab32794f2566a54635e8dc64740acbe10a293ceddbebe8499b520f406023a134eb9927ebb788b92488f036d109ec0a40ac52372e847b3", - "tcId" : 15 - }, - { - "comment" : "wrong length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300c060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "7b85536bdcda4ad3fc40129f2ff9dc85d9ec049913784064e7358686640446278a2006d93fb33429407597e5d8c783e3f7aee8a7791d69139f3c802a6547f01bf987415eec2447b0e8c4f3aee7ae2085d141fa34ca6634bc109dede93285d5c40cfcd98bd47ceb9cc1890dfff53b7ebb8038533580c7a67fe14c0c422e20cd64", - "tcId" : 16 - }, - { - "comment" : "wrong length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060a60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "5d77fba3cbb1905d83aa532fcc3227a95d7931bf0c2ab51f8118824de9dc029bd2470adf48b41c694ec7359d00a1336990c30ee368dd40bd681ba74794415d3997e7a756659397bf6abd44ca91c12a8580a3f5d1cdbc7f3be0c23c72334ce9b1419e6540dab73f5ff8ab57d0bbbe92b688bd3495f9344822b622042c2491bc41", - "tcId" : 17 - }, - { - "comment" : "wrong length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060860864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "7b5476fb78f389d1131764e7a13322f86008924c8c098f6d74f2df4dcc5a504cd786b3eaae33295cd1e87a2bbd1a06cb385674d465110a9a990d52de9a67f1c13ecaaa86383d489423c084fae9ecd2e9b109f4f04b8c013e3409128f3a079c068c1ad27bc2a20e76ad149325b7b0f0bd804a4e33949a98aac49076260702b0b0", - "tcId" : 18 - }, - { - "comment" : "wrong length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105010420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "6034e1253e4860a29096e392076794cfcea166a30b340cc09f77baa5952c06d148bd89b750c3112930ef210a50a7d3f6569da89912b5e50e824116e73a15536958f75779506d07e67ec9c0cd8de4b51dfbb0fe56926feed18ffbd83b0cdd50d56326c54adf97e629378ae5f0f02fcda3da1aa98cb1d1990946edec711a85a0d8", - "tcId" : 19 - }, - { - "comment" : "wrong length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105000421532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "a44cd265e1ecea83fc74e9eef746ef173277cc96f69a1798590ddee7ce5b5c34a82ad58a5c042db19005e04eec4159900ea764c0d008c52b94577d1c438661fb767902d9d1bbd6a90bdc4df685ec5951eac81d8b4dd36bceef7b6f919e85b6c994c7cf22a804f15cebe63b77f47b3bc2c2aaa68c6362c27a574b849efafe72e9", - "tcId" : 20 - }, - { - "comment" : "wrong length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "a160aa43f4873cada34bea5ccd2be9dce07940ee1c08eaad524a5019993bc753ce92cccada706b483f106ff20b327b35e7c83955ad3bbff3f26ced3489877d1b5bf285d61afcb30219c02a440da61030e301aadb901a525345d1a651a21c31a62ac9fb71738c3e215a8941ca9a3c4910679c5e774530c28788f6eddd7a31c024", - "tcId" : 21 - }, - { - "comment" : "uint32 overflow in length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30850100000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "1369c78f816a9baf027e255de0c258125be90f35b8daafee87f2ffef2d465e0694af4401cc5cdc7ca78b08d5688ceefbddc02abc5495d47c6829d696f8370ea427e7e0225eaf22cda720bbb5881edd16b19bbf2ca86654c65b4ad481c13fb38af00d77922f46b311f936c51f4610f6bdb514b366aa05f029c1e63e3cfcf9763d", - "tcId" : 22 - }, - { - "comment" : "uint32 overflow in length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30363085010000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "41d4c1ea43cb207af8bfc1552e31da7ca5744b68c4e00c3bf55f4edd4c81e91c01f44fa05290dbaa1fdcdcc775f6032a049b4965345c16aac6994b06cda9e0387dbff96cdb115e014f69bb057faca2f618c70a31edd0beaef7acdcc0fb7c83b2f07a8b9de48aa04b7c973920af5b8dc20aac343251ddf4c2277985c3db1dac2f", - "tcId" : 23 - }, - { - "comment" : "uint32 overflow in length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303630120685010000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "76bae6c330b9ab33aa9f2abe8559c51fb95f953a75e48053ab99078069214b509dd1b5080ac6819e32912619372d71a9ff1a67449dd699e5bc6ec0e18d1893dfb5bd571d933926d05b0d9fd7036ba4556e209369d1c57ec49cd9075e583c257c6fd4899c2a8bbb157547812cc692f264bf54712c71ee090b974d99b4d1629696", - "tcId" : 24 - }, - { - "comment" : "uint32 overflow in length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303630120609608648016503040201058501000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3480a5c22f092f259b5bc4fdb9a33c044c24a645b57d61920effde1dc0bbfe53738023f16025841f9323b40f72c11091941bbdfaf7c2fbf77ad6626dbd6a3b7abb3ee916d96a922b11c86ce80ee67dec619bb98e9246d35a33b11b3a4e2a3a130e8b57ed4bcdd4b4e73aec3f9e3d50d3db5e29cffeb186846c72d09468d018ed", - "tcId" : 25 - }, - { - "comment" : "uint32 overflow in length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3036300d0609608648016503040201050004850100000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "5b3d3a198d4b36c6d9641db181fff59407a25bf1571f85e47bad1eaf138079872b93b9eb51aae09b48d6f4ef56badd96a6584277d8f3c6e4a4e11275f72021b50a1665ddaaa56a2a7caa7da6b4d502c5214e17042811154d411dd2197c250264bb69ba43adf668d4f7b81d932afa55e378214bb19ddeb431f702a91dd11e23bb", - "tcId" : 26 - }, - { - "comment" : "uint64 overflow in length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3089010000000000000031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "1cc5577d04e34550e7f3d136064547efa30b9413e2c423b5a320eaaaf11cbebb91e13bbe3874e4650e057a8e38c8a366c473f35e0de82b22f846721a09e3f279ebdf54c8df395a9041333f09cb7bed5291bc1842857c4ce6ad5a1c2c476c1efddd5fe42824c25e0581aa7bb8f621d3b53566637c6266bb1bd0a5b7fb79c72616", - "tcId" : 27 - }, - { - "comment" : "uint64 overflow in length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303a308901000000000000000d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "6e56d1746105344b34fb8299d173f4a5032cbce3556ca9d1eee35f8b31818efc121a1a9599c24fef8531243016dd6288d67b4bf9fdbf2c90fba5b1661be03531b5e15385ea465d1376010f0af761e8fb1afff7823dcef8dc100d97c192e9a7d03c82321d83fd8ecf67207c65cf182e1104ec5669536070cf1e3fe73c5e27edeb", - "tcId" : 28 - }, - { - "comment" : "uint64 overflow in length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303a3016068901000000000000000960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "37a413f9202591b8860cd9d68515ab522ae800e9a71793b479f1fb74ab8c9b07e72fe82dabe1189d028b813610e5e57c055af2d32837551fdb0cd93d7669a3c02a14c460f4c92136a4d11cfb7dcc76401bb5b699fbc64d302736d68c3591ecd59220107cd63f55c83edd38c4568e6f7749c0d9baebfb7c8ae1bf2179101745a9", - "tcId" : 29 - }, - { - "comment" : "uint64 overflow in length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303a3016060960864801650304020105890100000000000000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "9fa8aac224bb50697103d457e7fc870853b23670ee5b8c7395d68ed82b30db18ae34a569abdcdf19238ffca8f5e435327dbe605bdc1a6dd3eaa3c2beb33f00642984a2034bf3b3e8de3ec7009e35069d5b27253c4aadcb4f163148e157252e3b9334abb6cf0299161c12908529f52de9416ec6218af7a6963fcc987c5024ea71", - "tcId" : 30 - }, - { - "comment" : "uint64 overflow in length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303a300d060960864801650304020105000489010000000000000020532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "0f50bc6b1b94aeb6805dee51c92860693de47c4925ab90b57a46e0485a9afeed45083eade73bee684cd07048e632d1dd24aa2efc42c1f85e4fd7b7058dbeafb53a3d5b1cb1e7dded3352c3c92ded891839263a501afaa78fedfd04546c43d16f7a52b800abc9ab1ef827ae0eb19d9b52def2435f1477a48dff61800b4db830e4", - "tcId" : 31 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30847fffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "9dcc651cc0a1b4d406112c0d1ebd7a9fb5a2c9d9f9cffbeab2d2821e5ed01efa9d191665794649bd1f588b729e8fba1eaa37a5a736a5863973c338a92b2665d6ead13b72a19d2da778febb94b150e8d750340a3b856fca8b3b6e3cbfecb9c397c23f46912ba546ab0f64ed88404ce317f8fb2278b68950e9712d6b11f5cdfcaa", - "tcId" : 32 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303530847fffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "0397d14205c2f52423ef69c874294dc2b37d5be5d5647f7e83f1dd6783cb41cce52e6de1dc8c9e93ca1ef887d4c0ea79cd8b26391d638bbd8080bce830bf1bd7fb1de31346f28d609874fafd4a34fb7bee900441f55589ec3c5e190106d8816cadfcfb445834739cafaaa3903ed93cedc41a76aa0ce18fb49a3a73b7b5928735", - "tcId" : 33 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035301106847fffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "2c3ffd881c1c0ce2e4c98282d6011179a89b1e84b17072bcbbb64164e5e05410d0414a1fdbbc04564f3d80f3891f28c3f02e92bf97b4339b5bd4699614e236d4223cef0688c44b297eb9c0e22246b4cb28983b102a446dc76671206c3b77af6897f2f445512abda37bc9c37257dd4f1c6f0e6ec40929eb6b0058682b9d2f6c66", - "tcId" : 34 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30353011060960864801650304020105847fffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "668bd06eafe953fca6a17b0da0f9006ceadb09ad904786b7530148df7eedc146d20a5472c39677d65e59934c00227fb662b3474596e6072f56d2c00c3d31e66f0da85f4670e75c3f2c910c0fec8c98bc31fb2eceff80350b78aec0d316e9bbb331544d8a3d0b1649291396c717e350bebba3d3c3a0b1d55f010879b8c7b7d4f9", - "tcId" : 35 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035300d0609608648016503040201050004847fffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "87482257ae1d18d0357428b756ae35a48549536a3439ca3c148eee64f4c096d896219097d55c14a25eb1490779f6b1471aed238cc0d6aaf265c12ac086d04de9b79a37518056dfacc12cb4916c17505fc7e2e6c1e0db720a286ea65bde4d3da1d2dcb8d0276e8ce73f3f923209149955285c602572cfd24c82e8d96d45f569e6", - "tcId" : 36 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3084ffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "03aadd447f36952dfe73ae89e5c656b7d37ec92535e547cca62a7747f3831f2f613c7dc094f3d5c4c6b9e02b21ed4626930ef3948b42ed41f4cf468d2474acadf1c75599c5619e4872e6d3dfd93abe92234165135ed265e0c0f64fddf23e50c1f9fdcede8778a8ca008ab00f8afa887da3f4699df9f1140953232f36d035b03f", - "tcId" : 37 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30353084ffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "31afd9a0d827755352b16de04de42e98a8c72f08919ed475530a00c762b8a03bde22634dd856a7eede4b4947d780cb3efe55775e16d7f46f209dbcb5569b2d9469cc271aa850f74960f7c741928055925349821e32e1e0fe5a040010a39a4b6a343f7f35c204106b3617e528a99dcaea8a93766adcfe7be31cdb98f7f7f14669", - "tcId" : 38 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303530110684ffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "16ac0aa2d727ef5fbf0305259ee6fa40827c92419f819673fd64cc2dc2dbfe7ce1cfcf06e26d45f59cb3d9afd30d7a6265863fe856e0a0b1b9508b1e7a2dfb0f87f5ebfc444bbdae504abde7daa33bffb991551940df682c8e2c45edef0563b34d4f11e1955e83c2145ee321165517d1532abd64dc613a280fc30670bba1f898", - "tcId" : 39 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035301106096086480165030402010584ffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "0fe0c75dae62462e66e7277b03c9113727419f7d4db7b2a567c0c189fb6328e1f73d5d44e2196b436f4c2f0f12950d419774c8a51c55f9b2217f904c4f03d5f5754174719dfb85f62795ef75e6d54e703bf231fd8472250f529f85294f29f6c5653ef585079c3b3d8f931da80a46c8afeef37696fb0e7986d413bb1996b8ad57", - "tcId" : 40 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035300d060960864801650304020105000484ffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "9ef993e6ccf015b0b0de75b51213a1c3efcaf66bf83655287484ef28d984806226a7af1704fa6a7fc02984b44449f83ae24761021e49ba6117505c1e609406b002215de27d696643c3354fb48e6c64e7300944edaeb96e4872275f75532f5aab94358d4954522fc7903439e99223d8124e79a3f519050b6b576b77d5abe7c3e3", - "tcId" : 41 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3085ffffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "0fbc20d18ef2dce383ef9640232e44fc287cd97bdb1a18614a77a6d72da5db05df264fff4964b3395445a5b75f4098be8c923ec613efa49e87877c08ce52e9e8b491eaab77ed2336179f1e447bc53e0d9fb9cbd2f2c5e180acdc946df4cdb0a878f27dc010adb1d080330e0bed852181bf97dc4372049ac6ab5802c0d650ffa9", - "tcId" : 42 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30363085ffffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3df42c382b86647a466ffc743dc4713259bd7dfdc909939738e59e3d1eb11d104537762c50eb55d4677a005f7f925ffc7ef0751ffe0c4320a6cf0733e738a404b2672f3dd11fa97bf9d84b786a47c63bbc962d52873765a6de3a57590c2cec68118af81d7dac4f7ce6c101811f2fa364a34fe704d674be5a28531d6e8c4fe120", - "tcId" : 43 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303630120685ffffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "a66d9848a3db7e49d8053c4a3869415c0bb58fd265276c99a66ed1df84e162cfe8f0820229d2ac2f99d9753eed39af46649409cf559ca6edc8c47e550b7a4cf24fac756389e365ad73ddfa67e72d042ec494644c5f277f60864dc90d6cbfdf556396c795192077f51f173477b934871e2a960f7ac3e6e8c8039956a5061bccf2", - "tcId" : 44 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3036301206096086480165030402010585ffffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "7561668d5b2f8fd3190be8244d4d0550043dc0a7e80dfac83eb6f6ddbf448d424082fafc332e473d434b37ce7605352594ce632f4d5de30951581af907fff6c01814022c31a31b3d130673a56b4ef7763bad595053af0174df395b802722f5046e408c978e2b5a9a63f8ea80e932f76513928253f432c8bdc7ee51872d315b7a", - "tcId" : 45 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3036300d060960864801650304020105000485ffffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "5a836168587968425c4e103bae20603e0ae6f714ccdc603a865bb3541b65eee9dd0d9ee21cc66c7a83403fce2413b97f1c1239947e94614f6f2eb731387c8b9d956242bd9fb0545eb2c874ca1a167222034649894b41fd0fa935cf52e583a5e9a4b503cf9f2b238c025bf2e22ed78e7a64bcac1d38302cc2361c71b854e79123", - "tcId" : 46 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3088ffffffffffffffff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "97c602416f2131d34f2a57acecf26365a30c12f77e5beac095533848ce227302092c6f44b47f011d6eb0a91f8024d1935d8bb274c42b57875115a94281fd3cb198f9334758d3200c1c721f6babef332c02a89968a7089f7783993bdd54f809f8372437798d2364040c1faabfb00faabf28cd6ae4ffea29ae2c08a6a7e6074700", - "tcId" : 47 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30393088ffffffffffffffff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "2a970dc291a1dc935cca6985dda703bcc1ece2e40817ce8fa79b6e8fe84e113686e6e65570d46bf22147bcbc389cb5f86f92dc185f556d15e7614cef119fcd7305a31fd2f8710812f35f9f0bd8a1a6e5be3163de644370c67181b7575635dfb9f717f78631d62db714b2a19cea7079ff13c8926ae0c601e4befb6541b02a7e20", - "tcId" : 48 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303930150688ffffffffffffffff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "6e16d110235cd11e32b114ca9dac0cd6a1b041a6d2c61941d49bb458241281f62a4e2b1bf3cebc3e67e8c062ec67a51a599a553b09732e23e1d09fb2b20be7fd311a7122414d535651718a1421d4239276c227b96506729a09e3ff2779dd1c79de4d402623039b826e2bb4d26d1b56775fce14ed0203a9ebd8f042d981705a77", - "tcId" : 49 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3039301506096086480165030402010588ffffffffffffffff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "0716d252488e08f10a25cec94714e6105bd4e13ff019431190864cb0f4378d315f4bd0fdf186e1f2d45a6e97eb04fb2013273e178ce4f82a0b67bf9d021b1d8ab73d753adf2073ee1ad6190b2163139db63778a3670b7cce23f45efb601bd59644a431cbe534ecdf4c4c58ed02ed03863ee32d296b5736c010305fec655b1a44", - "tcId" : 50 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3039300d060960864801650304020105000488ffffffffffffffff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "03e52a2ed638bfb9184a0ee3698502af3a19bb959a984957de5101e6f7a62cccc2ec2a6293fa9d76fabf3ce7e4bf35c65a5f864bc003686a1e05b57c5af6ad588e05a5225479422d7b78c5bedddaec7f4b8c1e9ab7478c1ee253847324e025434b76a01b82a40123ab31ec9862c6016885dc6cbfe97801503369fd3688bdaaf8", - "tcId" : 51 - }, - { - "comment" : "incorrect length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30ff300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "9c4217830da16424a6c80a62e1e1cc0c589e3324267b4498e89af96998f83524b67c703e46860ca55631f1e659096366b60557dbbc8aa8a3a7ff6a887f1afcc55d336458ae25b015061adc391b8a449a7546e48d7e1d783e5684730333b0e2a32c13d36e342e31a9c1c447c0585545e08ce4f6340529413aaba6872280bbd7a7", - "tcId" : 52 - }, - { - "comment" : "incorrect length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303130ff060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "5aa35d19b312de94d0123619500c15ec79fd838f6f18e75e79a11e50d0eca9406ecb38de68e11cf107f80ce2d62573bd1e4062fe78f30cf4bdfe9bb571488887d9dfaa2d6031f3b7efdd0dd78f04d980abfe641f490faee10e86dcc9b729bda0b127b448d33b1e1b76373794c284d1aecb5b813a2defdae3723eafaaf3606eac", - "tcId" : 53 - }, - { - "comment" : "incorrect length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d06ff60864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "971daa114a33b412a3aa1c3a93d5e1cb9810210019fe4e6dd0c70361a99f1a0676563bca2a05915df2ef2e38cab387ea16405d371d1a382ac286f1f97d4fdcf84464413986d54d6e2c7aeb8d5afffdc6de31684ecc7df721957d331bfa588a5f2a65c52f29ba5e4585bc69539e1945f1c4306f8d664d9cedde6684254ac704e0", - "tcId" : 54 - }, - { - "comment" : "incorrect length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105ff0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "1f5bf49483eb6f33a5575ec2a8d49388523ee41223210f05e1f9f73bcb5a8973dfaa0093247460885f034e4ed7cd888c63f9f0f74dba7065f00cbfe5d9cc0dc7aebd7893acc3f32d5cc03763b59a0a846554ef58569f153301dd6080d428c8330718e733b92e76367f4eb75213de1495bdb1a5743deb55a77919adb45bb6bc4a", - "tcId" : 55 - }, - { - "comment" : "incorrect length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d0609608648016503040201050004ff532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "7bffc77cda9ff6bfbbd5a92fa6d4cf5a9f48a083c37a9437e5d82c0ad9f625aac8917c8df8bb4db5ef879431bacf360399c6607711082d6bfc5264f40631f2a742a3494c039146c3f41c7b53aa754afd35410a0a26c6957dfec86797268861036bacb5dc8fa6ca2893b26a3e4b186d4ae774a3822aa1e99ba4bf6bc3d53b2c99", - "tcId" : 56 - }, - { - "comment" : "indefinte length without termination", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3e461f3131735907cec3208f19a7ecfaa8f3bedf587d1c586773899f3fed55cf669ba736c9478b93ff058fc063e62433bb0da4d6da8254a00a6b1e1527dba86d89ca412cb952a988009d8874163683e729c7544b9c83e07b77467b4329e04bdee552ab0513f92dcc7376ed59718b645b50bd50661c783d559eaceb12f7bf5d10", - "tcId" : 57 - }, - { - "comment" : "indefinte length without termination", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30313080060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "81312384fb68fc608aa019df2a251d5a77dbff379c99d2804bc5ea766f051a80dcab2f63ec0b60d2b26391b35a83a5b75c7449fb0b32bd28d78f1138dde33b223d141e293bf007c5d028b34cd6055a4ed7aa31881c8514a2a091690405f8a708da65b34730233168dc08cd81733d2717db133f5d54ada593184bd008e5a7f016", - "tcId" : 58 - }, - { - "comment" : "indefinte length without termination", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d068060864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "1d1150ce975992c50b3cbe98f2373621929c7a90f8dc5a9434a06159fb614acdfbd09851b297505db51aea8132a8f082fe72ea23099aea18494d2a73aaa6b9b6b04ca6d20a88c5dcea917f92c5df7943254fa9c3b1e7eca05a2ae2f796726d9296c880cf0872b8c32082a3a42b9cd099d286b586b0efce95908c8ffd27835572", - "tcId" : 59 - }, - { - "comment" : "indefinte length without termination", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105800420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "7c64ae50883b449f68f941c9892dc1e1f446bc3a779ce9906bf5f6751dd110162ee03a99d1b556ff380f176263846e76aea5e7078927ec6c076a79c64450f6ce8e7a9faab4040a31c145564107120cb524451e4fec4b1ae3702d0b063c660031b61fb6c2d0cb46d17c5f4605124057d5ce3a0ded2019a14718de1374e0e87124", - "tcId" : 60 - }, - { - "comment" : "indefinte length without termination", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105000480532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "65e61f63db5ef3a5de4a11aa39e3f4a6d3d952336c19f0fd60255b376d459d318fe4234a3a6c883090617306f98659577f7670054fc4f2d4c82bf7fde24bd1a231c71644d487d65beead86828e48a3e081fa6d4666b86b899ea57c99a67c0ae75947f2a4e5dbce3025421b3213224e29a55faf0cab8d9411b629baabf7c9ba6a", - "tcId" : 61 - }, - { - "comment" : "removing sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "", - "result" : "invalid", - "sig" : "5df1c4a701c6fc1f2daf6f4538f29c3452667424c05edcbdaba4a1678c8b5bc0e89656a0e48aef46642e0bb597813688904e9d74cbd377a3d9d2c965bd3ed06f136f10367ea3eecf89a97508389448a31ae0e79ed3725d0c4e99a516daa4116479bc53da5d7c2f26c7ec6310d4cb4174bb781405630a9b1c147b0e1da3a7faf9", - "tcId" : 62 - }, - { - "comment" : "removing sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30220420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3e43837b92ebe4df08586fced3dce46aeb2fdb6ec2bd0c58e823f6e6363b9b676786929d13ede60a8d8d0daaf71f0de8880ed0fdac8706eb2f324394145818b641d1049cc7552bc6273d86e901099c78297381faec5c518fb6de429700f3bbfef76cdecbb60088b9f2a77d75b8ff86f06cf23850e3183a267c0ea34f4f839015", - "tcId" : 63 - }, - { - "comment" : "appending 0's to sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", - "result" : "invalid", - "sig" : "26d20fecdcf0b7d6a0472754aecbe115c39d580ce9d78b67d1a6395aa6ce6689bf6d0d96545341fbf04956a48c47f7d30bda017acb1d8e24ce596aacd3e05b1afa571d19f5316142557f765e4c5d080bc5336b79e2c02d8833d076ac9d7794ffbe85c66d0db97e1f5bd2ecb46afb15c19a8fe083fa593420e996a483c2a3a766", - "tcId" : 64 - }, - { - "comment" : "appending 0's to sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "1163082ba8d48352df7eab96a0067539faff24374a630aa4393461a0aac716606625d706699dfc22cf3aff89fcc278f83a0adac87aa0bf192dd86a97031515de1933a23849478ebed20e4203abfb47345bc18f38da5d45e829997b10107c536999b2ce10b2781e1db03e10cc2bdbc2e0ff4c3db5d271ce83c1e7e267e7c1e107", - "tcId" : 65 - }, - { - "comment" : "prepending 0's to sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30330000300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "0ded592bef1fa809841e0d7365e66af12f4239be0928656e7c49a043b9f2b18b9bd2dfe93a810c6e6c8ae6cb8a5c9d6e9d39a96a10b3bbdb92a7b8f575c2db4841c1b628160f956f54e0c58d3b6fd4d640b0a06d39476daba7be04b63a75f38bbf7517d9751d2b12d2dc00e44de7263275dce6b0c0af65d3c04878d6fc1be2ac", - "tcId" : 66 - }, - { - "comment" : "prepending 0's to sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f0000060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "95a42e5d9bd9ad5a8579444e8167bdecec16116a7900117b298c82d5560f1d16e9fbe963764727fef9111f2465e66177b576bdb8c70a58e3df6ff69edd2d6827c97d626b09c24cc49f223cd5d2db2916c54fd8f2ac7301723449b1823f2ff48c56849f7d608312d4bb7a97f90ba218f99cb773fba0a34909618f5d25854d7687", - "tcId" : 67 - }, - { - "comment" : "appending unused 0's", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", - "result" : "invalid", - "sig" : "2344c598a8905b350f20de5cf0cee60253729a54be45b0b19acc109ac15862efab2e7c96e92bc990ed6959a40d725c24c25c8d223a46f490905c1448d8dbf7c9c427bc2e896bdce6d2c1daabdc93ce177f9525ac69d899bded12443338834a16d885456057461740c5140cb9a89a017851f9e99e38c1727fe5ccad9a7a8709d6", - "tcId" : 68 - }, - { - "comment" : "appending unused 0's", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "a08cbe4009080f73cef03116ea949d1dbacce7025f7f61040fb4e052754d5b2d74c2dd06c0dfe1d09b97aa5739c809bec6d8cb27e852e9fef353bfa32964b99495a6dc63d6ce77460ac280c74c0cabdef794f74930f7f8827af1c6690d22ec2df3af497837bbe900a890e3feeaca2c0d16b0017155390ff0396a35ecb62b5992", - "tcId" : 69 - }, - { - "comment" : "appending unused 0's", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f0609608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "500df36bd7d0b56642e2d5dab6e4ec0b148e7b8673cfab40e45c5dad5efc469b3321ce027a3a7ff5689366a18a32267d161a1266491b055f11557c35bd0d4f43df11b8a26f7b13c54be423b87b30b1dca956151c3ec3df03b30918a413179b0e064bf434736b323408e3f1330743c8bdbbb9d466dc1e21710c12e2e3b638b172", - "tcId" : 70 - }, - { - "comment" : "appending null value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250500", - "result" : "invalid", - "sig" : "11a382fe570e0cfeb515955b70ec89a9353cda0c5a5d3cfa3e16e41340eccaa18ba21ad87c4a54a7131c4a7cf9afed68b1c1645568bab9b0fe7dfe0437abbe1fb6cf06bb690f46aa2eca034093ded661c38954341f3f35abe484015150307ecafd06d4309836771dfe29bfe56350d68725e0cd02b1479c6f99eeba2d59f40626", - "tcId" : 71 - }, - { - "comment" : "appending null value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f0609608648016503040201050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "110f3f188df46da58cdd46b5d460ba3d2f8d00d907289634d52a3ce693eb232cd6db738c48c8aa22d923d4f81d55925b3d4ff29ad9869f97a244d37b860cbd4646c6318c041729a7aaf473b61a93cccd62fe223d1be00364f03d722f43c7beff98c3fde573e7e6a0ce7d4a2a4bcf279765e29769bd4f884ce41fb808ac3d541a", - "tcId" : 72 - }, - { - "comment" : "appending null value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f060b608648016503040201050005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "470416ee76f0bbdbd2812b533813e4463b799f4036e6955f3e174f6287e3c73d57c32875607e2eaf06d612cc85170ba5df31286edb645ae9ceb9e62064050f3e7f6b36fe8fdae7a3bd89b6acc523c923b9d3f3e5f57d80c9100b39dde75caf46adcae56668149ce0b80762bc459ac598241dd79c6b4fe0220ad53e3c591243fe", - "tcId" : 73 - }, - { - "comment" : "appending null value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f0609608648016503040201050205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "100714ee0d38c541c2632e96885a7ce0afcb22f0cbd84c556f19d1b44bce75a8fdf141e975dda1812b4465050d4615a51c3b9816606c7ac88d6b684df938e7a8852835dcf5bf0ee45f2e413290691832095af77eef0e7a86f72167dbb03758e68561f7f06afc6e902ba19fad57e00cb43c0fb2a5ead689a146c79c9e6188bd85", - "tcId" : 74 - }, - { - "comment" : "appending null value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300d060960864801650304020105000422532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250500", - "result" : "invalid", - "sig" : "44eaf5ded57ac5c25c17eb31c2e071400b46b9022641347b2edb0b14efbd4eac5f71e4bfbe791e164c003667387e57ae22c6b00e69971d7245e381f6459e5f88d9dc0fdb385b777fe99e5e4d79aec057e41a1e457fe2b91a5f4a8878d2eaa1c3ad8393d281eca07ebd287364a19045029fa7ed0e62a21e5e42a88a52ea4abc8b", - "tcId" : 75 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30364981773031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3b8b17b4c7b66b2fa3be8eb404e32b6fc0b9e56bbe678bddc8f7ef7c042c12ae5290b9c4201b35d10e409f3b7eb7760f5dee7fef09c30ea858b78bc9637dab245b8f83ee83c75a7aa3d5234b0b6dcdec385f8cd305dfef92aa83cc0ecde8f20f08af78b600c1f802695c243502397dd161b6151a72ac20596a7d7efd8e321298", - "tcId" : 76 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303525003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "762d30b302cd76b021e237f28017e48488ff3bb30ff9e92db5b1e76eec2ee91c9af03e1c5038afc22591b1cd8cfae648a33ab77901f9f3736e50eea83f7c7a4546dc55c0265fb17dfdd30250fa3881e34e51b4f2e54554ad098eee952ec888e911a0ea5df42c0560bcb4bdd718c88d834b534917e555c38fd1ec3593b2f25b39", - "tcId" : 77 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250004deadbeef", - "result" : "invalid", - "sig" : "8cbf9d425abef67ff0a7fb648e70b82b1556ac80e46dcff37145b9041bee2bbbfa56817e04994c9cf1123c6df2aeeb1637595eb1e20adef51d657943fd67826ac5d5dfba106ae9cd243f12746917a446ce955034b46ceb0f4d542b7bcd06ad3e6e10899d5338e6d8caf3d4de3cbf45d45a58d946a64d0bc13e97a4ab4e6b6016", - "tcId" : 78 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30363012498177300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "2f4944e5191dde165950a381eee6cce3fd40214e6a9851919f5441b4efb7ae5724db46e92a747937c3c8f9329facb7a71ad5f380e44dad0436cd05fc312bf3cbf05c4873ab2125d605848cf97ef976f7ba8ab6949bdac5152bf1a66945caeddbd89346965a33a8fe0a0ba63b59beb05a44b6d84e1fd93506edcc48da12d488a6", - "tcId" : 79 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303530112500300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "975d07b7295268a8662aedbd2b65b5eb10bb496077f41b90d12d34ebc7e492f0c7f3a41d4164a279f06ea616f91968628be4ceecd4a554477bc76cc6b2e6bda4042dc253327c4b8fc40e9242cbc8b835114a7379a3081bae4b2803a99deb4a540f8c149ca5db3a61c7bc9f61cd7e55521660a06603849896c791a18d1c7360e1", - "tcId" : 80 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3039300f300d060960864801650304020105000004deadbeef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "37352cd11eb5ff7380bfb7c0d3e8d9979ae7cb489a71c31a077d59496547b0c95a760387ed50eefde0b762222f05a6033740f6e010693edf3ef8ab5f9c57f4eb1f6ccd83287dcc2e90857defe5ba4109bf79ad84ab069c85a25758d22536c6882919245fa2d7e7921b3635d984deeb6555cabdfc46a42c75875d55924c8bac62", - "tcId" : 81 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30363012260e498177060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "05df1fa9290a68415b86468a57394c052f00abdd6c65eb4fbbd834cc117cee4bba99764906fdc46e78bd9d554d15cf0284a64dd0c19877115c425a1ba70c1a4339a54ba7fd60ec809b9b789dc06997c2f25e890d8bdb1bc945c0daa8c61feab5bca471bd520126b6db3d6077f55428e0e7374da961dc5cba5397604303eec6d5", - "tcId" : 82 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30353011260d2500060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "1fb1960934683292a4c92cf3d582cd5fe68888a5b0f6c2e64538289da7f96a9efcc36bdbf1fdc0cc0b3b36c6af608309de58c6151112f3a78599ade4a718b359547a4cac9a020e5e7e7117d1bfeb3ec21bfe9732825e624b27ddf8a946eb858b30461706f769a54b0478e0753388951d98129383590186b80836608f7e06c72f", - "tcId" : 83 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30393015260b06096086480165030402010004deadbeef05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "7e4f953b288c20fd5bec56a00745db9be03590efcb637e2ce2119a0a1846e9f38c0ebc5f2498ebde6217d81c9939b6d6a6f35ba54ee50d6313d3f2579751e7ae8d31ef4b0e99ca2e96c80459a7e5ff51f6f31e9c965be19097de13017c90037aa482d197c986f50bf2d5e1acb3f3024605e46d963410a4a623c898d0d773a78e", - "tcId" : 84 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303630120609608648016503040201250549817705000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "53b8fdeb2d8aee9796a56afe4934221610ad028ae6f9478c90d4e865f3f78b3d27b383f87086d50fc4d96c5004d8a22a0c5d32afad45fd68fcc3e9115bdfddab605c81f31d0a8ccffcfd5fdbfa0f0a4386649198b11c10f33ec5bd73c713a6af706e617a3a1e967f6ac025e7f283e49bb9ea1fe3a4f27d9f6caaf1bf4981ba06", - "tcId" : 85 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035301106096086480165030402012504250005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "90a5d10e2e19f7e016d5126a3d3eb91432611ebfd411b07a4be15aa48c39df33f3a2855f1e150ad34c7f83973bd73eca6575dcbac4086aa0a38db3d6e6ee2e9f419768493fb4829f1f6d67f80359f82d95483d6057de17fd388ae46687c429dea4d9f7a286c95fb1b9df0f1ba40a4263307789952b1bd07cdcb3b5cef10d9d2e", - "tcId" : 86 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303930150609608648016503040201250205000004deadbeef0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "a88d38e8c765b7e439f42294e71c1689a318ed5414efdf474196989829d4989fce8910798f4d7873fb43d3a501fa15c8019813104e4699597246db66f96c838e45aa3596a1d26cbe9f6ee91c077422953b402f7e11f8768a2f132295bff79a0d10ab843cbcf2c921113992336638f4052446f52815328ba4946510a6b701d448", - "tcId" : 87 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3036300d0609608648016503040201050024254981770420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "a34e59121976568352ea031232f6da386623a1c6866e36d6c6c07168de977faf6e008f14fe22a27d42664925f756f4b57f5258ceaa8197c3c172068dabf3c6cd46b3cf0262931bea731249781f28361c25cba9b64f678c0b2692056469624d0204bf2bf9c4e87407372838926e6b34e68cfb31e2870bfb5b0fdfa2ec1e177149", - "tcId" : 88 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035300d06096086480165030402010500242425000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "7f642b5702c331dd76b7ff66578a2c0547d91c556b7b9751443d911729fb5ce8426515ba068e2839cfdc956eb813c25d65a2d5213b59302c0ed5e6fb95c49002edb1605f8f622912fdc309d92e6e3f188ba19e991fab0a7018ae4f6e70927d91cffec51b2dcc8113908faa1173ec9ed72350aa93a8cadef8bfa7305bae22bdf9", - "tcId" : 89 - }, - { - "comment" : "including garbage", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3039300d0609608648016503040201050024220420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250004deadbeef", - "result" : "invalid", - "sig" : "0abb75f2fac084da0b99bc823c021c4872e23302a6a25e400b6f25d60f7c903899a69dc548676106b44f37c1e6d2604eb995a16880a2a8e2cc9e0ccb2b984ae482036f69a6ad31a2b5836e73e0d30c3e10f8b93c7587d7c0f2371183edc3b8cd0fd7bc325b1cf75e1079f8d6df53fe495722cc1ce707cca49bc6f4ed2ca6c4f9", - "tcId" : 90 - }, - { - "comment" : "including undefined tags", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3039aa00bb00cd003031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "9f2234b108a45abaed850e19d2f9576f59bb83dbc6165da61c4798638f9c98587c7eb92a8c901dc4430e4a47dc05681ae811ffcad6f7a604c43551cd0f5d123549435d622f7efec578301efd49dc6b139abbc3c7d6a26858f6d18f09b863a145d6483c9efc6c322fec1341b6362dc1d752c714efcdfb09097a0ce6df7dbe88a9", - "tcId" : 91 - }, - { - "comment" : "including undefined tags", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3037aa02aabb3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "24ba137a293599ab7e50a0a4f8c7a5cd02dda6a4568c93f84d00ff47296564563c9051b334db2fd2c081b23d322d4870a61b2435d651d7efb4e1b0920e759f7fd81a937bbc85ff43dbe2b702dec3acf4db68d5fd7b8a2f6d32cc49a7300dd659623b391927a2442d69c6c3c29e59eb80b1d0a95bec6d18a6223cf4357eb7cc96", - "tcId" : 92 - }, - { - "comment" : "including undefined tags", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30393015aa00bb00cd00300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "04023dd35fa479f8156794d02935f8669c023c774b95c5a0e02837e32ccaf7a4ba5195835a15de6a21796eb96bdaed868f9e8b7f0a5a21c1a3058f53aadb62d6ee74cd70b2c38f17e42a1f7ffd88955731b4e15368211ad53f617aacbb54a7e7078740ba6daaca81c1b321b748ea1d13f7aece490226636ecac41bdc275175d6", - "tcId" : 93 - }, - { - "comment" : "including undefined tags", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30373013aa02aabb300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "253bed76e4b8465ebfffd1b7214ce586294d3bea290517ca2bfc417ba9d8e72d286570c348dc6084fd379c2bf4dae424189964639533e17c409ae18e445210ed4dc98de4ad7336554740d1532d5010a1bd7ebbc33ba48a3365d50669e4f4522d0e5ff7a3bdb1c42c42dee647a8a3ce16633eb33bbc0a869e12cf99f9481dcf85", - "tcId" : 94 - }, - { - "comment" : "including undefined tags", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303930152611aa00bb00cd00060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "0775598491297eb9004eed66234ded82e047ea2f06837425e6bd27f33b1373667f3ff4961d60f85edede88ec2bba2680151da3763f0df9785b31771da7e643862ff9ba944ab54bb1356ee113e420002a873f1eb381660f3eb84b1d6b25ccb8b82ad12ad0a449c4de205144873329e80ae8a84d1d3c1660b3303cbef28b48a553", - "tcId" : 95 - }, - { - "comment" : "including undefined tags", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30373013260faa02aabb060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "a73df043d06ae53a37773016a4e21d3f1093c50e079b189c4bd7db3e2e9875b14e5374cb8e7394a9f1b45c7e4e9dd516198bf5055b30ea4d205f39fddaab3da0cec63524bdae2ae166a3874c59057d93855d6e6314fc5da8111ff58666a73c00a105311859f27d2fb92f507531b9d681e219861e4f0b2b979c185af2690eb4f7", - "tcId" : 96 - }, - { - "comment" : "including undefined tags", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3039301506096086480165030402012508aa00bb00cd0005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "17e5a889b8139593e192f7af684c918f2751f157214863f88984ff3d8c9e381d1bee5ee788fc82869f4c3d8483e3c17c873a850a7a5c85e4518cbd8531b331a308a0368a868bb7995ce0f8a7ac5ba53b88c31c958dfabb36ed461472505b598418185b864f381342c29dc80e55ca7c2095e7788e7e8d385d61de605f74e431b9", - "tcId" : 97 - }, - { - "comment" : "including undefined tags", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3037301306096086480165030402012506aa02aabb05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "a659f7c44e4589e9f6658b0b57e82e65d5ee9fbe2376894f558a7ca4b6e3c5032f953d1dccfb9b76bbc53dd5d1a52cfc092c6ca279b37c0a43c99ec0553d7ef4d9bf9361a1c4a3fb7496aa58c0af518312e18819fffdafd1a230a38440a6fbb0e69babaa977b8b5fe08ed7c6d59c0391ccd80b42a0c0102264b0ed6af8524e9e", - "tcId" : 98 - }, - { - "comment" : "including undefined tags", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3039300d060960864801650304020105002428aa00bb00cd000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "83fd4599a47bc0852ee1a12b2d97fceae6d8442fd089df1d21ecc252a410982410bbd2cc6bbca219502c2934ac593a09beefdeb54b0692b3e5724b79b0f5c53541b62b0c4bf80a658af71d5964fc6a1fd7823370d00e24dcead4bdc86bcd883fe3f48dc7f8468ce99b7580306007021b68b48ace274e3c09a1b5e21fc7542ef0", - "tcId" : 99 - }, - { - "comment" : "including undefined tags", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3037300d060960864801650304020105002426aa02aabb0420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "4bab6fc6948143f8ec7c8ad86a0c5cda5bd8151c24ca7916857778729c882581603363fde0ae2a28b6f8f2c8ce8d5f6b6e731bf8ef735bd31318069544295b54b04ff2abd1e11900373931164586d7c830bae704f7314eebf1d32b3a171274ed456e335d2a0b998ac441053ef096a037bfa6e5cdf3835c45ede383f0ee8feeec", - "tcId" : 100 - }, - { - "comment" : "using composition with indefinite length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30803031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", - "result" : "invalid", - "sig" : "2d9940c172e83a1ce38ce52741e694c7b62c77a63c0523ef68ffde402b0cdf7102afa7005a731d399757b69d313c2970a61f785c12fe79aad5398a956a2c004faec802691b00246cb759b0db432739febfef9abece7bd95e6ad980eb9d8b53886f739035b71fecd5e5ef0f0c0990a9f8fc0aa5d18089471dbd53488c23630415", - "tcId" : 101 - }, - { - "comment" : "using composition with indefinite length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30353080300d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "69fd1dfca1b436593840f946e6113a79018c6cbc4e2b4562b12d06c03c7cfc1e724841ec59aeb0371c67a76a089a3f83f837255719bd648bc0888339c54223c25a238e717d1a90691fcf9690a3fef132f034cc03926ba8ae21dbb68467669cd19837907ca58237b6619be08a92ccf8e5756e3caec34a3c2a4622d7154a72256f", - "tcId" : 102 - }, - { - "comment" : "using composition with indefinite length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035301126800609608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "58c64866f9c1b6cd94c33fd708375ee8462f89efb1c72322174a1c5ed9117885bfa4a02ef0acc16d6a078800b84e9fbdb7f8f4f232091326811e71639fc1321b31c15c9fccb68f77c79b2e39b817478539636966c0adb23407401a4c68e6cf5589104a5557650ac389e4fb2a64191014c4e8f9af48f8a28f555d5cc32d7a87aa", - "tcId" : 103 - }, - { - "comment" : "using composition with indefinite length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035301106096086480165030402012580050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "0ba4e7900332ef20ad600bd4b8c0bab55c1030138c6131c1cf14a45fa98e10ea297ff6c2b8de3d92bcab6f1d303f4f8168848b2fee58ca40fb1f1c7eeb808c212b413f6f302d2e3904c2be2fa77fac21d04352a0abb07aae028e54d9e08ce37a6c210ae47095890d668cc1c296c9db1b5ddec30b722790260dc26c85e35f6692", - "tcId" : 104 - }, - { - "comment" : "using composition with indefinite length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035300d0609608648016503040201050024800420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", - "result" : "invalid", - "sig" : "6f7b739d7e604a1123a232be4d0909a890eb3ad115f822b91592563a55fa59711f7ad17d1370abd4a6af6dac7ba08b6ae111291b0c8fd0626bc068022a8eff5ea5b797cc7fd35a81130a9394f051d2bb6bdf6190c11b964dbe2e4021a71ee8b405d0baf91ad5897d9ce22c8c1dd0e7dfee0e6abd979f5a1cd9443116c212b806", - "tcId" : 105 - }, - { - "comment" : "using composition with wrong tag", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30803131300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", - "result" : "invalid", - "sig" : "53e00d738939553ca6f742ccc3671c88fd2319dc438d046f06011e088b57df8703813a53fa9c68a8b2de333445fb739726ac2b6ce3b2800e3082f48b823a06d0b2a83fc4c0b2e6a40fc2d86b73030e974f101dc6fd6a24abcc6cb347eeed08a4c8086d1fc5fd68b0b36fce0c79e5187c38c8a4cd35973b1755643aa28496fbd4", - "tcId" : 106 - }, - { - "comment" : "using composition with wrong tag", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30353080310d0609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "9382e341df276efda17aaa4410801a3ba0e4ccd5f0b61cde2416c7a8345cab1bb1fcc4a4a1d7c4a03a9d9ef68c83f2b3e08fc5893324159cd3dbae159bab67b109e55db550b540aa6142531528281732f63235785e145ea0defac4e67e825b30fbe9ff19687436d600ca412053e2430a1d1b637d4db255f1616713f3a2ad135b", - "tcId" : 107 - }, - { - "comment" : "using composition with wrong tag", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035301126800709608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "01ed4d8d4a342729f18182bc4f7645ca0a5216b57d4d26b874832983d19741673aa7c0e01705ada27ab779b9b84f431e83c621a2dd7ae5f501ec369273d297144b76477f4408bca5ef6a59053c1ffde80bc228f99dcaaffb4c520c507b3a941399042f0c535015d86b2b5a95696b71ed61ff2bb585442b85fa2477268b71f77e", - "tcId" : 108 - }, - { - "comment" : "using composition with wrong tag", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035301106096086480165030402012580040000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "21782ca777e07848b600c37bb0a881707e580fe822d5dbb78f4809251a5cd74cb6f3636194cec8bab9040339da6531c730060ff5ac39ac9ad56a2371fe21e02ce08da18778d2256276c47ef0261d9c453360fbc4a2cc1dc7a8965ac2ccc17b460b0fe359ae4fa53f75efc68e96762cff5d98be46fbeacce2edf1d1bf5e158653", - "tcId" : 109 - }, - { - "comment" : "using composition with wrong tag", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035300d0609608648016503040201050024800520532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", - "result" : "invalid", - "sig" : "1eb6de862a77d435e62635b620be37fc8be499500c19b4d87b3f993b9710f55476d3f3ac27d5ab2c1ec36dded088bc50ba5c0540934fdbb5ed3309babd766726ae833aec211a526caa82bf08f1704b66128f24c912c8c3719170090fe1a2738b0da32f91d35546a9a499618428d368b326203aeafce635668d3d5fde15762d84", - "tcId" : 110 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "2e31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "5770bbbb883f93f7c29bdab32e496f2e9063110fe648705fd0b1dc927052fc9ace9b36d898d19cd4f862b777b7c790d767b8313f735ff567c34cfb31f29644540645beea182cabdf789ff9ac3f68cc20444af0b9d4ec0bc8992945063fdb733cccef7590a10bdf491bc21c38f25ff65a581b40343e30529c3dbb71f62189ba3f", - "tcId" : 111 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3231300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "359dfbf40d3c2383f58bef1d518abe9852ca80d797393e4e1a9380ef08aa851d585213e8897c6f701ab680b0f63ccf5ea4216331918ca9a984fb6ba549f4bd066ec1fc4f1ed053fa5658b01df674a21322ba7e21fba6cbb3a8eb5565fb7bc269f99c65981efa650dde613ccd6d3927cdae45922d94dcf7ca5188bf5acf84035f", - "tcId" : 112 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "ff31300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "24a61067121e9b4363b816b7c5750584c23f3c3200ca929fdedbe95d7504c56ea7dffd762074e44e96e22147943f2b704003967270b2be1bd1baadc3861c4cae91bd41530c67220349db4481d324d9927d52fe85618ddab2598996c5813f3299e1afb020b24003fa94f94a0c6c02b3183295e0de79eda021dccc5539cd7874ce", - "tcId" : 113 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30312e0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "11b8d1dc2fa2afbc32f048d7454ba032b432a2ecd438506aa72c697a5c118e9e231a0c6b6340b5564402b7e837c59dd36f726fd626621b8f543964198484087eded70e7bb1dd63df2cea33198b9d02dd28e3b8bd006ba991a8b3bf06ac928bef45cba2362f2e11a5fbfb0310e84e8b7ba1e17c315adc1f34519134c36689619d", - "tcId" : 114 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031320d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "8748f029d5294dc917cf4fb347e0046f903c088fd976ca97b1322738549df7c56cd67349d66596338fe418b29de9e8af8872fcdbb55e1a6f74e9965fe7a365b846b667d0ae50df23083be73cceb59db545a3e1a560f6ce0e9eaee57b5f95b8487a3987c00f364d0f148ead6d7e6a37b05456b913b7a79c0547b80da2a2893881", - "tcId" : 115 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031ff0d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "2bfc087003f3b98f0c8c5273de34f5e4d5047e909cd80e222072f6a7926ced5ae169131342640f2be11bde2f7565c3c63d0335614dd278915514de8421f4521f0138109a5c9778f86647b8a42815b6b861f173f5a6df893873f99c5e62bc3c086150e3b7d7abb943ecbe5806068abc433e9052d9bdfa19a58d19da463dbf3b23", - "tcId" : 116 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d040960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "0fe03eea6c50ab664bebc7d64346762aa29b08b61f2877973cd543c9533c9d0451db8d836eb46e8d64283306efd7ef6387cdc3c794f7474f2e7d51b9df078095adc85fb810cae52434c9cee5048fbff72610778397fd83204f44bb87f7637373d111dd16e18287bd9ffe816683bc3663f586082fe0811ff6a06c0264b67f7716", - "tcId" : 117 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d080960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "748b9e64195314003ca31f726bb3d3294abd8eb376365acc5b1cd36934bbe1a9bae99ceb7c1a40c910bca6007ced7961ecc9ac74c7a6424cc87b6b9610320ab9c5b527d986c6e8ed21e677bbe2ee7752e2dbcfceecc2dd6da3f6c6b9c81435e9e060dcd67ba834729761dfc9570b79bb1b8ead7bc1325c2233e445eeed12dcad", - "tcId" : 118 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300dff0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "7379bc96dd40d37a7f8e58f87c10fb94f250a964a55b2abead479b368e60e442e6eb864952308eb45eef1d318b6a5ffce634fcb886dbfa062060b9809cf89a09a26fd334ca22a1917fd219900ec0c68164c308cb9cbca3fb2b89ed8637c5540f7a5886ab1e52c503e20edd6316e41c746e53917e107ef5308590800ad378ac97", - "tcId" : 119 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020103000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "4a2478918565be6b46fe61e5f66cd1befb7a3026b5a1502e9a42636b0b924a02e85d7ffdfd8671b1d6d3e604e3ac6a5302db4e0ae0975d0661efa018d6ba0c632a6381368dcb75926542c74823a8c6d8732619764d5a61062fb3b17ae243bd691c97c8f9821af9526abcb522ec8e9dca32de1989e576e336af9dddc3e766541b", - "tcId" : 120 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020107000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "5ec392c91cc165ae59013337e7f7d5f2f9b3a6d45b6f6beee6dbf93e7b9607900f4672555a57de6e9e1aee1fc9b7adfc0dc00e122e84b0233c0d615dd0d79764fdc9d1b0e541f2de0083ab479f313a07f55f51390d1c2274858b219b1ec0601b82a2f7648ae95ec17099067a173e3e83959b6c06f149af0e4610761aab5be1a5", - "tcId" : 121 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d0609608648016503040201ff000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "6173aef07a7057c3e97f6b7d4d7266918876f9fad86000b4c8ec7f83ee491563115b0cb5d580df8c97feb0d95866eabb79147926f5395c5189554749f4a2c75c0d96325971635be029062e1f27536c5041bb42f42e1fa10e21bb8e9a2e2502f2a7299dfe3bd8720ecb8a57238056ab0eb546de8dc0e56b317c73ab1e19772596", - "tcId" : 122 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105000220532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3b80c72f3b7ada8b38b30527bca41180b4a89b066f44a17b9df5963dca46517d9160326afee7a34b650b9e7746e764958ce6a0a6268481a8df40e0a95a81ab0f0bd20c050becfc0c4b03ebda19749a4a1dd3ce925fafd9a4006a835eedf221a6ceab6aac6bc74f743fe171ef8c01935f8901e1ec9ff6e33ae8311851fa14a65e", - "tcId" : 123 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105000620532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "4b0eaf3ae1c7a3322dcfabee0569aaafba51e0f34fa6afc325bacc853ccd2daa3dca56c918325bf553af02ddd19fb597c368dd18892d52d9e935dc51d38347ebae2a7f90c78504355f6899ab4452d5f51d2025381d81042a08582dc50bc1078246ee69652043bb747969a7450659e333193990f34a8ce3f036221193e700489c", - "tcId" : 124 - }, - { - "comment" : "changing tag value", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d06096086480165030402010500ff20532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "1fe7b390bcbd5bc1904e676111653e14e581e7817b45294bb790e4e62f3010aaaa77e246b29729f2b7da65a2f437b8d9c4fe3b26baad367a19fd7b1758d04c2f788c45e5309a833522b46d7255dd5ef70ed006ef966aa7c648bd0b893b8e1566961c16e9554fb729ec81819f1b3da890d413a153f487c030c7581da9531bf134", - "tcId" : 125 - }, - { - "comment" : "dropping value of sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3000", - "result" : "invalid", - "sig" : "317379f37cb7f21fd03259a27db3575d491a248df82e67b39d4956a1c619094fcde001544f0fa70c64dc0d0440fb21d2860a20a911cbb397792bf3eafa5cc050e78b1e7bb29d041cfa0287bdf54a90a7a8bff5c870e898fe34bb522477daf8e003bc22891b789ff215869cceb92610c4b03210d19506058d941e6fce7a3cd786", - "tcId" : 126 - }, - { - "comment" : "dropping value of sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "302430000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "2de802ddacb7e47e27875943d5098419bca3b170bf74f1c4b4a8ac420d4469d9aea97592fbeaaa1dcb5fd20bb97afc5f7abae17a9bb85c5490db97010c5217c88f9f52b5e209cf5fba5f0594f4e4450114dd0348ece336870a1333f7660caf959056ba13b77d35239eea164ddbc8808f8e7e1beb070f551b6e95f90d5bdbd925", - "tcId" : 127 - }, - { - "comment" : "using composition", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303530013030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "09342a8fb8402b5e50fbf8c5d1cae415ce02c0a803adfed88188982129e8480918dc21616bb5f8381e8dfe13f63234090c32e542a005df70df5e8e00dd2a478d10fff1b61efbdcf0e410236f7c031c9a5f7cd0db9098f8a32a6a49f408e72c4a29b7d27e8041ba605bf089bbdb9777e19b31ecca0d49b90d54701721af79cf3a", - "tcId" : 128 - }, - { - "comment" : "using composition", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30353011300106300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3ef90c414a64601c538c286f2c35f32445039799b8c266eed605027578edda796a409d905a751bf5c1cdea97840437fa82733d8f27efbbc05da732887078a8f547bbfb54607a54f893df7dde0c35c45f9c2402bed0405c72e98175e5b9d6f90224e07d12e8c1bbad2fc8b1a14c42dd5fb7e554db5edae89d335705c672cd7b55", - "tcId" : 129 - }, - { - "comment" : "using composition", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30353011260d0601600608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3ad3e4ec3636b5eb8aac2161c04d228491ca0d9da2abd69d8904054373940b39b5c025c011c9b9508a25ec25b24a0837cdd6a27cb5c8ba3683d90ba5912ede9a21f2f7e851dc49dfebea8807576be703a6a87ca44c370db76812b9929a54fb8e2259453ccaf47da1b8ddc5b7322c20197604b9e028ec00bd7eb48012274d5b81", - "tcId" : 130 - }, - { - "comment" : "using composition", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3035300d060960864801650304020105002424040153041f2eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "778d93be708d56defbb6dedcfec2a917a3772b2810e26143db1f9d0f26c4fbb8de8db5818aa32ebb2cdcd7960e593ace2c3c3eb682c930cbffcfa6b34438ee2a786a9707d5d10902f7f4d8fc677106275fcb6cb08f56f341e0f52af590e0bdfa2f2bf95693265e87f5046bcf3e6de34810e8eaa479f3afa2b0a98b175007c209", - "tcId" : 131 - }, - { - "comment" : "truncate sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3030300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e", - "result" : "invalid", - "sig" : "a3e0e0cb9f7cdf8a2b95139f7c475f274bb63252385f62e66f82158f429e74d83df9ab1040717d34b6a5e009b6ac95960826ee83bb298ecf900425ff03a8f156053b57eac6086d61dd3a8085b84c83bebbe3270164e3147ddee8966a026796401fa48da70f5d949386eccad26b0016543f3f90c8ac2874100dce13f03845509c", - "tcId" : 132 - }, - { - "comment" : "truncate sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "84345c9d3de7b5da2156d3669a731c4baf6726c4c231bc8bcaef950d7ac37ca8d86e9c9558404f313de3fdf09024d25491b0a933cc3958033210b1c4f90070ddd083005873762566ff2cd7f6915b4cb430f5e7e1bca8c2ec32b4ddee48aba667f9d614a27c3bb40c6cb7f0cd77d3d17257f197974d1871cc09c9583cc6af8e15", - "tcId" : 133 - }, - { - "comment" : "truncate sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3030300c0609608648016503040201050420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "227aaebca262d2189c479ab46d8715a34100bc1975c2d3991a4ade27376f068756cc9d89e903713bc28394d202d81b32126d7eb09154261841227cba6ea0a60d0ed9302f816fb4dd241dcd2d746d5c1b068c42c0b2bd567ef799cbfd0a83e8a30c4fa2f7296dceca38c36ab597ba992f658ef7955d32d38847870afbca35d836", - "tcId" : 134 - }, - { - "comment" : "truncate sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3030300c0960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "a4316d438c7091b3bd5ec09aeea9095cb5046d8f08642b087c34985c34377bdafe74285d00862fba20572ce7a06dfe62b4fc08704d1cfb161cd88478e7e1c5451e0bdcce0fdd83c0e37fba5168ae03fcf4ccf60fa12c9b0acb39fe99b06933b9e0774f41151e0564ef805144c0cb76101672c287912197155d91bf036e84d1ce", - "tcId" : 135 - }, - { - "comment" : "indefinite length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3080300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", - "result" : "invalid", - "sig" : "447904593d2796cb9851fc38f6494697af3eff1997568a320a0e6a50d62b484d7254c99cad3897f7383da73ee48ee824f7f6819c7dfce18021e7cb43b48cd77532c6af28e9adbe8005c576415c379bb7bd164a49010f0b243f60064f1986d1923146be8e8a4eceb9263445f32e49e5cef3e500467f3cfa9102b51b2772df803a", - "tcId" : 136 - }, - { - "comment" : "indefinite length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303330800609608648016503040201050000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "01ce4a92bfbefd1de73607085c875704ff40751537bbce8ae2df9b10db01443154f415a936b38f937f7514763e20de0c55a1b441c5b10a09c7e09a7070cbc88becfaa8d39ab1cb93f4e2d1dfbc973715b04bf5d21f2cbab061ce36c81642fea43d0b11317961886d8783c628947b8f14be0864674e84c4af5f9dbb1f95b327a1", - "tcId" : 137 - }, - { - "comment" : "prepend empty sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30333000300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "361f80a57ddb48796e50b3e6467cb00a9e1e193330ecd2cd6a31f649b49eac27e295450efe03e09e59f1829cc661d36b0fe904602c644aad7ec8cb2ca3099078b6d4f7b9233dc159fd1a6189451fedbd176e436f6605f2b889fc7197ebb520accd7f90e543da44453c7ba1948e83e31f5907d1989d982acbb348ca2216fe050d", - "tcId" : 138 - }, - { - "comment" : "prepend empty sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f3000060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "674c01596bf71fccd36aa81b000be007f6cff713e5f6ffe58b25e790f9a1f6542ba3f68e1eeaf1bb1ac6c3d55aeaf08140f6cc3d0474f6bd87ee442568346553ceb34efb5301a4d3a5b3f28a5fb038ccfe8444524d18adfa042aa1685fc3a5f9005da5688853b8660ba74f0e32c5be38c743b0048ca9b9fc19a35a5ff4e2c48f", - "tcId" : 139 - }, - { - "comment" : "append empty sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e253000", - "result" : "invalid", - "sig" : "07ba2b5d519b1f60dc455d6ad90b4135cb45c5da5a2a2c9b8cb954165394a0f40145ebf2b1a3ff1d47f5031d542d25041fe9b6d78aab623c40eedcd8467618168ad02af8a696573c5c63cae0b2c26583b0240848d663fdd0195322bc2c8dbf9b5db2ff9cc3e75e70480e51da0d6dd402fa87772ddef5256467205cf41a42d18a", - "tcId" : 140 - }, - { - "comment" : "append empty sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f0609608648016503040201050030000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "9fd302307455d4e946c1ccee65b0941c3550c823279cc52c4f29ecff72a12ac40ef6b7e37b7dd774b7735bbae89b0792908bafc47f0b0a11637042fc8541b346151bdadc3990e64b6d1807dd0e7f9266ceb3f686a9813341f835562d3c8c84868a1f98db97d3e695ce4a25fce80b828d010d6323120362ac48700abff8a7116e", - "tcId" : 141 - }, - { - "comment" : "sequence of sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30333031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "247aa1cb69ccb72795c93809d7c3a5e52de98ec5285196058a6ab18ec2f5d9fef5545ab5df923f63bd58f5f247b3d824bf161bcb56d325d4e2fc7eb3765dd81b5580422abf2a3bca8d8af94cf6a9a3133b1494f66d5cbe938d30b9308b5ce2cc6d3df37d3299b6a7616d40afcc7935d80225e1a89a7a63ebff13a66e21280a6a", - "tcId" : 142 - }, - { - "comment" : "sequence of sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "6d6248f823020a9604bbafe5acc103d9bd020624585c95805533de22afa3b6b1b511f8805296ee4d3e96d707c91e55df8959464ddb6d6a3d62b1cb248754302b2833406300f4975d913f1b90f95e3673e2c57d6181d73a360e8c818b8a9dd1e7a4fdcd68683f11dd47c2d395f20b0ce9c59eede6ae6aa58a707c4ea8d1a73a9a", - "tcId" : 143 - }, - { - "comment" : "truncated sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "300f300d06096086480165030402010500", - "result" : "invalid", - "sig" : "941d41c39aa8bf3879d16cb78c5486589e7b97e56a0249c4f613060d26b786598fd2d34bc4e99cc8888137975937307d6a328059a09f3b994bf955c7de4a2841a0d10bbbebb2db3b332656f258c66c8d50cf9155ba94e1cb21a78e6147af76958ddd997665b6d8f67ea8f5e1fdbebd7df635f20494489c895d33ae4c7f248bad", - "tcId" : 144 - }, - { - "comment" : "repeat element in sequence", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3053300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "a32afeafa2c3b58bef55776ef6daaac6647485dde100d968e0449d1a2d5a121807ca2fdd70e2e9cf524cae4f263e11837000df85f0886b718ff45cd316c8d031b746dabfb956dd6118a37e0dabcda1ce9c728afd9a5f2448f5b15d27982218888d457752485119f53219315bf63141c9c0802327226a096403ece022cb27c0df", - "tcId" : 145 - }, - { - "comment" : "removing oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3026300205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "6098a732419cd71887548ccf4fbf3edeaf9fe7b220bd747ae1b995b746de1f4d7b48c73ddb71903f50ccf7c93be9c8219de5a75ecc302ab50356069dfaf642f32ec580a283519fbcf04784860b0660174dfb7e1e527bb320960bde8f6c605bc3c1055b878d2adbb44e1b6c41add15cb603345c4fe2d1c0158fa03f21b4c015e0", - "tcId" : 146 - }, - { - "comment" : "appending 0's to oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f060b608648016503040201000005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "2f08cdca4d621007acd15b1f4e3c39882a8aef706878e8f101e7fb250798a3528dcbf4d3327ceb0754a2ca0850794094dde8a875cb947d624d386ddb9593259c53ef2311260ac3c9cd1277050ec98d105188f590f198ba908ddcf3f9ed18f5a96cc6b353fadde007658f87ff4c201db7621d69c8278305f3e9f2041a2dddfad0", - "tcId" : 147 - }, - { - "comment" : "prepending 0's to oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f060b000060864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "10078ea73abb9bbb879c9d8139b1758170fb73b34f39cdc83e6a725439e315a5cba4421fe15e8c80d8fda0a9aba9a12c23aab41f7328d4191e6c7c3a53a505ab518dce078439347945671ab06a2cd5375457b3bf181c40a1a4be1ea8305c9a401488532c7cdc1150fb9c46a2e846ce4a2fd9ee863d0b0b8af7f10360acc47f10", - "tcId" : 148 - }, - { - "comment" : "dropping value of oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30283004060005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "69a74665f61787b54b522937c534e95e91917f5dd4fa9e3472add6e21dc033a275408f35c71ff6cc029e25986fe6dced8ed053a9040aac32fc444e9252d2bd4081fe3e51ace15a0f694c0b8953dd6afa7f8cac67f4d8e17513b415c14b439a634274893885907e2ea428a6e242154a58a031fedae31c73df7cd4e2f5591496cb", - "tcId" : 149 - }, - { - "comment" : "modify first byte of oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060961864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "8f3b544724810d462cc9b19f356e61efe7c192dd63511a9f1f63286ca81f89477c2b464f8e51a97ee138dcf8c6709d79a78591081384af7cb5e182c9867b826013e6191efddddcc39909d3ffbb18944503b69d774c959831a8092f4790a4933521100c3e9741c3b58e1d24b75425ee28fde4e40c249b4dccd726cb06cb9ad2e3", - "tcId" : 150 - }, - { - "comment" : "modify last byte of oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3933d6937e977caac37a07a5c4ae503565af57e6c4e830004147f8bbf6784f79666d89cb4cac60e3f0aff2d5ed6a182921e490c958bfa49c86fcf0270914c102275b0878f01795c7a2f44a8a6f5306aa67a81f9294089876801503989e749d152c3e34906291f1f54bb6232fdd3d51e807f70927bf38ef70bd2ba45f0323acf2", - "tcId" : 151 - }, - { - "comment" : "truncate oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3030300c0608608648016503040205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "7b2f6581fb0b4f913ed38c0ea20dff2bd60723f2bc3f1022ceb946e48adb75b1e0be031dd8b706d82967f93c6b6ba496d8c4b49aea9970e139b18fefdce30a4ec04f77625eaca4c7d1265cebbbcf53b63a113cf06bc50e4a416a771cd28785a0075631a3ef60c9212e224aaa063e7d8109c27e248e6422b26acd02ec012b7bf3", - "tcId" : 152 - }, - { - "comment" : "truncate oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3030300c0608864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "4dc9e86e076a395b530868d9fec9f858bd6e8c10cc1e32cae7653abb3f23991c677e970ee468c7f35022f3241f5d35673a8cf4ce9134b1e63a994dc7abc8cf4b9dbbb126b314312539931a0163c911f0234f5c3f683c9376f2ecaa3294d71a1274f6c63b84ea8faf826eacb05e4fa5459b787ff384b2cfe0f1f4c755f32b5c50", - "tcId" : 153 - }, - { - "comment" : "wrong oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "302d300906052b0e03021a05000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "8bbc9167821885a728260bf9831120ecc42c14b2b07854169c86421146367d1bec66d8c3daadd115f16a29754e7fa8fb70a63966f7838484615d4364311b6c3f6e73ecd8ced0adb52db2c374297119f5fe571bd5396529d13b7225e87db5b5b0df38e4c56f2349071b09ff5c1ded919b398d4aff38c6ae29af6f6ff99d3e8836", - "tcId" : 154 - }, - { - "comment" : "longer oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3032300e060a6086480165030402010105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "2054d402bf6a148b52972b830c8c8a16a6aeddbcd5c2ae3fd83de67c666e712fa98650308658837a67ab87b2c444bedc7cf995c19af433da9343f260049b1bcb436ebe27d8a502728dfb0daac5d2710e2c39fa000b909aede07ad7a0d27629e0ac27ed9fcd41a39e09f7acdec4c2df77f38c535f46e3b96f2772a81e65e74bb8", - "tcId" : 155 - }, - { - "comment" : "oid with modified node", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304021105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "3a94d241563a2ad97574ec82baefccd9dd114e21fa9169d0f54c4d0f57826224804ddc9b29c1905c59f39bd6aa3366705a85f5e6e18c0eb0f67986b5265e7371865b618e90e5c5313f0b6fce2343aa12d4ed44d6770fa08d4f1342608a4fb627a273f3a1f1340d1f5c55957ce51048e3690a845851009cbfe38d3c96e96d4172", - "tcId" : 156 - }, - { - "comment" : "oid with modified node", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "30353011060d6086480165030402888080800105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "079cb62831dbeb40a638402865cc92cb49913dae214babc3f4f8d69d64cf14362c23c8dd6ebcee9c44633dd54a62bb2f0042c20033728fc2f8ff482cf0be3ee103bacf757b50319495d9a838844ea1064f4bd1f1ebdc1b71a318c3c8f7d76ebd79ef2f3991d4d87e110d60e5fc655adfa4a8e792e46c1c7aa96156b884e2f7a9", - "tcId" : 157 - }, - { - "comment" : "large integer in oid", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "303a3016061260864801650304028280808080808080800105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "2c9083459ba6504dc10e0e63edf8ede8bdb4a9728673306908ad4e8f25656d4865f0748b9fd2cf7b51db0a2c659e0ce021fef3d2d3d0cf7c45343729c2001a19d37e29398a9a7e92d7f62693252261f1f7406b54af5447db6e846f981722059b7bb09ba95268c321c156ff659e0ce8e709d2819d5ce15f5dcfa54c55114a611a", - "tcId" : 158 - }, - { - "comment" : "oid with invalid node", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3032300e060a608648016503040201e005000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "9a76669c75f0f11399699f76e7bfbefc0d29feb5a8d86de1f751eedbb5c9e7b81ecbc224534db67cfe1b611951a6ff499d86e11cac4a1725e2ff707085a81a76c73d5b53d1b0b2c4fab2d2eebe57eca83242a261cfca768abcd8e1f42e3841d698bef3d4f16ac2dfab0fd42ef0abb0463474367dff7ec99d665a9838f2cfc24c", - "tcId" : 159 - }, - { - "comment" : "oid with invalid node", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3032300e060a6080864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "6674ec2352f0d3e90f4b72086f39815db11b056babc57644c8a703014f439baa46e8ed961714d5c7b5f0ec97ba3fe5ab867c16b7e1de089868dcb195fc20cc42fa1b3d3060f50cca77281bb6be18d65a1ee8e5a381e21e7f02e819752b71327a28719c7284f6425bc9241abb08d000faf58d48848d7f4b8d68b28266e663f36b", - "tcId" : 160 - }, - { - "comment" : "appending 0's to null", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300f0609608648016503040201050200000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "8d18a5e0a81522b56eb9e4f43bee15475cdfc7881006150cc230e76028283375a13425fe5a106f2626346a65817010a5510b157b234a16fcb9426909a524a288161537be91ab13033ed296f5f8c1e5c3bdb963f12d7b5eded46106f7c2dc1ae9c451415303cb7e6a3f59809b922183b9638197909d5730e5b1e89705fbbe8464", - "tcId" : 161 - }, - { - "comment" : "composed null", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3037301306096086480165030402012580aa00bb0000000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "80c9add3930a98b726fe543b4350c593d28e77f9f53f1ea04c2bfca30f157309eeb41e5a675bc0045823df8e99f2e55d2567f4b78e36eb8af1b45c50e33e6634dcfdc4094407b760d8b60f76995edd05920a6a89e22168a788557bfc7cf01d47d21448a65f9766bb217bcac1124020b6b062fd0e7bbe3e142ec88652eb617513", - "tcId" : 162 - }, - { - "comment" : "appending 0's to digest", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300d060960864801650304020105000422532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e250000", - "result" : "invalid", - "sig" : "51640e26e8764936a7d9d709b3e0f52a5f1843453f2c6107a8e7fd6dad8b1c02ecc71659cd4134be952c03ee83c190bea4ea7260e5472c3cdf87b6ad45b5c974957ee9b4bf6f30152c2d939f722cff32e5482db96f3e283532b96716d3624daf16767e0ecdad16c97e56e4e076d64b92af329d2d6a2f8d14b59d1b84853659ab", - "tcId" : 163 - }, - { - "comment" : "prepending 0's to digest", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3033300d0609608648016503040201050004220000532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "9080bd4ac03b7ecedd45f8165360d4848bdfe1c9212ee1a4debc1aa92886cd7947a2df5435789bbb0b3e8f78815aac80e2cff14e1939e9ec32f42e7c29ed4029c88cafb64e8523dc85217c40d1bba900468a69c5bd4d12ac67401698fbffaa5159907ad459d3843e12487b3b2315c585881bc42e45543f7cf25110ab7e0a19f4", - "tcId" : 164 - }, - { - "comment" : "dropping value of digest", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3011300d060960864801650304020105000400", - "result" : "invalid", - "sig" : "5f66f645307346216d3ba9c3d8b29e96270cb3b2e686a676fe975c10b8c26fda8d8eb172628bb3dcd726160c13ab8c5afb1d6ae943ea4c18d00465d97c0d2bcc27a63c18457ff8d6e3f5ba373b4be7b6f4c610f83578613f4fe41a40d86230afce0bb8d4496425a5bf0a80c6b1b1e2a981cd44c31a9aa603748c3d2fd2b85478", - "tcId" : 165 - }, - { - "comment" : "modify first byte of digest", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105000420522eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "8ccff4ab4fd8534b6b50593f775bf6684391225adc37745e7ff25a4c4baff78a252aa1177ea3f3f09d2791da50ba19cef40ab8915379f128bba3271069cc2c02725e09f0b2cdfa0d313eba3f5a7e231588fd617b7d90b285e88a944d7d0a7fe9cc558dfe8103391ab2e6fbf762d829a55ed4486b5d888957078ffcf49e8ec352", - "tcId" : 166 - }, - { - "comment" : "modify last byte of digest", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e24", - "result" : "invalid", - "sig" : "694b90d259b8dbe290f5851ede2ebf3bb718c1674ab1d3b7b6418e8ef7ea0760bf3ce69d98a7a3baae5aee488cddfb877972fa88ad05996879d0ce15aca53591423bf1b1b3ff02f823cdbb26bb80e3f7b83c3b7ac01ad7806335f871cd7b7e9e64708c200a9cd092589131aeb7db15655174000cf7db782bd54325ea956a1a15", - "tcId" : 167 - }, - { - "comment" : "truncate digest", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3030300d06096086480165030402010500041f532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e", - "result" : "invalid", - "sig" : "888cd9bdece5ceeef0fea92727ef1a1d996960f3f551bf108682f8103590323669ba1ab48becd14a49b87a900434d0ca7670d094b08b2f851834757bef580d2d3278d85b88036ea90d4c2a673dfafeb0c3701332c2b77493110d9b28dade7e985ec27240c90498372fc00ac8e0e5547e4d59cdd19022b8d961f3b63630b5448d", - "tcId" : 168 - }, - { - "comment" : "truncate digest", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3030300d06096086480165030402010500041f2eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "762c745262627d0df634d6cce41fb8af3cb855fc2d974b8093b035e9d11e510b9b7e7d61581b8f262fc1c4b8a6da3f6d609512e32f16416c7449c623c1773417032ddf2a559d7eb3af129fd02f83b5e35f5b5c065b1e0bc6481f38b6361f0b018b5e7166e8e67dddcf1550222f125efde241a27b0e7f670d15346dde082a8c4e", - "tcId" : 169 - }, - { - "comment" : "wrong hash in padding", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3030300c06082a864886f70d020505000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "27830ed405bc9d34009ec6258b766100273b4dcf2a9b3cf6ae31029837c6e24cf6e819734c1fd10c2c23db34d227d98d3498850f083ecd78b648baccfd4647a572607dedbc2b8ab7a595c0594ece904380e7f395ba4840a81367e99275cde1064fc6f7fbd564c5f26ddd0103991ae8262eaf16623685b43f77ea7a05d080166a", - "tcId" : 170 - }, - { - "comment" : "wrong hash in padding", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020205000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "4cdfa8cd615bcdefa253d75212e4ed0a1fd60841656c6a749690cb0c6c3cd723b518560c3b11a734010acf6e38f0526338351d9b58351826b360c851d3c86429f38eb689e8555aa2a23157e197faebdd29bc49f84c10dacca655cd5fa50fdec86a72f0ff1c7f8feeec31fee188fbfa72776a7b5cdae1c1506830bd3a00181b13", - "tcId" : 171 - }, - { - "comment" : "wrong hash in padding", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020305000420532eaabd9574880dbf76b9b8cc00832c20a6ec113d682299550d7a6e0f345e25", - "result" : "invalid", - "sig" : "024746d8dd71ecfe33cf0ad7ab8ddab9dfeb5740ec47b8ddd668f07b8f7610f726692404ac14c3a1947ff4246fe0a9e216131489125e71df68d60930fac06a20e948a3e4948aff5e3f9772155f8bd6772b1cefd8180ae719afc061e2f0d68a69769930b8d90ca4ecd6c7b20d04f0cc939502e698ad1c500403763c0205f6870d", - "tcId" : 172 - }, - { - "comment" : "wrong hash in signature", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3020300c06082a864886f70d0205050004100cbc6611f5540bd0809a388dc95a615b", - "result" : "invalid", - "sig" : "3a152ced8b5e0efa33cd57d4afe67f31ed3b9fb22e7b0ff32795cd9510374fa09fc63a3366465f83ba4d44e36418a5c1d171b6ca05d8c74a242983d5e5912cd05bdbd75fcfd5b4eda7cadab21e6dcefca8e2ab7303871ef360beff45564a01bdc887d9e849e407c6aa5b12055647f6c9df49758d1272f7cb476f51088e21f246", - "tcId" : 173 - }, - { - "comment" : "wrong hash in signature", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05000414640ab2bae07bedc4c163f679a746f7ab7fb5d1fa", - "result" : "invalid", - "sig" : "3765b8800e6ccf29544d834034e39f8fe7a2e6dfd7e6b4a8f81df091bbfd7aa17edfa6005024fe04d35c340a2215fd3f1cf4b4dfdd3c8ad09e6df2c2256c7541e19c2e80051d1ef5df5c384bfb6be88c4415eb2740db2d9fb3214890a8a0f19146dfb7897bacc02700a89139dc8fb21b2a7bbfbd43604d7f384cc00aecefb4ef", - "tcId" : 174 - }, - { - "comment" : "wrong hash in signature", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3041300d0609608648016503040202050004307b8f4654076b80eb963911f19cfad1aaf4285ed48e826f6cde1b01a79aa73fadb5446e667fc4f90417782c91270540f3", - "result" : "invalid", - "sig" : "5c5b097c21ac2eb156de39d1eaebe3b96082f54b0171469a94edf7d2027ebfdebc0837f766cfefec577e7b797c7a082df2ecc826e55d39927b01c2da26f8f6814ec993e3b93ee87a3418322b65ac652b3bba6d34373a13fd40b66be489938fadf67bbda762f6ee09a1ddc41382051d4a9a946e0df832bc65b7d5dd58cc5a402b", - "tcId" : 175 - }, - { - "comment" : "wrong hash in signature", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "3051300d060960864801650304020305000440c6ee9e33cf5c6715a1d148fd73f7318884b41adcb916021e2bc0e800a5c5dd97f5142178f6ae88c8fdd98e1afb0ce4c8d2c54b5f37b30b7da1997bb33b0b8a31", - "result" : "invalid", - "sig" : "0ede4ac9ffcb6d3d42c75cf73303a28ba6089941f68dcf392a75b071f6c149a109cab95b80a679ca3b29ae44e51c18a2db4c72211ae6b959c7f22e854c45f20f5560446f33be4819f08d981d2fb176d48039ac4acd28127d593f9e219ad40e2a5ee911b334b3b8bb290f2327524e3faae2c028745e03d58882bfe503c4ff04b2", - "tcId" : 176 - }, - { - "comment" : "using PKCS#1 encryption padding", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "0002ff...00", - "result" : "invalid", - "sig" : "6c0b3edf5f6e5d3f07057d0b752e89cfdd1c289ad18a0ba94670cd36547734e2c7bb32dd49709f0f7149944c450c23b7f2d360e3602cad5ddff7fd9d711eef6dd4c32e66c4433f041fffefe112024a655bc5bacbd0914bbb2b2a41a91b1293fe9478ddca926a13e6131cc5e9b70625eac1e533ce8171a2dc7b2c4a490e966445", - "tcId" : 177 - }, - { - "comment" : "using PKCS#1 encryption padding", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "0002ff...00", - "result" : "invalid", - "sig" : "1acce04e348a5c8377c54d8ddd8ec2d8c5cb9b195863c32eb716745f3462b5f249b612aefb31ba484949d0a0cb5cb8e1f06c1cec58fe5ffff6ba796218c46c3e527c7ab0c4276ccbafd133812faec33721a08542e7e3a34449bebbb28bd0f28994c6801ba5c971991004e31de8f728f6bc37a4ec7b049c1f2dc64d4be9415462", - "tcId" : 178 - }, - { - "comment" : "invalid PKCS#1 signature padding", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "0001ff...ee00", - "result" : "invalid", - "sig" : "61a4066d0b64964100ecf583325cad10b53912aba1bf3606720d2bdd8e21120bb0b5e4323987d96039819ccce0e5e90854bc0e5c239ab198f75b00355a04e4eb1f855f76697cd65732820575306eb9323954bc5913568a7278fcdeff8e8acad4481e3559f8c44a0be3bc02bae437c3146e4516632b3fe788c3a0e44171155728", - "tcId" : 179 - }, - { - "comment" : "PKCS#1 padding too short", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "000001ff...", - "result" : "invalid", - "sig" : "979a313677883b0980997f1cb525f43401739945860149dcad80f602df8abed4fd85bcd6e174d9183a5a44008fd77b5a5abcffbcfd4f47ccd2dabef963d9b228310d99000ed0cebbf61438cbe586985bcffb3923a8467a97ae791d0b04925c0894b5a41583d6de72d4369f481f66abce41a577fb128fc0b0aeec746ec089d834", - "tcId" : 180 - }, - { - "comment" : "invalid length", - "message" : "54657374", - "name" : "RsaSignatureTestVector", - "padding" : "2 bytes too long", - "result" : "invalid", - "sig" : "ab9014dc47d44b6d260fc1fef9ab022042fd9566e9d7b60c54100cb6e1d4edc98590467d0502c17fce69d00ac5efb40b2cb167d8a44ab93d73c4d0f109fb5a26c2f8823236ff517cf84412e173679cfae42e043b6fec81f9d984b562517e6febe1f72295dbc3fdfc19d3240aa75515563f31dad83563f3a315acf9a0b351a23f0000", - "tcId" : 181 - } - ] - }, - { - "e" : "10001", - "keyAsn" : "308189028181009e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170203010001", - "keyDer" : "30819f300d06092a864886f70d010101050003818d00308189028181009e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170203010001", - "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeYjN+99T6vsJWG7RaGKNiAisj\nZmVxu8diwccXoUpG2PWBGQcqomJF5x/GlFVAM1FjeY/L3qBLMQTuI/LDh0u/s+fg\nwbpfH8qQkmUnRBTbaVel62aODjajiHhDVdUo5RpqSpqca2q5EoEqJo2sncrPHBNQ\nd2jmOx+C+K8pw3hqFwIDAQAB\n-----END PUBLIC KEY-----", - "keysize" : 1024, - "n" : "09e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a17", - "sha" : "SHA-1", - "type" : "RSASigVer", - "tests" : [ - { - "comment" : "valid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "valid", - "sig" : "8aa2c8a167fa230a1d1ea6bf5286d3ba6e675ca57cc5ca8cb26fdf465810c19af36cbdf843319f7af9b2954f372ef16891918aaa2ab64dbd1cd0ea54351ff2b3437fae5ec947971662c1f75ef6892b6899b77343fe87665c5b74df322b59f017e5488a67ec836ccc3f873788d60992d43f64b736507c455b649119373ba1aea4", - "tcId" : 182 - }, - { - "comment" : "Legacy:missing NULL", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "301f300706052b0e03021a0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "acceptable", - "sig" : "707e19417b5b3cb975795e5d53cb2db69bf80699e69114955aea5ff45755eb365fd34a18290db1975c32388eaed0d446b44138bf18b012f7da3ed067de6e444a5a66a35633c875254ed3d1b120ce657873e888af703e649076b368e90d761cb3e14cf79099026cb4a4c1f20c771c1d7544fccebd6d642506146e3d28acb6cf6b", - "tcId" : 183 - }, - { - "comment" : "long form encoding of length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "308121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5b4cb0b22300dc4913e7c1cb82e86663462e4b30d03053f697d59252e01339cd230b72afc8623e185db939108f3a47814f418b5411dbd3365d45b609f93b1f4fa10b7b908430a9f7d97037161cbeb2a1af0223b6657179a9bd2efa8c40a2f57b20755042b401e81d3fa3d4faf69d05cfdf3b7c3d5d3cce8fe036e9899db34de5", - "tcId" : 184 - }, - { - "comment" : "long form encoding of length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302230810906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "264bb84974efc808ded6a363c50bba6c1ad8acea4d26f86afb81839d8ecfe7041db3ace271f308399bf3bd2effd70c3b17e968f084867a0d95299a8dd0bc27e516925d3b8c0e748d5f91dfc87eebc383ecfdf6bf46cd28912bd4cfb9949f7660f1dbdba527db82cfca5aad1f99cebb1d7b554d4038238a4755b25c2348397e2f", - "tcId" : 185 - }, - { - "comment" : "long form encoding of length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3022300a0681052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "23fad8546f338cec2aa7fd93387b8f1e735e3fc3337350276efad8950161e6cbc7dfd28c7272be65c9dd469cbfc8ddeb6945880234a60c0778d5e8f185b95b0caeda346ce5b8231f94c076d056e2aa7245072ee055f37e7392ad4c158dab92263e4803d82939c7ede603c3467c14c61a5743df002358cc63eab3648d8ca8ec2a", - "tcId" : 186 - }, - { - "comment" : "long form encoding of length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3022300a06052b0e03021a0581000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "64513a079e0bd31939110d49d36101fd2a49c6d940637b9900fd317a64d174ef64acea808329b700954471c8282d1f246ca3172481fddfda77bbe24deb8d3d20200e78ee9cfbd97b063c1da700a50f635cc32ed74efc59407b8af422e01f728997c9a2dd6f8fd0fc89c9c5a9b0a2038cb006f3e8a8bd86ec129db6ae95b18ffd", - "tcId" : 187 - }, - { - "comment" : "long form encoding of length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3022300906052b0e03021a0500048114f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "79547cc01aba5ccca5e0337304e02c48455df528e61037516262e151d4378f3447a730b894d63974c3df0cecd708bffd53742c908b718ea1e09786f00b58f434a10e5014fc5ee96c8c87aa0cd73348a470c369b71bee3d78e3b7a640d605736f3b3691253d853473e34e0eee9533abf655e0e490744a354309c3639ca5e0e084", - "tcId" : 188 - }, - { - "comment" : "length contains leading 0", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30820021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "6dde5d8a638e4cda4551a295aa037c0db901578d70b6943d58f842e2b334822e986506768fbd73bd46e62f11acc308eb9b0f9fc8831729fdf630bb0b9ac8a9ce484e1fdf5d1099659ff452c132096d085b624e521ec0cd76449f50e57fa39adfb91d1c4cad4b9651cfda905689c24b3118970f78ca6240b48cba83d19da8ae91", - "tcId" : 189 - }, - { - "comment" : "length contains leading 0", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30233082000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "28a4c4957ee24b104aa7f68d8d7fe5275abfe1c449f6e2d41d2741081e4e0248ff40acbfe0bf7652af44f4f369de583c355af6a5af87500330710b976f1bd3a705c216255d71589c341b237024337d38161946dd0ee3fc822b06c96775c6be57a906eb7c6178751537bb181e47acae959862253c34e979c3def80038488d0482", - "tcId" : 190 - }, - { - "comment" : "length contains leading 0", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b068200052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "08cc5258ab3d68d796e5dd868d676ce9c2774d1eb6a16b4bbf0acaa0baf9d812ed0138a17ab8a64dbb913e33a88a388883889bfde6922cca5ca98d5fd1ac13fa87eb1b5701cb4ef5271057b39cceafa0f8509f9151383058a1349460db1895b3d7fbc043771ebd48538e9c208c34719f21b2d60dfb7a06a3ef42d1f2a90826b8", - "tcId" : 191 - }, - { - "comment" : "length contains leading 0", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b06052b0e03021a058200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "118bdd711ce909f3e6894be2c5f7fbd21b6e542205e63447848bd6be079874f2858e9640ca8723cd4f73d1d272780aef52200d991cf620f7345f20ed4b5c978f93dfa495a24680c762ff1f1c4c3d0513b818b2cdedc63cacaa76af3b4672e0c3eae523b410d7c03ce4b9d2f65f92e580e4e7f04d3f62047db3968e33f0f1f40c", - "tcId" : 192 - }, - { - "comment" : "length contains leading 0", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300906052b0e03021a050004820014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "7c2ddfeb9611939302c4791b44d2eaec63ba700853c84c928e11f50a5fb15c47a2f0ad91962aa88e944c0a655db19ea4bda87e386ae820fea49725c75e13b26a7c7d9dc63e353259d318246a3ec3c4b7d2ff8e6af164fe73ef35eeb76e921a523f48db83d541b3abca995d807968cb960fe192ffc0501a0840a1f5bf1b332123", - "tcId" : 193 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3022300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5065698891c73f55ade9d829053b14086b977af8f8ddcb9d2b5d236bced0821b00cca31a26b43a838ed36f96d823205fe79644ab4d431d2072f823bf9dd60bde8c2af3e2f4af0fcd734f285c0f8e0b9e5cfb5b7cf5d4131ad2122862c7bb6d9a9d6a7ec674703c79e4712ea84bc178da4bbf08355b2c248a5887a9b87702f70d", - "tcId" : 194 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3020300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "33ab162433e5c9677c2ef33d2949c64167afc165223a79ea96bc1096e0654db370f84b30f3ae03da910e6343fdc9f7413e9422f76dfe4287dfaf7250567076a4b2cba812b784410ff19f412df89f1af8b9a5ea4809b7f60b8b5b4063d07dd17311b5b0b75599ea8988c605b06cee2b6bcf79f20ad7c4bd67cf179511ceb9fb21", - "tcId" : 195 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300a06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "7cb2655e9bc1e633b46656d28db5bf457cfd6a6557ebe511a694ecd36987fcf94a6de7a3f73d47777990697b5663fe59b838fc0a7fcc0604a08e951fb1ef4dcdae0bc09c6733815a65ed465e86e98bd08ccce8df0a7822f1dd74fd8ff7add8314387ed2bb5474c7c282333bcc962af3f0506a15971f30967f49bbb22cf3e99d4", - "tcId" : 196 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300806052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5e147003f7061b46a6046dc91374cbb2f1113ddb56dee64f203a513b421330655c123fc2c51a79ce70fef2884b6b444ff8639d5448a0781f8f0503009cac89a58fa0bf73b698011d80986379dfa0b8923591f2c310cdea8982f8b87dffc4ce27e5a1a75f44c40e95898d0ae12cabb94fff41116f1d96dfc8fb5834965b750cbc", - "tcId" : 197 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906062b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8cf10e501268713c12ae5c26c5982c082a912ba2d22501a12438118067ac19957b0191498fb2113d1ca2db5fad32761f282b4c7684827b35a1709297c9bded1fe61a4e1963d32aaf4cd0ba5c51ad9c1aa3494c47afca86a264293d9a940310d6c1d8bc3e51ea3e12488e87f624e738f3568b21ab5f7a8b299b5eb0d7147ca794", - "tcId" : 198 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906042b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8ee3b703c37759112397fbc6410d9c95a93084f544a26756071b298ba563b2c22962befb038d995912ef5b48f5ffb9d187be72f835d0afa764eaaaffa2cf42b0918e8b364bdef42a482e571cb949342654c91e3012776620cdb590323326e2861d1abdae6ea2fae95d7304b25255aae9d7309324bfb6b47cc2555e5191e95a79", - "tcId" : 199 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05010414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "7ab24ebda94da9c07a8742a96884e7006e36c15fadc0d41721d8192581ace97b040af10f79bdf1041ce48bfbdfe0e2807042ef91efb0136acd592346bc8c572bd0da5f6400406971b8d84b021c0550e32b9ae8cc4481b8979979170d7690158dc95f2fea00e05566a2369a3eb34794cfa6792128d72774eb0fb504490a5e9484", - "tcId" : 200 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05000415f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "49877ff5a25db5d9736e7c0198f7908dd0eaf2f2ac754d6456073df7a1b8d87f49fe9ed7caac03e92cf8bf253626c2ec049c4dd4615bacc5a617ffd874934ad868db7c5d7db8e37bddaa22b557b49bf8ee769bcd0d0faee45adaeca042fdfabe0864256a64389208ea8a825d373c439e220a60fb30ddf96427741e5771b89200", - "tcId" : 201 - }, - { - "comment" : "wrong length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05000413f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "6acf67de89d21ac6c0e0360dc872eabd3d9f315a46921fbc835391f4e5df2d5a73826cccc3ae099c76c5e0b5dcf13f76316cad72f2715be8927fe83273cb5b10dce6b4a58236e90028146519ee975599e2cfce518be7e20701b82d24e1448654a89a52cdad64c33ef916e1d3a40eaeb07a7b1509a151ca7a8c3f37b734dbcdd3", - "tcId" : 202 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30850100000021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8291239e82027853aad5ec6526dc14eb2e4d6f62459cec895e311302e531a472dc720a55f01089ad3ff96608cd0804dcc4816441f92e77b9dc59d85a7b750cef32013fc888ce4bab028152ed07d31e1232cfbdcdbf096cfbbed22be93a8cca41ffd69575c3e47aa6f3c4bb895690622ad253c60db7fad789b3508252120f2905", - "tcId" : 203 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30263085010000000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "0c0a60f4426a0922599d12bf623821ef3a69e88b8f3df39c998b91951bf8fd9f12f379db75bd051943076b73f145f6de4e82c050bdff9989bfb7430c6b4483502d291e666fc1b93e61a2e7dfc4f3b3d0f695ac605772a8f54a85148b76285aa0ae2a993d5061dccac1afeb9605771de9b51d6891e875c384d8827faef2388555", - "tcId" : 204 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3026300e068501000000052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "52d65dbd6d48dce0dbc538883d3508588966c4932afcb22457221c34414a59d8effbcb805c6320b5edb024c745afec75bb7c698d9e903fffeaf7a4ee8c36d7f44482f5116d8d7758f08c889ad777405f204e1c5b75e1dd2721f46679fa13a98f8bfc07885ad67a43fe4c05ded4c36f8d7e1bf5695bd348192986f1b40c60527e", - "tcId" : 205 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3026300e06052b0e03021a058501000000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "485b9c137230f1bd439b4b5753be8267f386e1725d63d6c29bef2759c8fc81d4bfe2b5759e9dfd1772fe2cb661d320ec8fc831cf6e4abe8e18d622893a7ee92c64907c15427e7748faa3d1445e7721260e70be4f32167d60462fae53bfc2d943501b8634e443a940d9f41a1391119305a0367799909a7b83fdf7374721d4efcc", - "tcId" : 206 - }, - { - "comment" : "uint32 overflow in length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3026300906052b0e03021a050004850100000014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "73c06cbffd5b65aa863f4d61321d840689ab69885ecc340748b8c4ad290945074fb58c73a419ea9f56e9ad70d1b133567a6c3e8e42a9b009241179eb154d7fd1603b6e25db969bb62eac8477addf62f1437d225c57725f3a017073c7418e70adf1e5caf81740e9503ff395b956bc90aced537e846968d879e1a17f4823aa3ffc", - "tcId" : 207 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3089010000000000000021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5d718291abc4c814b265b5eb7c41d96648ada9e6baeca90e4dc851a1655a64aadc072ed9402f583f6f56b1d885c9423f4b708afa978c3c941969188b44b04d4d787bb6079e3527d6c1e36cd5fffbd33178cb6f23c4e1302b3a59cebe6353b6b10a005e6f24a5ef8350900b3717646917d1efdaf8aab1a3e994d5627a8d11e577", - "tcId" : 208 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302a308901000000000000000906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "1849ce77edf490fe5825f6bd1d6b4c312227fa9296ebb4f5e9a48dcb9b9a8918362a92d8a620dd3cec378f67beda0216b4c39fe07903bdeaed853f8884ba017fafce472c751284cfcd4db8fd5b93dd821eb43a202747927f1bcb947ad76ebd9d6085b616e8f8485b31889b95f28c4bf06dd4852142ac2f5ae707d1ed4f23cb5e", - "tcId" : 209 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302a301206890100000000000000052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "0d3eb2ba13141b7d5fb65b0ebca47b979bb51778e762bde3c4cf33b02f84b0567214eaf31dfdc8197c2e84d9a85af76e8bf832a5ca2797af79b0293d85f513e421714e364ac5a5551a066063f008d6eb7c3bfdda6c6fed53e0161cb607ff7e78916f301cd81dd63f351eab77395c718b56d8d0b73b4806229999fb98aaa7751a", - "tcId" : 210 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302a301206052b0e03021a05890100000000000000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "88b8e16d5527fc54feac2b63c905964e71c47701dad5944aba4847460b235c09e9ffa8bc6e59390dfa8d739893cbb32f5b06ec7f1fc918ffa0c364e0b5985dc05aafe98a8b86b18168d7705231dede7f0ffef76e6805a35a0ed9a78bebedcc274169f242aab6c33541c840a1e50cf09720b2aecfc356ed88ce1090bc54499f6c", - "tcId" : 211 - }, - { - "comment" : "uint64 overflow in length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302a300906052b0e03021a05000489010000000000000014f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "54bbb6fa9891afe6101547c34599fd1fb4bfb3dbe0c57fcaba3bd3700f0ee7d658ccd24bde5394aadc7480f181b90576a74de3c705b85bf214d9d8284be4b00b12678891989c3e3e16f53185fa590c016c29fd6ea02f97f1a872100969fdc57654b691122f2eddbeb6dc558ade5854fc8f26c11c5c32638bd4f7253099c7d1bf", - "tcId" : 212 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30847fffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "0dd112d02c49ae5057f4b89c14b871e5a446e96dca84c6d0d012c95615cf43ebd42e79d034fdcdc93de62e3b11dc11dba63dacf300190d443e3796e0c95a5db3955f799ec1bcdd4ecf69b708fec727b76401e989f5cdd612773f65e1a357e0b2942b78aac09dea9eb0d86463aca289a0af876eb4ee031bdf10e0df27516ebafa", - "tcId" : 213 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302530847fffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "603d34e2f71dabf90d862e828a0579fef915972f070c495da35fb279808ccf4bdbb0a43f666d203aa494f0a3012f5a4518c2a83fd8a8d3f1537be15174f22a355124657fef6e1b673c4010e8514cb133f63a15a7245ba9fd8acd03c080e4e89531c0ee3b41612e34b136c07c469c042b2b2718dc600cc1f4069063d0989fa188", - "tcId" : 214 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d06847fffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "11238413d11b4c1e0e311fee14bc4b3370c9943fc22c8b9429487bcb920e091d9edd0341bfc79070337854884267cbbc0f41dc34746c3e56096bc03cfa9d58e812d2bb9cf7dd90f3f16c048036255c0338c3777073a925f565ca9c9f78c7edb856f20a541275f84eef9a022e94dfeeeae4f07416cfefd742c21da502a1fe80c1", - "tcId" : 215 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d06052b0e03021a05847fffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8364095ecbfbd1f50f2964bce941395095071e45e9ab55edfef6ec767dc3790ac237a11132e6e087e96c226fd338783d4de817abfb9e134c2dd61dd4e400188f50be2a7cf3f96804011b5240da29bb1e8f7d4337c8e1f2af0acc1536057b0114a23172c6d37f9128ba4c2b719158ad70c5c44033e532c58d0d79c4508470465e", - "tcId" : 216 - }, - { - "comment" : "length = 2**31 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300906052b0e03021a050004847ffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8a3d7f621509191a435d03f94a338c1aeb99a824eac10a7c8575d1848f16af74dd87db6137a590d3e0cffa18cb5c52e1ab42688c2d50afa5a29730a98d6cd60e24f13c7dfd8500a9442954a23e773560a11b1a2a3fc087a28ff2520aeeff2a058928c9af14e90125b0d534bfec11eb1a02227e7d513569f3f8dc6e35f6fe6136", - "tcId" : 217 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3084ffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "149a74b89d1eb542f383ce0f24f8665b1387529770f561cee91f39e3af3e82c1cb0f589f4d6d5e9fbe92a8105993d55c205cbf9b4ec4c3085739ae1ae2ef4615d43040926813981d4b626f3c71e08981b8c900952eb23d8b9da218fc3f1f113a27682ead4466157e9043188d331a9632c8972ac7bca5729132bcf4b76309fcf4", - "tcId" : 218 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30253084ffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "3b55f4f1b497c53dc4fe59e8e2c8bd48f9199bae420e43e5a22fcefe047a5fd6422de99742ab6b3f946a908d382852359f5f80037976287f4806ee3edbfb94a01d81fcc9c28afbbe8d824089bca34f939d5298152bfa11e69e047a6379723d5d187c1cee5f437517ea237d0a024d2d21316666f867411b0b84f6010dbf3fc2f7", - "tcId" : 219 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d0684ffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "99a4a625ecb0c1c339c42b058d05f8cc6cd47bb29deb1df909fc16083e08ea18f482dc3932f0f81a0881c8a4e450d52da647fe501baa9363ce0261729beb173e3c6b3ecfb392ce93d89ea4c0e911ee2b95574a966c23276b9495b2ef6dee3a054c728c4ebb1cb294c703e1320a7d3cace4acdb57c605ab1c197448d5b890e71c", - "tcId" : 220 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d06052b0e03021a0584ffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "4473370a0f1cbe032dd66017379c5605c69fb77c74af9f119f93b4df107cda358dd074a7c8a2a4b3afb3bdd4d6074be90e6e8018fe482121cea28e7d42b4a64e0fad25c86d4792099812b74dfd225efefe1a4c9b664a3786c9e2070bd7ec4bbf666a4fdacf5966d121fd17169db07d47f04beae689080c76592527346d3741ec", - "tcId" : 221 - }, - { - "comment" : "length = 2**32 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300906052b0e03021a05000484fffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "1157bd4955170a4d8dbb6c3e20faf50fdc20140cd2f0ba30f2b3b059742b747f501e8fd4df0c614d247d7c7ffb91365e6bfb5ce36d21364cde0ddf7d9b10c1b1fa0ef1aa37deecfcb0002094a6b2971854f70912e62e91275091ecdbf0c218c0a3a4d7c5ddc7eed97c317f46ea2b554d391d08a5d015ffdf1c51de55f8048d1f", - "tcId" : 222 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3085ffffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "50af5b10a7fb4f26fe6abe148cbf8169fc5f7260e732f4ae4ccb79877a3b1c8d6fbc476a43db9f5e94c8c13fb256ce767aacd02445b47bcc54f535ce67251ee94a63b33dac77cff65d3de5aff42f12939f10320d40ac448cde70bcd8a40fa20dc91354f97521d847e45aaeb9fe38a8c9c0a3ebaaa34046a620654e305cbc3289", - "tcId" : 223 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30263085ffffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "4635e85ef3201bd0c0f1e57a2fda4c1a7b68f36db6ca9f1f034c75bad695a67964086d3d7f7a7505ff10cd77f1017908634f309fd5e0d4a406c1c579b08b397305e0e6a57390738c2e663449a72c0894bb3beb0933cd12c469181b139ee21ca9954dfd88b0ebc6f0e8d29c7b45b2bf5714e17ea9950e0d5b476b55aa0b717bfc", - "tcId" : 224 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3026300e0685ffffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "6cec5f74cea80f137a424880ca5254507315b6e50376a969a444aa0c33d5a9079fbdd417662c16048a249a94d251685742ebe4fba882e797bc77f6d28105136b2ba9bd5ec3080343d00d7bb9f579a334c945c1239680c11170e0470e801bdf6f9789a5428cf97b0af0f2fa77db2f8fc00182b1bf9601acde6fd5158b4f57bcaf", - "tcId" : 225 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3026300e06052b0e03021a0585ffffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "0513eb217a06590004cbfcb0bc94c0c6f79b488fffbba9d85e289e42b91824c8c4e1dc04f3ad6f6ce6e8480c96889bef3c62105bdff8af972264cf0110b4e522fd26ff6af8147990143828fa3aa2ba25066369357e19fce0b8f90d048ac1ef19380fe493fb70ac9660d5258dc0657a6270166d3400c2421bbf57bcfe10e2ad64", - "tcId" : 226 - }, - { - "comment" : "length = 2**40 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3026300906052b0e03021a05000485fffffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5b0df944013467b97409704eb2130b06e537f746c5387dbb858651f4446887f874977dfbe9d5fd26d0be6ed9ed9381b9a8511710d0756434ce897cb00863c652ddf3a6b2df37f9308a46dcf2027ea523f124c9f32c2d9a09b5d1928e2677dfaf5e0d8a00c3d0edc5c1441f017011a16f2e0788fb2d8d22e395b4d79a8375ba49", - "tcId" : 227 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3088ffffffffffffffff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "52be2fd82c24a1fcbcc3d832732eb97b1032933fa6af3b7fd8d63fca652d4b3a40c8488695414049f416f4eb01095767d75325662accd8c47bb75500ea4a99ac1fbd01815d0b8ddf450e097380c53715298c22fd3150b8417a66f499495372f07e98578e407ca2d226c69533c80b08f58e1fc0ca1cacb8652fc9374e12f6278e", - "tcId" : 228 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30293088ffffffffffffffff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "2703db8b7d2f7a879c235f95a9a39870074efea76b73663c50c4581eb2debb494472402d271b115a14fdc14eaea36cdb4c199260abd321d8cfbd1f56b1954761c5c61ad3ec1e440b53f1cceb156d8638b597eee1eb717b110f30fcea92f47e7c1ba438b1b161967f555bd14f0bcbcd21833aeb2c6b8b3f5c4727d07ddf009b11", - "tcId" : 229 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302930110688ffffffffffffffff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "927d2fcf22048a79d64b34aaa94de24a10770a95e32f0a6e2b9bd5a9c1e502e9fca540e54aca240091923bf4a64fd703b30fb5cec96c8da5431373bfec653da1ab25cff5024e1a029cca12469db0ca362ecefadf60991fc1c1615154450d9e1b54abad613f5ddccb5545e615c6168d0247f8e7c061659c9946c3af1e373a618a", - "tcId" : 230 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3029301106052b0e03021a0588ffffffffffffffff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "1da7bb65b41d9e5fb8b895882b9b6c2aa5ba32e7297c8eb3d64e5ae4311ad229692296cc27eb84e8673c29b65c35b1d52038d8b4136b334f4bd385621d7ddd6e0b5718c65834dcee0e7841a154f1953b130573995ad5cb29849490366936ee8a383f33f6cab3221d21d86c42ad8fff91efc5257ab8e9279df968d477167e75cb", - "tcId" : 231 - }, - { - "comment" : "length = 2**64 - 1", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3029300906052b0e03021a05000488fffffffffffffffff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "4c3a7204c4807d5b44fc36eff6b0513730fde67c74eb7a7d0484b7a5b89e444e89b07170ec0ff4ec4f58b9f13c3bb82cba0081b737f62277dbbc678933dc3faad4dcdd61c8b4d62c7a1c9a6dc40c564b36bcfb9aff90e9c642afd81a8c9911351e3f0b78e0ad6850c937a69ee2a639be88473682d7c4a6edc77365cfcfe91075", - "tcId" : 232 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30ff300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "32107f36c8b86cee3154d197a6e281869070fa9947177aff8cfea5942b3fbc323452b002f957f19083b57d59e6279d80821fa33c1f450ef5f805eabf1782f729dad2f9d0e63462e901dcd449c7fb14a8c42ec9599d30cf1b16b45550061f5b6f7f91c4c2bcb1613daaec5984e634fdd65a19cf24cd29d093406d7f5f4c443a23", - "tcId" : 233 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302130ff06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5ebb4faf49a82b1fda92b2ccc8de0d158bf62f819359d06c6a4a2a508bf728635296d188d5a221b40cde9d51e107b8e8f73ed2a0c3cbd92325ddea1cad1f72ff6491133ab7a2847f3d339cb2317e8b9e336516a7a9d84fa8fb2b481df9e1ec397fe97d18227ab98c2fa55f080569aedc7025af770674a5b33c61b811922058dd", - "tcId" : 234 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906ff2b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "531ddbfca4d3202639ecda32eed51b2fcffaa0cc6a0e97bdc1df71ab3b800f3e80f661b118d9cd82dfa1ae35cc3a364dd2a1c688e90cb6b6a215485e5e30679838bea37edcbe982ae858ebb461a45ff687332be102eb65746d9539a693b489c3cd5901adecc2d4afeca278fcf3b21774f2d11090f436d949d4ef96480839b678", - "tcId" : 235 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05ff0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "4ec4e1b4bb0ce0b002b8cc0b47fbc2baa9be415e35d77fb95906620322a63fed39595837d1a547cffc5f50c34a4daebf3a15d7d7ede9e583ffefb77ca4e4cd953b91a8608ede58a5500dbb71ad24bfa2b07bbec03b702c53baf4a1053d4834376b205854cee7e0dbaa1ec60f72ef238fbce20d76f9549b485b41173da58356aa", - "tcId" : 236 - }, - { - "comment" : "incorrect length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a050004fff7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "7d54aa05c2043d5f6330ab97726ae0407d0f6be65cc1146b374d3e7f75583beb5ad0ba0361b2cd6bcfcfa01987cfdd4423047fa6f909b3fe3840262c55b3f2c0385cd8474cb92eedf9eb9113e9e83d0ae220124493c3df2380df4cea3e88b81d9e3947feebd788c2417c644974f6b909c1e44b75b74240b370f8663e9a1f63b3", - "tcId" : 237 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "1573e93ebc5caf4eba58c9d80b89c0b62de2073a85f5872a22ea283f37366fbb8c6c7f4b0a4f459505d95da2921d8aefa640d81f5dffb9e0e679c69ccb310eda59f36d49b33219b30ee3b0f680e2794654c99e63effef73b09891f67c403283999943d4ded2c823797ac2773aed7a0af88cade66f4a203fe91c8d86d720fbd36", - "tcId" : 238 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021308006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "9dc2d9a253cf809bf178002806d1c9883f5c74a0734f70dea7e322f2ea00a00a3bc864dc4f0fa90bdf0af0a8e46f893f6405a63998ed27f18cdffd1b46a183763e3bcfc4c491a023468f1b355d12be2118e4381d960fa2548afa12a6ea46da03268d1d050bd942ec8c2bf584f8d2ff00ff975860686311b1dd17d1ad6f262d66", - "tcId" : 239 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906802b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "3b1240c785cab25d0ebd26078da7323bd28352a878cd405419cef18938d27dede67112d32f6a60d22b14c78e0f5c392bc9f53f2a71769e21a9dd4b5d8495a203ff0e715a1173ce69f3c966d83e8ac9a45ad534c36b77d1cd120a6a3236ce023099b19acb39a25ec420f8765829b77cb048a5136b597645caafbc34d3c09723c1", - "tcId" : 240 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05800414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "84bbedc08a146e7f8923dbc116c9793d1bac3608d71f962664d2a155bc06b8a02d3a346e067f347cdf50ba537c14c1c8bfabcae5ff982e5543b626f89627d1a4bace0928115d22d2b0daa5285afab45c9d54e5fe1832494f432b32bafb8a922360f5f545b15dc189b7e64dfbe96372b401ad519162488f0123934a9c0512b4d3", - "tcId" : 241 - }, - { - "comment" : "indefinte length without termination", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05000480f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "15a6c89db01ecf6d5f4d3a1535bdadcab861655619500b010851340b88cf8ec2547bf402137751006ac9d675b42308f939eed23d010fa36006eee53b94d63c3ef3800665038ffb4f017c1f3f5f8e9b909fd555e67cb002fbe261a42bd7b617525c5027d5af82aae2b6fd29abe4f503dc5f2620aff14d7b7798fdb8d4a7629db2", - "tcId" : 242 - }, - { - "comment" : "removing sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "", - "result" : "invalid", - "sig" : "14951bfe3fa22176d5ff4ad5f7dec0d0954e25a2381c91bc17707034ba19087c9f5b167d250129b95b41c883c69a5628196f9733cdff2daacb49ab61ee430582aab7c785e4f70f2320ea1d18da9ed0bd4f96e597977c2aaf0c2b8a3dfd8015d08195e3446efe12788fb7cbfd612d309a13952682b65f03a8c9440fd735fb2078", - "tcId" : 243 - }, - { - "comment" : "removing sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30160414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "40868e6b6d88f66b2478d680ea58466d642e141951f69c1f25bc3f23211100441857b33253b4cf1668b6568b858d1c604e6062022c71c0d764f260c1924972ce44a89b508a3a220cc5b545c4166974e6b619d3d6cfd0b72be7f31070e743eb7611230b4da746f64dec399f71bbe8aa998a99f746bd422be6d02f0e80f5e9a337", - "tcId" : 244 - }, - { - "comment" : "appending 0's to sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", - "result" : "invalid", - "sig" : "34bff75efb6f79769cdf1dae7cbf4be4644b03b7e44ba74a277281e229a6bdd96f922884fdf97705a456ad07e13f90578ce2b3aad819879be2c4097ebe5329e8eb72598005d02c6e73d8ecdbb45fab138cd88259320397f6b90a5108adab63ea07e1b86f5e20455368cfec220782a63aa7aea41761ead5952f9c7da59135f0e9", - "tcId" : 245 - }, - { - "comment" : "appending 0's to sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b06052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "96d9ab79a2c8db9e9a483d5c36c0c3ee430eed6bd8385e4b7b655b7428a28d609ef4a9d413269572cc4be679497329042a1e1b0b090cfbc9a9236b94942e33e2e54a593efc3821ced8110042f4e56a521f4f46a3305dfcd1b899c0f092aeba78ecb8731a91c2a64bfbe7e00d46d85275a04c2269a74cbdf3ee6d6aa4867c8728", - "tcId" : 246 - }, - { - "comment" : "prepending 0's to sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30230000300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "26ec2f6585eb6e732d8430faad988f8223db0f11b8e56c14370697f083f16daf1ce571f73ed43162b40abe8736a43b99cb3c6c6e4a2fd5e2cc75bf779f10abd718eb0f252fa867b4d08cd8ab3f80745c2d368ceaac264427b96dac8b4b7aeeb3303cf4bdb7a45cac40f991c1fe53e8dc530c6dd76302dd8f6bfcd86d6ab290b2", - "tcId" : 247 - }, - { - "comment" : "prepending 0's to sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b000006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "9e4c79c5fe53b5514cd9a3f3d6d898b53f92859d7f862f66b08585ebd6efcead5b69df6d12b1dfed30abf729558f340def7ffd341bc599102ee3cad5459b11457a2a463cdc40594fea9b7d8d0a99b952aa442a25f77991d34a2dbb0b5d73946d5780c176f0cd977a4e2c26b3b25406b7092c2d8ca14205007fcd0b776d01278b", - "tcId" : 248 - }, - { - "comment" : "appending unused 0's", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", - "result" : "invalid", - "sig" : "94c2d05aa194c25bbf274f9b1a312f87128d3c177cda66961cc8388a3ed5c658cdf320bc6af14e57b1569ee6f96280e5fa98ca6eb67017cf3077fa63d9f7a916c445dceacf73d06fe53060a11a4c9ebf0e6203890c0da57324d86fa92e8f9b854c262b57046b1422c9aabd40edbef96f97c015690a4dd1f84bcc02867067d35c", - "tcId" : 249 - }, - { - "comment" : "appending unused 0's", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "789468845b4388391ff3baafc966a3957f2db65a01fb34132be2445c22b303fcdaa4379c14a9291f3a7e1f23948c5c6b3d1d61934d3e5689267a14b122017df19da59a762114b4db56b17fd61043caede4ad0c8f89ddf180456d5695b337525f6dee1d1806c69a14868ccbe6edfa523795a9422057a3dd9ca8636e5026ca74ea", - "tcId" : 250 - }, - { - "comment" : "appending unused 0's", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b06052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "65929dfb1cfa05e3a405e1fd566e86a0627ad471101f5b2ace5d2a225641a521ecf2638b5de2c9f691dc0d4260ec49ce2b05bac8064e5a16881bba6dcf7fbb890896c27ca5fad9bfe6259aaaca16d94f01c24f13e30285caa9d610ad26457376c332bba7ab26d6bf832c7aeb2746faa914936c9ee51f9475861db055a89a1cf0", - "tcId" : 251 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00500", - "result" : "invalid", - "sig" : "81bacc6576415739b7cdf7ec09bbe148be54e8e9b1941992d6c3108cfd3bf095e9f2b4d0c9101136def16587e2121e6ce9d705be253c1597b4963ec43e99ff48d2cfc1ca6141a7c6c309d7a09312dcc5d2b985c38c89bc532578e19f544a0d22262306482973163a93a0e7845479214300f00cb9a01bc5253650d79446c4aa7d", - "tcId" : 252 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b06052b0e03021a050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "42b488de85d7a4dfd153e07d965116dc20c05b971faf7c7c899dda96b3325947a36652cf1c6861011307c47b45fccdf1520c39a56e5ecc1292f336ae19256a2e68ca1d3e8930456e53b3778ccaf50a79f8bbce54489281f7dfd376473951f1a893460503cdec4ed81c722906fbde5b9553ace4f794e600b00e79b11822d13ff0", - "tcId" : 253 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b06072b0e03021a050005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "497311a6c38b7b78634e563139cd5255d5db5f49950b9a45928f0e0b84c9db2bda1072389bdd5c44b229a4038d5dd111e4681fd94fa09775e7670fa7de90f1362621f1ca85fb9c79d941fc34b121f60e38b211b3bbed00edbada6f53aaec2555ed59145af32235232a322519fd408ace24b819e0e3c9bd0a6597d84f9530d208", - "tcId" : 254 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b06052b0e03021a050205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "637bfa1961468a3ceae4f91bb9fdf7815d171cdc947a8cedb8beb9077f2096b65500a15c99f512c34acde371be79690acb660bcfe55c0d1a812d12d079f516a6d48b3d35c5c10f21987ac6ba830839a83b1d140c15c57a9df09dd0b1cceb323b1c9a0d854510116d0fa5d16443ea5fec8fc1ec782c76936beef5bd420d789494", - "tcId" : 255 - }, - { - "comment" : "appending null value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300906052b0e03021a05000416f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00500", - "result" : "invalid", - "sig" : "7fbadbb2cb7b323b8f1dfe78abd8e6b78df62aee4cd2d261ba32c05fa321caabf2ec7486bc9811999e48b3b1b06fa1c590fb7b014fe6137165357b4977821e74323eb64a338e98cb0133cc2a9a46e1691fe45dec76781e60022eecbaa6773e911589e831ac2a485c9654fdf3cfc73b66029295eef4c8065f831abafd960ac0b7", - "tcId" : 256 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30264981773021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "7d63040570a002364293787b3c0340b7c460eea2cc307d4a6542662a04c0f07ebbc27457f1745129eeddf08156c977e8e346b112024b50c2e3d3686b8e87dd0e35d4f5499cb14049e61e81a5b43fe306ef02b644f20f8db8ed738de9dc630dca8de629a9bc268bee600b7c13c35eaebbbd4e018df9659354efd9bcd5452f578d", - "tcId" : 257 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302525003021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "0cc6704e2d24718199b007a9a590a3a63aad1d5f769bb29d2c233f38cd994ad8359522e9c1af260bd8c526de9528de4bf67ea0a34286eaf9e015e4276be490214a52e4f66d44d6f71b7e5c07850a18072ef3e15ce31ad0a085ac59501abc4552a5a2762d484ab494a281801eeebe59d20187f3b6a168cf23f0893b3ea100bba8", - "tcId" : 258 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30233021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00004deadbeef", - "result" : "invalid", - "sig" : "2916f598221ebb2894a79ae4580d3e7cf6af6a5d345d4be8b254b9efa08d267e3c25570a515ae47a22fe24a914218bd7bb8322e96d49cf16076cd5cefab88db6609438d939f392c2c985272c7561726e51c85ade312ea1b77cc96b0d681f6f2695106d6e8dd5fd5556ed88151cc0a4302f61f5f3db1e714ce11356fd6c6d46e2", - "tcId" : 259 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3026300e498177300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "934016d53fdc1e94095ad0c3b39fd01983a037a5344c486edf74efe2daa9da8e1b8e597176faba7ecc9562d432ff98dc205d00cb3937221a6efd35c42674058db4edeec5b6bc86f49e31201e8c6d5b0fe3d0463e2b36bfcd9bbfd055e89034446da971bc3dfe793350f2f85862baf328c542199ad55fd56bd1f75094eb5e09e2", - "tcId" : 260 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d2500300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5ef2282d6b3b03eeb68b8f1fa17bb20d7f3bd2a66f2450ad97048183c3647de4cf533442f92e2ea850b09c552be9e99419a48891e4952a0d4d886cc1a7115563a49c3490fb8e146b368d3a9f9d98567d6ad03799e6d6415cd325a413d43be0ddd2d5b3706c0bb0432989bda8a5d4543b832638ff3ee4ceaaf239acf0c1ac2f53", - "tcId" : 261 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3029300b300906052b0e03021a05000004deadbeef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "88f59da879a63cb4fa4523cda167443e78b2878e8143a54cb0e237ff51e45d34d17d59ce704b72c185346c7093b79fcc0700516dec9c5cb8c3bd7bc21a1f46f593b38b4dc52f80e06a1eb7631bf2590dc7001c122bd2fbe260547c9d13010094ad1e5e75255cbbda3539b1454e3914e6c1e8c93f58b36381b844c39d08770c64", - "tcId" : 262 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3026300e260a49817706052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "1458cdaa71d53e60633583b0ca0edd905eaae3dc86350c4803a5fb5d1620b31713930cbe5d21d9530cd791c1cd10007078799a9359b09f39c61394f0d2ffe366efd4485830aceff2296da12a1f9b6677a1b8349cf6b832e7b9821e1be8d5e39a7e892062926066312b231306ba32cff73b03e9be39f12eb1a559e7e18d912f85", - "tcId" : 263 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d2609250006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "7f2c73434ec35a0db8a6e89d81171d7df1e1479d4b5e00da0d5e1223c95ebf9eaecb9f5d7b2705ea3e06f42828fc6c6c3cd3af52e3dc20c164789785aa88cbdb63c4b973b4f871c085670039612d4a9f50f0ff84e38c576b09bcc9d55d6c66418f0e8737b1c0e8abc3c2dcee84d7861e58d4cbe887d022a3250f28059c5d4288", - "tcId" : 264 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30293011260706052b0e03021a0004deadbeef05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "51d48f38227999d2d1af07719ec317d34e2ee5e42650a6b59b2d0057b7df31a2b551a736c621f5a8e4345fa755f57e55ff80a61c041c7c28e9148b020913b72d6a0ea7cf2f956b567eaed32ea647687505e11d756581fa1d0b593207c6f2db3a75a0923a375731b925779fc3ade0a00997ce4cda3ec6e981e91e1af78b12dc26", - "tcId" : 265 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3026300e06052b0e03021a250549817705000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "55dc53df20ba602ce3b36914347d0a2c22ece2b11ca27b9f8807ffd36545ae33f4a665b6a125253a5cd7c358c52d75b65cac14f9553252ec770c25ad03693a1b6f44470a7418bb55ef5d6a0528ff0174119b1b43c1fd1d07a2506603def7f66d45afb99ba70178b3774cc1f3b4421addb8fee0c22e86416b0b1f3c19356ee38f", - "tcId" : 266 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d06052b0e03021a2504250005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "1ff67456aa711438c0bf7e46aedf2cd4ebca7d0e9f8b3f98af54c949a1e27026281f77ecc61ae1a981afda0bf7aae38619c5447508b0fea79a588d0d2806ae0f67b32d6dac4b2ad58dfd413d235543666ddfe31d8545015edf25b5b90cf0f8c592f048d009a293dfd1e7bb50a37d52c1540bccf99d8fe2c1299cdbc563d96b45", - "tcId" : 267 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3029301106052b0e03021a250205000004deadbeef0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "6af2cd04b32de5d3cf8ce985bca6f581e96dfb4ec483b1d2c06cf4439bde888524b2e6675c4fd4e10277752d269c87fe1c4eb70a72a2596cf53f1f4f0ba3e82212e72e09774781c888a96e8870658bd9c248bb1f0f7e3c44f4cd284dd6c611cda266f2f841ec1215295edb5291ff1e5111701258441f06b1ed85e16452a02cf5", - "tcId" : 268 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3026300906052b0e03021a050024194981770414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "0541e9a8f0735076b58133e205803982f403cd1203407ebff3534a48eb35f06842fd496d505739fb07dd85f48b3b24685e1d6c7be539edc862cd9b6869097c7344847201842aeea3ebe3595557cb93269898e2109226a2f4eca5bfef0851a5fceb2d6bac753faf6dec4911610e6b40d827a00502537a6fe743d616558813df8a", - "tcId" : 269 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300906052b0e03021a0500241825000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5e21d6a684e3daf0be25155cf79874a6bfaee2b771d38ab8895f031cf25a9a05fc8e1d421ce78944bf57a3f0214ee090c42cec51decdc0dc3ab376deaa4603d59eb3ec8b4470e6d8b00b53651873d48f6f2cbd035bacd0f7b24633a025b8ea9dc7c55dfc6578601849e9aaaccdf5fd4d1611b45ed3abe2010079e64de8ab74e0", - "tcId" : 270 - }, - { - "comment" : "including garbage", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3029300906052b0e03021a050024160414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00004deadbeef", - "result" : "invalid", - "sig" : "1f96486457eb037dc9e2464e507d720adcf90f48a0dd1d42bf4239df64e5ef25556ec27290a8d87fc9fb89ad0a8547980f6b2bd7efd0dbe425559bdf08005fb762b92d0aea2f33c17002ab9a911e457532f0134d2e35db6b3393436de160faca0a2c82509ec929d2893bf82a83bfe1a59fc9189e7ca846998b39919d3ec4d6ed", - "tcId" : 271 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3029aa00bb00cd003021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "48eedcec184b7ade4fb34efac030a4ce140fcd91a1a1e986bf5232e8db9160f076d9ae36ca23246efd53ece2014ea56d5e596b42ce66e3c585d5e6a4cadcd779c6df0d8c43e7945cf02a07dd3851258ed021ade9cfe6fc3df222ebbd6b9e3f39b4331a11c4ea401592883b4f8da7372526f4f3e7acfdad447846ac8160e5ce38", - "tcId" : 272 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3027aa02aabb3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "107ae9af715ac312dcae1f831a818dd55caa33e659ac6f1a15ef41ebed6207cb54a7faa7e45b519a3ca9c304a645f24ee9ad3eb83d6856ce4809e5d7137ed30e919c9615382e9e8767495495cb7dc4cc27e2ee8932c47cdc6c9154391993108cf952fbada535823368843adbfb06d874c14634659f7dd89b02a14377a5c1e8c0", - "tcId" : 273 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30293011aa00bb00cd00300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "34b98ee9fe1600e2806f67ea122dfc989aa727f16c8e2cf704b1f05026105b595528692c16a052725a2ea47c4ea2ef13c2f5f9a9304d11607a25b8cb261e64658c6047627e9a7651730b81376d9fd978547c270d15f5c57126e3b41b39ca687d6c8be52bf2552104ca06ef64dfe317095b835cdac2840d4f0d3febcc3863684c", - "tcId" : 274 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3027300faa02aabb300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "358ce2879366fcebb1212839560958d6a3cfc4cffe2a05e9c7ccbdf18b6427f419a2c1e85fd82e27bc63315a9742d141ca157a435c4f20758e4011b8b0b33b9fb5f0006170c3bbdf4d2fe16888404dbf8b9c00ef30bf45ea68371b76a692f98e79c6c5a574e410a8505d5166112f43cffc506a9d46276cbedfec64f1b2697584", - "tcId" : 275 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30293011260daa00bb00cd0006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5affee843b343a6d142406d3d89366a9149d642ca12a661c5d0eb0c1b5e15d3c90dc134eb76aff110b1964ed6566469c47e54aba7145c5601412cd38c630e05236c169f2ac6491795408d410a763f0090e299ad9022ebacfcf2f8f0f248674402479db2387e9eefe47c86c2430e529cd13e213753332fc4a3541de49dd1f3920", - "tcId" : 276 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3027300f260baa02aabb06052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5cf35c6711fb8b297ec405496e8db527ad1cbcc55ce6122b24ed917fb989c28e369354900abb96f41457f15754fd1060710c6e984db30eb73300cfd890454e97957a589de151225827b5a12384717a7ad92aeb941e1e148e8d008e11598bc7b8a3eac35f2af5584f61335a608c5206e5e24cf934ef2009367f3403e8da2dd0cb", - "tcId" : 277 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3029301106052b0e03021a2508aa00bb00cd0005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "6e037fa40b3ce48ea72b28bc1ce8cc01188e6f84addcbefa2c729179043b3804d6ff1f25d85c2b9d72acce9c9c64e3f63ecffac670f76b2be75d63b3cee45b72f8758345021177ed13b66ecf0082e3c4418cc92713bb9867c8d28b78f30ff599e82f17734d0772e1e733c0b74fbf31c4f1ee99dbb89b5b113a7f628742d3b2a2", - "tcId" : 278 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3027300f06052b0e03021a2506aa02aabb05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5e7bf33ad4d9393d6b368764fac6395ed8ba3da7bf04a0f95d8426684bf0e9f2f78c9e49189bbeec883955af428e6e4527b871aeac21feb8231162f5380077c1fdf63a7cd4be65f813663dd82e732cfb3e1cd09298abbc42fbddc3551772f492627e657febca487db5c03c54850327eacc44dbf4a7c230f1c8166138cbd95587", - "tcId" : 279 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3029300906052b0e03021a0500241caa00bb00cd000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "0c57e98c13628c8188a0095b98d312cf0fa1a1d2039700ab4c607fe75ea0fab11c2c84e5d22d26b014ae1c2aa948efbb1197e39eafc49cf9f010a7b2be4ab9dfa94ad48ce5dcd5c7fd405f55922146cbc541b9ebc1c89f30a2a3f7cf4a8b14797ff4a60922ac710e7496931ff69e4c0d4e06375c05a7ef1910cbd6c3cae5bbb8", - "tcId" : 280 - }, - { - "comment" : "including undefined tags", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3027300906052b0e03021a0500241aaa02aabb0414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "874f05aca449fe8b39b29dff1eb20b145ca4bccd25981176d33b6b41a1dcb48b7a668782549013deeceae3599309f541bfd4a15eb984a401bec4f0facce679c0608d962964b85df739ad19a926de875f6404ca5b209891d380f6e53140b1bfc05a2cf1db336d3a01e8777614299b6e2f683f2406b295f3366d77505cb2e56875", - "tcId" : 281 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30803021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", - "result" : "invalid", - "sig" : "123c3ba6d4a5de10837fe12e9b2c61ecb00c93c7d25aa440b7c739df817ccb37be122c5f5570e44a943ee345590c5ca0597605c1487986dfb75245f8e89e4f29aaf3c8eb5c5e8944a63baee4d0143ea2765b0f297a1da8a51981c26a807cf4f9a1aee00bb75cedfbf6466098f7aa27f1e3e63f4f0b7b8c40fc837c23248e914c", - "tcId" : 282 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30253080300906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "2220dc736ee3c63b5d5915050c6687b3861b52e664ce1ab501681d6e40990f02dfaf96f240adf2dfec05edcb268f6dda4129f901f7416660d56ab3a4145bc354fd11a1dc4e1535a4b8a61498508019ac38b61636356a641b8fb4d4739eb84b4fc49647fad35668ead0743aea841214a6e628ab2b5488de6e60d012c0566fe78d", - "tcId" : 283 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d268006052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "51fc2dc54c9a46a30ea1c7ea262e86c85110f8bbe42d5abaa3eafb13fa7f3e2424090476c2e50e5eb74d3b6f5e5fe379f3935afe5ed940d443fbcb8686f999c6fdc9e508a5fc7c27bc17169eb5d8e0421ebe7d04260c60435f56d4f614ab9dc0b9298c45fd660c352d35d2985831622eea08010bc27c887f95cb33699759e630", - "tcId" : 284 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d06052b0e03021a2580050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "87fb9a61395878aafc1fb4a872d8e2db7db123ce4b2d67cd36a7f6e7e190d0bef9487f54340c28fe55d1bd9c38afe166924c787169890493d5cd2a5c79317064313b77a481ddb8bff9a917da32899448d9104ab67dcc856aee617a0a65631609f0632d58bb6585b4dd0c4a8bb41fa0dab99a08489feda41f1e7e5e1fde382952", - "tcId" : 285 - }, - { - "comment" : "using composition with indefinite length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300906052b0e03021a050024800414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", - "result" : "invalid", - "sig" : "442ac72092d6956bc846d7be909704dc4633e3e59e6ff4bcc97bc9d412645dc17ec3db8bd885150bacfbb085dc90bdf26129637876a4d5713beee0385cb5ea7fa6ae57208df368b4ba95720a716d58ca6ee5a03ede1cc7f2ef31d8c459576ef72f6ba1b5d9409efc74932543ed601f957913a12304c2e29dac219d78ed12203a", - "tcId" : 286 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30803121300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", - "result" : "invalid", - "sig" : "2ebe12f793a821425e9513256ce1517b03b6bc19e2c2347e94651054caffb1f5d6101d4f3402d5945b4aecd04dacc3ba89d1123916d44941715951e9fd59bf0614a0534762e86275a8f1b0b16fd9a9d146946cff740c206ba6b27b26e8d1fc43b2b4d117e144973091674607844f86fce6f07a2a63acf8df67d3827141ad432b", - "tcId" : 287 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30253080310906052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "6e4d642285fa7a46daf985135181712e84efd52cebe8885b52c61a5cec753c1f8c8ba42886b584faf1551da81232214c2088060e6843d0d319a5e877bd4c500f6832f537306285011e5d8b98e2fe00bd38885211478f27b0d037c34d79d7f4d5828403d20b5463a7e1e2de2398c79fed33bc9eee2fdab52bb40acf9fb68a16a8", - "tcId" : 288 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d268007052b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "0de20757fb64e3633c36e8965fcc20631e9e890152e3a1d2d6a91fbe9ebd56bb99126050c79b41ef0c107086106738a91d0e815d3218404c1db9d4e8526e085ae10195b9cee788fdf7ba9d28c614bce268af0cc58b8a959fb4c24bfceeb5bcfcc4e326d9de825bcbd8eed0df37de2add59f8879326a7e6bfa2a36eb48eba2f36", - "tcId" : 289 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d06052b0e03021a2580040000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "2e48a4122de8e1779d169f5a6ab72eba7ca3b0c31ea73d41fd82047e18559ff9706acb85f92872124b4020ae001dadc76b61c0e166df0af677f886cde8e13dc8c2b5c93d62cee44cf3bbdc74756d249d3c59834e079154f6646a8c69a2320cf7bc3925523bc2ca3f8fa7d63650321d2a4de3ef3726f74a2020ff5db397454242", - "tcId" : 290 - }, - { - "comment" : "using composition with wrong tag", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300906052b0e03021a050024800514f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", - "result" : "invalid", - "sig" : "6726053471ecf6651529165c96db60559a525efb27d31de913a44d885d33e404fa9dd7d28de94a7d8dfaed297ae500a55bb3535d77dad3031f7edf7bcd636534621d870c28fe64f7b4752f59cb1490208405bf38dc054311473286c52a59a8c6060827ce9a2ccaae9739030927aaa5225d45655be1fd826eaa6b27a8e20a4f31", - "tcId" : 291 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "2e21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "4aba9d2c7a58610d7d3f1050cf5c1558369823c1a344c1573b64d3e8483e04995176f05c255ba67e8bfdcc6c7ca640a4ae423bb3c027f8b14318467e6ce1086db7307c0c9c56acd0372c9f53ad17e117df0557e5548d8d7bb6b9545ace3354f5400b832accea7c60c2585b34881461ee6595f0fd564de7f49a7f0228a042c39d", - "tcId" : 292 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3221300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8c7108f3eab93fdfe930ff1a149a071019936122a4ba0524e309c9af89664f4a202a4f49a4288d80f759521de7e0e04409b5d9f4cb93a722724e34bce76607f9a4c46081abc5a606cda70a859ac1fc931afd10d22a7a4c224cffea888979cb314e9a8dd75a85059bc282c923ca5fd6b508cf4e0c21a93f5d179d05228316eed2", - "tcId" : 293 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "ff21300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5200334dfd766b1052dbe9d422f94b979b60afe3d9a2d60aa5eccf0e449357296eccc321561534450ddec51de1b6dc6b94e1e8b1ca52714230f9f7081a36eab655827defce738670c769953dce9696110689c1db5d475c4b1b030db86cab46745b4f23d68dbe3951e089786101d19548816f78343c942f31373519aabee6e520", - "tcId" : 294 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30212e0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "3fc2126ef4b90f42dc8817fb368e4fc5ca34105ae98b3298425af76d2a304ffdabf8d246a53385e0b1c2a2c46205d64eae7be9edb22d5d9bbfa50bca0ca7a8b279ca8eb0ef3aa94d48ec1120010148a58bb576258ec2fd57d10c3d60ed4d94160c5256a24973e5a8333a4f54c288a18494eeff5579e52ee8a45af1ef9943d6a8", - "tcId" : 295 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021320906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8cda31b963c774894aeea363abc4af9a8b83cd4aec6cc9197423e7bf9f6935bce978a148d9179f47c092f3de5bf9229f37f86e7586d8fe197cabf27b99a902e561d722b0359a738523aef87286d19cb36d7b430aef83d9828df1aa334ec3835648b3b2af8c2c65f9ac8990d2f4df370d49da6f81dc93cb7035ee931093d843dc", - "tcId" : 296 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021ff0906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "426aa261ad32507dbd08dc315b39368e8909824128abb746c65743fee574b42840489d54c8c5d6c5553e8ae1a3f14bdf4ae3677fec308864ad9d5ac5439976e9379904c6ae5a24e73daa34822e846a0eced7314b4cddc0111c21387d56f89f03a470b79514dfa97c405c8ca9dfbb6f2e3610a8eb5d6c52b37b200a1519026e7e", - "tcId" : 297 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300904052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "126d30c8acb2fdaee4e622a2b4f2a16c56b50d03c3fa4ef5a417e9aac346512483e1f4fb7217ff640197d31b0d6f4c41403945dcef37da312f33eb845fb862ec9994060b085c005c6feb382547a4fa1a7d6e7383c81c8ff7a51b539cb55c94d41fa804d9d6968b57a2e8c946f5260d835167b3b5a8302bb054638b9842ac963b", - "tcId" : 298 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300908052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "44715b61effca0e94098d7dba43839ab8999dca771968c09b9263a9d732d000db443e4253394eb357cb05bc0d2a715d4d9a0a64b64e3ae7938e040bc9ce6f2b2a5172a564bf970a56a12dbe54d96bc9a6d5d1ee78b112e7c5447015dd461ce824062161f513f17cce02f259a80fa78e655b9c09d5f129fcab8df0a045d19142f", - "tcId" : 299 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30213009ff052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5ec2194d5f835d6dba9c4ab2bdebbed946f106fcd2a3c6a623e67e6f8ed7ffd8eb4d41f0bbfdcaad34a34d84f9a735f78de159748efe2fe3629f7f185e681dbc5c48025469fc890222e5be9884c550e5cc483f6854184df13162f20d1daeab78eccbc52988815997887e4e52ab7b756885442c7ddb557e726642bccabdfe78fb", - "tcId" : 300 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a03000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "2fb77b5a5766d1e898af896192abf3f347100053b920dbaa931a8f210f1b84d522b283e59f6f6f5b7b13d4a3ffd21d2e0b64d1b275501b0bfadd23e89361f327e8fc7f29992dde2e5ecd85ae81cc1740228f983b02bb9875eb30597fd247a8351ba87a5ad5ae32cc4596b4105904a19e5805b92c266f66a9516fc2ca519ceb14", - "tcId" : 301 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a07000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "6a853a5244bf6d3795dd7047da88403f24831169f0fe2f7b789109f279d01e092d5e35d837644c4b83614bd40ae164290cb4fe6fb6eea7dd271195d0b81715a32184342c8c83a82ab6fc62ad58e299b619489d5670c65a6f9faae11909a825da0c4486ea2ba1002f5f8d1dfaccfee2312c9098ee684675f920e61a3f6ff11480", - "tcId" : 302 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021aff000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "16f7787a9f5760f025b2e03886ae1a6c83a99a7495eb57e01b687434a1aa27e5f73e0440a0e6d45d7dae80b7f3d9dda8e2bd37540eac08bfd75f13371daa98a334af10762a55b684bef3c67ee6072717ee9fe67397fd612837e0c449d0404382a1b59adb19bebe32f29b1374b36f9649c0c5fe838252c15e2c8b92ba02bf607d", - "tcId" : 303 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05000214f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "71629cae46ffacf0f7af338c56deb86464d037b1c38baf338eea05164a1bc15db208b8e3054d828dfa10aa5595d20e9010d071baff42f5d39264ba7a10ab263a30cf169021bafc2647bccb1f624abd87ea18750fb3380e7b0bcc0e12f96ffb6b98caebf9f2faee4644c8d6f0d8d33511725ac390f99fae9b40968de60a50dbb2", - "tcId" : 304 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05000614f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "656312f836bcfdfb4e38f88994a2295bb55ecff0e745974753b22a15c67c64c92c329693917050fae66f565310f8ef8cf4b37dd47eae088adafc34cb0a2eb1d34223ff51bd230d3946fd8d4abb8ed8d4c923bdff7011052e07b358bc5d59deca4a3d82999e54fb5d521564e9ce1fc69c3968adf31a5837fdecc0c9552297ecda", - "tcId" : 305 - }, - { - "comment" : "changing tag value", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a0500ff14f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8fe1efcfcfb09cb4bcea76590fb8fac5ad9428898848d3c20efb256ba2532dcd77603bbc2cb7c5902e099081f6a54ecfa4b0669d5391c10f391aebfc636fef14bb7bda71f12e0d9f164a2ad47abba6103986eba5cbb0b1a4bc3887a51ebe614e0dfa60afe1c5c0bd76911d01450952408384fb88e795897c0ed64e28c5f00b71", - "tcId" : 306 - }, - { - "comment" : "dropping value of sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3000", - "result" : "invalid", - "sig" : "2b58ee609310e66e3d812f20eb3a9e2995bbd5947b5569c0c23aad8638590a43c8610e25fe6c248b74392ebe9f4edabb1e5b918e227f49bb9df288f5755d06f7a22e8e7e3d63b21ac023d35067142f301bde6f6ce017ffdd256647861801e3dcf38b18888b9986eb2c944937fe1706e28988f0781b7acc83c4a0ef4b40b25b44", - "tcId" : 307 - }, - { - "comment" : "dropping value of sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "301830000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "1bf19d3dbdc4d1ce61350bb52d11ef6ecde6816b875ce7fa7361bb2edf84115313cb95d21f3472b7d178e27c0701c6ab528a735fc0ced0a8af81c78d96227ffecc545c8cb7a49fe269e97d647b5b01e0996f29689504b1ff4e4d8e08fab6756ce9603c0bd622b4e74eb8c18373ac1efd5074d08ddaf8fd7c3204e25fc0c99328", - "tcId" : 308 - }, - { - "comment" : "using composition", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302530013030200906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "5e1f0d448504349b31c8a5ed03e066c7dd7878622fe42d645bae8592aee87e1056504d92a88a3626c54fe3da07649ae6bb30315f3c3b358beed1afd38d414785906dbbc6d0e188f9006756a545a1d1979a496449689ee3cc067072624ef5f2de8a1f6f0c798e8bbbb9b6e14db12512feaff11063dc3ca3a5b3bd5926bcabbd78", - "tcId" : 309 - }, - { - "comment" : "using composition", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d3001063008052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "18d30faf84664f79faa0dd0285c408fe54793df5858ed7cc367d62847470e32f433edb77c30f0d0dd549220cb18eba18d1076820ec27ac37bbd8b989b847ed8c84ed1930e7ea8566a9d043807b0f03fae51aa0046483343ae06831743fa79f4438190164e9d5e75610bb5fb9201365dd9dd4aa6b5dcafcfd73161dde7da40e99", - "tcId" : 310 - }, - { - "comment" : "using composition", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d260906012b06040e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "981a4523b61116d28d4bdb8d80969f7fe1cfbb06f4dd218d05fa332680b1342d20f0e4d4a1a6401ad777615fc56e3ca2fccaf07139f43ebe1d92d20605f8c894d88e8c062487fa86f51b2026dd12ba68077c3551d928990848bf0de07cd880194f2ac276af86c1e55e25044be3c7204ddafdcd61795a9e3b7885a88f43aa6b8f", - "tcId" : 311 - }, - { - "comment" : "using composition", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300906052b0e03021a050024180401f70413ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "98d603185c1e2927622056c9053a62e17ea4aab5808418725cf8887720f5f3500cfe6ffa00513e45b72c9fe44d288d06555bf715282f6feb685df2f44bfcb3ed541653139eeeaeabeae9d52514495b604512a9ad6223f68a860612b668f5a0993ebd5c9ce9cc00baa80484d60b01c23a6abf40be03cd1cce3317563b1f9326f5", - "tcId" : 312 - }, - { - "comment" : "truncate sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3020300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab", - "result" : "invalid", - "sig" : "3b5c1e0d3dc103755b67feb766d58968f94e8d8af6a209f6d28e7c0541a4fdf7a6976f664414f5ee0beb9369a59681291fb2c902853fcaa01bd065fb7a1da967849cf45bf558e375058591b3af1b5c8a18da21d5dd7598e7e3aebe0478180200294b86d88b1c39e224bc1dc22f1a8e537e05db467b5a04dc70ab9346c79fddd0", - "tcId" : 313 - }, - { - "comment" : "truncate sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30200906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "61b6f98e16e4809448e56d9845850b748bdb64064ed4851c141c57e93c37744bd91f54f5ffd9264f151294e6f73bc8d5a51daa06b9121bfea1f28847229875ab87a7297dc383987db1f6bc1133e344a95af6d34fd18105d154ca951e4e6f64f9fde7994207ddd5eb6bb2a07037f13c8d853a8b8684431d5ecf1cc9bde41cda49", - "tcId" : 314 - }, - { - "comment" : "truncate sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3020300806052b0e03021a050414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8c05912e8ebe5f2cc9fcbc2410bcb63b217756cd961db8caba316634c6ce191f365a21137602373f357461e9020b702025c61e3571cac6967a8f68375a9cd4792222b59c54e21649776f6e7d5995448779f7f9d32bb4e0e4e2b612b5c2b8574d98d01b9cdd26965541c0a67d484e13d4f49095ff7030b180569058376c7926a5", - "tcId" : 315 - }, - { - "comment" : "truncate sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30203008052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8bf895e0a26741d142767e67e73f102180a5e2083ee27d869585cd02c0211673641ab3e4f84cfdb2748b0a3a39db047fca2261c7ab3a7bac575990741d15c543f83f9da27fb5da3362ad1ce1a0eccf853b9e0a36f851b6cb5734cd22bc3b621193db37e13dd06d8854ff111dac2c939618aa041abce70123cb14d62d527223c1", - "tcId" : 316 - }, - { - "comment" : "indefinite length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3080300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", - "result" : "invalid", - "sig" : "5280f9fd14542d5b61a951893b081540d922ba15a7a650aced363106d97b69aff5b1ad624528b7560dce27c3a3e8f8657c8b0e9b83ab63342550fea7469ec14ef1cf48ed33515d56c7872d5eae8cf2480ae7549a8ce4c56748d08c4f3a61bd13b9c9ead6bcaa113bf3f85a112057658689ea075fc8ac7d74216918d588865ec7", - "tcId" : 317 - }, - { - "comment" : "indefinite length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023308006052b0e03021a050000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "88cd60c74205ced62ae7bf35eae4c86826ca946a9b3bf190ab8069734489058191b6a501b6766fce0f5a3e5f7a39c0deae40aa66ab36b5a2a39d955650118ded3a8dba0df5b50056058cd643630133c4f2cbaaf8055cbe96e63e8fef8074fa23e1f1d5a1b5cb5ecde5fde92c78441f2907aa53ae9e3e09f0a7a7628e4e2be5df", - "tcId" : 318 - }, - { - "comment" : "prepend empty sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30233000300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "91c68a2673606cff82abf69c9e2d591315595a3a0b612d6d2708528be0184c9116195f58cb4109a69f8d2f7cbf4036affcebe7a1615a914833b921b915ea12b16324e6e74f95d6eb5b03201d67b945f03296ffb37ef7cda908e83f44dbed24a54e81b71f840668fa4fd82b29c0e1c5b1c021d481c73a662668603d3fbf5182dd", - "tcId" : 319 - }, - { - "comment" : "prepend empty sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b300006052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "17c921fb3a8535f2e472df2c447a60f2fe49a4afeefa065f1c84e50dc97f989268ae6bf1e8d77f5b2edd59c2c7f3653b7565902c5b889ec7007fb9006f244257649888a4a1883146c88828717d381018b1f00d656d5e092172f49fadb42f913a92ae1eb4e01e3c2490e1dc52a109e37094188bcaa181898d97ea2c0203a885a8", - "tcId" : 320 - }, - { - "comment" : "append empty sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf03000", - "result" : "invalid", - "sig" : "077b2d2e79ff380612aa3f9c79e8b7a580ffafdab8ca3ec86501c40248b3459c0c7b2590fc18ccfba2b0e7a34c67b8d3a7ed92fa686170475666570d38464720b4983e5c374f1b6c604226284a62e20a8a37341abd72f238aec8a2cdfeff00c512c28e608ce98e4bf3640c61509ec56f7e2143216214eb5b06bfd0fa448ba633", - "tcId" : 321 - }, - { - "comment" : "append empty sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b06052b0e03021a050030000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "2121389e8b2282bf6022c45e7a3ac9f42bd7f13ea37060f6989bacc72fb6e887db8128024698a5c76adea034c69604b1f56e062627c840cd2f80802e6f2764606b96b78506614198844319bf7726b95afdfd19d5ffda1ccb159646bee5c3d81adf56f2b54edf749ca99a86bc9452f6a307eae06f028f86b4af17137f6a2352cb", - "tcId" : 322 - }, - { - "comment" : "sequence of sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "30233021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "059efdc649108b988ee6a63697701a3c98bf7c770dd525844dd6e936d0f468b3c786f82a03c4b1d23caca0dd2a62a6ac43f58b6cb311a819f7b9f48cb9b59b17306deebf1d69a7d93a2d9381e48ddd0ef1d0a07dc5a5568eeefb3832dbbad503e21141f6dd58a5bf503a469d49dd3edc5f3a712b7e63d8ae734ee1808a9654f9", - "tcId" : 323 - }, - { - "comment" : "sequence of sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "21d94c3d46c49bc86f376e2d4fba1495f98558e9f76136ba001f1f90befb6311771b700c1252894a5348491c262329e99cc52ee68e577615ebe73d59210f8ddd8b91ddced5fe98cd832b57a4c583318377892bb15bb7d545cc7a182fb47c3149b99e4db5f12df9105a055d0925d8f3d747a2f25ba1dd00a5184afa46695197e3", - "tcId" : 324 - }, - { - "comment" : "truncated sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "300b300906052b0e03021a0500", - "result" : "invalid", - "sig" : "690c052df7c7079aa3bbcc9d4699ac50bf0dd90b1d6822046c7ad1429900ce2c4882af9decd580fab0698e5ce3185bcc234561e051533283d022831fd8b19434e4bdbc84223ddcd99d1a8f28a9ba222394312d11d81ee95831b4264d5434c3122c30afaf6b990ccb4f6991f60e78195d3aed5f670c4c2fdc034a514b92c67519", - "tcId" : 325 - }, - { - "comment" : "repeat element in sequence", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3037300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "4f4f38364932377af52adb8c51c5bd705088ddbfda713458377c3997915766ae05da5c797cbf24a9c73d36fa61b1b0bfb9c14e429c0b66fd6fe1ec041b9d14946588dc384a7a69bf2ab69fd8da67d0e1fab2dbf1838959cadd0d3ca03c9c0bc929d207be60ff8e08bfbb03f4423cd81fc5f587bbff3985d2beef69dce295b903", - "tcId" : 326 - }, - { - "comment" : "removing oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "301a300205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "6ea8317813355faec271a659d62cc94f7408fe73178a2de00407136a53b69d77136b9ef4533e3cda580761f42a683d4a02a2abb7aeb941a44854832d18950d8efc43ae8de29c0c97873761d126e15e7816d173dcaf9315dfa045681d9a4b37b2ce1578ffcbfb4c30cba6e1746ec3f95d310839d75ea873ffcc0ee82513342a71", - "tcId" : 327 - }, - { - "comment" : "appending 0's to oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b06072b0e03021a000005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "990ac0a5dbe9f30114427c45925353e49c235ec8fc5b19724bffa75eb7e93987ed97dc3107e2ec26b9bb2c51d53f92158fca0baea0d881cb829e0bfcbc88f0021bf967e44a245eadf78fa8eed67aee696fde1a2a79e05a7c6a049f3af282a394f743bb4eedc9798b2d3290e8255a2339fb7a694e789a6fa38e2a236b948f48e1", - "tcId" : 328 - }, - { - "comment" : "prepending 0's to oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b060700002b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "3c8995341ca2811f9e976e8157e708aa59b38f8e1a24ed16d8b30a19fa23c5df8b1ac2b3c82fbf91800918a2ad6b9320b10e39fb391254a3d954a278faffa97a2052513ccc8b17783faed189b8a4d997d7baba3053d6ab6493e2e36b3ee5046ea62d37a835a51390252dff088cc3a0a33cd1a82e557a0be0d5871b4fa18c05e2", - "tcId" : 329 - }, - { - "comment" : "dropping value of oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "301c3004060005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "87b5cb8841fa252f38c375b39ccce2d0361397a8436d2f37ca3e2293e554ca27fea1095683e42f274ccead1876d89dbb4e5dcca8e28972aeabe3d818144e96c020bef1de944724d1c2a813c633f8e7f8b6f8c8950d2c89dd26534430ff9cb6f5f08b332638b1385770a69bbbf6f76342b8270e2bd440df058c2ad55f9a0dd679", - "tcId" : 330 - }, - { - "comment" : "modify first byte of oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052a0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "288ea84a615e75c398407dc72e2482ffc013e09b1ba302790d17d0949e286c156584e6098858501b0c5c763615e59d840ec53269bf0ff5bab1f79c8e717497e705724fe933343106bab5b9e619b0a111a59b72be36372efb6fb981be725e3408a1185a5f42d486d8c052af448f0abedbeafaa1d5d8caf5fc03d85329fe675f9a", - "tcId" : 331 - }, - { - "comment" : "modify last byte of oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021b05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "222c07c03d0c5bb3cbe70a8835447ff9af92ce32245f0e1de0481d87bd174731093f9b84aa5381b107c00fde8ed78030026d87951f8e5b6180827ff2a0a277db3a8f5031a82b83259bf6baab154cda64b372ba3cac5c629459284d986f3c2367e8b14f6dec7d38628e4ecb884158cc78ac39f4c9ee537d45370b089418d7227e", - "tcId" : 332 - }, - { - "comment" : "truncate oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3020300806042b0e030205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "3fcd54aa3d66afce987282cbfe09f0a6eb30d0c94227bef8a2c9fccba44f1c8aa080b361b13eed4c9d0d37caf26fe61ddac8347102d9080cb17f2cfdba7e217df3f8c19039d466241264ae8caf15652c8f72a6ae292dc71c80049d679034ad19bc745d6155cb2efde963f738cfea08f7bba8894f472beff5deebe33173033317", - "tcId" : 333 - }, - { - "comment" : "truncate oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3020300806040e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "4ad8a7e4a92ee9aeb1bf3ee9392abe141d435a6ebd1799d90f5417e6daef65d37bf33c8c5255d52ce5d8b2cc223cd0c68a6061450df5c6694e2b911c8c25e6384a70fb19a50e10bfbc494fe5a62d9db915b7c77a27d17788f0567110bb046b8aa42d3ee1ea444c20b983226cf094f4cbfab24855c68f1e2e9fefd41b2dc7903b", - "tcId" : 334 - }, - { - "comment" : "wrong oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d060960864801650304020105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "949fecb83ddc236d3c622c9b6118fe0bf524080594c731636eb735e7d1285b5b6c527a2346b51c42fcf706184c4edd79ac98750dcf35973920aa19dee689cb7654b4785d2755b0dde4113c293e301f4e0331cf166bd8c7ae07031165fa4c02a3d6d70422fe42c7c6077a1f1dcbdc0de257363d51951ed1e2b8cb66684d42a8b4", - "tcId" : 335 - }, - { - "comment" : "longer oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3022300a06062b0e03021a0105000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "8a52f6b0275fe745b429d0a4a42122269277de6a5eacd0daf79166cf8ab8ad061e74d91ee1877bb6ca50b9bcc5f0677702184e6d8ffc841fe3b6c24c9cd6dc017824bad65d89a47a21e54f87005afb3f13cf11d10383458548394211074f19da555205026f4fcdfafb73041bb84f1dd9e8012bb1473314c85bb3460d51ab5f13", - "tcId" : 336 - }, - { - "comment" : "oid with modified node", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03022a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "216fc9e3ee6438bf1934f30ea7a86aba6ecbfc04fbbced4576a6c59f7a9f5a761d6a97d262142489807e4ca1b9bc02c86a80e093b55fc97bc943be0403bcf390f6140de964199f753b7afe430308b871fc0c596c1b08ca74006a10bdbd6a53064796747bbc203383ac7916ca1ef1a2def714e9f5f9ce9584cb09bd677ef374be", - "tcId" : 337 - }, - { - "comment" : "oid with modified node", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d06092b0e0302888080801a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "135f14404b953bbcf4580133f0432cd746a5601ae01c5542924a1b28fc422c501c732dc330bb81d8df7a2a3829e6c5a151e81333832cb124d513f5b6fe799e207999c3010bf30689cc4b8b3bdb081d7351b47196de41e9f988c2eed49c22c7b0a6ca3eed511080fdc17d263b82ba668d3225da4fe66bffae68c536c4e38b2dcc", - "tcId" : 338 - }, - { - "comment" : "large integer in oid", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "302a3012060e2b0e03028280808080808080801a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "21fb0d97e5e1a178b08e2bd646f59ab8ad1a7a955afa71d4c0e4631069ec8436abff03327b696c90b91f7769fe0b085a83ed2bed876a9da05f273b58ed057429ddf25a8b1bc0c87ccfbc8394864405c0b7c27d4a4b589d7a5711f36d8922729169520d7bffd52aefc41205a6ee8a54609d0533c64bc8e88b3d58ed9a04d2f9fa", - "tcId" : 339 - }, - { - "comment" : "oid with invalid node", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3022300a06062b0e03021ae005000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "9be13e0d25b9cd6a1b8544fb488254319505a1fb27fda933f8b91f6f325b5beffdb71dbf377093da2e0ca3098c891cf7d8a8762e1e27ba1d4e6491ac3fa4c8ad3d4e4937621904a347d197fb373c62766ad14525e2c32913e7fe6f045eaca77c9a5025a6746f9c7b94cab054c476548dd1eb3e01c5923ed681fa04d47ba126d2", - "tcId" : 340 - }, - { - "comment" : "oid with invalid node", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3022300a06062b800e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "4738deff4b32a30dd68b0abc1971dd2af9a500b5f6922558b96ac9b1ab4a50328b2ba9a48e7c207a02ddf642728930f4004d337483eaa0a01fb038a7a6c289672bdaf1016120f2faea563f179d3d623d3ec9bb5d936ea2a7f74d2bd70a06c83e904df55f5142c5c6b6f75221397dabcb19e069436b94ca764a5016141496503d", - "tcId" : 341 - }, - { - "comment" : "appending 0's to null", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300b06052b0e03021a050200000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "977a5c762a4dcbe9551a4a0bcfe96114aa59187e6dd0164cbbec2d28ff9d11e413a1de7f274704c24229c99ce9b5a3d98872db56310be7259a2fa44e652c4d02f8802360d3a29ded2a7de0a183001e74b3aa3fe594867294461d6a23160481ecdee9c05c28ce066021847a23366cb147013f57ce53a24791dd1873527f1323f0", - "tcId" : 342 - }, - { - "comment" : "composed null", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3027300f06052b0e03021a2580aa00bb0000000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "79a42d1f294f82bd6ad48818f1f634733fbefea7def5ea32a1ed56de994ac047011695a0c8a11813d042ee6784cb172da76aa0ed892e53d4bf99fc21301a91181e7c93a56646190aeeb4a1c212d34d17484521580d84adb41b2a5cc285963509d0c832e5a2252e5cb028839d9db7bdabb7689219b97d699277ed004ca6389b61", - "tcId" : 343 - }, - { - "comment" : "appending 0's to digest", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300906052b0e03021a05000416f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf00000", - "result" : "invalid", - "sig" : "37ddb1b141539dfc350974039429b948cfd8acc40ecab7270b3e560f0876cec68fa22c8dbf09c8c25955819a5cfc6d251ab99cd06c013792207caa2ada95d4fc01a6d89329e211869c02c648a64b721e92ef3aa767569ba2f0c7c376772926a95ededa5d3f0ce10ab3b2b25f70fee1702dfedb0605ef6401f3f44c464ee98110", - "tcId" : 344 - }, - { - "comment" : "prepending 0's to digest", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3023300906052b0e03021a050004160000f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "85c2c430e7cc2e989e729186cb1256a5f7e78bbb6e135b36a43059389f57cc7fd67ccf20becc0d9e63731ae4ee77e926754ee5226991f9bd46203f7fb88562b00974dad035b1a0f39cba567dc0ed3cb3f7bf51326e62b0f82d8aaf8cc8dfb96c08c64235dc2a4f612bc29a8d4fb4b1edff1cd517d1c981a809ce9708a547a765", - "tcId" : 345 - }, - { - "comment" : "dropping value of digest", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "300d300906052b0e03021a05000400", - "result" : "invalid", - "sig" : "708e3d4577c0ced7b4d729b5124169f67836738bc18f82537dbe1c9a48054769ed0888751a823eedd05408ed934a555655d473dcec0fb5c6f19aee82f1dedf3f4fa14171c3ccbd3f1f9920f233a21be4341134f25636cbdd55918e9da76568c3ba55c630ee3e9eaa4dba7bd989fe0534925d1c47592214eb4869bcd42b60c92d", - "tcId" : 346 - }, - { - "comment" : "modify first byte of digest", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05000414f6ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "0a581f33a2e1e1665032331dcd1baefb9048af3efa9d6e24ae8e73fb0611422db4426bf804c08ea5ee7089574d4b657cb526437bf677fe3f9e140ee76f4ee2a9514bf0772670de18141840d93f12975013b84dfb74fb450f3bf2cf1cb0cd0267fe521f01d85efd8726be12e9c574907e97a2834cf00910b164732e5daeff4acc", - "tcId" : 347 - }, - { - "comment" : "modify last byte of digest", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3021300906052b0e03021a05000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf1", - "result" : "invalid", - "sig" : "0c64af0070eb86bb4abe059fce3fe3ced43fb4c19d1c3560877ef54c575530d0473ff2691781c2f7d7aa971b07e517888dc50cd63b0b07e2eb5aa18c6c5ea7f5c9e8e4c7d283808e40920c83cdba64a7e9d01b1e15710b1caa6da8686cc2e4e3b8cc276204c3e21f3e352e81e081660b18a8e6057f2227b117c2c9c5021be26d", - "tcId" : 348 - }, - { - "comment" : "truncate digest", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3020300906052b0e03021a05000413f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0ab", - "result" : "invalid", - "sig" : "313624a0449c7f2f19878797dab59c91ed45ca0910aed355737635283d56edc7f470628e119a70f7d40b238e0ead042ec1c1c377272fa3ca975cc21eeec934f758ce70f19e00f592a0e5a4aad8e9956d9fd7dbbc126b6a001f20c42b517ba54511630382612f2bacb9711c87d9a19897c8c44f7905f548b558fada6a2c9912c7", - "tcId" : 349 - }, - { - "comment" : "truncate digest", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3020300906052b0e03021a05000413ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "4a3539eaceb4691d856020b9acc11854892df705ad7994759dea2efe0c5384e8f86ebeb3f4360ab0bc7d35c8ca520c8d0a1c869f3979ddedbb60437e798332a0ef7a52ca86b430ebc6aa57114f6057c8f18066ca1483cbe8a8ad3a1e96476a21d53ac6f6a4e18ee965371ebe58184fdcec67f0d42cd16d6ce6800ec87978b759", - "tcId" : 350 - }, - { - "comment" : "wrong hash in padding", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3024300c06082a864886f70d020505000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "1d8eb339d60f873bf3dd07816dbd8a5b5e61805e26654e5a5869fcbef176a61a3b2c173778ce5fb7323dee2f4e42a272474576e8942ce04c66a17d2ccc093e529df580d047159f7c1266af51b7a7f07f43a28e309111540a80fa76b25b6d86f9d2fc99a28d1715567545509f80beb700fe9cfb82be7bc801794b7d32eb9b584d", - "tcId" : 351 - }, - { - "comment" : "wrong hash in padding", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d060960864801650304020205000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "3b2ead8d64cf96e26db3ba9d1ff63a187a715d04e3a7dfcf6c85790896793bc19c0ea6c5266cd4ebc25b859a07ad6459942eb46f3efcb9adbc29f3fa5acf0013d5baf3089e3ec5cd3401ae282670d27493b0ee33e391a9d32283b224036405c9d61bbb470dc8a69762bc35483d3d26c1c8e16c311e5d3e284f1d51383ce7bdcb", - "tcId" : 352 - }, - { - "comment" : "wrong hash in padding", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3025300d060960864801650304020305000414f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", - "result" : "invalid", - "sig" : "6b23ad94314f022d64a7b525aa933b7aef8184b66473572bf41c00f899dbeeb95755da7c749a0ce5cb09d3567ebd4ceb0033a1b16cfa13e85fd1745640a5306229a14a9c67c07f75058ad1dfebee25c44ba3bbf75fa053ef74717ea7f972dcf7d7d23901a3aed841e0ca419aa570a605e0d189d2b51ce3f00497c0bf16998ade", - "tcId" : 353 - }, - { - "comment" : "wrong hash in signature", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3020300c06082a864886f70d0205050004108b1a9953c4611296a827abf8c47804d7", - "result" : "invalid", - "sig" : "53ee28bf3582045ff9a6f7d813b9453fc5813245b198d98cb141f6f36202240746b9d3778006aa4cd3905bffed0fde38157d8e8809228871fb48037706ddaaebd31ecebe3dae0516539509bfaea18dc1fc3c7f29620f3214db5d70005e1323094aa8f94ac9d64d9d02ff2010178425027145740b40640a43ff24db043a7a2d2b", - "tcId" : 354 - }, - { - "comment" : "wrong hash in signature", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3031300d060960864801650304020105000420185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969", - "result" : "invalid", - "sig" : "171b1a7fa8cf97283809515866708d449f184d675613cbd33e91586f8e238946f860915f0fb6a390bc7cedfcf7d1621f49f3c6f39b7412d75660fbe3c2326c48399b7d41dfceeadabf0cbfc4b7dd756d8bdc38d28e80fb60e743fdf6d81973959d2c6b111fa0d8f3c9c8677c0c8030001b12f3e2c5990822154b1b762162dd7d", - "tcId" : 355 - }, - { - "comment" : "wrong hash in signature", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3041300d0609608648016503040202050004303519fe5ad2c596efe3e276a6f351b8fc0b03db861782490d45f7598ebd0ab5fd5520ed102f38c4a5ec834e98668035fc", - "result" : "invalid", - "sig" : "9810d39416595ad79cf376b41e6e5f94fb89f61ae78bc5a0c710fab15d369dd7f050b035e5c2b8cdfe10d06be739bae08b47afd0b7dd2b226905f3ee718ccd5b5fb5b951558a62d83a2f3ba5dd1990d2d3e05c461e33ccaa1bbc22350c3ca157351a5b88ad3b1f524fc5cec5c1714a8ab3ef709e462434a6048133846fd1d85b", - "tcId" : 356 - }, - { - "comment" : "wrong hash in signature", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "3051300d0609608648016503040203050004403615f80c9d293ed7402687f94b22d58e529b8cc7916f8fac7fddf7fbd5af4cf777d3d795a7a00a16bf7e7f3fb9561ee9baae480da9fe7a18769e71886b03f315", - "result" : "invalid", - "sig" : "57532194f33bfddba2e848b9342342114e2c6dcffe228cb97b72ac9e26b77cd336a6fa5c8152db0d536c6fb3cc48487a89cfcf42990593fd0dad420b46fa87ea2b9c9962025dcc2b8a6d5a0476408a62d9c276fb5eb8e97e5f1726918fef41c0d12ad420525a803d804002061c3bf355a3c4fee4ce42016cb0e0531d2657726d", - "tcId" : 357 - }, - { - "comment" : "using PKCS#1 encryption padding", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "0002ff...00", - "result" : "invalid", - "sig" : "572ecc55660cc4f8888559092f54e4ee0dc6a57d0722bcba6b608869bc0e86ed53f8d88180b40c006ff10dbf32ba2c6bf3558e22a688f7d68a6d38740b99dd2a2eaa6fc94fe9fa76a0bf775c0eca5751ce7837a3da3db7dc648fb94ed0def4996eb40e168d49417dfd82c86f2c586fc49dfa37a6335b8a76aee84c755610948b", - "tcId" : 358 - }, - { - "comment" : "using PKCS#1 encryption padding", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "0002ff...00", - "result" : "invalid", - "sig" : "849f48195c7ae50b762ff93e350bacdf52e3eef5f86dbec5115d74ccfb2c9a49cc91115f6935b71deb424865666ba070299e17e64c3ce5019e1481ee195cffb4fc1f92f026cea579bbe9f78d7c665dd7f65af7c3221bae50d5c0b50ede25a3993979d167a86db511b9ace4f11c331f892f06e72d17e934da9a83a3c703b3409b", - "tcId" : 359 - }, - { - "comment" : "invalid PKCS#1 signature padding", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "0001ff...ee00", - "result" : "invalid", - "sig" : "29b9b831e6694768910397fbe53e0a6868f75e3910d600e3421349bc4321d93067c78f6294b00e52e9c2fafdef67e0a460c3d76e6196fec6aab5c4964a4782c5da021466908d106193ec1b6b0bae4c9a5e3fcc4a355565c1dcfb76c489b4c3ad11b6f2182188470edf748eaf81646fcc164c60c1a55e9334076d8b5ce3d09808", - "tcId" : 360 - }, - { - "comment" : "PKCS#1 padding too short", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "000001ff...", - "result" : "invalid", - "sig" : "583dc8ac657ac9d55c74b6505f1a7a4b2225c038f36cc66d76a7eb8c818195b138e8bb2b26ac5a01ce32aa3f590815f0ecdf693877bdb12c5dd55b947b91f83d66639874ca263d1227dd0b6531e3eedf0b1e87a92b8db4be7c3c40d70865f56c8e0b6cf6607d47ed44acff9c4360d65f847f4ae947a13e4a56dff1d11503bc9b", - "tcId" : 361 - }, - { - "comment" : "invalid length", - "message" : "48656c6c6f", - "name" : "RsaSignatureTestVector", - "padding" : "2 bytes too long", - "result" : "invalid", - "sig" : "9e62337ef7d4fabec2561bb45a18a362022b23666571bbc762c1c717a14a46d8f58119072aa26245e71fc6945540335163798fcbdea04b3104ee23f2c3874bbfb3e7e0c1ba5f1fca909265274414db6957a5eb668e0e36a388784355d528e51a6a4a9a9c6b6ab912812a268dac9dcacf1c13507768e63b1f82f8af29c3786a170000", - "tcId" : 362 - } - ] - } - ] -} diff --git a/t/wycheproof.t b/t/wycheproof.t deleted file mode 100644 index 608e848..0000000 --- a/t/wycheproof.t +++ /dev/null @@ -1,244 +0,0 @@ -# rebuild: -# rm -f src/liballinone.a && touch CryptX.xs && make && perl -Mblib t/wycheproof.t - -use strict; -use warnings; - -use Test::More; - -plan skip_all => "No JSON::* module installed" unless eval { require JSON::PP } || eval { require JSON::XS } || eval { require Cpanel::JSON::XS }; -plan tests => 1298; - -use CryptX; -use Crypt::Misc 'read_rawfile'; -use Crypt::Digest 'digest_data'; - -if (1) { - use Crypt::AuthEnc::GCM qw(gcm_encrypt_authenticate gcm_decrypt_verify); - - my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/aes_gcm_test.json'; - for my $g (@{$tests->{testGroups}}) { - my $type = $g->{type}; - for my $t (@{$g->{tests}}) { - my $tcId = $t->{tcId}; # 1 - my $comment = $t->{comment}; # "" - my $result = $t->{result}; # "valid" - my $aad = pack "H*", $t->{aad}; # "6578616d706c65" - my $ct = pack "H*", $t->{ct}; # "5d349ead175ef6b1def6fd" - my $iv = pack "H*", $t->{iv}; # "752abad3e0afb5f434dc4310" - my $key = pack "H*", $t->{key}; # "ee8e1ed9ff2540ae8f2ba9f50bc2f27c" - my $msg = pack "H*", $t->{msg}; # "48656c6c6f20776f726c64" - my $tag = pack "H*", $t->{tag}; # "4fbcdeb7e4793f4a1d7e4faa70100af1" - # do the test - my ($ct2, $tag2) = eval { gcm_encrypt_authenticate('AES', $key, $iv, $aad, $msg) }; - my $pt2 = eval { gcm_decrypt_verify('AES', $key, $iv, $aad, $ct, $tag) }; - my $testname = "type=$type tcId=$tcId comment='$comment' expected-result=$result"; - if ($result eq 'valid') { - is(unpack("H*", $ct2), $t->{ct}, "$testname CT-v"); - is(unpack("H*", $tag2), $t->{tag}, "$testname TAG-v"); - is(unpack("H*", $pt2), $t->{msg}, "$testname PT-v"); - } - elsif ($result eq 'invalid') { - #isnt(unpack("H*", $ct2), $t->{ct}, "$testname CT-i"); - #isnt(unpack("H*", $tag2), $t->{tag}, "$testname TAG-i"); - is($pt2, undef, "$testname PT-i"); - } - else { - ok(0, "UNEXPECTED result=$result"); - } - } - } -} - -if (1) { - use Crypt::PK::RSA; - - my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/rsa_signature_test.json'; - for my $g (@{$tests->{testGroups}}) { - my $type = $g->{type}; - my $keyDer = pack "H*", $g->{keyDer}; - my $keyPem = $g->{keyPem}; - my $sha = $g->{sha}; - $sha =~ s/-//g; # SHA-1 >> SHA1 - ok(Crypt::PK::RSA->new( \$keyDer ), "Crypt::PK::RSA->new + DER type: $type/$sha"); - ok(Crypt::PK::RSA->new( \$keyPem ), "Crypt::PK::RSA->new + PEM type: $type/$sha"); - for my $t (@{$g->{tests}}) { - my $tcId = $t->{tcId}; - my $comment = $t->{comment}; - my $result = $t->{result}; - my $message = pack "H*", $t->{message}; - my $sig = pack "H*", $t->{sig}; - # do the test - my $testname = "type=$type/$sha tcId=$tcId comment='$comment' expected-result=$result"; - my $pk = Crypt::PK::RSA->new( \$keyPem ); - my $valid = $pk->verify_message($sig, $message, $sha,"v1.5"); - if ($result eq 'valid' || $result eq 'acceptable') { - ok($valid, $testname); - } - elsif ($result eq 'invalid') { - ok(!$valid, $testname); - } - else { - ok(0, "UNEXPECTED result=$result"); - } - } - } -} - -if (1) { - use Crypt::PK::DSA; - - my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/dsa_test.json'; - for my $g (@{$tests->{testGroups}}) { - my $type = $g->{type}; # "DSAVer" - my $keyDer = pack "H*", $g->{keyDer}; - my $keyPem = $g->{keyPem}; - my $sha = $g->{sha}; # "SHA-1" - $sha =~ s/-//g; # SHA-1 >> SHA1 - ok(Crypt::PK::DSA->new( \$keyDer ), "Crypt::PK::DSA->new + DER type=$type/$sha"); - ok(Crypt::PK::DSA->new( \$keyPem ), "Crypt::PK::DSA->new + PEM type=$type/$sha"); - for my $t (@{$g->{tests}}) { - my $tcId = $t->{tcId}; - my $comment = $t->{comment}; - my $result = $t->{result}; - my $message = pack "H*", $t->{message}; - my $sig = pack "H*", $t->{sig}; - # skip unsupported tests: - next if $tcId==12 && $result eq 'acceptable' && $comment eq "Legacy:ASN encoding of s misses leading 0"; - next if $tcId==13 && $result eq 'acceptable' && $comment eq "BER:long form encoding of length"; - next if $tcId==14 && $result eq 'acceptable' && $comment eq "BER:long form encoding of length"; - next if $tcId==15 && $result eq 'acceptable' && $comment eq "BER:long form encoding of length"; - next if $tcId==16 && $result eq 'acceptable' && $comment eq "BER:length contains leading 0"; - next if $tcId==17 && $result eq 'acceptable' && $comment eq "BER:length contains leading 0"; - next if $tcId==18 && $result eq 'acceptable' && $comment eq "BER:length contains leading 0"; - next if $tcId==19 && $result eq 'acceptable' && $comment eq "BER:indefinite length"; - next if $tcId==20 && $result eq 'acceptable' && $comment eq "BER:prepending 0's to integer"; - next if $tcId==21 && $result eq 'acceptable' && $comment eq "BER:prepending 0's to integer"; - # do the test - my $testname = "type=$type/$sha tcId=$tcId comment='$comment' expected-result=$result"; - my $pk = Crypt::PK::DSA->new( \$keyPem ); - my $hash = digest_data($sha, $message); - my $valid_h = $pk->verify_hash($sig, $hash); - my $valid = $pk->verify_message($sig, $message, $sha); - if ($result eq 'valid' || $result eq 'acceptable') { - ok($valid, $testname); - } - elsif ($result eq 'invalid') { - ok(!$valid, $testname); - } - else { - ok(0, "UNEXPECTED result=$result"); - } - } - } -} - -if (1) { - use Crypt::PK::ECC; - - my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/ecdsa_test.json'; - for my $g (@{$tests->{testGroups}}) { - my $type = $g->{type}; - my $keyDer = pack "H*", $g->{keyDer}; - my $keyPem = $g->{keyPem}; - my $sha = $g->{sha}; - $sha =~ s/-//g; # SHA-1 >> SHA1 - ok(Crypt::PK::ECC->new( \$keyDer ), "Crypt::PK::ECC->new + DER type=$type/$sha"); - ok(Crypt::PK::ECC->new( \$keyPem ), "Crypt::PK::ECC->new + PEM type=$type/$sha"); - for my $t (@{$g->{tests}}) { - my $tcId = $t->{tcId}; - my $comment = $t->{comment}; - my $result = $t->{result}; - my $message = pack "H*", $t->{message}; - my $sig = pack "H*", $t->{sig}; - # skip unsupported tests: - next if $tcId==9 && $result eq 'acceptable' && $comment eq "BER:long form encoding of length"; - next if $tcId==10 && $result eq 'acceptable' && $comment eq "BER:long form encoding of length"; - next if $tcId==12 && $result eq 'acceptable' && $comment eq "BER:length contains leading 0"; - next if $tcId==13 && $result eq 'acceptable' && $comment eq "BER:length contains leading 0"; - next if $tcId==14 && $result eq 'acceptable' && $comment eq "BER:indefinite length"; - next if $tcId==15 && $result eq 'acceptable' && $comment eq "BER:prepending 0's to integer"; - next if $tcId==16 && $result eq 'acceptable' && $comment eq "BER:prepending 0's to integer"; - # do the test - my $testname = "type=$type/$sha tcId=$tcId comment='$comment' expected-result=$result"; - my $pk = Crypt::PK::ECC->new( \$keyPem ); - my $valid = $pk->verify_message($sig, $message, $sha); - if ($result eq 'valid' || $result eq 'acceptable') { - ok($valid, "$testname verify_message=$valid"); - } - elsif ($result eq 'invalid') { - ok(!$valid, "$testname verify_message=$valid"); - } - else { - ok(0, "UNEXPECTED result=$result"); - } - } - } -} - -if (1) { - use Crypt::PK::ECC; - - my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/ecdsa_webcrypto_test.json'; - for my $g (@{$tests->{testGroups}}) { - my $type = $g->{type}; - my $keyDer = pack "H*", $g->{keyDer}; - my $keyPem = $g->{keyPem}; - my $sha = $g->{sha}; - my $jwk = $g->{jwk}; - $sha =~ s/-//g; # SHA-1 >> SHA1 - ok(Crypt::PK::ECC->new( \$keyDer ), "Crypt::PK::ECC->new + DER type=$type/$sha"); - ok(Crypt::PK::ECC->new( \$keyPem ), "Crypt::PK::ECC->new + PEM type=$type/$sha"); - ok(Crypt::PK::ECC->new( $jwk ), "Crypt::PK::ECC->new + JWK type=$type/$sha"); - for my $t (@{$g->{tests}}) { - my $tcId = $t->{tcId}; - my $comment = $t->{comment}; - my $result = $t->{result}; - my $message = pack "H*", $t->{message}; - my $sig = pack "H*", $t->{sig}; - # do the test - my $testname = "type=$type/$sha tcId=$tcId comment='$comment' expected-result=$result"; - my $pk = Crypt::PK::ECC->new( \$keyPem ); - my $valid = $pk->verify_message_rfc7518($sig, $message, $sha); - if ($result eq 'valid' || $result eq 'acceptable') { - ok($valid, "$testname verify_message=$valid"); - } - elsif ($result eq 'invalid') { - ok(!$valid, "$testname verify_message=$valid"); - } - else { - ok(0, "UNEXPECTED result=$result"); - } - } - } -} - -if (1) { - use Crypt::PK::ECC; - - my $tests = CryptX::_decode_json read_rawfile 't/wycheproof/ecdh_webcrypto_test.json'; - for my $g (@{$tests->{testGroups}}) { - my $type = $g->{type}; - for my $t (@{$g->{tests}}) { - my $tcId = $t->{tcId}; - my $comment = $t->{comment}; - my $name = $t->{name}; - my $result = $t->{result}; - my $shared = pack "H*", $t->{shared}; - # do the test - my $testname = "type=$type/$name tcId=$tcId comment='$comment' expected-result=$result"; - my $pub = Crypt::PK::ECC->new( $t->{public} ); - my $pri = Crypt::PK::ECC->new( $t->{private} ); - my $shared_hex = unpack "H*", $pri->shared_secret($pub); - if ($result eq 'valid' || $result eq 'acceptable') { - is($shared_hex, $t->{shared}, $testname); - } - elsif ($result eq 'invalid') { - isnt($shared_hex, $t->{shared}, $testname); - } - else { - ok(0, "UNEXPECTED result=$result"); - } - } - } -}