code: func newBccspMsp(version MSPVersion) (MSP, error) {
  	mspLogger.Debugf("Creating BCCSP-based MSP instance")
  
  	bccsp := factory.GetDefault()
  	theMsp := &bccspmsp{}
  	theMsp.version = version
  	theMsp.bccsp = bccsp
  	switch version {
  	case MSPv1_0:
  		theMsp.internalSetupFunc = theMsp.setupV1
  		theMsp.internalValidateIdentityOusFunc = theMsp.validateIdentityOUsV1
  		theMsp.internalSatisfiesPrincipalInternalFunc = theMsp.satisfiesPrincipalInternalPreV13
  	case MSPv1_1:
  		theMsp.internalSetupFunc = theMsp.setupV11
  		theMsp.internalValidateIdentityOusFunc = theMsp.validateIdentityOUsV11
  		theMsp.internalSatisfiesPrincipalInternalFunc = theMsp.satisfiesPrincipalInternalPreV13
  	case MSPv1_3:
  		theMsp.internalSetupFunc = theMsp.setupV11
  		theMsp.internalValidateIdentityOusFunc = theMsp.validateIdentityOUsV11
  		theMsp.internalSatisfiesPrincipalInternalFunc = theMsp.satisfiesPrincipalInternalV13
  	default:
  		return nil, errors.Errorf("Invalid MSP version [%v]", version)
  	}
  
  	return theMsp, nil
  }
docs: // newBccspMsp returns an MSP instance backed up by a BCCSP
  // crypto provider. It handles x.509 certificates and can
  // generate identities and signing identities backed by
  // certificates and keypairs