input+signrpc+lnwallet+multi: implement combined nonce support
What changed, and why it matters
This commit adds new experimental API methods to LND's MuSig2 multi-signature signing system, allowing a coordinator to register an already-aggregated combined nonce instead of each participant registering individual nonces. It is a feature addition, not a fix for a known security bug. The new RPCs are marked highly experimental and only work with the newer MuSig2 v1.0.0rc2 version; the legacy v0.4.0 implementation rejects them.
Treat this as a routine feature commit, not a security patch. Review the final implementation of the v1.0.0rc2 session's RegisterCombinedNonce and CombinedNonce for proper nonce validation, length checks, and mutual-exclusion enforcement before the experimental flag is removed. Ensure RPC authentication/authorization covers the new signer endpoints.
Security signals we found
New experimental RPC surface increases attack exposure for the signer service
Combined nonce registration bypasses per-nonce validation, relying on caller-provided aggregated nonce correctness
No input length validation visible in the diff for the 66-byte combined nonce field
Legacy v0.4.0 implementation explicitly returns ErrUnsupportedMethod, reducing risk of accidental misuse
Evidence from the diff
The change extends the MuSig2 signer interfaces and RPC surface with MuSig2RegisterCombinedNonce and MuSig2GetCombinedNonce. It updates the session manager to track a HaveAllNonces flag, adds stub unsupported-method returns for the v0.4.0 compatibility layer, regenerates protobuf/gRPC/REST/swagger code, and implements the RPCKeyRing client. No existing behavior is removed or altered; the new methods are additive and mutually exclusive with the existing per-nonce registration path.
Changed components
input/musig2.goinput/musig2_session_manager.gointernal/musig2v040/context.golnrpc/signrpc/signer.protolnrpc/signrpc/signer.pb.golnrpc/signrpc/signer_grpc.pb.golnrpc/signrpc/signer.pb.gw.golnrpc/signrpc/signer.pb.json.golnrpc/signrpc/signer.swagger.jsonlnrpc/signrpc/signer.yamllnwallet/rpcwallet/rpcwallet.goinput/mocks.golntest/mock/signer.gowatchtower/wtmock/signer.goInspect captured patch +1204 / −175
diff --git a/input/mocks.go b/input/mocks.go
index 6d90bc2..a7d7583 100644
--- a/input/mocks.go
+++ b/input/mocks.go
@@ -258,6 +258,29 @@ func (m *MockInputSigner) MuSig2RegisterNonces(versio MuSig2SessionID,
return args.Bool(0), args.Error(1)
}
+// MuSig2RegisterCombinedNonce registers a pre-aggregated combined nonce for a
+// session identified by its ID.
+func (m *MockInputSigner) MuSig2RegisterCombinedNonce(sessionID MuSig2SessionID,
+ combinedNonce [musig2.PubNonceSize]byte) error {
+
+ args := m.Called(sessionID, combinedNonce)
+
+ return args.Error(0)
+}
+
+// MuSig2GetCombinedNonce retrieves the combined nonce for a session identified
+// by its ID.
+func (m *MockInputSigner) MuSig2GetCombinedNonce(sessionID MuSig2SessionID) (
+ [musig2.PubNonceSize]byte, error) {
+
+ args := m.Called(sessionID)
+ if args.Get(0) == nil {
+ return [musig2.PubNonceSize]byte{}, args.Error(1)
+ }
+
+ return args.Get(0).([musig2.PubNonceSize]byte), args.Error(1)
+}
+
// MuSig2Sign creates a partial signature using the local signing key that was
// specified when the session was created.
func (m *MockInputSigner) MuSig2Sign(sessionID MuSig2SessionID,
diff --git a/input/musig2.go b/input/musig2.go
index 5891522..a085579 100644
--- a/input/musig2.go
+++ b/input/musig2.go
@@ -64,6 +64,25 @@ type MuSig2Signer interface {
MuSig2RegisterNonces(MuSig2SessionID,
[][musig2.PubNonceSize]byte) (bool, error)
+ // MuSig2RegisterCombinedNonce registers a pre-aggregated combined nonce
+ // for a session identified by its ID. This is an alternative to
+ // MuSig2RegisterNonces and is used when a coordinator has already
+ // aggregated all individual nonces and wants to distribute the combined
+ // nonce to participants.
+ //
+ // NOTE: This method is mutually exclusive with MuSig2RegisterNonces for
+ // the same session. Once this method is called, MuSig2RegisterNonces
+ // will return an error if called later for the same session.
+ MuSig2RegisterCombinedNonce(MuSig2SessionID,
+ [musig2.PubNonceSize]byte) error
+
+ // MuSig2GetCombinedNonce retrieves the combined nonce for a session
+ // identified by its ID. This will be available after either all
+ // individual nonces have been registered via MuSig2RegisterNonces, or a
+ // combined nonce has been registered via MuSig2RegisterCombinedNonce.
+ MuSig2GetCombinedNonce(MuSig2SessionID) ([musig2.PubNonceSize]byte,
+ error)
+
// MuSig2Sign creates a partial signature using the local signing key
// that was specified when the session was created. This can only be
// called when all public nonces of all participants are known and have
@@ -130,6 +149,26 @@ type MuSig2Session interface {
// of signers. This method returns true once all the public nonces have
// been accounted for.
RegisterPubNonce(nonce [musig2.PubNonceSize]byte) (bool, error)
+
+ // CombinedNonce returns the combined/aggregated public nonce for the
+ // session. This will be available after either all individual nonces
+ // have been registered via RegisterPubNonce, or a combined nonce has
+ // been registered via RegisterCombinedNonce.
+ //
+ // If the combined nonce is not yet available, this method returns an
+ // error.
+ CombinedNonce() ([musig2.PubNonceSize]byte, error)
+
+ // RegisterCombinedNonce allows a caller to directly register a
+ // pre-aggregated nonce that was generated externally. This is useful
+ // in coordinator-based protocols where the coordinator aggregates all
+ // nonces and distributes the combined nonce to participants.
+ //
+ // NOTE: This method is mutually exclusive with RegisterPubNonce. Once
+ // this method is called, RegisterPubNonce will return an error if
+ // called later. Similarly, if RegisterPubNonce has already been called,
+ // this method will return an error.
+ RegisterCombinedNonce(combinedNonce [musig2.PubNonceSize]byte) error
}
// MuSig2SessionInfo is a struct for keeping track of a signing session
diff --git a/input/musig2_session_manager.go b/input/musig2_session_manager.go
index b2cac48..cb459ea 100644
--- a/input/musig2_session_manager.go
+++ b/input/musig2_session_manager.go
@@ -302,3 +302,70 @@ func (m *MusigSessionManager) MuSig2RegisterNonces(sessionID MuSig2SessionID,
return session.HaveAllNonces, nil
}
+
+// MuSig2RegisterCombinedNonce registers a pre-aggregated combined nonce for a
+// session identified by its ID. This is an alternative to MuSig2RegisterNonces
+// and is used when a coordinator has already aggregated all individual nonces
+// and wants to distribute the combined nonce to participants.
+//
+// NOTE: This method is mutually exclusive with MuSig2RegisterNonces for the
+// same session. Once this method is called, MuSig2RegisterNonces will return
+// an error if called later for the same session.
+func (m *MusigSessionManager) MuSig2RegisterCombinedNonce(
+ sessionID MuSig2SessionID,
+ combinedNonce [musig2.PubNonceSize]byte) error {
+
+ // Hold the lock during the whole operation.
+ m.sessionMtx.Lock(sessionID)
+ defer m.sessionMtx.Unlock(sessionID)
+
+ // Load the session.
+ session, ok := m.musig2Sessions.Load(sessionID)
+ if !ok {
+ return fmt.Errorf("session with ID %x not found", sessionID[:])
+ }
+
+ // Check if we already have all nonces.
+ if session.HaveAllNonces {
+ return fmt.Errorf("already have all nonces")
+ }
+
+ // Delegate to the version-specific implementation.
+ err := session.session.RegisterCombinedNonce(combinedNonce)
+ if err != nil {
+ return fmt.Errorf("error registering combined nonce: %w", err)
+ }
+
+ // Mark that we have all nonces now.
+ session.HaveAllNonces = true
+
+ return nil
+}
+
+// MuSig2GetCombinedNonce retrieves the combined nonce for a session identified
+// by its ID. This will be available after either all individual nonces have
+// been registered via MuSig2RegisterNonces, or a combined nonce has been
+// registered via MuSig2RegisterCombinedNonce.
+func (m *MusigSessionManager) MuSig2GetCombinedNonce(
+ sessionID MuSig2SessionID) ([musig2.PubNonceSize]byte, error) {
+
+ // Hold the lock during the operation.
+ m.sessionMtx.Lock(sessionID)
+ defer m.sessionMtx.Unlock(sessionID)
+
+ // Load the session.
+ session, ok := m.musig2Sessions.Load(sessionID)
+ if !ok {
+ return [musig2.PubNonceSize]byte{}, fmt.Errorf("session with "+
+ "ID %x not found", sessionID[:])
+ }
+
+ // Get the combined nonce from the session.
+ combinedNonce, err := session.session.CombinedNonce()
+ if err != nil {
+ return [musig2.PubNonceSize]byte{}, fmt.Errorf("error getting "+
+ "combined nonce: %w", err)
+ }
+
+ return combinedNonce, nil
+}
diff --git a/internal/musig2v040/README.md b/internal/musig2v040/README.md
index bd248d2..c75f2bb 100644
--- a/internal/musig2v040/README.md
+++ b/internal/musig2v040/README.md
@@ -8,3 +8,17 @@ This corresponds to the [MuSig2 BIP specification version of
We only keep this code here to allow implementing a backward compatible,
versioned MuSig2 RPC.
+
+## Unsupported Methods
+
+The following methods from the newer MuSig2 specifications are not supported in
+this legacy v0.4.0 implementation and will return `ErrUnsupportedMethod` if
+called:
+
+- `CombinedNonce()`: Returns error instead of the combined nonce.
+- `RegisterCombinedNonce()`: Returns error instead of registering a
+ pre-aggregated combined nonce.
+
+These methods are only available when using MuSig2 v1.0.0rc2 or later. To use
+these features, create sessions with `MuSig2Version100RC2` instead of
+`MuSig2Version040`.
diff --git a/internal/musig2v040/context.go b/internal/musig2v040/context.go
index fe41c42..96eeeca 100644
--- a/internal/musig2v040/context.go
+++ b/internal/musig2v040/context.go
@@ -59,6 +59,11 @@ var (
// ErrNotEnoughSigners is returned if a caller attempts to obtain an
// early nonce when it wasn't specified
ErrNoEarlyNonce = fmt.Errorf("no early nonce available")
+
+ // ErrUnsupportedMethod is returned when calling methods that are not
+ // supported in the legacy v0.4.0 implementation.
+ ErrUnsupportedMethod = fmt.Errorf("method not supported in MuSig2 " +
+ "v0.4.0")
)
// Context is a managed signing context for musig2. It takes care of things
@@ -668,3 +673,15 @@ func (s *Session) CombineSig(sig *PartialSignature) (bool, error) {
func (s *Session) FinalSig() *schnorr.Signature {
return s.finalSig
}
+
+// CombinedNonce is not supported in the legacy v0.4.0 implementation and will
+// always return an error.
+func (s *Session) CombinedNonce() ([PubNonceSize]byte, error) {
+ return [PubNonceSize]byte{}, ErrUnsupportedMethod
+}
+
+// RegisterCombinedNonce is not supported in the legacy v0.4.0 implementation
+// and will always return an error.
+func (s *Session) RegisterCombinedNonce(_ [PubNonceSize]byte) error {
+ return ErrUnsupportedMethod
+}
diff --git a/lnrpc/signrpc/signer.pb.go b/lnrpc/signrpc/signer.pb.go
index 4b5e5f9..303fb7b 100644
--- a/lnrpc/signrpc/signer.pb.go
+++ b/lnrpc/signrpc/signer.pb.go
@@ -1703,6 +1703,200 @@ func (x *MuSig2RegisterNoncesResponse) GetHaveAllNonces() bool {
return false
}
+type MuSig2RegisterCombinedNonceRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The unique ID of the signing session the combined nonce should be registered
+ // with.
+ SessionId []byte `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+ // The 66-byte combined public nonce that was aggregated externally. This is a
+ // concatenation of two 33-byte compressed public keys (R1 || R2).
+ CombinedPublicNonce []byte `protobuf:"bytes,2,opt,name=combined_public_nonce,json=combinedPublicNonce,proto3" json:"combined_public_nonce,omitempty"`
+}
+
+func (x *MuSig2RegisterCombinedNonceRequest) Reset() {
+ *x = MuSig2RegisterCombinedNonceRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_signrpc_signer_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MuSig2RegisterCombinedNonceRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MuSig2RegisterCombinedNonceRequest) ProtoMessage() {}
+
+func (x *MuSig2RegisterCombinedNonceRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_signrpc_signer_proto_msgTypes[22]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MuSig2RegisterCombinedNonceRequest.ProtoReflect.Descriptor instead.
+func (*MuSig2RegisterCombinedNonceRequest) Descriptor() ([]byte, []int) {
+ return file_signrpc_signer_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *MuSig2RegisterCombinedNonceRequest) GetSessionId() []byte {
+ if x != nil {
+ return x.SessionId
+ }
+ return nil
+}
+
+func (x *MuSig2RegisterCombinedNonceRequest) GetCombinedPublicNonce() []byte {
+ if x != nil {
+ return x.CombinedPublicNonce
+ }
+ return nil
+}
+
+type MuSig2RegisterCombinedNonceResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *MuSig2RegisterCombinedNonceResponse) Reset() {
+ *x = MuSig2RegisterCombinedNonceResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_signrpc_signer_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MuSig2RegisterCombinedNonceResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MuSig2RegisterCombinedNonceResponse) ProtoMessage() {}
+
+func (x *MuSig2RegisterCombinedNonceResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_signrpc_signer_proto_msgTypes[23]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MuSig2RegisterCombinedNonceResponse.ProtoReflect.Descriptor instead.
+func (*MuSig2RegisterCombinedNonceResponse) Descriptor() ([]byte, []int) {
+ return file_signrpc_signer_proto_rawDescGZIP(), []int{23}
+}
+
+type MuSig2GetCombinedNonceRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The unique ID of the signing session to get the combined nonce for.
+ SessionId []byte `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"`
+}
+
+func (x *MuSig2GetCombinedNonceRequest) Reset() {
+ *x = MuSig2GetCombinedNonceRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_signrpc_signer_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MuSig2GetCombinedNonceRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MuSig2GetCombinedNonceRequest) ProtoMessage() {}
+
+func (x *MuSig2GetCombinedNonceRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_signrpc_signer_proto_msgTypes[24]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MuSig2GetCombinedNonceRequest.ProtoReflect.Descriptor instead.
+func (*MuSig2GetCombinedNonceRequest) Descriptor() ([]byte, []int) {
+ return file_signrpc_signer_proto_rawDescGZIP(), []int{24}
+}
+
+func (x *MuSig2GetCombinedNonceRequest) GetSessionId() []byte {
+ if x != nil {
+ return x.SessionId
+ }
+ return nil
+}
+
+type MuSig2GetCombinedNonceResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The 66-byte combined public nonce. This is a concatenation of two 33-byte
+ // compressed public keys (R1 || R2).
+ CombinedPublicNonce []byte `protobuf:"bytes,1,opt,name=combined_public_nonce,json=combinedPublicNonce,proto3" json:"combined_public_nonce,omitempty"`
+}
+
+func (x *MuSig2GetCombinedNonceResponse) Reset() {
+ *x = MuSig2GetCombinedNonceResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_signrpc_signer_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MuSig2GetCombinedNonceResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MuSig2GetCombinedNonceResponse) ProtoMessage() {}
+
+func (x *MuSig2GetCombinedNonceResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_signrpc_signer_proto_msgTypes[25]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MuSig2GetCombinedNonceResponse.ProtoReflect.Descriptor instead.
+func (*MuSig2GetCombinedNonceResponse) Descriptor() ([]byte, []int) {
+ return file_signrpc_signer_proto_rawDescGZIP(), []int{25}
+}
+
+func (x *MuSig2GetCombinedNonceResponse) GetCombinedPublicNonce() []byte {
+ if x != nil {
+ return x.CombinedPublicNonce
+ }
+ return nil
+}
+
type MuSig2SignRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1721,7 +1915,7 @@ type MuSig2SignRequest struct {
func (x *MuSig2SignRequest) Reset() {
*x = MuSig2SignRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_signrpc_signer_proto_msgTypes[22]
+ mi := &file_signrpc_signer_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1734,7 +1928,7 @@ func (x *MuSig2SignRequest) String() string {
func (*MuSig2SignRequest) ProtoMessage() {}
func (x *MuSig2SignRequest) ProtoReflect() protoreflect.Message {
- mi := &file_signrpc_signer_proto_msgTypes[22]
+ mi := &file_signrpc_signer_proto_msgTypes[26]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1747,7 +1941,7 @@ func (x *MuSig2SignRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MuSig2SignRequest.ProtoReflect.Descriptor instead.
func (*MuSig2SignRequest) Descriptor() ([]byte, []int) {
- return file_signrpc_signer_proto_rawDescGZIP(), []int{22}
+ return file_signrpc_signer_proto_rawDescGZIP(), []int{26}
}
func (x *MuSig2SignRequest) GetSessionId() []byte {
@@ -1783,7 +1977,7 @@ type MuSig2SignResponse struct {
func (x *MuSig2SignResponse) Reset() {
*x = MuSig2SignResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_signrpc_signer_proto_msgTypes[23]
+ mi := &file_signrpc_signer_proto_msgTypes[27]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1796,7 +1990,7 @@ func (x *MuSig2SignResponse) String() string {
func (*MuSig2SignResponse) ProtoMessage() {}
func (x *MuSig2SignResponse) ProtoReflect() protoreflect.Message {
- mi := &file_signrpc_signer_proto_msgTypes[23]
+ mi := &file_signrpc_signer_proto_msgTypes[27]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1809,7 +2003,7 @@ func (x *MuSig2SignResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MuSig2SignResponse.ProtoReflect.Descriptor instead.
func (*MuSig2SignResponse) Descriptor() ([]byte, []int) {
- return file_signrpc_signer_proto_rawDescGZIP(), []int{23}
+ return file_signrpc_signer_proto_rawDescGZIP(), []int{27}
}
func (x *MuSig2SignResponse) GetLocalPartialSignature() []byte {
@@ -1834,7 +2028,7 @@ type MuSig2CombineSigRequest struct {
func (x *MuSig2CombineSigRequest) Reset() {
*x = MuSig2CombineSigRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_signrpc_signer_proto_msgTypes[24]
+ mi := &file_signrpc_signer_proto_msgTypes[28]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1847,7 +2041,7 @@ func (x *MuSig2CombineSigRequest) String() string {
func (*MuSig2CombineSigRequest) ProtoMessage() {}
func (x *MuSig2CombineSigRequest) ProtoReflect() protoreflect.Message {
- mi := &file_signrpc_signer_proto_msgTypes[24]
+ mi := &file_signrpc_signer_proto_msgTypes[28]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1860,7 +2054,7 @@ func (x *MuSig2CombineSigRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MuSig2CombineSigRequest.ProtoReflect.Descriptor instead.
func (*MuSig2CombineSigRequest) Descriptor() ([]byte, []int) {
- return file_signrpc_signer_proto_rawDescGZIP(), []int{24}
+ return file_signrpc_signer_proto_rawDescGZIP(), []int{28}
}
func (x *MuSig2CombineSigRequest) GetSessionId() []byte {
@@ -1893,7 +2087,7 @@ type MuSig2CombineSigResponse struct {
func (x *MuSig2CombineSigResponse) Reset() {
*x = MuSig2CombineSigResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_signrpc_signer_proto_msgTypes[25]
+ mi := &file_signrpc_signer_proto_msgTypes[29]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1906,7 +2100,7 @@ func (x *MuSig2CombineSigResponse) String() string {
func (*MuSig2CombineSigResponse) ProtoMessage() {}
func (x *MuSig2CombineSigResponse) ProtoReflect() protoreflect.Message {
- mi := &file_signrpc_signer_proto_msgTypes[25]
+ mi := &file_signrpc_signer_proto_msgTypes[29]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1919,7 +2113,7 @@ func (x *MuSig2CombineSigResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MuSig2CombineSigResponse.ProtoReflect.Descriptor instead.
func (*MuSig2CombineSigResponse) Descriptor() ([]byte, []int) {
- return file_signrpc_signer_proto_rawDescGZIP(), []int{25}
+ return file_signrpc_signer_proto_rawDescGZIP(), []int{29}
}
func (x *MuSig2CombineSigResponse) GetHaveAllSignatures() bool {
@@ -1948,7 +2142,7 @@ type MuSig2CleanupRequest struct {
func (x *MuSig2CleanupRequest) Reset() {
*x = MuSig2CleanupRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_signrpc_signer_proto_msgTypes[26]
+ mi := &file_signrpc_signer_proto_msgTypes[30]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1961,7 +2155,7 @@ func (x *MuSig2CleanupRequest) String() string {
func (*MuSig2CleanupRequest) ProtoMessage() {}
func (x *MuSig2CleanupRequest) ProtoReflect() protoreflect.Message {
- mi := &file_signrpc_signer_proto_msgTypes[26]
+ mi := &file_signrpc_signer_proto_msgTypes[30]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1974,7 +2168,7 @@ func (x *MuSig2CleanupRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use MuSig2CleanupRequest.ProtoReflect.Descriptor instead.
func (*MuSig2CleanupRequest) Descriptor() ([]byte, []int) {
- return file_signrpc_signer_proto_rawDescGZIP(), []int{26}
+ return file_signrpc_signer_proto_rawDescGZIP(), []int{30}
}
func (x *MuSig2CleanupRequest) GetSessionId() []byte {
@@ -1993,7 +2187,7 @@ type MuSig2CleanupResponse struct {
func (x *MuSig2CleanupResponse) Reset() {
*x = MuSig2CleanupResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_signrpc_signer_proto_msgTypes[27]
+ mi := &file_signrpc_signer_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -2006,7 +2200,7 @@ func (x *MuSig2CleanupResponse) String() string {
func (*MuSig2CleanupResponse) ProtoMessage() {}
func (x *MuSig2CleanupResponse) ProtoReflect() protoreflect.Message {
- mi := &file_signrpc_signer_proto_msgTypes[27]
+ mi := &file_signrpc_signer_proto_msgTypes[31]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -2019,7 +2213,7 @@ func (x *MuSig2CleanupResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use MuSig2CleanupResponse.ProtoReflect.Descriptor instead.
func (*MuSig2CleanupResponse) Descriptor() ([]byte, []int) {
- return file_signrpc_signer_proto_rawDescGZIP(), []int{27}
+ return file_signrpc_signer_proto_rawDescGZIP(), []int{31}
}
var File_signrpc_signer_proto protoreflect.FileDescriptor
@@ -2218,112 +2412,146 @@ var file_signrpc_signer_proto_rawDesc = []byte{
0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x12, 0x26, 0x0a, 0x0f, 0x68, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6e, 0x6f,
0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x61, 0x76, 0x65,
- 0x41, 0x6c, 0x6c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x73, 0x0a, 0x11, 0x4d, 0x75, 0x53,
- 0x69, 0x67, 0x32, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
- 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0c, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a,
- 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x69,
- 0x67, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x22, 0x4c,
- 0x0a, 0x12, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x61,
- 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x15, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x74,
- 0x69, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x72, 0x0a, 0x17,
- 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x53, 0x69, 0x67,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69,
- 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x65, 0x73,
- 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f,
- 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72,
- 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50,
- 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73,
- 0x22, 0x73, 0x0a, 0x18, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e,
- 0x65, 0x53, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x13,
- 0x68, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75,
- 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x68, 0x61, 0x76, 0x65, 0x41,
- 0x6c, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f,
- 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e,
- 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x35, 0x0a, 0x14, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43,
- 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a,
+ 0x41, 0x6c, 0x6c, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x77, 0x0a, 0x22, 0x4d, 0x75, 0x53,
+ 0x69, 0x67, 0x32, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x62, 0x69,
+ 0x6e, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x32,
+ 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x63,
+ 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x6e,
+ 0x63, 0x65, 0x22, 0x25, 0x0a, 0x23, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x52, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x63,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x0a, 0x1d, 0x4d, 0x75, 0x53,
+ 0x69, 0x67, 0x32, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4e, 0x6f,
+ 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65,
+ 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09,
+ 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x54, 0x0a, 0x1e, 0x4d, 0x75, 0x53,
+ 0x69, 0x67, 0x32, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4e, 0x6f,
+ 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x63,
+ 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6e,
+ 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, 0x63, 0x6f, 0x6d, 0x62,
+ 0x69, 0x6e, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x22,
+ 0x73, 0x0a, 0x11, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
+ 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x64,
+ 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c,
+ 0x65, 0x61, 0x6e, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6c, 0x65,
+ 0x61, 0x6e, 0x75, 0x70, 0x22, 0x4c, 0x0a, 0x12, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x53, 0x69,
+ 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x6c, 0x6f,
+ 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x67, 0x6e,
+ 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x15, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75,
+ 0x72, 0x65, 0x22, 0x72, 0x0a, 0x17, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62,
+ 0x69, 0x6e, 0x65, 0x53, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a,
0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0c, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15,
- 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x9c, 0x01, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x65,
- 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x4d, 0x45, 0x54,
- 0x48, 0x4f, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x4e, 0x45, 0x53, 0x53, 0x5f, 0x56, 0x30, 0x10, 0x00,
- 0x12, 0x29, 0x0a, 0x25, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f,
- 0x54, 0x41, 0x50, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x50, 0x45, 0x4e,
- 0x44, 0x5f, 0x42, 0x49, 0x50, 0x30, 0x30, 0x38, 0x36, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x53,
- 0x49, 0x47, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x54, 0x41, 0x50, 0x52, 0x4f,
- 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x50, 0x45, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x24,
- 0x0a, 0x20, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x54, 0x41,
- 0x50, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x5f, 0x53, 0x50, 0x45,
- 0x4e, 0x44, 0x10, 0x03, 0x2a, 0x62, 0x0a, 0x0d, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x56, 0x65,
- 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x55, 0x53, 0x49, 0x47, 0x32, 0x5f,
- 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45,
- 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x55, 0x53, 0x49, 0x47, 0x32, 0x5f, 0x56, 0x45,
- 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x30, 0x34, 0x30, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16,
- 0x4d, 0x55, 0x53, 0x49, 0x47, 0x32, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x56,
- 0x31, 0x30, 0x30, 0x52, 0x43, 0x32, 0x10, 0x02, 0x32, 0xdb, 0x06, 0x0a, 0x06, 0x53, 0x69, 0x67,
- 0x6e, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75,
- 0x74, 0x52, 0x61, 0x77, 0x12, 0x10, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x53,
- 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63,
- 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x12, 0x43, 0x6f, 0x6d,
- 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12,
- 0x10, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65,
- 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75,
- 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x0b, 0x53,
- 0x69, 0x67, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x73, 0x69, 0x67,
- 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
- 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x69,
- 0x67, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a,
- 0x0d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19,
- 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4d,
- 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x73, 0x69, 0x67, 0x6e,
- 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
- 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a, 0x0f, 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x53,
- 0x68, 0x61, 0x72, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72,
- 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68,
- 0x61, 0x72, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x5a, 0x0a, 0x11, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65,
- 0x4b, 0x65, 0x79, 0x73, 0x12, 0x21, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d,
- 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70,
- 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4b,
- 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x4d,
- 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69,
- 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53,
- 0x69, 0x67, 0x32, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69,
- 0x67, 0x32, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x63, 0x0a, 0x14, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x52, 0x65, 0x67, 0x69, 0x73,
- 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x73, 0x69, 0x67, 0x6e,
- 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
- 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x25, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32,
+ 0x0c, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x18,
+ 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x69,
+ 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x16,
+ 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e,
+ 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x73, 0x0a, 0x18, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32,
+ 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x53, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x68, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x73,
+ 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x11, 0x68, 0x61, 0x76, 0x65, 0x41, 0x6c, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72,
+ 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x67, 0x6e,
+ 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x66, 0x69, 0x6e,
+ 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x35, 0x0a, 0x14, 0x4d,
+ 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6c, 0x65, 0x61,
+ 0x6e, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x9c, 0x01, 0x0a, 0x0a,
+ 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x49,
+ 0x47, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x4e, 0x45, 0x53,
+ 0x53, 0x5f, 0x56, 0x30, 0x10, 0x00, 0x12, 0x29, 0x0a, 0x25, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x4d,
+ 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x54, 0x41, 0x50, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b, 0x45,
+ 0x59, 0x5f, 0x53, 0x50, 0x45, 0x4e, 0x44, 0x5f, 0x42, 0x49, 0x50, 0x30, 0x30, 0x38, 0x36, 0x10,
+ 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44,
+ 0x5f, 0x54, 0x41, 0x50, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x50, 0x45,
+ 0x4e, 0x44, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x49, 0x47, 0x4e, 0x5f, 0x4d, 0x45, 0x54,
+ 0x48, 0x4f, 0x44, 0x5f, 0x54, 0x41, 0x50, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x53, 0x43, 0x52, 0x49,
+ 0x50, 0x54, 0x5f, 0x53, 0x50, 0x45, 0x4e, 0x44, 0x10, 0x03, 0x2a, 0x62, 0x0a, 0x0d, 0x4d, 0x75,
+ 0x53, 0x69, 0x67, 0x32, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x18, 0x4d,
+ 0x55, 0x53, 0x49, 0x47, 0x32, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e,
+ 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x55, 0x53,
+ 0x49, 0x47, 0x32, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x30, 0x34, 0x30,
+ 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x55, 0x53, 0x49, 0x47, 0x32, 0x5f, 0x56, 0x45, 0x52,
+ 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x31, 0x30, 0x30, 0x52, 0x43, 0x32, 0x10, 0x02, 0x32, 0xc0,
+ 0x08, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x0d, 0x53, 0x69, 0x67,
+ 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x61, 0x77, 0x12, 0x10, 0x2e, 0x73, 0x69, 0x67,
+ 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x73,
+ 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12,
+ 0x40, 0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53,
+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x10, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e,
+ 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70,
+ 0x63, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x73,
+ 0x70, 0x12, 0x40, 0x0a, 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+ 0x12, 0x17, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x4d,
+ 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x69, 0x67, 0x6e,
+ 0x72, 0x70, 0x63, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x0d, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x4d, 0x65, 0x73,
+ 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x56,
+ 0x65, 0x72, 0x69, 0x66, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a,
+ 0x1a, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79,
+ 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a, 0x0f, 0x44,
+ 0x65, 0x72, 0x69, 0x76, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x19,
+ 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4b,
+ 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x73, 0x69, 0x67, 0x6e,
+ 0x72, 0x70, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x11, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43,
+ 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x21, 0x2e, 0x73, 0x69, 0x67,
+ 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62, 0x69,
+ 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e,
+ 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f,
+ 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x54, 0x0a, 0x13, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72,
+ 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70,
+ 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x14, 0x4d, 0x75, 0x53, 0x69, 0x67,
+ 0x32, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12,
+ 0x24, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32,
0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32,
- 0x53, 0x69, 0x67, 0x6e, 0x12, 0x1a, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d,
- 0x75, 0x53, 0x69, 0x67, 0x32, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x1b, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67,
- 0x32, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a,
- 0x10, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x53, 0x69,
- 0x67, 0x12, 0x20, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69,
- 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x53, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75,
- 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x53, 0x69, 0x67, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32,
- 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x12, 0x1d, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70,
- 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63,
- 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
- 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x6e, 0x65,
- 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x6c, 0x6e, 0x64, 0x2f, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2f,
- 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e,
+ 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f,
+ 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x1b,
+ 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f,
+ 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x2e, 0x73, 0x69,
+ 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x52, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x63,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72,
+ 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
+ 0x72, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x16, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32,
+ 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65,
+ 0x12, 0x26, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67,
+ 0x32, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x63,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72,
+ 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x62,
+ 0x69, 0x6e, 0x65, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x53, 0x69, 0x67, 0x6e, 0x12,
+ 0x1a, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32,
+ 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x73, 0x69,
+ 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x53, 0x69, 0x67, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x10, 0x4d, 0x75, 0x53, 0x69,
+ 0x67, 0x32, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x53, 0x69, 0x67, 0x12, 0x20, 0x2e, 0x73,
+ 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6f, 0x6d,
+ 0x62, 0x69, 0x6e, 0x65, 0x53, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21,
+ 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43,
+ 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x53, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x4d, 0x75, 0x53, 0x69, 0x67, 0x32, 0x43, 0x6c, 0x65, 0x61, 0x6e,
+ 0x75, 0x70, 0x12, 0x1d, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53,
+ 0x69, 0x67, 0x32, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x69, 0x67, 0x6e, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x75, 0x53, 0x69,
+ 0x67, 0x32, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
+ 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+ 0x2f, 0x6c, 0x6e, 0x64, 0x2f, 0x6c, 0x6e, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x72,
+ 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -2339,38 +2567,42 @@ func file_signrpc_signer_proto_rawDescGZIP() []byte {
}
var file_signrpc_signer_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
-var file_signrpc_signer_proto_msgTypes = make([]protoimpl.MessageInfo, 28)
+var file_signrpc_signer_proto_msgTypes = make([]protoimpl.MessageInfo, 32)
var file_signrpc_signer_proto_goTypes = []interface{}{
- (SignMethod)(0), // 0: signrpc.SignMethod
- (MuSig2Version)(0), // 1: signrpc.MuSig2Version
- (*KeyLocator)(nil), // 2: signrpc.KeyLocator
- (*KeyDescriptor)(nil), // 3: signrpc.KeyDescriptor
- (*TxOut)(nil), // 4: signrpc.TxOut
- (*SignDescriptor)(nil), // 5: signrpc.SignDescriptor
- (*SignReq)(nil), // 6: signrpc.SignReq
- (*SignResp)(nil), // 7: signrpc.SignResp
- (*InputScript)(nil), // 8: signrpc.InputScript
- (*InputScriptResp)(nil), // 9: signrpc.InputScriptResp
- (*SignMessageReq)(nil), // 10: signrpc.SignMessageReq
- (*SignMessageResp)(nil), // 11: signrpc.SignMessageResp
- (*VerifyMessageReq)(nil), // 12: signrpc.VerifyMessageReq
- (*VerifyMessageResp)(nil), // 13: signrpc.VerifyMessageResp
- (*SharedKeyRequest)(nil), // 14: signrpc.SharedKeyRequest
- (*SharedKeyResponse)(nil), // 15: signrpc.SharedKeyResponse
- (*TweakDesc)(nil), // 16: signrpc.TweakDesc
- (*TaprootTweakDesc)(nil), // 17: signrpc.TaprootTweakDesc
- (*MuSig2CombineKeysRequest)(nil), // 18: signrpc.MuSig2CombineKeysRequest
- (*MuSig2CombineKeysResponse)(nil), // 19: signrpc.MuSig2CombineKeysResponse
- (*MuSig2SessionRequest)(nil), // 20: signrpc.MuSig2SessionRequest
- (*MuSig2SessionResponse)(nil), // 21: signrpc.MuSig2SessionResponse
- (*MuSig2RegisterNoncesRequest)(nil), // 22: signrpc.MuSig2RegisterNoncesRequest
- (*MuSig2RegisterNoncesResponse)(nil), // 23: signrpc.MuSig2RegisterNoncesResponse
- (*MuSig2SignRequest)(nil), // 24: signrpc.MuSig2SignRequest
- (*MuSig2SignResponse)(nil), // 25: signrpc.MuSig2SignResponse
- (*MuSig2CombineSigRequest)(nil), // 26: signrpc.MuSig2CombineSigRequest
- (*MuSig2CombineSigResponse)(nil), // 27: signrpc.MuSig2CombineSigResponse
- (*MuSig2CleanupRequest)(nil), // 28: signrpc.MuSig2CleanupRequest
- (*MuSig2CleanupResponse)(nil), // 29: signrpc.MuSig2CleanupResponse
+ (SignMethod)(0), // 0: signrpc.SignMethod
+ (MuSig2Version)(0), // 1: signrpc.MuSig2Version
+ (*KeyLocator)(nil), // 2: signrpc.KeyLocator
+ (*KeyDescriptor)(nil), // 3: signrpc.KeyDescriptor
+ (*TxOut)(nil), // 4: signrpc.TxOut
+ (*SignDescriptor)(nil), // 5: signrpc.SignDescriptor
+ (*SignReq)(nil), // 6: signrpc.SignReq
+ (*SignResp)(nil), // 7: signrpc.SignResp
+ (*InputScript)(nil), // 8: signrpc.InputScript
+ (*InputScriptResp)(nil), // 9: signrpc.InputScriptResp
+ (*SignMessageReq)(nil), // 10: signrpc.SignMessageReq
+ (*SignMessageResp)(nil), // 11: signrpc.SignMessageResp
+ (*VerifyMessageReq)(nil), // 12: signrpc.VerifyMessageReq
+ (*VerifyMessageResp)(nil), // 13: signrpc.VerifyMessageResp
+ (*SharedKeyRequest)(nil), // 14: signrpc.SharedKeyRequest
+ (*SharedKeyResponse)(nil), // 15: signrpc.SharedKeyResponse
+ (*TweakDesc)(nil), // 16: signrpc.TweakDesc
+ (*TaprootTweakDesc)(nil), // 17: signrpc.TaprootTweakDesc
+ (*MuSig2CombineKeysRequest)(nil), // 18: signrpc.MuSig2CombineKeysRequest
+ (*MuSig2CombineKeysResponse)(nil), // 19: signrpc.MuSig2CombineKeysResponse
+ (*MuSig2SessionRequest)(nil), // 20: signrpc.MuSig2SessionRequest
+ (*MuSig2SessionResponse)(nil), // 21: signrpc.MuSig2SessionResponse
+ (*MuSig2RegisterNoncesRequest)(nil), // 22: signrpc.MuSig2RegisterNoncesRequest
+ (*MuSig2RegisterNoncesResponse)(nil), // 23: signrpc.MuSig2RegisterNoncesResponse
+ (*MuSig2RegisterCombinedNonceRequest)(nil), // 24: signrpc.MuSig2RegisterCombinedNonceRequest
+ (*MuSig2RegisterCombinedNonceResponse)(nil), // 25: signrpc.MuSig2RegisterCombinedNonceResponse
+ (*MuSig2GetCombinedNonceRequest)(nil), // 26: signrpc.MuSig2GetCombinedNonceRequest
+ (*MuSig2GetCombinedNonceResponse)(nil), // 27: signrpc.MuSig2GetCombinedNonceResponse
+ (*MuSig2SignRequest)(nil), // 28: signrpc.MuSig2SignRequest
+ (*MuSig2SignResponse)(nil), // 29: signrpc.MuSig2SignResponse
+ (*MuSig2CombineSigRequest)(nil), // 30: signrpc.MuSig2CombineSigRequest
+ (*MuSig2CombineSigResponse)(nil), // 31: signrpc.MuSig2CombineSigResponse
+ (*MuSig2CleanupRequest)(nil), // 32: signrpc.MuSig2CleanupRequest
+ (*MuSig2CleanupResponse)(nil), // 33: signrpc.MuSig2CleanupResponse
}
var file_signrpc_signer_proto_depIdxs = []int32{
2, // 0: signrpc.KeyDescriptor.key_loc:type_name -> signrpc.KeyLocator
@@ -2400,22 +2632,26 @@ var file_signrpc_signer_proto_depIdxs = []int32{
18, // 24: signrpc.Signer.MuSig2CombineKeys:input_type -> signrpc.MuSig2CombineKeysRequest
20, // 25: signrpc.Signer.MuSig2CreateSession:input_type -> signrpc.MuSig2SessionRequest
22, // 26: signrpc.Signer.MuSig2RegisterNonces:input_type -> signrpc.MuSig2RegisterNoncesRequest
- 24, // 27: signrpc.Signer.MuSig2Sign:input_type -> signrpc.MuSig2SignRequest
- 26, // 28: signrpc.Signer.MuSig2CombineSig:input_type -> signrpc.MuSig2CombineSigRequest
- 28, // 29: signrpc.Signer.MuSig2Cleanup:input_type -> signrpc.MuSig2CleanupRequest
- 7, // 30: signrpc.Signer.SignOutputRaw:output_type -> signrpc.SignResp
- 9, // 31: signrpc.Signer.ComputeInputScript:output_type -> signrpc.InputScriptResp
- 11, // 32: signrpc.Signer.SignMessage:output_type -> signrpc.SignMessageResp
- 13, // 33: signrpc.Signer.VerifyMessage:output_type -> signrpc.VerifyMessageResp
- 15, // 34: signrpc.Signer.DeriveSharedKey:output_type -> signrpc.SharedKeyResponse
- 19, // 35: signrpc.Signer.MuSig2CombineKeys:output_type -> signrpc.MuSig2CombineKeysResponse
- 21, // 36: signrpc.Signer.MuSig2CreateSession:output_type -> signrpc.MuSig2SessionResponse
- 23, // 37: signrpc.Signer.MuSig2RegisterNonces:output_type -> signrpc.MuSig2RegisterNoncesResponse
- 25, // 38: signrpc.Signer.MuSig2Sign:output_type -> signrpc.MuSig2SignResponse
- 27, // 39: signrpc.Signer.MuSig2CombineSig:output_type -> signrpc.MuSig2CombineSigResponse
- 29, // 40: signrpc.Signer.MuSig2Cleanup:output_type -> signrpc.MuSig2CleanupResponse
- 30, // [30:41] is the sub-list for method output_type
- 19, // [19:30] is the sub-list for method input_type
+ 24, // 27: signrpc.Signer.MuSig2RegisterCombinedNonce:input_type -> signrpc.MuSig2RegisterCombinedNonceRequest
+ 26, // 28: signrpc.Signer.MuSig2GetCombinedNonce:input_type -> signrpc.MuSig2GetCombinedNonceRequest
+ 28, // 29: signrpc.Signer.MuSig2Sign:input_type -> signrpc.MuSig2SignRequest
+ 30, // 30: signrpc.Signer.MuSig2CombineSig:input_type -> signrpc.MuSig2CombineSigRequest
+ 32, // 31: signrpc.Signer.MuSig2Cleanup:input_type -> signrpc.MuSig2CleanupRequest
+ 7, // 32: signrpc.Signer.SignOutputRaw:output_type -> signrpc.SignResp
+ 9, // 33: signrpc.Signer.ComputeInputScript:output_type -> signrpc.InputScriptResp
+ 11, // 34: signrpc.Signer.SignMessage:output_type -> signrpc.SignMessageResp
+ 13, // 35: signrpc.Signer.VerifyMessage:output_type -> signrpc.VerifyMessageResp
+ 15, // 36: signrpc.Signer.DeriveSharedKey:output_type -> signrpc.SharedKeyResponse
+ 19, // 37: signrpc.Signer.MuSig2CombineKeys:output_type -> signrpc.MuSig2CombineKeysResponse
+ 21, // 38: signrpc.Signer.MuSig2CreateSession:output_type -> signrpc.MuSig2SessionResponse
+ 23, // 39: signrpc.Signer.MuSig2RegisterNonces:output_type -> signrpc.MuSig2RegisterNoncesResponse
+ 25, // 40: signrpc.Signer.MuSig2RegisterCombinedNonce:output_type -> signrpc.MuSig2RegisterCombinedNonceResponse
+ 27, // 41: signrpc.Signer.MuSig2GetCombinedNonce:output_type -> signrpc.MuSig2GetCombinedNonceResponse
+ 29, // 42: signrpc.Signer.MuSig2Sign:output_type -> signrpc.MuSig2SignResponse
+ 31, // 43: signrpc.Signer.MuSig2CombineSig:output_type -> signrpc.MuSig2CombineSigResponse
+ 33, // 44: signrpc.Signer.MuSig2Cleanup:output_type -> signrpc.MuSig2CleanupResponse
+ 32, // [32:45] is the sub-list for method output_type
+ 19, // [19:32] is the sub-list for method input_type
19, // [19:19] is the sub-list for extension type_name
19, // [19:19] is the sub-list for extension extendee
0, // [0:19] is the sub-list for field type_name
@@ -2692,7 +2928,7 @@ func file_signrpc_signer_proto_init() {
}
}
file_signrpc_signer_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MuSig2SignRequest); i {
+ switch v := v.(*MuSig2RegisterCombinedNonceRequest); i {
case 0:
return &v.state
case 1:
@@ -2704,7 +2940,7 @@ func file_signrpc_signer_proto_init() {
}
}
file_signrpc_signer_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MuSig2SignResponse); i {
+ switch v := v.(*MuSig2RegisterCombinedNonceResponse); i {
case 0:
return &v.state
case 1:
@@ -2716,7 +2952,7 @@ func file_signrpc_signer_proto_init() {
}
}
file_signrpc_signer_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MuSig2CombineSigRequest); i {
+ switch v := v.(*MuSig2GetCombinedNonceRequest); i {
case 0:
return &v.state
case 1:
@@ -2728,7 +2964,7 @@ func file_signrpc_signer_proto_init() {
}
}
file_signrpc_signer_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MuSig2CombineSigResponse); i {
+ switch v := v.(*MuSig2GetCombinedNonceResponse); i {
case 0:
return &v.state
case 1:
@@ -2740,7 +2976,7 @@ func file_signrpc_signer_proto_init() {
}
}
file_signrpc_signer_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MuSig2CleanupRequest); i {
+ switch v := v.(*MuSig2SignRequest); i {
case 0:
return &v.state
case 1:
@@ -2752,6 +2988,54 @@ func file_signrpc_signer_proto_init() {
}
}
file_signrpc_signer_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MuSig2SignResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_signrpc_signer_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MuSig2CombineSigRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_signrpc_signer_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MuSig2CombineSigResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_signrpc_signer_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MuSig2CleanupRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_signrpc_signer_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MuSig2CleanupResponse); i {
case 0:
return &v.state
@@ -2770,7 +3054,7 @@ func file_signrpc_signer_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_signrpc_signer_proto_rawDesc,
NumEnums: 2,
- NumMessages: 28,
+ NumMessages: 32,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/lnrpc/signrpc/signer.pb.gw.go b/lnrpc/signrpc/signer.pb.gw.go
index 20b8da6..771ecc7 100644
--- a/lnrpc/signrpc/signer.pb.gw.go
+++ b/lnrpc/signrpc/signer.pb.gw.go
@@ -303,6 +303,74 @@ func local_request_Signer_MuSig2RegisterNonces_0(ctx context.Context, marshaler
}
+func request_Signer_MuSig2RegisterCombinedNonce_0(ctx context.Context, marshaler runtime.Marshaler, client SignerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+ var protoReq MuSig2RegisterCombinedNonceRequest
+ var metadata runtime.ServerMetadata
+
+ newReader, berr := utilities.IOReaderFactory(req.Body)
+ if berr != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+ }
+ if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+
+ msg, err := client.MuSig2RegisterCombinedNonce(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+ return msg, metadata, err
+
+}
+
+func local_request_Signer_MuSig2RegisterCombinedNonce_0(ctx context.Context, marshaler runtime.Marshaler, server SignerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+ var protoReq MuSig2RegisterCombinedNonceRequest
+ var metadata runtime.ServerMetadata
+
+ newReader, berr := utilities.IOReaderFactory(req.Body)
+ if berr != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+ }
+ if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+
+ msg, err := server.MuSig2RegisterCombinedNonce(ctx, &protoReq)
+ return msg, metadata, err
+
+}
+
+func request_Signer_MuSig2GetCombinedNonce_0(ctx context.Context, marshaler runtime.Marshaler, client SignerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+ var protoReq MuSig2GetCombinedNonceRequest
+ var metadata runtime.ServerMetadata
+
+ newReader, berr := utilities.IOReaderFactory(req.Body)
+ if berr != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+ }
+ if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+
+ msg, err := client.MuSig2GetCombinedNonce(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+ return msg, metadata, err
+
+}
+
+func local_request_Signer_MuSig2GetCombinedNonce_0(ctx context.Context, marshaler runtime.Marshaler, server SignerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+ var protoReq MuSig2GetCombinedNonceRequest
+ var metadata runtime.ServerMetadata
+
+ newReader, berr := utilities.IOReaderFactory(req.Body)
+ if berr != nil {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
+ }
+ if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
+ return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+ }
+
+ msg, err := server.MuSig2GetCombinedNonce(ctx, &protoReq)
+ return msg, metadata, err
+
+}
+
func request_Signer_MuSig2Sign_0(ctx context.Context, marshaler runtime.Marshaler, client SignerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq MuSig2SignRequest
var metadata runtime.ServerMetadata
@@ -611,6 +679,56 @@ func RegisterSignerHandlerServer(ctx context.Context, mux *runtime.ServeMux, ser
})
+ mux.Handle("POST", pattern_Signer_MuSig2RegisterCombinedNonce_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+ ctx, cancel := context.WithCancel(req.Context())
+ defer cancel()
+ var stream runtime.ServerTransportStream
+ ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+ inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+ var err error
+ var annotatedContext context.Context
+ annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/signrpc.Signer/MuSig2RegisterCombinedNonce", runtime.WithHTTPPathPattern("/v2/signer/musig2/registercombinednonce"))
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+ resp, md, err := local_request_Signer_MuSig2RegisterCombinedNonce_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+ md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+ annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+ if err != nil {
+ runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+ return
+ }
+
+ forward_Signer_MuSig2RegisterCombinedNonce_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+ })
+
+ mux.Handle("POST", pattern_Signer_MuSig2GetCombinedNonce_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+ ctx, cancel := context.WithCancel(req.Context())
+ defer cancel()
+ var stream runtime.ServerTransportStream
+ ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+ inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+ var err error
+ var annotatedContext context.Context
+ annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/signrpc.Signer/MuSig2GetCombinedNonce", runtime.WithHTTPPathPattern("/v2/signer/musig2/getcombinednonce"))
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+ resp, md, err := local_request_Signer_MuSig2GetCombinedNonce_0(annotatedContext, inboundMarshaler, server, req, pathParams)
+ md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+ annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+ if err != nil {
+ runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+ return
+ }
+
+ forward_Signer_MuSig2GetCombinedNonce_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+ })
+
mux.Handle("POST", pattern_Signer_MuSig2Sign_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -903,6 +1021,50 @@ func RegisterSignerHandlerClient(ctx context.Context, mux *runtime.ServeMux, cli
})
+ mux.Handle("POST", pattern_Signer_MuSig2RegisterCombinedNonce_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+ ctx, cancel := context.WithCancel(req.Context())
+ defer cancel()
+ inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+ var err error
+ var annotatedContext context.Context
+ annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/signrpc.Signer/MuSig2RegisterCombinedNonce", runtime.WithHTTPPathPattern("/v2/signer/musig2/registercombinednonce"))
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+ resp, md, err := request_Signer_MuSig2RegisterCombinedNonce_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+ annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+ if err != nil {
+ runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+ return
+ }
+
+ forward_Signer_MuSig2RegisterCombinedNonce_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+ })
+
+ mux.Handle("POST", pattern_Signer_MuSig2GetCombinedNonce_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+ ctx, cancel := context.WithCancel(req.Context())
+ defer cancel()
+ inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+ var err error
+ var annotatedContext context.Context
+ annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/signrpc.Signer/MuSig2GetCombinedNonce", runtime.WithHTTPPathPattern("/v2/signer/musig2/getcombinednonce"))
+ if err != nil {
+ runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+ return
+ }
+ resp, md, err := request_Signer_MuSig2GetCombinedNonce_0(annotatedContext, inboundMarshaler, client, req, pathParams)
+ annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
+ if err != nil {
+ runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
+ return
+ }
+
+ forward_Signer_MuSig2GetCombinedNonce_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+ })
+
mux.Handle("POST", pattern_Signer_MuSig2Sign_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -989,6 +1151,10 @@ var (
pattern_Signer_MuSig2RegisterNonces_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "signer", "musig2", "registernonces"}, ""))
+ pattern_Signer_MuSig2RegisterCombinedNonce_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "signer", "musig2", "registercombinednonce"}, ""))
+
+ pattern_Signer_MuSig2GetCombinedNonce_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "signer", "musig2", "getcombinednonce"}, ""))
+
pattern_Signer_MuSig2Sign_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "signer", "musig2", "sign"}, ""))
pattern_Signer_MuSig2CombineSig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "signer", "musig2", "combinesig"}, ""))
@@ -1013,6 +1179,10 @@ var (
forward_Signer_MuSig2RegisterNonces_0 = runtime.ForwardResponseMessage
+ forward_Signer_MuSig2RegisterCombinedNonce_0 = runtime.ForwardResponseMessage
+
+ forward_Signer_MuSig2GetCombinedNonce_0 = runtime.ForwardResponseMessage
+
forward_Signer_MuSig2Sign_0 = runtime.ForwardResponseMessage
forward_Signer_MuSig2CombineSig_0 = runtime.ForwardResponseMessage
diff --git a/lnrpc/signrpc/signer.pb.json.go b/lnrpc/signrpc/signer.pb.json.go
index 6adf032..561d991 100644
--- a/lnrpc/signrpc/signer.pb.json.go
+++ b/lnrpc/signrpc/signer.pb.json.go
@@ -221,6 +221,56 @@ func RegisterSignerJSONCallbacks(registry map[string]func(ctx context.Context,
callback(string(respBytes), nil)
}
+ registry["signrpc.Signer.MuSig2RegisterCombinedNonce"] = func(ctx context.Context,
+ conn *grpc.ClientConn, reqJSON string, callback func(string, error)) {
+
+ req := &MuSig2RegisterCombinedNonceRequest{}
+ err := marshaler.Unmarshal([]byte(reqJSON), req)
+ if err != nil {
+ callback("", err)
+ return
+ }
+
+ client := NewSignerClient(conn)
+ resp, err := client.MuSig2RegisterCombinedNonce(ctx, req)
+ if err != nil {
+ callback("", err)
+ return
+ }
+
+ respBytes, err := marshaler.Marshal(resp)
+ if err != nil {
+ callback("", err)
+ return
+ }
+ callback(string(respBytes), nil)
+ }
+
+ registry["signrpc.Signer.MuSig2GetCombinedNonce"] = func(ctx context.Context,
+ conn *grpc.ClientConn, reqJSON string, callback func(string, error)) {
+
+ req := &MuSig2GetCombinedNonceRequest{}
+ err := marshaler.Unmarshal([]byte(reqJSON), req)
+ if err != nil {
+ callback("", err)
+ return
+ }
+
+ client := NewSignerClient(conn)
+ resp, err := client.MuSig2GetCombinedNonce(ctx, req)
+ if err != nil {
+ callback("", err)
+ return
+ }
+
+ respBytes, err := marshaler.Marshal(resp)
+ if err != nil {
+ callback("", err)
+ return
+ }
+ callback(string(respBytes), nil)
+ }
+
registry["signrpc.Signer.MuSig2Sign"] = func(ctx context.Context,
conn *grpc.ClientConn, reqJSON string, callback func(string, error)) {
diff --git a/lnrpc/signrpc/signer.proto b/lnrpc/signrpc/signer.proto
index 28a3295..1dc1288 100644
--- a/lnrpc/signrpc/signer.proto
+++ b/lnrpc/signrpc/signer.proto
@@ -106,6 +106,34 @@ service Signer {
rpc MuSig2RegisterNonces (MuSig2RegisterNoncesRequest)
returns (MuSig2RegisterNoncesResponse);
+ /*
+ MuSig2RegisterCombinedNonce (experimental!) registers a pre-aggregated
+ combined nonce for a signing session. This is an alternative to
+ MuSig2RegisterNonces and is used when a coordinator has already aggregated
+ all individual nonces and wants to distribute the combined nonce to
+ participants.
+
+ NOTE: This method is mutually exclusive with MuSig2RegisterNonces for the
+ same session. The MuSig2 BIP is not final yet and therefore this API must
+ be considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming
+ releases. Backward compatibility is not guaranteed!
+ */
+ rpc MuSig2RegisterCombinedNonce (MuSig2RegisterCombinedNonceRequest)
+ returns (MuSig2RegisterCombinedNonceResponse);
+
+ /*
+ MuSig2GetCombinedNonce (experimental!) retrieves the combined nonce for a
+ signing session. This will be available after either all individual nonces
+ have been registered via MuSig2RegisterNonces, or a combined nonce has been
+ registered via MuSig2RegisterCombinedNonce.
+
+ NOTE: The MuSig2 BIP is not final yet and therefore this API must be
+ considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming
+ releases. Backward compatibility is not guaranteed!
+ */
+ rpc MuSig2GetCombinedNonce (MuSig2GetCombinedNonceRequest)
+ returns (MuSig2GetCombinedNonceResponse);
+
/*
MuSig2Sign (experimental!) creates a partial signature using the local
signing key that was specified when the session was created. This can only
@@ -645,6 +673,38 @@ message MuSig2RegisterNoncesResponse {
bool have_all_nonces = 1;
}
+message MuSig2RegisterCombinedNonceRequest {
+ /*
+ The unique ID of the signing session the combined nonce should be registered
+ with.
+ */
+ bytes session_id = 1;
+
+ /*
+ The 66-byte combined public nonce that was aggregated externally. This is a
+ concatenation of two 33-byte compressed public keys (R1 || R2).
+ */
+ bytes combined_public_nonce = 2;
+}
+
+message MuSig2RegisterCombinedNonceResponse {
+}
+
+message MuSig2GetCombinedNonceRequest {
+ /*
+ The unique ID of the signing session to get the combined nonce for.
+ */
+ bytes session_id = 1;
+}
+
+message MuSig2GetCombinedNonceResponse {
+ /*
+ The 66-byte combined public nonce. This is a concatenation of two 33-byte
+ compressed public keys (R1 || R2).
+ */
+ bytes combined_public_nonce = 1;
+}
+
message MuSig2SignRequest {
/*
The unique ID of the signing session to use for signing.
diff --git a/lnrpc/signrpc/signer.swagger.json b/lnrpc/signrpc/signer.swagger.json
index 1c6b6f0..3241204 100644
--- a/lnrpc/signrpc/signer.swagger.json
+++ b/lnrpc/signrpc/signer.swagger.json
@@ -186,6 +186,74 @@
]
}
},
+ "/v2/signer/musig2/getcombinednonce": {
+ "post": {
+ "summary": "MuSig2GetCombinedNonce (experimental!) retrieves the combined nonce for a\nsigning session. This will be available after either all individual nonces\nhave been registered via MuSig2RegisterNonces, or a combined nonce has been\nregistered via MuSig2RegisterCombinedNonce.",
+ "description": "NOTE: The MuSig2 BIP is not final yet and therefore this API must be\nconsidered to be HIGHLY EXPERIMENTAL and subject to change in upcoming\nreleases. Backward compatibility is not guaranteed!",
+ "operationId": "Signer_MuSig2GetCombinedNonce",
+ "responses": {
+ "200": {
+ "description": "A successful response.",
+ "schema": {
+ "$ref": "#/definitions/signrpcMuSig2GetCombinedNonceResponse"
+ }
+ },
+ "default": {
+ "description": "An unexpected error response.",
+ "schema": {
+ "$ref": "#/definitions/rpcStatus"
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/signrpcMuSig2GetCombinedNonceRequest"
+ }
+ }
+ ],
+ "tags": [
+ "Signer"
+ ]
+ }
+ },
+ "/v2/signer/musig2/registercombinednonce": {
+ "post": {
+ "summary": "MuSig2RegisterCombinedNonce (experimental!) registers a pre-aggregated\ncombined nonce for a signing session. This is an alternative to\nMuSig2RegisterNonces and is used when a coordinator has already aggregated\nall individual nonces and wants to distribute the combined nonce to\nparticipants.",
+ "description": "NOTE: This method is mutually exclusive with MuSig2RegisterNonces for the\nsame session. The MuSig2 BIP is not final yet and therefore this API must\nbe considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming\nreleases. Backward compatibility is not guaranteed!",
+ "operationId": "Signer_MuSig2RegisterCombinedNonce",
+ "responses": {
+ "200": {
+ "description": "A successful response.",
+ "schema": {
+ "$ref": "#/definitions/signrpcMuSig2RegisterCombinedNonceResponse"
+ }
+ },
+ "default": {
+ "description": "An unexpected error response.",
+ "schema": {
+ "$ref": "#/definitions/rpcStatus"
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/signrpcMuSig2RegisterCombinedNonceRequest"
+ }
+ }
+ ],
+ "tags": [
+ "Signer"
+ ]
+ }
+ },
"/v2/signer/musig2/registernonces": {
"post": {
"summary": "MuSig2RegisterNonces (experimental!) registers one or more public nonces of\nother signing participants for a session identified by its ID. This RPC can\nbe called multiple times until all nonces are registered.",
@@ -572,6 +640,44 @@
}
}
},
+ "signrpcMuSig2GetCombinedNonceRequest": {
+ "type": "object",
+ "properties": {
+ "session_id": {
+ "type": "string",
+ "format": "byte",
+ "description": "The unique ID of the signing session to get the combined nonce for."
+ }
+ }
+ },
+ "signrpcMuSig2GetCombinedNonceResponse": {
+ "type": "object",
+ "properties": {
+ "combined_public_nonce": {
+ "type": "string",
+ "format": "byte",
+ "description": "The 66-byte combined public nonce. This is a concatenation of two 33-byte\ncompressed public keys (R1 || R2)."
+ }
+ }
+ },
+ "signrpcMuSig2RegisterCombinedNonceRequest": {
+ "type": "object",
+ "properties": {
+ "session_id": {
+ "type": "string",
+ "format": "byte",
+ "description": "The unique ID of the signing session the combined nonce should be registered\nwith."
+ },
+ "combined_public_nonce": {
+ "type": "string",
+ "format": "byte",
+ "description": "The 66-byte combined public nonce that was aggregated externally. This is a\nconcatenation of two 33-byte compressed public keys (R1 || R2)."
+ }
+ }
+ },
+ "signrpcMuSig2RegisterCombinedNonceResponse": {
+ "type": "object"
+ },
"signrpcMuSig2RegisterNoncesRequest": {
"type": "object",
"properties": {
diff --git a/lnrpc/signrpc/signer.yaml b/lnrpc/signrpc/signer.yaml
index 57699de..20f5371 100644
--- a/lnrpc/signrpc/signer.yaml
+++ b/lnrpc/signrpc/signer.yaml
@@ -27,6 +27,12 @@ http:
- selector: signrpc.Signer.MuSig2RegisterNonces
post: "/v2/signer/musig2/registernonces"
body: "*"
+ - selector: signrpc.Signer.MuSig2RegisterCombinedNonce
+ post: "/v2/signer/musig2/registercombinednonce"
+ body: "*"
+ - selector: signrpc.Signer.MuSig2GetCombinedNonce
+ post: "/v2/signer/musig2/getcombinednonce"
+ body: "*"
- selector: signrpc.Signer.MuSig2Sign
post: "/v2/signer/musig2/sign"
body: "*"
diff --git a/lnrpc/signrpc/signer_grpc.pb.go b/lnrpc/signrpc/signer_grpc.pb.go
index 304b56a..5e995c1 100644
--- a/lnrpc/signrpc/signer_grpc.pb.go
+++ b/lnrpc/signrpc/signer_grpc.pb.go
@@ -90,6 +90,26 @@ type SignerClient interface {
// considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming
// releases. Backward compatibility is not guaranteed!
MuSig2RegisterNonces(ctx context.Context, in *MuSig2RegisterNoncesRequest, opts ...grpc.CallOption) (*MuSig2RegisterNoncesResponse, error)
+ // MuSig2RegisterCombinedNonce (experimental!) registers a pre-aggregated
+ // combined nonce for a signing session. This is an alternative to
+ // MuSig2RegisterNonces and is used when a coordinator has already aggregated
+ // all individual nonces and wants to distribute the combined nonce to
+ // participants.
+ //
+ // NOTE: This method is mutually exclusive with MuSig2RegisterNonces for the
+ // same session. The MuSig2 BIP is not final yet and therefore this API must
+ // be considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming
+ // releases. Backward compatibility is not guaranteed!
+ MuSig2RegisterCombinedNonce(ctx context.Context, in *MuSig2RegisterCombinedNonceRequest, opts ...grpc.CallOption) (*MuSig2RegisterCombinedNonceResponse, error)
+ // MuSig2GetCombinedNonce (experimental!) retrieves the combined nonce for a
+ // signing session. This will be available after either all individual nonces
+ // have been registered via MuSig2RegisterNonces, or a combined nonce has been
+ // registered via MuSig2RegisterCombinedNonce.
+ //
+ // NOTE: The MuSig2 BIP is not final yet and therefore this API must be
+ // considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming
+ // releases. Backward compatibility is not guaranteed!
+ MuSig2GetCombinedNonce(ctx context.Context, in *MuSig2GetCombinedNonceRequest, opts ...grpc.CallOption) (*MuSig2GetCombinedNonceResponse, error)
// MuSig2Sign (experimental!) creates a partial signature using the local
// signing key that was specified when the session was created. This can only
// be called when all public nonces of all participants are known and have been
@@ -200,6 +220,24 @@ func (c *signerClient) MuSig2RegisterNonces(ctx context.Context, in *MuSig2Regis
return out, nil
}
+func (c *signerClient) MuSig2RegisterCombinedNonce(ctx context.Context, in *MuSig2RegisterCombinedNonceRequest, opts ...grpc.CallOption) (*MuSig2RegisterCombinedNonceResponse, error) {
+ out := new(MuSig2RegisterCombinedNonceResponse)
+ err := c.cc.Invoke(ctx, "/signrpc.Signer/MuSig2RegisterCombinedNonce", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *signerClient) MuSig2GetCombinedNonce(ctx context.Context, in *MuSig2GetCombinedNonceRequest, opts ...grpc.CallOption) (*MuSig2GetCombinedNonceResponse, error) {
+ out := new(MuSig2GetCombinedNonceResponse)
+ err := c.cc.Invoke(ctx, "/signrpc.Signer/MuSig2GetCombinedNonce", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func (c *signerClient) MuSig2Sign(ctx context.Context, in *MuSig2SignRequest, opts ...grpc.CallOption) (*MuSig2SignResponse, error) {
out := new(MuSig2SignResponse)
err := c.cc.Invoke(ctx, "/signrpc.Signer/MuSig2Sign", in, out, opts...)
@@ -303,6 +341,26 @@ type SignerServer interface {
// considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming
// releases. Backward compatibility is not guaranteed!
MuSig2RegisterNonces(context.Context, *MuSig2RegisterNoncesRequest) (*MuSig2RegisterNoncesResponse, error)
+ // MuSig2RegisterCombinedNonce (experimental!) registers a pre-aggregated
+ // combined nonce for a signing session. This is an alternative to
+ // MuSig2RegisterNonces and is used when a coordinator has already aggregated
+ // all individual nonces and wants to distribute the combined nonce to
+ // participants.
+ //
+ // NOTE: This method is mutually exclusive with MuSig2RegisterNonces for the
+ // same session. The MuSig2 BIP is not final yet and therefore this API must
+ // be considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming
+ // releases. Backward compatibility is not guaranteed!
+ MuSig2RegisterCombinedNonce(context.Context, *MuSig2RegisterCombinedNonceRequest) (*MuSig2RegisterCombinedNonceResponse, error)
+ // MuSig2GetCombinedNonce (experimental!) retrieves the combined nonce for a
+ // signing session. This will be available after either all individual nonces
+ // have been registered via MuSig2RegisterNonces, or a combined nonce has been
+ // registered via MuSig2RegisterCombinedNonce.
+ //
+ // NOTE: The MuSig2 BIP is not final yet and therefore this API must be
+ // considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming
+ // releases. Backward compatibility is not guaranteed!
+ MuSig2GetCombinedNonce(context.Context, *MuSig2GetCombinedNonceRequest) (*MuSig2GetCombinedNonceResponse, error)
// MuSig2Sign (experimental!) creates a partial signature using the local
// signing key that was specified when the session was created. This can only
// be called when all public nonces of all participants are known and have been
@@ -362,6 +420,12 @@ func (UnimplementedSignerServer) MuSig2CreateSession(context.Context, *MuSig2Ses
func (UnimplementedSignerServer) MuSig2RegisterNonces(context.Context, *MuSig2RegisterNoncesRequest) (*MuSig2RegisterNoncesResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method MuSig2RegisterNonces not implemented")
}
+func (UnimplementedSignerServer) MuSig2RegisterCombinedNonce(context.Context, *MuSig2RegisterCombinedNonceRequest) (*MuSig2RegisterCombinedNonceResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method MuSig2RegisterCombinedNonce not implemented")
+}
+func (UnimplementedSignerServer) MuSig2GetCombinedNonce(context.Context, *MuSig2GetCombinedNonceRequest) (*MuSig2GetCombinedNonceResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method MuSig2GetCombinedNonce not implemented")
+}
func (UnimplementedSignerServer) MuSig2Sign(context.Context, *MuSig2SignRequest) (*MuSig2SignResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method MuSig2Sign not implemented")
}
@@ -528,6 +592,42 @@ func _Signer_MuSig2RegisterNonces_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler)
}
+func _Signer_MuSig2RegisterCombinedNonce_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MuSig2RegisterCombinedNonceRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(SignerServer).MuSig2RegisterCombinedNonce(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/signrpc.Signer/MuSig2RegisterCombinedNonce",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(SignerServer).MuSig2RegisterCombinedNonce(ctx, req.(*MuSig2RegisterCombinedNonceRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Signer_MuSig2GetCombinedNonce_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MuSig2GetCombinedNonceRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(SignerServer).MuSig2GetCombinedNonce(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/signrpc.Signer/MuSig2GetCombinedNonce",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(SignerServer).MuSig2GetCombinedNonce(ctx, req.(*MuSig2GetCombinedNonceRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
func _Signer_MuSig2Sign_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(MuSig2SignRequest)
if err := dec(in); err != nil {
@@ -621,6 +721,14 @@ var Signer_ServiceDesc = grpc.ServiceDesc{
MethodName: "MuSig2RegisterNonces",
Handler: _Signer_MuSig2RegisterNonces_Handler,
},
+ {
+ MethodName: "MuSig2RegisterCombinedNonce",
+ Handler: _Signer_MuSig2RegisterCombinedNonce_Handler,
+ },
+ {
+ MethodName: "MuSig2GetCombinedNonce",
+ Handler: _Signer_MuSig2GetCombinedNonce_Handler,
+ },
{
MethodName: "MuSig2Sign",
Handler: _Signer_MuSig2Sign_Handler,
diff --git a/lntest/mock/signer.go b/lntest/mock/signer.go
index 1d30204..5857fdd 100644
--- a/lntest/mock/signer.go
+++ b/lntest/mock/signer.go
@@ -72,6 +72,22 @@ func (d *DummySigner) MuSig2RegisterNonces(input.MuSig2SessionID,
return false, nil
}
+// MuSig2RegisterCombinedNonce registers a pre-aggregated combined nonce for a
+// session identified by its ID.
+func (d *DummySigner) MuSig2RegisterCombinedNonce(input.MuSig2SessionID,
+ [musig2.PubNonceSize]byte) error {
+
+ return nil
+}
+
+// MuSig2GetCombinedNonce retrieves the combined nonce for a session identified
+// by its ID.
+func (d *DummySigner) MuSig2GetCombinedNonce(input.MuSig2SessionID) (
+ [musig2.PubNonceSize]byte, error) {
+
+ return [musig2.PubNonceSize]byte{}, nil
+}
+
// MuSig2Sign creates a partial signature using the local signing key
// that was specified when the session was created. This can only be
// called when all public nonces of all participants are known and have
diff --git a/lnwallet/rpcwallet/rpcwallet.go b/lnwallet/rpcwallet/rpcwallet.go
index 426712b..f7062c1 100644
--- a/lnwallet/rpcwallet/rpcwallet.go
+++ b/lnwallet/rpcwallet/rpcwallet.go
@@ -780,6 +780,59 @@ func (r *RPCKeyRing) MuSig2RegisterNonces(sessionID input.MuSig2SessionID,
return resp.HaveAllNonces, nil
}
+// MuSig2RegisterCombinedNonce registers a pre-aggregated combined nonce for a
+// session identified by its ID. This is an alternative to MuSig2RegisterNonces
+// and is used when a coordinator has already aggregated all individual nonces.
+func (r *RPCKeyRing) MuSig2RegisterCombinedNonce(
+ sessionID input.MuSig2SessionID,
+ combinedNonce [musig2.PubNonceSize]byte) error {
+
+ req := &signrpc.MuSig2RegisterCombinedNonceRequest{
+ SessionId: sessionID[:],
+ CombinedPublicNonce: combinedNonce[:],
+ }
+
+ ctxt, cancel := context.WithTimeout(context.Background(), r.rpcTimeout)
+ defer cancel()
+
+ _, err := r.signerClient.MuSig2RegisterCombinedNonce(ctxt, req)
+ if err != nil {
+ considerShutdown(err)
+
+ return fmt.Errorf("error registering MuSig2 combined nonce "+
+ "in remote signer instance: %v", err)
+ }
+
+ return nil
+}
+
+// MuSig2GetCombinedNonce retrieves the combined nonce for a session identified
+// by its ID.
+func (r *RPCKeyRing) MuSig2GetCombinedNonce(sessionID input.MuSig2SessionID) (
+ [musig2.PubNonceSize]byte, error) {
+
+ req := &signrpc.MuSig2GetCombinedNonceRequest{
+ SessionId: sessionID[:],
+ }
+
+ ctxt, cancel := context.WithTimeout(context.Background(), r.rpcTimeout)
+ defer cancel()
+
+ resp, err := r.signerClient.MuSig2GetCombinedNonce(ctxt, req)
+ if err != nil {
+ considerShutdown(err)
+
+ return [musig2.PubNonceSize]byte{}, fmt.Errorf("error getting "+
+ "MuSig2 combined nonce from remote signer instance: %v",
+ err)
+ }
+
+ var combinedNonce [musig2.PubNonceSize]byte
+ copy(combinedNonce[:], resp.CombinedPublicNonce)
+
+ return combinedNonce, nil
+}
+
// MuSig2Sign creates a partial signature using the local signing key
// that was specified when the session was created. This can only be
// called when all public nonces of all participants are known and have
diff --git a/watchtower/wtmock/signer.go b/watchtower/wtmock/signer.go
index af3ebe5..fa1bda1 100644
--- a/watchtower/wtmock/signer.go
+++ b/watchtower/wtmock/signer.go
@@ -150,6 +150,22 @@ func (s *MockSigner) MuSig2RegisterNonces(input.MuSig2SessionID,
return false, nil
}
+// MuSig2RegisterCombinedNonce registers a pre-aggregated combined nonce for a
+// session identified by its ID.
+func (s *MockSigner) MuSig2RegisterCombinedNonce(input.MuSig2SessionID,
+ [musig2.PubNonceSize]byte) error {
+
+ return nil
+}
+
+// MuSig2GetCombinedNonce retrieves the combined nonce for a session identified
+// by its ID.
+func (s *MockSigner) MuSig2GetCombinedNonce(input.MuSig2SessionID) (
+ [musig2.PubNonceSize]byte, error) {
+
+ return [musig2.PubNonceSize]byte{}, nil
+}
+
// MuSig2Sign creates a partial signature using the local signing key
// that was specified when the session was created. This can only be
// called when all public nonces of all participants are known and have
Why this scored 20/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.