code: func (msp *bccspmsp) satisfiesPrincipalInternalV13(id Identity, principal *m.MSPPrincipal) error {
  	switch principal.PrincipalClassification {
  	case m.MSPPrincipal_COMBINED:
  		return errors.New("SatisfiesPrincipalInternal shall not be called with a CombinedPrincipal")
  	case m.MSPPrincipal_ANONYMITY:
  		anon := &m.MSPIdentityAnonymity{}
  		err := proto.Unmarshal(principal.Principal, anon)
  		if err != nil {
  			return errors.Wrap(err, "could not unmarshal MSPIdentityAnonymity from principal")
  		}
  		switch anon.AnonymityType {
  		case m.MSPIdentityAnonymity_ANONYMOUS:
  			return errors.New("Principal is anonymous, but X.509 MSP does not support anonymous identities")
  		case m.MSPIdentityAnonymity_NOMINAL:
  			return nil
  		default:
  			return errors.Errorf("Unknown principal anonymity type: %d", anon.AnonymityType)
  		}
  
  	default:
  		// Use the pre-v1.3 function to check other principal types
  		return msp.satisfiesPrincipalInternalPreV13(id, principal)
  	}
  }
docs: // satisfiesPrincipalInternalV13 takes as arguments the identity and the principal.
  // The function returns an error if one occurred.
  // The function implements the additional behavior expected of an MSP starting from v1.3.
  // For pre-v1.3 functionality, the function calls the satisfiesPrincipalInternalPreV13.