code: func checkSignatureFromCreator(creatorBytes []byte, sig []byte, msg []byte, ChainID string) error {
  	putilsLogger.Debugf("begin")
  
  	// check for nil argument
  	if creatorBytes == nil || sig == nil || msg == nil {
  		return errors.New("nil arguments")
  	}
  
  	mspObj := mspmgmt.GetIdentityDeserializer(ChainID)
  	if mspObj == nil {
  		return errors.Errorf("could not get msp for channel [%s]", ChainID)
  	}
  
  	// get the identity of the creator
  	creator, err := mspObj.DeserializeIdentity(creatorBytes)
  	if err != nil {
  		return errors.WithMessage(err, "MSP error")
  	}
  
  	putilsLogger.Debugf("creator is %s", creator.GetIdentifier())
  
  	// ensure that creator is a valid certificate
  	err = creator.Validate()
  	if err != nil {
  		return errors.WithMessage(err, "creator certificate is not valid")
  	}
  
  	putilsLogger.Debugf("creator is valid")
  
  	// validate the signature
  	err = creator.Verify(msg, sig)
  	if err != nil {
  		return errors.WithMessage(err, "creator's signature over the proposal is not valid")
  	}
  
  	putilsLogger.Debugf("exits successfully")
  
  	return nil
  }
docs: // given a creator, a message and a signature,
  // this function returns nil if the creator
  // is a valid cert and the signature is valid