Skip to content

Commit cdc3cc8

Browse files
committed
cleanup deserializer
Signed-off-by: Angelo De Caro <[email protected]>
1 parent 5dfca5f commit cdc3cc8

File tree

8 files changed

+75
-113
lines changed

8 files changed

+75
-113
lines changed

Diff for: integration/ports.go

+5
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ var (
4343
CommType: fsc.WebSocket,
4444
ReplicationFactor: token.None,
4545
}
46+
WebSocketWithReplication = &InfrastructureType{
47+
Label: ginkgo.Label("replicas"),
48+
CommType: fsc.WebSocket,
49+
ReplicationFactor: 3,
50+
}
4651
LibP2PNoReplication = &InfrastructureType{
4752
Label: ginkgo.Label("libp2p"),
4853
CommType: fsc.LibP2P,

Diff for: token/core/zkatdlog/crypto/audit/auditor_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ var _ = Describe("Auditor", func() {
5050
Expect(err).NotTo(HaveOccurred())
5151
pp, err = crypto.Setup(32, ipk, math.FP256BN_AMCL)
5252
Expect(err).NotTo(HaveOccurred())
53-
des, err := idemix.NewDeserializer(&schema.DefaultManager{}, "", pp.IdemixIssuerPK, math.FP256BN_AMCL)
53+
des, err := idemix.NewEidNymRhNymDeserializer(&schema.DefaultManager{}, "", pp.IdemixIssuerPK, math.FP256BN_AMCL)
5454
Expect(err).NotTo(HaveOccurred())
5555
auditor = audit.NewAuditor(logging.MustGetLogger("auditor"), des, pp.PedersenGenerators, nil, fakeSigningIdentity, math.Curves[pp.Curve])
5656
fakeSigningIdentity.SignReturns([]byte("auditor-signature"), nil)

Diff for: token/core/zkatdlog/crypto/validator/validator_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ var _ = Describe("validator", func() {
7373
c := math.Curves[pp.Curve]
7474

7575
asigner, _ := prepareECDSASigner()
76-
des, err := idemix.NewDeserializer(&schema.DefaultManager{}, "", pp.IdemixIssuerPK, math.FP256BN_AMCL)
76+
des, err := idemix.NewEidNymRhNymDeserializer(&schema.DefaultManager{}, "", pp.IdemixIssuerPK, math.FP256BN_AMCL)
7777
Expect(err).NotTo(HaveOccurred())
7878
auditor = audit.NewAuditor(logging.MustGetLogger("auditor"), des, pp.PedersenGenerators, pp.IdemixIssuerPK, asigner, c)
7979
araw, err := asigner.Serialize()

Diff for: token/core/zkatdlog/nogh/driver/deserializer.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ func NewDeserializer(pp *crypto.PublicParams) (*Deserializer, error) {
3030
if pp == nil {
3131
return nil, errors.New("failed to get deserializer: nil public parameters")
3232
}
33-
idemixDes, err := idemix.NewDeserializer(&schema.DefaultManager{}, "", pp.IdemixIssuerPK, pp.IdemixCurveID)
33+
idemixDes, err := idemix.NewEidNymRhNymDeserializer(
34+
&schema.DefaultManager{},
35+
"",
36+
pp.IdemixIssuerPK,
37+
pp.IdemixCurveID,
38+
)
3439
if err != nil {
3540
return nil, errors.Wrapf(err, "failed getting idemix deserializer for passed public params [%d]", pp.IdemixCurveID)
3641
}

Diff for: token/services/identity/msp/idemix/deserializer.go

+31-82
Original file line numberDiff line numberDiff line change
@@ -22,41 +22,24 @@ type Deserializer struct {
2222
*msp2.Deserializer
2323
}
2424

25-
// NewDeserializer returns a new deserializer for the idemix ExpectEidNymRhNym verification strategy
26-
func NewDeserializer(
25+
// NewEidNymRhNymDeserializer returns a new deserializer that expects EID and RH Nyms identities.
26+
// The returned deserializer checks the validly of the deserialized identities.
27+
func NewEidNymRhNymDeserializer(
2728
sm SchemaManager,
2829
schema string,
2930
ipk []byte,
3031
curveID math.CurveID,
3132
) (*Deserializer, error) {
32-
logger.Debugf("new deserialized for dlog idemix")
3333
cryptoProvider, err := msp2.NewBCCSPWithDummyKeyStore(curveID, curveID == math.BLS12_381_BBS)
3434
if err != nil {
3535
return nil, errors.WithMessagef(err, "failed to instantiate crypto provider for curve [%d]", curveID)
3636
}
37-
return NewDeserializerWithProvider(sm, schema, ipk, csp.ExpectEidNymRhNym, nil, cryptoProvider)
37+
return NewDeserializer(sm, schema, ipk, csp.ExpectEidNymRhNym, nil, cryptoProvider)
3838
}
3939

40-
// NewDeserializerWithProvider returns a new serialized for the passed arguments
41-
func NewDeserializerWithProvider(
42-
sm SchemaManager,
43-
schema string,
44-
ipk []byte,
45-
verType csp.VerificationType,
46-
nymEID []byte,
47-
cryptoProvider csp.BCCSP,
48-
) (*Deserializer, error) {
49-
return NewDeserializerWithBCCSP(
50-
sm,
51-
schema,
52-
ipk,
53-
verType,
54-
nymEID,
55-
cryptoProvider,
56-
)
57-
}
58-
59-
func NewDeserializerWithBCCSP(
40+
// NewDeserializer returns a new deserializer for the passed arguments.
41+
// The returned deserializer checks the validly of the deserialized identities.
42+
func NewDeserializer(
6043
sm SchemaManager,
6144
schema string,
6245
ipk []byte,
@@ -67,20 +50,21 @@ func NewDeserializerWithBCCSP(
6750
logger.Debugf("Setting up Idemix-based MSP instance")
6851

6952
// Import Issuer Public Key
53+
if len(ipk) == 0 {
54+
return nil, errors.Errorf("no issuer public key provided")
55+
}
7056
var issuerPublicKey csp.Key
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-
}
77-
issuerPublicKey, err = cryptoProvider.KeyImport(
78-
ipk,
79-
opts,
80-
)
81-
if err != nil {
82-
return nil, err
83-
}
57+
// get the opts from the schema manager
58+
opts, err := sm.PublicKeyImportOpts(schema)
59+
if err != nil {
60+
return nil, errors.Wrapf(err, "could not obtain PublicKeyImportOpts for schema '%s'", schema)
61+
}
62+
issuerPublicKey, err = cryptoProvider.KeyImport(
63+
ipk,
64+
opts,
65+
)
66+
if err != nil {
67+
return nil, err
8468
}
8569

8670
return &Deserializer{
@@ -97,7 +81,7 @@ func NewDeserializerWithBCCSP(
9781
}
9882

9983
func (d *Deserializer) DeserializeVerifier(raw driver.Identity) (driver.Verifier, error) {
100-
identity, err := d.Deserialize(raw, true)
84+
identity, err := d.Deserialize(raw)
10185
if err != nil {
10286
return nil, err
10387
}
@@ -111,8 +95,16 @@ func (d *Deserializer) DeserializeVerifier(raw driver.Identity) (driver.Verifier
11195
}, nil
11296
}
11397

98+
func (d *Deserializer) DeserializeAuditInfo(raw []byte) (driver2.AuditInfo, error) {
99+
return d.Deserializer.DeserializeAuditInfo(raw)
100+
}
101+
102+
func (d *Deserializer) GetOwnerMatcher(raw []byte) (driver.Matcher, error) {
103+
return d.Deserializer.DeserializeAuditInfo(raw)
104+
}
105+
114106
func (d *Deserializer) DeserializeVerifierAgainstNymEID(raw []byte, nymEID []byte) (driver.Verifier, error) {
115-
identity, err := d.Deserializer.DeserializeAgainstNymEID(raw, true, nymEID)
107+
identity, err := d.Deserializer.DeserializeAgainstNymEID(raw, nymEID)
116108
if err != nil {
117109
return nil, err
118110
}
@@ -126,49 +118,6 @@ func (d *Deserializer) DeserializeVerifierAgainstNymEID(raw []byte, nymEID []byt
126118
}, nil
127119
}
128120

129-
func (d *Deserializer) DeserializeSigner(raw []byte) (driver.Signer, error) {
130-
return nil, errors.New("not supported")
131-
}
132-
133-
func (d *Deserializer) DeserializeAuditInfo(raw []byte) (driver2.AuditInfo, error) {
134-
return d.Deserializer.DeserializeAuditInfo(raw)
135-
}
136-
137-
func (d *Deserializer) GetOwnerMatcher(raw []byte) (driver.Matcher, error) {
138-
return d.Deserializer.DeserializeAuditInfo(raw)
139-
}
140-
141-
func (d *Deserializer) GetOwnerAuditInfo(raw []byte, p driver.AuditInfoProvider) ([][]byte, error) {
142-
auditInfo, err := p.GetAuditInfo(raw)
143-
if err != nil {
144-
return nil, errors.Wrapf(err, "failed getting audit info for recipient identity [%s]", driver.Identity(raw).String())
145-
}
146-
return [][]byte{auditInfo}, nil
147-
}
148-
149-
func (d *Deserializer) Info(raw []byte, auditInfo []byte) (string, error) {
150-
r, err := d.Deserialize(raw, false)
151-
if err != nil {
152-
return "", err
153-
}
154-
155-
eid := ""
156-
if len(auditInfo) != 0 {
157-
ai, err := msp2.DeserializeAuditInfo(auditInfo)
158-
if err != nil {
159-
return "", err
160-
}
161-
ai.SchemaManager = d.Deserializer.SchemaManager
162-
ai.Schema = d.Deserializer.Schema
163-
if err := ai.Match(raw); err != nil {
164-
return "", err
165-
}
166-
eid = ai.EnrollmentID()
167-
}
168-
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
170-
}
171-
172121
func (d *Deserializer) String() string {
173122
return fmt.Sprintf("Idemix with IPK [%s]", hash.Hashable(d.Ipk).String())
174123
}

Diff for: token/services/identity/msp/idemix/msp/deserializer.go

+10-7
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ type Deserializer struct {
3636
Schema string
3737
}
3838

39-
func (d *Deserializer) Deserialize(raw []byte, checkValidity bool) (*DeserializedIdentity, error) {
40-
return d.DeserializeAgainstNymEID(raw, checkValidity, nil)
39+
func (d *Deserializer) Deserialize(raw []byte) (*DeserializedIdentity, error) {
40+
return d.DeserializeAgainstNymEID(raw, nil)
4141
}
4242

43-
func (d *Deserializer) DeserializeAgainstNymEID(raw []byte, checkValidity bool, nymEID []byte) (*DeserializedIdentity, error) {
43+
func (d *Deserializer) DeserializeAgainstNymEID(raw []byte, nymEID []byte) (*DeserializedIdentity, error) {
4444
si := &m.SerializedIdentity{}
4545
err := proto.Unmarshal(raw, si)
4646
if err != nil {
@@ -56,6 +56,11 @@ func (d *Deserializer) DeserializeAgainstNymEID(raw []byte, checkValidity bool,
5656
return nil, errors.Errorf("unable to deserialize idemix identity: pseudonym is invalid")
5757
}
5858

59+
// match schema
60+
if serialized.Schema != d.Schema {
61+
return nil, errors.Errorf("unable to deserialize idemix identity: schema does not match [%s]!=[%s]", serialized.Schema, d.Schema)
62+
}
63+
5964
// Import NymPublicKey
6065
var rawNymPublicKey []byte
6166
rawNymPublicKey = append(rawNymPublicKey, serialized.NymX...)
@@ -110,10 +115,8 @@ func (d *Deserializer) DeserializeAgainstNymEID(raw []byte, checkValidity bool,
110115
if err != nil {
111116
return nil, errors.Wrap(err, "cannot deserialize")
112117
}
113-
if checkValidity {
114-
if err := id.Validate(); err != nil {
115-
return nil, errors.Wrap(err, "cannot deserialize, invalid identity")
116-
}
118+
if err := id.Validate(); err != nil {
119+
return nil, errors.Wrap(err, "cannot deserialize, invalid identity")
117120
}
118121

119122
return &DeserializedIdentity{

Diff for: token/services/identity/msp/idemix/msp/id.go

+18-18
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ type SchemaManager interface {
4444

4545
type Identity struct {
4646
NymPublicKey bccsp.Key
47-
Idemix *Deserializer
47+
Deserializer *Deserializer
4848
ID *msp.IdentityIdentifier
4949
Role *m.MSPRole
5050
OU *m.OrganizationUnit
@@ -59,7 +59,7 @@ type Identity struct {
5959
}
6060

6161
func NewIdentity(
62-
idemix *Deserializer,
62+
deserializer *Deserializer,
6363
NymPublicKey bccsp.Key,
6464
role *m.MSPRole,
6565
ou *m.OrganizationUnit,
@@ -69,7 +69,7 @@ func NewIdentity(
6969
Schema string,
7070
) (*Identity, error) {
7171
id := &Identity{}
72-
id.Idemix = idemix
72+
id.Deserializer = deserializer
7373
id.NymPublicKey = NymPublicKey
7474
id.Role = role
7575
id.OU = ou
@@ -83,7 +83,7 @@ func NewIdentity(
8383
return nil, errors.Wrapf(err, "failed to marshal nym public key")
8484
}
8585
id.ID = &msp.IdentityIdentifier{
86-
Mspid: idemix.Name,
86+
Mspid: deserializer.Name,
8787
Id: bytes.NewBuffer(raw).String(),
8888
}
8989

@@ -105,12 +105,12 @@ func (id *Identity) GetIdentifier() *msp.IdentityIdentifier {
105105
}
106106

107107
func (id *Identity) GetMSPIdentifier() string {
108-
return id.Idemix.Name
108+
return id.Deserializer.Name
109109
}
110110

111111
func (id *Identity) GetOrganizationalUnits() []*msp.OUIdentifier {
112112
// we use the (serialized) public key of this MSP as the CertifiersIdentifier
113-
certifiersIdentifier, err := id.Idemix.IssuerPublicKey.Bytes()
113+
certifiersIdentifier, err := id.Deserializer.IssuerPublicKey.Bytes()
114114
if err != nil {
115115
logger.Errorf("Failed to marshal ipk in GetOrganizationalUnits: %s", err)
116116
return nil
@@ -121,7 +121,7 @@ func (id *Identity) GetOrganizationalUnits() []*msp.OUIdentifier {
121121

122122
func (id *Identity) Validate() error {
123123
// logger.Debugf("Validating identity %+v", id)
124-
if id.GetMSPIdentifier() != id.Idemix.Name {
124+
if id.GetMSPIdentifier() != id.Deserializer.Name {
125125
return errors.Errorf("the supplied identity does not belong to this msp")
126126
}
127127
return id.verifyProof()
@@ -132,9 +132,9 @@ func (id *Identity) Verify(msg []byte, sig []byte) error {
132132
if err != nil {
133133
return err
134134
}
135-
opts.IssuerPK = id.Idemix.IssuerPublicKey
135+
opts.IssuerPK = id.Deserializer.IssuerPublicKey
136136

137-
_, err = id.Idemix.Csp.Verify(
137+
_, err = id.Deserializer.Csp.Verify(
138138
id.NymPublicKey,
139139
sig,
140140
msg,
@@ -189,24 +189,24 @@ func (id *Identity) Serialize() ([]byte, error) {
189189
func (id *Identity) verifyProof() error {
190190
// Verify signature
191191
var metadata *bccsp.IdemixSignerMetadata
192-
if len(id.Idemix.NymEID) != 0 {
192+
if len(id.Deserializer.NymEID) != 0 {
193193
metadata = &bccsp.IdemixSignerMetadata{
194-
EidNym: id.Idemix.NymEID,
195-
RhNym: id.Idemix.RhNym,
194+
EidNym: id.Deserializer.NymEID,
195+
RhNym: id.Deserializer.RhNym,
196196
}
197197
}
198198

199199
opts, err := id.SchemaManager.SignerOpts(id.Schema, id.OU, id.Role)
200200
if err != nil {
201201
return errors.Wrapf(err, "could obtain signer opts for schema '%s'", id.Schema)
202202
}
203-
opts.Epoch = id.Idemix.Epoch
203+
opts.Epoch = id.Deserializer.Epoch
204204
opts.VerificationType = id.VerificationType
205205
opts.Metadata = metadata
206-
opts.RevocationPublicKey = id.Idemix.RevocationPK
206+
opts.RevocationPublicKey = id.Deserializer.RevocationPK
207207

208-
valid, err := id.Idemix.Csp.Verify(
209-
id.Idemix.IssuerPublicKey,
208+
valid, err := id.Deserializer.Csp.Verify(
209+
id.Deserializer.IssuerPublicKey,
210210
id.AssociationProof,
211211
nil,
212212
opts,
@@ -233,9 +233,9 @@ func (id *SigningIdentity) Sign(msg []byte) ([]byte, error) {
233233
return nil, err
234234
}
235235
opts.Nym = id.NymKey
236-
opts.IssuerPK = id.Idemix.IssuerPublicKey
236+
opts.IssuerPK = id.Deserializer.IssuerPublicKey
237237

238-
sig, err := id.Idemix.Csp.Sign(
238+
sig, err := id.Deserializer.Csp.Sign(
239239
id.UserKey,
240240
msg,
241241
opts,

Diff for: token/services/identity/msp/idemix/provider.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ func (p *Provider) IsRemote() bool {
323323
}
324324

325325
func (p *Provider) DeserializeVerifier(raw []byte) (driver.Verifier, error) {
326-
r, err := p.Deserialize(raw, true)
326+
r, err := p.Deserialize(raw)
327327
if err != nil {
328328
return nil, err
329329
}
@@ -332,7 +332,7 @@ func (p *Provider) DeserializeVerifier(raw []byte) (driver.Verifier, error) {
332332
}
333333

334334
func (p *Provider) DeserializeSigner(raw []byte) (driver.Signer, error) {
335-
r, err := p.Deserialize(raw, true)
335+
r, err := p.Deserialize(raw)
336336
if err != nil {
337337
return nil, err
338338
}
@@ -361,7 +361,7 @@ func (p *Provider) DeserializeSigner(raw []byte) (driver.Signer, error) {
361361
}
362362

363363
func (p *Provider) Info(raw []byte, auditInfo []byte) (string, error) {
364-
r, err := p.Deserialize(raw, true)
364+
r, err := p.Deserialize(raw)
365365
if err != nil {
366366
return "", err
367367
}

0 commit comments

Comments
 (0)