Skip to content

Commit 615ee1f

Browse files
committed
unit-test improvements
Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent 3768066 commit 615ee1f

File tree

4 files changed

+134
-71
lines changed

4 files changed

+134
-71
lines changed

token/services/ttx/collectendorsements.go

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,8 @@ type ExternalWalletSigner interface {
4141
type verifierGetterFunc func(ctx context.Context, identity view.Identity) (token.Verifier, error)
4242

4343
type SignatureRequest struct {
44-
TX []byte
45-
Request []byte
46-
Signer view.Identity
47-
}
48-
49-
func (sr *SignatureRequest) MessageToSign() []byte {
50-
return sr.Request
44+
TX []byte
45+
Signer view.Identity
5146
}
5247

5348
// Bytes returns the serialization of this struct
@@ -179,7 +174,7 @@ func (c *CollectEndorsementsView) requestSignaturesOnTransfers(context view.Cont
179174

180175
func (c *CollectEndorsementsView) requestSignatures(signers []view.Identity, verifierGetter verifierGetterFunc, context view.Context, externalWallets map[string]ExternalWalletSigner) (map[string][]byte, error) {
181176
logger.DebugfContext(context.Context(), "Request %d signatures", len(signers))
182-
requestRaw, err := c.requestBytes()
177+
requestRaw, err := c.tx.TokenRequest.MarshalToSign()
183178
if err != nil {
184179
return nil, err
185180
}
@@ -197,9 +192,8 @@ func (c *CollectEndorsementsView) requestSignatures(signers []view.Identity, ver
197192
// - the signature must be generated by a remote party
198193

199194
signatureRequest := &SignatureRequest{
200-
TX: txRaw,
201-
Request: requestRaw,
202-
Signer: signerIdentity,
195+
TX: txRaw,
196+
Signer: signerIdentity,
203197
}
204198
logger.DebugfContext(context.Context(), "collecting signature [%d] on request from [%s]", i, signerIdentity)
205199

@@ -227,7 +221,7 @@ func (c *CollectEndorsementsView) requestSignatures(signers []view.Identity, ver
227221
// Case: there is a signer locally bound to the party, use it to generate the signature
228222
if signer, err := c.tx.TokenService().SigService().GetSigner(context.Context(), signerIdentity); err == nil {
229223
logger.DebugfContext(context.Context(), "found signer for party [%s], request local signature", signerIdentity)
230-
sigma, err := c.signLocal(context.Context(), signerIdentity, signer, signatureRequest)
224+
sigma, err := c.signLocal(context.Context(), signerIdentity, signer, requestRaw)
231225
if err != nil {
232226
return nil, errors.WithMessagef(err, "failed signing local for party [%s]", signerIdentity)
233227
}
@@ -245,7 +239,7 @@ func (c *CollectEndorsementsView) requestSignatures(signers []view.Identity, ver
245239
return nil, errors.Errorf("no external wallet signer found for [%s][%s]", w.ID(), signerIdentity)
246240
}
247241
externalWallets[w.ID()] = ews
248-
sigma, err := c.signExternal(context.Context(), signerIdentity, ews, signatureRequest)
242+
sigma, err := c.signExternal(context.Context(), signerIdentity, ews, requestRaw)
249243
if err != nil {
250244
return nil, errors.WithMessagef(err, "failed signing external for party [%s]", signerIdentity)
251245
}
@@ -255,7 +249,7 @@ func (c *CollectEndorsementsView) requestSignatures(signers []view.Identity, ver
255249

256250
// Case: the signature must be generated by a remote party
257251
logger.DebugfContext(context.Context(), "no signer or wallet found for party [%s], request remote signature", signerIdentity)
258-
sigma, err := c.signRemote(context, signerIdentity, signatureRequest, verifierGetter)
252+
sigma, err := c.signRemote(context, signerIdentity, signatureRequest, requestRaw, verifierGetter)
259253
if err != nil {
260254
return nil, errors.WithMessagef(err, "failed signing remote for party [%s]", signerIdentity)
261255
}
@@ -266,28 +260,34 @@ func (c *CollectEndorsementsView) requestSignatures(signers []view.Identity, ver
266260
return sigmas, nil
267261
}
268262

269-
func (c *CollectEndorsementsView) signLocal(ctx context.Context, party view.Identity, signer token.Signer, signatureRequest *SignatureRequest) ([]byte, error) {
270-
logger.DebugfContext(ctx, "signing [request_hash=%s][tx_id=%s][nonce=%s]", utils.Hashable(signatureRequest.Request), c.tx.ID(), logging.Base64(c.tx.TxID.Nonce))
263+
func (c *CollectEndorsementsView) signLocal(ctx context.Context, party view.Identity, signer token.Signer, requestRaw []byte) ([]byte, error) {
264+
logger.DebugfContext(ctx, "signing [request_hash=%s][tx_id=%s][nonce=%s]", utils.Hashable(requestRaw), c.tx.ID(), logging.Base64(c.tx.TxID.Nonce))
271265

272-
sigma, err := signer.Sign(signatureRequest.MessageToSign())
266+
sigma, err := signer.Sign(requestRaw)
273267
if err != nil {
274268
return nil, err
275269
}
276-
logger.DebugfContext(ctx, "signature generated (local, me) [%s,%s,%s,%v]", utils.Hashable(signatureRequest.MessageToSign()), utils.Hashable(sigma), party, logging.Identifier(signer))
270+
logger.DebugfContext(ctx, "signature generated (local, me) [%s,%s,%s,%v]", utils.Hashable(requestRaw), utils.Hashable(sigma), party, logging.Identifier(signer))
277271
return sigma, nil
278272
}
279273

280-
func (c *CollectEndorsementsView) signExternal(ctx context.Context, party view.Identity, signer ExternalWalletSigner, signatureRequest *SignatureRequest) ([]byte, error) {
281-
logger.DebugfContext(ctx, "signing [request=%s][tx_id=%s][nonce=%s]", utils.Hashable(signatureRequest.Request), c.tx.ID(), logging.Base64(c.tx.TxID.Nonce))
282-
sigma, err := signer.Sign(party, signatureRequest.MessageToSign())
274+
func (c *CollectEndorsementsView) signExternal(ctx context.Context, party view.Identity, signer ExternalWalletSigner, requestRaw []byte) ([]byte, error) {
275+
logger.DebugfContext(ctx, "signing [request=%s][tx_id=%s][nonce=%s]", utils.Hashable(requestRaw), c.tx.ID(), logging.Base64(c.tx.TxID.Nonce))
276+
sigma, err := signer.Sign(party, requestRaw)
283277
if err != nil {
284278
return nil, err
285279
}
286-
logger.DebugfContext(ctx, "signature generated (external, me) [%s,%s,%s]", utils.Hashable(signatureRequest.MessageToSign()), utils.Hashable(sigma), party)
280+
logger.DebugfContext(ctx, "signature generated (external, me) [%s,%s,%s]", utils.Hashable(requestRaw), utils.Hashable(sigma), party)
287281
return sigma, nil
288282
}
289283

290-
func (c *CollectEndorsementsView) signRemote(context view.Context, party view.Identity, signatureRequest *SignatureRequest, verifierGetter verifierGetterFunc) ([]byte, error) {
284+
func (c *CollectEndorsementsView) signRemote(
285+
context view.Context,
286+
party view.Identity,
287+
signatureRequest *SignatureRequest,
288+
requestRaw []byte,
289+
verifierGetter verifierGetterFunc,
290+
) ([]byte, error) {
291291
session, err := context.GetSession(context.Initiator(), party)
292292
if err != nil {
293293
return nil, errors.Wrap(err, "failed getting session")
@@ -310,14 +310,14 @@ func (c *CollectEndorsementsView) signRemote(context view.Context, party view.Id
310310
if err != nil {
311311
return nil, errors.Wrapf(err, "failed getting verifier for [%s]", party)
312312
}
313-
logger.DebugfContext(context.Context(), "verify signature [%s][%s][%s] for txid [%s]", utils.Hashable(signatureRequest.MessageToSign()), utils.Hashable(sigma), party, c.tx.ID())
313+
logger.DebugfContext(context.Context(), "verify signature [%s][%s][%s] for txid [%s]", utils.Hashable(requestRaw), utils.Hashable(sigma), party, c.tx.ID())
314314

315-
err = verifier.Verify(signatureRequest.MessageToSign(), sigma)
315+
err = verifier.Verify(requestRaw, sigma)
316316
if err != nil {
317317
return nil, errors.Wrapf(err, "failed verifying signature [%s] from [%s]", sigma, party)
318318
}
319319

320-
logger.DebugfContext(context.Context(), "signature verified [%s,%s,%s]", utils.Hashable(signatureRequest.MessageToSign()), utils.Hashable(sigma), party)
320+
logger.DebugfContext(context.Context(), "signature verified [%s,%s,%s]", utils.Hashable(requestRaw), utils.Hashable(sigma), party)
321321

322322
return sigma, nil
323323
}
@@ -451,7 +451,12 @@ func (c *CollectEndorsementsView) distributeTxToParties(context view.Context, di
451451
return nil
452452
}
453453

454-
func (c *CollectEndorsementsView) distributeTxToParty(context view.Context, entry *distributionListEntry, txRaw []byte, owner *TxOwner) error {
454+
func (c *CollectEndorsementsView) distributeTxToParty(
455+
context view.Context,
456+
entry *distributionListEntry,
457+
txRaw []byte,
458+
owner *TxOwner,
459+
) error {
455460
// Open a session to the party. and send the transaction.
456461
session, err := c.getSession(context, entry.ID)
457462
if err != nil {
@@ -624,10 +629,6 @@ func (c *CollectEndorsementsView) prepareDistributionList(context view.Context,
624629
return distributionListCompressed, nil
625630
}
626631

627-
func (c *CollectEndorsementsView) requestBytes() ([]byte, error) {
628-
return c.tx.TokenRequest.MarshalToSign()
629-
}
630-
631632
func (c *CollectEndorsementsView) getSession(context view.Context, p view.Identity) (view.Session, error) {
632633
s, ok := c.sessions[p.UniqueID()]
633634
if ok {

token/services/ttx/endorse.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ func (s *EndorseView) handleSignatureRequests(context view.Context) error {
118118

119119
// check for the expected identity
120120
if !signatureRequest.Signer.Equal(signerIdentity) {
121-
return errors.Errorf(
121+
return errors.Wrapf(
122+
ErrSignerIdentityMismatch,
122123
"signature request's signer does not match the expected signer, [%s] != [%s], required signatures [%d]",
123124
signatureRequest.Signer,
124125
signerIdentity,
@@ -148,7 +149,7 @@ func (s *EndorseView) handleSignatureRequests(context view.Context) error {
148149
// receiveTransaction is used to intercept the last round of transaction distribution from CollectEndorsementsView.
149150
// Indeed, after having collected the auditor signatures, if needed, and the approval,
150151
// CollectEndorsementsView distributes the token request with the additional signatures.
151-
func (s *EndorseView) receiveTransaction(context view.Context) (*Transaction, error) {
152+
func (s *EndorseView) receiveTransaction(context view.Context) ([]byte, error) {
152153
logger.DebugfContext(context.Context(), "receive transaction...")
153154
tx, err := ReceiveTransaction(context)
154155
if err != nil {
@@ -167,23 +168,23 @@ func (s *EndorseView) receiveTransaction(context view.Context) (*Transaction, er
167168
if !bytes.Equal(m1, m2) {
168169
return nil, errors.Errorf("token request's signer does not match the expected signer")
169170
}
170-
return tx, nil
171+
return tx.FromRaw, nil
171172
}
172173

173-
func (s *EndorseView) ack(context view.Context, receivedTx *Transaction) error {
174+
func (s *EndorseView) ack(context view.Context, msg []byte) error {
174175
inSession := context.Session()
175176
// Send back an acknowledgement
176177
idProvider, err := dep.GetNetworkIdentityProvider(context)
177178
if err != nil {
178179
return errors.Wrapf(err, "failed getting identity provider")
179180
}
180181
defaultIdentity := idProvider.DefaultIdentity()
181-
logger.DebugfContext(context.Context(), "signing ack response [%s] with identity [%s]", utils.Hashable(receivedTx.FromRaw), defaultIdentity)
182+
logger.DebugfContext(context.Context(), "signing ack response [%s] with identity [%s]", utils.Hashable(msg), defaultIdentity)
182183
signer, err := idProvider.GetSigner(defaultIdentity)
183184
if err != nil {
184185
return errors.WithMessagef(err, "failed to get signer for default identity")
185186
}
186-
sigma, err := signer.Sign(receivedTx.FromRaw)
187+
sigma, err := signer.Sign(msg)
187188
if err != nil {
188189
return errors.WithMessagef(err, "failed to sign ack response")
189190
}

0 commit comments

Comments
 (0)