Skip to content

Commit

Permalink
musig: turn off multiexponentiation for now
Browse files Browse the repository at this point in the history
Before turning it on we need to have a discussion about our confidence in the
correctness of the multiexponentiation code.
  • Loading branch information
jonasnick committed Dec 17, 2021
1 parent 3c79d97 commit ac1e367
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
12 changes: 7 additions & 5 deletions include/secp256k1_musig.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,11 +197,13 @@ SECP256K1_API int secp256k1_musig_partial_sig_parse(
*
* Returns: 0 if the arguments are invalid, 1 otherwise
* Args: ctx: pointer to a context object initialized for verification
* scratch: scratch space used to compute the aggregate pubkey by
* multiexponentiation. Generally, the larger the scratch
* space, the faster this function. However, the returns of
* providing a larger scratch space are diminishing. If NULL,
* an inefficient algorithm is used.
* scratch: should be NULL because it is not yet implemented. If it
* was implemented then the scratch space would be used to
* compute the aggregate pubkey by multiexponentiation.
* Generally, the larger the scratch space, the faster this
* function. However, the returns of providing a larger
* scratch space are diminishing. If NULL, an inefficient
* algorithm is used.
* Out: agg_pk: the MuSig-aggregated x-only public key. If you do not need it,
* this arg can be NULL.
* keyagg_cache: if non-NULL, pointer to a musig_keyagg_cache struct that
Expand Down
5 changes: 4 additions & 1 deletion src/modules/musig/keyagg_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ int secp256k1_musig_pubkey_agg(const secp256k1_context* ctx, secp256k1_scratch_s
secp256k1_gej pkj;
secp256k1_ge pkp;
size_t i;
(void) scratch;

VERIFY_CHECK(ctx != NULL);
if (agg_pk != NULL) {
Expand All @@ -216,7 +217,9 @@ int secp256k1_musig_pubkey_agg(const secp256k1_context* ctx, secp256k1_scratch_s
if (!secp256k1_musig_compute_pk_hash(ctx, ecmult_data.pk_hash, pubkeys, n_pubkeys)) {
return 0;
}
if (!secp256k1_ecmult_multi_var(&ctx->error_callback, scratch, &pkj, NULL, secp256k1_musig_pubkey_agg_callback, (void *) &ecmult_data, n_pubkeys)) {
/* TODO: actually use optimized ecmult_multi algorithms by providing a
* scratch space */
if (!secp256k1_ecmult_multi_var(&ctx->error_callback, NULL, &pkj, NULL, secp256k1_musig_pubkey_agg_callback, (void *) &ecmult_data, n_pubkeys)) {
/* In order to reach this line with the current implementation of
* ecmult_multi_var one would need to provide a callback that can
* fail. */
Expand Down

0 comments on commit ac1e367

Please sign in to comment.