Skip to content

Commit 7ed9847

Browse files
committed
Choose batch randomizers in range [-2^127, 2^127-1]
H/T roconnor-blockstream for this idea
1 parent 613c8b0 commit 7ed9847

File tree

6 files changed

+82
-70
lines changed

6 files changed

+82
-70
lines changed

doc/speedup-batch/bench_output.txt

Lines changed: 67 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,67 @@
1-
schnorrsig_sign: min 24.5us / avg 24.6us / max 24.6us
2-
schnorrsig_verify: min 42.1us / avg 42.1us / max 42.2us
3-
schnorrsig_batch_verify_1: min 50.2us / avg 50.3us / max 50.3us
4-
schnorrsig_batch_verify_2: min 43.5us / avg 43.5us / max 43.5us
5-
schnorrsig_batch_verify_3: min 41.1us / avg 41.1us / max 41.1us
6-
schnorrsig_batch_verify_4: min 40.0us / avg 40.0us / max 40.0us
7-
schnorrsig_batch_verify_5: min 39.2us / avg 39.2us / max 39.3us
8-
schnorrsig_batch_verify_7: min 38.4us / avg 38.5us / max 38.5us
9-
schnorrsig_batch_verify_9: min 38.0us / avg 38.0us / max 38.0us
10-
schnorrsig_batch_verify_11: min 37.7us / avg 37.7us / max 37.8us
11-
schnorrsig_batch_verify_14: min 37.4us / avg 37.4us / max 37.5us
12-
schnorrsig_batch_verify_17: min 37.3us / avg 37.3us / max 37.3us
13-
schnorrsig_batch_verify_21: min 37.1us / avg 37.1us / max 37.2us
14-
schnorrsig_batch_verify_26: min 37.0us / avg 37.0us / max 37.0us
15-
schnorrsig_batch_verify_32: min 37.0us / avg 37.0us / max 37.0us
16-
schnorrsig_batch_verify_39: min 36.9us / avg 36.9us / max 36.9us
17-
schnorrsig_batch_verify_47: min 35.2us / avg 35.3us / max 35.3us
18-
schnorrsig_batch_verify_57: min 34.2us / avg 34.2us / max 34.2us
19-
schnorrsig_batch_verify_69: min 33.8us / avg 33.8us / max 33.9us
20-
schnorrsig_batch_verify_83: min 32.6us / avg 32.6us / max 32.7us
21-
schnorrsig_batch_verify_100: min 31.7us / avg 31.7us / max 31.7us
22-
schnorrsig_batch_verify_121: min 31.6us / avg 31.6us / max 31.6us
23-
schnorrsig_batch_verify_146: min 30.5us / avg 30.5us / max 30.5us
24-
schnorrsig_batch_verify_176: min 29.5us / avg 29.5us / max 29.5us
25-
schnorrsig_batch_verify_212: min 28.7us / avg 28.7us / max 28.7us
26-
schnorrsig_batch_verify_255: min 28.0us / avg 28.0us / max 28.0us
27-
schnorrsig_batch_verify_307: min 27.5us / avg 27.5us / max 27.5us
28-
schnorrsig_batch_verify_369: min 27.0us / avg 27.0us / max 27.0us
29-
schnorrsig_batch_verify_443: min 26.6us / avg 26.7us / max 26.7us
30-
schnorrsig_batch_verify_532: min 26.3us / avg 26.3us / max 26.4us
31-
schnorrsig_batch_verify_639: min 26.5us / avg 26.5us / max 26.5us
32-
schnorrsig_batch_verify_767: min 25.8us / avg 25.8us / max 25.8us
33-
schnorrsig_batch_verify_921: min 25.2us / avg 25.2us / max 25.2us
34-
schnorrsig_batch_verify_1106: min 24.7us / avg 24.7us / max 24.7us
35-
schnorrsig_batch_verify_1328: min 24.3us / avg 24.3us / max 24.3us
36-
schnorrsig_batch_verify_1594: min 24.0us / avg 24.0us / max 24.1us
37-
schnorrsig_batch_verify_1913: min 23.7us / avg 23.7us / max 23.8us
38-
schnorrsig_batch_verify_2296: min 23.7us / avg 23.7us / max 23.7us
39-
schnorrsig_batch_verify_2756: min 23.3us / avg 23.3us / max 23.3us
40-
schnorrsig_batch_verify_3308: min 22.9us / avg 23.0us / max 23.0us
41-
schnorrsig_batch_verify_3970: min 23.0us / avg 23.0us / max 23.0us
42-
schnorrsig_batch_verify_4765: min 22.7us / avg 22.7us / max 22.7us
43-
schnorrsig_batch_verify_5719: min 22.3us / avg 22.4us / max 22.4us
44-
schnorrsig_batch_verify_6863: min 22.1us / avg 22.1us / max 22.1us
45-
schnorrsig_batch_verify_8236: min 22.0us / avg 22.0us / max 22.0us
46-
schnorrsig_batch_verify_9884: min 21.7us / avg 21.7us / max 21.7us
47-
schnorrsig_batch_verify_11861: min 21.4us / avg 21.5us / max 21.5us
48-
schnorrsig_batch_verify_14234: min 21.2us / avg 21.2us / max 21.3us
49-
schnorrsig_batch_verify_17081: min 21.1us / avg 21.1us / max 21.1us
50-
schnorrsig_batch_verify_20498: min 20.9us / avg 21.0us / max 21.0us
51-
schnorrsig_batch_verify_24598: min 20.8us / avg 20.9us / max 20.9us
52-
schnorrsig_batch_verify_29518: min 20.7us / avg 20.7us / max 20.8us
53-
schnorrsig_batch_verify_35422: min 20.7us / avg 20.7us / max 20.7us
54-
schnorrsig_batch_verify_42507: min 20.6us / avg 20.6us / max 20.6us
55-
schnorrsig_batch_verify_51009: min 20.5us / avg 20.5us / max 20.6us
56-
schnorrsig_batch_verify_61211: min 20.5us / avg 20.5us / max 20.5us
57-
schnorrsig_batch_verify_73454: min 20.4us / avg 20.4us / max 20.4us
58-
schnorrsig_batch_verify_88145: min 20.4us / avg 20.4us / max 20.4us
59-
schnorrsig_batch_verify_105775: min 20.4us / avg 20.4us / max 20.4us
60-
schnorrsig_batch_verify_126931: min 20.3us / avg 20.4us / max 20.4us
61-
schnorrsig_batch_verify_152318: min 20.3us / avg 20.3us / max 20.3us
62-
schnorrsig_batch_verify_182782: min 20.3us / avg 20.3us / max 20.3us
63-
schnorrsig_batch_verify_219339: min 20.3us / avg 20.3us / max 20.4us
64-
schnorrsig_batch_verify_263207: min 20.3us / avg 20.3us / max 20.4us
65-
schnorrsig_batch_verify_315849: min 20.3us / avg 20.3us / max 20.3us
66-
schnorrsig_batch_verify_379019: min 20.3us / avg 20.3us / max 20.4us
67-
schnorrsig_batch_verify_454823: min 20.3us / avg 20.3us / max 20.4us
1+
schnorrsig_sign: min 24.3us / avg 24.3us / max 24.4us
2+
schnorrsig_verify: min 41.9us / avg 42.0us / max 42.0us
3+
schnorrsig_batch_verify_1: min 50.0us / avg 50.1us / max 50.1us
4+
schnorrsig_batch_verify_2: min 42.1us / avg 42.1us / max 42.1us
5+
schnorrsig_batch_verify_3: min 39.3us / avg 39.3us / max 39.4us
6+
schnorrsig_batch_verify_4: min 38.0us / avg 38.0us / max 38.1us
7+
schnorrsig_batch_verify_5: min 37.2us / avg 37.2us / max 37.2us
8+
schnorrsig_batch_verify_7: min 36.2us / avg 36.2us / max 36.3us
9+
schnorrsig_batch_verify_9: min 35.6us / avg 35.7us / max 35.7us
10+
schnorrsig_batch_verify_11: min 35.3us / avg 35.4us / max 35.4us
11+
schnorrsig_batch_verify_14: min 35.0us / avg 35.0us / max 35.0us
12+
schnorrsig_batch_verify_17: min 34.7us / avg 34.7us / max 34.8us
13+
schnorrsig_batch_verify_21: min 34.5us / avg 34.6us / max 34.6us
14+
schnorrsig_batch_verify_26: min 34.4us / avg 34.4us / max 34.4us
15+
schnorrsig_batch_verify_32: min 34.3us / avg 34.3us / max 34.3us
16+
schnorrsig_batch_verify_39: min 34.2us / avg 34.2us / max 34.2us
17+
schnorrsig_batch_verify_47: min 33.1us / avg 33.1us / max 33.2us
18+
schnorrsig_batch_verify_57: min 32.1us / avg 32.1us / max 32.1us
19+
schnorrsig_batch_verify_69: min 32.0us / avg 32.0us / max 32.0us
20+
schnorrsig_batch_verify_83: min 30.8us / avg 30.8us / max 30.8us
21+
schnorrsig_batch_verify_100: min 29.8us / avg 29.8us / max 29.8us
22+
schnorrsig_batch_verify_121: min 30.0us / avg 30.0us / max 30.0us
23+
schnorrsig_batch_verify_146: min 28.8us / avg 28.8us / max 28.9us
24+
schnorrsig_batch_verify_176: min 27.9us / avg 27.9us / max 27.9us
25+
schnorrsig_batch_verify_212: min 27.1us / avg 27.1us / max 27.1us
26+
schnorrsig_batch_verify_255: min 26.4us / avg 26.4us / max 26.5us
27+
schnorrsig_batch_verify_307: min 25.8us / avg 25.8us / max 25.9us
28+
schnorrsig_batch_verify_369: min 25.4us / avg 25.4us / max 25.4us
29+
schnorrsig_batch_verify_443: min 25.0us / avg 25.0us / max 25.0us
30+
schnorrsig_batch_verify_532: min 24.7us / avg 24.7us / max 24.8us
31+
schnorrsig_batch_verify_639: min 25.2us / avg 25.2us / max 25.2us
32+
schnorrsig_batch_verify_767: min 24.5us / avg 24.5us / max 24.5us
33+
schnorrsig_batch_verify_921: min 23.9us / avg 23.9us / max 23.9us
34+
schnorrsig_batch_verify_1106: min 23.4us / avg 23.4us / max 23.4us
35+
schnorrsig_batch_verify_1328: min 23.0us / avg 23.1us / max 23.1us
36+
schnorrsig_batch_verify_1594: min 22.7us / avg 22.7us / max 22.7us
37+
schnorrsig_batch_verify_1913: min 22.3us / avg 22.4us / max 22.4us
38+
schnorrsig_batch_verify_2296: min 22.4us / avg 22.4us / max 22.5us
39+
schnorrsig_batch_verify_2756: min 22.1us / avg 22.1us / max 22.1us
40+
schnorrsig_batch_verify_3308: min 21.8us / avg 21.8us / max 21.8us
41+
schnorrsig_batch_verify_3970: min 21.9us / avg 21.9us / max 21.9us
42+
schnorrsig_batch_verify_4765: min 21.5us / avg 21.6us / max 21.6us
43+
schnorrsig_batch_verify_5719: min 21.2us / avg 21.2us / max 21.2us
44+
schnorrsig_batch_verify_6863: min 21.0us / avg 21.0us / max 21.0us
45+
schnorrsig_batch_verify_8236: min 21.0us / avg 21.0us / max 21.0us
46+
schnorrsig_batch_verify_9884: min 20.7us / avg 20.7us / max 20.7us
47+
schnorrsig_batch_verify_11861: min 20.5us / avg 20.5us / max 20.5us
48+
schnorrsig_batch_verify_14234: min 20.2us / avg 20.3us / max 20.3us
49+
schnorrsig_batch_verify_17081: min 20.1us / avg 20.1us / max 20.1us
50+
schnorrsig_batch_verify_20498: min 20.0us / avg 20.0us / max 20.0us
51+
schnorrsig_batch_verify_24598: min 19.8us / avg 19.8us / max 19.8us
52+
schnorrsig_batch_verify_29518: min 19.7us / avg 19.7us / max 19.7us
53+
schnorrsig_batch_verify_35422: min 19.6us / avg 19.6us / max 19.6us
54+
schnorrsig_batch_verify_42507: min 19.6us / avg 19.6us / max 19.6us
55+
schnorrsig_batch_verify_51009: min 19.5us / avg 19.5us / max 19.6us
56+
schnorrsig_batch_verify_61211: min 19.5us / avg 19.5us / max 19.5us
57+
schnorrsig_batch_verify_73454: min 19.4us / avg 19.4us / max 19.4us
58+
schnorrsig_batch_verify_88145: min 19.4us / avg 19.5us / max 19.5us
59+
schnorrsig_batch_verify_105775: min 19.4us / avg 19.4us / max 19.4us
60+
schnorrsig_batch_verify_126931: min 19.3us / avg 19.4us / max 19.4us
61+
schnorrsig_batch_verify_152318: min 19.3us / avg 19.3us / max 19.3us
62+
schnorrsig_batch_verify_182782: min 19.3us / avg 19.3us / max 19.3us
63+
schnorrsig_batch_verify_219339: min 19.3us / avg 19.4us / max 19.4us
64+
schnorrsig_batch_verify_263207: min 19.3us / avg 19.4us / max 19.4us
65+
schnorrsig_batch_verify_315849: min 19.3us / avg 19.3us / max 19.4us
66+
schnorrsig_batch_verify_379019: min 19.3us / avg 19.4us / max 19.4us
67+
schnorrsig_batch_verify_454823: min 19.3us / avg 19.3us / max 19.4us

