# webhooks-public-keys pydantic_v2.BaseModel
  import <package> loads []
  import <package>.protocols loads []
  import <package>.errors loads []
  import <package>.options loads []
  import <package>.webhooks loads []
  import <package>.webhooks.github.push loads ['verification', 'signatures', 'webhook_keys']
  import <package>.webhooks.keys loads ['verification', 'signatures', 'webhook_keys', 'public_keys', 'cryptography']
  helper loads ['verification', 'signatures', 'webhook_keys', 'public_keys', 'cryptography']
  helper optional imports=['cryptography']
  verify hints=['headers', 'keys', 'now', 'options', 'raw_body', 'return']
  verify_async hints=['headers', 'keys', 'now', 'options', 'raw_body', 'return']
  import <package>.webhooks.wycheproof.rsa loads ['verification', 'signatures', 'webhook_keys', 'public_keys', 'cryptography']
  helper loads ['verification', 'signatures', 'webhook_keys', 'public_keys', 'cryptography']
  helper optional imports=['cryptography']
  verify hints=['headers', 'keys', 'now', 'options', 'raw_body', 'return']
  verify_async hints=['headers', 'keys', 'now', 'options', 'raw_body', 'return']
  Ed25519Key hints={'id': 'str', 'public_key': 'Ed25519PublicKey', 'return': 'NoneType'}
  RSAPSSKey hints={'id': 'str', 'public_key': 'RSAPublicKey', 'return': 'NoneType'}
  key public names=['Ed25519Key', 'HmacKey', 'RSAPSSKey']
  RFC 8032 section 7.1 Ed25519 TEST 1, the empty message = ProtocolDataError: ProtocolDataError(reason='malformed') [] malformed
  RFC 8032 section 7.1 Ed25519 TEST 2, the message 0x72 = ProtocolDataError: ProtocolDataError(reason='malformed') [] malformed
  Wycheproof RSA-PSS 2048 SHA-256 MGF1 32 tcId 1, result valid, comment 'valid signature' = ProtocolDataError: ProtocolDataError(reason='malformed') [] malformed
  Wycheproof RSA-PSS 2048 SHA-256 MGF1 32 tcId 4, result valid, comment 'valid signature' = Count Count(root=123400) delivery_id=None timestamp=None matched_key_id='active'
  Wycheproof RSA-PSS 2048 SHA-256 MGF1 32 tcId 73, result valid, comment 'salt is all 0' = Count Count(root=123400) delivery_id=None timestamp=None matched_key_id='active'
  GitHub 'Validating webhook deliveries', the test values for verifying an implementation = ProtocolDataError: ProtocolDataError(reason='malformed') [] malformed
  Wycheproof RSA-PSS 2048 SHA-256 MGF1 32 tcId 62, result invalid, comment 'first byte of m_hash modified' = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  Wycheproof RSA-PSS 2048 SHA-256 MGF1 32 tcId 67, result invalid, comment 's_len changed to 0' = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  Wycheproof RSA-PSS 2048 SHA-256 MGF1 32 tcId 71, result invalid, comment 's_len changed to 33' = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  Wycheproof RSA-PSS 2048 SHA-256 MGF1 32 tcId 104, result invalid, comment "prepending 0's to signature" = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  Wycheproof RSA-PSS 2048 SHA-256 MGF1 32 tcId 106, result invalid, comment 'truncated signature' = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  Wycheproof RSA-PSS 2048 SHA-256 MGF1 32 tcId 108, result invalid, comment 'PKCS #1 v1.5 signature with SHA-256' = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  RFC 8032 TEST 2 with the message 0x73 = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  RFC 8032 TEST 1 with the last signature byte changed from 0b to 0a = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  RFC 8032 TEST 1 signature of 63 bytes = ProtocolDataError: ProtocolDataError(reason='malformed_signature') [] malformed_signature
  RFC 8032 TEST 1 signature of 65 bytes = ProtocolDataError: ProtocolDataError(reason='malformed_signature') [] malformed_signature
  Wycheproof tcId 4 with one changed body byte = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  Wycheproof tcId 4 with a trailing newline = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  Ed25519 changed body = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  RSA changed body = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  RSA empty signature = ProtocolDataError: ProtocolDataError(reason='malformed_signature') [] malformed_signature
  RSA prefix only = ProtocolDataError: ProtocolDataError(reason='malformed_signature') [] malformed_signature
  Ed25519 rotated to the new key = ProtocolDataError: ProtocolDataError(reason='malformed') [] malformed
  Ed25519 both keys match = ProtocolDataError: ProtocolDataError(reason='malformed') [] malformed
  Ed25519 only the retired key = ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature
  Ed25519 empty key set = ProtocolDataError: ProtocolDataError(reason='missing_key') [] missing_key
  HMAC key for RSA-PSS = ConfigurationError: ConfigurationError(reason='wrong_capability', field_path='keys.0') [field_path=('keys', '0')] wrong_capability
  Ed25519 key for RSA-PSS = ConfigurationError: ConfigurationError(reason='wrong_capability', field_path='keys.0') [field_path=('keys', '0')] wrong_capability
  Ed25519 key after an RSA-PSS key = ConfigurationError: ConfigurationError(reason='wrong_capability', field_path='keys.1') [field_path=('keys', '1')] wrong_capability
  RSA-PSS key for Ed25519 = ConfigurationError: ConfigurationError(reason='wrong_capability', field_path='keys.0') [field_path=('keys', '0')] wrong_capability
  Ed25519 key for HMAC = ConfigurationError: ConfigurationError(reason='wrong_capability', field_path='keys.0') [field_path=('keys', '0')] wrong_capability
  object claiming to be an Ed25519 key = ConfigurationError: ConfigurationError(reason='wrong_capability', field_path='keys.0') [field_path=('keys', '0')] wrong_capability
  object claiming to be an HMAC key = ConfigurationError: ConfigurationError(reason='wrong_capability', field_path='keys.0') [field_path=('keys', '0')] wrong_capability
  key Ed25519 private key ! TypeError: public_key must be an Ed25519PublicKey []
  key Ed25519 raw bytes ! TypeError: public_key must be an Ed25519PublicKey []
  key Ed25519 RSA key ! TypeError: public_key must be an Ed25519PublicKey []
  key Ed25519 integer id ! TypeError: id must be a string []
  key Ed25519 empty id ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='id') [field_path=('id',)] invalid_value
  key Ed25519 id with LF ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='id') [field_path=('id',)] invalid_value
  key RSA private key ! TypeError: public_key must be an RSAPublicKey []
  key RSA DER bytes ! TypeError: public_key must be an RSAPublicKey []
  key RSA PEM text ! TypeError: public_key must be an RSAPublicKey []
  key RSA Ed25519 key ! TypeError: public_key must be an RSAPublicKey []
  key RSA id with NUL ! ConfigurationError: ConfigurationError(reason='invalid_value', field_path='id') [field_path=('id',)] invalid_value
  key RSA no public key ! TypeError: public_key must be an RSAPublicKey []
  key Ed25519 object claiming the key class ! TypeError: public_key must be an Ed25519PublicKey []
  key RSA object claiming the key class ! TypeError: public_key must be an RSAPublicKey []
  private keys asked for their public keys=[]
  Ed25519Key positional=TypeError
  Ed25519Key id and the same public key = ('active', True)
  Ed25519Key assignment ! FrozenInstanceError: Ed25519Key is immutable []
  Ed25519Key deletion ! FrozenInstanceError: Ed25519Key is immutable []
  Ed25519Key pickling ! TypeError: Ed25519Key cannot be pickled []
  Ed25519Key representation = "Ed25519Key(id='active')"
  Ed25519Key copies are the key=True
  RSAPSSKey positional=TypeError
  RSAPSSKey id and the same public key = ('active', True)
  RSAPSSKey assignment ! FrozenInstanceError: RSAPSSKey is immutable []
  RSAPSSKey deletion ! FrozenInstanceError: RSAPSSKey is immutable []
  RSAPSSKey pickling ! TypeError: RSAPSSKey cannot be pickled []
  RSAPSSKey representation = "RSAPSSKey(id='active')"
  RSAPSSKey copies are the key=True
  recorded Ed25519 key = ProtocolDataError: ProtocolDataError(reason='malformed') [] malformed
  recorded RSA key = Count Count(root=123400) delivery_id=None timestamp=None matched_key_id='active'
  recorded calls=[['verify', 'verify'], ['verify', 'verify']]
  unsupported algorithm = ConfigurationError: ConfigurationError(reason='wrong_capability', field_path='keys.1') [field_path=('keys', '1')] wrong_capability
  unsupported algorithm calls=[['verify', 'verify'], ['verify', 'verify'], []]
  invalid signature from a valid key = Count Count(root=123400) delivery_id=None timestamp=None matched_key_id='last'
  invalid signature from a valid key calls=[['verify', 'verify'], ['verify', 'verify'], ['verify', 'verify']]
  programmer error = RuntimeError: scripted []
  programmer error calls=[['verify', 'verify'], ['verify', 'verify'], []]
  unsupported algorithm of the key the key id selects = ConfigurationError: ConfigurationError(reason='wrong_capability', field_path='keys.1') [field_path=('keys', '1')] wrong_capability
  cancelled verify propagated, calls [['verify'], []]
  cancelled verify async propagated, calls [['verify'], []]
  unsupported key ! ConfigurationError: ConfigurationError(reason='wrong_capability', field_path='keys.0') [field_path=('keys', '0')] wrong_capability context=None
  invalid signature ! ProtocolDataError: ProtocolDataError(reason='invalid_signature') [] invalid_signature context=None
  empty event ! ProtocolDataError: ProtocolDataError(reason='malformed') [] malformed context=None
  markers shown=[] calls=['verify', 'verify', 'verify']
