@@ -25,10 +25,10 @@ import (
25
25
26
26
"encoding/asn1"
27
27
28
+ "errors"
29
+
28
30
"github.com/hyperledger/fabric/core/crypto/bccsp"
29
- "github.com/hyperledger/fabric/core/crypto/bccsp/factory"
30
31
"github.com/hyperledger/fabric/core/crypto/bccsp/signer"
31
- "github.com/hyperledger/fabric/core/crypto/primitives"
32
32
)
33
33
34
34
type identity struct {
@@ -42,12 +42,12 @@ type identity struct {
42
42
pk bccsp.Key
43
43
44
44
// reference to the MSP that "owns" this identity
45
- myMsp MSP
45
+ msp * bccspmsp
46
46
}
47
47
48
- func newIdentity (id * IdentityIdentifier , cert * x509.Certificate , pk bccsp.Key , myMsp MSP ) Identity {
48
+ func newIdentity (id * IdentityIdentifier , cert * x509.Certificate , pk bccsp.Key , msp * bccspmsp ) Identity {
49
49
mspLogger .Infof ("Creating identity instance for ID %s" , id )
50
- return & identity {id : id , cert : cert , pk : pk , myMsp : myMsp }
50
+ return & identity {id : id , cert : cert , pk : pk , msp : msp }
51
51
}
52
52
53
53
// GetIdentifier returns the identifier (MSPID/IDID) for this instance
@@ -62,7 +62,7 @@ func (id *identity) GetMSPIdentifier() string {
62
62
63
63
// IsValid returns nil if this instance is a valid identity or an error otherwise
64
64
func (id * identity ) IsValid () error {
65
- return id .myMsp .Validate (id )
65
+ return id .msp .Validate (id )
66
66
}
67
67
68
68
// GetOrganizationUnits returns the OU for this instance
@@ -76,21 +76,22 @@ func (id *identity) GetOrganizationUnits() string {
76
76
// signature; it returns nil if so or an error otherwise
77
77
func (id * identity ) Verify (msg []byte , sig []byte ) error {
78
78
mspLogger .Infof ("Verifying signature" )
79
- bccsp , err := factory .GetDefault ()
79
+
80
+ // Compute Hash
81
+ digest , err := id .msp .bccsp .Hash (msg , & bccsp.SHAOpts {})
80
82
if err != nil {
81
- return fmt .Errorf ("Failed getting default BCCSP [%s]" , err )
82
- } else if bccsp == nil {
83
- return fmt .Errorf ("Failed getting default BCCSP. Nil instance." )
83
+ return fmt .Errorf ("Failed computing digest [%s]" , err )
84
84
}
85
85
86
- valid , err := bccsp .Verify (id .pk , sig , primitives .Hash (msg ), nil )
86
+ // Verify signature
87
+ valid , err := id .msp .bccsp .Verify (id .pk , sig , digest , nil )
87
88
if err != nil {
88
89
return fmt .Errorf ("Could not determine the validity of the signature, err %s" , err )
89
90
} else if ! valid {
90
- return fmt .Errorf ("The signature is invalid" )
91
- } else {
92
- return nil
91
+ return errors .New ("The signature is invalid" )
93
92
}
93
+
94
+ return nil
94
95
}
95
96
96
97
func (id * identity ) VerifyOpts (msg []byte , sig []byte , opts SignatureOpts ) error {
@@ -131,15 +132,23 @@ type signingidentity struct {
131
132
signer * signer.CryptoSigner
132
133
}
133
134
134
- func newSigningIdentity (id * IdentityIdentifier , cert * x509.Certificate , pk bccsp.Key , signer * signer.CryptoSigner , myMsp MSP ) SigningIdentity {
135
+ func newSigningIdentity (id * IdentityIdentifier , cert * x509.Certificate , pk bccsp.Key , signer * signer.CryptoSigner , msp * bccspmsp ) SigningIdentity {
135
136
mspLogger .Infof ("Creating signing identity instance for ID %s" , id )
136
- return & signingidentity {identity {id : id , cert : cert , pk : pk , myMsp : myMsp }, signer }
137
+ return & signingidentity {identity {id : id , cert : cert , pk : pk , msp : msp }, signer }
137
138
}
138
139
139
140
// Sign produces a signature over msg, signed by this instance
140
141
func (id * signingidentity ) Sign (msg []byte ) ([]byte , error ) {
141
142
mspLogger .Infof ("Signing message" )
142
- return id .signer .Sign (rand .Reader , primitives .Hash (msg ), nil )
143
+
144
+ // Compute Hash
145
+ digest , err := id .msp .bccsp .Hash (msg , & bccsp.SHAOpts {})
146
+ if err != nil {
147
+ return nil , fmt .Errorf ("Failed computing digest [%s]" , err )
148
+ }
149
+
150
+ // Sign
151
+ return id .signer .Sign (rand .Reader , digest , nil )
143
152
}
144
153
145
154
func (id * signingidentity ) SignOpts (msg []byte , opts SignatureOpts ) ([]byte , error ) {
0 commit comments