code: func getStateDecryptAndVerify(stub shim.ChaincodeStubInterface, ent entities.EncrypterSignerEntity, key string) ([]byte, error) {
  	// here we retrieve and decrypt the state associated to key
  	val, err := getStateAndDecrypt(stub, ent, key)
  	if err != nil {
  		return nil, err
  	}
  
  	// we unmarshal a SignedMessage from the decrypted state
  	msg := &entities.SignedMessage{}
  	err = msg.FromBytes(val)
  	if err != nil {
  		return nil, err
  	}
  
  	// we verify the signature
  	ok, err := msg.Verify(ent)
  	if err != nil {
  		return nil, err
  	} else if !ok {
  		return nil, errors.New("invalid signature")
  	}
  
  	return msg.Payload, nil
  }
docs: // getStateDecryptAndVerify retrieves the value associated to key,
  // decrypts it with the supplied entity, verifies the signature
  // over it and returns the result of the decryption in case of
  // success