Skip to content

Commit c8e0dbb

Browse files
author
Jason Yellick
committed
[FAB-4467] Allow nil signer for creating envelope
The CreateSignedEnvelope function requires a signer as a parameter. In some instances, a signer is not available, or not required/desired. This CR modifies the CreateSignedEnvelope function to accept a nil signer, which will allow the function to proceed normally, simply without performing the signing related operations. Change-Id: I75dcba15c07cf4acb1f7fe293cd2271c9792460d Signed-off-by: Jason Yellick <[email protected]>
1 parent 7918d5e commit c8e0dbb

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

protos/utils/txutils.go

+14-6
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,14 @@ func GetEnvelopeFromBlock(data []byte) (*common.Envelope, error) {
7777
func CreateSignedEnvelope(txType common.HeaderType, channelID string, signer crypto.LocalSigner, dataMsg proto.Message, msgVersion int32, epoch uint64) (*common.Envelope, error) {
7878
payloadChannelHeader := MakeChannelHeader(txType, msgVersion, channelID, epoch)
7979

80-
payloadSignatureHeader, err := signer.NewSignatureHeader()
81-
if err != nil {
82-
return nil, err
80+
var err error
81+
payloadSignatureHeader := &common.SignatureHeader{}
82+
83+
if signer != nil {
84+
payloadSignatureHeader, err = signer.NewSignatureHeader()
85+
if err != nil {
86+
return nil, err
87+
}
8388
}
8489

8590
data, err := proto.Marshal(dataMsg)
@@ -92,9 +97,12 @@ func CreateSignedEnvelope(txType common.HeaderType, channelID string, signer cry
9297
Data: data,
9398
})
9499

95-
sig, err := signer.Sign(paylBytes)
96-
if err != nil {
97-
return nil, err
100+
var sig []byte
101+
if signer != nil {
102+
sig, err = signer.Sign(paylBytes)
103+
if err != nil {
104+
return nil, err
105+
}
98106
}
99107

100108
return &common.Envelope{Payload: paylBytes, Signature: sig}, nil

protos/utils/txutils_test.go

+19
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,25 @@ func TestCreateSignedEnvelope(t *testing.T) {
256256
assert.Error(t, err, "Expected sign error")
257257
}
258258

259+
func TestCreateSignedEnvelopeNilSigner(t *testing.T) {
260+
var env *cb.Envelope
261+
channelID := "mychannelID"
262+
msg := &cb.ConfigEnvelope{}
263+
264+
env, err := utils.CreateSignedEnvelope(cb.HeaderType_CONFIG, channelID,
265+
nil, msg, int32(1), uint64(1))
266+
assert.NoError(t, err, "Unexpected error creating signed envelope")
267+
assert.NotNil(t, env, "Envelope should not be nil")
268+
assert.Empty(t, env.Signature, "Signature should have been empty")
269+
payload := &cb.Payload{}
270+
err = proto.Unmarshal(env.Payload, payload)
271+
assert.NoError(t, err, "Failed to unmarshal payload")
272+
data := &cb.ConfigEnvelope{}
273+
err = proto.Unmarshal(payload.Data, data)
274+
assert.NoError(t, err, "Expected payload data to be a config envelope")
275+
assert.Equal(t, msg, data, "Payload data does not match expected value")
276+
}
277+
259278
func TestGetSignedProposal(t *testing.T) {
260279
var signedProp *pb.SignedProposal
261280
var err error

0 commit comments

Comments
 (0)