nak key combine and nak event --musig2

This commit is contained in:
fiatjaf
2024-05-14 15:23:08 -03:00
parent f198a46c19
commit 81968f6c0c
5 changed files with 412 additions and 8 deletions

View File

@@ -53,6 +53,31 @@ example:
Usage: "private key to when communicating with the bunker given on --connect",
DefaultText: "a random key",
},
// ~ these args are only for the convoluted musig2 signing process
// they will be generally copy-shared-pasted across some manual coordination method between participants
&cli.UintFlag{
Name: "musig2",
Usage: "number of signers to use for musig2",
Value: 1,
DefaultText: "1 -- i.e. do not use musig2 at all",
},
&cli.StringSliceFlag{
Name: "musig2-pubkey",
Hidden: true,
},
&cli.StringFlag{
Name: "musig2-nonce-secret",
Hidden: true,
},
&cli.StringSliceFlag{
Name: "musig2-nonce",
Hidden: true,
},
&cli.StringSliceFlag{
Name: "musig2-partial",
Hidden: true,
},
// ~~~
&cli.BoolFlag{
Name: "envelope",
Usage: "print the event enveloped in a [\"EVENT\", ...] message ready to be sent to a relay",
@@ -226,6 +251,21 @@ example:
if err := bunker.SignEvent(c.Context, &evt); err != nil {
return fmt.Errorf("failed to sign with bunker: %w", err)
}
} else if numSigners := c.Uint("musig2"); numSigners > 1 && sec != "" {
pubkeys := c.StringSlice("musig2-pubkey")
secNonce := c.String("musig2-nonce-secret")
pubNonces := c.StringSlice("musig2-nonce")
partialSigs := c.StringSlice("musig2-partial")
signed, err := performMusig(c.Context,
sec, &evt, int(numSigners), pubkeys, pubNonces, secNonce, partialSigs)
if err != nil {
return fmt.Errorf("musig2 error: %w", err)
}
if !signed {
// we haven't finished signing the event, so the users still have to do more steps
// instructions for what to do should have been printed by the performMusig() function
return nil
}
} else if err := evt.Sign(sec); err != nil {
return fmt.Errorf("error signing with provided key: %w", err)
}