X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=test%2Fasn1_encode_test.c;h=6a64bf904b16385f979a5ed41b7539aa71f6ea5b;hp=a24b28486636c1f54886ea7bf9a801ba02a67e68;hb=3830c1943b6b7411134a28c5801e57d1b5b2dca2;hpb=9612e15760784c59d3104bfe49e75323e5776bb1;ds=inline diff --git a/test/asn1_encode_test.c b/test/asn1_encode_test.c index a24b284866..6a64bf904b 100644 --- a/test/asn1_encode_test.c +++ b/test/asn1_encode_test.c @@ -1,5 +1,5 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -13,7 +13,6 @@ #include #include #include "internal/numbers.h" -#include "test_main.h" #include "testutil.h" #ifdef __GNUC__ @@ -42,6 +41,9 @@ static unsigned char t_one[] = { static unsigned char t_one_neg[] = { 0xff }; +static unsigned char t_minus_256[] = { + 0xff, 0x00 +}; static unsigned char t_longundef[] = { 0x7f, 0xff, 0xff, 0xff }; @@ -100,6 +102,7 @@ static TEST_CUSTOM_DATA test_custom_data[] = { CUSTOM_DATA(t_longundef), CUSTOM_DATA(t_one), CUSTOM_DATA(t_one_neg), + CUSTOM_DATA(t_minus_256), CUSTOM_DATA(t_9bytes_1), CUSTOM_DATA(t_8bytes_1), CUSTOM_DATA(t_8bytes_2), @@ -201,6 +204,7 @@ static ASN1_LONG_DATA long_expected_32bit[] = { { 0, 0, 0 }, { 0xff, 1, 0x7fffffff }, /* t_longundef */ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */ CUSTOM_EXPECTED_SUCCESS(-1, -1), /* t_one_neg */ + CUSTOM_EXPECTED_SUCCESS(-256, -256), /* t_minus_256 */ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_1 */ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_2 */ @@ -236,6 +240,7 @@ static ASN1_LONG_DATA long_expected_64bit[] = { { 0, 0, 0 }, { 0xff, 1, 0x7fffffff }, /* t_longundef */ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */ CUSTOM_EXPECTED_SUCCESS(-1, -1), /* t_one_neg */ + CUSTOM_EXPECTED_SUCCESS(-256, -256), /* t_minus_256 */ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_1 */ CUSTOM_EXPECTED_SUCCESS(LONG_MAX, LONG_MAX), /* t_8bytes_2 */ @@ -288,6 +293,7 @@ static ASN1_INT32_DATA int32_expected[] = { CUSTOM_EXPECTED_SUCCESS(ASN1_LONG_UNDEF, ASN1_LONG_UNDEF), /* t_zero */ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */ CUSTOM_EXPECTED_SUCCESS(-1, -1), /* t_one_neg */ + CUSTOM_EXPECTED_SUCCESS(-256, -256), /* t_minus_256 */ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_1 */ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_2 */ @@ -335,6 +341,7 @@ static ASN1_UINT32_DATA uint32_expected[] = { CUSTOM_EXPECTED_SUCCESS(ASN1_LONG_UNDEF, ASN1_LONG_UNDEF), /* t_zero */ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */ CUSTOM_EXPECTED_FAILURE, /* t_one_neg (illegal negative value) */ + CUSTOM_EXPECTED_FAILURE, /* t_minus_256 (illegal negative value) */ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_1 */ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_2 */ @@ -382,6 +389,7 @@ static ASN1_INT64_DATA int64_expected[] = { CUSTOM_EXPECTED_SUCCESS(ASN1_LONG_UNDEF, ASN1_LONG_UNDEF), /* t_zero */ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */ CUSTOM_EXPECTED_SUCCESS(-1, -1), /* t_one_neg */ + CUSTOM_EXPECTED_SUCCESS(-256, -256), /* t_minus_256 */ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */ CUSTOM_EXPECTED_FAILURE, /* t_8bytes_1 (too large positive) */ CUSTOM_EXPECTED_SUCCESS(INT64_MAX, INT64_MAX), /* t_8bytes_2 */ @@ -430,6 +438,7 @@ static ASN1_UINT64_DATA uint64_expected[] = { CUSTOM_EXPECTED_SUCCESS(ASN1_LONG_UNDEF, ASN1_LONG_UNDEF), /* t_zero */ CUSTOM_EXPECTED_SUCCESS(1, 1), /* t_one */ CUSTOM_EXPECTED_FAILURE, /* t_one_neg (illegal negative value) */ + CUSTOM_EXPECTED_FAILURE, /* t_minus_256 (illegal negative value) */ CUSTOM_EXPECTED_FAILURE, /* t_9bytes_1 */ CUSTOM_EXPECTED_SUCCESS((uint64_t)INT64_MAX+1, (uint64_t)INT64_MAX+1), /* t_8bytes_1 */ @@ -568,14 +577,14 @@ static size_t der_encode_length(size_t len, unsigned char **pp) if (pp != NULL) { if (lenbytes == 1) { - *(*pp)++ = len; + *(*pp)++ = (unsigned char)len; } else { - *(*pp)++ = lenbytes - 1; + *(*pp)++ = (unsigned char)(lenbytes - 1); if (lenbytes == 2) { - *(*pp)++ = 0x80 | len; + *(*pp)++ = (unsigned char)(0x80 | len); } else { - *(*pp)++ = 0x80 | (len >> 8); - *(*pp)++ = len & 0xff; + *(*pp)++ = (unsigned char)(0x80 | (len >> 8)); + *(*pp)++ = (unsigned char)(len); } } } @@ -663,7 +672,7 @@ static int do_decode_custom(const TEST_CUSTOM_DATA *custom_data, { unsigned char *encoding = NULL; /* - * We force the defaults to be explicitely encoded to make sure we test + * We force the defaults to be explicitly encoded to make sure we test * for defaults that shouldn't be present (i.e. we check for failure) */ size_t encoding_length = make_custom_der(custom_data, &encoding, 1); @@ -700,17 +709,18 @@ static int do_encode_custom(EXPECTED *input, static int do_print_item(const TEST_PACKAGE *package) { #define DATA_BUF_SIZE 256 - unsigned char buf[DATA_BUF_SIZE]; const ASN1_ITEM *i = ASN1_ITEM_ptr(package->asn1_type); - ASN1_VALUE *o = (ASN1_VALUE *)&buf; - BIO *bio = BIO_new_fp(stdout, 0); + ASN1_VALUE *o; int ret; OPENSSL_assert(package->encode_expectations_elem_size <= DATA_BUF_SIZE); + if ((o = OPENSSL_malloc(DATA_BUF_SIZE)) == NULL) + return 0; - (void)RAND_bytes(buf, (int)package->encode_expectations_elem_size); - ret = ASN1_item_print(bio, o, 0, i, NULL); - BIO_free(bio); + (void)RAND_bytes((unsigned char*)o, + (int)package->encode_expectations_elem_size); + ret = ASN1_item_print(bio_err, o, 0, i, NULL); + OPENSSL_free(o); return ret; } @@ -736,18 +746,16 @@ static int test_intern(const TEST_PACKAGE *package) ->encode_expectations)[pos], &test_custom_data[i], package)) { case -1: - fprintf(stderr, "Failed custom encode round trip %u of %s\n", - i, package->name); - ERR_print_errors_fp(stderr); + TEST_error("Failed custom encode round trip %u of %s", + i, package->name); + TEST_openssl_errors(); fail++; - ERR_clear_error(); break; case 0: - fprintf(stderr, "Custom encode round trip %u of %s mismatch\n", - i, package->name); - ERR_print_errors_fp(stderr); + TEST_error("Custom encode round trip %u of %s mismatch", + i, package->name); + TEST_openssl_errors(); fail++; - ERR_clear_error(); break; case 1: break; @@ -761,18 +769,16 @@ static int test_intern(const TEST_PACKAGE *package) package->encode_expectations_elem_size, package)) { case -1: - fprintf(stderr, "Failed custom decode round trip %u of %s\n", - i, package->name); - ERR_print_errors_fp(stderr); + TEST_error("Failed custom decode round trip %u of %s", + i, package->name); + TEST_openssl_errors(); fail++; - ERR_clear_error(); break; case 0: - fprintf(stderr, "Custom decode round trip %u of %s mismatch\n", - i, package->name); - ERR_print_errors_fp(stderr); + TEST_error("Custom decode round trip %u of %s mismatch", + i, package->name); + TEST_openssl_errors(); fail++; - ERR_clear_error(); break; case 1: break; @@ -791,15 +797,14 @@ static int test_intern(const TEST_PACKAGE *package) package->encdec_data_elem_size, package)) { case -1: - fprintf(stderr, "Failed encode/decode round trip %u of %s\n", - i, package->name); - ERR_print_errors_fp(stderr); - ERR_clear_error(); + TEST_error("Failed encode/decode round trip %u of %s", + i, package->name); + TEST_openssl_errors(); fail++; break; case 0: - fprintf(stderr, "Encode/decode round trip %u of %s mismatch\n", - i, package->name); + TEST_error("Encode/decode round trip %u of %s mismatch", + i, package->name); fail++; break; case 1: @@ -811,8 +816,8 @@ static int test_intern(const TEST_PACKAGE *package) } if (!do_print_item(package)) { - fprintf(stderr, "Printing of %s failed\n", package->name); - ERR_print_errors_fp(stderr); + TEST_error("Printing of %s failed", package->name); + TEST_openssl_errors(); fail++; } @@ -851,7 +856,7 @@ static int test_uint64(void) return test_intern(&uint64_test_package); } -void register_tests(void) +int setup_tests(void) { #if OPENSSL_API_COMPAT < 0x10200000L ADD_TEST(test_long_32bit); @@ -861,4 +866,5 @@ void register_tests(void) ADD_TEST(test_uint32); ADD_TEST(test_int64); ADD_TEST(test_uint64); + return 1; }