Update pre9
This commit is contained in:
+5
-1
@@ -33,7 +33,7 @@ INCLUDE_MAIN___test_libtestutil_OLB = /INCLUDE=MAIN
|
||||
rc2test rc4test rc5test \
|
||||
destest mdc2test \
|
||||
dhtest enginetest casttest \
|
||||
bftest ssltest_old dsatest exptest rsa_test \
|
||||
bftest ssltest_old dsatest dsa_no_digest_size_test exptest rsa_test \
|
||||
evp_test evp_extra_test igetest v3nametest v3ext \
|
||||
crltest danetest bad_dtls_test lhash_test \
|
||||
conf_include_test \
|
||||
@@ -152,6 +152,10 @@ INCLUDE_MAIN___test_libtestutil_OLB = /INCLUDE=MAIN
|
||||
INCLUDE[dsatest]=../include
|
||||
DEPEND[dsatest]=../libcrypto libtestutil.a
|
||||
|
||||
SOURCE[dsa_no_digest_size_test]=dsa_no_digest_size_test.c
|
||||
INCLUDE[dsa_no_digest_size_test]=../include
|
||||
DEPEND[dsa_no_digest_size_test]=../libcrypto libtestutil.a
|
||||
|
||||
SOURCE[exptest]=exptest.c
|
||||
INCLUDE[exptest]=../include
|
||||
DEPEND[exptest]=../libcrypto libtestutil.a
|
||||
|
||||
@@ -0,0 +1,245 @@
|
||||
/*
|
||||
* Copyright 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
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "testutil.h"
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/rand.h>
|
||||
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
#include <openssl/dsa.h>
|
||||
|
||||
static DSA *dsakey;
|
||||
|
||||
/*
|
||||
* These parameters are from test/recipes/04-test_pem_data/dsaparam.pem,
|
||||
* converted using dsaparam -C
|
||||
*/
|
||||
static DSA *load_dsa_params(void)
|
||||
{
|
||||
static unsigned char dsap_2048[] = {
|
||||
0xAE, 0x35, 0x7D, 0x4E, 0x1D, 0x96, 0xE2, 0x9F, 0x00, 0x96,
|
||||
0x60, 0x5A, 0x6E, 0x4D, 0x07, 0x8D, 0xA5, 0x7C, 0xBC, 0xF9,
|
||||
0xAD, 0xD7, 0x9F, 0xD5, 0xE9, 0xEE, 0xA6, 0x33, 0x51, 0xDE,
|
||||
0x7B, 0x72, 0xD2, 0x75, 0xAA, 0x71, 0x77, 0xF1, 0x63, 0xFB,
|
||||
0xB6, 0xEC, 0x5A, 0xBA, 0x0D, 0x72, 0xA2, 0x1A, 0x1C, 0x64,
|
||||
0xB8, 0xE5, 0x89, 0x09, 0x6D, 0xC9, 0x6F, 0x0B, 0x7F, 0xD2,
|
||||
0xCE, 0x9F, 0xEF, 0x87, 0x5A, 0xB6, 0x67, 0x2F, 0xEF, 0xEE,
|
||||
0xEB, 0x59, 0xF5, 0x5E, 0xFF, 0xA8, 0x28, 0x84, 0x9E, 0x5B,
|
||||
0x37, 0x09, 0x11, 0x80, 0x7C, 0x08, 0x5C, 0xD5, 0xE1, 0x48,
|
||||
0x4B, 0xD2, 0x68, 0xFB, 0x3F, 0x9F, 0x2B, 0x6B, 0x6C, 0x0D,
|
||||
0x48, 0x1B, 0x1A, 0x80, 0xC2, 0xEB, 0x11, 0x1B, 0x37, 0x79,
|
||||
0xD6, 0x8C, 0x8B, 0x72, 0x3E, 0x67, 0xA5, 0x05, 0x0E, 0x41,
|
||||
0x8A, 0x9E, 0x35, 0x50, 0xB4, 0xD2, 0x40, 0x27, 0x6B, 0xFD,
|
||||
0xE0, 0x64, 0x6B, 0x5B, 0x38, 0x42, 0x94, 0xB5, 0x49, 0xDA,
|
||||
0xEF, 0x6E, 0x78, 0x37, 0xCD, 0x30, 0x89, 0xC3, 0x45, 0x50,
|
||||
0x7B, 0x9C, 0x8C, 0xE7, 0x1C, 0x98, 0x70, 0x71, 0x5D, 0x79,
|
||||
0x5F, 0xEF, 0xE8, 0x94, 0x85, 0x53, 0x3E, 0xEF, 0xA3, 0x2C,
|
||||
0xCE, 0x1A, 0xAB, 0x7D, 0xD6, 0x5E, 0x14, 0xCD, 0x51, 0x54,
|
||||
0x89, 0x9D, 0x77, 0xE4, 0xF8, 0x22, 0xF0, 0x35, 0x10, 0x75,
|
||||
0x05, 0x71, 0x51, 0x4F, 0x8C, 0x4C, 0x5C, 0x0D, 0x2C, 0x2C,
|
||||
0xBE, 0x6C, 0x34, 0xEE, 0x12, 0x82, 0x87, 0x03, 0x19, 0x06,
|
||||
0x12, 0xA8, 0xAA, 0xF4, 0x0D, 0x3C, 0x49, 0xCC, 0x70, 0x5A,
|
||||
0xD8, 0x32, 0xEE, 0x32, 0x50, 0x85, 0x70, 0xE8, 0x18, 0xFD,
|
||||
0x74, 0x80, 0x53, 0x32, 0x57, 0xEE, 0x50, 0xC9, 0xAE, 0xEB,
|
||||
0xAE, 0xB6, 0x22, 0x32, 0x16, 0x6B, 0x8C, 0x59, 0xDA, 0xEE,
|
||||
0x1D, 0x33, 0xDF, 0x4C, 0xA2, 0x3D
|
||||
};
|
||||
static unsigned char dsaq_2048[] = {
|
||||
0xAD, 0x2D, 0x6E, 0x17, 0xB0, 0xF3, 0xEB, 0xC7, 0xB8, 0xEE,
|
||||
0x95, 0x78, 0xF2, 0x17, 0xF5, 0x33, 0x01, 0x67, 0xBC, 0xDE,
|
||||
0x93, 0xFF, 0xEE, 0x40, 0xE8, 0x7F, 0xF1, 0x93, 0x6D, 0x4B,
|
||||
0x87, 0x13
|
||||
};
|
||||
static unsigned char dsag_2048[] = {
|
||||
0x66, 0x6F, 0xDA, 0x63, 0xA5, 0x8E, 0xD2, 0x4C, 0xD5, 0x45,
|
||||
0x2D, 0x76, 0x5D, 0x5F, 0xCD, 0x4A, 0xB4, 0x1A, 0x42, 0x35,
|
||||
0x86, 0x3A, 0x6F, 0xA9, 0xFA, 0x27, 0xAB, 0xDE, 0x03, 0x21,
|
||||
0x36, 0x0A, 0x07, 0x29, 0xC9, 0x2F, 0x6D, 0x49, 0xA8, 0xF7,
|
||||
0xC6, 0xF4, 0x92, 0xD7, 0x73, 0xC1, 0xD8, 0x76, 0x0E, 0x61,
|
||||
0xA7, 0x0B, 0x6E, 0x96, 0xB8, 0xC8, 0xCB, 0x38, 0x35, 0x12,
|
||||
0x20, 0x79, 0xA5, 0x08, 0x28, 0x35, 0x5C, 0xBC, 0x52, 0x16,
|
||||
0xAF, 0x52, 0xBA, 0x0F, 0xC3, 0xB1, 0x63, 0x12, 0x27, 0x0B,
|
||||
0x74, 0xA4, 0x47, 0x43, 0xD6, 0x30, 0xB8, 0x9C, 0x2E, 0x40,
|
||||
0x14, 0xCD, 0x99, 0x7F, 0xE8, 0x8E, 0x37, 0xB0, 0xA9, 0x3F,
|
||||
0x54, 0xE9, 0x66, 0x22, 0x61, 0x4C, 0xF8, 0x49, 0x03, 0x57,
|
||||
0x14, 0x32, 0x1D, 0x37, 0x3D, 0xE2, 0x92, 0xF8, 0x8E, 0xA0,
|
||||
0x6A, 0x66, 0x63, 0xF0, 0xB0, 0x6E, 0x07, 0x2B, 0x3D, 0xBF,
|
||||
0xD0, 0x84, 0x6A, 0xAA, 0x1F, 0x30, 0x77, 0x65, 0xE5, 0xFC,
|
||||
0xF5, 0xEC, 0x55, 0xCE, 0x73, 0xDB, 0xBE, 0xA7, 0x8D, 0x3A,
|
||||
0x9F, 0x7A, 0xED, 0x4F, 0xAF, 0xA2, 0x80, 0x4C, 0x30, 0x9E,
|
||||
0x28, 0x49, 0x65, 0x40, 0xF0, 0x03, 0x45, 0x56, 0x99, 0xA2,
|
||||
0x93, 0x1B, 0x9C, 0x46, 0xDE, 0xBD, 0xA8, 0xAB, 0x5F, 0x90,
|
||||
0x3F, 0xB7, 0x3F, 0xD4, 0x6F, 0x8D, 0x5A, 0x30, 0xE1, 0xD4,
|
||||
0x63, 0x3A, 0x6A, 0x7C, 0x8F, 0x24, 0xFC, 0xD9, 0x14, 0x28,
|
||||
0x09, 0xE4, 0x84, 0x4E, 0x17, 0x43, 0x56, 0xB8, 0xD4, 0x4B,
|
||||
0xA2, 0x29, 0x45, 0xD3, 0x13, 0xF0, 0xC2, 0x76, 0x9B, 0x01,
|
||||
0xA0, 0x80, 0x6E, 0x93, 0x63, 0x5E, 0x87, 0x24, 0x20, 0x2A,
|
||||
0xFF, 0xBB, 0x9F, 0xA8, 0x99, 0x6C, 0xA7, 0x9A, 0x00, 0xB9,
|
||||
0x7D, 0xDA, 0x66, 0xC9, 0xC0, 0x72, 0x72, 0x22, 0x0F, 0x1A,
|
||||
0xCC, 0x23, 0xD9, 0xB7, 0x5F, 0x1B
|
||||
};
|
||||
DSA *dsa = DSA_new();
|
||||
BIGNUM *p, *q, *g;
|
||||
|
||||
if (dsa == NULL)
|
||||
return NULL;
|
||||
if (!DSA_set0_pqg(dsa, p = BN_bin2bn(dsap_2048, sizeof(dsap_2048), NULL),
|
||||
q = BN_bin2bn(dsaq_2048, sizeof(dsaq_2048), NULL),
|
||||
g = BN_bin2bn(dsag_2048, sizeof(dsag_2048), NULL))) {
|
||||
DSA_free(dsa);
|
||||
BN_free(p);
|
||||
BN_free(q);
|
||||
BN_free(g);
|
||||
return NULL;
|
||||
}
|
||||
return dsa;
|
||||
}
|
||||
|
||||
static int genkeys(void)
|
||||
{
|
||||
if (!TEST_ptr(dsakey = load_dsa_params()))
|
||||
return 0;
|
||||
|
||||
if (!TEST_int_eq(DSA_generate_key(dsakey), 1))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int sign_and_verify(int len)
|
||||
{
|
||||
/*
|
||||
* Per FIPS 186-4, the hash is recommended to be the same length as q.
|
||||
* If the hash is longer than q, the leftmost N bits are used; if the hash
|
||||
* is shorter, then we left-pad (see appendix C.2.1).
|
||||
*/
|
||||
size_t sigLength;
|
||||
int digestlen = BN_num_bytes(DSA_get0_q(dsakey));
|
||||
int ok = 0;
|
||||
|
||||
unsigned char *dataToSign = OPENSSL_malloc(len);
|
||||
unsigned char *paddedData = OPENSSL_malloc(digestlen);
|
||||
unsigned char *signature = NULL;
|
||||
EVP_PKEY_CTX *ctx = NULL;
|
||||
EVP_PKEY *pkey = NULL;
|
||||
|
||||
if (!TEST_ptr(dataToSign) ||
|
||||
!TEST_ptr(paddedData) ||
|
||||
!TEST_int_eq(RAND_bytes(dataToSign, len), 1))
|
||||
goto end;
|
||||
|
||||
memset(paddedData, 0, digestlen);
|
||||
if (len > digestlen)
|
||||
memcpy(paddedData, dataToSign, digestlen);
|
||||
else
|
||||
memcpy(paddedData + digestlen - len, dataToSign, len);
|
||||
|
||||
if (!TEST_ptr(pkey = EVP_PKEY_new()))
|
||||
goto end;
|
||||
EVP_PKEY_set1_DSA(pkey, dsakey);
|
||||
|
||||
if (!TEST_ptr(ctx = EVP_PKEY_CTX_new(pkey, NULL)))
|
||||
goto end;
|
||||
if (!TEST_int_eq(EVP_PKEY_sign_init(ctx), 1))
|
||||
goto end;
|
||||
|
||||
if (EVP_PKEY_sign(ctx, NULL, &sigLength, dataToSign, len) != 1) {
|
||||
TEST_error("Failed to get signature length, len=%d", len);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!TEST_ptr(signature = OPENSSL_malloc(sigLength)))
|
||||
goto end;
|
||||
|
||||
if (EVP_PKEY_sign(ctx, signature, &sigLength, dataToSign, len) != 1) {
|
||||
TEST_error("Failed to sign, len=%d", len);
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Check that the signature is okay via the EVP interface */
|
||||
if (!TEST_int_eq(EVP_PKEY_verify_init(ctx), 1))
|
||||
goto end;
|
||||
|
||||
/* ... using the same data we just signed */
|
||||
if (EVP_PKEY_verify(ctx, signature, sigLength, dataToSign, len) != 1) {
|
||||
TEST_error("EVP verify with unpadded length %d failed\n", len);
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* ... padding/truncating the data to the appropriate digest size */
|
||||
if (EVP_PKEY_verify(ctx, signature, sigLength, paddedData, digestlen) != 1) {
|
||||
TEST_error("EVP verify with length %d failed\n", len);
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Verify again using the raw DSA interface */
|
||||
if (DSA_verify(0, dataToSign, len, signature, sigLength, dsakey) != 1) {
|
||||
TEST_error("Verification with unpadded data failed, len=%d", len);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (DSA_verify(0, paddedData, digestlen, signature, sigLength, dsakey) != 1) {
|
||||
TEST_error("verify with length %d failed\n", len);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ok = 1;
|
||||
end:
|
||||
EVP_PKEY_CTX_free(ctx);
|
||||
EVP_PKEY_free(pkey);
|
||||
|
||||
OPENSSL_free(signature);
|
||||
OPENSSL_free(paddedData);
|
||||
OPENSSL_free(dataToSign);
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
static int dsa_exact_size_test(void) {
|
||||
/*
|
||||
* For a 2048-bit p, q should be either 224 or 256 bits per the table in
|
||||
* FIPS 186-4 4.2.
|
||||
*/
|
||||
|
||||
return sign_and_verify(224 / 8) && sign_and_verify(256 / 8);
|
||||
}
|
||||
|
||||
static int dsa_small_digest_test(void) {
|
||||
return sign_and_verify(16) && sign_and_verify(1);
|
||||
}
|
||||
|
||||
static int dsa_large_digest_test(void) {
|
||||
return sign_and_verify(33) && sign_and_verify(64);
|
||||
}
|
||||
|
||||
void cleanup_tests(void)
|
||||
{
|
||||
DSA_free(dsakey);
|
||||
}
|
||||
|
||||
#endif /* OPENSSL_NO_DSA */
|
||||
|
||||
int setup_tests(void)
|
||||
{
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
if (!genkeys())
|
||||
return 0;
|
||||
|
||||
ADD_TEST(dsa_exact_size_test);
|
||||
ADD_TEST(dsa_small_digest_test);
|
||||
ADD_TEST(dsa_large_digest_test);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
+5
-6
@@ -45,16 +45,15 @@ static BIGNUM *walk_curve(const EC_GROUP *group, EC_POINT *point, int64_t num)
|
||||
int64_t i;
|
||||
|
||||
if (!TEST_ptr(scalar = BN_new())
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates_GFp(group, point,
|
||||
scalar,
|
||||
NULL, NULL)))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates(group, point, scalar,
|
||||
NULL, NULL)))
|
||||
goto err;
|
||||
|
||||
for (i = 0; i < num; i++) {
|
||||
if (!TEST_true(EC_POINT_mul(group, point, NULL, point, scalar, NULL))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates_GFp(group, point,
|
||||
scalar,
|
||||
NULL, NULL)))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates(group, point,
|
||||
scalar,
|
||||
NULL, NULL)))
|
||||
goto err;
|
||||
}
|
||||
return scalar;
|
||||
|
||||
+59
-72
@@ -169,7 +169,7 @@ static int prime_field_tests(void)
|
||||
* that the library gets to choose the EC_METHOD
|
||||
*/
|
||||
|| !TEST_ptr(group = EC_GROUP_new(EC_GFp_mont_method()))
|
||||
|| !TEST_true(EC_GROUP_set_curve_GFp(group, p, a, b, ctx))
|
||||
|| !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
|
||||
|| !TEST_ptr(tmp = EC_GROUP_new(EC_GROUP_method_of(group)))
|
||||
|| !TEST_true(EC_GROUP_copy(tmp, group)))
|
||||
goto err;
|
||||
@@ -177,7 +177,7 @@ static int prime_field_tests(void)
|
||||
group = tmp;
|
||||
tmp = NULL;
|
||||
|
||||
if (!TEST_true(EC_GROUP_get_curve_GFp(group, p, a, b, ctx)))
|
||||
if (!TEST_true(EC_GROUP_get_curve(group, p, a, b, ctx)))
|
||||
goto err;
|
||||
|
||||
TEST_info("Curve defined by Weierstrass equation");
|
||||
@@ -200,13 +200,11 @@ static int prime_field_tests(void)
|
||||
|| !TEST_ptr(z = BN_new())
|
||||
|| !TEST_ptr(yplusone = BN_new())
|
||||
|| !TEST_true(BN_hex2bn(&x, "D"))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates_GFp(group, Q, x, 1,
|
||||
ctx)))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates(group, Q, x, 1, ctx)))
|
||||
goto err;
|
||||
|
||||
if (!TEST_int_gt(EC_POINT_is_on_curve(group, Q, ctx), 0)) {
|
||||
if (!TEST_true(EC_POINT_get_affine_coordinates_GFp(group, Q, x, y,
|
||||
ctx)))
|
||||
if (!TEST_true(EC_POINT_get_affine_coordinates(group, Q, x, y, ctx)))
|
||||
goto err;
|
||||
TEST_info("Point is not on curve");
|
||||
test_output_bignum("x", x);
|
||||
@@ -223,8 +221,8 @@ static int prime_field_tests(void)
|
||||
if (EC_POINT_is_at_infinity(group, P)) {
|
||||
TEST_note(" point at infinity");
|
||||
} else {
|
||||
if (!TEST_true(EC_POINT_get_affine_coordinates_GFp(group, P, x, y,
|
||||
ctx)))
|
||||
if (!TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y,
|
||||
ctx)))
|
||||
goto err;
|
||||
|
||||
test_output_bignum("x", x);
|
||||
@@ -293,7 +291,7 @@ static int prime_field_tests(void)
|
||||
"FFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"))
|
||||
|| !TEST_true(BN_hex2bn(&b, "1C97BEFC"
|
||||
"54BD7A8B65ACF89F81D4D4ADC565FA45"))
|
||||
|| !TEST_true(EC_GROUP_set_curve_GFp(group, p, a, b, ctx))
|
||||
|| !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
|
||||
|| !TEST_true(BN_hex2bn(&x, "4A96B568"
|
||||
"8EF573284664698968C38BB913CBFC82"))
|
||||
|| !TEST_true(BN_hex2bn(&y, "23a62855"
|
||||
@@ -303,14 +301,14 @@ static int prime_field_tests(void)
|
||||
* When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
|
||||
* and therefore setting the coordinates should fail.
|
||||
*/
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates_GFp(group, P, x,
|
||||
yplusone, ctx))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates_GFp(group, P, x, y, ctx))
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
|
||||
ctx))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates(group, P, x, y, ctx))
|
||||
|| !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
|
||||
|| !TEST_true(BN_hex2bn(&z, "0100000000"
|
||||
"000000000001F4C8F927AED3CA752257"))
|
||||
|| !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
|
||||
goto err;
|
||||
TEST_info("SEC2 curve secp160r1 -- Generator");
|
||||
test_output_bignum("x", x);
|
||||
@@ -333,16 +331,15 @@ static int prime_field_tests(void)
|
||||
"FFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"))
|
||||
|| !TEST_true(BN_hex2bn(&b, "64210519E59C80E7"
|
||||
"0FA7E9AB72243049FEB8DEECC146B9B1"))
|
||||
|| !TEST_true(EC_GROUP_set_curve_GFp(group, p, a, b, ctx))
|
||||
|| !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
|
||||
|| !TEST_true(BN_hex2bn(&x, "188DA80EB03090F6"
|
||||
"7CBF20EB43A18800F4FF0AFD82FF1012"))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates_GFp(group, P, x, 1,
|
||||
ctx))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x, 1, ctx))
|
||||
|| !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
|
||||
|| !TEST_true(BN_hex2bn(&z, "FFFFFFFFFFFFFFFF"
|
||||
"FFFFFFFF99DEF836146BC9B1B4D22831"))
|
||||
|| !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
|
||||
goto err;
|
||||
|
||||
TEST_info("NIST curve P-192 -- Generator");
|
||||
@@ -357,8 +354,8 @@ static int prime_field_tests(void)
|
||||
* When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
|
||||
* and therefore setting the coordinates should fail.
|
||||
*/
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates_GFp(group, P, x,
|
||||
yplusone, ctx))
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
|
||||
ctx))
|
||||
|| !TEST_int_eq(EC_GROUP_get_degree(group), 192)
|
||||
|| !group_order_tests(group)
|
||||
|| !TEST_ptr(P_192 = EC_GROUP_new(EC_GROUP_method_of(group)))
|
||||
@@ -373,16 +370,15 @@ static int prime_field_tests(void)
|
||||
"FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"))
|
||||
|| !TEST_true(BN_hex2bn(&b, "B4050A850C04B3ABF5413256"
|
||||
"5044B0B7D7BFD8BA270B39432355FFB4"))
|
||||
|| !TEST_true(EC_GROUP_set_curve_GFp(group, p, a, b, ctx))
|
||||
|| !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
|
||||
|| !TEST_true(BN_hex2bn(&x, "B70E0CBD6BB4BF7F321390B9"
|
||||
"4A03C1D356C21122343280D6115C1D21"))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates_GFp(group, P, x, 0,
|
||||
ctx))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x, 0, ctx))
|
||||
|| !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
|
||||
|| !TEST_true(BN_hex2bn(&z, "FFFFFFFFFFFFFFFFFFFFFFFF"
|
||||
"FFFF16A2E0B8F03E13DD29455C5C2A3D"))
|
||||
|| !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
|
||||
goto err;
|
||||
|
||||
TEST_info("NIST curve P-224 -- Generator");
|
||||
@@ -397,8 +393,8 @@ static int prime_field_tests(void)
|
||||
* When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
|
||||
* and therefore setting the coordinates should fail.
|
||||
*/
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates_GFp(group, P, x,
|
||||
yplusone, ctx))
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
|
||||
ctx))
|
||||
|| !TEST_int_eq(EC_GROUP_get_degree(group), 224)
|
||||
|| !group_order_tests(group)
|
||||
|| !TEST_ptr(P_224 = EC_GROUP_new(EC_GROUP_method_of(group)))
|
||||
@@ -413,17 +409,16 @@ static int prime_field_tests(void)
|
||||
"00000000FFFFFFFFFFFFFFFFFFFFFFFC"))
|
||||
|| !TEST_true(BN_hex2bn(&b, "5AC635D8AA3A93E7B3EBBD55769886BC"
|
||||
"651D06B0CC53B0F63BCE3C3E27D2604B"))
|
||||
|| !TEST_true(EC_GROUP_set_curve_GFp(group, p, a, b, ctx))
|
||||
|| !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
|
||||
|
||||
|| !TEST_true(BN_hex2bn(&x, "6B17D1F2E12C4247F8BCE6E563A440F2"
|
||||
"77037D812DEB33A0F4A13945D898C296"))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates_GFp(group, P, x, 1,
|
||||
ctx))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x, 1, ctx))
|
||||
|| !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
|
||||
|| !TEST_true(BN_hex2bn(&z, "FFFFFFFF00000000FFFFFFFFFFFFFFFF"
|
||||
"BCE6FAADA7179E84F3B9CAC2FC632551"))
|
||||
|| !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
|
||||
goto err;
|
||||
|
||||
TEST_info("NIST curve P-256 -- Generator");
|
||||
@@ -438,8 +433,8 @@ static int prime_field_tests(void)
|
||||
* When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
|
||||
* and therefore setting the coordinates should fail.
|
||||
*/
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates_GFp(group, P, x,
|
||||
yplusone, ctx))
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
|
||||
ctx))
|
||||
|| !TEST_int_eq(EC_GROUP_get_degree(group), 256)
|
||||
|| !group_order_tests(group)
|
||||
|| !TEST_ptr(P_256 = EC_GROUP_new(EC_GROUP_method_of(group)))
|
||||
@@ -457,19 +452,18 @@ static int prime_field_tests(void)
|
||||
|| !TEST_true(BN_hex2bn(&b, "B3312FA7E23EE7E4988E056BE3F82D19"
|
||||
"181D9C6EFE8141120314088F5013875A"
|
||||
"C656398D8A2ED19D2A85C8EDD3EC2AEF"))
|
||||
|| !TEST_true(EC_GROUP_set_curve_GFp(group, p, a, b, ctx))
|
||||
|| !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
|
||||
|
||||
|| !TEST_true(BN_hex2bn(&x, "AA87CA22BE8B05378EB1C71EF320AD74"
|
||||
"6E1D3B628BA79B9859F741E082542A38"
|
||||
"5502F25DBF55296C3A545E3872760AB7"))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates_GFp(group, P, x, 1,
|
||||
ctx))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x, 1, ctx))
|
||||
|| !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
|
||||
|| !TEST_true(BN_hex2bn(&z, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
|
||||
"FFFFFFFFFFFFFFFFC7634D81F4372DDF"
|
||||
"581A0DB248B0A77AECEC196ACCC52973"))
|
||||
|| !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
|
||||
goto err;
|
||||
|
||||
TEST_info("NIST curve P-384 -- Generator");
|
||||
@@ -485,8 +479,8 @@ static int prime_field_tests(void)
|
||||
* When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
|
||||
* and therefore setting the coordinates should fail.
|
||||
*/
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates_GFp(group, P, x,
|
||||
yplusone, ctx))
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
|
||||
ctx))
|
||||
|| !TEST_int_eq(EC_GROUP_get_degree(group), 384)
|
||||
|| !group_order_tests(group)
|
||||
|| !TEST_ptr(P_384 = EC_GROUP_new(EC_GROUP_method_of(group)))
|
||||
@@ -509,14 +503,13 @@ static int prime_field_tests(void)
|
||||
"A2DA725B99B315F3B8B489918EF109E1"
|
||||
"56193951EC7E937B1652C0BD3BB1BF07"
|
||||
"3573DF883D2C34F1EF451FD46B503F00"))
|
||||
|| !TEST_true(EC_GROUP_set_curve_GFp(group, p, a, b, ctx))
|
||||
|| !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
|
||||
|| !TEST_true(BN_hex2bn(&x, "C6"
|
||||
"858E06B70404E9CD9E3ECB662395B442"
|
||||
"9C648139053FB521F828AF606B4D3DBA"
|
||||
"A14B5E77EFE75928FE1DC127A2FFA8DE"
|
||||
"3348B3C1856A429BF97E7E31C2E5BD66"))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates_GFp(group, P, x, 0,
|
||||
ctx))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x, 0, ctx))
|
||||
|| !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
|
||||
|| !TEST_true(BN_hex2bn(&z, "1FF"
|
||||
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
|
||||
@@ -524,7 +517,7 @@ static int prime_field_tests(void)
|
||||
"51868783BF2F966B7FCC0148F709A5D0"
|
||||
"3BB5C9B8899C47AEBB6FB71E91386409"))
|
||||
|| !TEST_true(EC_GROUP_set_generator(group, P, z, BN_value_one()))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx)))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
|
||||
goto err;
|
||||
|
||||
TEST_info("NIST curve P-521 -- Generator");
|
||||
@@ -542,8 +535,8 @@ static int prime_field_tests(void)
|
||||
* When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
|
||||
* and therefore setting the coordinates should fail.
|
||||
*/
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates_GFp(group, P, x,
|
||||
yplusone, ctx))
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone,
|
||||
ctx))
|
||||
|| !TEST_int_eq(EC_GROUP_get_degree(group), 521)
|
||||
|| !group_order_tests(group)
|
||||
|| !TEST_ptr(P_521 = EC_GROUP_new(EC_GROUP_method_of(group)))
|
||||
@@ -552,7 +545,7 @@ static int prime_field_tests(void)
|
||||
/* more tests using the last curve */
|
||||
|
||||
/* Restore the point that got mangled in the (x, y + 1) test. */
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates_GFp(group, P, x, y, ctx))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates(group, P, x, y, ctx))
|
||||
|| !TEST_true(EC_POINT_copy(Q, P))
|
||||
|| !TEST_false(EC_POINT_is_at_infinity(group, Q))
|
||||
|| !TEST_true(EC_POINT_dbl(group, P, P, ctx))
|
||||
@@ -834,7 +827,7 @@ static int char2_curve_test(int n)
|
||||
|| !TEST_true(BN_hex2bn(&a, test->a))
|
||||
|| !TEST_true(BN_hex2bn(&b, test->b))
|
||||
|| !TEST_true(group = EC_GROUP_new(EC_GF2m_simple_method()))
|
||||
|| !TEST_true(EC_GROUP_set_curve_GF2m(group, p, a, b, ctx))
|
||||
|| !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
|
||||
|| !TEST_ptr(P = EC_POINT_new(group))
|
||||
|| !TEST_ptr(Q = EC_POINT_new(group))
|
||||
|| !TEST_ptr(R = EC_POINT_new(group))
|
||||
@@ -849,17 +842,15 @@ static int char2_curve_test(int n)
|
||||
* When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
|
||||
* and therefore setting the coordinates should fail.
|
||||
*/
|
||||
if (!TEST_false(EC_POINT_set_affine_coordinates_GF2m(group, P, x, yplusone,
|
||||
ctx))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates_GF2m(group, P, x,
|
||||
test->y_bit,
|
||||
ctx))
|
||||
if (!TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone, ctx))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates(group, P, x,
|
||||
test->y_bit,
|
||||
ctx))
|
||||
|| !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
|
||||
|| !TEST_true(BN_hex2bn(&z, test->order))
|
||||
|| !TEST_true(BN_hex2bn(&cof, test->cof))
|
||||
|| !TEST_true(EC_GROUP_set_generator(group, P, z, cof))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates_GF2m(group, P, x, y,
|
||||
ctx)))
|
||||
|| !TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y, ctx)))
|
||||
goto err;
|
||||
TEST_info("%s -- Generator", test->name);
|
||||
test_output_bignum("x", x);
|
||||
@@ -873,9 +864,8 @@ static int char2_curve_test(int n)
|
||||
* When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
|
||||
* and therefore setting the coordinates should fail.
|
||||
*/
|
||||
if (!TEST_false(EC_POINT_set_affine_coordinates_GF2m(group, P, x, yplusone,
|
||||
ctx))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates_GF2m(group, P, x, y, ctx))
|
||||
if (!TEST_false(EC_POINT_set_affine_coordinates(group, P, x, yplusone, ctx))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates(group, P, x, y, ctx))
|
||||
|| !TEST_int_gt(EC_POINT_is_on_curve(group, P, ctx), 0)
|
||||
|| !TEST_true(BN_hex2bn(&z, test->order))
|
||||
|| !TEST_true(BN_hex2bn(&cof, test->cof))
|
||||
@@ -894,8 +884,7 @@ static int char2_curve_test(int n)
|
||||
|
||||
/* more tests using the last curve */
|
||||
if (n == OSSL_NELEM(char2_curve_tests) - 1) {
|
||||
if (!TEST_true(EC_POINT_set_affine_coordinates_GF2m(group, P, x, y,
|
||||
ctx))
|
||||
if (!TEST_true(EC_POINT_set_affine_coordinates(group, P, x, y, ctx))
|
||||
|| !TEST_true(EC_POINT_copy(Q, P))
|
||||
|| !TEST_false(EC_POINT_is_at_infinity(group, Q))
|
||||
|| !TEST_true(EC_POINT_dbl(group, P, P, ctx))
|
||||
@@ -995,7 +984,7 @@ static int char2_field_tests(void)
|
||||
* so that the library gets
|
||||
* to choose the EC_METHOD */
|
||||
if (!TEST_ptr(group)
|
||||
|| !TEST_true(EC_GROUP_set_curve_GF2m(group, p, a, b, ctx))
|
||||
|| !TEST_true(EC_GROUP_set_curve(group, p, a, b, ctx))
|
||||
|| !TEST_ptr(tmp = EC_GROUP_new(EC_GROUP_method_of(group)))
|
||||
|| !TEST_true(EC_GROUP_copy(tmp, group)))
|
||||
goto err;
|
||||
@@ -1003,7 +992,7 @@ static int char2_field_tests(void)
|
||||
group = tmp;
|
||||
tmp = NULL;
|
||||
|
||||
if (!TEST_true(EC_GROUP_get_curve_GF2m(group, p, a, b, ctx)))
|
||||
if (!TEST_true(EC_GROUP_get_curve(group, p, a, b, ctx)))
|
||||
goto err;
|
||||
|
||||
TEST_info("Curve defined by Weierstrass equation");
|
||||
@@ -1031,19 +1020,17 @@ static int char2_field_tests(void)
|
||||
|| !TEST_true(BN_hex2bn(&x, "6"))
|
||||
/* Change test based on whether binary point compression is enabled or not. */
|
||||
# ifdef OPENSSL_EC_BIN_PT_COMP
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates_GF2m(group, Q, x, 1,
|
||||
ctx))
|
||||
|| !TEST_true(EC_POINT_set_compressed_coordinates(group, Q, x, 1, ctx))
|
||||
# else
|
||||
|| !TEST_true(BN_hex2bn(&y, "8"))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates_GF2m(group, Q, x, y, ctx))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates(group, Q, x, y, ctx))
|
||||
# endif
|
||||
)
|
||||
goto err;
|
||||
if (!TEST_int_gt(EC_POINT_is_on_curve(group, Q, ctx), 0)) {
|
||||
/* Change test based on whether binary point compression is enabled or not. */
|
||||
# ifdef OPENSSL_EC_BIN_PT_COMP
|
||||
if (!TEST_true(EC_POINT_get_affine_coordinates_GF2m(group, Q, x, y,
|
||||
ctx)))
|
||||
if (!TEST_true(EC_POINT_get_affine_coordinates(group, Q, x, y, ctx)))
|
||||
goto err;
|
||||
# endif
|
||||
TEST_info("Point is not on curve");
|
||||
@@ -1061,8 +1048,8 @@ static int char2_field_tests(void)
|
||||
if (EC_POINT_is_at_infinity(group, P))
|
||||
TEST_note(" point at infinity");
|
||||
else {
|
||||
if (!TEST_true(EC_POINT_get_affine_coordinates_GF2m(group, P, x, y,
|
||||
ctx)))
|
||||
if (!TEST_true(EC_POINT_get_affine_coordinates(group, P, x, y,
|
||||
ctx)))
|
||||
goto err;
|
||||
|
||||
test_output_bignum("x", x);
|
||||
@@ -1306,7 +1293,7 @@ static int nistp_single_test(int idx)
|
||||
|| !TEST_int_eq(1, BN_is_prime_ex(p, BN_prime_checks, ctx, NULL))
|
||||
|| !TEST_true(BN_hex2bn(&a, test->a))
|
||||
|| !TEST_true(BN_hex2bn(&b, test->b))
|
||||
|| !TEST_true(EC_GROUP_set_curve_GFp(NISTP, p, a, b, ctx))
|
||||
|| !TEST_true(EC_GROUP_set_curve(NISTP, p, a, b, ctx))
|
||||
|| !TEST_ptr(G = EC_POINT_new(NISTP))
|
||||
|| !TEST_ptr(P = EC_POINT_new(NISTP))
|
||||
|| !TEST_ptr(Q = EC_POINT_new(NISTP))
|
||||
@@ -1318,13 +1305,13 @@ static int nistp_single_test(int idx)
|
||||
* When (x, y) is on the curve, (x, y + 1) is, as it happens, not,
|
||||
* and therefore setting the coordinates should fail.
|
||||
*/
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates_GFp(NISTP, Q_CHECK, x,
|
||||
yplusone, ctx))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates_GFp(NISTP, Q_CHECK, x, y,
|
||||
ctx))
|
||||
|| !TEST_false(EC_POINT_set_affine_coordinates(NISTP, Q_CHECK, x,
|
||||
yplusone, ctx))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates(NISTP, Q_CHECK, x, y,
|
||||
ctx))
|
||||
|| !TEST_true(BN_hex2bn(&x, test->Gx))
|
||||
|| !TEST_true(BN_hex2bn(&y, test->Gy))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates_GFp(NISTP, G, x, y, ctx))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates(NISTP, G, x, y, ctx))
|
||||
|| !TEST_true(BN_hex2bn(&order, test->order))
|
||||
|| !TEST_true(EC_GROUP_set_generator(NISTP, G, order, BN_value_one()))
|
||||
|| !TEST_int_eq(EC_GROUP_get_degree(NISTP), test->degree))
|
||||
|
||||
@@ -459,6 +459,20 @@ static int CustomExtensionParseCallback(SSL *ssl, unsigned extension_value,
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ServerNameCallback(SSL *ssl, int *out_alert, void *arg) {
|
||||
// SNI must be accessible from the SNI callback.
|
||||
const TestConfig *config = GetTestConfig(ssl);
|
||||
const char *server_name = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
|
||||
if (server_name == nullptr ||
|
||||
std::string(server_name) != config->expected_server_name) {
|
||||
fprintf(stderr, "servername mismatch (got %s; want %s)\n", server_name,
|
||||
config->expected_server_name.c_str());
|
||||
return SSL_TLSEXT_ERR_ALERT_FATAL;
|
||||
}
|
||||
|
||||
return SSL_TLSEXT_ERR_OK;
|
||||
}
|
||||
|
||||
// Connect returns a new socket connected to localhost on |port| or -1 on
|
||||
// error.
|
||||
static int Connect(uint16_t port) {
|
||||
@@ -645,6 +659,10 @@ static bssl::UniquePtr<SSL_CTX> SetupCtx(const TestConfig *config) {
|
||||
sizeof(sess_id_ctx) - 1))
|
||||
return nullptr;
|
||||
|
||||
if (!config->expected_server_name.empty()) {
|
||||
SSL_CTX_set_tlsext_servername_callback(ssl_ctx.get(), ServerNameCallback);
|
||||
}
|
||||
|
||||
return ssl_ctx;
|
||||
}
|
||||
|
||||
@@ -809,7 +827,8 @@ static bool CheckHandshakeProperties(SSL *ssl, bool is_resume) {
|
||||
if (!config->expected_server_name.empty()) {
|
||||
const char *server_name =
|
||||
SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
|
||||
if (server_name != config->expected_server_name) {
|
||||
if (server_name == nullptr ||
|
||||
std::string(server_name) != config->expected_server_name) {
|
||||
fprintf(stderr, "servername mismatch (got %s; want %s)\n",
|
||||
server_name, config->expected_server_name.c_str());
|
||||
return false;
|
||||
|
||||
@@ -16,11 +16,12 @@ use OpenSSL::Test::Utils;
|
||||
|
||||
setup("test_dsa");
|
||||
|
||||
plan tests => 5;
|
||||
plan tests => 6;
|
||||
|
||||
require_ok(srctop_file('test','recipes','tconversion.pl'));
|
||||
|
||||
ok(run(test(["dsatest"])), "running dsatest");
|
||||
ok(run(test(["dsa_no_digest_size_test"])), "running dsa_no_digest_size_test");
|
||||
|
||||
SKIP: {
|
||||
skip "Skipping dsa conversion test", 3
|
||||
|
||||
@@ -18,7 +18,8 @@ use constant {
|
||||
NO_EXTENSION => 3,
|
||||
EMPTY_EXTENSION => 4,
|
||||
TLS1_1_AND_1_0_ONLY => 5,
|
||||
WITH_TLS1_4 => 6
|
||||
WITH_TLS1_4 => 6,
|
||||
BAD_LEGACY_VERSION => 7
|
||||
};
|
||||
|
||||
my $testtype;
|
||||
@@ -55,7 +56,7 @@ my $proxy = TLSProxy::Proxy->new(
|
||||
$testtype = EMPTY_EXTENSION;
|
||||
$proxy->filter(\&modify_supported_versions_filter);
|
||||
$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
|
||||
plan tests => 7;
|
||||
plan tests => 8;
|
||||
ok(TLSProxy::Message->fail(), "Empty supported versions");
|
||||
|
||||
#Test 2: supported_versions extension with no recognised versions should not
|
||||
@@ -111,6 +112,12 @@ ok(TLSProxy::Message->success()
|
||||
&& TLSProxy::Proxy->is_tls13(),
|
||||
"TLS1.4 in supported versions extension");
|
||||
|
||||
#Test 8: Set the legacy version to SSLv3 with supported versions. Should fail
|
||||
$proxy->clear();
|
||||
$testtype = BAD_LEGACY_VERSION;
|
||||
$proxy->start();
|
||||
ok(TLSProxy::Message->fail(), "Legacy version is SSLv3 with supported versions");
|
||||
|
||||
sub modify_supported_versions_filter
|
||||
{
|
||||
my $proxy = shift;
|
||||
@@ -165,14 +172,15 @@ sub modify_supported_versions_filter
|
||||
} elsif ($testtype == EMPTY_EXTENSION) {
|
||||
$message->set_extension(
|
||||
TLSProxy::Message::EXT_SUPPORTED_VERSIONS, "");
|
||||
} else {
|
||||
} elsif ($testtype == NO_EXTENSION) {
|
||||
$message->delete_extension(
|
||||
TLSProxy::Message::EXT_SUPPORTED_VERSIONS);
|
||||
} else {
|
||||
# BAD_LEGACY_VERSION
|
||||
$message->client_version(TLSProxy::Record::VERS_SSL_3_0);
|
||||
}
|
||||
|
||||
$message->repack();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -107,8 +107,8 @@ static EC_GROUP *create_EC_group(const char *p_hex, const char *a_hex,
|
||||
|
||||
if (!TEST_true(BN_hex2bn(&g_x, x_hex))
|
||||
|| !TEST_true(BN_hex2bn(&g_y, y_hex))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates_GFp(group, generator,
|
||||
g_x, g_y, NULL)))
|
||||
|| !TEST_true(EC_POINT_set_affine_coordinates(group, generator, g_x,
|
||||
g_y, NULL)))
|
||||
goto done;
|
||||
|
||||
if (!TEST_true(BN_hex2bn(&order, order_hex))
|
||||
|
||||
@@ -108,7 +108,7 @@ VerifyMode = Peer
|
||||
|
||||
[test-2]
|
||||
ExpectedResult = ServerFail
|
||||
ExpectedServerAlert = HandshakeFailure
|
||||
ExpectedServerAlert = CertificateRequired
|
||||
|
||||
|
||||
# ===========================================================
|
||||
|
||||
@@ -101,7 +101,9 @@ sub generate_tests() {
|
||||
},
|
||||
test => {
|
||||
"ExpectedResult" => "ServerFail",
|
||||
"ExpectedServerAlert" => "HandshakeFailure",
|
||||
"ExpectedServerAlert" =>
|
||||
($protocol_name eq "flex" && !disabled("tls1_3"))
|
||||
? "CertificateRequired" : "HandshakeFailure",
|
||||
"Method" => $method,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -98,7 +98,7 @@ VerifyMode = Peer
|
||||
|
||||
[test-2]
|
||||
ExpectedResult = ServerFail
|
||||
ExpectedServerAlert = HandshakeFailure
|
||||
ExpectedServerAlert = CertificateRequired
|
||||
|
||||
|
||||
# ===========================================================
|
||||
|
||||
@@ -61,7 +61,7 @@ our @tests = (
|
||||
},
|
||||
test => {
|
||||
"ExpectedResult" => "ServerFail",
|
||||
"ExpectedServerAlert" => "HandshakeFailure",
|
||||
"ExpectedServerAlert" => "CertificateRequired",
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -126,6 +126,7 @@ static const test_enum ssl_alerts[] = {
|
||||
{"UnrecognizedName", SSL_AD_UNRECOGNIZED_NAME},
|
||||
{"BadCertificate", SSL_AD_BAD_CERTIFICATE},
|
||||
{"NoApplicationProtocol", SSL_AD_NO_APPLICATION_PROTOCOL},
|
||||
{"CertificateRequired", SSL_AD_CERTIFICATE_REQUIRED},
|
||||
};
|
||||
|
||||
__owur static int parse_alert(int *alert, const char *value)
|
||||
|
||||
+101
-85
@@ -27,7 +27,7 @@
|
||||
|
||||
/*
|
||||
* Based on the test vectors provided in:
|
||||
* https://www.ietf.org/id/draft-thomson-tls-tls13-vectors-01.txt
|
||||
* https://tools.ietf.org/html/draft-ietf-tls-tls13-vectors-06
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
@@ -42,6 +42,13 @@ typedef struct {
|
||||
const char *seq;
|
||||
} RECORD_DATA;
|
||||
|
||||
/*
|
||||
* Note 1: The plaintext values given here have an additional "16" or "17" byte
|
||||
* added to the end when compared to the official vectors. The official vectors
|
||||
* do not include the inner content type, but we require it.
|
||||
*
|
||||
* Note 2: These are the vectors for the "Simple 1-RTT Handshake"
|
||||
*/
|
||||
static RECORD_DATA refdata[] = {
|
||||
{
|
||||
/*
|
||||
@@ -49,143 +56,152 @@ static RECORD_DATA refdata[] = {
|
||||
* Finished
|
||||
*/
|
||||
{
|
||||
"0800001e001c000a00140012001d001700180019010001010102010301040000"
|
||||
"00000b0001b9000001b50001b0308201ac30820115a003020102020102300d06"
|
||||
"092a864886f70d01010b0500300e310c300a06035504031303727361301e170d"
|
||||
"3136303733303031323335395a170d3236303733303031323335395a300e310c"
|
||||
"300a0603550403130372736130819f300d06092a864886f70d01010105000381"
|
||||
"8d0030818902818100b4bb498f8279303d980836399b36c6988c0c68de55e1bd"
|
||||
"b826d3901a2461eafd2de49a91d015abbc9a95137ace6c1af19eaa6af98c7ced",
|
||||
"43120998e187a80ee0ccb0524b1b018c3e0b63264d449a6d38e22a5fda430846"
|
||||
"748030530ef0461c8ca9d9efbfae8ea6d1d03e2bd193eff0ab9a8002c47428a6"
|
||||
"d35a8d88d79f7f1e3f0203010001a31a301830090603551d1304023000300b06"
|
||||
"03551d0f0404030205a0300d06092a864886f70d01010b05000381810085aad2"
|
||||
"a0e5b9276b908c65f73a7267170618a54c5f8a7b337d2df7a594365417f2eae8"
|
||||
"f8a58c8f8172f9319cf36b7fd6c55b80f21a03015156726096fd335e5e67f2db"
|
||||
"f102702e608ccae6bec1fc63a42a99be5c3eb7107c3c54e9b9eb2bd5203b1c3b",
|
||||
"84e0a8b2f759409ba3eac9d91d402dcc0cc8f8961229ac9187b42b4de100000f"
|
||||
"00008408040080134e22eac57321ab47db6b38b2992cec2dd79bd065a034a9af"
|
||||
"6b9e3d03475e4309e6523ccdf055453fb480804a3a7e996229eb28e734f6702b"
|
||||
"ea2b32149899ac043a4b44468197868da77147ce9f73c0543c4e3fc33e306cac"
|
||||
"8506faa80a959c5f1edccbee76eda1ad7a4fa440de35dcb87e82ec94e8725355"
|
||||
"ce7507713a609e140000207304bb73321f01b71dd94622fae98daf634490d220"
|
||||
"e4c8f3ffa2559911a56e5116"
|
||||
"080000240022000a00140012001d00170018001901000101010201030104001c"
|
||||
"00024001000000000b0001b9000001b50001b0308201ac30820115a003020102"
|
||||
"020102300d06092a864886f70d01010b0500300e310c300a0603550403130372"
|
||||
"7361301e170d3136303733303031323335395a170d3236303733303031323335"
|
||||
"395a300e310c300a0603550403130372736130819f300d06092a864886f70d01"
|
||||
"0101050003818d0030818902818100b4bb498f8279303d980836399b36c6988c"
|
||||
"0c68de55e1bdb826d3901a2461eafd2de49a91d015abbc9a95137ace6c1af19e",
|
||||
"aa6af98c7ced43120998e187a80ee0ccb0524b1b018c3e0b63264d449a6d38e2"
|
||||
"2a5fda430846748030530ef0461c8ca9d9efbfae8ea6d1d03e2bd193eff0ab9a"
|
||||
"8002c47428a6d35a8d88d79f7f1e3f0203010001a31a301830090603551d1304"
|
||||
"023000300b0603551d0f0404030205a0300d06092a864886f70d01010b050003"
|
||||
"81810085aad2a0e5b9276b908c65f73a7267170618a54c5f8a7b337d2df7a594"
|
||||
"365417f2eae8f8a58c8f8172f9319cf36b7fd6c55b80f21a03015156726096fd"
|
||||
"335e5e67f2dbf102702e608ccae6bec1fc63a42a99be5c3eb7107c3c54e9b9eb",
|
||||
"2bd5203b1c3b84e0a8b2f759409ba3eac9d91d402dcc0cc8f8961229ac9187b4"
|
||||
"2b4de100000f00008408040080754040d0ddab8cf0e2da2bc4995b868ad745c8"
|
||||
"e1564e33cde17880a42392cc624aeef6b67bb3f0ae71d9d54a2309731d87dc59"
|
||||
"f642d733be2eb27484ad8a8c8eb3516a7ac57f2625e2b5c0888a8541f4e734f7"
|
||||
"3d054761df1dd02f0e3e9a33cfa10b6e3eb4ebf7ac053b01fdabbddfc54133bc"
|
||||
"d24c8bbdceb223b2aa03452a2914000020ac86acbc9cd25a45b57ad5b64db15d"
|
||||
"4405cf8c80e314583ebf3283ef9a99310c16"
|
||||
},
|
||||
{
|
||||
"40ae92071a3a548b26af31e116dfc0ba4549210b17e70da16cfbda9ccdad844d"
|
||||
"94264a9ae65b786b3eaf0de20aa89c6babb448b6f32d07f233584296eefe1931"
|
||||
"6bd979659472ee8567cb01d70b0366cddb3c60eb9e1d789a3691dc254c14de73"
|
||||
"f4f20100504544ce184d44547e124b1f18303b4859f8f2e2b04423d23a866b43"
|
||||
"866374d54af41649d25f4a3ec2cecd5d4e6de1b24953440b46fbb74c1dbec6fb"
|
||||
"b1f16bc21d4aa0e1e936a49c07127e19719bc652a2f0b7f8df4a150b2b3c9e9e"
|
||||
"353d6ed101970ddc611abad0632c6793f9379c9d06846c311fcbd6f85edd569b",
|
||||
"8782c4c5f62294c4611ae60f83230a53aa95e3bcbed204f19a7a1db83c0fbfec"
|
||||
"1edd2c17498fa7b5aa2321248a92592d891e4947df6bcef52f4481797d032ad3"
|
||||
"32046a384abece6454b3e356d7249bfa5696793c7f7d3048dc87fa7409a46918"
|
||||
"87caaf0982c402b902d699f62dc4d5e153f13e8589e4a6206c7f74eb26ddefbb"
|
||||
"92309fb753decfea972dec7de02eda9c6d26acd7be53a8aa20f1a93f082ae6eb"
|
||||
"927a6a1b7bd9153551aedfaf94f61dd4cb9355ad7ab09f615d9f92c21712c732"
|
||||
"c0e7e117797f38cbdc184e3a65e15a89f46cb3624f5fdb8dbbd275f2c8492f8d",
|
||||
"95bdbd8d1dc1b9f21107bd433acbbac247239c073a2f24a4a9f8074f325f277d"
|
||||
"579b6bff0269ff19aed3809a9ddd21dd29c1363c9dc44812dd41d2111f9c2e83"
|
||||
"42046c14133b853262676f15e94de18660e04ae5c0c661ea43559af5842e161c"
|
||||
"83dd29f64508b2ec3e635a2134fc0e1a39d3ecb51dcddfcf8382c88ffe2a7378"
|
||||
"42ad1de7fe505b6c4d1673870f6fc2a0f2f7972acaee368a1599d64ba18798f1"
|
||||
"0333f9779bd5b05f9b084d03dab2f3d80c2eb74ec70c9866ea31c18b491cd597"
|
||||
"aae3e941205fcc38a3a10ce8f2e230d97e3406b77ee53d84d89ca548"
|
||||
"f10b26d8fcaf67b5b828f712122216a1cd14187465b77637cbcd78539128bb93"
|
||||
"246dcca1af56f1eaa271666077455bc54965d85f05f9bd36d6996171eb536aff"
|
||||
"613eeddc42bad5a2d2227c4606f1215f980e7afaf56bd3b85a51be130003101a"
|
||||
"758d077b1c891d8e7a22947e5a229851fd42a9dd422608f868272abf92b3d43f"
|
||||
"b46ac420259346067f66322fd708885680f4b4433c29116f2dfa529e09bba53c"
|
||||
"7cd920121724809eaddcc84307ef46fc51a0b33d99d39db337fcd761ce0f2b02"
|
||||
"dc73dedb6fddb77c4f8099bde93d5bee08bcf2131f29a2a37ff07949e8f8bcdd",
|
||||
"3e8310b8bf8b3444c85aaf0d2aeb2d4f36fd14d5cb51fcebff418b3827136ab9"
|
||||
"529e9a3d3f35e4c0ae749ea2dbc94982a1281d3e6daab719aa4460889321a008"
|
||||
"bf10fa06ac0c61cc122cc90d5e22c0030c986ae84a33a0c47df174bcfbd50bf7"
|
||||
"8ffdf24051ab423db63d5815db2f830040f30521131c98c66f16c362addce2fb"
|
||||
"a0602cf0a7dddf22e8def7516cdfee95b4056cc9ad38c95352335421b5b1ffba"
|
||||
"df75e5212fdad7a75f52a2801486a1eec3539580bee0e4b337cda6085ac9eccd"
|
||||
"1a0f1a46cebfbb5cdfa3251ac28c3bc826148c6d8c1eb6a06f77f6ff632c6a83",
|
||||
"e283e8f9df7c6dbabf1c6ea40629a85b43ab0c73d34f9d5072832a104eda3f75"
|
||||
"f5d83da6e14822a18e14099d749eafd823ca2ac7542086501eca206ce7887920"
|
||||
"008573757ce2f230a890782b99cc682377beee812756d04f9025135fb599d746"
|
||||
"fefe7316c922ac265ca0d29021375adb63c1509c3e242dfb92b8dee891f7368c"
|
||||
"4058399b8db9075f2dcc8216194e503b6652d87d2cb41f99adfdcc5be5ec7e1e"
|
||||
"6326ac22d70bd3ba652827532d669aff005173597f8039c3ea4922d3ec757670"
|
||||
"222f6ac29b93e90d7ad3f6dd96328e429cfcfd5cca22707fe2d86ad1dcb0be75"
|
||||
"6e8e"
|
||||
},
|
||||
"d2dd45f87ad87801a85ac38187f9023b",
|
||||
"f0a14f808692cef87a3daf70",
|
||||
"c66cb1aec519df44c91e10995511ac8b",
|
||||
"f7f6884c4981716c2d0d29a4",
|
||||
"0000000000000000"
|
||||
},
|
||||
{
|
||||
/* Client: Finished */
|
||||
{
|
||||
"1400002078367856d3c8cc4e0a95eb98906ca7a48bd3cc7029f48bd4ae0dc91a"
|
||||
"b903ca8916","",""
|
||||
"14000020b9027a0204b972b52cdefa58950fa1580d68c9cb124dbe691a7178f2"
|
||||
"5c554b2316", "", ""
|
||||
},
|
||||
{
|
||||
"fa15e92daa21cd05d8f9c3152a61748d9aaf049da559718e583f95aacecad657"
|
||||
"b52a6562da66864fd14969acc30dc04a78c38283c5","",""
|
||||
"9539b4ae2f87fd8e616b295628ea953d9e3858db274970d19813ec136cae7d96"
|
||||
"e0417775fcabd3d8858fdc60240912d218f5afb21c", "", ""
|
||||
},
|
||||
"40e1201d75d419627f04c88530a15c9d",
|
||||
"a0f073f3b35e18f96969696b",
|
||||
"2679a43e1d76784034ea1797d5ad2649",
|
||||
"5482405290dd0d2f81c0d942",
|
||||
"0000000000000000"
|
||||
},
|
||||
{
|
||||
/* Server: NewSessionTicket */
|
||||
{
|
||||
"040000a60002a3004abe594b00924e535321cadc96238da09caf9b02fecafdd6"
|
||||
"5e3e418f03e43772cf512ed8066100503b1c08abbbf298a9d138ce821dd12fe1"
|
||||
"710e2137cd12e6a85cd3fd7f73706e7f5dddefb87c1ef83824638464099c9d13"
|
||||
"63e3c64ed2075c16b8ccd8e524a6bbd7a6a6e34ea1579782b15bbe7dfed5c0c0"
|
||||
"d980fb330f9d8ab252ffe7be1277d418b6828ead4dae3b30d448442417ef76af"
|
||||
"0008002e00040002000016","",""
|
||||
"040000c90000001e2fd3992f02000000b2ff099f9676cdff8b0bf8825d000000"
|
||||
"007905a9d28efeef4a47c6f9b06a0cecdb0070d920b898997c75b79636943ed4"
|
||||
"2046a96142bd084a04acfa0c490f452d756dea02c0f927259f1f3231ac0d541a"
|
||||
"769129b740ce38090842b828c27fd729f59737ba98aa7b42e043c5da28f8dca8"
|
||||
"590b2df410d5134fd6c4cacad8b30370602afa35d265bf4d127976bb36dbda6a"
|
||||
"626f0270e20eebc73d6fcae2b1a0da122ee9042f76be56ebf41aa469c3d2c9da"
|
||||
"9197d80008002a00040000040016", "", ""
|
||||
},
|
||||
{
|
||||
"45a6626fa13b66ce2c5b3ef807e299a118296f26a2dd9ec7487a0673e2460d4c"
|
||||
"79f40087dcd014c59c51379c90d26b4e4f9bb2b78f5b6761594f013ff3e4c78d"
|
||||
"836905229eac811c4ef8b2faa89867e9ffc586f7f03c216591aa5e620eac3c62"
|
||||
"dfe60f846036bd7ecc4464b584af184e9644e94ee1d7834dba408a51cbe42480"
|
||||
"04796ed9c558e0f5f96115a6f6ba487e17d16a2e20a3d3a650a9a070fb53d9da"
|
||||
"82864b5621d77650bd0c7972f592aa8546de09b8e46921fab4d876","",""
|
||||
"3680c2b2109d25caa26c3b06eea9fdc5cb31613ba702176596da2e886bf6af93"
|
||||
"507bd68161ad9cb4780653842e1041ecbf0088a65ac4ef438419dd1d95ddd9bd"
|
||||
"2ad4484e7e167d0e6c008448ae58a0418713b6fc6c51e4bb23a537fb75a74f73"
|
||||
"de31fe6aa0bc522515f8b25f8955428b5de5ac06762cec22b0aa78c94385ef8e"
|
||||
"70fa24945b7c1f268510871689bbbbfaf2e7f4a19277024f95f1143ab12a31ec"
|
||||
"63adb128cb390711fd6d06a498df3e98615d8eb102e23353b480efcca5e8e026"
|
||||
"7a6d0fe2441f14c8c9664aefb2cfff6ae9e0442728b6a0940c1e824fda06",
|
||||
"", ""
|
||||
|
||||
},
|
||||
"3381f6b3f94500f16226de440193e858",
|
||||
"4f1d73cc1d465eb30021c41f",
|
||||
"a688ebb5ac826d6f42d45c0cc44b9b7d",
|
||||
"c1cad4425a438b5de714830a",
|
||||
"0000000000000000"
|
||||
},
|
||||
{
|
||||
/* Client: Application Data */
|
||||
{
|
||||
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"
|
||||
"202122232425262728292a2b2c2d2e2f303117","",""
|
||||
"202122232425262728292a2b2c2d2e2f303117", "", ""
|
||||
},
|
||||
{
|
||||
"e306178ad97f74bb64f35eaf3c39846b83aef8472cbc9046749b81a949dfb12c"
|
||||
"fbc65cbabd20ade92c1f944605892ceeb12fde5781d40e2ca080fc921b750b8c"
|
||||
"21bd8d","",""
|
||||
"8c3497da00ae023e53c01b4324b665404c1b49e78fe2bf4d17f6348ae8340551"
|
||||
"e363a0cd05f2179c4fef5ad689b5cae0bae94adc63632e571fb79aa91544c639"
|
||||
"4d28a1", "", ""
|
||||
|
||||
},
|
||||
"eb23a804904b80ba4fe8399e09b1ce42",
|
||||
"efa8c50c06b9c9b8c483e174",
|
||||
"88b96ad686c84be55ace18a59cce5c87",
|
||||
"b99dc58cd5ff5ab082fdad19",
|
||||
"0000000000000000"
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
/* Server: Application Data */
|
||||
{
|
||||
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"
|
||||
"202122232425262728292a2b2c2d2e2f303117","",""
|
||||
"202122232425262728292a2b2c2d2e2f303117", "", ""
|
||||
},
|
||||
{
|
||||
"467d99a807dbf778e6ffd8be52456c70665f890811ef2f3c495d5bbe983feeda"
|
||||
"b0c251dde596bc7e2b135909ec9f9166fb01526c70c7e42b6df52d63b0000222"
|
||||
"cb2047","",""
|
||||
"f65f49fd2df6cd2347c3d30166e3cfddb6308a5906c076112c6a37ff1dbd406b"
|
||||
"5813c0abd734883017a6b2833186b13c14da5d75f33d8760789994e27d82043a"
|
||||
"b88d65", "", ""
|
||||
},
|
||||
"3381f6b3f94500f16226de440193e858",
|
||||
"4f1d73cc1d465eb30021c41f",
|
||||
"a688ebb5ac826d6f42d45c0cc44b9b7d",
|
||||
"c1cad4425a438b5de714830a",
|
||||
"0000000000000001"
|
||||
},
|
||||
{
|
||||
/* Client: CloseNotify */
|
||||
{
|
||||
"010015","",""
|
||||
"010015", "", ""
|
||||
},
|
||||
{
|
||||
"6bdf609107610cff95d70387a67b89e2494f0d","",""
|
||||
"2c2148163d7938a35f6acf2a6606f8cbd1d9f2", "", ""
|
||||
},
|
||||
"eb23a804904b80ba4fe8399e09b1ce42",
|
||||
"efa8c50c06b9c9b8c483e174",
|
||||
"88b96ad686c84be55ace18a59cce5c87",
|
||||
"b99dc58cd5ff5ab082fdad19",
|
||||
"0000000000000001"
|
||||
},
|
||||
{
|
||||
/* Server: CloseNotify */
|
||||
{
|
||||
"010015","",""
|
||||
"010015", "", ""
|
||||
},
|
||||
{
|
||||
"621b7c60d32528b149b36a78c8891a8d2f65ad","",""
|
||||
"f8141ebdb5eda511e0bce639a56ff9ea825a21", "", ""
|
||||
|
||||
},
|
||||
"3381f6b3f94500f16226de440193e858",
|
||||
"4f1d73cc1d465eb30021c41f",
|
||||
"a688ebb5ac826d6f42d45c0cc44b9b7d",
|
||||
"c1cad4425a438b5de714830a",
|
||||
"0000000000000002"
|
||||
}
|
||||
};
|
||||
|
||||
+42
-48
@@ -26,27 +26,21 @@
|
||||
#define IVLEN 12
|
||||
#define KEYLEN 16
|
||||
|
||||
/* The following are self-generated test vectors. This gives us very little
|
||||
* confidence that we've got the implementation right, but at least tells us
|
||||
* if we accidentally break something in the future. Until we can get some
|
||||
* other source of test vectors this is all we've got.
|
||||
* TODO(TLS1.3): As and when official vectors become available we should use
|
||||
* those, e.g. see
|
||||
* https://www.ietf.org/id/draft-thomson-tls-tls13-vectors-00.txt, however at
|
||||
* the time of writing these are not suitable because they are based on
|
||||
* draft -16, which works differently to the draft -20 vectors below.
|
||||
/*
|
||||
* Based on the test vectors availble in:
|
||||
* https://tools.ietf.org/html/draft-ietf-tls-tls13-vectors-06
|
||||
*/
|
||||
|
||||
static unsigned char hs_start_hash[] = {
|
||||
0xec, 0x14, 0x7a, 0x06, 0xde, 0xa3, 0xc8, 0x84, 0x6c, 0x02, 0xb2, 0x23, 0x8e,
|
||||
0x41, 0xbd, 0xdc, 0x9d, 0x89, 0xf9, 0xae, 0xa1, 0x7b, 0x5e, 0xfd, 0x4d, 0x74,
|
||||
0x82, 0xaf, 0x75, 0x88, 0x1c, 0x0a
|
||||
0xc6, 0xc9, 0x18, 0xad, 0x2f, 0x41, 0x99, 0xd5, 0x59, 0x8e, 0xaf, 0x01, 0x16,
|
||||
0xcb, 0x7a, 0x5c, 0x2c, 0x14, 0xcb, 0x54, 0x78, 0x12, 0x18, 0x88, 0x8d, 0xb7,
|
||||
0x03, 0x0d, 0xd5, 0x0d, 0x5e, 0x6d
|
||||
};
|
||||
|
||||
static unsigned char hs_full_hash[] = {
|
||||
0x75, 0x1a, 0x3d, 0x4a, 0x14, 0xdf, 0xab, 0xeb, 0x68, 0xe9, 0x2c, 0xa5, 0x91,
|
||||
0x8e, 0x24, 0x08, 0xb9, 0xbc, 0xb0, 0x74, 0x89, 0x82, 0xec, 0x9c, 0x32, 0x30,
|
||||
0xac, 0x30, 0xbb, 0xeb, 0x23, 0xe2,
|
||||
0xf8, 0xc1, 0x9e, 0x8c, 0x77, 0xc0, 0x38, 0x79, 0xbb, 0xc8, 0xeb, 0x6d, 0x56,
|
||||
0xe0, 0x0d, 0xd5, 0xd8, 0x6e, 0xf5, 0x59, 0x27, 0xee, 0xfc, 0x08, 0xe1, 0xb0,
|
||||
0x02, 0xb6, 0xec, 0xe0, 0x5d, 0xbf
|
||||
};
|
||||
|
||||
static unsigned char early_secret[] = {
|
||||
@@ -56,89 +50,89 @@ static unsigned char early_secret[] = {
|
||||
};
|
||||
|
||||
static unsigned char ecdhe_secret[] = {
|
||||
0xe7, 0xb8, 0xfe, 0xf8, 0x90, 0x3b, 0x52, 0x0c, 0xb9, 0xa1, 0x89, 0x71, 0xb6,
|
||||
0x9d, 0xd4, 0x5d, 0xca, 0x53, 0xce, 0x2f, 0x12, 0xbf, 0x3b, 0xef, 0x93, 0x15,
|
||||
0xe3, 0x12, 0x71, 0xdf, 0x4b, 0x40
|
||||
0x81, 0x51, 0xd1, 0x46, 0x4c, 0x1b, 0x55, 0x53, 0x36, 0x23, 0xb9, 0xc2, 0x24,
|
||||
0x6a, 0x6a, 0x0e, 0x6e, 0x7e, 0x18, 0x50, 0x63, 0xe1, 0x4a, 0xfd, 0xaf, 0xf0,
|
||||
0xb6, 0xe1, 0xc6, 0x1a, 0x86, 0x42
|
||||
};
|
||||
|
||||
static unsigned char handshake_secret[] = {
|
||||
0xf5, 0x51, 0xd0, 0xbd, 0x9e, 0x6a, 0xc0, 0x95, 0x5f, 0x8e, 0xae, 0xb6, 0x28,
|
||||
0x2e, 0x8d, 0x9e, 0xf3, 0xd4, 0x08, 0x57, 0x81, 0xbc, 0x9d, 0x80, 0x91, 0x8a,
|
||||
0x81, 0x33, 0x86, 0x58, 0x7f, 0x46
|
||||
0x5b, 0x4f, 0x96, 0x5d, 0xf0, 0x3c, 0x68, 0x2c, 0x46, 0xe6, 0xee, 0x86, 0xc3,
|
||||
0x11, 0x63, 0x66, 0x15, 0xa1, 0xd2, 0xbb, 0xb2, 0x43, 0x45, 0xc2, 0x52, 0x05,
|
||||
0x95, 0x3c, 0x87, 0x9e, 0x8d, 0x06
|
||||
};
|
||||
|
||||
static const char *client_hts_label = "c hs traffic";
|
||||
|
||||
static unsigned char client_hts[] = {
|
||||
0x61, 0x7b, 0x35, 0x07, 0x6b, 0x9d, 0x0e, 0x08, 0xcf, 0x73, 0x1d, 0x94, 0xa8,
|
||||
0x66, 0x14, 0x78, 0x41, 0x09, 0xef, 0x25, 0x55, 0x51, 0x92, 0x1d, 0xd4, 0x6e,
|
||||
0x04, 0x01, 0x35, 0xcf, 0x46, 0xab
|
||||
0xe2, 0xe2, 0x32, 0x07, 0xbd, 0x93, 0xfb, 0x7f, 0xe4, 0xfc, 0x2e, 0x29, 0x7a,
|
||||
0xfe, 0xab, 0x16, 0x0e, 0x52, 0x2b, 0x5a, 0xb7, 0x5d, 0x64, 0xa8, 0x6e, 0x75,
|
||||
0xbc, 0xac, 0x3f, 0x3e, 0x51, 0x03
|
||||
};
|
||||
|
||||
static unsigned char client_hts_key[] = {
|
||||
0x62, 0xd0, 0xdd, 0x00, 0xf6, 0x96, 0x19, 0xd3, 0xb8, 0x19, 0x3a, 0xb4, 0xa0,
|
||||
0x95, 0x85, 0xa7
|
||||
0x26, 0x79, 0xa4, 0x3e, 0x1d, 0x76, 0x78, 0x40, 0x34, 0xea, 0x17, 0x97, 0xd5,
|
||||
0xad, 0x26, 0x49
|
||||
};
|
||||
|
||||
static unsigned char client_hts_iv[] = {
|
||||
0xff, 0xf7, 0x5d, 0xf5, 0xad, 0x35, 0xd5, 0xcb, 0x3c, 0x53, 0xf3, 0xa9
|
||||
0x54, 0x82, 0x40, 0x52, 0x90, 0xdd, 0x0d, 0x2f, 0x81, 0xc0, 0xd9, 0x42
|
||||
};
|
||||
|
||||
static const char *server_hts_label = "s hs traffic";
|
||||
|
||||
static unsigned char server_hts[] = {
|
||||
0xfc, 0xf7, 0xdf, 0xe6, 0x4f, 0xa2, 0xc0, 0x4f, 0x62, 0x35, 0x38, 0x7f, 0x43,
|
||||
0x4e, 0x01, 0x42, 0x23, 0x36, 0xd9, 0xc0, 0x39, 0xde, 0x68, 0x47, 0xa0, 0xb9,
|
||||
0xdd, 0xcf, 0x29, 0xa8, 0x87, 0x59
|
||||
0x3b, 0x7a, 0x83, 0x9c, 0x23, 0x9e, 0xf2, 0xbf, 0x0b, 0x73, 0x05, 0xa0, 0xe0,
|
||||
0xc4, 0xe5, 0xa8, 0xc6, 0xc6, 0x93, 0x30, 0xa7, 0x53, 0xb3, 0x08, 0xf5, 0xe3,
|
||||
0xa8, 0x3a, 0xa2, 0xef, 0x69, 0x79
|
||||
};
|
||||
|
||||
static unsigned char server_hts_key[] = {
|
||||
0x04, 0x67, 0xf3, 0x16, 0xa8, 0x05, 0xb8, 0xc4, 0x97, 0xee, 0x67, 0x04, 0x7b,
|
||||
0xbc, 0xbc, 0x54
|
||||
0xc6, 0x6c, 0xb1, 0xae, 0xc5, 0x19, 0xdf, 0x44, 0xc9, 0x1e, 0x10, 0x99, 0x55,
|
||||
0x11, 0xac, 0x8b
|
||||
};
|
||||
|
||||
static unsigned char server_hts_iv[] = {
|
||||
0xde, 0x83, 0xa7, 0x3e, 0x9d, 0x81, 0x4b, 0x04, 0xc4, 0x8b, 0x78, 0x09
|
||||
0xf7, 0xf6, 0x88, 0x4c, 0x49, 0x81, 0x71, 0x6c, 0x2d, 0x0d, 0x29, 0xa4
|
||||
};
|
||||
|
||||
static unsigned char master_secret[] = {
|
||||
0x34, 0x83, 0x83, 0x84, 0x67, 0x12, 0xe7, 0xff, 0x24, 0xe8, 0x6e, 0x70, 0x56,
|
||||
0x95, 0x16, 0x71, 0x43, 0x7f, 0x19, 0xd7, 0x85, 0x06, 0x9d, 0x75, 0x70, 0x49,
|
||||
0x6e, 0x6c, 0xa4, 0x81, 0xf0, 0xb8
|
||||
0x5c, 0x79, 0xd1, 0x69, 0x42, 0x4e, 0x26, 0x2b, 0x56, 0x32, 0x03, 0x62, 0x7b,
|
||||
0xe4, 0xeb, 0x51, 0x03, 0x3f, 0x58, 0x8c, 0x43, 0xc9, 0xce, 0x03, 0x73, 0x37,
|
||||
0x2d, 0xbc, 0xbc, 0x01, 0x85, 0xa7
|
||||
};
|
||||
|
||||
static const char *client_ats_label = "c ap traffic";
|
||||
|
||||
static unsigned char client_ats[] = {
|
||||
0xc1, 0x4a, 0x6d, 0x79, 0x76, 0xd8, 0x10, 0x2b, 0x5a, 0x0c, 0x99, 0x51, 0x49,
|
||||
0x3f, 0xee, 0x87, 0xdc, 0xaf, 0xf8, 0x2c, 0x24, 0xca, 0xb2, 0x14, 0xe8, 0xbe,
|
||||
0x71, 0xa8, 0x20, 0x6d, 0xbd, 0xa5
|
||||
0xe2, 0xf0, 0xdb, 0x6a, 0x82, 0xe8, 0x82, 0x80, 0xfc, 0x26, 0xf7, 0x3c, 0x89,
|
||||
0x85, 0x4e, 0xe8, 0x61, 0x5e, 0x25, 0xdf, 0x28, 0xb2, 0x20, 0x79, 0x62, 0xfa,
|
||||
0x78, 0x22, 0x26, 0xb2, 0x36, 0x26
|
||||
};
|
||||
|
||||
static unsigned char client_ats_key[] = {
|
||||
0xcc, 0x9f, 0x5f, 0x98, 0x0b, 0x5f, 0x10, 0x30, 0x6c, 0xba, 0xd7, 0xbe, 0x98,
|
||||
0xd7, 0x57, 0x2e
|
||||
0x88, 0xb9, 0x6a, 0xd6, 0x86, 0xc8, 0x4b, 0xe5, 0x5a, 0xce, 0x18, 0xa5, 0x9c,
|
||||
0xce, 0x5c, 0x87
|
||||
};
|
||||
|
||||
static unsigned char client_ats_iv[] = {
|
||||
0xb8, 0x09, 0x29, 0xe8, 0xd0, 0x2c, 0x70, 0xf6, 0x11, 0x62, 0xed, 0x6b
|
||||
0xb9, 0x9d, 0xc5, 0x8c, 0xd5, 0xff, 0x5a, 0xb0, 0x82, 0xfd, 0xad, 0x19
|
||||
};
|
||||
|
||||
static const char *server_ats_label = "s ap traffic";
|
||||
|
||||
static unsigned char server_ats[] = {
|
||||
0x2c, 0x90, 0x77, 0x38, 0xd3, 0xf8, 0x37, 0x02, 0xd1, 0xe4, 0x59, 0x8f, 0x48,
|
||||
0x48, 0x53, 0x1d, 0x9f, 0x93, 0x65, 0x49, 0x1b, 0x9f, 0x7f, 0x52, 0xc8, 0x22,
|
||||
0x29, 0x0d, 0x4c, 0x23, 0x21, 0x92
|
||||
0x5b, 0x73, 0xb1, 0x08, 0xd9, 0xac, 0x1b, 0x9b, 0x0c, 0x82, 0x48, 0xca, 0x39,
|
||||
0x26, 0xec, 0x6e, 0x7b, 0xc4, 0x7e, 0x41, 0x17, 0x06, 0x96, 0x39, 0x87, 0xec,
|
||||
0x11, 0x43, 0x5d, 0x30, 0x57, 0x19
|
||||
};
|
||||
|
||||
static unsigned char server_ats_key[] = {
|
||||
0x0c, 0xb2, 0x95, 0x62, 0xd8, 0xd8, 0x8f, 0x48, 0xb0, 0x2c, 0xbf, 0xbe, 0xd7,
|
||||
0xe6, 0x2b, 0xb3
|
||||
0xa6, 0x88, 0xeb, 0xb5, 0xac, 0x82, 0x6d, 0x6f, 0x42, 0xd4, 0x5c, 0x0c, 0xc4,
|
||||
0x4b, 0x9b, 0x7d
|
||||
};
|
||||
|
||||
static unsigned char server_ats_iv[] = {
|
||||
0x0d, 0xb2, 0x8f, 0x98, 0x85, 0x86, 0xa1, 0xb7, 0xe4, 0xd5, 0xc6, 0x9c
|
||||
0xc1, 0xca, 0xd4, 0x42, 0x5a, 0x43, 0x8b, 0x5d, 0xe7, 0x14, 0x83, 0x0a
|
||||
};
|
||||
|
||||
/* Mocked out implementations of various functions */
|
||||
|
||||
Reference in New Issue
Block a user