Skip to content

Commit 72c0ebb

Browse files
committed
Example 1 - avoid optimizing out stack variable clearing by using an __attribute__
1 parent 9d560f9 commit 72c0ebb

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

src/ecmult_gen_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context *ctx, secp25
150150
secp256k1_ge_from_storage(&add, &adds);
151151
secp256k1_gej_add_ge(r, r, &add);
152152
}
153-
bits = 0;
153+
secp256k1_int_clear(&bits);
154154
secp256k1_ge_clear(&add);
155155
secp256k1_scalar_clear(&gnb);
156156
}

src/group_impl.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#ifndef _SECP256K1_GROUP_IMPL_H_
88
#define _SECP256K1_GROUP_IMPL_H_
99

10+
#include <string.h>
1011
#include "num.h"
1112
#include "field.h"
1213
#include "group.h"
@@ -213,6 +214,14 @@ static void secp256k1_ge_clear(secp256k1_ge *r) {
213214
secp256k1_fe_clear(&r->y);
214215
}
215216

217+
static void __attribute__((optimize("O0"))) secp256k1_secure_clear(void *s, size_t n) {
218+
(void) memset(s, 0, n);
219+
}
220+
221+
static void secp256k1_int_clear(int *r) {
222+
secp256k1_secure_clear(r, sizeof(*r));
223+
}
224+
216225
static int secp256k1_ge_set_xquad(secp256k1_ge *r, const secp256k1_fe *x) {
217226
secp256k1_fe x2, x3, c;
218227
r->x = *x;

0 commit comments

Comments
 (0)