Skip to content

Commit bfcc479

Browse files
committed
batch: remove batch_usable api
1 parent 15e388e commit bfcc479

File tree

9 files changed

+2
-67
lines changed

9 files changed

+2
-67
lines changed

examples/batch.c

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,7 @@ int main(void) {
122122

123123
printf("Adding signatures to the batch object.......");
124124
for (i = 0; i < N_SIGS; i++) {
125-
/* It is recommended to check the validity of the batch before adding a
126-
* new input (schnorrsig/tweak check) to it. The `secp256k1_batch_add_` APIs
127-
* won't add any new input to invalid batch since the final `secp256k1_batch_verify`
128-
* API call will fail even if the new input is valid. */
129-
if(secp256k1_batch_usable(ctx, batch)) {
130-
ret = secp256k1_batch_add_schnorrsig(ctx, batch, sig[i], msg[i], sizeof(msg[i]), &pk);
131-
} else {
132-
printf("INVALID BATCH\n");
133-
return 1;
134-
}
125+
ret = secp256k1_batch_add_schnorrsig(ctx, batch, sig[i], msg[i], sizeof(msg[i]), &pk);
135126

136127
if(!ret) {
137128
printf("FAILED\n");
@@ -149,16 +140,7 @@ int main(void) {
149140

150141
printf("Adding tweak checks to the batch object.....");
151142
for (i = 0; i < N_CHECKS; i++) {
152-
/* It is recommended to check the validity of the batch before adding a
153-
* new input (schnorrsig/tweak check) to it. The `secp256k1_batch_add_` APIs
154-
* won't add any new input to invalid batch since the final `secp256k1_batch_verify`
155-
* API call will fail even if the new input is valid. */
156-
if(secp256k1_batch_usable(ctx, batch)) {
157-
ret = secp256k1_batch_add_xonlypub_tweak_check(ctx, batch, tweaked_pubkey[i], tweaked_pk_parity[i], &pk, tweak[i]);
158-
} else {
159-
printf("INVALID BATCH\n");
160-
return 1;
161-
}
143+
ret = secp256k1_batch_add_xonlypub_tweak_check(ctx, batch, tweaked_pubkey[i], tweaked_pk_parity[i], &pk, tweak[i]);
162144

163145
if(!ret) {
164146
printf("FAILED\n");

include/secp256k1_batch.h

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -63,31 +63,6 @@ SECP256K1_API void secp256k1_batch_destroy(
6363
secp256k1_batch* batch
6464
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
6565

66-
/** Checks if a batch can be used by the `secp256k1_batch_add_*` APIs.
67-
*
68-
* Returns: 1: batch can be used by `secp256k1_batch_add_*` APIs.
69-
* 0: batch cannot be used by `secp256k1_batch_add_*` APIs.
70-
*
71-
* Args: ctx: a secp256k1 context object (can be initialized for none).
72-
* batch: a secp256k1 batch object that contains a set of schnorrsigs/tweaks.
73-
*
74-
* You are advised to check if `secp256k1_batch_usable` returns 1 before calling
75-
* any `secp256k1_batch_add_*` API. We recommend this because `secp256k1_batch_add_*`
76-
* will fail in two cases:
77-
* - case 1: unparsable input (schnorrsig or tweak check)
78-
* - case 2: unusable (or invalid) batch
79-
* Calling `secp256k1_batch_usable` beforehand helps eliminate case 2 if
80-
* `secp256k1_batch_add_*` fails.
81-
*
82-
* If you ignore the above advice, all the secp256k1_batch APIs will still
83-
* work correctly. It simply makes it hard to understand the reason behind
84-
* `secp256k1_batch_add_*` failure (if occurs).
85-
*/
86-
SECP256K1_API int secp256k1_batch_usable(
87-
const secp256k1_context *ctx,
88-
const secp256k1_batch *batch
89-
) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2);
90-
9166
/** Verify the set of schnorr signatures or tweaked pubkeys present in the secp256k1_batch.
9267
*
9368
* Returns: 1: every schnorrsig/tweak (in batch) is valid

src/modules/batch/main_impl.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,13 +159,6 @@ void secp256k1_batch_destroy(const secp256k1_context *ctx, secp256k1_batch *batc
159159
}
160160
}
161161

162-
int secp256k1_batch_usable(const secp256k1_context *ctx, const secp256k1_batch *batch) {
163-
VERIFY_CHECK(ctx != NULL);
164-
ARG_CHECK(batch != NULL);
165-
166-
return batch->result;
167-
}
168-
169162
/** verifies the inputs (schnorrsig or tweak_check) by performing multi-scalar point
170163
* multiplication on the scalars (`batch->scalars`) and points (`batch->points`)
171164
* present in the batch. Uses `secp256k1_ecmult_strauss_batch_internal` to perform

src/modules/batch/tests_impl.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ static void test_batch_api(void) {
8989
}
9090
/* add tweak checks to the batch object */
9191
for (i = 0; i < N_TWK_CHECKS; i++) {
92-
CHECK(secp256k1_batch_usable(CTX, batch));
9392
CHECK(secp256k1_batch_add_xonlypub_tweak_check(CTX, batch, tweaked_pk[i], tweaked_pk_parity[i], &pk, tweak[i]));
9493
}
9594
#endif
@@ -103,7 +102,6 @@ static void test_batch_api(void) {
103102
}
104103
/* add schnorrsigs to the batch object */
105104
for (i = 0; i < N_SIGS; i++) {
106-
CHECK(secp256k1_batch_usable(CTX, batch) == 1);
107105
CHECK(secp256k1_batch_add_schnorrsig(CTX, batch, sig[i], msg[i], sizeof(msg[i]), &pk) == 1);
108106
}
109107
#endif

src/modules/extrakeys/batch_add_tests_impl.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,10 @@ static void test_batch_add_xonlypub_tweak_api(void) {
109109
CHECK(secp256k1_batch_add_xonlypub_tweak_check(CTX, batch, overflows, tweaked_pk_parity, &pk, tweak) == 0);
110110

111111
/** batch_verify should fail for incorrect tweak **/
112-
CHECK(secp256k1_batch_usable(CTX, batch));
113112
CHECK(secp256k1_batch_add_xonlypub_tweak_check(CTX, batch, tweaked_pk, !tweaked_pk_parity, &pk, tweak) == 1);
114113
CHECK(secp256k1_batch_verify(CTX, batch) == 0);
115114

116115
/** batch_add_ should ignore unusable batch object (i.e, batch->result = 0) **/
117-
CHECK(secp256k1_batch_usable(CTX, batch) == 0);
118116
CHECK(secp256k1_batch_add_xonlypub_tweak_check(CTX, batch, tweaked_pk, tweaked_pk_parity, &pk, tweak) == 0);
119117

120118
secp256k1_batch_destroy(CTX, batch);

src/modules/extrakeys/bench_impl.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ static void bench_xonly_pubkey_tweak_add_check_n(void* arg, int divisible_iters)
4444
for (i = 0; i < data->n; i++) {
4545
secp256k1_xonly_pubkey pk;
4646
CHECK(secp256k1_xonly_pubkey_parse(data->ctx, &pk, data->pks[j*data->n + i]) == 1);
47-
CHECK(secp256k1_batch_usable(data->ctx, data->batch) == 1);
4847
CHECK(secp256k1_batch_add_xonlypub_tweak_check(data->ctx, data->batch, data->tweaked_pks[j*data->n + i], *data->tweaked_pk_parities[j*data->n + i], &pk, data->tweaks[j*data->n + i]) == 1);
4948
}
5049
CHECK(secp256k1_batch_verify(data->ctx, data->batch) == 1);

src/modules/schnorrsig/batch_add_tests_impl.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ static void run_batch_schnorrsig_randomizer_gen_tests(void) {
8686
static void test_schnorrsig_sign_verify_check_batch(secp256k1_batch *batch, unsigned char *sig64, unsigned char *msg, size_t msglen, secp256k1_xonly_pubkey *pk) {
8787
int ret;
8888

89-
CHECK(secp256k1_batch_usable(CTX, batch));
9089
/* filling a random byte (in msg or sig) can cause the following:
9190
* 1. unparsable msg or sig - here, batch_add_schnorrsig fails and batch_verify passes
9291
* 2. invalid schnorr eqn - here, batch_verify fails and batch_add_schnorrsig passes
@@ -132,7 +131,6 @@ static void test_schnorrsig_sign_batch_verify_internal(void) {
132131
for (i = 0; i < N_SIGS; i++) {
133132
testrand256(msg[i]);
134133
CHECK(secp256k1_schnorrsig_sign32(CTX, sig[i], msg[i], &keypair, NULL));
135-
CHECK(secp256k1_batch_usable(CTX, batch[0]));
136134
CHECK(secp256k1_batch_add_schnorrsig(CTX, batch[0], sig[i], msg[i], sizeof(msg[i]), &pk));
137135
}
138136
CHECK(secp256k1_batch_verify(CTX, batch[0]));
@@ -179,7 +177,6 @@ static void test_schnorrsig_sign_batch_verify_internal(void) {
179177

180178
/* The empty message can be signed & verified */
181179
CHECK(secp256k1_schnorrsig_sign_custom(CTX, sig[0], NULL, 0, &keypair, NULL) == 1);
182-
CHECK(secp256k1_batch_usable(CTX, batch[0]) == 1);
183180
CHECK(secp256k1_batch_add_schnorrsig(CTX, batch[0], sig[0], NULL, 0, &pk) == 1);
184181
CHECK(secp256k1_batch_verify(CTX, batch[0]) == 1);
185182

@@ -191,12 +188,10 @@ static void test_schnorrsig_sign_batch_verify_internal(void) {
191188
testrand256(&msg_large[i]);
192189
}
193190
CHECK(secp256k1_schnorrsig_sign_custom(CTX, sig[0], msg_large, msglen, &keypair, NULL) == 1);
194-
CHECK(secp256k1_batch_usable(CTX, batch[0]) == 1);
195191
CHECK(secp256k1_batch_add_schnorrsig(CTX, batch[0], sig[0], msg_large, msglen, &pk) == 1);
196192
CHECK(secp256k1_batch_verify(CTX, batch[0]) == 1);
197193
/* batch_add fails for a random wrong message length */
198194
msglen = (msglen + (sizeof(msg_large) - 1)) % sizeof(msg_large);
199-
CHECK(secp256k1_batch_usable(CTX, batch_fail2) == 1);
200195
CHECK(secp256k1_batch_add_schnorrsig(CTX, batch_fail2, sig[0], msg_large, msglen, &pk) == 1);
201196
CHECK(secp256k1_batch_verify(CTX, batch_fail2) == 0);
202197
}
@@ -251,17 +246,14 @@ static void test_batch_add_schnorrsig_api(void) {
251246

252247
/** NULL msg with valid signature **/
253248
CHECK(secp256k1_schnorrsig_sign_custom(CTX, nullmsg_sig, NULL, 0, &keypair, NULL) == 1);
254-
CHECK(secp256k1_batch_usable(CTX, batch1) == 1);
255249
CHECK(secp256k1_batch_add_schnorrsig(CTX, batch1, nullmsg_sig, NULL, 0, &pk) == 1);
256250
CHECK(secp256k1_batch_verify(CTX, batch1) == 1);
257251

258252
/** NULL msg with invalid signature **/
259-
CHECK(secp256k1_batch_usable(CTX, batch2) == 1);
260253
CHECK(secp256k1_batch_add_schnorrsig(CTX, batch2, sig, NULL, 0, &pk) == 1);
261254
CHECK(secp256k1_batch_verify(CTX, batch2) == 0);
262255

263256
/** batch_add_ should ignore unusable batch object (i.e, batch->result = 0) **/
264-
CHECK(secp256k1_batch_usable(CTX, batch2) == 0);
265257
CHECK(secp256k1_batch_add_schnorrsig(CTX, batch2, sig, msg, sizeof(msg), &pk) == 0);
266258

267259
secp256k1_batch_destroy(CTX, batch1);

src/modules/schnorrsig/bench_impl.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ static void bench_schnorrsig_verify_n(void* arg, int divisible_iters) {
6363
for (i = 0; i < data->n; i++) {
6464
secp256k1_xonly_pubkey pk;
6565
CHECK(secp256k1_xonly_pubkey_parse(data->ctx, &pk, data->pk[j*data->n + i]) == 1);
66-
CHECK(secp256k1_batch_usable(data->ctx, data->batch) == 1);
6766
CHECK(secp256k1_batch_add_schnorrsig(data->ctx, data->batch, data->sigs[j*data->n + i], data->msgs[j*data->n + i], MSGLEN, &pk) == 1);
6867
}
6968
CHECK(secp256k1_batch_verify(data->ctx, data->batch) == 1);

src/modules/schnorrsig/tests_impl.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,6 @@ static void test_schnorrsig_bip_vectors_check_batch_verify(const unsigned char *
216216
CHECK(secp256k1_xonly_pubkey_parse(CTX, &pk, pk_serialized));
217217
batch = secp256k1_batch_create(CTX, 2, NULL);
218218
CHECK(batch != NULL);
219-
CHECK(secp256k1_batch_usable(CTX, batch) == 1);
220219
CHECK(add_expected == secp256k1_batch_add_schnorrsig(CTX, batch, sig, msg, msglen, &pk));
221220
CHECK(verify_expected == secp256k1_batch_verify(CTX, batch));
222221
secp256k1_batch_destroy(CTX, batch);

0 commit comments

Comments
 (0)