# WARNING: Please don't edit this file. It was generated by Python/WinRT v1.0.0-beta.9

import enum
import datetime
import sys
import types
import typing

import winsdk.system
import winsdk.windows.foundation
import winsdk.windows.foundation.collections
import winsdk.windows.storage.streams

class SecondaryAuthenticationFactorAuthenticationMessage(enum.IntEnum):
    INVALID = 0
    SWIPE_UP_WELCOME = 1
    TAP_WELCOME = 2
    DEVICE_NEEDS_ATTENTION = 3
    LOOKING_FOR_DEVICE = 4
    LOOKING_FOR_DEVICE_PLUGGEDIN = 5
    BLUETOOTH_IS_DISABLED = 6
    NFC_IS_DISABLED = 7
    WI_FI_IS_DISABLED = 8
    EXTRA_TAP_IS_REQUIRED = 9
    DISABLED_BY_POLICY = 10
    TAP_ON_DEVICE_REQUIRED = 11
    HOLD_FINGER = 12
    SCAN_FINGER = 13
    UNAUTHORIZED_USER = 14
    REREGISTER_REQUIRED = 15
    TRY_AGAIN = 16
    SAY_PASSPHRASE = 17
    READY_TO_SIGN_IN = 18
    USE_ANOTHER_SIGN_IN_OPTION = 19
    CONNECTION_REQUIRED = 20
    TIME_LIMIT_EXCEEDED = 21
    CANCELED_BY_USER = 22
    CENTER_HAND = 23
    MOVE_HAND_CLOSER = 24
    MOVE_HAND_FARTHER = 25
    PLACE_HAND_ABOVE = 26
    RECOGNITION_FAILED = 27
    DEVICE_UNAVAILABLE = 28

class SecondaryAuthenticationFactorAuthenticationScenario(enum.IntEnum):
    SIGN_IN = 0
    CREDENTIAL_PROMPT = 1

class SecondaryAuthenticationFactorAuthenticationStage(enum.IntEnum):
    NOT_STARTED = 0
    WAITING_FOR_USER_CONFIRMATION = 1
    COLLECTING_CREDENTIAL = 2
    SUSPENDING_AUTHENTICATION = 3
    CREDENTIAL_COLLECTED = 4
    CREDENTIAL_AUTHENTICATED = 5
    STOPPING_AUTHENTICATION = 6
    READY_FOR_LOCK = 7
    CHECKING_DEVICE_PRESENCE = 8

class SecondaryAuthenticationFactorAuthenticationStatus(enum.IntEnum):
    FAILED = 0
    STARTED = 1
    UNKNOWN_DEVICE = 2
    DISABLED_BY_POLICY = 3
    INVALID_AUTHENTICATION_STAGE = 4

class SecondaryAuthenticationFactorDeviceCapabilities(enum.IntFlag):
    NONE = 0
    SECURE_STORAGE = 0x1
    STORE_KEYS = 0x2
    CONFIRM_USER_INTENT_TO_AUTHENTICATE = 0x4
    SUPPORT_SECURE_USER_PRESENCE_CHECK = 0x8
    TRANSMITTED_DATA_IS_ENCRYPTED = 0x10
    H_MAC_SHA256 = 0x20
    CLOSE_RANGE_DATA_TRANSMISSION = 0x40

class SecondaryAuthenticationFactorDeviceFindScope(enum.IntEnum):
    USER = 0
    ALL_USERS = 1

class SecondaryAuthenticationFactorDevicePresence(enum.IntEnum):
    ABSENT = 0
    PRESENT = 1

class SecondaryAuthenticationFactorDevicePresenceMonitoringMode(enum.IntEnum):
    UNSUPPORTED = 0
    APP_MANAGED = 1
    SYSTEM_MANAGED = 2

class SecondaryAuthenticationFactorDevicePresenceMonitoringRegistrationStatus(enum.IntEnum):
    UNSUPPORTED = 0
    SUCCEEDED = 1
    DISABLED_BY_POLICY = 2

class SecondaryAuthenticationFactorFinishAuthenticationStatus(enum.IntEnum):
    FAILED = 0
    COMPLETED = 1
    NONCE_EXPIRED = 2

class SecondaryAuthenticationFactorRegistrationStatus(enum.IntEnum):
    FAILED = 0
    STARTED = 1
    CANCELED_BY_USER = 2
    PIN_SETUP_REQUIRED = 3
    DISABLED_BY_POLICY = 4

Self = typing.TypeVar('Self')

class SecondaryAuthenticationFactorAuthentication(winsdk.system.Object):
    device_configuration_data: typing.Optional[winsdk.windows.storage.streams.IBuffer]
    device_nonce: typing.Optional[winsdk.windows.storage.streams.IBuffer]
    service_authentication_hmac: typing.Optional[winsdk.windows.storage.streams.IBuffer]
    session_nonce: typing.Optional[winsdk.windows.storage.streams.IBuffer]
    @staticmethod
    def _from(obj: winsdk.system.Object) -> SecondaryAuthenticationFactorAuthentication: ...
    def abort_authentication_async(self, error_log_message: str) -> winsdk.windows.foundation.IAsyncAction: ...
    def finish_authentication_async(self, device_hmac: typing.Optional[winsdk.windows.storage.streams.IBuffer], session_hmac: typing.Optional[winsdk.windows.storage.streams.IBuffer]) -> winsdk.windows.foundation.IAsyncOperation[SecondaryAuthenticationFactorFinishAuthenticationStatus]: ...
    @staticmethod
    def get_authentication_stage_info_async() -> winsdk.windows.foundation.IAsyncOperation[SecondaryAuthenticationFactorAuthenticationStageInfo]: ...
    @staticmethod
    def show_notification_message_async(device_name: str, message: SecondaryAuthenticationFactorAuthenticationMessage) -> winsdk.windows.foundation.IAsyncAction: ...
    @staticmethod
    def start_authentication_async(device_id: str, service_authentication_nonce: typing.Optional[winsdk.windows.storage.streams.IBuffer]) -> winsdk.windows.foundation.IAsyncOperation[SecondaryAuthenticationFactorAuthenticationResult]: ...
    @staticmethod
    def add_authentication_stage_changed(handler: winsdk.windows.foundation.EventHandler[SecondaryAuthenticationFactorAuthenticationStageChangedEventArgs]) -> winsdk.windows.foundation.EventRegistrationToken: ...
    @staticmethod
    def remove_authentication_stage_changed(token: winsdk.windows.foundation.EventRegistrationToken) -> None: ...

