mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-12 11:19:08 -05:00
ecdh: test NULL-checking of arguments
Boosts the ECDH module to 100% coverage
This commit is contained in:
parent
25e3cfbf9b
commit
6f8ae2f3c0
2 changed files with 31 additions and 1 deletions
|
@ -16,10 +16,10 @@ int secp256k1_ecdh(const secp256k1_context* ctx, unsigned char *result, const se
|
||||||
secp256k1_gej res;
|
secp256k1_gej res;
|
||||||
secp256k1_ge pt;
|
secp256k1_ge pt;
|
||||||
secp256k1_scalar s;
|
secp256k1_scalar s;
|
||||||
|
VERIFY_CHECK(ctx != NULL);
|
||||||
ARG_CHECK(result != NULL);
|
ARG_CHECK(result != NULL);
|
||||||
ARG_CHECK(point != NULL);
|
ARG_CHECK(point != NULL);
|
||||||
ARG_CHECK(scalar != NULL);
|
ARG_CHECK(scalar != NULL);
|
||||||
(void)ctx;
|
|
||||||
|
|
||||||
secp256k1_pubkey_load(ctx, &pt, point);
|
secp256k1_pubkey_load(ctx, &pt, point);
|
||||||
secp256k1_scalar_set_b32(&s, scalar, &overflow);
|
secp256k1_scalar_set_b32(&s, scalar, &overflow);
|
||||||
|
|
|
@ -7,6 +7,35 @@
|
||||||
#ifndef _SECP256K1_MODULE_ECDH_TESTS_
|
#ifndef _SECP256K1_MODULE_ECDH_TESTS_
|
||||||
#define _SECP256K1_MODULE_ECDH_TESTS_
|
#define _SECP256K1_MODULE_ECDH_TESTS_
|
||||||
|
|
||||||
|
void test_ecdh_api(void) {
|
||||||
|
/* Setup context that just counts errors */
|
||||||
|
secp256k1_context *tctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
|
||||||
|
secp256k1_pubkey point;
|
||||||
|
unsigned char res[32];
|
||||||
|
unsigned char s_one[32] = { 0 };
|
||||||
|
int32_t ecount = 0;
|
||||||
|
s_one[31] = 1;
|
||||||
|
|
||||||
|
secp256k1_context_set_error_callback(tctx, counting_illegal_callback_fn, &ecount);
|
||||||
|
secp256k1_context_set_illegal_callback(tctx, counting_illegal_callback_fn, &ecount);
|
||||||
|
CHECK(secp256k1_ec_pubkey_create(tctx, &point, s_one) == 1);
|
||||||
|
|
||||||
|
/* Check all NULLs are detected */
|
||||||
|
CHECK(secp256k1_ecdh(tctx, res, &point, s_one) == 1);
|
||||||
|
CHECK(ecount == 0);
|
||||||
|
CHECK(secp256k1_ecdh(tctx, NULL, &point, s_one) == 0);
|
||||||
|
CHECK(ecount == 1);
|
||||||
|
CHECK(secp256k1_ecdh(tctx, res, NULL, s_one) == 0);
|
||||||
|
CHECK(ecount == 2);
|
||||||
|
CHECK(secp256k1_ecdh(tctx, res, &point, NULL) == 0);
|
||||||
|
CHECK(ecount == 3);
|
||||||
|
CHECK(secp256k1_ecdh(tctx, res, &point, s_one) == 1);
|
||||||
|
CHECK(ecount == 3);
|
||||||
|
|
||||||
|
/* Cleanup */
|
||||||
|
secp256k1_context_destroy(tctx);
|
||||||
|
}
|
||||||
|
|
||||||
void test_ecdh_generator_basepoint(void) {
|
void test_ecdh_generator_basepoint(void) {
|
||||||
unsigned char s_one[32] = { 0 };
|
unsigned char s_one[32] = { 0 };
|
||||||
secp256k1_pubkey point[2];
|
secp256k1_pubkey point[2];
|
||||||
|
@ -68,6 +97,7 @@ void test_bad_scalar(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void run_ecdh_tests(void) {
|
void run_ecdh_tests(void) {
|
||||||
|
test_ecdh_api();
|
||||||
test_ecdh_generator_basepoint();
|
test_ecdh_generator_basepoint();
|
||||||
test_bad_scalar();
|
test_bad_scalar();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue