Skip to content

Commit 2d1d41a

Browse files
committed
Add ctime tests for ellswift module
1 parent df633cd commit 2d1d41a

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/ctime_tests.c

+35
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030
#include "../include/secp256k1_schnorrsig.h"
3131
#endif
3232

33+
#ifdef ENABLE_MODULE_ELLSWIFT
34+
#include "../include/secp256k1_ellswift.h"
35+
#endif
36+
3337
static void run_tests(secp256k1_context *ctx, unsigned char *key);
3438

3539
int main(void) {
@@ -80,6 +84,10 @@ static void run_tests(secp256k1_context *ctx, unsigned char *key) {
8084
#ifdef ENABLE_MODULE_EXTRAKEYS
8185
secp256k1_keypair keypair;
8286
#endif
87+
#ifdef ENABLE_MODULE_ELLSWIFT
88+
unsigned char ellswift[64];
89+
static const unsigned char prefix[64] = {'t', 'e', 's', 't'};
90+
#endif
8391

8492
for (i = 0; i < 32; i++) {
8593
msg[i] = i + 1;
@@ -171,4 +179,31 @@ static void run_tests(secp256k1_context *ctx, unsigned char *key) {
171179
SECP256K1_CHECKMEM_DEFINE(&ret, sizeof(ret));
172180
CHECK(ret == 1);
173181
#endif
182+
183+
#ifdef ENABLE_MODULE_ELLSWIFT
184+
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
185+
ret = secp256k1_ellswift_create(ctx, ellswift, key, NULL);
186+
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
187+
CHECK(ret == 1);
188+
189+
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
190+
ret = secp256k1_ellswift_create(ctx, ellswift, key, ellswift);
191+
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
192+
CHECK(ret == 1);
193+
194+
for (i = 0; i < 2; i++) {
195+
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
196+
VALGRIND_MAKE_MEM_DEFINED(&ellswift, sizeof(ellswift));
197+
ret = secp256k1_ellswift_xdh(ctx, msg, ellswift, ellswift, key, i, secp256k1_ellswift_xdh_hash_function_bip324, NULL);
198+
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
199+
CHECK(ret == 1);
200+
201+
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
202+
VALGRIND_MAKE_MEM_DEFINED(&ellswift, sizeof(ellswift));
203+
ret = secp256k1_ellswift_xdh(ctx, msg, ellswift, ellswift, key, i, secp256k1_ellswift_xdh_hash_function_prefix, (void *)prefix);
204+
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
205+
CHECK(ret == 1);
206+
}
207+
208+
#endif
174209
}

src/modules/ellswift/main_impl.h

+2
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,7 @@ int secp256k1_ellswift_create(const secp256k1_context *ctx, unsigned char *ell64
463463

464464
/* Compute (affine) public key */
465465
ret = secp256k1_ec_pubkey_create_helper(&ctx->ecmult_gen_ctx, &seckey_scalar, &p, seckey32);
466+
secp256k1_declassify(ctx, &p, sizeof(p)); /* not constant time in produced pubkey */
466467
secp256k1_fe_normalize_var(&p.x);
467468
secp256k1_fe_normalize_var(&p.y);
468469

@@ -471,6 +472,7 @@ int secp256k1_ellswift_create(const secp256k1_context *ctx, unsigned char *ell64
471472
secp256k1_ellswift_sha256_init_create(&hash);
472473
secp256k1_sha256_write(&hash, seckey32, 32);
473474
secp256k1_sha256_write(&hash, zero32, sizeof(zero32));
475+
secp256k1_declassify(ctx, &hash, sizeof(hash)); /* private key is hashed now */
474476
if (auxrnd32) secp256k1_sha256_write(&hash, auxrnd32, 32);
475477

476478
/* Compute ElligatorSwift encoding and construct output. */

0 commit comments

Comments
 (0)