123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- /**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
- #ifndef _WEBAUTHN_H_
- #define _WEBAUTHN_H_
- #include <winapifamily.h>
- #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
- #ifdef __cplusplus
- extern "C" {
- #endif
- #ifndef WINAPI
- #if defined(_ARM_)
- #define WINAPI
- #else
- #define WINAPI __stdcall
- #endif
- #endif
- #ifndef INITGUID
- #define INITGUID
- #include <guiddef.h>
- #undef INITGUID
- #else
- #include <guiddef.h>
- #endif
- #define WEBAUTHN_API_VERSION_1 1
- #define WEBAUTHN_API_VERSION_2 2
- #define WEBAUTHN_API_VERSION_3 3
- #define WEBAUTHN_API_CURRENT_VERSION WEBAUTHN_API_VERSION_3
- #define WEBAUTHN_RP_ENTITY_INFORMATION_CURRENT_VERSION 1
- typedef struct _WEBAUTHN_RP_ENTITY_INFORMATION {
- DWORD dwVersion;
- PCWSTR pwszId;
- PCWSTR pwszName;
- PCWSTR pwszIcon;
- } WEBAUTHN_RP_ENTITY_INFORMATION, *PWEBAUTHN_RP_ENTITY_INFORMATION;
- typedef const WEBAUTHN_RP_ENTITY_INFORMATION *PCWEBAUTHN_RP_ENTITY_INFORMATION;
- #define WEBAUTHN_MAX_USER_ID_LENGTH 64
- #define WEBAUTHN_USER_ENTITY_INFORMATION_CURRENT_VERSION 1
- typedef struct _WEBAUTHN_USER_ENTITY_INFORMATION {
- DWORD dwVersion;
- DWORD cbId;
- PBYTE pbId;
- PCWSTR pwszName;
- PCWSTR pwszIcon;
- PCWSTR pwszDisplayName;
- } WEBAUTHN_USER_ENTITY_INFORMATION, *PWEBAUTHN_USER_ENTITY_INFORMATION;
- typedef const WEBAUTHN_USER_ENTITY_INFORMATION *PCWEBAUTHN_USER_ENTITY_INFORMATION;
- #define WEBAUTHN_HASH_ALGORITHM_SHA_256 L"SHA-256"
- #define WEBAUTHN_HASH_ALGORITHM_SHA_384 L"SHA-384"
- #define WEBAUTHN_HASH_ALGORITHM_SHA_512 L"SHA-512"
- #define WEBAUTHN_CLIENT_DATA_CURRENT_VERSION 1
- typedef struct _WEBAUTHN_CLIENT_DATA {
- DWORD dwVersion;
- DWORD cbClientDataJSON;
- PBYTE pbClientDataJSON;
- LPCWSTR pwszHashAlgId;
- } WEBAUTHN_CLIENT_DATA, *PWEBAUTHN_CLIENT_DATA;
- typedef const WEBAUTHN_CLIENT_DATA *PCWEBAUTHN_CLIENT_DATA;
- #define WEBAUTHN_CREDENTIAL_TYPE_PUBLIC_KEY L"public-key"
- #define WEBAUTHN_COSE_ALGORITHM_ECDSA_P256_WITH_SHA256 -7
- #define WEBAUTHN_COSE_ALGORITHM_ECDSA_P384_WITH_SHA384 -35
- #define WEBAUTHN_COSE_ALGORITHM_ECDSA_P521_WITH_SHA512 -36
- #define WEBAUTHN_COSE_ALGORITHM_RSASSA_PKCS1_V1_5_WITH_SHA256 -257
- #define WEBAUTHN_COSE_ALGORITHM_RSASSA_PKCS1_V1_5_WITH_SHA384 -258
- #define WEBAUTHN_COSE_ALGORITHM_RSASSA_PKCS1_V1_5_WITH_SHA512 -259
- #define WEBAUTHN_COSE_ALGORITHM_RSA_PSS_WITH_SHA256 -37
- #define WEBAUTHN_COSE_ALGORITHM_RSA_PSS_WITH_SHA384 -38
- #define WEBAUTHN_COSE_ALGORITHM_RSA_PSS_WITH_SHA512 -39
- #define WEBAUTHN_COSE_CREDENTIAL_PARAMETER_CURRENT_VERSION 1
- typedef struct _WEBAUTHN_COSE_CREDENTIAL_PARAMETER {
- DWORD dwVersion;
- LPCWSTR pwszCredentialType;
- LONG lAlg;
- } WEBAUTHN_COSE_CREDENTIAL_PARAMETER, *PWEBAUTHN_COSE_CREDENTIAL_PARAMETER;
- typedef const WEBAUTHN_COSE_CREDENTIAL_PARAMETER *PCWEBAUTHN_COSE_CREDENTIAL_PARAMETER;
- typedef struct _WEBAUTHN_COSE_CREDENTIAL_PARAMETERS {
- DWORD cCredentialParameters;
- PWEBAUTHN_COSE_CREDENTIAL_PARAMETER pCredentialParameters;
- } WEBAUTHN_COSE_CREDENTIAL_PARAMETERS, *PWEBAUTHN_COSE_CREDENTIAL_PARAMETERS;
- typedef const WEBAUTHN_COSE_CREDENTIAL_PARAMETERS *PCWEBAUTHN_COSE_CREDENTIAL_PARAMETERS;
- #define WEBAUTHN_CREDENTIAL_CURRENT_VERSION 1
- typedef struct _WEBAUTHN_CREDENTIAL {
- DWORD dwVersion;
- DWORD cbId;
- PBYTE pbId;
- LPCWSTR pwszCredentialType;
- } WEBAUTHN_CREDENTIAL, *PWEBAUTHN_CREDENTIAL;
- typedef const WEBAUTHN_CREDENTIAL *PCWEBAUTHN_CREDENTIAL;
- typedef struct _WEBAUTHN_CREDENTIALS {
- DWORD cCredentials;
- PWEBAUTHN_CREDENTIAL pCredentials;
- } WEBAUTHN_CREDENTIALS, *PWEBAUTHN_CREDENTIALS;
- typedef const WEBAUTHN_CREDENTIALS *PCWEBAUTHN_CREDENTIALS;
- #define WEBAUTHN_CTAP_TRANSPORT_USB 0x00000001
- #define WEBAUTHN_CTAP_TRANSPORT_NFC 0x00000002
- #define WEBAUTHN_CTAP_TRANSPORT_BLE 0x00000004
- #define WEBAUTHN_CTAP_TRANSPORT_TEST 0x00000008
- #define WEBAUTHN_CTAP_TRANSPORT_INTERNAL 0x00000010
- #define WEBAUTHN_CTAP_TRANSPORT_FLAGS_MASK 0x0000001F
- #define WEBAUTHN_CREDENTIAL_EX_CURRENT_VERSION 1
- typedef struct _WEBAUTHN_CREDENTIAL_EX {
- DWORD dwVersion;
- DWORD cbId;
- PBYTE pbId;
- LPCWSTR pwszCredentialType;
- DWORD dwTransports;
- } WEBAUTHN_CREDENTIAL_EX, *PWEBAUTHN_CREDENTIAL_EX;
- typedef const WEBAUTHN_CREDENTIAL_EX *PCWEBAUTHN_CREDENTIAL_EX;
- typedef struct _WEBAUTHN_CREDENTIAL_LIST {
- DWORD cCredentials;
- PWEBAUTHN_CREDENTIAL_EX *ppCredentials;
- } WEBAUTHN_CREDENTIAL_LIST, *PWEBAUTHN_CREDENTIAL_LIST;
- typedef const WEBAUTHN_CREDENTIAL_LIST *PCWEBAUTHN_CREDENTIAL_LIST;
- #define WEBAUTHN_EXTENSIONS_IDENTIFIER_HMAC_SECRET L"hmac-secret"
- #define WEBAUTHN_USER_VERIFICATION_ANY 0
- #define WEBAUTHN_USER_VERIFICATION_OPTIONAL 1
- #define WEBAUTHN_USER_VERIFICATION_OPTIONAL_WITH_CREDENTIAL_ID_LIST 2
- #define WEBAUTHN_USER_VERIFICATION_REQUIRED 3
- typedef struct _WEBAUTHN_CRED_PROTECT_EXTENSION_IN {
- DWORD dwCredProtect;
- WINBOOL bRequireCredProtect;
- } WEBAUTHN_CRED_PROTECT_EXTENSION_IN, *PWEBAUTHN_CRED_PROTECT_EXTENSION_IN;
- typedef const WEBAUTHN_CRED_PROTECT_EXTENSION_IN *PCWEBAUTHN_CRED_PROTECT_EXTENSION_IN;
- #define WEBAUTHN_EXTENSIONS_IDENTIFIER_CRED_PROTECT L"credProtect"
- typedef struct _WEBAUTHN_CRED_BLOB_EXTENSION {
- DWORD cbCredBlob;
- PBYTE pbCredBlob;
- } WEBAUTHN_CRED_BLOB_EXTENSION, *PWEBAUTHN_CRED_BLOB_EXTENSION;
- typedef const WEBAUTHN_CRED_BLOB_EXTENSION *PCWEBAUTHN_CRED_BLOB_EXTENSION;
- #define WEBAUTHN_EXTENSIONS_IDENTIFIER_CRED_BLOB L"credBlob"
- #define WEBAUTHN_EXTENSIONS_IDENTIFIER_MIN_PIN_LENGTH L"minPinLength"
- typedef struct _WEBAUTHN_EXTENSION {
- LPCWSTR pwszExtensionIdentifier;
- DWORD cbExtension;
- PVOID pvExtension;
- } WEBAUTHN_EXTENSION, *PWEBAUTHN_EXTENSION;
- typedef const WEBAUTHN_EXTENSION *PCWEBAUTHN_EXTENSION;
- typedef struct _WEBAUTHN_EXTENSIONS {
- DWORD cExtensions;
- PWEBAUTHN_EXTENSION pExtensions;
- } WEBAUTHN_EXTENSIONS, *PWEBAUTHN_EXTENSIONS;
- typedef const WEBAUTHN_EXTENSIONS *PCWEBAUTHN_EXTENSIONS;
- #define WEBAUTHN_AUTHENTICATOR_ATTACHMENT_ANY 0
- #define WEBAUTHN_AUTHENTICATOR_ATTACHMENT_PLATFORM 1
- #define WEBAUTHN_AUTHENTICATOR_ATTACHMENT_CROSS_PLATFORM 2
- #define WEBAUTHN_AUTHENTICATOR_ATTACHMENT_CROSS_PLATFORM_U2F_V2 3
- #define WEBAUTHN_USER_VERIFICATION_REQUIREMENT_ANY 0
- #define WEBAUTHN_USER_VERIFICATION_REQUIREMENT_REQUIRED 1
- #define WEBAUTHN_USER_VERIFICATION_REQUIREMENT_PREFERRED 2
- #define WEBAUTHN_USER_VERIFICATION_REQUIREMENT_DISCOURAGED 3
- #define WEBAUTHN_ATTESTATION_CONVEYANCE_PREFERENCE_ANY 0
- #define WEBAUTHN_ATTESTATION_CONVEYANCE_PREFERENCE_NONE 1
- #define WEBAUTHN_ATTESTATION_CONVEYANCE_PREFERENCE_INDIRECT 2
- #define WEBAUTHN_ATTESTATION_CONVEYANCE_PREFERENCE_DIRECT 3
- #define WEBAUTHN_ENTERPRISE_ATTESTATION_NONE 0
- #define WEBAUTHN_ENTERPRISE_ATTESTATION_VENDOR_FACILITATED 1
- #define WEBAUTHN_ENTERPRISE_ATTESTATION_PLATFORM_MANAGED 2
- #define WEBAUTHN_LARGE_BLOB_SUPPORT_NONE 0
- #define WEBAUTHN_LARGE_BLOB_SUPPORT_REQUIRED 1
- #define WEBAUTHN_LARGE_BLOB_SUPPORT_PREFERRED 2
- #define WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS_VERSION_1 1
- #define WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS_VERSION_2 2
- #define WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS_VERSION_3 3
- #define WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS_VERSION_4 4
- #define WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS_CURRENT_VERSION WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS_VERSION_4
- typedef struct _WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS {
- DWORD dwVersion;
- DWORD dwTimeoutMilliseconds;
- WEBAUTHN_CREDENTIALS CredentialList;
- WEBAUTHN_EXTENSIONS Extensions;
- DWORD dwAuthenticatorAttachment;
- WINBOOL bRequireResidentKey;
- DWORD dwUserVerificationRequirement;
- DWORD dwAttestationConveyancePreference;
- DWORD dwFlags;
- GUID *pCancellationId;
- PWEBAUTHN_CREDENTIAL_LIST pExcludeCredentialList;
- DWORD dwEnterpriseAttestation;
- DWORD dwLargeBlobSupport;
- WINBOOL bPreferResidentKey;
- } WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS, *PWEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS;
- typedef const WEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS *PCWEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS;
- #define WEBAUTHN_CRED_LARGE_BLOB_OPERATION_NONE 0
- #define WEBAUTHN_CRED_LARGE_BLOB_OPERATION_GET 1
- #define WEBAUTHN_CRED_LARGE_BLOB_OPERATION_SET 2
- #define WEBAUTHN_CRED_LARGE_BLOB_OPERATION_DELETE 3
- #define WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS_VERSION_1 1
- #define WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS_VERSION_2 2
- #define WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS_VERSION_3 3
- #define WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS_VERSION_4 4
- #define WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS_VERSION_5 5
- #define WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS_CURRENT_VERSION WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS_VERSION_5
- typedef struct _WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS {
- DWORD dwVersion;
- DWORD dwTimeoutMilliseconds;
- WEBAUTHN_CREDENTIALS CredentialList;
- WEBAUTHN_EXTENSIONS Extensions;
- DWORD dwAuthenticatorAttachment;
- DWORD dwUserVerificationRequirement;
- DWORD dwFlags;
- PCWSTR pwszU2fAppId;
- WINBOOL *pbU2fAppId;
- GUID *pCancellationId;
- PWEBAUTHN_CREDENTIAL_LIST pAllowCredentialList;
- DWORD dwCredLargeBlobOperation;
- DWORD cbCredLargeBlob;
- PBYTE pbCredLargeBlob;
- } WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS, *PWEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS;
- typedef const WEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS *PCWEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS;
- #define WEBAUTHN_ATTESTATION_DECODE_NONE 0
- #define WEBAUTHN_ATTESTATION_DECODE_COMMON 1
- #define WEBAUTHN_ATTESTATION_VER_TPM_2_0 L"2.0"
- typedef struct _WEBAUTHN_X5C {
- DWORD cbData;
- PBYTE pbData;
- } WEBAUTHN_X5C, *PWEBAUTHN_X5C;
- #define WEBAUTHN_COMMON_ATTESTATION_CURRENT_VERSION 1
- typedef struct _WEBAUTHN_COMMON_ATTESTATION {
- DWORD dwVersion;
- PCWSTR pwszAlg;
- LONG lAlg;
- DWORD cbSignature;
- PBYTE pbSignature;
- DWORD cX5c;
- PWEBAUTHN_X5C pX5c;
- PCWSTR pwszVer;
- DWORD cbCertInfo;
- PBYTE pbCertInfo;
- DWORD cbPubArea;
- PBYTE pbPubArea;
- } WEBAUTHN_COMMON_ATTESTATION, *PWEBAUTHN_COMMON_ATTESTATION;
- typedef const WEBAUTHN_COMMON_ATTESTATION *PCWEBAUTHN_COMMON_ATTESTATION;
- #define WEBAUTHN_ATTESTATION_TYPE_PACKED L"packed"
- #define WEBAUTHN_ATTESTATION_TYPE_U2F L"fido-u2f"
- #define WEBAUTHN_ATTESTATION_TYPE_TPM L"tpm"
- #define WEBAUTHN_ATTESTATION_TYPE_NONE L"none"
- #define WEBAUTHN_CREDENTIAL_ATTESTATION_VERSION_1 1
- #define WEBAUTHN_CREDENTIAL_ATTESTATION_VERSION_2 2
- #define WEBAUTHN_CREDENTIAL_ATTESTATION_VERSION_3 3
- #define WEBAUTHN_CREDENTIAL_ATTESTATION_VERSION_4 4
- #define WEBAUTHN_CREDENTIAL_ATTESTATION_CURRENT_VERSION WEBAUTHN_CREDENTIAL_ATTESTATION_VERSION_4
- typedef struct _WEBAUTHN_CREDENTIAL_ATTESTATION {
- DWORD dwVersion;
- PCWSTR pwszFormatType;
- DWORD cbAuthenticatorData;
- PBYTE pbAuthenticatorData;
- DWORD cbAttestation;
- PBYTE pbAttestation;
- DWORD dwAttestationDecodeType;
- PVOID pvAttestationDecode;
- DWORD cbAttestationObject;
- PBYTE pbAttestationObject;
- DWORD cbCredentialId;
- PBYTE pbCredentialId;
- WEBAUTHN_EXTENSIONS Extensions;
- DWORD dwUsedTransport;
- WINBOOL bEpAtt;
- WINBOOL bLargeBlobSupported;
- WINBOOL bResidentKey;
- } WEBAUTHN_CREDENTIAL_ATTESTATION, *PWEBAUTHN_CREDENTIAL_ATTESTATION;
- typedef const WEBAUTHN_CREDENTIAL_ATTESTATION *PCWEBAUTHN_CREDENTIAL_ATTESTATION;
- #define WEBAUTHN_CRED_LARGE_BLOB_STATUS_NONE 0
- #define WEBAUTHN_CRED_LARGE_BLOB_STATUS_SUCCESS 1
- #define WEBAUTHN_CRED_LARGE_BLOB_STATUS_NOT_SUPPORTED 2
- #define WEBAUTHN_CRED_LARGE_BLOB_STATUS_INVALID_DATA 3
- #define WEBAUTHN_CRED_LARGE_BLOB_STATUS_INVALID_PARAMETER 4
- #define WEBAUTHN_CRED_LARGE_BLOB_STATUS_NOT_FOUND 5
- #define WEBAUTHN_CRED_LARGE_BLOB_STATUS_MULTIPLE_CREDENTIALS 6
- #define WEBAUTHN_CRED_LARGE_BLOB_STATUS_LACK_OF_SPACE 7
- #define WEBAUTHN_CRED_LARGE_BLOB_STATUS_PLATFORM_ERROR 8
- #define WEBAUTHN_CRED_LARGE_BLOB_STATUS_AUTHENTICATOR_ERROR 9
- #define WEBAUTHN_ASSERTION_VERSION_1 1
- #define WEBAUTHN_ASSERTION_VERSION_2 2
- #define WEBAUTHN_ASSERTION_CURRENT_VERSION WEBAUTHN_ASSERTION_VERSION_2
- typedef struct _WEBAUTHN_ASSERTION {
- DWORD dwVersion;
- DWORD cbAuthenticatorData;
- PBYTE pbAuthenticatorData;
- DWORD cbSignature;
- PBYTE pbSignature;
- WEBAUTHN_CREDENTIAL Credential;
- DWORD cbUserId;
- PBYTE pbUserId;
- WEBAUTHN_EXTENSIONS Extensions;
- DWORD cbCredLargeBlob;
- PBYTE pbCredLargeBlob;
- DWORD dwCredLargeBlobStatus;
- } WEBAUTHN_ASSERTION, *PWEBAUTHN_ASSERTION;
- typedef const WEBAUTHN_ASSERTION *PCWEBAUTHN_ASSERTION;
- DWORD WINAPI WebAuthNGetApiVersionNumber(void);
- HRESULT WINAPI WebAuthNIsUserVerifyingPlatformAuthenticatorAvailable(WINBOOL *pbIsUserVerifyingPlatformAuthenticatorAvailable);
- HRESULT WINAPI WebAuthNAuthenticatorMakeCredential(HWND hWnd, PCWEBAUTHN_RP_ENTITY_INFORMATION pRpInformation, PCWEBAUTHN_USER_ENTITY_INFORMATION pUserInformation, PCWEBAUTHN_COSE_CREDENTIAL_PARAMETERS pPubKeyCredParams, PCWEBAUTHN_CLIENT_DATA pWebAuthNClientData, PCWEBAUTHN_AUTHENTICATOR_MAKE_CREDENTIAL_OPTIONS pWebAuthNMakeCredentialOptions, PWEBAUTHN_CREDENTIAL_ATTESTATION *ppWebAuthNCredentialAttestation);
- HRESULT WINAPI WebAuthNAuthenticatorGetAssertion(HWND hWnd, LPCWSTR pwszRpId, PCWEBAUTHN_CLIENT_DATA pWebAuthNClientData, PCWEBAUTHN_AUTHENTICATOR_GET_ASSERTION_OPTIONS pWebAuthNGetAssertionOptions, PWEBAUTHN_ASSERTION *ppWebAuthNAssertion);
- void WINAPI WebAuthNFreeCredentialAttestation(PWEBAUTHN_CREDENTIAL_ATTESTATION pWebAuthNCredentialAttestation);
- void WINAPI WebAuthNFreeAssertion(PWEBAUTHN_ASSERTION pWebAuthNAssertion);
- HRESULT WINAPI WebAuthNGetCancellationId(GUID* pCancellationId);
- HRESULT WINAPI WebAuthNCancelCurrentOperation(const GUID* pCancellationId);
- PCWSTR WINAPI WebAuthNGetErrorName(HRESULT hr);
- HRESULT WINAPI WebAuthNGetW3CExceptionDOMError(HRESULT hr);
- #ifdef __cplusplus
- }
- #endif
- #endif /* WINAPI_FAMILY_PARTITION */
- #endif /* _WEBAUTHN_H_ */
|