doc/speedup-batch/bench_output.txt.log

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
HEAD: 1e850ba7
1+
HEAD: 2d843581
22
checking build system type... x86_64-pc-linux-gnu
33
checking host system type... x86_64-pc-linux-gnu
44
checking for a BSD-compatible install... /usr/bin/install -c

doc/speedup-batch/speedup-batch.png

-108 Bytes
Loading

src/modules/schnorrsig/main_impl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ static int secp256k1_schnorrsig_verify_batch_ecmult_callback(secp256k1_scalar *s
265265
* (-randomizer_cache[1], R2)
266266
* (-randomizer_cache[1]*e2, P2) */
267267
secp256k1_scalar_chacha20(&ecmult_context->randomizer_cache[0], &ecmult_context->randomizer_cache[1], ecmult_context->chacha_seed, idx / 4);
268-
secp256k1_scalar_split_128(&ecmult_context->randomizer_cache[0], &ecmult_context->randomizer_cache[1], &ecmult_context->randomizer_cache[1]);
268+
secp256k1_scalar_split_128_randomizer(&ecmult_context->randomizer_cache[0], &ecmult_context->randomizer_cache[1], &ecmult_context->randomizer_cache[1]);
269269
}
270270

271271
/* R */
@@ -368,7 +368,7 @@ static int secp256k1_schnorrsig_verify_batch_sum_s(secp256k1_scalar *s, unsigned
368368
secp256k1_scalar term;
369369
if (i % 2 == 1) {
370370
secp256k1_scalar_chacha20(&randomizer_cache[0], &randomizer_cache[1], chacha_seed, i / 2);
371-
secp256k1_scalar_split_128(&randomizer_cache[0], &randomizer_cache[1], &randomizer_cache[1]);
371+
secp256k1_scalar_split_128_randomizer(&randomizer_cache[0], &randomizer_cache[1], &randomizer_cache[1]);
372372
}
373373

374374
secp256k1_scalar_set_b32(&term, &sig[i][32], &overflow);

src/scalar.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,7 @@ static void secp256k1_scalar_cmov(secp256k1_scalar *r, const secp256k1_scalar *a
105105
/** Generate two scalars from a 32-byte seed and an integer using the chacha20 stream cipher */
106106
static void secp256k1_scalar_chacha20(secp256k1_scalar *r1, secp256k1_scalar *r2, const unsigned char *seed, uint64_t idx);
107107

108+
/* Splits to a scalar into two scalars in [-2^127, 2^127-1] */
109+
static void secp256k1_scalar_split_128_randomizer(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *k);
110+
108111
#endif /* SECP256K1_SCALAR_H */

src/scalar_impl.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,4 +294,13 @@ static void secp256k1_scalar_split_lambda_verify(const secp256k1_scalar *r1, con
294294
#endif /* VERIFY */
295295
#endif /* !defined(EXHAUSTIVE_TEST_ORDER) */
296296

297+
static void secp256k1_scalar_split_128_randomizer(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *k) {
298+
/* 2^127 */
299+
secp256k1_scalar t = SECP256K1_SCALAR_CONST(0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0x00000000, 0x00000000, 0x00000000);
300+
secp256k1_scalar_negate(&t, &t);
301+
secp256k1_scalar_split_128(r1, r2, k);
302+
secp256k1_scalar_add(r1, r1, &t);
303+
secp256k1_scalar_add(r2, r2, &t);
304+
}
305+
297306
#endif /* SECP256K1_SCALAR_IMPL_H */

0 commit comments

Comments
 (0)