upstream: adapt to bignum1 API removal and bignum2 API change
OpenBSD-Regress-ID: cea6ff270f3d560de86b355a87a2c95b55a5ca63
This commit is contained in:
parent
beab553f0a
commit
7d69aae64c
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: test_sshbuf_getput_crypto.c,v 1.1 2014/04/30 05:32:00 djm Exp $ */
|
/* $OpenBSD: test_sshbuf_getput_crypto.c,v 1.2 2019/01/21 12:29:35 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Regress test for sshbuf.h buffer API
|
* Regress test for sshbuf.h buffer API
|
||||||
*
|
*
|
||||||
|
@ -33,7 +33,6 @@ sshbuf_getput_crypto_tests(void)
|
||||||
{
|
{
|
||||||
struct sshbuf *p1;
|
struct sshbuf *p1;
|
||||||
BIGNUM *bn, *bn2;
|
BIGNUM *bn, *bn2;
|
||||||
/* This one has num_bits != num_bytes * 8 to test bignum1 encoding */
|
|
||||||
const char *hexbn1 = "0102030405060708090a0b0c0d0e0f10";
|
const char *hexbn1 = "0102030405060708090a0b0c0d0e0f10";
|
||||||
/* This one has MSB set to test bignum2 encoding negative-avoidance */
|
/* This one has MSB set to test bignum2 encoding negative-avoidance */
|
||||||
const char *hexbn2 = "f0e0d0c0b0a0908070605040302010007fff11";
|
const char *hexbn2 = "f0e0d0c0b0a0908070605040302010007fff11";
|
||||||
|
@ -77,54 +76,6 @@ sshbuf_getput_crypto_tests(void)
|
||||||
ASSERT_INT_GT(BN_hex2bn(&bnn, b), 0); \
|
ASSERT_INT_GT(BN_hex2bn(&bnn, b), 0); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
TEST_START("sshbuf_put_bignum1");
|
|
||||||
MKBN(hexbn1, bn);
|
|
||||||
p1 = sshbuf_new();
|
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put_bignum1(p1, bn), 0);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn1) + 2);
|
|
||||||
ASSERT_U16_EQ(PEEK_U16(sshbuf_ptr(p1)), (u_int16_t)BN_num_bits(bn));
|
|
||||||
ASSERT_MEM_EQ(sshbuf_ptr(p1) + 2, expbn1, sizeof(expbn1));
|
|
||||||
BN_free(bn);
|
|
||||||
sshbuf_free(p1);
|
|
||||||
TEST_DONE();
|
|
||||||
|
|
||||||
TEST_START("sshbuf_put_bignum1 limited");
|
|
||||||
MKBN(hexbn1, bn);
|
|
||||||
p1 = sshbuf_new();
|
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
|
||||||
ASSERT_INT_EQ(sshbuf_set_max_size(p1, sizeof(expbn1) + 1), 0);
|
|
||||||
r = sshbuf_put_bignum1(p1, bn);
|
|
||||||
ASSERT_INT_EQ(r, SSH_ERR_NO_BUFFER_SPACE);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
|
|
||||||
BN_free(bn);
|
|
||||||
sshbuf_free(p1);
|
|
||||||
TEST_DONE();
|
|
||||||
|
|
||||||
TEST_START("sshbuf_put_bignum1 bn2");
|
|
||||||
MKBN(hexbn2, bn);
|
|
||||||
p1 = sshbuf_new();
|
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put_bignum1(p1, bn), 0);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn2) + 2);
|
|
||||||
ASSERT_U16_EQ(PEEK_U16(sshbuf_ptr(p1)), (u_int16_t)BN_num_bits(bn));
|
|
||||||
ASSERT_MEM_EQ(sshbuf_ptr(p1) + 2, expbn2, sizeof(expbn2));
|
|
||||||
BN_free(bn);
|
|
||||||
sshbuf_free(p1);
|
|
||||||
TEST_DONE();
|
|
||||||
|
|
||||||
TEST_START("sshbuf_put_bignum1 bn2 limited");
|
|
||||||
MKBN(hexbn2, bn);
|
|
||||||
p1 = sshbuf_new();
|
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
|
||||||
ASSERT_INT_EQ(sshbuf_set_max_size(p1, sizeof(expbn1) + 1), 0);
|
|
||||||
r = sshbuf_put_bignum1(p1, bn);
|
|
||||||
ASSERT_INT_EQ(r, SSH_ERR_NO_BUFFER_SPACE);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
|
|
||||||
BN_free(bn);
|
|
||||||
sshbuf_free(p1);
|
|
||||||
TEST_DONE();
|
|
||||||
|
|
||||||
TEST_START("sshbuf_put_bignum2");
|
TEST_START("sshbuf_put_bignum2");
|
||||||
MKBN(hexbn1, bn);
|
MKBN(hexbn1, bn);
|
||||||
p1 = sshbuf_new();
|
p1 = sshbuf_new();
|
||||||
|
@ -174,88 +125,6 @@ sshbuf_getput_crypto_tests(void)
|
||||||
sshbuf_free(p1);
|
sshbuf_free(p1);
|
||||||
TEST_DONE();
|
TEST_DONE();
|
||||||
|
|
||||||
TEST_START("sshbuf_get_bignum1");
|
|
||||||
MKBN(hexbn1, bn);
|
|
||||||
p1 = sshbuf_new();
|
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put_u16(p1, BN_num_bits(bn)), 0);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1)), 0);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn1));
|
|
||||||
ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0);
|
|
||||||
bn2 = BN_new();
|
|
||||||
ASSERT_INT_EQ(sshbuf_get_bignum1(p1, bn2), 0);
|
|
||||||
ASSERT_BIGNUM_EQ(bn, bn2);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
|
|
||||||
BN_free(bn);
|
|
||||||
BN_free(bn2);
|
|
||||||
sshbuf_free(p1);
|
|
||||||
TEST_DONE();
|
|
||||||
|
|
||||||
TEST_START("sshbuf_get_bignum1 truncated");
|
|
||||||
MKBN(hexbn1, bn);
|
|
||||||
p1 = sshbuf_new();
|
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put_u16(p1, BN_num_bits(bn)), 0);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1) - 1), 0);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn1) - 1);
|
|
||||||
bn2 = BN_new();
|
|
||||||
r = sshbuf_get_bignum1(p1, bn2);
|
|
||||||
ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn1) - 1);
|
|
||||||
BN_free(bn);
|
|
||||||
BN_free(bn2);
|
|
||||||
sshbuf_free(p1);
|
|
||||||
TEST_DONE();
|
|
||||||
|
|
||||||
TEST_START("sshbuf_get_bignum1 giant");
|
|
||||||
MKBN(hexbn1, bn);
|
|
||||||
p1 = sshbuf_new();
|
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xffff), 0);
|
|
||||||
ASSERT_INT_EQ(sshbuf_reserve(p1, (0xffff + 7) / 8, NULL), 0);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + ((0xffff + 7) / 8));
|
|
||||||
bn2 = BN_new();
|
|
||||||
r = sshbuf_get_bignum1(p1, bn2);
|
|
||||||
ASSERT_INT_EQ(r, SSH_ERR_BIGNUM_TOO_LARGE);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + ((0xffff + 7) / 8));
|
|
||||||
BN_free(bn);
|
|
||||||
BN_free(bn2);
|
|
||||||
sshbuf_free(p1);
|
|
||||||
TEST_DONE();
|
|
||||||
|
|
||||||
TEST_START("sshbuf_get_bignum1 bn2");
|
|
||||||
MKBN(hexbn2, bn);
|
|
||||||
p1 = sshbuf_new();
|
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put_u16(p1, BN_num_bits(bn)), 0);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2)), 0);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn2));
|
|
||||||
ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0);
|
|
||||||
bn2 = BN_new();
|
|
||||||
ASSERT_INT_EQ(sshbuf_get_bignum1(p1, bn2), 0);
|
|
||||||
ASSERT_BIGNUM_EQ(bn, bn2);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
|
|
||||||
BN_free(bn);
|
|
||||||
BN_free(bn2);
|
|
||||||
sshbuf_free(p1);
|
|
||||||
TEST_DONE();
|
|
||||||
|
|
||||||
TEST_START("sshbuf_get_bignum1 bn2 truncated");
|
|
||||||
MKBN(hexbn2, bn);
|
|
||||||
p1 = sshbuf_new();
|
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put_u16(p1, BN_num_bits(bn)), 0);
|
|
||||||
ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2) - 1), 0);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn2) - 1);
|
|
||||||
bn2 = BN_new();
|
|
||||||
r = sshbuf_get_bignum1(p1, bn2);
|
|
||||||
ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
|
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn2) - 1);
|
|
||||||
BN_free(bn);
|
|
||||||
BN_free(bn2);
|
|
||||||
sshbuf_free(p1);
|
|
||||||
TEST_DONE();
|
|
||||||
|
|
||||||
TEST_START("sshbuf_get_bignum2");
|
TEST_START("sshbuf_get_bignum2");
|
||||||
MKBN(hexbn1, bn);
|
MKBN(hexbn1, bn);
|
||||||
p1 = sshbuf_new();
|
p1 = sshbuf_new();
|
||||||
|
@ -264,8 +133,8 @@ sshbuf_getput_crypto_tests(void)
|
||||||
ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1)), 0);
|
ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1)), 0);
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4 + sizeof(expbn1));
|
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4 + sizeof(expbn1));
|
||||||
ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0);
|
ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0);
|
||||||
bn2 = BN_new();
|
bn2 = NULL;
|
||||||
ASSERT_INT_EQ(sshbuf_get_bignum2(p1, bn2), 0);
|
ASSERT_INT_EQ(sshbuf_get_bignum2(p1, &bn2), 0);
|
||||||
ASSERT_BIGNUM_EQ(bn, bn2);
|
ASSERT_BIGNUM_EQ(bn, bn2);
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
|
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
|
||||||
BN_free(bn);
|
BN_free(bn);
|
||||||
|
@ -279,8 +148,8 @@ sshbuf_getput_crypto_tests(void)
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
ASSERT_PTR_NE(p1, NULL);
|
||||||
ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn)), 0);
|
ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn)), 0);
|
||||||
ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1) - 1), 0);
|
ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1) - 1), 0);
|
||||||
bn2 = BN_new();
|
bn2 = NULL;
|
||||||
r = sshbuf_get_bignum2(p1, bn2);
|
r = sshbuf_get_bignum2(p1, &bn2);
|
||||||
ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
|
ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn1) + 3);
|
ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn1) + 3);
|
||||||
BN_free(bn);
|
BN_free(bn);
|
||||||
|
@ -294,8 +163,8 @@ sshbuf_getput_crypto_tests(void)
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
ASSERT_PTR_NE(p1, NULL);
|
||||||
ASSERT_INT_EQ(sshbuf_put_u32(p1, 65536), 0);
|
ASSERT_INT_EQ(sshbuf_put_u32(p1, 65536), 0);
|
||||||
ASSERT_INT_EQ(sshbuf_reserve(p1, 65536, NULL), 0);
|
ASSERT_INT_EQ(sshbuf_reserve(p1, 65536, NULL), 0);
|
||||||
bn2 = BN_new();
|
bn2 = NULL;
|
||||||
r = sshbuf_get_bignum2(p1, bn2);
|
r = sshbuf_get_bignum2(p1, &bn2);
|
||||||
ASSERT_INT_EQ(r, SSH_ERR_BIGNUM_TOO_LARGE);
|
ASSERT_INT_EQ(r, SSH_ERR_BIGNUM_TOO_LARGE);
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 65536 + 4);
|
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 65536 + 4);
|
||||||
BN_free(bn);
|
BN_free(bn);
|
||||||
|
@ -312,8 +181,8 @@ sshbuf_getput_crypto_tests(void)
|
||||||
ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2)), 0);
|
ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2)), 0);
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4 + 1 + sizeof(expbn2));
|
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4 + 1 + sizeof(expbn2));
|
||||||
ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0);
|
ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0);
|
||||||
bn2 = BN_new();
|
bn2 = NULL;
|
||||||
ASSERT_INT_EQ(sshbuf_get_bignum2(p1, bn2), 0);
|
ASSERT_INT_EQ(sshbuf_get_bignum2(p1, &bn2), 0);
|
||||||
ASSERT_BIGNUM_EQ(bn, bn2);
|
ASSERT_BIGNUM_EQ(bn, bn2);
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
|
ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
|
||||||
BN_free(bn);
|
BN_free(bn);
|
||||||
|
@ -328,8 +197,8 @@ sshbuf_getput_crypto_tests(void)
|
||||||
ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn) + 1), 0);
|
ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn) + 1), 0);
|
||||||
ASSERT_INT_EQ(sshbuf_put_u8(p1, 0x00), 0);
|
ASSERT_INT_EQ(sshbuf_put_u8(p1, 0x00), 0);
|
||||||
ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2) - 1), 0);
|
ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2) - 1), 0);
|
||||||
bn2 = BN_new();
|
bn2 = NULL;
|
||||||
r = sshbuf_get_bignum2(p1, bn2);
|
r = sshbuf_get_bignum2(p1, &bn2);
|
||||||
ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
|
ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn2) + 1 + 4 - 1);
|
ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn2) + 1 + 4 - 1);
|
||||||
BN_free(bn);
|
BN_free(bn);
|
||||||
|
@ -343,8 +212,8 @@ sshbuf_getput_crypto_tests(void)
|
||||||
ASSERT_PTR_NE(p1, NULL);
|
ASSERT_PTR_NE(p1, NULL);
|
||||||
ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn)), 0);
|
ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn)), 0);
|
||||||
ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2)), 0);
|
ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2)), 0);
|
||||||
bn2 = BN_new();
|
bn2 = NULL;
|
||||||
r = sshbuf_get_bignum2(p1, bn2);
|
r = sshbuf_get_bignum2(p1, &bn2);
|
||||||
ASSERT_INT_EQ(r, SSH_ERR_BIGNUM_IS_NEGATIVE);
|
ASSERT_INT_EQ(r, SSH_ERR_BIGNUM_IS_NEGATIVE);
|
||||||
ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn2) + 4);
|
ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn2) + 4);
|
||||||
BN_free(bn);
|
BN_free(bn);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $OpenBSD: test_sshbuf_getput_fuzz.c,v 1.3 2018/10/17 23:28:05 djm Exp $ */
|
/* $OpenBSD: test_sshbuf_getput_fuzz.c,v 1.4 2019/01/21 12:29:35 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Regress test for sshbuf.h buffer API
|
* Regress test for sshbuf.h buffer API
|
||||||
*
|
*
|
||||||
|
@ -54,11 +54,8 @@ attempt_parse_blob(u_char *blob, size_t len)
|
||||||
bzero(s, l);
|
bzero(s, l);
|
||||||
free(s);
|
free(s);
|
||||||
}
|
}
|
||||||
bn = BN_new();
|
bn = NULL;
|
||||||
sshbuf_get_bignum1(p1, bn);
|
sshbuf_get_bignum2(p1, &bn);
|
||||||
BN_clear_free(bn);
|
|
||||||
bn = BN_new();
|
|
||||||
sshbuf_get_bignum2(p1, bn);
|
|
||||||
BN_clear_free(bn);
|
BN_clear_free(bn);
|
||||||
#if defined(OPENSSL_HAS_ECC) && defined(OPENSSL_HAS_NISTP256)
|
#if defined(OPENSSL_HAS_ECC) && defined(OPENSSL_HAS_NISTP256)
|
||||||
eck = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
|
eck = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
|
||||||
|
@ -92,10 +89,6 @@ sshbuf_getput_fuzz_tests(void)
|
||||||
/* string */
|
/* string */
|
||||||
0x00, 0x00, 0x00, 0x09,
|
0x00, 0x00, 0x00, 0x09,
|
||||||
'O', ' ', 'G', 'o', 'r', 'g', 'o', 'n', '!',
|
'O', ' ', 'G', 'o', 'r', 'g', 'o', 'n', '!',
|
||||||
/* bignum1 */
|
|
||||||
0x79,
|
|
||||||
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
|
|
||||||
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
|
|
||||||
/* bignum2 */
|
/* bignum2 */
|
||||||
0x00, 0x00, 0x00, 0x14,
|
0x00, 0x00, 0x00, 0x14,
|
||||||
0x00,
|
0x00,
|
||||||
|
|
Loading…
Reference in New Issue