Skip to content

Commit

Permalink
DRY up pkg/config envelope creation (hyperledger#1098)
Browse files Browse the repository at this point in the history
FAB-17741

Signed-off-by: Will Lahti <wtlahti@us.ibm.com>
  • Loading branch information
wlahti authored Apr 16, 2020
1 parent 83b89c9 commit b86eadb
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 27 deletions.
4 changes: 2 additions & 2 deletions pkg/configtx/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -485,8 +485,8 @@ func newConfigGroup() *cb.ConfigGroup {
}
}

// newEnvelope creates an unsigned envelope of type txType using with the marshalled
// cb.ConfigGroupEnvelope proto message.
// newEnvelope creates an unsigned envelope of the desired type containing
// a payload Header and the marshaled proto message as the payload Data.
func newEnvelope(
txType cb.HeaderType,
channelID string,
Expand Down
40 changes: 15 additions & 25 deletions pkg/configtx/signer.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,60 +130,50 @@ func (s *SigningIdentity) SignConfigUpdateEnvelope(configUpdate *cb.ConfigUpdate
Signatures: signatures,
}

signedEnvelope, err := s.createSignedEnvelope(cb.HeaderType_CONFIG_UPDATE, configUpdate.ChannelId, configUpdateEnvelope)
signedEnvelope, err := s.newSignedEnvelope(cb.HeaderType_CONFIG_UPDATE, configUpdate.ChannelId, configUpdateEnvelope)
if err != nil {
return nil, fmt.Errorf("failed to create signed config update envelope: %v", err)
}

return signedEnvelope, nil
}

// createSignedEnvelope creates a signed envelope of the desired type and signs it.
func (s *SigningIdentity) createSignedEnvelope(txType cb.HeaderType, channelID string, envelope proto.Message) (*cb.Envelope, error) {
channelHeader := channelHeader(txType, msgVersion, channelID, epoch)

signatureHeader, err := s.signatureHeader()
// newSignedEnvelope creates a signed envelope of the desired type and signs it.
func (s *SigningIdentity) newSignedEnvelope(txType cb.HeaderType, channelID string, dataMsg proto.Message) (*cb.Envelope, error) {
env, err := newEnvelope(txType, channelID, dataMsg)
if err != nil {
return nil, fmt.Errorf("creating signature header: %v", err)
return nil, fmt.Errorf("creating envelope: %v", err)
}

cHeader, err := proto.Marshal(channelHeader)
signatureHeader, err := s.signatureHeader()
if err != nil {
return nil, fmt.Errorf("marshaling channel header: %s", err)
return nil, fmt.Errorf("creating signature header: %v", err)
}

sHeader, err := proto.Marshal(signatureHeader)
if err != nil {
return nil, fmt.Errorf("marshaling signature header: %s", err)
return nil, fmt.Errorf("marshaling signature header: %v", err)
}

data, err := proto.Marshal(envelope)
payload := &cb.Payload{}
err = proto.Unmarshal(env.Payload, payload)
if err != nil {
return nil, fmt.Errorf("marshaling config update envelope: %s", err)
}

payload := &cb.Payload{
Header: &cb.Header{
ChannelHeader: cHeader,
SignatureHeader: sHeader,
},
Data: data,
return nil, fmt.Errorf("unmarshaling envelope payload: %v", err)
}
payload.Header.SignatureHeader = sHeader

payloadBytes, err := proto.Marshal(payload)
if err != nil {
return nil, fmt.Errorf("marshaling payload: %s", err)
return nil, fmt.Errorf("marshaling payload: %v", err)
}

sig, err := s.Sign(rand.Reader, payloadBytes, nil)
if err != nil {
return nil, fmt.Errorf("signing envelope's payload: %v", err)
}

env := &cb.Envelope{
Payload: payloadBytes,
Signature: sig,
}
env.Payload = payloadBytes
env.Signature = sig

return env, nil
}
Expand Down

0 comments on commit b86eadb

Please sign in to comment.