Skip to content

Commit 1683772

Browse files
committed
Merge #294: generator: massively speed up serialization
6361266 generator: speed up parsing (Andrew Poelstra) 5e7c2c1 generator: massively speed up serialization (Andrew Poelstra) Pull request description: ACKs for top commit: real-or-random: utACK 6361266 jonasnick: ACK 6361266 Tree-SHA512: 9f35467ac9d39d23b68a3f830c920f61ae39d99974d6a864df4a3c19860dc8fc447609d0480e45234c66250878d34da03bfcf0056eaa83d3c78babb254962bf4
2 parents d661a93 + 6361266 commit 1683772

File tree

2 files changed

+10
-13
lines changed

2 files changed

+10
-13
lines changed

src/modules/generator/main_impl.h

+4-13
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,6 @@ static void secp256k1_pedersen_commitment_save(secp256k1_pedersen_commitment* co
276276

277277
int secp256k1_pedersen_commitment_parse(const secp256k1_context* ctx, secp256k1_pedersen_commitment* commit, const unsigned char *input) {
278278
secp256k1_fe x;
279-
secp256k1_ge ge;
280279

281280
VERIFY_CHECK(ctx != NULL);
282281
ARG_CHECK(commit != NULL);
@@ -285,28 +284,20 @@ int secp256k1_pedersen_commitment_parse(const secp256k1_context* ctx, secp256k1_
285284

286285
if ((input[0] & 0xFE) != 8 ||
287286
!secp256k1_fe_set_b32_limit(&x, &input[1]) ||
288-
!secp256k1_ge_set_xquad(&ge, &x)) {
287+
!secp256k1_ge_x_on_curve_var(&x)) {
289288
return 0;
290289
}
291-
if (input[0] & 1) {
292-
secp256k1_ge_neg(&ge, &ge);
293-
}
294-
secp256k1_pedersen_commitment_save(commit, &ge);
290+
291+
memcpy(commit->data, input, 33);
295292
return 1;
296293
}
297294

298295
int secp256k1_pedersen_commitment_serialize(const secp256k1_context* ctx, unsigned char *output, const secp256k1_pedersen_commitment* commit) {
299-
secp256k1_ge ge;
300-
301296
VERIFY_CHECK(ctx != NULL);
302297
ARG_CHECK(output != NULL);
303298
ARG_CHECK(commit != NULL);
304299

305-
secp256k1_pedersen_commitment_load(&ge, commit);
306-
307-
output[0] = 9 ^ secp256k1_fe_is_square_var(&ge.y);
308-
secp256k1_fe_normalize_var(&ge.x);
309-
secp256k1_fe_get_b32(&output[1], &ge.x);
300+
memcpy(output, commit->data, 33);
310301
return 1;
311302
}
312303

src/modules/generator/tests_impl.h

+6
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,13 @@ static void test_pedersen(void) {
264264
}
265265
CHECK(secp256k1_pedersen_blind_sum(CTX, &blinds[(total - 1) * 32], bptr, total - 1, inputs));
266266
for (i = 0; i < total; i++) {
267+
unsigned char result[33];
268+
secp256k1_pedersen_commitment parse;
269+
267270
CHECK(secp256k1_pedersen_commit(CTX, &commits[i], &blinds[i * 32], values[i], secp256k1_generator_h));
271+
CHECK(secp256k1_pedersen_commitment_serialize(CTX, result, &commits[i]));
272+
CHECK(secp256k1_pedersen_commitment_parse(CTX, &parse, result));
273+
CHECK(secp256k1_memcmp_var(&commits[i], &parse, 33) == 0);
268274
}
269275
CHECK(secp256k1_pedersen_verify_tally(CTX, cptr, inputs, &cptr[inputs], outputs));
270276
CHECK(secp256k1_pedersen_verify_tally(CTX, &cptr[inputs], outputs, cptr, inputs));

0 commit comments

Comments
 (0)