sputn1ck
4b2fe9f83e
btcec/schnorr/musig2: Add CombineSig testvectors
...
This commit adds the testvectors from
cdc3520c07
2022-08-04 11:55:19 +02:00
sputn1ck
5e960074ea
btcec/schnorr/musig2: Add PartialSigVerify testvectors
...
Adds testvectors from
ebb6a7454b
and
6788ee5412
2022-08-04 11:51:02 +02:00
sputn1ck
85356e8174
btcec/schnorr/musig2: Throw error on invalid partial sig
2022-08-04 11:49:29 +02:00
sputn1ck
53f47d65f1
btcec/schnorr/musig2: Add Sign test vectors
...
This commit adds the testvectors from
4c06f31daf
to the testcases
2022-08-04 11:49:17 +02:00
sputn1ck
8b59e7aa6b
btcec/schnorr/musig2: Add AggregateNonce testvectors
...
This commit adds the testvectors from
0ec2aefdaa
to the testcases
2022-08-04 11:46:52 +02:00
sputn1ck
1b85a60b6d
btcec/schnorr/musig2: Add AggregateKeys testvectors
...
This commit adds the testvectors from
20f60b0f37
to the testcases
2022-08-04 11: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
04aac1ec7d
Merge pull request #1863 from Roasbeef/version-bump-23-1
...
build: bump version to v0.23.1
2022-06-07 10:40:35 -07:00
Olaoluwa Osuntokun
e6f6ba4593
build: bump version to v0.23.1
...
Includes:
* A fix in the RPC server: https://github.com/btcsuite/btcd/pull/1862
* Rolling back a breaking change fromteh PoV of the rpcclient: https://github.com/btcsuite/btcd/pull/1844
2022-06-06 16:16:49 -07:00
Olaoluwa Osuntokun
8fc2d707f6
Merge pull request #1862 from bhandras/rpccliet-fix2
...
rpcclient: fix missing return
2022-06-06 16:09:32 -07:00
Olaoluwa Osuntokun
1696c63888
Merge pull request #1844 from chappjc/getnewaddress-rpcclient-revert
...
rpcclient: add getnewaddresstype and revert breaking change
2022-06-06 16:08:50 -07:00
Andras Banki-Horvath
b2af7770e9
rpcclient: fix missing return
2022-06-03 14:58:20 +02:00
Olaoluwa Osuntokun
b5fb9b05c8
Merge pull request #1860 from Roasbeef/version-bump-23
...
build: bump version to v0.23
2022-06-02 14:13:29 -07:00
Olaoluwa Osuntokun
2ce3069953
build: bump version to v0.23.0
2022-05-31 17:56:23 -07:00
Olaoluwa Osuntokun
fd7f41cdc5
Merge pull request #1840 from ellemouton/exportCheckStandardnessFunc
...
mempool: export checkStandardness func
2022-05-26 14:50:18 -07:00
Olaoluwa Osuntokun
cee92e09ad
Merge pull request #1856 from bhandras/rpcclient-fix
...
rpcclient: fix crash in http retry handler
2022-05-17 14:59:29 -07:00
Andras Banki-Horvath
97313ac873
rpcclient: save the last error when retrying
2022-05-13 15:35:14 +02:00
Andras Banki-Horvath
9babf1fa08
rpcclient: fix backoff logic
...
This commit removes Sleep() from the rety handler so that the shutdown
request is always respected. Furthermore the maximum retry count is corrected.
2022-05-13 15:35:14 +02:00
Andras Banki-Horvath
966511246d
rpclient: fix masked error causing crash after max retries
...
This commit fixes the error that is masked inside the for loop's scope.
Previously after max retries the error didn't leave the for scope and
therefore httpResponse remained nil which in turn resulted in a crash.
2022-05-13 15:35:13 +02:00
Andras Banki-Horvath
ebed1927bf
rpcclient: fix formatting
2022-05-13 15:35:09 +02:00
Olaoluwa Osuntokun
cc46b0fed8
Merge pull request #1847 from guggero/taproot-psbt
...
psbt: add support for new Taproot fields
2022-05-10 16:31:08 -07:00
Olaoluwa Osuntokun
d5eb4e9f68
Merge pull request #1854 from orijtech/fuzz-FuzzParsePubKey
...
fuzz: add ParsePubKey fuzzer
2022-05-10 16:30:57 -07:00
Emmanuel T Odeke
4550049281
fuzz: add ParsePubKey fuzzer
...
Courtesy of the Cosmos Network security team, this change
adds a fuzzer to ParsePubKey, given that Tendermint uses
this code.
2022-05-05 20:35:35 -07:00
Oliver Gugger
886a8f41db
psbt: make Taproot PSBT finalizable
2022-05-02 16:25:17 +02:00
Oliver Gugger
0572702cec
psbt: add valid and invalid PSBTs for new types
2022-05-02 16:25:16 +02:00
Oliver Gugger
5cf346f14f
psbt: add (de-)serialization for new types
2022-05-02 16:25:15 +02:00
Oliver Gugger
db6cb69d84
psbt: add new input/output types and structs
2022-05-02 16:25:13 +02:00
Oliver Gugger
e6367b26b7
psbt: remove invalid type from typo
2022-05-02 16:25:12 +02:00
Oliver Gugger
a764afd44e
psbt: rename receiver to match rest of code
2022-05-02 16:25:11 +02:00
Oliver Gugger
a336854e27
psbt: fix typo, remove TODO
2022-05-02 16:25:09 +02:00
Olaoluwa Osuntokun
a86222c92d
Merge pull request #1820 from Roasbeef/musig2
...
btcec/schnorr/musig2: add new musig2 implementation based on musig2 draft BIP
2022-04-28 16:46:04 -07:00
Olaoluwa Osuntokun
1da361b04e
btcec/schnorr/musig2: add optional json dump command to gen test vectors
2022-04-28 16:20:11 -07:00
Olaoluwa Osuntokun
ba20c75aaf
btcec/schnorr/musig2: pass in aux info during nonce generation
2022-04-28 16:20:07 -07: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
55c8cab769
btcec/schnorr/musig2: add new key tweak combination test vectors
2022-04-28 16:20:03 -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
9d0d52708a
btcec/schnorr/musig2: add explicit support for BIP 86 multi-signing
...
In this commit, we add a series of new functional optinos to make
signing for an aggregated key where the final taproot output key was
derived using BIP 86. This can be used in cases where no script path
shuold be allowed, and only an n-of-n multi-sig should be used.
2022-04-28 16:19:59 -07:00
Olaoluwa Osuntokun
f7168c8663
schnorr/musig2: add native support for taproot output key tweaking
...
In this commit, we add a series of new options and methods to make it
easier to use the package in the context of a taproot output that
commits to a script root or some other value. Before this series of
changes, the API was hard to use in this context as the taproot tweak
actually includes the internal public key, which in this case is the
aggregated public key. So you actually needed to call that API w/o the
tweak, get that, then recompute the tweak itself.
To make things easier in the taproot context, we've added a series of
new options that'll return the aggregated key before any tweaks (to be
used as the internal key), and also handle computing the BIP 341 tweak
value for the caller.
2022-04-28 16:19:57 -07:00
Olaoluwa Osuntokun
08187eb786
btcec/schnorr/musig2: add support for tweaked aggregated keys
...
In this commit, we add support for signing with tweaked aggregated keys.
Such signing is required when signing for a taproot output key that
actually commits to a script tree root, or was generated using BIP 86.
A series of new functional arguments (that can likely be de-dup'd using
Go's new type params), have been added to allow callers to optionally
flip on this new behavior.
2022-04-28 16:19:55 -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
e85e7c3ac7
btcec/schnorr/musig2: optimize signing+verification
...
In this commit, we optimize signing+verification mainly by only
computing values once, and reducing allocations when possible.
The following optimizations have been implemented:
* Use a single buffer allocation in keyHashFingerprint to avoid
dynamic buffer growth+re-sizing
* Remove the isSecondKey computation and replace that with a single
routine that computes the index of the second unique key.
* Optimize keyHashFingerprint usage by only computing it once during
signing +verification.
A further optimization is possible: use the x coordinate of a key for
comparisons instead of computing the full sexualision. We need to do
the latter atm, as the X() method of the public key struct will allocate
more memory as it allocate and sets the buffer in place.
The final benchmarks of before and after this commit:
benchmark old ns/op new ns/op delta
BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=true-8 1227374 1194047 -2.72%
BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=false-8 1217743 1191468 -2.16%
BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=true-8 2755544 2698827 -2.06%
BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=false-8 2754749 2694547 -2.19%
BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=true-8 12382654 10561204 -14.71%
BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=false-8 12260134 10315376 -15.86%
BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=true-8 24832061 22009935 -11.36%
BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=false-8 24650086 21022833 -14.71%
BenchmarkPartialVerify/sort_keys=true/num_signers=10-8 1485787 1473377 -0.84%
BenchmarkPartialVerify/sort_keys=false/num_signers=10-8 1447275 1465139 +1.23%
BenchmarkPartialVerify/sort_keys=true/num_signers=100-8 12503482 10672618 -14.64%
BenchmarkPartialVerify/sort_keys=false/num_signers=100-8 12388289 10581398 -14.59%
BenchmarkCombineSigs/num_signers=10-8 0.00 0.00 +0.00%
BenchmarkCombineSigs/num_signers=100-8 0.00 0.00 -1.95%
BenchmarkAggregateNonces/num_signers=10-8 0.00 0.00 -0.76%
BenchmarkAggregateNonces/num_signers=100-8 0.00 0.00 +1.13%
BenchmarkAggregateKeys/num_signers=10/sort_keys=true-8 0.00 0.00 -0.09%
BenchmarkAggregateKeys/num_signers=10/sort_keys=false-8 0.00 0.01 +559.94%
BenchmarkAggregateKeys/num_signers=100/sort_keys=true-8 0.01 0.01 -11.30%
BenchmarkAggregateKeys/num_signers=100/sort_keys=false-8 0.01 0.01 -11.66%
benchmark old allocs new allocs delta
BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=true-8 458 269 -41.27%
BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=false-8 409 222 -45.72%
BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=true-8 892 524 -41.26%
BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=false-8 841 467 -44.47%
BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=true-8 14366 3089 -78.50%
BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=false-8 13143 1842 -85.98%
BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=true-8 27596 4964 -82.01%
BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=false-8 26309 3707 -85.91%
BenchmarkPartialVerify/sort_keys=true/num_signers=10-8 430 243 -43.49%
BenchmarkPartialVerify/sort_keys=false/num_signers=10-8 430 243 -43.49%
BenchmarkPartialVerify/sort_keys=true/num_signers=100-8 13164 1863 -85.85%
BenchmarkPartialVerify/sort_keys=false/num_signers=100-8 13164 1863 -85.85%
BenchmarkCombineSigs/num_signers=10-8 0 0 +0.00%
BenchmarkCombineSigs/num_signers=100-8 0 0 +0.00%
BenchmarkAggregateNonces/num_signers=10-8 0 0 +0.00%
BenchmarkAggregateNonces/num_signers=100-8 0 0 +0.00%
BenchmarkAggregateKeys/num_signers=10/sort_keys=true-8 0 0 +0.00%
BenchmarkAggregateKeys/num_signers=10/sort_keys=false-8 0 0 +0.00%
BenchmarkAggregateKeys/num_signers=100/sort_keys=true-8 0 0 +0.00%
BenchmarkAggregateKeys/num_signers=100/sort_keys=false-8 0 0 +0.00%
benchmark old bytes new bytes delta
BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=true-8 27854 14878 -46.59%
BenchmarkPartialSign/num_signers=10/fast_sign=true/sort=false-8 25508 12605 -50.58%
BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=true-8 54982 29476 -46.39%
BenchmarkPartialSign/num_signers=10/fast_sign=false/sort=false-8 52581 26805 -49.02%
BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=true-8 1880138 166996 -91.12%
BenchmarkPartialSign/num_signers=100/fast_sign=true/sort=false-8 1820561 106295 -94.16%
BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=true-8 3706291 275344 -92.57%
BenchmarkPartialSign/num_signers=100/fast_sign=false/sort=false-8 3642725 214122 -94.12%
BenchmarkPartialVerify/sort_keys=true/num_signers=10-8 26995 14078 -47.85%
BenchmarkPartialVerify/sort_keys=false/num_signers=10-8 26980 14078 -47.82%
BenchmarkPartialVerify/sort_keys=true/num_signers=100-8 1822043 107767 -94.09%
BenchmarkPartialVerify/sort_keys=false/num_signers=100-8 1822046 107752 -94.09%
BenchmarkCombineSigs/num_signers=10-8 0 0 +0.00%
BenchmarkCombineSigs/num_signers=100-8 0 0 +0.00%
BenchmarkAggregateNonces/num_signers=10-8 0 0 +0.00%
BenchmarkAggregateNonces/num_signers=100-8 0 0 +0.00%
BenchmarkAggregateKeys/num_signers=10/sort_keys=true-8 0 0 +0.00%
BenchmarkAggregateKeys/num_signers=10/sort_keys=false-8 0 0 +0.00%
BenchmarkAggregateKeys/num_signers=100/sort_keys=true-8 0 0 +0.00%
BenchmarkAggregateKeys/num_signers=100/sort_keys=false-8 0 0 +0.00%
2022-04-28 16:19:51 -07:00
Olaoluwa Osuntokun
4b46b2298a
btcec/schnorr/musig2: add benchmarks
2022-04-28 16:19:49 -07:00
Olaoluwa Osuntokun
69a42a3566
btcec/schnorr/musig2: add multi-party signing test case w/ 100 signers
...
In this commit, we add a final test case that exercises the act of
generating partial signatures amongst 100 signers, combining them into a
single signature, and finally verifying to make sure the final signature
is valid.
2022-04-28 16:19:47 -07:00
Olaoluwa Osuntokun
d25f072e71
btcec/schnorr/musig2: add test vectors from secp256k1-zkp
...
In this commit, we add test vectors which are extracted from the
secp256k1-zkp/ codebase and match up with the current draft
specification.
2022-04-28 16:19:44 -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
Olaoluwa Osuntokun
1a65f1ccf0
btcec/schnorr/musig2: add key musig2 key aggregation routines
...
In this commit, we add the set of key aggregation routines for musig2.
This includes the main public key aggregation method, as well as the
aggregation coefficient which is used to compute "mu" when signing.
The logic in this implementation is based on the musig2 paper, as well
as this spec:
https://github.com/ElementsProject/secp256k1-zkp/blob/master/doc/musig-spec.mediawiki .
2022-04-28 16:19:38 -07:00
Olaoluwa Osuntokun
8c5bfeecf0
Merge pull request #1842 from guggero/psbt-serialization-fix
...
psbt: always use non witness serialization format
2022-04-18 14:39:48 -07:00