Skip to content

Commit 6a2c7b1

Browse files
Separate secp256k1_fe_set_int( . , 0 ) from secp256k1_fe_clear()
There are two uses of the secp256k1_fe_clear() function that are now separated into these two functions in order to reflect the intent: 1) initializing the memory prior to being used -> converted to fe_set_int( . , 0 ) 2) zeroing the memory after being used such that no sensitive data remains. -> remains as fe_clear() In the latter case, 'magnitude' and 'normalized' need to be overwritten when VERIFY is enabled. Co-Authored-By: isle2983 <isle2983@yahoo.com>
1 parent 3ddcb7b commit 6a2c7b1

File tree

6 files changed

+11
-11
lines changed

6 files changed

+11
-11
lines changed

src/ecmult_const_impl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
VERIFY_CHECK(((n) & 1) == 1); \
2222
VERIFY_CHECK((n) >= -((1 << ((w)-1)) - 1)); \
2323
VERIFY_CHECK((n) <= ((1 << ((w)-1)) - 1)); \
24-
VERIFY_SETUP(secp256k1_fe_clear(&(r)->x)); \
25-
VERIFY_SETUP(secp256k1_fe_clear(&(r)->y)); \
24+
VERIFY_SETUP(secp256k1_fe_set_int(&(r)->x, 0)); \
25+
VERIFY_SETUP(secp256k1_fe_set_int(&(r)->y, 0)); \
2626
for (m = 0; m < ECMULT_TABLE_SIZE(w); m++) { \
2727
/* This loop is used to avoid secret data in array indices. See
2828
* the comment in ecmult_gen_impl.h for rationale. */ \

src/field.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ static int secp256k1_fe_normalizes_to_zero_var(secp256k1_fe *r);
5353
* magnitude 0 if a == 0, and magnitude 1 otherwise. */
5454
static void secp256k1_fe_set_int(secp256k1_fe *r, int a);
5555

56-
/** Sets a field element equal to zero, initializing all fields. */
56+
/** Clear a field element to prevent leaking sensitive information. */
5757
static void secp256k1_fe_clear(secp256k1_fe *a);
5858

5959
/** Verify whether a field element is zero. Requires the input to be normalized. */

src/field_10x26_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ SECP256K1_INLINE static void secp256k1_fe_clear(secp256k1_fe *a) {
293293
int i;
294294
#ifdef VERIFY
295295
a->magnitude = 0;
296-
a->normalized = 1;
296+
a->normalized = 0;
297297
#endif
298298
for (i=0; i<10; i++) {
299299
a->n[i] = 0;

src/field_5x52_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ SECP256K1_INLINE static void secp256k1_fe_clear(secp256k1_fe *a) {
256256
int i;
257257
#ifdef VERIFY
258258
a->magnitude = 0;
259-
a->normalized = 1;
259+
a->normalized = 0;
260260
#endif
261261
for (i=0; i<5; i++) {
262262
a->n[i] = 0;

src/group_impl.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,15 +194,15 @@ static void secp256k1_ge_globalz_set_table_gej(size_t len, secp256k1_ge *r, secp
194194

195195
static void secp256k1_gej_set_infinity(secp256k1_gej *r) {
196196
r->infinity = 1;
197-
secp256k1_fe_clear(&r->x);
198-
secp256k1_fe_clear(&r->y);
199-
secp256k1_fe_clear(&r->z);
197+
secp256k1_fe_set_int(&r->x, 0);
198+
secp256k1_fe_set_int(&r->y, 0);
199+
secp256k1_fe_set_int(&r->z, 0);
200200
}
201201

202202
static void secp256k1_ge_set_infinity(secp256k1_ge *r) {
203203
r->infinity = 1;
204-
secp256k1_fe_clear(&r->x);
205-
secp256k1_fe_clear(&r->y);
204+
secp256k1_fe_set_int(&r->x, 0);
205+
secp256k1_fe_set_int(&r->y, 0);
206206
}
207207

208208
static void secp256k1_gej_clear(secp256k1_gej *r) {

src/tests.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ void random_field_element_magnitude(secp256k1_fe *fe) {
7979
if (n == 0) {
8080
return;
8181
}
82-
secp256k1_fe_clear(&zero);
82+
secp256k1_fe_set_int(&zero, 0);
8383
secp256k1_fe_negate(&zero, &zero, 0);
8484
secp256k1_fe_mul_int(&zero, n - 1);
8585
secp256k1_fe_add(fe, &zero);

0 commit comments

Comments
 (0)