Skip to content

Commit 0e08558

Browse files
committed
Add ElligatorSwift ctime tests
1 parent 38b91a9 commit 0e08558

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
@@ -350,6 +350,7 @@ int secp256k1_ellswift_create(const secp256k1_context* ctx, unsigned char *ell64
350350

351351
/* Compute (affine) public key */
352352
ret = secp256k1_ec_pubkey_create_helper(&ctx->ecmult_gen_ctx, &seckey_scalar, &p, seckey32);
353+
secp256k1_declassify(ctx, &p, sizeof(p)); /* not constant time in produced pubkey */
353354
secp256k1_fe_normalize_var(&p.x);
354355
secp256k1_fe_normalize_var(&p.y);
355356

@@ -359,6 +360,7 @@ int secp256k1_ellswift_create(const secp256k1_context* ctx, unsigned char *ell64
359360
secp256k1_sha256_write(&hash, seckey32, 32);
360361
secp256k1_sha256_write(&hash, rnd32 ? rnd32 : ZERO, 32);
361362
secp256k1_sha256_write(&hash, ZERO, 32 - 9 - 4);
363+
secp256k1_declassify(ctx, &hash, sizeof(hash)); /* hasher gets to declassify private key */
362364

363365
/* Compute ElligatorSwift encoding and construct output. */
364366
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)