Skip to content

Commit a9e91b4

Browse files
author
Manu Drijvers
committed
[FAB-7615] hide anon+combined principals pre v1_3
This CR makes sure that anonymity and combined principals are only supported when the MSP version is > MSPv1_1. Change-Id: I27e67107b65e858e636f6d462a804b810056a6cc Signed-off-by: Manu Drijvers <mdr@zurich.ibm.com>
1 parent e310be3 commit a9e91b4

File tree

3 files changed

+79
-6
lines changed

3 files changed

+79
-6
lines changed

msp/factory.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ func New(opts NewOpts) (MSP, error) {
6060
case *IdemixNewOpts:
6161
switch opts.GetVersion() {
6262
case MSPv1_3:
63-
fallthrough
63+
return newIdemixMsp(MSPv1_3)
6464
case MSPv1_1:
65-
return newIdemixMsp()
65+
return newIdemixMsp(MSPv1_1)
6666
default:
6767
return nil, errors.Errorf("Invalid *IdemixNewOpts. Version not recognized [%v]", opts.GetVersion())
6868
}

msp/idemixmsp.go

+12-2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ const rhIndex = 3
6161
var discloseFlags = []byte{1, 1, 0, 0}
6262

6363
type idemixmsp struct {
64+
version MSPVersion
6465
ipk *idemix.IssuerPublicKey
6566
rng *amcl.RAND
6667
signer *idemixSigningIdentity
@@ -70,10 +71,11 @@ type idemixmsp struct {
7071
}
7172

7273
// newIdemixMsp creates a new instance of idemixmsp
73-
func newIdemixMsp() (MSP, error) {
74+
func newIdemixMsp(version MSPVersion) (MSP, error) {
7475
mspLogger.Debugf("Creating Idemix-based MSP instance")
7576

7677
msp := idemixmsp{}
78+
msp.version = version
7779
return &msp, nil
7880
}
7981

@@ -215,7 +217,7 @@ func (msp *idemixmsp) Setup(conf1 *m.MSPConfig) error {
215217

216218
// GetVersion returns the version of this MSP
217219
func (msp *idemixmsp) GetVersion() MSPVersion {
218-
return MSPv1_1
220+
return msp.version
219221
}
220222

221223
func (msp *idemixmsp) GetType() ProviderType {
@@ -392,6 +394,10 @@ func (msp *idemixmsp) satisfiesPrincipalValidated(id Identity, principal *m.MSPP
392394

393395
return nil
394396
case m.MSPPrincipal_COMBINED:
397+
if msp.version <= MSPv1_1 {
398+
return errors.Errorf("Combined MSP Principals are unsupported in MSPv1_1")
399+
}
400+
395401
// Principal is a combination of multiple principals.
396402
principals := &m.CombinedPrincipal{}
397403
err := proto.Unmarshal(principal.Principal, principals)
@@ -413,6 +419,10 @@ func (msp *idemixmsp) satisfiesPrincipalValidated(id Identity, principal *m.MSPP
413419
// The identity satisfies all the principals
414420
return nil
415421
case m.MSPPrincipal_ANONYMITY:
422+
if msp.version <= MSPv1_1 {
423+
return errors.Errorf("Anonymity MSP Principals are unsupported in MSPv1_1")
424+
}
425+
416426
anon := &m.MSPIdentityAnonymity{}
417427
err := proto.Unmarshal(principal.Principal, anon)
418428
if err != nil {

msp/idemixmsp_test.go

+65-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ import (
1717
)
1818

1919
func setup(configPath string, ID string) (MSP, error) {
20-
msp, err := newIdemixMsp()
20+
return setupWithVersion(configPath, ID, MSPv1_3)
21+
}
22+
23+
func setupWithVersion(configPath string, ID string, version MSPVersion) (MSP, error) {
24+
msp, err := newIdemixMsp(version)
2125
if err != nil {
2226
return nil, err
2327
}
@@ -65,7 +69,7 @@ func TestSetupBad(t *testing.T) {
6569
assert.Error(t, err)
6670
assert.Contains(t, err.Error(), "Getting MSP config failed")
6771

68-
msp1, err := newIdemixMsp()
72+
msp1, err := newIdemixMsp(MSPv1_3)
6973
assert.NoError(t, err)
7074

7175
// Setup with nil config
@@ -306,6 +310,25 @@ func TestAnonymityPrincipalBad(t *testing.T) {
306310
assert.Contains(t, err.Error(), "principal is nominal, but idemix MSP is anonymous")
307311
}
308312

313+
func TestAnonymityPrincipalV11(t *testing.T) {
314+
msp1, err := setupWithVersion("testdata/idemix/MSP1OU1", "MSP1OU1", MSPv1_1)
315+
assert.NoError(t, err)
316+
317+
id1, err := getDefaultSigner(msp1)
318+
assert.NoError(t, err)
319+
320+
principalBytes, err := proto.Marshal(&msp.MSPIdentityAnonymity{AnonymityType: msp.MSPIdentityAnonymity_NOMINAL})
321+
assert.NoError(t, err)
322+
323+
principal := &msp.MSPPrincipal{
324+
PrincipalClassification: msp.MSPPrincipal_ANONYMITY,
325+
Principal: principalBytes}
326+
327+
err = id1.SatisfiesPrincipal(principal)
328+
assert.Error(t, err)
329+
assert.Contains(t, err.Error(), "Anonymity MSP Principals are unsupported in MSPv1_1")
330+
}
331+
309332
func TestIdemixIsWellFormed(t *testing.T) {
310333
idemixMSP, err := setup("testdata/idemix/MSP1OU1", "TestName")
311334
assert.NoError(t, err)
@@ -618,3 +641,43 @@ func TestPrincipalCombinedBad(t *testing.T) {
618641
assert.Error(t, err, "non-admin member of OU1 in MSP1 should not satisfy principal admin and OU1 in MSP1")
619642
assert.Contains(t, err.Error(), "user is not an admin")
620643
}
644+
645+
func TestPrincipalCombinedV11(t *testing.T) {
646+
msp1, err := setupWithVersion("testdata/idemix/MSP1OU1", "MSP1OU1", MSPv1_1)
647+
assert.NoError(t, err)
648+
649+
id1, err := getDefaultSigner(msp1)
650+
assert.NoError(t, err)
651+
652+
ou := &msp.OrganizationUnit{
653+
OrganizationalUnitIdentifier: id1.GetOrganizationalUnits()[0].OrganizationalUnitIdentifier,
654+
MspIdentifier: id1.GetMSPIdentifier(),
655+
CertifiersIdentifier: nil,
656+
}
657+
principalBytes, err := proto.Marshal(ou)
658+
assert.NoError(t, err)
659+
660+
principalOU := &msp.MSPPrincipal{
661+
PrincipalClassification: msp.MSPPrincipal_ORGANIZATION_UNIT,
662+
Principal: principalBytes}
663+
664+
principalBytes, err = proto.Marshal(&msp.MSPRole{Role: msp.MSPRole_MEMBER, MspIdentifier: id1.GetMSPIdentifier()})
665+
assert.NoError(t, err)
666+
667+
principalRole := &msp.MSPPrincipal{
668+
PrincipalClassification: msp.MSPPrincipal_ROLE,
669+
Principal: principalBytes}
670+
671+
principals := []*msp.MSPPrincipal{principalOU, principalRole}
672+
673+
combinedPrincipal := &msp.CombinedPrincipal{Principals: principals}
674+
combinedPrincipalBytes, err := proto.Marshal(combinedPrincipal)
675+
676+
assert.NoError(t, err)
677+
678+
principalsCombined := &msp.MSPPrincipal{PrincipalClassification: msp.MSPPrincipal_COMBINED, Principal: combinedPrincipalBytes}
679+
680+
err = id1.SatisfiesPrincipal(principalsCombined)
681+
assert.Error(t, err)
682+
assert.Contains(t, err.Error(), "Combined MSP Principals are unsupported in MSPv1_1")
683+
}

0 commit comments

Comments
 (0)