class SecondaryAuthenticationFactorAuthenticationResult(winsdk.system.Object):
    authentication: typing.Optional[SecondaryAuthenticationFactorAuthentication]
    status: SecondaryAuthenticationFactorAuthenticationStatus
    @staticmethod
    def _from(obj: winsdk.system.Object) -> SecondaryAuthenticationFactorAuthenticationResult: ...

class SecondaryAuthenticationFactorAuthenticationStageChangedEventArgs(winsdk.system.Object):
    stage_info: typing.Optional[SecondaryAuthenticationFactorAuthenticationStageInfo]
    @staticmethod
    def _from(obj: winsdk.system.Object) -> SecondaryAuthenticationFactorAuthenticationStageChangedEventArgs: ...

class SecondaryAuthenticationFactorAuthenticationStageInfo(winsdk.system.Object):
    device_id: str
    scenario: SecondaryAuthenticationFactorAuthenticationScenario
    stage: SecondaryAuthenticationFactorAuthenticationStage
    @staticmethod
    def _from(obj: winsdk.system.Object) -> SecondaryAuthenticationFactorAuthenticationStageInfo: ...

class SecondaryAuthenticationFactorInfo(winsdk.system.Object):
    device_configuration_data: typing.Optional[winsdk.windows.storage.streams.IBuffer]
    device_friendly_name: str
    device_id: str
    device_model_number: str
    is_authentication_supported: winsdk.system.Boolean
    presence_monitoring_mode: SecondaryAuthenticationFactorDevicePresenceMonitoringMode
    @staticmethod
    def _from(obj: winsdk.system.Object) -> SecondaryAuthenticationFactorInfo: ...
    def update_device_presence_async(self, presence_state: SecondaryAuthenticationFactorDevicePresence) -> winsdk.windows.foundation.IAsyncAction: ...

class SecondaryAuthenticationFactorRegistration(winsdk.system.Object):
    @staticmethod
    def _from(obj: winsdk.system.Object) -> SecondaryAuthenticationFactorRegistration: ...
    def abort_registering_device_async(self, error_log_message: str) -> winsdk.windows.foundation.IAsyncAction: ...
    @staticmethod
    def find_all_registered_device_info_async(query_type: SecondaryAuthenticationFactorDeviceFindScope) -> winsdk.windows.foundation.IAsyncOperation[winsdk.windows.foundation.collections.IVectorView[SecondaryAuthenticationFactorInfo]]: ...
    def finish_registering_device_async(self, device_configuration_data: typing.Optional[winsdk.windows.storage.streams.IBuffer]) -> winsdk.windows.foundation.IAsyncAction: ...
    @staticmethod
    def is_device_presence_monitoring_supported() -> winsdk.system.Boolean: ...
    @typing.overload
    @staticmethod
    def register_device_presence_monitoring_async(device_id: str, device_instance_path: str, monitoring_mode: SecondaryAuthenticationFactorDevicePresenceMonitoringMode) -> winsdk.windows.foundation.IAsyncOperation[SecondaryAuthenticationFactorDevicePresenceMonitoringRegistrationStatus]: ...
    @typing.overload
    @staticmethod
    def register_device_presence_monitoring_async(device_id: str, device_instance_path: str, monitoring_mode: SecondaryAuthenticationFactorDevicePresenceMonitoringMode, device_friendly_name: str, device_model_number: str, device_configuration_data: typing.Optional[winsdk.windows.storage.streams.IBuffer]) -> winsdk.windows.foundation.IAsyncOperation[SecondaryAuthenticationFactorDevicePresenceMonitoringRegistrationStatus]: ...
    @staticmethod
    def request_start_registering_device_async(device_id: str, capabilities: SecondaryAuthenticationFactorDeviceCapabilities, device_friendly_name: str, device_model_number: str, device_key: typing.Optional[winsdk.windows.storage.streams.IBuffer], mutual_authentication_key: typing.Optional[winsdk.windows.storage.streams.IBuffer]) -> winsdk.windows.foundation.IAsyncOperation[SecondaryAuthenticationFactorRegistrationResult]: ...
    @staticmethod
    def unregister_device_async(device_id: str) -> winsdk.windows.foundation.IAsyncAction: ...
    @staticmethod
    def unregister_device_presence_monitoring_async(device_id: str) -> winsdk.windows.foundation.IAsyncAction: ...
    @staticmethod
    def update_device_configuration_data_async(device_id: str, device_configuration_data: typing.Optional[winsdk.windows.storage.streams.IBuffer]) -> winsdk.windows.foundation.IAsyncAction: ...

class SecondaryAuthenticationFactorRegistrationResult(winsdk.system.Object):
    registration: typing.Optional[SecondaryAuthenticationFactorRegistration]
    status: SecondaryAuthenticationFactorRegistrationStatus
    @staticmethod
    def _from(obj: winsdk.system.Object) -> SecondaryAuthenticationFactorRegistrationResult: ...

