code: func (p *policyChecker) CheckPolicyBySignedData(channelID, policyName string, sd []*common.SignedData) error {
  	if channelID == "" {
  		return errors.New("Invalid channel ID name during check policy on signed data. Name must be different from nil.")
  	}
  
  	if policyName == "" {
  		return fmt.Errorf("Invalid policy name during check policy on signed data on channel [%s]. Name must be different from nil.", channelID)
  	}
  
  	if sd == nil {
  		return fmt.Errorf("Invalid signed data during check policy on channel [%s] with policy [%s]", channelID, policyName)
  	}
  
  	// Get Policy
  	policyManager, _ := p.channelPolicyManagerGetter.Manager(channelID)
  	if policyManager == nil {
  		return fmt.Errorf("Failed to get policy manager for channel [%s]", channelID)
  	}
  
  	// Recall that get policy always returns a policy object
  	policy, _ := policyManager.GetPolicy(policyName)
  
  	// Evaluate the policy
  	err := policy.Evaluate(sd)
  	if err != nil {
  		return fmt.Errorf("Failed evaluating policy on signed data during check policy on channel [%s] with policy [%s]: [%s]", channelID, policyName, err)
  	}
  
  	return nil
  }
docs: // CheckPolicyBySignedData checks that the passed signed data is valid with the respect to
  // passed policy on the passed channel.