Skip to content

Commit d378bd3

Browse files
ecdh: Add test computing shared_secret=basepoint with random inputs
1 parent 49f608d commit d378bd3

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

src/modules/ecdh/tests_impl.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,42 @@ void test_bad_scalar(void) {
123123
CHECK(secp256k1_ecdh(ctx, output, &point, s_overflow, ecdh_hash_function_test_fail, NULL) == 0);
124124
}
125125

126+
void test_result_basepoint(void) {
127+
secp256k1_pubkey point;
128+
secp256k1_scalar rand;
129+
unsigned char s[32];
130+
unsigned char s_inv[32];
131+
unsigned char out[32];
132+
unsigned char out_inv[32];
133+
unsigned char out_base[32];
134+
int i;
135+
136+
unsigned char s_one[32] = { 0 };
137+
s_one[31] = 1;
138+
CHECK(secp256k1_ec_pubkey_create(ctx, &point, s_one) == 1);
139+
CHECK(secp256k1_ecdh(ctx, out_base, &point, s_one, NULL, NULL) == 1);
140+
141+
for (i = 0; i < 2 * count; i++) {
142+
random_scalar_order(&rand);
143+
secp256k1_scalar_get_b32(s, &rand);
144+
secp256k1_scalar_inverse(&rand, &rand);
145+
secp256k1_scalar_get_b32(s_inv, &rand);
146+
147+
CHECK(secp256k1_ec_pubkey_create(ctx, &point, s) == 1);
148+
CHECK(secp256k1_ecdh(ctx, out, &point, s_inv, NULL, NULL) == 1);
149+
CHECK(secp256k1_memcmp_var(out, out_base, 32) == 0);
150+
151+
CHECK(secp256k1_ec_pubkey_create(ctx, &point, s_inv) == 1);
152+
CHECK(secp256k1_ecdh(ctx, out_inv, &point, s, NULL, NULL) == 1);
153+
CHECK(secp256k1_memcmp_var(out_inv, out_base, 32) == 0);
154+
}
155+
}
156+
126157
void run_ecdh_tests(void) {
127158
test_ecdh_api();
128159
test_ecdh_generator_basepoint();
129160
test_bad_scalar();
161+
test_result_basepoint();
130162
}
131163

132164
#endif /* SECP256K1_MODULE_ECDH_TESTS_H */

0 commit comments

Comments
 (0)