multi: add MuSig2Cleanup method to MuSig2 signer
This commit is contained in:
6 files changed
+59
No files matched your search
@@ -58,6 +58,9 @@ type MuSig2Signer interface {
|
|||||||
// returned.
|
// returned.
|
||||||
MuSig2CombineSig(MuSig2SessionID,
|
MuSig2CombineSig(MuSig2SessionID,
|
||||||
[]*musig2.PartialSignature) (*schnorr.Signature, bool, error)
|
[]*musig2.PartialSignature) (*schnorr.Signature, bool, error)
|
||||||
|
|
||||||
|
// MuSig2Cleanup removes a session from memory to free up resources.
|
||||||
|
MuSig2Cleanup(MuSig2SessionID) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// MuSig2SessionInfo is a struct for keeping track of a signing session
|
// MuSig2SessionInfo is a struct for keeping track of a signing session
|
||||||
|
|||||||
@@ -178,6 +178,11 @@ func (m *MockSigner) MuSig2CombineSig(MuSig2SessionID,
|
|||||||
return nil, false, nil
|
return nil, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MuSig2Cleanup removes a session from memory to free up resources.
|
||||||
|
func (m *MockSigner) MuSig2Cleanup(MuSig2SessionID) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// findKey searches through all stored private keys and returns one
|
// findKey searches through all stored private keys and returns one
|
||||||
// corresponding to the hashed pubkey if it can be found. The public key may
|
// corresponding to the hashed pubkey if it can be found. The public key may
|
||||||
// either correspond directly to the private key or to the private key with a
|
// either correspond directly to the private key or to the private key with a
|
||||||
|
|||||||
@@ -94,6 +94,11 @@ func (d *DummySigner) MuSig2CombineSig(input.MuSig2SessionID,
|
|||||||
return nil, false, nil
|
return nil, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MuSig2Cleanup removes a session from memory to free up resources.
|
||||||
|
func (d *DummySigner) MuSig2Cleanup(input.MuSig2SessionID) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// SingleSigner is an implementation of the Signer interface that signs
|
// SingleSigner is an implementation of the Signer interface that signs
|
||||||
// everything with a single private key.
|
// everything with a single private key.
|
||||||
type SingleSigner struct {
|
type SingleSigner struct {
|
||||||
@@ -227,3 +232,8 @@ func (s *SingleSigner) MuSig2CombineSig(input.MuSig2SessionID,
|
|||||||
|
|
||||||
return nil, false, nil
|
return nil, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MuSig2Cleanup removes a session from memory to free up resources.
|
||||||
|
func (s *SingleSigner) MuSig2Cleanup(input.MuSig2SessionID) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -704,6 +704,24 @@ func (b *BtcWallet) MuSig2CombineSig(sessionID input.MuSig2SessionID,
|
|||||||
return finalSig, session.HaveAllSigs, nil
|
return finalSig, session.HaveAllSigs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MuSig2Cleanup removes a session from memory to free up resources.
|
||||||
|
func (b *BtcWallet) MuSig2Cleanup(sessionID input.MuSig2SessionID) error {
|
||||||
|
// We hold the lock during the whole operation, we don't want any
|
||||||
|
// interference with calls that might come through in parallel for the
|
||||||
|
// same session.
|
||||||
|
b.musig2SessionsMtx.Lock()
|
||||||
|
defer b.musig2SessionsMtx.Unlock()
|
||||||
|
|
||||||
|
_, ok := b.musig2Sessions[sessionID]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("session with ID %x not found", sessionID[:])
|
||||||
|
}
|
||||||
|
|
||||||
|
delete(b.musig2Sessions, sessionID)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// A compile time check to ensure that BtcWallet implements the Signer
|
// A compile time check to ensure that BtcWallet implements the Signer
|
||||||
// interface.
|
// interface.
|
||||||
var _ input.Signer = (*BtcWallet)(nil)
|
var _ input.Signer = (*BtcWallet)(nil)
|
||||||
|
|||||||
@@ -782,6 +782,24 @@ func (r *RPCKeyRing) MuSig2CombineSig(sessionID input.MuSig2SessionID,
|
|||||||
return finalSig, resp.HaveAllSignatures, nil
|
return finalSig, resp.HaveAllSignatures, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MuSig2Cleanup removes a session from memory to free up resources.
|
||||||
|
func (r *RPCKeyRing) MuSig2Cleanup(sessionID input.MuSig2SessionID) error {
|
||||||
|
req := &signrpc.MuSig2CleanupRequest{
|
||||||
|
SessionId: sessionID[:],
|
||||||
|
}
|
||||||
|
|
||||||
|
ctxt, cancel := context.WithTimeout(context.Background(), r.rpcTimeout)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
_, err := r.signerClient.MuSig2Cleanup(ctxt, req)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error cleaning up MuSig2 session in remote "+
|
||||||
|
"signer instance: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// remoteSign signs the input specified in signDesc of the given transaction tx
|
// remoteSign signs the input specified in signDesc of the given transaction tx
|
||||||
// using the remote signing instance.
|
// using the remote signing instance.
|
||||||
func (r *RPCKeyRing) remoteSign(tx *wire.MsgTx, signDesc *input.SignDescriptor,
|
func (r *RPCKeyRing) remoteSign(tx *wire.MsgTx, signDesc *input.SignDescriptor,
|
||||||
|
|||||||
@@ -108,6 +108,11 @@ func (s *MockSigner) MuSig2CombineSig(input.MuSig2SessionID,
|
|||||||
return nil, false, nil
|
return nil, false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MuSig2Cleanup removes a session from memory to free up resources.
|
||||||
|
func (s *MockSigner) MuSig2Cleanup(input.MuSig2SessionID) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// AddPrivKey records the passed privKey in the MockSigner's registry of keys it
|
// AddPrivKey records the passed privKey in the MockSigner's registry of keys it
|
||||||
// can sign with in the future. A unique key locator is returned, allowing the
|
// can sign with in the future. A unique key locator is returned, allowing the
|
||||||
// caller to sign with this key when presented via an input.SignDescriptor.
|
// caller to sign with this key when presented via an input.SignDescriptor.
|
||||||
|
|||||||
Reference in new issue
Block a user