def verify_rsa_signature(signature, signature_scheme, public_key, data):
<EOL>securesystemslib.formats.PEMRSA_SCHEMA.check_match(public_key)<EOL>securesystemslib.formats.RSA_SCHEME_SCHEMA.check_match(signature_scheme)<EOL>securesystemslib.formats.PYCACRYPTOSIGNATURE_SCHEMA.check_match(signature)<EOL>securesystemslib.formats.DATA_SCHEMA.check_match(data)<EOL>valid_signature = False<EOL>try:<EOL><INDENT>public_key_object = serialization.load_pem_public_key(public_key.encode('<STR_LIT:utf-8>'),<EOL>backend=default_backend())<EOL>try:<EOL><INDENT>public_key_object.verify(signature, data,<EOL>padding.PSS(mgf=padding.MGF1(hashes.SHA256()),<EOL>salt_length=hashes.SHA256().digest_size),<EOL>hashes.SHA256())<EOL>return True<EOL><DEDENT>except cryptography.exceptions.InvalidSignature:<EOL><INDENT>return False<EOL><DEDENT><DEDENT>except (ValueError, cryptography.exceptions.UnsupportedAlgorithm) as e:<EOL><INDENT>raise securesystemslib.exceptions.CryptoError('<STR_LIT>'<EOL>'<STR_LIT>' + str(e))<EOL><DEDENT>
<Purpose>
  Determine whether the corresponding private key of 'public_key' produced
  'signature'.  verify_signature() will use the public key, signature scheme,
  and 'data' to complete the verification.

  >>> public, private = generate_rsa_public_and_private(2048)
  >>> data = b'The quick brown fox jumps over the lazy dog'
  >>> scheme = 'rsassa-pss-sha256'
  >>> signature, scheme = create_rsa_signature(private, data, scheme)
  >>> verify_rsa_signature(signature, scheme, public, data)
  True
  >>> verify_rsa_signature(signature, scheme, public, b'bad_data')
  False

<Arguments>
  signature:
    A signature, as a string.  This is the signature returned
    by create_rsa_signature().

  signature_scheme:
    A string that indicates the signature scheme used to generate
    'signature'.  'rsassa-pss-sha256' is currently supported.

  public_key:
    The RSA public key, a string in PEM format.

  data:
    Data used by securesystemslib.keys.create_signature() to generate
    'signature'.  'data' (a string) is needed here to verify 'signature'.

<Exceptions>
  securesystemslib.exceptions.FormatError, if 'signature',
  'signature_scheme', 'public_key', or 'data' are improperly formatted.

  securesystemslib.exceptions.UnsupportedAlgorithmError, if the signature
  scheme used by 'signature' is not one supported by
  securesystemslib.keys.create_signature().

  securesystemslib.exceptions.CryptoError, if the private key cannot be
  decoded or its key type is unsupported.

<Side Effects>
  pyca/cryptography's RSAPublicKey.verifier() called to do the actual
  verification.

 <Returns>
  Boolean.  True if the signature is valid, False otherwise.