code: func New(opts NewOpts) (MSP, error) {
  	switch opts.(type) {
  	case *BCCSPNewOpts:
  		switch opts.GetVersion() {
  		case MSPv1_0:
  			return newBccspMsp(MSPv1_0)
  		case MSPv1_1:
  			return newBccspMsp(MSPv1_1)
  		case MSPv1_3:
  			return newBccspMsp(MSPv1_3)
  		default:
  			return nil, errors.Errorf("Invalid *BCCSPNewOpts. Version not recognized [%v]", opts.GetVersion())
  		}
  	case *IdemixNewOpts:
  		switch opts.GetVersion() {
  		case MSPv1_3:
  			return newIdemixMsp(MSPv1_3)
  		case MSPv1_1:
  			return newIdemixMsp(MSPv1_1)
  		default:
  			return nil, errors.Errorf("Invalid *IdemixNewOpts. Version not recognized [%v]", opts.GetVersion())
  		}
  	default:
  		return nil, errors.Errorf("Invalid msp.NewOpts instance. It must be either *BCCSPNewOpts or *IdemixNewOpts. It was [%v]", opts)
  	}
  }
docs: // New create a new MSP instance depending on the passed Opts