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

1import base64 

2import dataclasses 

3from typing import Optional 

4 

5from tests.factories import WebAuthnCredentialFactory 

6 

7 

8@dataclasses.dataclass 

9class AuthenticatorVerificationResponse: 

10 raw_request: str 

11 raw_response: str 

12 challenge_used: str 

13 

14 

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]] = [] 

24 

25 backup_eligible: Optional[bool] = False 

26 backup_state: Optional[bool] = False 

27 

28 attestation_fmt: str = "none" 

29 attestation_data: bytes = b"\00" 

30 attestation_client_data_json: bytes = b"\00" 

31 

32 registration_challenge_used: str 

33 

34 verification_responses: list[AuthenticatorVerificationResponse] = dataclasses.field(default_factory=list) 

35 

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 ) 

52 

53 

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: 

83 

84macOS v14.5 + Chrome v126 + Virtual Authenticator 

85 

86- key type: ES256 

87- attestation: none 

88- transports: internal 

89- backup: no 

90- discoverable: True 

91- sign_count: 1 

92"""