Merge elementsproject/secp256k1-zkp#316: Upstream PRs 1533
e73f6f8fd9tests: refactor: drop `secp256k1_` prefix from testrand.h functions (Sebastian Falbesoner)0ee7453a99tests: refactor: add `testutil_` prefix to testutil.h functions (Sebastian Falbesoner)0c6bc76dcdtests: refactor: move `random_` helpers from tests.c to testutil.h (Sebastian Falbesoner)0fef8479betests: refactor: rename `random_field_element_magnitude` -> `random_fe_magnitude` (Sebastian Falbesoner)59db007f0ftests: refactor: rename `random_group_element_...` -> `random_ge_...` (Sebastian Falbesoner) Pull request description: ACKs for top commit: jonasnick: ACK513e550e8aTree-SHA512: 25d2d077ae55f0f6887d64b299f3fe6e942b4c709853a743ca5d68514f718990fd7ef1fb3dbcd4343977fc1c7c6af73a091c05038a17767f9823d2d89ae4d476
This commit is contained in:
21 files changed
+578
-581
No files matched your search
@@ -53,7 +53,7 @@ static void random_scalar_order(secp256k1_scalar *num) {
|
||||
do {
|
||||
unsigned char b32[32];
|
||||
int overflow = 0;
|
||||
secp256k1_testrand256(b32);
|
||||
testrand256(b32);
|
||||
secp256k1_scalar_set_b32(num, b32, &overflow);
|
||||
if (overflow || secp256k1_scalar_is_zero(num)) {
|
||||
continue;
|
||||
|
||||
@@ -208,20 +208,20 @@ static void test_serialize_two_points(void) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < COUNT; i++) {
|
||||
random_group_element_test(&X);
|
||||
random_group_element_test(&R);
|
||||
testutil_random_ge_test(&X);
|
||||
testutil_random_ge_test(&R);
|
||||
test_serialize_two_points_roundtrip(&X, &R);
|
||||
}
|
||||
|
||||
for (i = 0; i < COUNT; i++) {
|
||||
random_group_element_test(&X);
|
||||
testutil_random_ge_test(&X);
|
||||
secp256k1_ge_set_infinity(&R);
|
||||
test_serialize_two_points_roundtrip(&X, &R);
|
||||
}
|
||||
|
||||
for (i = 0; i < COUNT; i++) {
|
||||
secp256k1_ge_set_infinity(&X);
|
||||
random_group_element_test(&R);
|
||||
testutil_random_ge_test(&R);
|
||||
test_serialize_two_points_roundtrip(&X, &R);
|
||||
}
|
||||
|
||||
@@ -233,12 +233,12 @@ static void test_serialize_two_points(void) {
|
||||
{
|
||||
secp256k1_ge X_tmp, R_tmp;
|
||||
unsigned char buf[65];
|
||||
random_group_element_test(&X);
|
||||
random_group_element_test(&R);
|
||||
testutil_random_ge_test(&X);
|
||||
testutil_random_ge_test(&R);
|
||||
secp256k1_bppp_serialize_points(buf, &X, &R);
|
||||
|
||||
/* buf is valid if 0 <= buf[0] < 4. */
|
||||
buf[0] = (unsigned char)secp256k1_testrandi64(4, 255);
|
||||
buf[0] = (unsigned char)testrandi64(4, 255);
|
||||
CHECK(!secp256k1_bppp_parse_one_of_points(&X_tmp, buf, 0));
|
||||
CHECK(!secp256k1_bppp_parse_one_of_points(&R_tmp, buf, 0));
|
||||
}
|
||||
@@ -247,8 +247,8 @@ static void test_serialize_two_points(void) {
|
||||
secp256k1_ge X_tmp, R_tmp;
|
||||
unsigned char buf[65];
|
||||
int expect;
|
||||
random_group_element_test(&X);
|
||||
random_group_element_test(&R);
|
||||
testutil_random_ge_test(&X);
|
||||
testutil_random_ge_test(&R);
|
||||
secp256k1_bppp_serialize_points(buf, &X, &R);
|
||||
memset(&buf[1], 0, 32);
|
||||
if ((buf[0] & 2) == 0) {
|
||||
@@ -446,12 +446,12 @@ static void norm_arg_verify_zero_len(void) {
|
||||
secp256k1_bppp_generators *gs = secp256k1_bppp_generators_create(CTX, n_vec_len + c_vec_len);
|
||||
size_t plen = sizeof(proof);
|
||||
|
||||
random_scalar_order(&rho);
|
||||
testutil_random_scalar_order(&rho);
|
||||
secp256k1_scalar_sqr(&mu, &rho);
|
||||
|
||||
random_scalar_order(&n_vec[0]);
|
||||
random_scalar_order(&c_vec[0]);
|
||||
random_scalar_order(&l_vec[0]);
|
||||
testutil_random_scalar_order(&n_vec[0]);
|
||||
testutil_random_scalar_order(&c_vec[0]);
|
||||
testutil_random_scalar_order(&l_vec[0]);
|
||||
CHECK(secp256k1_bppp_commit(CTX, scratch, &commit, gs, n_vec, n_vec_len, l_vec, c_vec_len, c_vec, c_vec_len, &mu));
|
||||
CHECK(secp256k1_norm_arg_prove(scratch, proof, &plen, &rho, gs, n_vec, n_vec_len, l_vec, c_vec_len, c_vec, c_vec_len, &commit));
|
||||
CHECK(secp256k1_norm_arg_verify(scratch, proof, plen, &rho, gs, n_vec_len, c_vec, c_vec_len, &commit));
|
||||
@@ -472,16 +472,16 @@ static void norm_arg_test(unsigned int n, unsigned int m) {
|
||||
secp256k1_scratch *scratch = secp256k1_scratch_space_create(CTX, 1000*1000); /* shouldn't need much */
|
||||
unsigned char proof[1000];
|
||||
plen = 1000;
|
||||
random_scalar_order(&rho);
|
||||
testutil_random_scalar_order(&rho);
|
||||
secp256k1_scalar_sqr(&mu, &rho);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
random_scalar_order(&n_vec[i]);
|
||||
testutil_random_scalar_order(&n_vec[i]);
|
||||
}
|
||||
|
||||
for (i = 0; i < m; i++) {
|
||||
random_scalar_order(&l_vec[i]);
|
||||
random_scalar_order(&c_vec[i]);
|
||||
testutil_random_scalar_order(&l_vec[i]);
|
||||
testutil_random_scalar_order(&c_vec[i]);
|
||||
}
|
||||
|
||||
res = secp256k1_bppp_commit(CTX, scratch, &commit, gs, n_vec, n, l_vec, m, c_vec, m, &mu);
|
||||
|
||||
@@ -56,7 +56,7 @@ static void test_ecdh_generator_basepoint(void) {
|
||||
size_t point_ser_len = sizeof(point_ser);
|
||||
secp256k1_scalar s;
|
||||
|
||||
random_scalar_order(&s);
|
||||
testutil_random_scalar_order(&s);
|
||||
secp256k1_scalar_get_b32(s_b32, &s);
|
||||
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &point[0], s_one) == 1);
|
||||
@@ -95,7 +95,7 @@ static void test_bad_scalar(void) {
|
||||
secp256k1_pubkey point;
|
||||
|
||||
/* Create random point */
|
||||
random_scalar_order(&rand);
|
||||
testutil_random_scalar_order(&rand);
|
||||
secp256k1_scalar_get_b32(s_rand, &rand);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &point, s_rand) == 1);
|
||||
|
||||
@@ -127,7 +127,7 @@ static void test_result_basepoint(void) {
|
||||
CHECK(secp256k1_ecdh(CTX, out_base, &point, s_one, NULL, NULL) == 1);
|
||||
|
||||
for (i = 0; i < 2 * COUNT; i++) {
|
||||
random_scalar_order(&rand);
|
||||
testutil_random_scalar_order(&rand);
|
||||
secp256k1_scalar_get_b32(s, &rand);
|
||||
secp256k1_scalar_inverse(&rand, &rand);
|
||||
secp256k1_scalar_get_b32(s_inv, &rand);
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
static void rand_scalar(secp256k1_scalar *scalar) {
|
||||
unsigned char buf32[32];
|
||||
secp256k1_testrand256(buf32);
|
||||
testrand256(buf32);
|
||||
secp256k1_scalar_set_b32(scalar, buf32, NULL);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ static void dleq_nonce_bitflip(unsigned char **args, size_t n_flip, size_t n_byt
|
||||
secp256k1_scalar k1, k2;
|
||||
|
||||
CHECK(secp256k1_dleq_nonce(&k1, args[0], args[1], args[2], args[3], NULL, args[4]) == 1);
|
||||
secp256k1_testrand_flip(args[n_flip], n_bytes);
|
||||
testrand_flip(args[n_flip], n_bytes);
|
||||
CHECK(secp256k1_dleq_nonce(&k2, args[0], args[1], args[2], args[3], NULL, args[4]) == 1);
|
||||
CHECK(secp256k1_scalar_eq(&k1, &k2) == 0);
|
||||
}
|
||||
@@ -73,11 +73,11 @@ static void dleq_tests(void) {
|
||||
CHECK(secp256k1_eckey_pubkey_serialize(&p2, p2_33, &pubkey_size, 1));
|
||||
CHECK(secp256k1_dleq_nonce(&k, sk32, gen2_33, p1_33, p2_33, NULL, NULL) == 1);
|
||||
|
||||
secp256k1_testrand_bytes_test(sk32, sizeof(sk32));
|
||||
secp256k1_testrand_bytes_test(gen2_33, sizeof(gen2_33));
|
||||
secp256k1_testrand_bytes_test(p1_33, sizeof(p1_33));
|
||||
secp256k1_testrand_bytes_test(p2_33, sizeof(p2_33));
|
||||
secp256k1_testrand_bytes_test(aux_rand, sizeof(aux_rand));
|
||||
testrand_bytes_test(sk32, sizeof(sk32));
|
||||
testrand_bytes_test(gen2_33, sizeof(gen2_33));
|
||||
testrand_bytes_test(p1_33, sizeof(p1_33));
|
||||
testrand_bytes_test(p2_33, sizeof(p2_33));
|
||||
testrand_bytes_test(aux_rand, sizeof(aux_rand));
|
||||
|
||||
/* Check that a bitflip in an argument results in different nonces. */
|
||||
args[0] = sk32;
|
||||
@@ -101,7 +101,7 @@ static void dleq_tests(void) {
|
||||
}
|
||||
|
||||
static void rand_flip_bit(unsigned char *array, size_t n) {
|
||||
array[secp256k1_testrand_int(n)] ^= 1 << secp256k1_testrand_int(8);
|
||||
array[testrand_int(n)] ^= 1 << testrand_int(8);
|
||||
}
|
||||
|
||||
/* Helper function for test_ecdsa_adaptor_spec_vectors
|
||||
@@ -713,7 +713,7 @@ static int ecdsa_adaptor_nonce_function_overflowing(unsigned char *nonce32, cons
|
||||
static void nonce_function_ecdsa_adaptor_bitflip(unsigned char **args, size_t n_flip, size_t n_bytes, size_t algolen) {
|
||||
unsigned char nonces[2][32];
|
||||
CHECK(nonce_function_ecdsa_adaptor(nonces[0], args[0], args[1], args[2], args[3], algolen, args[4]) == 1);
|
||||
secp256k1_testrand_flip(args[n_flip], n_bytes);
|
||||
testrand_flip(args[n_flip], n_bytes);
|
||||
CHECK(nonce_function_ecdsa_adaptor(nonces[1], args[0], args[1], args[2], args[3], algolen, args[4]) == 1);
|
||||
CHECK(secp256k1_memcmp_var(nonces[0], nonces[1], 32) != 0);
|
||||
}
|
||||
@@ -766,10 +766,10 @@ static void run_nonce_function_ecdsa_adaptor_tests(void) {
|
||||
secp256k1_nonce_function_dleq_sha256_tagged(&sha_optimized);
|
||||
ecdsa_adaptor_test_sha256_eq(&sha, &sha_optimized);
|
||||
|
||||
secp256k1_testrand_bytes_test(msg, sizeof(msg));
|
||||
secp256k1_testrand_bytes_test(key, sizeof(key));
|
||||
secp256k1_testrand_bytes_test(pk, sizeof(pk));
|
||||
secp256k1_testrand_bytes_test(aux_rand, sizeof(aux_rand));
|
||||
testrand_bytes_test(msg, sizeof(msg));
|
||||
testrand_bytes_test(key, sizeof(key));
|
||||
testrand_bytes_test(pk, sizeof(pk));
|
||||
testrand_bytes_test(aux_rand, sizeof(aux_rand));
|
||||
|
||||
/* Check that a bitflip in an argument results in different nonces. */
|
||||
args[0] = msg;
|
||||
@@ -802,7 +802,7 @@ static void run_nonce_function_ecdsa_adaptor_tests(void) {
|
||||
/* Different algolen gives different nonce */
|
||||
for (i = 0; i < COUNT; i++) {
|
||||
unsigned char nonce2[32];
|
||||
uint32_t offset = secp256k1_testrand_int(algolen - 1);
|
||||
uint32_t offset = testrand_int(algolen - 1);
|
||||
size_t algolen_tmp = (algolen + offset) % algolen;
|
||||
|
||||
CHECK(nonce_function_ecdsa_adaptor(nonce2, msg, key, pk, algo, algolen_tmp, NULL) == 1);
|
||||
@@ -824,9 +824,9 @@ static void test_ecdsa_adaptor_api(void) {
|
||||
unsigned char deckey[32];
|
||||
|
||||
/** setup **/
|
||||
secp256k1_testrand256(sk);
|
||||
secp256k1_testrand256(msg);
|
||||
secp256k1_testrand256(deckey);
|
||||
testrand256(sk);
|
||||
testrand256(msg);
|
||||
testrand256(deckey);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &pubkey, sk) == 1);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &enckey, deckey) == 1);
|
||||
memset(&zero_pk, 0, sizeof(zero_pk));
|
||||
@@ -877,9 +877,9 @@ static void adaptor_tests(void) {
|
||||
unsigned char zeros64[64] = { 0 };
|
||||
unsigned char big[32];
|
||||
|
||||
secp256k1_testrand256(seckey);
|
||||
secp256k1_testrand256(msg);
|
||||
secp256k1_testrand256(deckey);
|
||||
testrand256(seckey);
|
||||
testrand256(msg);
|
||||
testrand256(deckey);
|
||||
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &pubkey, seckey) == 1);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &enckey, deckey) == 1);
|
||||
@@ -1082,19 +1082,19 @@ static void multi_hop_lock_tests(void) {
|
||||
secp256k1_scalar deckey;
|
||||
secp256k1_ecdsa_signature sig_ab, sig_bc;
|
||||
|
||||
secp256k1_testrand256(seckey_a);
|
||||
secp256k1_testrand256(seckey_b);
|
||||
testrand256(seckey_a);
|
||||
testrand256(seckey_b);
|
||||
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &pubkey_a, seckey_a));
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &pubkey_b, seckey_b));
|
||||
|
||||
/* Carol setup */
|
||||
/* Proof of payment */
|
||||
secp256k1_testrand256(pop);
|
||||
testrand256(pop);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &pubkey_pop, pop));
|
||||
|
||||
/* Alice setup */
|
||||
secp256k1_testrand256(tx_ab);
|
||||
testrand256(tx_ab);
|
||||
rand_scalar(&t1);
|
||||
rand_scalar(&t2);
|
||||
secp256k1_scalar_add(&tp, &t1, &t2);
|
||||
@@ -1110,7 +1110,7 @@ static void multi_hop_lock_tests(void) {
|
||||
|
||||
/* Bob setup */
|
||||
CHECK(secp256k1_ecdsa_adaptor_verify(CTX, asig_ab, &pubkey_a, tx_ab, &l));
|
||||
secp256k1_testrand256(tx_bc);
|
||||
testrand256(tx_bc);
|
||||
CHECK(secp256k1_ecdsa_adaptor_encrypt(CTX, asig_bc, seckey_b, &r, tx_bc, NULL, NULL));
|
||||
|
||||
/* Carol decrypt */
|
||||
|
||||
@@ -69,7 +69,7 @@ static void run_s2c_opening_test(void) {
|
||||
CHECK(secp256k1_ecdsa_s2c_opening_serialize(CTX, output, &opening) == 1);
|
||||
CHECK(secp256k1_memcmp_var(output, input, sizeof(output)) == 0);
|
||||
}
|
||||
secp256k1_testrand256(&input[1]);
|
||||
testrand256(&input[1]);
|
||||
/* Set pubkey oddness tag to first bit of input[1] */
|
||||
input[0] = (input[1] & 1) + 2;
|
||||
}
|
||||
@@ -195,14 +195,14 @@ static void test_ecdsa_s2c_sign_verify(void) {
|
||||
/* Generate a random key, message, noncedata and s2c_data. */
|
||||
{
|
||||
secp256k1_scalar key;
|
||||
random_scalar_order_test(&key);
|
||||
testutil_random_scalar_order_test(&key);
|
||||
secp256k1_scalar_get_b32(privkey, &key);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &pubkey, privkey) == 1);
|
||||
|
||||
secp256k1_testrand256_test(message);
|
||||
secp256k1_testrand256_test(noncedata);
|
||||
secp256k1_testrand256_test(s2c_data);
|
||||
secp256k1_testrand256_test(s2c_data2);
|
||||
testrand256_test(message);
|
||||
testrand256_test(noncedata);
|
||||
testrand256_test(s2c_data);
|
||||
testrand256_test(s2c_data2);
|
||||
}
|
||||
|
||||
{ /* invalid privkeys */
|
||||
@@ -270,11 +270,11 @@ static void test_ecdsa_anti_exfil(void) {
|
||||
/* Generate a random key, message. */
|
||||
{
|
||||
secp256k1_scalar key;
|
||||
random_scalar_order_test(&key);
|
||||
testutil_random_scalar_order_test(&key);
|
||||
secp256k1_scalar_get_b32(signer_privkey, &key);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &signer_pubkey, signer_privkey) == 1);
|
||||
secp256k1_testrand256_test(host_msg);
|
||||
secp256k1_testrand256_test(host_nonce_contribution);
|
||||
testrand256_test(host_msg);
|
||||
testrand256_test(host_nonce_contribution);
|
||||
}
|
||||
|
||||
/* Protocol step 1. */
|
||||
@@ -307,7 +307,7 @@ static void test_ecdsa_anti_exfil(void) {
|
||||
}
|
||||
{ /* host_verify: message does not match */
|
||||
unsigned char bad_msg[32];
|
||||
secp256k1_testrand256_test(bad_msg);
|
||||
testrand256_test(bad_msg);
|
||||
CHECK(secp256k1_anti_exfil_host_verify(CTX, &signature, host_msg, &signer_pubkey, host_nonce_contribution, &s2c_opening) == 1);
|
||||
CHECK(secp256k1_anti_exfil_host_verify(CTX, &signature, bad_msg, &signer_pubkey, host_nonce_contribution, &s2c_opening) == 0);
|
||||
}
|
||||
|
||||
@@ -229,9 +229,9 @@ void run_ellswift_tests(void) {
|
||||
secp256k1_ge g, g2;
|
||||
secp256k1_pubkey pubkey, pubkey2;
|
||||
/* Generate random public key and random randomizer. */
|
||||
random_group_element_test(&g);
|
||||
testutil_random_ge_test(&g);
|
||||
secp256k1_pubkey_save(&pubkey, &g);
|
||||
secp256k1_testrand256(rnd32);
|
||||
testrand256(rnd32);
|
||||
/* Convert the public key to ElligatorSwift and back. */
|
||||
secp256k1_ellswift_encode(CTX, ell64, &pubkey, rnd32);
|
||||
secp256k1_ellswift_decode(CTX, &pubkey2, ell64);
|
||||
@@ -249,8 +249,8 @@ void run_ellswift_tests(void) {
|
||||
unsigned char ell64[64];
|
||||
int ret;
|
||||
/* Generate random secret key and random randomizer. */
|
||||
if (i & 1) secp256k1_testrand256_test(auxrnd32);
|
||||
random_scalar_order_test(&sec);
|
||||
if (i & 1) testrand256_test(auxrnd32);
|
||||
testutil_random_scalar_order_test(&sec);
|
||||
secp256k1_scalar_get_b32(sec32, &sec);
|
||||
/* Construct ElligatorSwift-encoded public keys for that key. */
|
||||
ret = secp256k1_ellswift_create(CTX, ell64, sec32, (i & 1) ? auxrnd32 : NULL);
|
||||
@@ -271,11 +271,11 @@ void run_ellswift_tests(void) {
|
||||
secp256k1_pubkey pub;
|
||||
int ret;
|
||||
/* Generate random secret key. */
|
||||
random_scalar_order_test(&sec);
|
||||
testutil_random_scalar_order_test(&sec);
|
||||
secp256k1_scalar_get_b32(sec32, &sec);
|
||||
/* Generate random ElligatorSwift encoding for the remote key and decode it. */
|
||||
secp256k1_testrand256_test(ell64);
|
||||
secp256k1_testrand256_test(ell64 + 32);
|
||||
testrand256_test(ell64);
|
||||
testrand256_test(ell64 + 32);
|
||||
secp256k1_ellswift_decode(CTX, &pub, ell64);
|
||||
secp256k1_pubkey_load(CTX, &dec, &pub);
|
||||
secp256k1_gej_set_ge(&decj, &dec);
|
||||
@@ -313,18 +313,18 @@ void run_ellswift_tests(void) {
|
||||
data = NULL;
|
||||
} else {
|
||||
hash_function = secp256k1_ellswift_xdh_hash_function_prefix;
|
||||
secp256k1_testrand256_test(prefix64);
|
||||
secp256k1_testrand256_test(prefix64 + 32);
|
||||
testrand256_test(prefix64);
|
||||
testrand256_test(prefix64 + 32);
|
||||
data = prefix64;
|
||||
}
|
||||
|
||||
/* Generate random secret keys and random randomizers. */
|
||||
secp256k1_testrand256_test(auxrnd32a);
|
||||
secp256k1_testrand256_test(auxrnd32b);
|
||||
random_scalar_order_test(&seca);
|
||||
testrand256_test(auxrnd32a);
|
||||
testrand256_test(auxrnd32b);
|
||||
testutil_random_scalar_order_test(&seca);
|
||||
/* Draw secb uniformly at random to make sure that the secret keys
|
||||
* differ */
|
||||
random_scalar_order(&secb);
|
||||
testutil_random_scalar_order(&secb);
|
||||
secp256k1_scalar_get_b32(sec32a, &seca);
|
||||
secp256k1_scalar_get_b32(sec32b, &secb);
|
||||
|
||||
@@ -349,13 +349,13 @@ void run_ellswift_tests(void) {
|
||||
/* Verify that the shared secret doesn't match if other side's public key is incorrect. */
|
||||
/* For A (using a bad public key for B): */
|
||||
memcpy(ell64b_bad, ell64b, sizeof(ell64a_bad));
|
||||
secp256k1_testrand_flip(ell64b_bad, sizeof(ell64b_bad));
|
||||
testrand_flip(ell64b_bad, sizeof(ell64b_bad));
|
||||
ret = secp256k1_ellswift_xdh(CTX, share32_bad, ell64a, ell64b_bad, sec32a, 0, hash_function, data);
|
||||
CHECK(ret); /* Mismatching encodings don't get detected by secp256k1_ellswift_xdh. */
|
||||
CHECK(secp256k1_memcmp_var(share32_bad, share32a, 32) != 0);
|
||||
/* For B (using a bad public key for A): */
|
||||
memcpy(ell64a_bad, ell64a, sizeof(ell64a_bad));
|
||||
secp256k1_testrand_flip(ell64a_bad, sizeof(ell64a_bad));
|
||||
testrand_flip(ell64a_bad, sizeof(ell64a_bad));
|
||||
ret = secp256k1_ellswift_xdh(CTX, share32_bad, ell64a_bad, ell64b, sec32b, 1, hash_function, data);
|
||||
CHECK(ret);
|
||||
CHECK(secp256k1_memcmp_var(share32_bad, share32b, 32) != 0);
|
||||
@@ -363,12 +363,12 @@ void run_ellswift_tests(void) {
|
||||
/* Verify that the shared secret doesn't match if the private key is incorrect. */
|
||||
/* For A: */
|
||||
memcpy(sec32a_bad, sec32a, sizeof(sec32a_bad));
|
||||
secp256k1_testrand_flip(sec32a_bad, sizeof(sec32a_bad));
|
||||
testrand_flip(sec32a_bad, sizeof(sec32a_bad));
|
||||
ret = secp256k1_ellswift_xdh(CTX, share32_bad, ell64a, ell64b, sec32a_bad, 0, hash_function, data);
|
||||
CHECK(!ret || secp256k1_memcmp_var(share32_bad, share32a, 32) != 0);
|
||||
/* For B: */
|
||||
memcpy(sec32b_bad, sec32b, sizeof(sec32b_bad));
|
||||
secp256k1_testrand_flip(sec32b_bad, sizeof(sec32b_bad));
|
||||
testrand_flip(sec32b_bad, sizeof(sec32b_bad));
|
||||
ret = secp256k1_ellswift_xdh(CTX, share32_bad, ell64a, ell64b, sec32b_bad, 1, hash_function, data);
|
||||
CHECK(!ret || secp256k1_memcmp_var(share32_bad, share32b, 32) != 0);
|
||||
|
||||
@@ -376,7 +376,7 @@ void run_ellswift_tests(void) {
|
||||
/* Verify that the shared secret doesn't match when a different encoding of the same public key is used. */
|
||||
/* For A (changing B's public key): */
|
||||
memcpy(auxrnd32b_bad, auxrnd32b, sizeof(auxrnd32b_bad));
|
||||
secp256k1_testrand_flip(auxrnd32b_bad, sizeof(auxrnd32b_bad));
|
||||
testrand_flip(auxrnd32b_bad, sizeof(auxrnd32b_bad));
|
||||
ret = secp256k1_ellswift_create(CTX, ell64b_bad, sec32b, auxrnd32b_bad);
|
||||
CHECK(ret);
|
||||
ret = secp256k1_ellswift_xdh(CTX, share32_bad, ell64a, ell64b_bad, sec32a, 0, hash_function, data);
|
||||
@@ -384,7 +384,7 @@ void run_ellswift_tests(void) {
|
||||
CHECK(secp256k1_memcmp_var(share32_bad, share32a, 32) != 0);
|
||||
/* For B (changing A's public key): */
|
||||
memcpy(auxrnd32a_bad, auxrnd32a, sizeof(auxrnd32a_bad));
|
||||
secp256k1_testrand_flip(auxrnd32a_bad, sizeof(auxrnd32a_bad));
|
||||
testrand_flip(auxrnd32a_bad, sizeof(auxrnd32a_bad));
|
||||
ret = secp256k1_ellswift_create(CTX, ell64a_bad, sec32a, auxrnd32a_bad);
|
||||
CHECK(ret);
|
||||
ret = secp256k1_ellswift_xdh(CTX, share32_bad, ell64a_bad, ell64b, sec32b, 1, hash_function, data);
|
||||
|
||||
@@ -23,9 +23,9 @@ static void test_xonly_pubkey(void) {
|
||||
int pk_parity;
|
||||
int i;
|
||||
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(sk);
|
||||
memset(ones32, 0xFF, 32);
|
||||
secp256k1_testrand256(xy_sk);
|
||||
testrand256(xy_sk);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &pk, sk) == 1);
|
||||
CHECK(secp256k1_xonly_pubkey_from_pubkey(CTX, &xonly_pk, &pk_parity, &pk) == 1);
|
||||
|
||||
@@ -95,7 +95,7 @@ static void test_xonly_pubkey(void) {
|
||||
* the curve) then xonly_pubkey_parse should fail as well. */
|
||||
for (i = 0; i < COUNT; i++) {
|
||||
unsigned char rand33[33];
|
||||
secp256k1_testrand256(&rand33[1]);
|
||||
testrand256(&rand33[1]);
|
||||
rand33[0] = SECP256K1_TAG_PUBKEY_EVEN;
|
||||
if (!secp256k1_ec_pubkey_parse(CTX, &pk, rand33, 33)) {
|
||||
memset(&xonly_pk, 1, sizeof(xonly_pk));
|
||||
@@ -152,8 +152,8 @@ static void test_xonly_pubkey_tweak(void) {
|
||||
int i;
|
||||
|
||||
memset(overflows, 0xff, sizeof(overflows));
|
||||
secp256k1_testrand256(tweak);
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(tweak);
|
||||
testrand256(sk);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &internal_pk, sk) == 1);
|
||||
CHECK(secp256k1_xonly_pubkey_from_pubkey(CTX, &internal_xonly_pk, &pk_parity, &internal_pk) == 1);
|
||||
|
||||
@@ -190,7 +190,7 @@ static void test_xonly_pubkey_tweak(void) {
|
||||
|
||||
/* Invalid pk with a valid tweak */
|
||||
memset(&internal_xonly_pk, 0, sizeof(internal_xonly_pk));
|
||||
secp256k1_testrand256(tweak);
|
||||
testrand256(tweak);
|
||||
CHECK_ILLEGAL(CTX, secp256k1_xonly_pubkey_tweak_add(CTX, &output_pk, &internal_xonly_pk, tweak));
|
||||
CHECK(secp256k1_memcmp_var(&output_pk, zeros64, sizeof(output_pk)) == 0);
|
||||
}
|
||||
@@ -209,8 +209,8 @@ static void test_xonly_pubkey_tweak_check(void) {
|
||||
unsigned char tweak[32];
|
||||
|
||||
memset(overflows, 0xff, sizeof(overflows));
|
||||
secp256k1_testrand256(tweak);
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(tweak);
|
||||
testrand256(sk);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &internal_pk, sk) == 1);
|
||||
CHECK(secp256k1_xonly_pubkey_from_pubkey(CTX, &internal_xonly_pk, &pk_parity, &internal_pk) == 1);
|
||||
|
||||
@@ -256,7 +256,7 @@ static void test_xonly_pubkey_tweak_recursive(void) {
|
||||
unsigned char tweak[N_PUBKEYS - 1][32];
|
||||
int i;
|
||||
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(sk);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &pk[0], sk) == 1);
|
||||
/* Add tweaks */
|
||||
for (i = 0; i < N_PUBKEYS - 1; i++) {
|
||||
@@ -292,7 +292,7 @@ static void test_keypair(void) {
|
||||
memset(overflows, 0xFF, sizeof(overflows));
|
||||
|
||||
/* Test keypair_create */
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(sk);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk) == 1);
|
||||
CHECK(secp256k1_memcmp_var(zeros96, &keypair, sizeof(keypair)) != 0);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk) == 1);
|
||||
@@ -311,7 +311,7 @@ static void test_keypair(void) {
|
||||
CHECK(secp256k1_memcmp_var(zeros96, &keypair, sizeof(keypair)) == 0);
|
||||
|
||||
/* Test keypair_pub */
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(sk);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk) == 1);
|
||||
CHECK(secp256k1_keypair_pub(CTX, &pk, &keypair) == 1);
|
||||
CHECK_ILLEGAL(CTX, secp256k1_keypair_pub(CTX, NULL, &keypair));
|
||||
@@ -330,7 +330,7 @@ static void test_keypair(void) {
|
||||
CHECK(secp256k1_memcmp_var(&pk, &pk_tmp, sizeof(pk)) == 0);
|
||||
|
||||
/** Test keypair_xonly_pub **/
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(sk);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk) == 1);
|
||||
CHECK(secp256k1_keypair_xonly_pub(CTX, &xonly_pk, &pk_parity, &keypair) == 1);
|
||||
CHECK_ILLEGAL(CTX, secp256k1_keypair_xonly_pub(CTX, NULL, &pk_parity, &keypair));
|
||||
@@ -353,7 +353,7 @@ static void test_keypair(void) {
|
||||
CHECK(pk_parity == pk_parity_tmp);
|
||||
|
||||
/* Test keypair_seckey */
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(sk);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk) == 1);
|
||||
CHECK(secp256k1_keypair_sec(CTX, sk_tmp, &keypair) == 1);
|
||||
CHECK_ILLEGAL(CTX, secp256k1_keypair_sec(CTX, NULL, &keypair));
|
||||
@@ -381,8 +381,8 @@ static void test_keypair_add(void) {
|
||||
int i;
|
||||
|
||||
CHECK(sizeof(zeros96) == sizeof(keypair));
|
||||
secp256k1_testrand256(sk);
|
||||
secp256k1_testrand256(tweak);
|
||||
testrand256(sk);
|
||||
testrand256(tweak);
|
||||
memset(overflows, 0xFF, 32);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk) == 1);
|
||||
|
||||
@@ -407,7 +407,7 @@ static void test_keypair_add(void) {
|
||||
for (i = 0; i < COUNT; i++) {
|
||||
secp256k1_scalar scalar_tweak;
|
||||
secp256k1_keypair keypair_tmp;
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(sk);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk) == 1);
|
||||
memcpy(&keypair_tmp, &keypair, sizeof(keypair));
|
||||
/* Because sk may be negated before adding, we need to try with tweak =
|
||||
@@ -423,7 +423,7 @@ static void test_keypair_add(void) {
|
||||
|
||||
/* Invalid keypair with a valid tweak */
|
||||
memset(&keypair, 0, sizeof(keypair));
|
||||
secp256k1_testrand256(tweak);
|
||||
testrand256(tweak);
|
||||
CHECK_ILLEGAL(CTX, secp256k1_keypair_xonly_tweak_add(CTX, &keypair, tweak));
|
||||
CHECK(secp256k1_memcmp_var(&keypair, zeros96, sizeof(keypair)) == 0);
|
||||
/* Only seckey part of keypair invalid */
|
||||
@@ -446,7 +446,7 @@ static void test_keypair_add(void) {
|
||||
unsigned char sk32[32];
|
||||
int pk_parity;
|
||||
|
||||
secp256k1_testrand256(tweak);
|
||||
testrand256(tweak);
|
||||
CHECK(secp256k1_keypair_xonly_pub(CTX, &internal_pk, NULL, &keypair) == 1);
|
||||
CHECK(secp256k1_keypair_xonly_tweak_add(CTX, &keypair, tweak) == 1);
|
||||
CHECK(secp256k1_keypair_xonly_pub(CTX, &output_pk, &pk_parity, &keypair) == 1);
|
||||
|
||||
@@ -23,8 +23,8 @@ static void test_generator_api(void) {
|
||||
unsigned char sergen[33];
|
||||
secp256k1_generator gen;
|
||||
|
||||
secp256k1_testrand256(key);
|
||||
secp256k1_testrand256(blind);
|
||||
testrand256(key);
|
||||
testrand256(blind);
|
||||
|
||||
CHECK(secp256k1_generator_generate(CTX, &gen, key) == 1);
|
||||
CHECK_ILLEGAL(CTX, secp256k1_generator_generate(CTX, NULL, key));
|
||||
@@ -196,9 +196,9 @@ static void test_pedersen_api(void) {
|
||||
unsigned char blind_out[32];
|
||||
const unsigned char *blind_ptr = blind;
|
||||
unsigned char *blind_out_ptr = blind_out;
|
||||
uint64_t val = secp256k1_testrand32();
|
||||
uint64_t val = testrand32();
|
||||
|
||||
secp256k1_testrand256(blind);
|
||||
testrand256(blind);
|
||||
CHECK(secp256k1_pedersen_commit(CTX, &commit, blind, val, secp256k1_generator_h) != 0);
|
||||
CHECK_ILLEGAL(STATIC_CTX, secp256k1_pedersen_commit(STATIC_CTX, &commit, blind, val, secp256k1_generator_h));
|
||||
|
||||
@@ -240,8 +240,8 @@ static void test_pedersen(void) {
|
||||
int inputs;
|
||||
int outputs;
|
||||
int total;
|
||||
inputs = (secp256k1_testrand32() & 7) + 1;
|
||||
outputs = (secp256k1_testrand32() & 7) + 2;
|
||||
inputs = (testrand32() & 7) + 1;
|
||||
outputs = (testrand32() & 7) + 2;
|
||||
total = inputs + outputs;
|
||||
for (i = 0; i < 19; i++) {
|
||||
cptr[i] = &commits[i];
|
||||
@@ -249,17 +249,17 @@ static void test_pedersen(void) {
|
||||
}
|
||||
totalv = 0;
|
||||
for (i = 0; i < inputs; i++) {
|
||||
values[i] = secp256k1_testrandi64(0, INT64_MAX - totalv);
|
||||
values[i] = testrandi64(0, INT64_MAX - totalv);
|
||||
totalv += values[i];
|
||||
}
|
||||
for (i = 0; i < outputs - 1; i++) {
|
||||
values[i + inputs] = secp256k1_testrandi64(0, totalv);
|
||||
values[i + inputs] = testrandi64(0, totalv);
|
||||
totalv -= values[i + inputs];
|
||||
}
|
||||
values[total - 1] = totalv;
|
||||
|
||||
for (i = 0; i < total - 1; i++) {
|
||||
random_scalar_order(&s);
|
||||
testutil_random_scalar_order(&s);
|
||||
secp256k1_scalar_get_b32(&blinds[i * 32], &s);
|
||||
}
|
||||
CHECK(secp256k1_pedersen_blind_sum(CTX, &blinds[(total - 1) * 32], bptr, total - 1, inputs));
|
||||
@@ -277,7 +277,7 @@ static void test_pedersen(void) {
|
||||
if (inputs > 0 && values[0] > 0) {
|
||||
CHECK(!secp256k1_pedersen_verify_tally(CTX, cptr, inputs - 1, &cptr[inputs], outputs));
|
||||
}
|
||||
random_scalar_order(&s);
|
||||
testutil_random_scalar_order(&s);
|
||||
for (i = 0; i < 4; i++) {
|
||||
secp256k1_scalar_get_b32(&blinds[i * 32], &s);
|
||||
}
|
||||
|
||||
@@ -57,10 +57,10 @@ static void musig_simple_test(secp256k1_scratch_space *scratch) {
|
||||
secp256k1_musig_session session;
|
||||
int i;
|
||||
|
||||
secp256k1_testrand256(msg);
|
||||
testrand256(msg);
|
||||
for (i = 0; i < 2; i++) {
|
||||
secp256k1_testrand256(session_id[i]);
|
||||
secp256k1_testrand256(sk[i]);
|
||||
testrand256(session_id[i]);
|
||||
testrand256(sk[i]);
|
||||
pk_ptr[i] = &pk[i];
|
||||
pubnonce_ptr[i] = &pubnonce[i];
|
||||
partial_sig_ptr[i] = &partial_sig[i];
|
||||
@@ -108,7 +108,7 @@ int memcmp_and_randomize(unsigned char *value, const unsigned char *expected, si
|
||||
size_t i;
|
||||
ret = secp256k1_memcmp_var(value, expected, len);
|
||||
for (i = 0; i < len; i++) {
|
||||
value[i] = secp256k1_testrand_bits(8);
|
||||
value[i] = testrand_bits(8);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -174,9 +174,9 @@ static void musig_api_tests(secp256k1_scratch_space *scratch) {
|
||||
memset(&invalid_pubnonce, 0, sizeof(invalid_pubnonce));
|
||||
memset(&invalid_session, 0, sizeof(invalid_session));
|
||||
|
||||
secp256k1_testrand256(sec_adaptor);
|
||||
secp256k1_testrand256(msg);
|
||||
secp256k1_testrand256(tweak);
|
||||
testrand256(sec_adaptor);
|
||||
testrand256(msg);
|
||||
testrand256(tweak);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &adaptor, sec_adaptor) == 1);
|
||||
for (i = 0; i < 2; i++) {
|
||||
pk_ptr[i] = &pk[i];
|
||||
@@ -186,8 +186,8 @@ static void musig_api_tests(secp256k1_scratch_space *scratch) {
|
||||
inf_pubnonce_ptr[i] = &inf_pubnonce[i];
|
||||
partial_sig_ptr[i] = &partial_sig[i];
|
||||
invalid_partial_sig_ptr[i] = &partial_sig[i];
|
||||
secp256k1_testrand256(session_id[i]);
|
||||
secp256k1_testrand256(sk[i]);
|
||||
testrand256(session_id[i]);
|
||||
testrand256(sk[i]);
|
||||
CHECK(create_keypair_and_pk(&keypair[i], &pk[i], sk[i]));
|
||||
}
|
||||
invalid_pubnonce_ptr[0] = &invalid_pubnonce;
|
||||
@@ -377,7 +377,7 @@ static void musig_api_tests(secp256k1_scratch_space *scratch) {
|
||||
{
|
||||
unsigned char sk_tmp[32];
|
||||
secp256k1_keypair keypair_tmp;
|
||||
secp256k1_testrand256(sk_tmp);
|
||||
testrand256(sk_tmp);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair_tmp, sk_tmp));
|
||||
CHECK_ILLEGAL(CTX, secp256k1_musig_partial_sign(CTX, &partial_sig[0], &secnonce_tmp, &keypair_tmp, &keyagg_cache, &session));
|
||||
memcpy(&secnonce_tmp, &secnonce[0], sizeof(secnonce_tmp));
|
||||
@@ -477,7 +477,7 @@ static void musig_nonce_bitflip(unsigned char **args, size_t n_flip, size_t n_by
|
||||
secp256k1_scalar k1[2], k2[2];
|
||||
|
||||
secp256k1_nonce_function_musig(k1, args[0], args[1], args[2], args[3], args[4], args[5]);
|
||||
secp256k1_testrand_flip(args[n_flip], n_bytes);
|
||||
testrand_flip(args[n_flip], n_bytes);
|
||||
secp256k1_nonce_function_musig(k2, args[0], args[1], args[2], args[3], args[4], args[5]);
|
||||
CHECK(secp256k1_scalar_eq(&k1[0], &k2[0]) == 0);
|
||||
CHECK(secp256k1_scalar_eq(&k1[1], &k2[1]) == 0);
|
||||
@@ -494,12 +494,12 @@ static void musig_nonce_test(void) {
|
||||
int i, j;
|
||||
secp256k1_scalar k[6][2];
|
||||
|
||||
secp256k1_testrand_bytes_test(session_id, sizeof(session_id));
|
||||
secp256k1_testrand_bytes_test(sk, sizeof(sk));
|
||||
secp256k1_testrand_bytes_test(pk, sizeof(pk));
|
||||
secp256k1_testrand_bytes_test(msg, sizeof(msg));
|
||||
secp256k1_testrand_bytes_test(agg_pk, sizeof(agg_pk));
|
||||
secp256k1_testrand_bytes_test(extra_input, sizeof(extra_input));
|
||||
testrand_bytes_test(session_id, sizeof(session_id));
|
||||
testrand_bytes_test(sk, sizeof(sk));
|
||||
testrand_bytes_test(pk, sizeof(pk));
|
||||
testrand_bytes_test(msg, sizeof(msg));
|
||||
testrand_bytes_test(agg_pk, sizeof(agg_pk));
|
||||
testrand_bytes_test(extra_input, sizeof(extra_input));
|
||||
|
||||
/* Check that a bitflip in an argument results in different nonces. */
|
||||
args[0] = session_id;
|
||||
@@ -592,12 +592,12 @@ static void scriptless_atomic_swap(secp256k1_scratch_space *scratch) {
|
||||
partial_sig_a_ptr[i] = &partial_sig_a[i];
|
||||
partial_sig_b_ptr[i] = &partial_sig_b[i];
|
||||
|
||||
secp256k1_testrand256(sk_a[i]);
|
||||
secp256k1_testrand256(sk_b[i]);
|
||||
testrand256(sk_a[i]);
|
||||
testrand256(sk_b[i]);
|
||||
CHECK(create_keypair_and_pk(&keypair_a[i], &pk_a[i], sk_a[i]) == 1);
|
||||
CHECK(create_keypair_and_pk(&keypair_b[i], &pk_b[i], sk_b[i]) == 1);
|
||||
}
|
||||
secp256k1_testrand256(sec_adaptor);
|
||||
testrand256(sec_adaptor);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &pub_adaptor, sec_adaptor) == 1);
|
||||
|
||||
CHECK(secp256k1_musig_pubkey_agg(CTX, scratch, &agg_pk_a, &keyagg_cache_a, pk_a_ptr, 2) == 1);
|
||||
@@ -708,11 +708,11 @@ static void musig_tweak_test_helper(const secp256k1_xonly_pubkey* agg_pk, const
|
||||
pubnonce_ptr[i] = &pubnonce[i];
|
||||
partial_sig_ptr[i] = &partial_sig[i];
|
||||
|
||||
secp256k1_testrand256(session_id[i]);
|
||||
testrand256(session_id[i]);
|
||||
}
|
||||
CHECK(create_keypair_and_pk(&keypair[0], &pk[0], sk0) == 1);
|
||||
CHECK(create_keypair_and_pk(&keypair[1], &pk[1], sk1) == 1);
|
||||
secp256k1_testrand256(msg);
|
||||
testrand256(msg);
|
||||
|
||||
CHECK(secp256k1_musig_nonce_gen(CTX, &secnonce[0], &pubnonce[0], session_id[0], sk0, &pk[0], NULL, NULL, NULL) == 1);
|
||||
CHECK(secp256k1_musig_nonce_gen(CTX, &secnonce[1], &pubnonce[1], session_id[1], sk1, &pk[1], NULL, NULL, NULL) == 1);
|
||||
@@ -745,7 +745,7 @@ static void musig_tweak_test(secp256k1_scratch_space *scratch) {
|
||||
/* Key Setup */
|
||||
for (i = 0; i < 2; i++) {
|
||||
pk_ptr[i] = &pk[i];
|
||||
secp256k1_testrand256(sk[i]);
|
||||
testrand256(sk[i]);
|
||||
CHECK(create_keypair_and_pk(NULL, &pk[i], sk[i]) == 1);
|
||||
}
|
||||
/* Compute P0 = keyagg(pk0, pk1) and test signing for it */
|
||||
@@ -760,9 +760,9 @@ static void musig_tweak_test(secp256k1_scratch_space *scratch) {
|
||||
for (i = 1; i <= N_TWEAKS; i++) {
|
||||
unsigned char tweak[32];
|
||||
int P_parity;
|
||||
int xonly = secp256k1_testrand_bits(1);
|
||||
int xonly = testrand_bits(1);
|
||||
|
||||
secp256k1_testrand256(tweak);
|
||||
testrand256(tweak);
|
||||
if (xonly) {
|
||||
CHECK(secp256k1_musig_pubkey_xonly_tweak_add(CTX, &P[i], &keyagg_cache, tweak) == 1);
|
||||
} else {
|
||||
|
||||
@@ -20,8 +20,8 @@ static void test_rangeproof_api(void) {
|
||||
unsigned char proof[5134];
|
||||
unsigned char blind[32];
|
||||
secp256k1_pedersen_commitment commit;
|
||||
uint64_t vmin = secp256k1_testrand32();
|
||||
uint64_t val = vmin + secp256k1_testrand32();
|
||||
uint64_t vmin = testrand32();
|
||||
uint64_t val = vmin + testrand32();
|
||||
size_t len = sizeof(proof);
|
||||
/* we'll switch to dylan thomas for this one */
|
||||
const unsigned char message[68] = "My tears are like the quiet drift / Of petals from some magic rose;";
|
||||
@@ -29,7 +29,7 @@ static void test_rangeproof_api(void) {
|
||||
const unsigned char ext_commit[72] = "And all my grief flows from the rift / Of unremembered skies and snows.";
|
||||
size_t ext_commit_len = sizeof(ext_commit);
|
||||
|
||||
secp256k1_testrand256(blind);
|
||||
testrand256(blind);
|
||||
CHECK(secp256k1_pedersen_commit(CTX, &commit, blind, val, secp256k1_generator_h));
|
||||
|
||||
CHECK(secp256k1_rangeproof_sign(CTX, proof, &len, vmin, &commit, blind, commit.data, 0, 0, val, message, mlen, ext_commit, ext_commit_len, secp256k1_generator_h) == 1);
|
||||
@@ -136,48 +136,48 @@ static void test_borromean(void) {
|
||||
size_t i;
|
||||
size_t j;
|
||||
int c;
|
||||
secp256k1_testrand256_test(m);
|
||||
nrings = 1 + (secp256k1_testrand32()&7);
|
||||
testrand256_test(m);
|
||||
nrings = 1 + (testrand32()&7);
|
||||
c = 0;
|
||||
secp256k1_scalar_set_int(&one, 1);
|
||||
if (secp256k1_testrand32()&1) {
|
||||
if (testrand32()&1) {
|
||||
secp256k1_scalar_negate(&one, &one);
|
||||
}
|
||||
for (i = 0; i < nrings; i++) {
|
||||
rsizes[i] = 1 + (secp256k1_testrand32()&7);
|
||||
secidx[i] = secp256k1_testrand32() % rsizes[i];
|
||||
random_scalar_order(&sec[i]);
|
||||
random_scalar_order(&k[i]);
|
||||
if(secp256k1_testrand32()&7) {
|
||||
rsizes[i] = 1 + (testrand32()&7);
|
||||
secidx[i] = testrand32() % rsizes[i];
|
||||
testutil_random_scalar_order(&sec[i]);
|
||||
testutil_random_scalar_order(&k[i]);
|
||||
if(testrand32()&7) {
|
||||
sec[i] = one;
|
||||
}
|
||||
if(secp256k1_testrand32()&7) {
|
||||
if(testrand32()&7) {
|
||||
k[i] = one;
|
||||
}
|
||||
for (j = 0; j < rsizes[i]; j++) {
|
||||
random_scalar_order(&s[c + j]);
|
||||
if(secp256k1_testrand32()&7) {
|
||||
testutil_random_scalar_order(&s[c + j]);
|
||||
if(testrand32()&7) {
|
||||
s[i] = one;
|
||||
}
|
||||
if (j == secidx[i]) {
|
||||
secp256k1_ecmult_gen(&CTX->ecmult_gen_ctx, &pubs[c + j], &sec[i]);
|
||||
} else {
|
||||
random_group_element_test(&ge);
|
||||
random_group_element_jacobian_test(&pubs[c + j],&ge);
|
||||
testutil_random_ge_test(&ge);
|
||||
testutil_random_ge_jacobian_test(&pubs[c + j],&ge);
|
||||
}
|
||||
}
|
||||
c += rsizes[i];
|
||||
}
|
||||
CHECK(secp256k1_borromean_sign(&CTX->ecmult_gen_ctx, e0, s, pubs, k, sec, rsizes, secidx, nrings, m, 32));
|
||||
CHECK(secp256k1_borromean_verify(NULL, e0, s, pubs, rsizes, nrings, m, 32));
|
||||
i = secp256k1_testrand32() % c;
|
||||
i = testrand32() % c;
|
||||
secp256k1_scalar_negate(&s[i],&s[i]);
|
||||
CHECK(!secp256k1_borromean_verify(NULL, e0, s, pubs, rsizes, nrings, m, 32));
|
||||
secp256k1_scalar_negate(&s[i],&s[i]);
|
||||
secp256k1_scalar_set_int(&one, 1);
|
||||
for(j = 0; j < 4; j++) {
|
||||
i = secp256k1_testrand32() % c;
|
||||
if (secp256k1_testrand32() & 1) {
|
||||
i = testrand32() % c;
|
||||
if (testrand32() & 1) {
|
||||
secp256k1_gej_double_var(&pubs[i],&pubs[i], NULL);
|
||||
} else {
|
||||
secp256k1_scalar_add(&s[i],&s[i],&one);
|
||||
@@ -213,7 +213,7 @@ static void test_rangeproof(void) {
|
||||
memcpy(&message_long[i], message_short, sizeof(message_short));
|
||||
}
|
||||
|
||||
secp256k1_testrand256(blind);
|
||||
testrand256(blind);
|
||||
for (i = 0; i < 11; i++) {
|
||||
v = testvs[i];
|
||||
CHECK(secp256k1_pedersen_commit(CTX, &commit, blind, v, secp256k1_generator_h));
|
||||
@@ -272,7 +272,7 @@ static void test_rangeproof(void) {
|
||||
CHECK(maxv == v);
|
||||
}
|
||||
}
|
||||
secp256k1_testrand256(blind);
|
||||
testrand256(blind);
|
||||
v = INT64_MAX - 1;
|
||||
CHECK(secp256k1_pedersen_commit(CTX, &commit, blind, v, secp256k1_generator_h));
|
||||
for (i = 0; i < 19; i++) {
|
||||
@@ -286,10 +286,10 @@ static void test_rangeproof(void) {
|
||||
/* Make sure it fails when validating with a committed message */
|
||||
CHECK(!secp256k1_rangeproof_verify(CTX, &minv, &maxv, &commit, proof, len, message_short, sizeof(message_short), secp256k1_generator_h));
|
||||
}
|
||||
secp256k1_testrand256(blind);
|
||||
testrand256(blind);
|
||||
{
|
||||
/*Malleability test.*/
|
||||
v = secp256k1_testrandi64(0, 255);
|
||||
v = testrandi64(0, 255);
|
||||
CHECK(secp256k1_pedersen_commit(CTX, &commit, blind, v, secp256k1_generator_h));
|
||||
len = 5134;
|
||||
CHECK(secp256k1_rangeproof_sign(CTX, proof, &len, 0, &commit, blind, commit.data, 0, 3, v, NULL, 0, NULL, 0, secp256k1_generator_h));
|
||||
@@ -311,19 +311,19 @@ static void test_rangeproof(void) {
|
||||
for (i = 0; i < (size_t) COUNT; i++) {
|
||||
int exp;
|
||||
int min_bits;
|
||||
v = secp256k1_testrandi64(0, UINT64_MAX >> (secp256k1_testrand32()&63));
|
||||
v = testrandi64(0, UINT64_MAX >> (testrand32()&63));
|
||||
vmin = 0;
|
||||
if ((v < INT64_MAX) && (secp256k1_testrand32()&1)) {
|
||||
vmin = secp256k1_testrandi64(0, v);
|
||||
if ((v < INT64_MAX) && (testrand32()&1)) {
|
||||
vmin = testrandi64(0, v);
|
||||
}
|
||||
secp256k1_testrand256(blind);
|
||||
testrand256(blind);
|
||||
CHECK(secp256k1_pedersen_commit(CTX, &commit, blind, v, secp256k1_generator_h));
|
||||
len = 5134;
|
||||
exp = (int)secp256k1_testrandi64(0,18)-(int)secp256k1_testrandi64(0,18);
|
||||
exp = (int)testrandi64(0,18)-(int)testrandi64(0,18);
|
||||
if (exp < 0) {
|
||||
exp = -exp;
|
||||
}
|
||||
min_bits = (int)secp256k1_testrandi64(0,64)-(int)secp256k1_testrandi64(0,64);
|
||||
min_bits = (int)testrandi64(0,64)-(int)testrandi64(0,64);
|
||||
if (min_bits < 0) {
|
||||
min_bits = -min_bits;
|
||||
}
|
||||
@@ -345,13 +345,13 @@ static void test_rangeproof(void) {
|
||||
}
|
||||
for (j = 0; j < 3; j++) {
|
||||
for (i = 0; i < 96; i++) {
|
||||
secp256k1_testrand256(&proof[i * 32]);
|
||||
testrand256(&proof[i * 32]);
|
||||
}
|
||||
for (k = 0; k < 128; k += 3) {
|
||||
len = k;
|
||||
CHECK(!secp256k1_rangeproof_verify(CTX, &minv, &maxv, &commit2, proof, len, NULL, 0, secp256k1_generator_h));
|
||||
}
|
||||
len = secp256k1_testrandi64(0, 3072);
|
||||
len = testrandi64(0, 3072);
|
||||
CHECK(!secp256k1_rangeproof_verify(CTX, &minv, &maxv, &commit2, proof, len, NULL, 0, secp256k1_generator_h));
|
||||
}
|
||||
}
|
||||
@@ -394,10 +394,10 @@ static void test_rangeproof_null_blinder(void) {
|
||||
size_t msg_len = sizeof(msg);
|
||||
|
||||
len = 1000;
|
||||
secp256k1_testrand256(msg);
|
||||
secp256k1_testrand256(&msg[32]);
|
||||
secp256k1_testrand256(&msg[64]);
|
||||
secp256k1_testrand256(&msg[96]);
|
||||
testrand256(msg);
|
||||
testrand256(&msg[32]);
|
||||
testrand256(&msg[64]);
|
||||
testrand256(&msg[96]);
|
||||
CHECK(secp256k1_rangeproof_sign(CTX, proof, &len, v, &commit, blind, commit.data, 0, 3, v, msg, sizeof(msg), NULL, 0, secp256k1_generator_h));
|
||||
CHECK(secp256k1_rangeproof_rewind(CTX, blind_out, &value_out, msg_out, &msg_len, commit.data, &minv, &maxv, &commit, proof, len, NULL, 0, secp256k1_generator_h) != 0);
|
||||
CHECK(secp256k1_memcmp_var(blind, blind_out, sizeof(blind)) == 0);
|
||||
@@ -424,8 +424,8 @@ static void test_single_value_proof(uint64_t val) {
|
||||
size_t m_len_out = 0;
|
||||
size_t i;
|
||||
|
||||
secp256k1_testrand256(blind);
|
||||
secp256k1_testrand256(nonce);
|
||||
testrand256(blind);
|
||||
testrand256(nonce);
|
||||
CHECK(secp256k1_pedersen_commit(CTX, &commit, blind, val, secp256k1_generator_h));
|
||||
|
||||
CHECK(secp256k1_rangeproof_sign(
|
||||
@@ -524,8 +524,8 @@ static void test_single_value_proof(uint64_t val) {
|
||||
|
||||
#define MAX_N_GENS 30
|
||||
static void test_multiple_generators(void) {
|
||||
const size_t n_inputs = (secp256k1_testrand32() % (MAX_N_GENS / 2)) + 1;
|
||||
const size_t n_outputs = (secp256k1_testrand32() % (MAX_N_GENS / 2)) + 1;
|
||||
const size_t n_inputs = (testrand32() % (MAX_N_GENS / 2)) + 1;
|
||||
const size_t n_outputs = (testrand32() % (MAX_N_GENS / 2)) + 1;
|
||||
const size_t n_generators = n_inputs + n_outputs;
|
||||
unsigned char *generator_blind[MAX_N_GENS];
|
||||
unsigned char *pedersen_blind[MAX_N_GENS];
|
||||
@@ -539,16 +539,16 @@ static void test_multiple_generators(void) {
|
||||
secp256k1_scalar s;
|
||||
|
||||
unsigned char generator_seed[32];
|
||||
random_scalar_order(&s);
|
||||
testutil_random_scalar_order(&s);
|
||||
secp256k1_scalar_get_b32(generator_seed, &s);
|
||||
/* Create all the needed generators */
|
||||
for (i = 0; i < n_generators; i++) {
|
||||
generator_blind[i] = (unsigned char*) malloc(32);
|
||||
pedersen_blind[i] = (unsigned char*) malloc(32);
|
||||
|
||||
random_scalar_order(&s);
|
||||
testutil_random_scalar_order(&s);
|
||||
secp256k1_scalar_get_b32(generator_blind[i], &s);
|
||||
random_scalar_order(&s);
|
||||
testutil_random_scalar_order(&s);
|
||||
secp256k1_scalar_get_b32(pedersen_blind[i], &s);
|
||||
|
||||
CHECK(secp256k1_generator_generate_blinded(CTX, &generator[i], generator_seed, generator_blind[i]));
|
||||
@@ -559,11 +559,11 @@ static void test_multiple_generators(void) {
|
||||
/* Compute all the values -- can be positive or negative */
|
||||
total_value = 0;
|
||||
for (i = 0; i < n_outputs; i++) {
|
||||
value[n_inputs + i] = secp256k1_testrandi64(0, INT64_MAX - total_value);
|
||||
value[n_inputs + i] = testrandi64(0, INT64_MAX - total_value);
|
||||
total_value += value[n_inputs + i];
|
||||
}
|
||||
for (i = 0; i < n_inputs - 1; i++) {
|
||||
value[i] = secp256k1_testrandi64(0, total_value);
|
||||
value[i] = testrandi64(0, total_value);
|
||||
total_value -= value[i];
|
||||
}
|
||||
value[i] = total_value;
|
||||
|
||||
@@ -25,7 +25,7 @@ static int recovery_test_nonce_function(unsigned char *nonce32, const unsigned c
|
||||
}
|
||||
/* On the next run, return a valid nonce, but flip a coin as to whether or not to fail signing. */
|
||||
memset(nonce32, 1, 32);
|
||||
return secp256k1_testrand_bits(1);
|
||||
return testrand_bits(1);
|
||||
}
|
||||
|
||||
static void test_ecdsa_recovery_api(void) {
|
||||
@@ -106,8 +106,8 @@ static void test_ecdsa_recovery_end_to_end(void) {
|
||||
/* Generate a random key and message. */
|
||||
{
|
||||
secp256k1_scalar msg, key;
|
||||
random_scalar_order_test(&msg);
|
||||
random_scalar_order_test(&key);
|
||||
testutil_random_scalar_order_test(&msg);
|
||||
testutil_random_scalar_order_test(&key);
|
||||
secp256k1_scalar_get_b32(privkey, &key);
|
||||
secp256k1_scalar_get_b32(message, &msg);
|
||||
}
|
||||
@@ -141,7 +141,7 @@ static void test_ecdsa_recovery_end_to_end(void) {
|
||||
CHECK(secp256k1_memcmp_var(&pubkey, &recpubkey, sizeof(pubkey)) == 0);
|
||||
/* Serialize/destroy/parse signature and verify again. */
|
||||
CHECK(secp256k1_ecdsa_recoverable_signature_serialize_compact(CTX, sig, &recid, &rsignature[4]) == 1);
|
||||
sig[secp256k1_testrand_bits(6)] += 1 + secp256k1_testrand_int(255);
|
||||
sig[testrand_bits(6)] += 1 + testrand_int(255);
|
||||
CHECK(secp256k1_ecdsa_recoverable_signature_parse_compact(CTX, &rsignature[4], sig, recid) == 1);
|
||||
CHECK(secp256k1_ecdsa_recoverable_signature_convert(CTX, &signature[4], &rsignature[4]) == 1);
|
||||
CHECK(secp256k1_ecdsa_verify(CTX, &signature[4], message, &pubkey) == 0);
|
||||
|
||||
@@ -104,7 +104,7 @@ static void test_exhaustive_schnorrsig_verify(const secp256k1_context *ctx, cons
|
||||
while (e_count_done < EXHAUSTIVE_TEST_ORDER) {
|
||||
secp256k1_scalar e;
|
||||
unsigned char msg32[32];
|
||||
secp256k1_testrand256(msg32);
|
||||
testrand256(msg32);
|
||||
secp256k1_schnorrsig_challenge(&e, sig64, msg32, sizeof(msg32), pk32);
|
||||
/* Only do work if we hit a challenge we haven't tried before. */
|
||||
if (!e_done[e]) {
|
||||
@@ -120,7 +120,7 @@ static void test_exhaustive_schnorrsig_verify(const secp256k1_context *ctx, cons
|
||||
expect_valid = actual_k != -1 && s != EXHAUSTIVE_TEST_ORDER &&
|
||||
(s == (actual_k + actual_d * e) % EXHAUSTIVE_TEST_ORDER);
|
||||
} else {
|
||||
secp256k1_testrand256(sig64 + 32);
|
||||
testrand256(sig64 + 32);
|
||||
expect_valid = 0;
|
||||
}
|
||||
valid = secp256k1_schnorrsig_verify(ctx, sig64, msg32, sizeof(msg32), &pubkeys[d - 1]);
|
||||
@@ -161,7 +161,7 @@ static void test_exhaustive_schnorrsig_sign(const secp256k1_context *ctx, unsign
|
||||
/* Generate random messages until all challenges have been tried. */
|
||||
while (e_count_done < EXHAUSTIVE_TEST_ORDER) {
|
||||
secp256k1_scalar e;
|
||||
secp256k1_testrand256(msg32);
|
||||
testrand256(msg32);
|
||||
secp256k1_schnorrsig_challenge(&e, xonly_pubkey_bytes[k - 1], msg32, sizeof(msg32), xonly_pubkey_bytes[d - 1]);
|
||||
/* Only do work if we hit a challenge we haven't tried before. */
|
||||
if (!e_done[e]) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
static void nonce_function_bip340_bitflip(unsigned char **args, size_t n_flip, size_t n_bytes, size_t msglen, size_t algolen) {
|
||||
unsigned char nonces[2][32];
|
||||
CHECK(nonce_function_bip340(nonces[0], args[0], msglen, args[1], args[2], args[3], algolen, args[4]) == 1);
|
||||
secp256k1_testrand_flip(args[n_flip], n_bytes);
|
||||
testrand_flip(args[n_flip], n_bytes);
|
||||
CHECK(nonce_function_bip340(nonces[1], args[0], msglen, args[1], args[2], args[3], algolen, args[4]) == 1);
|
||||
CHECK(secp256k1_memcmp_var(nonces[0], nonces[1], 32) != 0);
|
||||
}
|
||||
@@ -50,10 +50,10 @@ static void run_nonce_function_bip340_tests(void) {
|
||||
secp256k1_nonce_function_bip340_sha256_tagged_aux(&sha_optimized);
|
||||
test_sha256_eq(&sha, &sha_optimized);
|
||||
|
||||
secp256k1_testrand256(msg);
|
||||
secp256k1_testrand256(key);
|
||||
secp256k1_testrand256(pk);
|
||||
secp256k1_testrand256(aux_rand);
|
||||
testrand256(msg);
|
||||
testrand256(key);
|
||||
testrand256(pk);
|
||||
testrand256(aux_rand);
|
||||
|
||||
/* Check that a bitflip in an argument results in different nonces. */
|
||||
args[0] = msg;
|
||||
@@ -76,12 +76,12 @@ static void run_nonce_function_bip340_tests(void) {
|
||||
CHECK(nonce_function_bip340(nonce, msg, msglen, key, pk, NULL, 0, NULL) == 0);
|
||||
CHECK(nonce_function_bip340(nonce, msg, msglen, key, pk, algo, algolen, NULL) == 1);
|
||||
/* Other algo is fine */
|
||||
secp256k1_testrand_bytes_test(algo, algolen);
|
||||
testrand_bytes_test(algo, algolen);
|
||||
CHECK(nonce_function_bip340(nonce, msg, msglen, key, pk, algo, algolen, NULL) == 1);
|
||||
|
||||
for (i = 0; i < COUNT; i++) {
|
||||
unsigned char nonce2[32];
|
||||
uint32_t offset = secp256k1_testrand_int(msglen - 1);
|
||||
uint32_t offset = testrand_int(msglen - 1);
|
||||
size_t msglen_tmp = (msglen + offset) % msglen;
|
||||
size_t algolen_tmp;
|
||||
|
||||
@@ -90,7 +90,7 @@ static void run_nonce_function_bip340_tests(void) {
|
||||
CHECK(secp256k1_memcmp_var(nonce, nonce2, 32) != 0);
|
||||
|
||||
/* Different algolen gives different nonce */
|
||||
offset = secp256k1_testrand_int(algolen - 1);
|
||||
offset = testrand_int(algolen - 1);
|
||||
algolen_tmp = (algolen + offset) % algolen;
|
||||
CHECK(nonce_function_bip340(nonce2, msg, msglen, key, pk, algo, algolen_tmp, NULL) == 1);
|
||||
CHECK(secp256k1_memcmp_var(nonce, nonce2, 32) != 0);
|
||||
@@ -116,10 +116,10 @@ static void test_schnorrsig_api(void) {
|
||||
secp256k1_schnorrsig_extraparams extraparams = SECP256K1_SCHNORRSIG_EXTRAPARAMS_INIT;
|
||||
secp256k1_schnorrsig_extraparams invalid_extraparams = {{ 0 }, NULL, NULL};
|
||||
|
||||
secp256k1_testrand256(sk1);
|
||||
secp256k1_testrand256(sk2);
|
||||
secp256k1_testrand256(sk3);
|
||||
secp256k1_testrand256(msg);
|
||||
testrand256(sk1);
|
||||
testrand256(sk2);
|
||||
testrand256(sk3);
|
||||
testrand256(msg);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypairs[0], sk1) == 1);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypairs[1], sk2) == 1);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypairs[2], sk3) == 1);
|
||||
@@ -813,8 +813,8 @@ static void test_schnorrsig_sign(void) {
|
||||
secp256k1_schnorrsig_extraparams extraparams = SECP256K1_SCHNORRSIG_EXTRAPARAMS_INIT;
|
||||
unsigned char aux_rand[32];
|
||||
|
||||
secp256k1_testrand256(sk);
|
||||
secp256k1_testrand256(aux_rand);
|
||||
testrand256(sk);
|
||||
testrand256(aux_rand);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk));
|
||||
CHECK(secp256k1_keypair_xonly_pub(CTX, &pk, NULL, &keypair));
|
||||
CHECK(secp256k1_schnorrsig_sign32(CTX, sig, msg, &keypair, NULL) == 1);
|
||||
@@ -861,12 +861,12 @@ static void test_schnorrsig_sign_verify(void) {
|
||||
secp256k1_xonly_pubkey pk;
|
||||
secp256k1_scalar s;
|
||||
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(sk);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk));
|
||||
CHECK(secp256k1_keypair_xonly_pub(CTX, &pk, NULL, &keypair));
|
||||
|
||||
for (i = 0; i < N_SIGS; i++) {
|
||||
secp256k1_testrand256(msg[i]);
|
||||
testrand256(msg[i]);
|
||||
CHECK(secp256k1_schnorrsig_sign32(CTX, sig[i], msg[i], &keypair, NULL));
|
||||
CHECK(secp256k1_schnorrsig_verify(CTX, sig[i], msg[i], sizeof(msg[i]), &pk));
|
||||
}
|
||||
@@ -874,19 +874,19 @@ static void test_schnorrsig_sign_verify(void) {
|
||||
{
|
||||
/* Flip a few bits in the signature and in the message and check that
|
||||
* verify and verify_batch (TODO) fail */
|
||||
size_t sig_idx = secp256k1_testrand_int(N_SIGS);
|
||||
size_t byte_idx = secp256k1_testrand_bits(5);
|
||||
unsigned char xorbyte = secp256k1_testrand_int(254)+1;
|
||||
size_t sig_idx = testrand_int(N_SIGS);
|
||||
size_t byte_idx = testrand_bits(5);
|
||||
unsigned char xorbyte = testrand_int(254)+1;
|
||||
sig[sig_idx][byte_idx] ^= xorbyte;
|
||||
CHECK(!secp256k1_schnorrsig_verify(CTX, sig[sig_idx], msg[sig_idx], sizeof(msg[sig_idx]), &pk));
|
||||
sig[sig_idx][byte_idx] ^= xorbyte;
|
||||
|
||||
byte_idx = secp256k1_testrand_bits(5);
|
||||
byte_idx = testrand_bits(5);
|
||||
sig[sig_idx][32+byte_idx] ^= xorbyte;
|
||||
CHECK(!secp256k1_schnorrsig_verify(CTX, sig[sig_idx], msg[sig_idx], sizeof(msg[sig_idx]), &pk));
|
||||
sig[sig_idx][32+byte_idx] ^= xorbyte;
|
||||
|
||||
byte_idx = secp256k1_testrand_bits(5);
|
||||
byte_idx = testrand_bits(5);
|
||||
msg[sig_idx][byte_idx] ^= xorbyte;
|
||||
CHECK(!secp256k1_schnorrsig_verify(CTX, sig[sig_idx], msg[sig_idx], sizeof(msg[sig_idx]), &pk));
|
||||
msg[sig_idx][byte_idx] ^= xorbyte;
|
||||
@@ -916,9 +916,9 @@ static void test_schnorrsig_sign_verify(void) {
|
||||
{
|
||||
/* Test varying message lengths */
|
||||
unsigned char msg_large[32 * 8];
|
||||
uint32_t msglen = secp256k1_testrand_int(sizeof(msg_large));
|
||||
uint32_t msglen = testrand_int(sizeof(msg_large));
|
||||
for (i = 0; i < sizeof(msg_large); i += 32) {
|
||||
secp256k1_testrand256(&msg_large[i]);
|
||||
testrand256(&msg_large[i]);
|
||||
}
|
||||
CHECK(secp256k1_schnorrsig_sign_custom(CTX, sig[0], msg_large, msglen, &keypair, NULL) == 1);
|
||||
CHECK(secp256k1_schnorrsig_verify(CTX, sig[0], msg_large, msglen, &pk) == 1);
|
||||
@@ -942,7 +942,7 @@ static void test_schnorrsig_taproot(void) {
|
||||
unsigned char sig[64];
|
||||
|
||||
/* Create output key */
|
||||
secp256k1_testrand256(sk);
|
||||
testrand256(sk);
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk) == 1);
|
||||
CHECK(secp256k1_keypair_xonly_pub(CTX, &internal_pk, NULL, &keypair) == 1);
|
||||
/* In actual taproot the tweak would be hash of internal_pk */
|
||||
@@ -952,7 +952,7 @@ static void test_schnorrsig_taproot(void) {
|
||||
CHECK(secp256k1_xonly_pubkey_serialize(CTX, output_pk_bytes, &output_pk) == 1);
|
||||
|
||||
/* Key spend */
|
||||
secp256k1_testrand256(msg);
|
||||
testrand256(msg);
|
||||
CHECK(secp256k1_schnorrsig_sign32(CTX, sig, msg, &keypair, NULL) == 1);
|
||||
/* Verify key spend */
|
||||
CHECK(secp256k1_xonly_pubkey_parse(CTX, &output_pk, output_pk_bytes) == 1);
|
||||
|
||||
@@ -23,8 +23,8 @@ void test_schnorrsig_aggregate_input_helper(secp256k1_xonly_pubkey *pubkeys, uns
|
||||
for (i = 0; i < n; ++i) {
|
||||
unsigned char sk[32];
|
||||
secp256k1_keypair keypair;
|
||||
secp256k1_testrand256(sk);
|
||||
secp256k1_testrand256(&msgs32[i*32]);
|
||||
testrand256(sk);
|
||||
testrand256(&msgs32[i*32]);
|
||||
|
||||
CHECK(secp256k1_keypair_create(CTX, &keypair, sk));
|
||||
CHECK(secp256k1_keypair_xonly_pub(CTX, &pubkeys[i], NULL, &keypair));
|
||||
@@ -43,8 +43,8 @@ void test_schnorrsig_aggregate(void) {
|
||||
unsigned char aggsig[32*(N_MAX + 1) + 17];
|
||||
size_t aggsig_len = sizeof(aggsig);
|
||||
|
||||
size_t n = secp256k1_testrand_int(N_MAX + 1);
|
||||
size_t n_initial = secp256k1_testrand_int(n + 1);
|
||||
size_t n = testrand_int(N_MAX + 1);
|
||||
size_t n_initial = testrand_int(n + 1);
|
||||
size_t n_new = n - n_initial;
|
||||
test_schnorrsig_aggregate_input_helper(pubkeys, msgs32, sigs64, n);
|
||||
|
||||
@@ -168,8 +168,8 @@ void test_schnorrsig_aggverify_spec_vectors(void) {
|
||||
}
|
||||
|
||||
static void test_schnorrsig_aggregate_api(void) {
|
||||
size_t n = secp256k1_testrand_int(N_MAX + 1);
|
||||
size_t n_initial = secp256k1_testrand_int(n + 1);
|
||||
size_t n = testrand_int(N_MAX + 1);
|
||||
size_t n_initial = testrand_int(n + 1);
|
||||
size_t n_new = n - n_initial;
|
||||
|
||||
/* Test preparation. */
|
||||
@@ -249,7 +249,7 @@ static void test_schnorrsig_aggregate_unforge(void) {
|
||||
unsigned char sigs64[N_MAX*64];
|
||||
unsigned char aggsig[32*(N_MAX + 1)];
|
||||
|
||||
size_t n = secp256k1_testrand_int(N_MAX + 1);
|
||||
size_t n = testrand_int(N_MAX + 1);
|
||||
|
||||
/* Test 1: We fix a set of n messages and compute
|
||||
* a random aggsig for them. This should not verify. */
|
||||
@@ -259,7 +259,7 @@ static void test_schnorrsig_aggregate_unforge(void) {
|
||||
size_t i;
|
||||
/* Sample aggsig randomly */
|
||||
for (i = 0; i < n + 1; ++i) {
|
||||
secp256k1_testrand256(&aggsig[i*32]);
|
||||
testrand256(&aggsig[i*32]);
|
||||
}
|
||||
/* Make sure that it does not verify */
|
||||
CHECK(secp256k1_schnorrsig_aggverify(CTX, pubkeys, msgs32, n, aggsig, aggsig_len) == 0);
|
||||
@@ -272,9 +272,9 @@ static void test_schnorrsig_aggregate_unforge(void) {
|
||||
if (n > 0) {
|
||||
size_t aggsig_len = sizeof(aggsig);
|
||||
/* Replace a randomly chosen real sig with a random one. */
|
||||
size_t k = secp256k1_testrand_int(n);
|
||||
secp256k1_testrand256(&sigs64[k*64]);
|
||||
secp256k1_testrand256(&sigs64[k*64+32]);
|
||||
size_t k = testrand_int(n);
|
||||
testrand256(&sigs64[k*64]);
|
||||
testrand256(&sigs64[k*64+32]);
|
||||
/* Aggregate the n signatures */
|
||||
CHECK(secp256k1_schnorrsig_aggregate(CTX, aggsig, &aggsig_len, pubkeys, msgs32, sigs64, n));
|
||||
/* Make sure the result does not verify */
|
||||
@@ -290,7 +290,7 @@ static void test_schnorrsig_aggregate_unforge(void) {
|
||||
/* Aggregate the n signatures */
|
||||
CHECK(secp256k1_schnorrsig_aggregate(CTX, aggsig, &aggsig_len, pubkeys, msgs32, sigs64, n));
|
||||
/* Change one of the messages */
|
||||
k = secp256k1_testrand_int(32*n);
|
||||
k = testrand_int(32*n);
|
||||
msgs32[k] = msgs32[k]^0xff;
|
||||
/* Make sure the result does not verify */
|
||||
CHECK(secp256k1_schnorrsig_aggverify(CTX, pubkeys, msgs32, n, aggsig, aggsig_len) == 0);
|
||||
@@ -304,7 +304,7 @@ static void test_schnorrsig_aggregate_overflow(void) {
|
||||
unsigned char msgs32[N_MAX*32];
|
||||
unsigned char sigs64[N_MAX*64];
|
||||
unsigned char aggsig[32*(N_MAX + 1)];
|
||||
size_t n = secp256k1_testrand_int(N_MAX + 1);
|
||||
size_t n = testrand_int(N_MAX + 1);
|
||||
|
||||
/* We check that verification returns 0 if the s in aggsig overflows. */
|
||||
test_schnorrsig_aggregate_input_helper(pubkeys, msgs32, sigs64, n);
|
||||
|
||||
@@ -29,14 +29,14 @@ static void test_surjectionproof_api(void) {
|
||||
size_t input_index;
|
||||
size_t i;
|
||||
|
||||
secp256k1_testrand256(seed);
|
||||
testrand256(seed);
|
||||
|
||||
for (i = 0; i < n_inputs; i++) {
|
||||
secp256k1_testrand256(input_blinding_key[i]);
|
||||
secp256k1_testrand256(fixed_input_tags[i].data);
|
||||
testrand256(input_blinding_key[i]);
|
||||
testrand256(fixed_input_tags[i].data);
|
||||
CHECK(secp256k1_generator_generate_blinded(CTX, &ephemeral_input_tags[i], fixed_input_tags[i].data, input_blinding_key[i]));
|
||||
}
|
||||
secp256k1_testrand256(output_blinding_key);
|
||||
testrand256(output_blinding_key);
|
||||
memcpy(&fixed_output_tag, &fixed_input_tags[0], sizeof(fixed_input_tags[0]));
|
||||
CHECK(secp256k1_generator_generate_blinded(CTX, &ephemeral_output_tag, fixed_output_tag.data, output_blinding_key));
|
||||
|
||||
@@ -149,10 +149,10 @@ static void test_input_selection(size_t n_inputs) {
|
||||
const size_t max_n_inputs = sizeof(fixed_input_tags) / sizeof(fixed_input_tags[0]) - 1;
|
||||
|
||||
CHECK(n_inputs < max_n_inputs);
|
||||
secp256k1_testrand256(seed);
|
||||
testrand256(seed);
|
||||
|
||||
for (i = 0; i < n_inputs + 1; i++) {
|
||||
secp256k1_testrand256(fixed_input_tags[i].data);
|
||||
testrand256(fixed_input_tags[i].data);
|
||||
}
|
||||
|
||||
/* cannot match output when told to use zero keys */
|
||||
@@ -217,7 +217,7 @@ static void test_input_selection_distribution_helper(const secp256k1_fixed_asset
|
||||
used_inputs[i] = 0;
|
||||
}
|
||||
for(j = 0; j < 10000; j++) {
|
||||
secp256k1_testrand256(seed);
|
||||
testrand256(seed);
|
||||
result = secp256k1_surjectionproof_initialize(CTX, &proof, &input_index, fixed_input_tags, n_input_tags, n_input_tags_to_use, &fixed_input_tags[0], 64, seed);
|
||||
CHECK(result > 0);
|
||||
|
||||
@@ -240,7 +240,7 @@ static void test_input_selection_distribution(void) {
|
||||
size_t used_inputs[4];
|
||||
|
||||
for (i = 0; i < n_inputs; i++) {
|
||||
secp256k1_testrand256(fixed_input_tags[i].data);
|
||||
testrand256(fixed_input_tags[i].data);
|
||||
}
|
||||
|
||||
/* If there is one input tag to use, initialize must choose the one equal to fixed_output_tag. */
|
||||
@@ -323,16 +323,16 @@ static void test_gen_verify(size_t n_inputs, size_t n_used) {
|
||||
/* setup */
|
||||
CHECK(n_used <= n_inputs);
|
||||
CHECK(n_inputs < max_n_inputs);
|
||||
secp256k1_testrand256(seed);
|
||||
testrand256(seed);
|
||||
|
||||
key_index = (((size_t) seed[0] << 8) + seed[1]) % n_inputs;
|
||||
|
||||
for (i = 0; i < n_inputs + 1; i++) {
|
||||
input_blinding_key[i] = malloc(32);
|
||||
secp256k1_testrand256(input_blinding_key[i]);
|
||||
testrand256(input_blinding_key[i]);
|
||||
/* choose random fixed tag, except that for the output one copy from the key_index */
|
||||
if (i < n_inputs) {
|
||||
secp256k1_testrand256(fixed_input_tags[i].data);
|
||||
testrand256(fixed_input_tags[i].data);
|
||||
} else {
|
||||
memcpy(&fixed_input_tags[i], &fixed_input_tags[key_index], sizeof(fixed_input_tags[i]));
|
||||
}
|
||||
@@ -412,11 +412,11 @@ static void test_no_used_inputs_verify(void) {
|
||||
memset(proof.used_inputs, 0, SECP256K1_SURJECTIONPROOF_MAX_N_INPUTS / 8);
|
||||
|
||||
/* create different fixed input and output tags */
|
||||
secp256k1_testrand256(fixed_input_tag.data);
|
||||
secp256k1_testrand256(fixed_output_tag.data);
|
||||
testrand256(fixed_input_tag.data);
|
||||
testrand256(fixed_output_tag.data);
|
||||
|
||||
/* blind fixed output tags with random blinding key */
|
||||
secp256k1_testrand256(blinding_key);
|
||||
testrand256(blinding_key);
|
||||
CHECK(secp256k1_generator_generate_blinded(CTX, &ephemeral_input_tags[0], fixed_input_tag.data, blinding_key));
|
||||
CHECK(secp256k1_generator_generate_blinded(CTX, &ephemeral_output_tag, fixed_output_tag.data, blinding_key));
|
||||
|
||||
@@ -464,9 +464,9 @@ static void test_input_eq_output(void) {
|
||||
unsigned char entropy[32];
|
||||
size_t input_index;
|
||||
|
||||
secp256k1_testrand256(fixed_tag.data);
|
||||
secp256k1_testrand256(blinding_key);
|
||||
secp256k1_testrand256(entropy);
|
||||
testrand256(fixed_tag.data);
|
||||
testrand256(blinding_key);
|
||||
testrand256(entropy);
|
||||
|
||||
CHECK(secp256k1_surjectionproof_initialize(CTX, &proof, &input_index, &fixed_tag, 1, 1, &fixed_tag, 100, entropy) == 1);
|
||||
CHECK(input_index == 0);
|
||||
|
||||
@@ -54,7 +54,7 @@ static void test_whitelist_end_to_end(const size_t n_keys, int test_all_keys) {
|
||||
/* Generate random keys */
|
||||
size_t i;
|
||||
/* Start with subkey */
|
||||
random_scalar_order_test(&ssub);
|
||||
testutil_random_scalar_order_test(&ssub);
|
||||
secp256k1_scalar_get_b32(csub, &ssub);
|
||||
CHECK(secp256k1_ec_seckey_verify(CTX, csub) == 1);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &sub_pubkey, csub) == 1);
|
||||
@@ -66,12 +66,12 @@ static void test_whitelist_end_to_end(const size_t n_keys, int test_all_keys) {
|
||||
summed_seckey[i] = (unsigned char *) malloc(32);
|
||||
|
||||
/* Create two keys */
|
||||
random_scalar_order_test(&son);
|
||||
testutil_random_scalar_order_test(&son);
|
||||
secp256k1_scalar_get_b32(online_seckey[i], &son);
|
||||
CHECK(secp256k1_ec_seckey_verify(CTX, online_seckey[i]) == 1);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &online_pubkeys[i], online_seckey[i]) == 1);
|
||||
|
||||
random_scalar_order_test(&soff);
|
||||
testutil_random_scalar_order_test(&soff);
|
||||
secp256k1_scalar_get_b32(summed_seckey[i], &soff);
|
||||
CHECK(secp256k1_ec_seckey_verify(CTX, summed_seckey[i]) == 1);
|
||||
CHECK(secp256k1_ec_pubkey_create(CTX, &offline_pubkeys[i], summed_seckey[i]) == 1);
|
||||
@@ -88,7 +88,7 @@ static void test_whitelist_end_to_end(const size_t n_keys, int test_all_keys) {
|
||||
test_whitelist_end_to_end_internal(summed_seckey[i], online_seckey[i], online_pubkeys, offline_pubkeys, &sub_pubkey, i, n_keys);
|
||||
}
|
||||
} else {
|
||||
uint32_t rand_idx = secp256k1_testrand_int(n_keys-1);
|
||||
uint32_t rand_idx = testrand_int(n_keys-1);
|
||||
test_whitelist_end_to_end_internal(summed_seckey[0], online_seckey[0], online_pubkeys, offline_pubkeys, &sub_pubkey, 0, n_keys);
|
||||
test_whitelist_end_to_end_internal(summed_seckey[rand_idx], online_seckey[rand_idx], online_pubkeys, offline_pubkeys, &sub_pubkey, rand_idx, n_keys);
|
||||
test_whitelist_end_to_end_internal(summed_seckey[n_keys-1], online_seckey[n_keys-1], online_pubkeys, offline_pubkeys, &sub_pubkey, n_keys-1, n_keys);
|
||||
|
||||
+12
-12
@@ -12,40 +12,40 @@
|
||||
/* A non-cryptographic RNG used only for test infrastructure. */
|
||||
|
||||
/** Seed the pseudorandom number generator for testing. */
|
||||
SECP256K1_INLINE static void secp256k1_testrand_seed(const unsigned char *seed16);
|
||||
SECP256K1_INLINE static void testrand_seed(const unsigned char *seed16);
|
||||
|
||||
/** Generate a pseudorandom number in the range [0..2**32-1]. */
|
||||
SECP256K1_INLINE static uint32_t secp256k1_testrand32(void);
|
||||
SECP256K1_INLINE static uint32_t testrand32(void);
|
||||
|
||||
/** Generate a pseudorandom number in the range [0..2**64-1]. */
|
||||
SECP256K1_INLINE static uint64_t secp256k1_testrand64(void);
|
||||
SECP256K1_INLINE static uint64_t testrand64(void);
|
||||
|
||||
/** Generate a pseudorandom number in the range [0..2**bits-1]. Bits must be 1 or
|
||||
* more. */
|
||||
SECP256K1_INLINE static uint64_t secp256k1_testrand_bits(int bits);
|
||||
SECP256K1_INLINE static uint64_t testrand_bits(int bits);
|
||||
|
||||
/** Generate a pseudorandom number in the range [0..range-1]. */
|
||||
static uint32_t secp256k1_testrand_int(uint32_t range);
|
||||
static uint32_t testrand_int(uint32_t range);
|
||||
|
||||
/** Generate a pseudorandom 32-byte array. */
|
||||
static void secp256k1_testrand256(unsigned char *b32);
|
||||
static void testrand256(unsigned char *b32);
|
||||
|
||||
/** Generate a pseudorandom 32-byte array with long sequences of zero and one bits. */
|
||||
static void secp256k1_testrand256_test(unsigned char *b32);
|
||||
static void testrand256_test(unsigned char *b32);
|
||||
|
||||
/** Generate pseudorandom bytes with long sequences of zero and one bits. */
|
||||
static void secp256k1_testrand_bytes_test(unsigned char *bytes, size_t len);
|
||||
static void testrand_bytes_test(unsigned char *bytes, size_t len);
|
||||
|
||||
/** Generate a pseudorandom 64-bit integer in the range min..max, inclusive. */
|
||||
static int64_t secp256k1_testrandi64(uint64_t min, uint64_t max);
|
||||
static int64_t testrandi64(uint64_t min, uint64_t max);
|
||||
|
||||
/** Flip a single random bit in a byte array */
|
||||
static void secp256k1_testrand_flip(unsigned char *b, size_t len);
|
||||
static void testrand_flip(unsigned char *b, size_t len);
|
||||
|
||||
/** Initialize the test RNG using (hex encoded) array up to 16 bytes, or randomly if hexseed is NULL. */
|
||||
static void secp256k1_testrand_init(const char* hexseed);
|
||||
static void testrand_init(const char* hexseed);
|
||||
|
||||
/** Print final test information. */
|
||||
static void secp256k1_testrand_finish(void);
|
||||
static void testrand_finish(void);
|
||||
|
||||
#endif /* SECP256K1_TESTRAND_H */
|
||||
+23
-23
@@ -18,7 +18,7 @@
|
||||
|
||||
static uint64_t secp256k1_test_state[4];
|
||||
|
||||
SECP256K1_INLINE static void secp256k1_testrand_seed(const unsigned char *seed16) {
|
||||
SECP256K1_INLINE static void testrand_seed(const unsigned char *seed16) {
|
||||
static const unsigned char PREFIX[] = {'s', 'e', 'c', 'p', '2', '5', '6', 'k', '1', ' ', 't', 'e', 's', 't', ' ', 'i', 'n', 'i', 't'};
|
||||
unsigned char out32[32];
|
||||
secp256k1_sha256 hash;
|
||||
@@ -41,7 +41,7 @@ SECP256K1_INLINE static uint64_t rotl(const uint64_t x, int k) {
|
||||
return (x << k) | (x >> (64 - k));
|
||||
}
|
||||
|
||||
SECP256K1_INLINE static uint64_t secp256k1_testrand64(void) {
|
||||
SECP256K1_INLINE static uint64_t testrand64(void) {
|
||||
/* Test-only Xoshiro256++ RNG. See https://prng.di.unimi.it/ */
|
||||
const uint64_t result = rotl(secp256k1_test_state[0] + secp256k1_test_state[3], 23) + secp256k1_test_state[0];
|
||||
const uint64_t t = secp256k1_test_state[1] << 17;
|
||||
@@ -54,16 +54,16 @@ SECP256K1_INLINE static uint64_t secp256k1_testrand64(void) {
|
||||
return result;
|
||||
}
|
||||
|
||||
SECP256K1_INLINE static uint64_t secp256k1_testrand_bits(int bits) {
|
||||
SECP256K1_INLINE static uint64_t testrand_bits(int bits) {
|
||||
if (bits == 0) return 0;
|
||||
return secp256k1_testrand64() >> (64 - bits);
|
||||
return testrand64() >> (64 - bits);
|
||||
}
|
||||
|
||||
SECP256K1_INLINE static uint32_t secp256k1_testrand32(void) {
|
||||
return secp256k1_testrand64() >> 32;
|
||||
SECP256K1_INLINE static uint32_t testrand32(void) {
|
||||
return testrand64() >> 32;
|
||||
}
|
||||
|
||||
static uint32_t secp256k1_testrand_int(uint32_t range) {
|
||||
static uint32_t testrand_int(uint32_t range) {
|
||||
uint32_t mask = 0;
|
||||
uint32_t range_copy;
|
||||
/* Reduce range by 1, changing its meaning to "maximum value". */
|
||||
@@ -77,15 +77,15 @@ static uint32_t secp256k1_testrand_int(uint32_t range) {
|
||||
}
|
||||
/* Generation loop. */
|
||||
while (1) {
|
||||
uint32_t val = secp256k1_testrand64() & mask;
|
||||
uint32_t val = testrand64() & mask;
|
||||
if (val <= range) return val;
|
||||
}
|
||||
}
|
||||
|
||||
static void secp256k1_testrand256(unsigned char *b32) {
|
||||
static void testrand256(unsigned char *b32) {
|
||||
int i;
|
||||
for (i = 0; i < 4; ++i) {
|
||||
uint64_t val = secp256k1_testrand64();
|
||||
uint64_t val = testrand64();
|
||||
b32[0] = val;
|
||||
b32[1] = val >> 8;
|
||||
b32[2] = val >> 16;
|
||||
@@ -98,14 +98,14 @@ static void secp256k1_testrand256(unsigned char *b32) {
|
||||
}
|
||||
}
|
||||
|
||||
static void secp256k1_testrand_bytes_test(unsigned char *bytes, size_t len) {
|
||||
static void testrand_bytes_test(unsigned char *bytes, size_t len) {
|
||||
size_t bits = 0;
|
||||
memset(bytes, 0, len);
|
||||
while (bits < len * 8) {
|
||||
int now;
|
||||
uint32_t val;
|
||||
now = 1 + (secp256k1_testrand_bits(6) * secp256k1_testrand_bits(5) + 16) / 31;
|
||||
val = secp256k1_testrand_bits(1);
|
||||
now = 1 + (testrand_bits(6) * testrand_bits(5) + 16) / 31;
|
||||
val = testrand_bits(1);
|
||||
while (now > 0 && bits < len * 8) {
|
||||
bytes[bits / 8] |= val << (bits % 8);
|
||||
now--;
|
||||
@@ -114,11 +114,11 @@ static void secp256k1_testrand_bytes_test(unsigned char *bytes, size_t len) {
|
||||
}
|
||||
}
|
||||
|
||||
static void secp256k1_testrand256_test(unsigned char *b32) {
|
||||
secp256k1_testrand_bytes_test(b32, 32);
|
||||
static void testrand256_test(unsigned char *b32) {
|
||||
testrand_bytes_test(b32, 32);
|
||||
}
|
||||
|
||||
SECP256K1_INLINE static int64_t secp256k1_testrandi64(uint64_t min, uint64_t max) {
|
||||
SECP256K1_INLINE static int64_t testrandi64(uint64_t min, uint64_t max) {
|
||||
uint64_t range;
|
||||
uint64_t r;
|
||||
uint64_t clz;
|
||||
@@ -129,17 +129,17 @@ SECP256K1_INLINE static int64_t secp256k1_testrandi64(uint64_t min, uint64_t max
|
||||
range = max - min;
|
||||
clz = secp256k1_clz64_var(range);
|
||||
do {
|
||||
r = ((uint64_t)secp256k1_testrand32() << 32) | secp256k1_testrand32();
|
||||
r = ((uint64_t)testrand32() << 32) | testrand32();
|
||||
r >>= clz;
|
||||
} while (r > range);
|
||||
return min + (int64_t)r;
|
||||
}
|
||||
|
||||
static void secp256k1_testrand_flip(unsigned char *b, size_t len) {
|
||||
b[secp256k1_testrand_int(len)] ^= (1 << secp256k1_testrand_bits(3));
|
||||
static void testrand_flip(unsigned char *b, size_t len) {
|
||||
b[testrand_int(len)] ^= (1 << testrand_bits(3));
|
||||
}
|
||||
|
||||
static void secp256k1_testrand_init(const char* hexseed) {
|
||||
static void testrand_init(const char* hexseed) {
|
||||
unsigned char seed16[16] = {0};
|
||||
if (hexseed && strlen(hexseed) != 0) {
|
||||
int pos = 0;
|
||||
@@ -173,12 +173,12 @@ static void secp256k1_testrand_init(const char* hexseed) {
|
||||
}
|
||||
|
||||
printf("random seed = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", seed16[0], seed16[1], seed16[2], seed16[3], seed16[4], seed16[5], seed16[6], seed16[7], seed16[8], seed16[9], seed16[10], seed16[11], seed16[12], seed16[13], seed16[14], seed16[15]);
|
||||
secp256k1_testrand_seed(seed16);
|
||||
testrand_seed(seed16);
|
||||
}
|
||||
|
||||
static void secp256k1_testrand_finish(void) {
|
||||
static void testrand_finish(void) {
|
||||
unsigned char run32[32];
|
||||
secp256k1_testrand256(run32);
|
||||
testrand256(run32);
|
||||
printf("random run = %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", run32[0], run32[1], run32[2], run32[3], run32[4], run32[5], run32[6], run32[7], run32[8], run32[9], run32[10], run32[11], run32[12], run32[13], run32[14], run32[15]);
|
||||
}
|
||||
|
||||
|
||||
+183
-299
File diff suppressed because it is too large.
Load diff
@@ -171,7 +171,7 @@ static void test_exhaustive_ecmult(const secp256k1_ge *group, const secp256k1_ge
|
||||
CHECK(secp256k1_fe_equal(&tmpf, &group[(i * j) % EXHAUSTIVE_TEST_ORDER].x));
|
||||
|
||||
/* Test secp256k1_ecmult_const_xonly with all curve X coordinates, with random xd. */
|
||||
random_fe_non_zero(&xd);
|
||||
testutil_random_fe_non_zero(&xd);
|
||||
secp256k1_fe_mul(&xn, &xd, &group[i].x);
|
||||
ret = secp256k1_ecmult_const_xonly(&tmpf, &xn, &xd, &ng, 0);
|
||||
CHECK(ret);
|
||||
@@ -375,7 +375,7 @@ int main(int argc, char** argv) {
|
||||
printf("test count = %i\n", count);
|
||||
|
||||
/* find random seed */
|
||||
secp256k1_testrand_init(argc > 2 ? argv[2] : NULL);
|
||||
testrand_init(argc > 2 ? argv[2] : NULL);
|
||||
|
||||
/* set up split processing */
|
||||
if (argc > 4) {
|
||||
@@ -395,7 +395,7 @@ int main(int argc, char** argv) {
|
||||
while (count--) {
|
||||
/* Build context */
|
||||
ctx = secp256k1_context_create(SECP256K1_CONTEXT_NONE);
|
||||
secp256k1_testrand256(rand32);
|
||||
testrand256(rand32);
|
||||
CHECK(secp256k1_context_randomize(ctx, rand32));
|
||||
|
||||
/* Generate the entire group */
|
||||
@@ -408,7 +408,7 @@ int main(int argc, char** argv) {
|
||||
/* Set a different random z-value for each Jacobian point, except z=1
|
||||
is used in the last iteration. */
|
||||
secp256k1_fe z;
|
||||
random_fe(&z);
|
||||
testutil_random_fe(&z);
|
||||
secp256k1_gej_rescale(&groupj[i], &z);
|
||||
}
|
||||
|
||||
@@ -459,7 +459,7 @@ int main(int argc, char** argv) {
|
||||
secp256k1_context_destroy(ctx);
|
||||
}
|
||||
|
||||
secp256k1_testrand_finish();
|
||||
testrand_finish();
|
||||
|
||||
printf("no problems found\n");
|
||||
return 0;
|
||||
|
||||
+117
-4
@@ -7,23 +7,136 @@
|
||||
#define SECP256K1_TESTUTIL_H
|
||||
|
||||
#include "field.h"
|
||||
#include "group.h"
|
||||
#include "testrand.h"
|
||||
#include "util.h"
|
||||
|
||||
static void random_fe(secp256k1_fe *x) {
|
||||
static void testutil_random_fe(secp256k1_fe *x) {
|
||||
unsigned char bin[32];
|
||||
do {
|
||||
secp256k1_testrand256(bin);
|
||||
testrand256(bin);
|
||||
if (secp256k1_fe_set_b32_limit(x, bin)) {
|
||||
return;
|
||||
}
|
||||
} while(1);
|
||||
}
|
||||
|
||||
static void random_fe_non_zero(secp256k1_fe *nz) {
|
||||
static void testutil_random_fe_non_zero(secp256k1_fe *nz) {
|
||||
do {
|
||||
random_fe(nz);
|
||||
testutil_random_fe(nz);
|
||||
} while (secp256k1_fe_is_zero(nz));
|
||||
}
|
||||
|
||||
static void testutil_random_fe_magnitude(secp256k1_fe *fe, int m) {
|
||||
secp256k1_fe zero;
|
||||
int n = testrand_int(m + 1);
|
||||
secp256k1_fe_normalize(fe);
|
||||
if (n == 0) {
|
||||
return;
|
||||
}
|
||||
secp256k1_fe_clear(&zero);
|
||||
secp256k1_fe_negate(&zero, &zero, 0);
|
||||
secp256k1_fe_mul_int_unchecked(&zero, n - 1);
|
||||
secp256k1_fe_add(fe, &zero);
|
||||
#ifdef VERIFY
|
||||
CHECK(fe->magnitude == n);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void testutil_random_fe_test(secp256k1_fe *x) {
|
||||
unsigned char bin[32];
|
||||
do {
|
||||
testrand256_test(bin);
|
||||
if (secp256k1_fe_set_b32_limit(x, bin)) {
|
||||
return;
|
||||
}
|
||||
} while(1);
|
||||
}
|
||||
|
||||
static void testutil_random_fe_non_zero_test(secp256k1_fe *fe) {
|
||||
do {
|
||||
testutil_random_fe_test(fe);
|
||||
} while(secp256k1_fe_is_zero(fe));
|
||||
}
|
||||
|
||||
static void testutil_random_ge_x_magnitude(secp256k1_ge *ge) {
|
||||
testutil_random_fe_magnitude(&ge->x, SECP256K1_GE_X_MAGNITUDE_MAX);
|
||||
}
|
||||
|
||||
static void testutil_random_ge_y_magnitude(secp256k1_ge *ge) {
|
||||
testutil_random_fe_magnitude(&ge->y, SECP256K1_GE_Y_MAGNITUDE_MAX);
|
||||
}
|
||||
|
||||
static void testutil_random_gej_x_magnitude(secp256k1_gej *gej) {
|
||||
testutil_random_fe_magnitude(&gej->x, SECP256K1_GEJ_X_MAGNITUDE_MAX);
|
||||
}
|
||||
|
||||
static void testutil_random_gej_y_magnitude(secp256k1_gej *gej) {
|
||||
testutil_random_fe_magnitude(&gej->y, SECP256K1_GEJ_Y_MAGNITUDE_MAX);
|
||||
}
|
||||
|
||||
static void testutil_random_gej_z_magnitude(secp256k1_gej *gej) {
|
||||
testutil_random_fe_magnitude(&gej->z, SECP256K1_GEJ_Z_MAGNITUDE_MAX);
|
||||
}
|
||||
|
||||
static void testutil_random_ge_test(secp256k1_ge *ge) {
|
||||
secp256k1_fe fe;
|
||||
do {
|
||||
testutil_random_fe_test(&fe);
|
||||
if (secp256k1_ge_set_xo_var(ge, &fe, testrand_bits(1))) {
|
||||
secp256k1_fe_normalize(&ge->y);
|
||||
break;
|
||||
}
|
||||
} while(1);
|
||||
ge->infinity = 0;
|
||||
}
|
||||
|
||||
static void testutil_random_ge_jacobian_test(secp256k1_gej *gej, const secp256k1_ge *ge) {
|
||||
secp256k1_fe z2, z3;
|
||||
testutil_random_fe_non_zero_test(&gej->z);
|
||||
secp256k1_fe_sqr(&z2, &gej->z);
|
||||
secp256k1_fe_mul(&z3, &z2, &gej->z);
|
||||
secp256k1_fe_mul(&gej->x, &ge->x, &z2);
|
||||
secp256k1_fe_mul(&gej->y, &ge->y, &z3);
|
||||
gej->infinity = ge->infinity;
|
||||
}
|
||||
|
||||
static void testutil_random_gej_test(secp256k1_gej *gej) {
|
||||
secp256k1_ge ge;
|
||||
testutil_random_ge_test(&ge);
|
||||
testutil_random_ge_jacobian_test(gej, &ge);
|
||||
}
|
||||
|
||||
static void testutil_random_scalar_order_test(secp256k1_scalar *num) {
|
||||
do {
|
||||
unsigned char b32[32];
|
||||
int overflow = 0;
|
||||
testrand256_test(b32);
|
||||
secp256k1_scalar_set_b32(num, b32, &overflow);
|
||||
if (overflow || secp256k1_scalar_is_zero(num)) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
} while(1);
|
||||
}
|
||||
|
||||
static void testutil_random_scalar_order(secp256k1_scalar *num) {
|
||||
do {
|
||||
unsigned char b32[32];
|
||||
int overflow = 0;
|
||||
testrand256(b32);
|
||||
secp256k1_scalar_set_b32(num, b32, &overflow);
|
||||
if (overflow || secp256k1_scalar_is_zero(num)) {
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
} while(1);
|
||||
}
|
||||
|
||||
static void testutil_random_scalar_order_b32(unsigned char *b32) {
|
||||
secp256k1_scalar num;
|
||||
testutil_random_scalar_order(&num);
|
||||
secp256k1_scalar_get_b32(b32, &num);
|
||||
}
|
||||
|
||||
#endif /* SECP256K1_TESTUTIL_H */
|
||||
Reference in new issue
Block a user