20
20
21
21
SECP256K1_INLINE static int secp256k1_fe_equal (const secp256k1_fe * a , const secp256k1_fe * b ) {
22
22
secp256k1_fe na ;
23
- #ifdef VERIFY
24
- secp256k1_fe_verify (a );
25
- secp256k1_fe_verify (b );
26
- secp256k1_fe_verify_magnitude (a , 1 );
27
- secp256k1_fe_verify_magnitude (b , 31 );
28
- #endif
23
+ SECP256K1_FE_VERIFY (a );
24
+ SECP256K1_FE_VERIFY (b );
25
+ SECP256K1_FE_VERIFY_MAGNITUDE (a , 1 );
26
+ SECP256K1_FE_VERIFY_MAGNITUDE (b , 31 );
27
+
29
28
secp256k1_fe_negate (& na , a , 1 );
30
29
secp256k1_fe_add (& na , b );
31
30
return secp256k1_fe_normalizes_to_zero (& na );
@@ -44,11 +43,9 @@ static int secp256k1_fe_sqrt(secp256k1_fe * SECP256K1_RESTRICT r, const secp256k
44
43
secp256k1_fe x2 , x3 , x6 , x9 , x11 , x22 , x44 , x88 , x176 , x220 , x223 , t1 ;
45
44
int j , ret ;
46
45
47
- #ifdef VERIFY
48
46
VERIFY_CHECK (r != a );
49
- secp256k1_fe_verify (a );
50
- secp256k1_fe_verify_magnitude (a , 8 );
51
- #endif
47
+ SECP256K1_FE_VERIFY (a );
48
+ SECP256K1_FE_VERIFY_MAGNITUDE (a , 8 );
52
49
53
50
/** The binary representation of (p + 1)/4 has 3 blocks of 1s, with lengths in
54
51
* { 2, 22, 223 }. Use an addition chain to calculate 2^n - 1 for each block:
@@ -151,11 +148,11 @@ static void secp256k1_fe_verify_magnitude(const secp256k1_fe *a, int m) { (void)
151
148
static void secp256k1_fe_impl_verify (const secp256k1_fe * a );
152
149
static void secp256k1_fe_verify (const secp256k1_fe * a ) {
153
150
/* Magnitude between 0 and 32. */
154
- secp256k1_fe_verify_magnitude (a , 32 );
151
+ SECP256K1_FE_VERIFY_MAGNITUDE (a , 32 );
155
152
/* Normalized is 0 or 1. */
156
153
VERIFY_CHECK ((a -> normalized == 0 ) || (a -> normalized == 1 ));
157
154
/* If normalized, magnitude must be 0 or 1. */
158
- if (a -> normalized ) secp256k1_fe_verify_magnitude (a , 1 );
155
+ if (a -> normalized ) SECP256K1_FE_VERIFY_MAGNITUDE (a , 1 );
159
156
/* Invoke implementation-specific checks. */
160
157
secp256k1_fe_impl_verify (a );
161
158
}
@@ -168,89 +165,105 @@ static void secp256k1_fe_verify_magnitude(const secp256k1_fe *a, int m) {
168
165
169
166
static void secp256k1_fe_impl_normalize (secp256k1_fe * r );
170
167
SECP256K1_INLINE static void secp256k1_fe_normalize (secp256k1_fe * r ) {
171
- secp256k1_fe_verify (r );
168
+ SECP256K1_FE_VERIFY (r );
169
+
172
170
secp256k1_fe_impl_normalize (r );
173
171
r -> magnitude = 1 ;
174
172
r -> normalized = 1 ;
175
- secp256k1_fe_verify (r );
173
+
174
+ SECP256K1_FE_VERIFY (r );
176
175
}
177
176
178
177
static void secp256k1_fe_impl_normalize_weak (secp256k1_fe * r );
179
178
SECP256K1_INLINE static void secp256k1_fe_normalize_weak (secp256k1_fe * r ) {
180
- secp256k1_fe_verify (r );
179
+ SECP256K1_FE_VERIFY (r );
180
+
181
181
secp256k1_fe_impl_normalize_weak (r );
182
182
r -> magnitude = 1 ;
183
- secp256k1_fe_verify (r );
183
+
184
+ SECP256K1_FE_VERIFY (r );
184
185
}
185
186
186
187
static void secp256k1_fe_impl_normalize_var (secp256k1_fe * r );
187
188
SECP256K1_INLINE static void secp256k1_fe_normalize_var (secp256k1_fe * r ) {
188
- secp256k1_fe_verify (r );
189
+ SECP256K1_FE_VERIFY (r );
190
+
189
191
secp256k1_fe_impl_normalize_var (r );
190
192
r -> magnitude = 1 ;
191
193
r -> normalized = 1 ;
192
- secp256k1_fe_verify (r );
194
+
195
+ SECP256K1_FE_VERIFY (r );
193
196
}
194
197
195
198
static int secp256k1_fe_impl_normalizes_to_zero (const secp256k1_fe * r );
196
199
SECP256K1_INLINE static int secp256k1_fe_normalizes_to_zero (const secp256k1_fe * r ) {
197
- secp256k1_fe_verify (r );
200
+ SECP256K1_FE_VERIFY (r );
201
+
198
202
return secp256k1_fe_impl_normalizes_to_zero (r );
199
203
}
200
204
201
205
static int secp256k1_fe_impl_normalizes_to_zero_var (const secp256k1_fe * r );
202
206
SECP256K1_INLINE static int secp256k1_fe_normalizes_to_zero_var (const secp256k1_fe * r ) {
203
- secp256k1_fe_verify (r );
207
+ SECP256K1_FE_VERIFY (r );
208
+
204
209
return secp256k1_fe_impl_normalizes_to_zero_var (r );
205
210
}
206
211
207
212
static void secp256k1_fe_impl_set_int (secp256k1_fe * r , int a );
208
213
SECP256K1_INLINE static void secp256k1_fe_set_int (secp256k1_fe * r , int a ) {
209
214
VERIFY_CHECK (0 <= a && a <= 0x7FFF );
215
+
210
216
secp256k1_fe_impl_set_int (r , a );
211
217
r -> magnitude = (a != 0 );
212
218
r -> normalized = 1 ;
213
- secp256k1_fe_verify (r );
219
+
220
+ SECP256K1_FE_VERIFY (r );
214
221
}
215
222
216
223
static void secp256k1_fe_impl_add_int (secp256k1_fe * r , int a );
217
224
SECP256K1_INLINE static void secp256k1_fe_add_int (secp256k1_fe * r , int a ) {
218
225
VERIFY_CHECK (0 <= a && a <= 0x7FFF );
219
- secp256k1_fe_verify (r );
226
+ SECP256K1_FE_VERIFY (r );
227
+
220
228
secp256k1_fe_impl_add_int (r , a );
221
229
r -> magnitude += 1 ;
222
230
r -> normalized = 0 ;
223
- secp256k1_fe_verify (r );
231
+
232
+ SECP256K1_FE_VERIFY (r );
224
233
}
225
234
226
235
static void secp256k1_fe_impl_clear (secp256k1_fe * a );
227
236
SECP256K1_INLINE static void secp256k1_fe_clear (secp256k1_fe * a ) {
228
237
a -> magnitude = 0 ;
229
238
a -> normalized = 1 ;
230
239
secp256k1_fe_impl_clear (a );
231
- secp256k1_fe_verify (a );
240
+
241
+ SECP256K1_FE_VERIFY (a );
232
242
}
233
243
234
244
static int secp256k1_fe_impl_is_zero (const secp256k1_fe * a );
235
245
SECP256K1_INLINE static int secp256k1_fe_is_zero (const secp256k1_fe * a ) {
236
- secp256k1_fe_verify (a );
246
+ SECP256K1_FE_VERIFY (a );
237
247
VERIFY_CHECK (a -> normalized );
248
+
238
249
return secp256k1_fe_impl_is_zero (a );
239
250
}
240
251
241
252
static int secp256k1_fe_impl_is_odd (const secp256k1_fe * a );
242
253
SECP256K1_INLINE static int secp256k1_fe_is_odd (const secp256k1_fe * a ) {
243
- secp256k1_fe_verify (a );
254
+ SECP256K1_FE_VERIFY (a );
244
255
VERIFY_CHECK (a -> normalized );
256
+
245
257
return secp256k1_fe_impl_is_odd (a );
246
258
}
247
259
248
260
static int secp256k1_fe_impl_cmp_var (const secp256k1_fe * a , const secp256k1_fe * b );
249
261
SECP256K1_INLINE static int secp256k1_fe_cmp_var (const secp256k1_fe * a , const secp256k1_fe * b ) {
250
- secp256k1_fe_verify (a );
251
- secp256k1_fe_verify (b );
262
+ SECP256K1_FE_VERIFY (a );
263
+ SECP256K1_FE_VERIFY (b );
252
264
VERIFY_CHECK (a -> normalized );
253
265
VERIFY_CHECK (b -> normalized );
266
+
254
267
return secp256k1_fe_impl_cmp_var (a , b );
255
268
}
256
269
@@ -259,15 +272,16 @@ SECP256K1_INLINE static void secp256k1_fe_set_b32_mod(secp256k1_fe *r, const uns
259
272
secp256k1_fe_impl_set_b32_mod (r , a );
260
273
r -> magnitude = 1 ;
261
274
r -> normalized = 0 ;
262
- secp256k1_fe_verify (r );
275
+
276
+ SECP256K1_FE_VERIFY (r );
263
277
}
264
278
265
279
static int secp256k1_fe_impl_set_b32_limit (secp256k1_fe * r , const unsigned char * a );
266
280
SECP256K1_INLINE static int secp256k1_fe_set_b32_limit (secp256k1_fe * r , const unsigned char * a ) {
267
281
if (secp256k1_fe_impl_set_b32_limit (r , a )) {
268
282
r -> magnitude = 1 ;
269
283
r -> normalized = 1 ;
270
- secp256k1_fe_verify (r );
284
+ SECP256K1_FE_VERIFY (r );
271
285
return 1 ;
272
286
} else {
273
287
/* Mark the output field element as invalid. */
@@ -278,83 +292,97 @@ SECP256K1_INLINE static int secp256k1_fe_set_b32_limit(secp256k1_fe *r, const un
278
292
279
293
static void secp256k1_fe_impl_get_b32 (unsigned char * r , const secp256k1_fe * a );
280
294
SECP256K1_INLINE static void secp256k1_fe_get_b32 (unsigned char * r , const secp256k1_fe * a ) {
281
- secp256k1_fe_verify (a );
295
+ SECP256K1_FE_VERIFY (a );
282
296
VERIFY_CHECK (a -> normalized );
297
+
283
298
secp256k1_fe_impl_get_b32 (r , a );
284
299
}
285
300
286
301
static void secp256k1_fe_impl_negate_unchecked (secp256k1_fe * r , const secp256k1_fe * a , int m );
287
302
SECP256K1_INLINE static void secp256k1_fe_negate_unchecked (secp256k1_fe * r , const secp256k1_fe * a , int m ) {
288
- secp256k1_fe_verify (a );
303
+ SECP256K1_FE_VERIFY (a );
289
304
VERIFY_CHECK (m >= 0 && m <= 31 );
290
- secp256k1_fe_verify_magnitude (a , m );
305
+ SECP256K1_FE_VERIFY_MAGNITUDE (a , m );
306
+
291
307
secp256k1_fe_impl_negate_unchecked (r , a , m );
292
308
r -> magnitude = m + 1 ;
293
309
r -> normalized = 0 ;
294
- secp256k1_fe_verify (r );
310
+
311
+ SECP256K1_FE_VERIFY (r );
295
312
}
296
313
297
314
static void secp256k1_fe_impl_mul_int_unchecked (secp256k1_fe * r , int a );
298
315
SECP256K1_INLINE static void secp256k1_fe_mul_int_unchecked (secp256k1_fe * r , int a ) {
299
- secp256k1_fe_verify (r );
316
+ SECP256K1_FE_VERIFY (r );
317
+
300
318
VERIFY_CHECK (a >= 0 && a <= 32 );
301
319
VERIFY_CHECK (a * r -> magnitude <= 32 );
302
320
secp256k1_fe_impl_mul_int_unchecked (r , a );
303
321
r -> magnitude *= a ;
304
322
r -> normalized = 0 ;
305
- secp256k1_fe_verify (r );
323
+
324
+ SECP256K1_FE_VERIFY (r );
306
325
}
307
326
308
327
static void secp256k1_fe_impl_add (secp256k1_fe * r , const secp256k1_fe * a );
309
328
SECP256K1_INLINE static void secp256k1_fe_add (secp256k1_fe * r , const secp256k1_fe * a ) {
310
- secp256k1_fe_verify (r );
311
- secp256k1_fe_verify (a );
329
+ SECP256K1_FE_VERIFY (r );
330
+ SECP256K1_FE_VERIFY (a );
312
331
VERIFY_CHECK (r -> magnitude + a -> magnitude <= 32 );
332
+
313
333
secp256k1_fe_impl_add (r , a );
314
334
r -> magnitude += a -> magnitude ;
315
335
r -> normalized = 0 ;
316
- secp256k1_fe_verify (r );
336
+
337
+ SECP256K1_FE_VERIFY (r );
317
338
}
318
339
319
340
static void secp256k1_fe_impl_mul (secp256k1_fe * r , const secp256k1_fe * a , const secp256k1_fe * SECP256K1_RESTRICT b );
320
341
SECP256K1_INLINE static void secp256k1_fe_mul (secp256k1_fe * r , const secp256k1_fe * a , const secp256k1_fe * SECP256K1_RESTRICT b ) {
321
- secp256k1_fe_verify (a );
322
- secp256k1_fe_verify (b );
323
- secp256k1_fe_verify_magnitude (a , 8 );
324
- secp256k1_fe_verify_magnitude (b , 8 );
342
+ SECP256K1_FE_VERIFY (a );
343
+ SECP256K1_FE_VERIFY (b );
344
+ SECP256K1_FE_VERIFY_MAGNITUDE (a , 8 );
345
+ SECP256K1_FE_VERIFY_MAGNITUDE (b , 8 );
325
346
VERIFY_CHECK (r != b );
326
347
VERIFY_CHECK (a != b );
348
+
327
349
secp256k1_fe_impl_mul (r , a , b );
328
350
r -> magnitude = 1 ;
329
351
r -> normalized = 0 ;
330
- secp256k1_fe_verify (r );
352
+
353
+ SECP256K1_FE_VERIFY (r );
331
354
}
332
355
333
356
static void secp256k1_fe_impl_sqr (secp256k1_fe * r , const secp256k1_fe * a );
334
357
SECP256K1_INLINE static void secp256k1_fe_sqr (secp256k1_fe * r , const secp256k1_fe * a ) {
335
- secp256k1_fe_verify (a );
336
- secp256k1_fe_verify_magnitude (a , 8 );
358
+ SECP256K1_FE_VERIFY (a );
359
+ SECP256K1_FE_VERIFY_MAGNITUDE (a , 8 );
360
+
337
361
secp256k1_fe_impl_sqr (r , a );
338
362
r -> magnitude = 1 ;
339
363
r -> normalized = 0 ;
340
- secp256k1_fe_verify (r );
364
+
365
+ SECP256K1_FE_VERIFY (r );
341
366
}
342
367
343
368
static void secp256k1_fe_impl_cmov (secp256k1_fe * r , const secp256k1_fe * a , int flag );
344
369
SECP256K1_INLINE static void secp256k1_fe_cmov (secp256k1_fe * r , const secp256k1_fe * a , int flag ) {
345
370
VERIFY_CHECK (flag == 0 || flag == 1 );
346
- secp256k1_fe_verify (a );
347
- secp256k1_fe_verify (r );
371
+ SECP256K1_FE_VERIFY (a );
372
+ SECP256K1_FE_VERIFY (r );
373
+
348
374
secp256k1_fe_impl_cmov (r , a , flag );
349
375
if (a -> magnitude > r -> magnitude ) r -> magnitude = a -> magnitude ;
350
376
if (!a -> normalized ) r -> normalized = 0 ;
351
- secp256k1_fe_verify (r );
377
+
378
+ SECP256K1_FE_VERIFY (r );
352
379
}
353
380
354
381
static void secp256k1_fe_impl_to_storage (secp256k1_fe_storage * r , const secp256k1_fe * a );
355
382
SECP256K1_INLINE static void secp256k1_fe_to_storage (secp256k1_fe_storage * r , const secp256k1_fe * a ) {
356
- secp256k1_fe_verify (a );
383
+ SECP256K1_FE_VERIFY (a );
357
384
VERIFY_CHECK (a -> normalized );
385
+
358
386
secp256k1_fe_impl_to_storage (r , a );
359
387
}
360
388
@@ -363,36 +391,42 @@ SECP256K1_INLINE static void secp256k1_fe_from_storage(secp256k1_fe *r, const se
363
391
secp256k1_fe_impl_from_storage (r , a );
364
392
r -> magnitude = 1 ;
365
393
r -> normalized = 1 ;
366
- secp256k1_fe_verify (r );
394
+
395
+ SECP256K1_FE_VERIFY (r );
367
396
}
368
397
369
398
static void secp256k1_fe_impl_inv (secp256k1_fe * r , const secp256k1_fe * x );
370
399
SECP256K1_INLINE static void secp256k1_fe_inv (secp256k1_fe * r , const secp256k1_fe * x ) {
371
400
int input_is_zero = secp256k1_fe_normalizes_to_zero (x );
372
- secp256k1_fe_verify (x );
401
+ SECP256K1_FE_VERIFY (x );
402
+
373
403
secp256k1_fe_impl_inv (r , x );
374
404
r -> magnitude = x -> magnitude > 0 ;
375
405
r -> normalized = 1 ;
406
+
376
407
VERIFY_CHECK (secp256k1_fe_normalizes_to_zero (r ) == input_is_zero );
377
- secp256k1_fe_verify (r );
408
+ SECP256K1_FE_VERIFY (r );
378
409
}
379
410
380
411
static void secp256k1_fe_impl_inv_var (secp256k1_fe * r , const secp256k1_fe * x );
381
412
SECP256K1_INLINE static void secp256k1_fe_inv_var (secp256k1_fe * r , const secp256k1_fe * x ) {
382
413
int input_is_zero = secp256k1_fe_normalizes_to_zero (x );
383
- secp256k1_fe_verify (x );
414
+ SECP256K1_FE_VERIFY (x );
415
+
384
416
secp256k1_fe_impl_inv_var (r , x );
385
417
r -> magnitude = x -> magnitude > 0 ;
386
418
r -> normalized = 1 ;
419
+
387
420
VERIFY_CHECK (secp256k1_fe_normalizes_to_zero (r ) == input_is_zero );
388
- secp256k1_fe_verify (r );
421
+ SECP256K1_FE_VERIFY (r );
389
422
}
390
423
391
424
static int secp256k1_fe_impl_is_square_var (const secp256k1_fe * x );
392
425
SECP256K1_INLINE static int secp256k1_fe_is_square_var (const secp256k1_fe * x ) {
393
426
int ret ;
394
427
secp256k1_fe tmp = * x , sqrt ;
395
- secp256k1_fe_verify (x );
428
+ SECP256K1_FE_VERIFY (x );
429
+
396
430
ret = secp256k1_fe_impl_is_square_var (x );
397
431
secp256k1_fe_normalize_weak (& tmp );
398
432
VERIFY_CHECK (ret == secp256k1_fe_sqrt (& sqrt , & tmp ));
@@ -403,20 +437,24 @@ static void secp256k1_fe_impl_get_bounds(secp256k1_fe* r, int m);
403
437
SECP256K1_INLINE static void secp256k1_fe_get_bounds (secp256k1_fe * r , int m ) {
404
438
VERIFY_CHECK (m >= 0 );
405
439
VERIFY_CHECK (m <= 32 );
440
+
406
441
secp256k1_fe_impl_get_bounds (r , m );
407
442
r -> magnitude = m ;
408
443
r -> normalized = (m == 0 );
409
- secp256k1_fe_verify (r );
444
+
445
+ SECP256K1_FE_VERIFY (r );
410
446
}
411
447
412
448
static void secp256k1_fe_impl_half (secp256k1_fe * r );
413
449
SECP256K1_INLINE static void secp256k1_fe_half (secp256k1_fe * r ) {
414
- secp256k1_fe_verify (r );
415
- secp256k1_fe_verify_magnitude (r , 31 );
450
+ SECP256K1_FE_VERIFY (r );
451
+ SECP256K1_FE_VERIFY_MAGNITUDE (r , 31 );
452
+
416
453
secp256k1_fe_impl_half (r );
417
454
r -> magnitude = (r -> magnitude >> 1 ) + 1 ;
418
455
r -> normalized = 0 ;
419
- secp256k1_fe_verify (r );
456
+
457
+ SECP256K1_FE_VERIFY (r );
420
458
}
421
459
422
460
#endif /* defined(VERIFY) */
0 commit comments