You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

319 lines
9.2 KiB
Python

# DO NOT EDIT THIS FILE!
#
# This file is generated from the CDP specification. If you need to make
# changes, edit the generator and regenerate all of the modules.
#
# CDP domain: WebAuthn (experimental)
from __future__ import annotations
from .util import event_class, T_JSON_DICT
from dataclasses import dataclass
import enum
import typing
class AuthenticatorId(str):
def to_json(self) -> str:
return self
@classmethod
def from_json(cls, json: str) -> AuthenticatorId:
return cls(json)
def __repr__(self):
return 'AuthenticatorId({})'.format(super().__repr__())
class AuthenticatorProtocol(enum.Enum):
U2F = "u2f"
CTAP2 = "ctap2"
def to_json(self):
return self.value
@classmethod
def from_json(cls, json):
return cls(json)
class AuthenticatorTransport(enum.Enum):
USB = "usb"
NFC = "nfc"
BLE = "ble"
CABLE = "cable"
INTERNAL = "internal"
def to_json(self):
return self.value
@classmethod
def from_json(cls, json):
return cls(json)
@dataclass
class VirtualAuthenticatorOptions:
protocol: AuthenticatorProtocol
transport: AuthenticatorTransport
#: Defaults to false.
has_resident_key: typing.Optional[bool] = None
#: Defaults to false.
has_user_verification: typing.Optional[bool] = None
#: If set to true, tests of user presence will succeed immediately.
#: Otherwise, they will not be resolved. Defaults to true.
automatic_presence_simulation: typing.Optional[bool] = None
#: Sets whether User Verification succeeds or fails for an authenticator.
#: Defaults to false.
is_user_verified: typing.Optional[bool] = None
def to_json(self):
json = dict()
json['protocol'] = self.protocol.to_json()
json['transport'] = self.transport.to_json()
if self.has_resident_key is not None:
json['hasResidentKey'] = self.has_resident_key
if self.has_user_verification is not None:
json['hasUserVerification'] = self.has_user_verification
if self.automatic_presence_simulation is not None:
json['automaticPresenceSimulation'] = self.automatic_presence_simulation
if self.is_user_verified is not None:
json['isUserVerified'] = self.is_user_verified
return json
@classmethod
def from_json(cls, json):
return cls(
protocol=AuthenticatorProtocol.from_json(json['protocol']),
transport=AuthenticatorTransport.from_json(json['transport']),
has_resident_key=bool(json['hasResidentKey']) if 'hasResidentKey' in json else None,
has_user_verification=bool(json['hasUserVerification']) if 'hasUserVerification' in json else None,
automatic_presence_simulation=bool(json['automaticPresenceSimulation']) if 'automaticPresenceSimulation' in json else None,
is_user_verified=bool(json['isUserVerified']) if 'isUserVerified' in json else None,
)
@dataclass
class Credential:
credential_id: str
is_resident_credential: bool
#: The ECDSA P-256 private key in PKCS#8 format.
private_key: str
#: Signature counter. This is incremented by one for each successful
#: assertion.
#: See https://w3c.github.io/webauthn/#signature-counter
sign_count: int
#: Relying Party ID the credential is scoped to. Must be set when adding a
#: credential.
rp_id: typing.Optional[str] = None
#: An opaque byte sequence with a maximum size of 64 bytes mapping the
#: credential to a specific user.
user_handle: typing.Optional[str] = None
def to_json(self):
json = dict()
json['credentialId'] = self.credential_id
json['isResidentCredential'] = self.is_resident_credential
json['privateKey'] = self.private_key
json['signCount'] = self.sign_count
if self.rp_id is not None:
json['rpId'] = self.rp_id
if self.user_handle is not None:
json['userHandle'] = self.user_handle
return json
@classmethod
def from_json(cls, json):
return cls(
credential_id=str(json['credentialId']),
is_resident_credential=bool(json['isResidentCredential']),
private_key=str(json['privateKey']),
sign_count=int(json['signCount']),
rp_id=str(json['rpId']) if 'rpId' in json else None,
user_handle=str(json['userHandle']) if 'userHandle' in json else None,
)
def enable() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Enable the WebAuthn domain and start intercepting credential storage and
retrieval with a virtual authenticator.
'''
cmd_dict: T_JSON_DICT = {
'method': 'WebAuthn.enable',
}
json = yield cmd_dict
def disable() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Disable the WebAuthn domain.
'''
cmd_dict: T_JSON_DICT = {
'method': 'WebAuthn.disable',
}
json = yield cmd_dict
def add_virtual_authenticator(
options: VirtualAuthenticatorOptions
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,AuthenticatorId]:
'''
Creates and adds a virtual authenticator.
:param options:
:returns:
'''
params: T_JSON_DICT = dict()
params['options'] = options.to_json()
cmd_dict: T_JSON_DICT = {
'method': 'WebAuthn.addVirtualAuthenticator',
'params': params,
}
json = yield cmd_dict
return AuthenticatorId.from_json(json['authenticatorId'])
def remove_virtual_authenticator(
authenticator_id: AuthenticatorId
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Removes the given authenticator.
:param authenticator_id:
'''
params: T_JSON_DICT = dict()
params['authenticatorId'] = authenticator_id.to_json()
cmd_dict: T_JSON_DICT = {
'method': 'WebAuthn.removeVirtualAuthenticator',
'params': params,
}
json = yield cmd_dict
def add_credential(
authenticator_id: AuthenticatorId,
credential: Credential
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Adds the credential to the specified authenticator.
:param authenticator_id:
:param credential:
'''
params: T_JSON_DICT = dict()
params['authenticatorId'] = authenticator_id.to_json()
params['credential'] = credential.to_json()
cmd_dict: T_JSON_DICT = {
'method': 'WebAuthn.addCredential',
'params': params,
}
json = yield cmd_dict
def get_credential(
authenticator_id: AuthenticatorId,
credential_id: str
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,Credential]:
'''
Returns a single credential stored in the given virtual authenticator that
matches the credential ID.
:param authenticator_id:
:param credential_id:
:returns:
'''
params: T_JSON_DICT = dict()
params['authenticatorId'] = authenticator_id.to_json()
params['credentialId'] = credential_id
cmd_dict: T_JSON_DICT = {
'method': 'WebAuthn.getCredential',
'params': params,
}
json = yield cmd_dict
return Credential.from_json(json['credential'])
def get_credentials(
authenticator_id: AuthenticatorId
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.List[Credential]]:
'''
Returns all the credentials stored in the given virtual authenticator.
:param authenticator_id:
:returns:
'''
params: T_JSON_DICT = dict()
params['authenticatorId'] = authenticator_id.to_json()
cmd_dict: T_JSON_DICT = {
'method': 'WebAuthn.getCredentials',
'params': params,
}
json = yield cmd_dict
return [Credential.from_json(i) for i in json['credentials']]
def remove_credential(
authenticator_id: AuthenticatorId,
credential_id: str
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Removes a credential from the authenticator.
:param authenticator_id:
:param credential_id:
'''
params: T_JSON_DICT = dict()
params['authenticatorId'] = authenticator_id.to_json()
params['credentialId'] = credential_id
cmd_dict: T_JSON_DICT = {
'method': 'WebAuthn.removeCredential',
'params': params,
}
json = yield cmd_dict
def clear_credentials(
authenticator_id: AuthenticatorId
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Clears all the credentials from the specified device.
:param authenticator_id:
'''
params: T_JSON_DICT = dict()
params['authenticatorId'] = authenticator_id.to_json()
cmd_dict: T_JSON_DICT = {
'method': 'WebAuthn.clearCredentials',
'params': params,
}
json = yield cmd_dict
def set_user_verified(
authenticator_id: AuthenticatorId,
is_user_verified: bool
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Sets whether User Verification succeeds or fails for an authenticator.
The default is true.
:param authenticator_id:
:param is_user_verified:
'''
params: T_JSON_DICT = dict()
params['authenticatorId'] = authenticator_id.to_json()
params['isUserVerified'] = is_user_verified
cmd_dict: T_JSON_DICT = {
'method': 'WebAuthn.setUserVerified',
'params': params,
}
json = yield cmd_dict