diff options
author | Matt Johnston <matt@ucc.asn.au> | 2020-06-10 23:16:13 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2020-06-10 23:16:13 +0800 |
commit | 4b305c5721f68e39320ca2e15b03a411da2305f1 (patch) | |
tree | 5b1698939cf893223f14cec77ed446f28a7d921a /libtomcrypt/tests | |
parent | 615885be01188e433cf931e2f7f85394fdc31c5d (diff) |
Merge libtomcrypt v1.18.2
Diffstat (limited to 'libtomcrypt/tests')
-rw-r--r-- | libtomcrypt/tests/common.h | 2 | ||||
-rw-r--r-- | libtomcrypt/tests/der_test.c | 21 |
2 files changed, 23 insertions, 0 deletions
diff --git a/libtomcrypt/tests/common.h b/libtomcrypt/tests/common.h index 410db1e..f2d8dca 100644 --- a/libtomcrypt/tests/common.h +++ b/libtomcrypt/tests/common.h @@ -16,9 +16,11 @@ extern prng_state yarrow_prng; #ifdef LTC_VERBOSE #define DO(x) do { fprintf(stderr, "%s:\n", #x); run_cmd((x), __LINE__, __FILE__, #x, NULL); } while (0) #define DOX(x, str) do { fprintf(stderr, "%s - %s:\n", #x, (str)); run_cmd((x), __LINE__, __FILE__, #x, (str)); } while (0) +#define SHOULD_FAIL(x) do { fprintf(stderr, "%s:\n", #x); run_cmd((x) != CRYPT_OK ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR, __LINE__, __FILE__, #x, NULL); } while (0) #else #define DO(x) do { run_cmd((x), __LINE__, __FILE__, #x, NULL); } while (0) #define DOX(x, str) do { run_cmd((x), __LINE__, __FILE__, #x, (str)); } while (0) +#define SHOULD_FAIL(x) do { run_cmd((x) != CRYPT_OK ? CRYPT_OK : CRYPT_FAIL_TESTVECTOR, __LINE__, __FILE__, #x, NULL); } while (0) #endif void run_cmd(int res, int line, const char *file, const char *cmd, const char *algorithm); diff --git a/libtomcrypt/tests/der_test.c b/libtomcrypt/tests/der_test.c index 6dab424..a6859e8 100644 --- a/libtomcrypt/tests/der_test.c +++ b/libtomcrypt/tests/der_test.c @@ -1094,6 +1094,25 @@ static int der_choice_test(void) } +static void _der_recursion_limit(void) +{ + int failed = 0; + unsigned int n; + unsigned long integer = 123, s; + ltc_asn1_list seqs[LTC_DER_MAX_RECURSION + 2], dummy[1], *flexi; + unsigned char buf[2048]; + LTC_SET_ASN1(dummy, 0, LTC_ASN1_SHORT_INTEGER, &integer, 1); + LTC_SET_ASN1(seqs, LTC_DER_MAX_RECURSION + 1, LTC_ASN1_SEQUENCE, dummy, 1); + for (n = 0; n < LTC_DER_MAX_RECURSION + 1; ++n) { + LTC_SET_ASN1(seqs, LTC_DER_MAX_RECURSION - n, LTC_ASN1_SEQUENCE, &seqs[LTC_DER_MAX_RECURSION - n + 1], 1); + } + s = sizeof(buf); + DO(der_encode_sequence(seqs, 1, buf, &s)); + DO(der_decode_sequence(buf, s, seqs, 1)); + SHOULD_FAIL(der_decode_sequence_flexi(buf, &s, &flexi)); + if (failed) exit(EXIT_FAILURE); +} + int der_test(void) { unsigned long x, y, z, zz, oid[2][32]; @@ -1126,6 +1145,8 @@ int der_test(void) unsigned char utf8_buf[32]; wchar_t utf8_out[32]; + + _der_recursion_limit(); der_cacert_test(); DO(mp_init_multi(&a, &b, &c, &d, &e, &f, &g, NULL)); |