@@ -9,7 +9,6 @@ package idemix
9
9
import (
10
10
"fmt"
11
11
12
- msp "github.com/IBM/idemix"
13
12
csp "github.com/IBM/idemix/bccsp/types"
14
13
math "github.com/IBM/mathlib"
15
14
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash"
@@ -24,43 +23,61 @@ type Deserializer struct {
24
23
}
25
24
26
25
// NewDeserializer returns a new deserializer for the idemix ExpectEidNymRhNym verification strategy
27
- func NewDeserializer (ipk []byte , curveID math.CurveID ) (* Deserializer , error ) {
26
+ func NewDeserializer (
27
+ sm SchemaManager ,
28
+ schema string ,
29
+ ipk []byte ,
30
+ curveID math.CurveID ,
31
+ ) (* Deserializer , error ) {
28
32
logger .Debugf ("new deserialized for dlog idemix" )
29
33
cryptoProvider , err := msp2 .NewBCCSPWithDummyKeyStore (curveID , curveID == math .BLS12_381_BBS )
30
34
if err != nil {
31
35
return nil , errors .WithMessagef (err , "failed to instantiate crypto provider for curve [%d]" , curveID )
32
36
}
33
- return NewDeserializerWithProvider (ipk , csp .ExpectEidNymRhNym , nil , cryptoProvider )
37
+ return NewDeserializerWithProvider (sm , schema , ipk , csp .ExpectEidNymRhNym , nil , cryptoProvider )
34
38
}
35
39
36
40
// NewDeserializerWithProvider returns a new serialized for the passed arguments
37
41
func NewDeserializerWithProvider (
42
+ sm SchemaManager ,
43
+ schema string ,
38
44
ipk []byte ,
39
45
verType csp.VerificationType ,
40
46
nymEID []byte ,
41
47
cryptoProvider csp.BCCSP ,
42
48
) (* Deserializer , error ) {
43
- return NewDeserializerWithBCCSP (ipk , verType , nymEID , cryptoProvider )
49
+ return NewDeserializerWithBCCSP (
50
+ sm ,
51
+ schema ,
52
+ ipk ,
53
+ verType ,
54
+ nymEID ,
55
+ cryptoProvider ,
56
+ )
44
57
}
45
58
46
- func NewDeserializerWithBCCSP (ipk []byte , verType csp.VerificationType , nymEID []byte , cryptoProvider csp.BCCSP ) (* Deserializer , error ) {
59
+ func NewDeserializerWithBCCSP (
60
+ sm SchemaManager ,
61
+ schema string ,
62
+ ipk []byte ,
63
+ verType csp.VerificationType ,
64
+ nymEID []byte ,
65
+ cryptoProvider csp.BCCSP ,
66
+ ) (* Deserializer , error ) {
47
67
logger .Debugf ("Setting up Idemix-based MSP instance" )
48
68
49
69
// Import Issuer Public Key
50
70
var issuerPublicKey csp.Key
51
- var err error
52
71
if len (ipk ) != 0 {
72
+ // get the opts from the schema manager
73
+ opts , err := sm .PublicKeyImportOpts (schema )
74
+ if err != nil {
75
+ return nil , errors .Wrapf (err , "could not obtain PublicKeyImportOpts for schema '%s'" , schema )
76
+ }
53
77
issuerPublicKey , err = cryptoProvider .KeyImport (
54
78
ipk ,
55
- & csp.IdemixIssuerPublicKeyImportOpts {
56
- Temporary : true ,
57
- AttributeNames : []string {
58
- msp .AttributeNameOU ,
59
- msp .AttributeNameRole ,
60
- msp .AttributeNameEnrollmentId ,
61
- msp .AttributeNameRevocationHandle ,
62
- },
63
- })
79
+ opts ,
80
+ )
64
81
if err != nil {
65
82
return nil , err
66
83
}
@@ -73,58 +90,64 @@ func NewDeserializerWithBCCSP(ipk []byte, verType csp.VerificationType, nymEID [
73
90
IssuerPublicKey : issuerPublicKey ,
74
91
VerType : verType ,
75
92
NymEID : nymEID ,
93
+ SchemaManager : sm ,
94
+ Schema : schema ,
76
95
},
77
96
}, nil
78
97
}
79
98
80
- func (i * Deserializer ) DeserializeVerifier (raw driver.Identity ) (driver.Verifier , error ) {
81
- identity , err := i .Deserialize (raw , true )
99
+ func (d * Deserializer ) DeserializeVerifier (raw driver.Identity ) (driver.Verifier , error ) {
100
+ identity , err := d .Deserialize (raw , true )
82
101
if err != nil {
83
102
return nil , err
84
103
}
85
104
86
105
return & msp2.NymSignatureVerifier {
87
- CSP : i .Deserializer .Csp ,
88
- IPK : i .Deserializer .IssuerPublicKey ,
89
- NymPK : identity .NymPublicKey ,
106
+ CSP : d .Deserializer .Csp ,
107
+ IPK : d .Deserializer .IssuerPublicKey ,
108
+ NymPK : identity .NymPublicKey ,
109
+ SchemaManager : d .SchemaManager ,
110
+ Schema : d .Schema ,
90
111
}, nil
91
112
}
92
113
93
- func (i * Deserializer ) DeserializeVerifierAgainstNymEID (raw []byte , nymEID []byte ) (driver.Verifier , error ) {
94
- identity , err := i .Deserializer .DeserializeAgainstNymEID (raw , true , nymEID )
114
+ func (d * Deserializer ) DeserializeVerifierAgainstNymEID (raw []byte , nymEID []byte ) (driver.Verifier , error ) {
115
+ identity , err := d .Deserializer .DeserializeAgainstNymEID (raw , true , nymEID )
95
116
if err != nil {
96
117
return nil , err
97
118
}
98
119
99
120
return & msp2.NymSignatureVerifier {
100
- CSP : i .Deserializer .Csp ,
101
- IPK : i .Deserializer .IssuerPublicKey ,
102
- NymPK : identity .NymPublicKey ,
121
+ CSP : d .Deserializer .Csp ,
122
+ IPK : d .Deserializer .IssuerPublicKey ,
123
+ NymPK : identity .NymPublicKey ,
124
+ SchemaManager : d .SchemaManager ,
125
+ Schema : d .Schema ,
103
126
}, nil
104
127
}
105
128
106
- func (i * Deserializer ) DeserializeSigner (raw []byte ) (driver.Signer , error ) {
129
+ func (d * Deserializer ) DeserializeSigner (raw []byte ) (driver.Signer , error ) {
107
130
return nil , errors .New ("not supported" )
108
131
}
109
132
110
- func (i * Deserializer ) DeserializeAuditInfo (raw []byte ) (driver2.AuditInfo , error ) {
111
- return i .Deserializer .DeserializeAuditInfo (raw )
133
+ func (d * Deserializer ) DeserializeAuditInfo (raw []byte ) (driver2.AuditInfo , error ) {
134
+ return d .Deserializer .DeserializeAuditInfo (raw )
112
135
}
113
136
114
- func (i * Deserializer ) GetOwnerMatcher (raw []byte ) (driver.Matcher , error ) {
115
- return i .Deserializer .DeserializeAuditInfo (raw )
137
+ func (d * Deserializer ) GetOwnerMatcher (raw []byte ) (driver.Matcher , error ) {
138
+ return d .Deserializer .DeserializeAuditInfo (raw )
116
139
}
117
140
118
- func (i * Deserializer ) GetOwnerAuditInfo (raw []byte , p driver.AuditInfoProvider ) ([][]byte , error ) {
141
+ func (d * Deserializer ) GetOwnerAuditInfo (raw []byte , p driver.AuditInfoProvider ) ([][]byte , error ) {
119
142
auditInfo , err := p .GetAuditInfo (raw )
120
143
if err != nil {
121
144
return nil , errors .Wrapf (err , "failed getting audit info for recipient identity [%s]" , driver .Identity (raw ).String ())
122
145
}
123
146
return [][]byte {auditInfo }, nil
124
147
}
125
148
126
- func (i * Deserializer ) Info (raw []byte , auditInfo []byte ) (string , error ) {
127
- r , err := i .Deserialize (raw , false )
149
+ func (d * Deserializer ) Info (raw []byte , auditInfo []byte ) (string , error ) {
150
+ r , err := d .Deserialize (raw , false )
128
151
if err != nil {
129
152
return "" , err
130
153
}
@@ -135,6 +158,8 @@ func (i *Deserializer) Info(raw []byte, auditInfo []byte) (string, error) {
135
158
if err != nil {
136
159
return "" , err
137
160
}
161
+ ai .SchemaManager = d .Deserializer .SchemaManager
162
+ ai .Schema = d .Deserializer .Schema
138
163
if err := ai .Match (raw ); err != nil {
139
164
return "" , err
140
165
}
@@ -144,8 +169,8 @@ func (i *Deserializer) Info(raw []byte, auditInfo []byte) (string, error) {
144
169
return fmt .Sprintf ("MSP.Idemix: [%s][%s][%s][%s][%s]" , eid , driver .Identity (raw ).UniqueID (), r .SerializedIdentity .Mspid , r .OU .OrganizationalUnitIdentifier , r .Role .Role .String ()), nil
145
170
}
146
171
147
- func (i * Deserializer ) String () string {
148
- return fmt .Sprintf ("Idemix with IPK [%s]" , hash .Hashable (i .Ipk ).String ())
172
+ func (d * Deserializer ) String () string {
173
+ return fmt .Sprintf ("Idemix with IPK [%s]" , hash .Hashable (d .Ipk ).String ())
149
174
}
150
175
151
176
type AuditInfoDeserializer struct {}
0 commit comments