1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
from enum import Enum
from dataclasses import dataclass
from .structs import AuthenticatorDataFlags, CredentialDeviceType
from .exceptions import InvalidBackupFlags
@dataclass
class ParsedBackupFlags:
credential_device_type: CredentialDeviceType
credential_backed_up: bool
def parse_backup_flags(flags: AuthenticatorDataFlags) -> ParsedBackupFlags:
"""Convert backup eligibility and backup state flags into more useful representations
Raises:
`helpers.exceptions.InvalidBackupFlags` if an invalid backup state is detected
"""
credential_device_type = CredentialDeviceType.SINGLE_DEVICE
# A credential that can be backed up can typically be used on multiple devices
if flags.be:
credential_device_type = CredentialDeviceType.MULTI_DEVICE
if credential_device_type == CredentialDeviceType.SINGLE_DEVICE and flags.bs:
raise InvalidBackupFlags(
"Single-device credential indicated that it was backed up, which should be impossible."
)
return ParsedBackupFlags(
credential_device_type=credential_device_type,
credential_backed_up=flags.bs,
)
|