Commit graph

14 commits

Author SHA1 Message Date
sputn1ck
c5b3ed699f
btcec/schnorr/musig2: add public key to secnonce
This commit adds the public key to the sec nonce and ensures that we're
signing with the right key.

Reference: 0e3cfaa526
2022-11-03 23:02:06 +01:00
sputn1ck
f6279eabbe
btcec/schnorr/musig2: add pk option to NonceGen
This commit adds the pk option to NonceGen and makes it mandatory.

Reference: a89f8578e1
2022-11-03 23:01:41 +01:00
Olaoluwa Osuntokun
3d9f4484df
btcec/schnorr/musig: update nonce test vectors to musig2 1.0.0 2022-10-20 17:57:50 -07:00
Olaoluwa Osuntokun
1567f20055
btcec/schnorr/musig2: update to musig 1.0.0
The major change in musig 1.0.0 is that plain public keys are used as
input to key aggregation.
2022-10-20 17:57:46 -07:00
Olaoluwa Osuntokun
a34e777916
btcec/schnorr/musig2: update musig2 impl to version 0.7.0
The two _concrete_ changes between version 0.4.0 (where we are before
this commit), and version 0.7.0 are:

  1. Variable length messages are now allowed, this comes with a new 8
     byte prefix for the messages.

     * Our implementation was already using a `[]byte` for the
       message/hash, so no extra API changes are needed here.

  2. The serialization for a blank message and a normal message (for
     nonce gen) is now distinct. A single byte is added (either 0 or 1)
     to indicate if a message was passed into nonce generation.
2022-10-20 17:57:42 -07:00
sputn1ck
44eb8c64f8
btcec/schnorr/musig2: Allow infinity nonces
This commit updates the musig2 module to allow
infinity nonces, as per Musig2 0.4.0.
2022-08-09 06:44:25 +02:00
sputn1ck
478a2f78c4
btcec/schnorr/musig2: Add nonce generation testcases
This commit adds the testcases specified under version 0.3.1 from
https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki#change-log

and the fixes from
79438fd604
2022-08-04 11:38:20 +02:00
sputn1ck
4ad819e7af
btcec/schnorr/musig2: Update to MuSig 0.3.0
This commit changes the i's in GenNonces to 0 and 1 as per
https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki#change-log
0.3
2022-08-04 11:34:10 +02:00
sputn1ck
3376655b9c
btcec/schnorr/musig2: XOR rand with secret key
This commit XORs the secret key (if a secret key is specified)
with the random bytes as per MuSig2 Spec
(https://github.com/jonasnick/bips/blob/musig2/bip-musig2.mediawiki#nonce-generation-1)
2022-08-04 11:32:57 +02:00
Olaoluwa Osuntokun
953e2dd94a
btcec/schnorr/musig2: enable early nonce generation w/ a context
In this commit, we enable early nonce generation, allowing callers to
obtain generated nonces before the total set of signers is actually
known. This type of nonce generation is useful for contexts like LN
funding when we want to minimize the round trips and send nonces before
we know the pubkey of the other party.
2022-04-28 16:20:05 -07:00
Olaoluwa Osuntokun
65e4fc0dea
btcec/schnorr/musig2: update nonce generation to support optional inputs
In this commit, we update the nonce generation to support optional
parameters defined in the latest BIP draft. These parameters are
optional, but if specified my mitigate the effect of weak randomness
when generating the nonce.

Given the protocol doesn't require signers to prove how they generate
their nonces, this update is mainly to ensure strict spec compliance,
and is effectively optional.
2022-04-28 16:20:01 -07:00
Olaoluwa Osuntokun
743cbc8403
btcec/schnorr/musig2: add safer signing API with Session+Context
In this commit, we introduce an easier to use API for musig2 signing in
the Session and Context structs.

The Context struct represents a particular musig2 signing context which
is defined by the set of signers. The struct can be serialized to disk
as it contains no volatile information. A given context can be kept for
each signer in the final set.

The Session struct represents an ephemeral musig2 signing session. It
handles nonce generation, key aggregation, nonce combination, signature
combination, and final sig verification all in one API. The API also
protects against nonce generation by not exposing nonces to the end user
and also attempting to catch nonce re-use (assuming no process forking)
across sessions.
2022-04-28 16:19:53 -07:00
Olaoluwa Osuntokun
bb7ba7b1fc
btcec/schnorr/musig2: add partial sig generation, validation, and combination
In this commit, we build on the prior two commits by adding the ability
to generate partial musig2 signatures, validate them individually, and
finally combine them into a single signature.

Much of the logic here is unoptimized, and will be optimized in a later
commit. In addition, we also want to eventually have a nicer API to
support the book keeping necessary during multi signing.
2022-04-28 16:19:42 -07:00
Olaoluwa Osuntokun
8343e462a6
btcec/schnorr/musig2: add nonce generation & aggregation funcs
In this commit, we add the ability to generate the secret+public nonces,
as well as combine a series of nonces into a single combined nonce
(which is used when doing multi signing).
2022-04-28 16:19:40 -07:00