Skip to content

Commit 8c6db5b

Browse files
committed
update README (#19)
Signed-off-by: bytemare <3641580+bytemare@users.noreply.github.com>
1 parent 7565897 commit 8c6db5b

1 file changed

Lines changed: 15 additions & 12 deletions

File tree

README.md

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ in the [original work](https://eprint.iacr.org/2020/852.pdf).
3838
| 4 | P-384 | filippo.io/nistec |
3939
| 5 | P-521 | filippo.io/nistec |
4040
| 6 | Edwards25519 | filippo.io/edwards25519 |
41-
| 7 | Secp256k1 | github.com/bytemare/crypto |
41+
| 7 | Secp256k1 | github.com/bytemare/secp256k1 |
4242

4343
The groups, scalars (secret keys and nonces), and group elements (public keys and commitments) are opaque objects that
4444
expose all necessary cryptographic and serialization functions.
@@ -66,7 +66,7 @@ If the [DKG](https://github.com/bytemare/dkg) package was used to generate keys,
6666
and must communicate their PublicKeyShare to the coordinator and other signers.
6767

6868
It is easy to encode and decode these key shares and public key shares for transmission and storage,
69-
using the ```Encode()``` and ```Decode()``` methods (or in JSON marshalling).
69+
using the ```Encode()``` and ```Decode()``` methods (or hexadecimal or JSON marshalling).
7070

7171
#### Import existing identifiers and keys
7272

@@ -151,17 +151,20 @@ and providing the signer's ```KeyShare```.
151151
FROST is a two round signing protocol, in which the first round can be asynchronously pre-computed, so that signing can
152152
actually be done in one round when necessary.
153153

154-
First Round: Signer commitment
154+
#### First Round: Signer commitment
155155
- Signers commit to internal nonces, by calling the ```commitment := signer.Commit()``` method, which returns one commitment
156-
stores corresponding nonces internally. In this manner, signers can produce many commitments before signing sessions start.
157-
Signers send these commitments to either a coordinator or all other signers. Note that a commitment is not function of the
158-
future message to sign, so a signer can produce them without knowing the message in advance.
159-
- The coordinator (or all other signers) collect these commitments, into a list.
160-
161-
Second Round: Signing
156+
and stores corresponding nonces internally. In this manner, signers can produce many commitments before signing sessions start.
157+
Note that a commitment is not function of the future message to sign, so a signer can produce them without knowing the message in advance.
158+
- Signers send these commitments to either a coordinator or all other signers.
159+
- The coordinator (or all other signers) collect these commitments, into a list. The coordinator can prepare such lists
160+
for each future message to be signed, a list containing a single commitment from each signer. These commitments must
161+
not be reused.
162+
163+
#### Second Round: Signing
162164
- The coordinator broadcasts the message to be signed and a list of commitments, one from each signer, to each signer.
163165
- The signers sign the message ```sigShare, err := signer.Sign(message, commitmentList)```, each producing their signature share.
164-
- These signature shares must then be shared and aggregated to produce the final signature, ```signature, err := configuration.AggregateSignatures(message, sigShares, commitmentList, true)```.
166+
- These signature shares must then be shared and aggregated to produce the final signature,
167+
```signature, err := configuration.AggregateSignatures(message, sigShares, commitmentList, true)```.
165168

166169
#### Coordinator
167170

@@ -170,7 +173,7 @@ The coordinator does not have any secret or private information, and must never
170173
Commitments received by signers have an identifier, which allows for triage and registration. Commitments must only be
171174
used once. The coordinator may further hedge against nonce-reuse by tracking the nonce commitments used for a given group key.
172175

173-
If the ```verify``` argument in the ```AggregateSignatures()``` is set to ```true``` (recommended), signature shares and output signature are thoroughly verified.
176+
If the ```verify``` argument in the ```AggregateSignatures()``` is set to ```true``` (which is recommended), signature shares are thoroughly verified.
174177
Upon error or invalid share, the error message indicates the first invalid share it encountered.
175178
A coordinator should always verify the signature after ```AggregateSignatures()``` if the ```verify``` argument has been set to ```false```.
176179

@@ -179,7 +182,7 @@ That signer can then be denied of further contributions.
179182

180183
### Resumption and storage
181184

182-
Configurations, keys, commitments, commitment lists, and even signers can be backed up to byte strings for transmission and storage,
185+
Configurations, keys, commitments, commitment lists, and even signers can be serialized for transmission and storage,
183186
and re-instantiated from them. To decode, just create that object and use its ```Decode()``` method.
184187

185188
For example, to back up a signer with its private keys and commitments, use:

0 commit comments

Comments
 (0)