github.com/true-sqn/fabric@v2.1.1+incompatible/msp/factory.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package msp 8 9 import ( 10 "github.com/hyperledger/fabric/bccsp" 11 "github.com/pkg/errors" 12 ) 13 14 type MSPVersion int 15 16 const ( 17 MSPv1_0 = iota 18 MSPv1_1 19 MSPv1_3 20 MSPv1_4_3 21 ) 22 23 // NewOpts represent 24 type NewOpts interface { 25 // GetVersion returns the MSP's version to be instantiated 26 GetVersion() MSPVersion 27 } 28 29 // NewBaseOpts is the default base type for all MSP instantiation Opts 30 type NewBaseOpts struct { 31 Version MSPVersion 32 } 33 34 func (o *NewBaseOpts) GetVersion() MSPVersion { 35 return o.Version 36 } 37 38 // BCCSPNewOpts contains the options to instantiate a new BCCSP-based (X509) MSP 39 type BCCSPNewOpts struct { 40 NewBaseOpts 41 } 42 43 // IdemixNewOpts contains the options to instantiate a new Idemix-based MSP 44 type IdemixNewOpts struct { 45 NewBaseOpts 46 } 47 48 // New create a new MSP instance depending on the passed Opts 49 func New(opts NewOpts, cryptoProvider bccsp.BCCSP) (MSP, error) { 50 switch opts.(type) { 51 case *BCCSPNewOpts: 52 switch opts.GetVersion() { 53 case MSPv1_0: 54 return newBccspMsp(MSPv1_0, cryptoProvider) 55 case MSPv1_1: 56 return newBccspMsp(MSPv1_1, cryptoProvider) 57 case MSPv1_3: 58 return newBccspMsp(MSPv1_3, cryptoProvider) 59 case MSPv1_4_3: 60 return newBccspMsp(MSPv1_4_3, cryptoProvider) 61 default: 62 return nil, errors.Errorf("Invalid *BCCSPNewOpts. Version not recognized [%v]", opts.GetVersion()) 63 } 64 case *IdemixNewOpts: 65 switch opts.GetVersion() { 66 case MSPv1_4_3: 67 fallthrough 68 case MSPv1_3: 69 return newIdemixMsp(MSPv1_3) 70 case MSPv1_1: 71 return newIdemixMsp(MSPv1_1) 72 default: 73 return nil, errors.Errorf("Invalid *IdemixNewOpts. Version not recognized [%v]", opts.GetVersion()) 74 } 75 default: 76 return nil, errors.Errorf("Invalid msp.NewOpts instance. It must be either *BCCSPNewOpts or *IdemixNewOpts. It was [%v]", opts) 77 } 78 }