Coverage for tests/fixtures/authenticators.py: 0%
29 statements
« prev ^ index » next coverage.py v7.5.4, created at 2024-06-23 20:47 +0000
« prev ^ index » next coverage.py v7.5.4, created at 2024-06-23 20:47 +0000
1import base64
2import dataclasses
3from typing import Optional
5from tests.factories import WebAuthnCredentialFactory
8@dataclasses.dataclass
9class AuthenticatorVerificationResponse:
10 raw_request: str
11 raw_response: str
12 challenge_used: str
15@dataclasses.dataclass
16class Authenticator:
17 name: str
18 credential_id: bytes
19 public_key: bytes
20 sign_count: int = 0
21 discoverable: Optional[bool] = None
22 aaguid: str = "00000000-0000-0000-0000-000000000000"
23 transports: Optional[list[str]] = []
25 backup_eligible: Optional[bool] = False
26 backup_state: Optional[bool] = False
28 attestation_fmt: str = "none"
29 attestation_data: bytes = b"\00"
30 attestation_client_data_json: bytes = b"\00"
32 registration_challenge_used: str
34 verification_responses: list[AuthenticatorVerificationResponse] = dataclasses.field(default_factory=list)
36 def as_credential(self, **extra_factory_kwargs):
37 return WebAuthnCredentialFactory(
38 name=self.name,
39 credential_id=self.credential_id,
40 public_key=self.public_key,
41 sign_count=self.sign_count,
42 discoverable=self.discoverable,
43 aaguid=self.aaguid,
44 transports=self.transports,
45 backup_eligible=self.backup_eligible,
46 backup_state=self.backup_state,
47 attestation__fmt=self.attestation_fmt,
48 attestation__data=self.attestation_data,
49 attestation__client_data_json=self.attestation_client_data_json,
50 **extra_factory_kwargs,
51 )
54chrome_virtual_authenticator = Authenticator(
55 name="Chrome Virtual Authenticator",
56 aaguid="01020304-0506-0708-0102-030405060708",
57 credential_id=base64.b64decode("pkRKCDRsUBFBOiC0LCMkreCD6ebzKL/AxpzqPxDcaLI="),
58 public_key=base64.b64decode(
59 "pQECAyYgASFYIOkIoJZ0syJSNjfUUnnDcqt4bGvriqn5mqdbVRUwLlo8Ilgg5hz6MK1R3YWBb6d1qEmGINIgi/TaJVh8tn+ixNvl1T4="
60 ),
61 transports=["internal"],
62 backup_eligible=False,
63 backup_state=False,
64 discoverable=True,
65 sign_count=1,
66 attestation_data=base64.b64decode(
67 "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YVikSZYN5YgOjGh0NBcPZHZgW4/krrmihjLHmVzzuoMdl2NFAAAAAQECAwQFBgcIAQIDBAUGBwgAIKZESgg0bFARQTogtCwjJK3gg+nm8yi/wMac6j8Q3GiypQECAyYgASFYIOkIoJZ0syJSNjfUUnnDcqt4bGvriqn5mqdbVRUwLlo8Ilgg5hz6MK1R3YWBb6d1qEmGINIgi/TaJVh8tn+ixNvl1T4="
68 ),
69 attestation_fmt="none",
70 attestation_client_data_json=base64.b64decode(
71 "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiT2Q1VFpxSnJQemhiOXNlRWFCMFl0UXFXMXhSaFhZd2tmOGFHN2xaOHQyYlBjYXNfWFRRNTRtQXBlTDNSTGl3TUJMYnFOelR5ZmFMUTd1T3BHV184UmciLCJvcmlnaW4iOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJjcm9zc09yaWdpbiI6ZmFsc2UsIm90aGVyX2tleXNfY2FuX2JlX2FkZGVkX2hlcmUiOiJkbyBub3QgY29tcGFyZSBjbGllbnREYXRhSlNPTiBhZ2FpbnN0IGEgdGVtcGxhdGUuIFNlZSBodHRwczovL2dvby5nbC95YWJQZXgifQ=="
72 ),
73 registration_challenge_used="Od5TZqJrPzhb9seEaB0YtQqW1xRhXYwkf8aG7lZ8t2bPcas_XTQ54mApeL3RLiwMBLbqNzTyfaLQ7uOpGW_8Rg",
74 verification_responses=[
75 AuthenticatorVerificationResponse(
76 raw_request="""{"challenge":"XOyNvNXh-gQIgWhEpsu1eANiXUetvspXslseLdeTvgrZ6u71FCS8fRceT18I_cdL6_r7_EQ2h3PZ7Ej3aVrteg","timeout":300000,"rpId":"localhost","allowCredentials":[{"id":"pkRKCDRsUBFBOiC0LCMkreCD6ebzKL_AxpzqPxDcaLI","type":"public-key","transports":["internal"]}],"userVerification":"discouraged","extensions":{}}""",
77 raw_response="""{"id":"pkRKCDRsUBFBOiC0LCMkreCD6ebzKL_AxpzqPxDcaLI","rawId":"pkRKCDRsUBFBOiC0LCMkreCD6ebzKL_AxpzqPxDcaLI","response":{"authenticatorData":"SZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2MBAAAABQ","clientDataJSON":"eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiWE95TnZOWGgtZ1FJZ1doRXBzdTFlQU5pWFVldHZzcFhzbHNlTGRlVHZnclo2dTcxRkNTOGZSY2VUMThJX2NkTDZfcjdfRVEyaDNQWjdFajNhVnJ0ZWciLCJvcmlnaW4iOiJodHRwOi8vbG9jYWxob3N0OjgwMDAiLCJjcm9zc09yaWdpbiI6ZmFsc2V9","signature":"MEUCIDDERFtpV_hHUZgkiMRLk-KMUWhba-1nTrWLwnPvlx1eAiEAmacoVrJzbQV_e3k_YVAODMyq3ZQG4WnV9A6GKEVQ7SY","userHandle":"bjQLnP-zepicpUTmu3gKLHiQHT-zNzh2hRGjBhevoB0"},"type":"public-key","clientExtensionResults":{},"authenticatorAttachment":"platform"}""",
78 challenge_used="XOyNvNXh-gQIgWhEpsu1eANiXUetvspXslseLdeTvgrZ6u71FCS8fRceT18I_cdL6_r7_EQ2h3PZ7Ej3aVrteg",
79 ),
80 ],
81)
82"""Authenticator properties:
84macOS v14.5 + Chrome v126 + Virtual Authenticator
86- key type: ES256
87- attestation: none
88- transports: internal
89- backup: no
90- discoverable: True
91- sign_count: 1
92"""