Skip to content

Commit 51cadce

Browse files
committed
Add ElligatorSwift ctime tests
1 parent 70a41b1 commit 51cadce

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/modules/ellswift/main_impl.h

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

355355
/* Compute (affine) public key */
356356
ret = secp256k1_ec_pubkey_create_helper(&ctx->ecmult_gen_ctx, &seckey_scalar, &p, seckey32);
357+
secp256k1_declassify(ctx, &p, sizeof(p)); /* not constant time in produced pubkey */
357358
secp256k1_fe_normalize_var(&p.x);
358359
secp256k1_fe_normalize_var(&p.y);
359360

@@ -363,6 +364,7 @@ int secp256k1_ellswift_create(const secp256k1_context* ctx, unsigned char *ell64
363364
secp256k1_sha256_write(&hash, seckey32, 32);
364365
secp256k1_sha256_write(&hash, rnd32 ? rnd32 : ZERO, 32);
365366
secp256k1_sha256_write(&hash, ZERO, 32 - 9 - 4);
367+
secp256k1_declassify(ctx, &hash, sizeof(hash)); /* hasher gets to declassify private key */
366368

367369
/* Compute ElligatorSwift encoding and construct output. */
368370
secp256k1_ellswift_elligatorswift_var(&u, &t, &p, &hash);

src/valgrind_ctime_test.c

+25
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
#include "../include/secp256k1_schnorrsig.h"
2828
#endif
2929

30+
#ifdef ENABLE_MODULE_ELLSWIFT
31+
#include "../include/secp256k1_ellswift.h"
32+
#endif
33+
3034
void run_tests(secp256k1_context *ctx, unsigned char *key);
3135

3236
int main(void) {
@@ -79,6 +83,9 @@ void run_tests(secp256k1_context *ctx, unsigned char *key) {
7983
#ifdef ENABLE_MODULE_EXTRAKEYS
8084
secp256k1_keypair keypair;
8185
#endif
86+
#ifdef ENABLE_MODULE_ELLSWIFT
87+
unsigned char ellswift[64];
88+
#endif
8289

8390
for (i = 0; i < 32; i++) {
8491
msg[i] = i + 1;
@@ -170,4 +177,22 @@ void run_tests(secp256k1_context *ctx, unsigned char *key) {
170177
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
171178
CHECK(ret == 1);
172179
#endif
180+
181+
#ifdef ENABLE_MODULE_ELLSWIFT
182+
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
183+
ret = secp256k1_ellswift_create(ctx, ellswift, key, NULL);
184+
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
185+
CHECK(ret == 1);
186+
187+
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
188+
ret = secp256k1_ellswift_create(ctx, ellswift, key, key);
189+
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
190+
CHECK(ret == 1);
191+
192+
VALGRIND_MAKE_MEM_UNDEFINED(key, 32);
193+
VALGRIND_MAKE_MEM_DEFINED(&ellswift, sizeof(ellswift));
194+
ret = secp256k1_ellswift_xdh(ctx, msg, ellswift, ellswift, key, NULL, NULL);
195+
VALGRIND_MAKE_MEM_DEFINED(&ret, sizeof(ret));
196+
CHECK(ret == 1);
197+
#endif
173198
}

0 commit comments

Comments
 (0)