github.com/yimialmonte/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  }