The English version of this specification is the only normative version. Non-normative translations may also be available.
Copyright © 2013-2020 FIDO Alliance All Rights Reserved.
This document defines the assertion format "WAV1CBOR" in order to use Web Authentication assertions through the FIDO UAF protocol.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current FIDO Alliance publications and the latest revision of this technical report can be found in the FIDO Alliance specifications index at https://fidoalliance.org/specifications/.
This document was published by the FIDO Alliance as a Proposed Standard. If you wish to make comments regarding this document, please Contact Us. All comments are welcome.
Implementation of certain elements of this Specification may require licenses under third party intellectual property rights, including without limitation, patent rights. The FIDO Alliance, Inc. and its Members and any other contributors to the Specification are not, and shall not be held, responsible in any manner for identifying or failing to identify any or all such third party intellectual property rights.
THIS FIDO ALLIANCE SPECIFICATION IS PROVIDED “AS IS” AND WITHOUT ANY WARRANTY OF ANY KIND, INCLUDING, WITHOUT LIMITATION, ANY EXPRESS OR IMPLIED WARRANTY OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
This document has been reviewed by FIDO Aliance Members and is endorsed as a Proposed Standard. It is a stable document and may be used as reference material or cited from another document. FIDO Alliance's role in making the Recommendation is to draw attention to the specification and to promote its widespread deployment.
Type names, attribute names and element names are written as code
.
String literals are enclosed in “”, e.g. “UAF-TLV”.
In formulas we use “|” to denote byte wise concatenation operations.
UAF specific terminology used in this document is defined in [FIDOGlossary].
All diagrams, examples, notes in this specification are non-normative.
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in [RFC2119].
This section is non-normative.
This document defines the assertion format "WAV1CBOR" in order to use Web Authentication assertions through the FIDO UAF protocol.
This section is normative.
The registration assertion for the assertion format "WAV1CBOR" is a TLV encoded object containing
the CBOR encoded authenticatorData
, the name of the attestation format, and the atestation statement itself.
TLV Structure | Description | |
---|---|---|
1 | UINT16 Tag | TAG_WAV1CBOR_REG_ASSERTION |
1.1 | UINT16 Length | Length of the structure. |
1.2 | UINT16 Tag | TAG_WAV1CBOR_REG_DATA |
1.2.1 | UINT16 Length | Length of the structure. |
1.2.2 | UINT8 tbsData | The binary authenticatorData structure as specified
in section 6.1 in [WebAuthn] with non-empty attestedCredentialData field being present
followed by (i.e. binary concatenation) the clientDataHash .
|
1.3 | UINT16 Tag | TAG_ATTESTATION_FORMAT |
1.3.1 | UINT16 Length | Length of Attestation Format |
1.3.2 | UINT8[] Attestation Format | Authenticator Attestation Format, see field "fmt" in section sctn-attestation in [WebAuthn] |
1.4 | UINT16 Tag | TAG_ATTESTATION_STATEMENT |
1.4.1 | UINT16 Length | Length of Attestation Statement |
1.4.2 | UINT8[] Attestation Statement | Authenticator Attestation Statement, see field "stmt" in section sctn-attestation in [WebAuthn]. This field contains the signature in sub-field "sig". |
The authentication assertion is a TLV structure containing the CBOR encoded authenticatorData
object,
the authenticator model name (AAGUID), the key identifier and the signature of the authenticatorData
object.
TLV Structure | Description | |
---|---|---|
1 | UINT16 Tag | TAG_WAV1CBOR_AUTH_ASSERTION |
1.1 | UINT16 Length | Length of the structure. |
1.2 | UINT16 Tag | TAG_WAV1CBOR_SIGNED_DATA |
1.2.1 | UINT16 Length | Length of the structure. |
1.2.2 | UINT8 tbsData | As described in step 11 in section 6.3.3 in [WebAuthn]: The binary authenticatorData structure as specified
in section 6.1 in [WebAuthn] with empty attestedCredentialData field being present
followed by (i.e. binary concatenation) the clientDataHash .
|
1.3 | UINT16 Tag | TAG_AAGUID |
1.3.1 | UINT16 Length | Length of AAGUID |
1.3.2 | UINT8[] AAGUID | Authenticator Attestation GUID, see section 6.4.1 in [WebAuthn] |
1.4 | UINT16 Tag | TAG_KEYID |
1.4.1 | UINT16 Length | Length of KeyID |
1.4.2 | UINT8[] KeyID | (binary value of) Credential ID (see definition of CredentialID in [WebAuthn]) |
1.5 | UINT16 Tag | TAG_SIGNATURE |
1.5.1 | UINT16 Length | Length of Signature |
1.5.2 | UINT8[] Signature | Signature calculated using UAuth.priv over tbsData - not including any TAGs nor the KeyID and AAGUID. |
This section is normative.
Refer to [UAFAuthnrCommands] document for more information about the TAGs and structure mentioned in this paragraph.
authenticatorIndex
.
If the authenticator cannot be located, then fail with error code
UAF_ASM_STATUS_AUTHENTICATOR_DISCONNECTED
.
authenticatorGetInfo
[FIDOCTAP].
Remember whether the authenticator supports residentKeys (rk
), clientPin
,
User Presence (up
), User Verification (uv
).
Also remember whether the authenticator is a roaming authenticator (plat=false
),
or a platform authenticator (plat=true
). If the connection fails, then fail with error code
UAF_ASM_STATUS_AUTHENTICATOR_DISCONNECTED
.
clientPin
is the requested user verification method (see UVM extension), but
step 2 indicated that clientPin is not yet set (i.e. clientPin
present but set to false),
then ask user to set (enroll) clientPin.
UAF_ASM_STATUS_USER_NOT_ENROLLED
.
UAF_ASM_STATUS_ACCESS_DENIED
ASMRequest.args.finalChallenge
using the
authenticator-specific hash function and store the result in FinalChallengeHash
.
An authenticator's preferred hash function information MUST meet the
algorithm defined in the AuthenticatorInfo.authenticationAlgorithm
field.
ASMRequest.exts
rk
to the
value of that extension and continue with the next extension.
ac
to the
value of that extension and continue with the next extension.
extensionsCBOR
. If no corresponding WebAuthn/FIDO2 extension is specified,
ignore this extension (if fail_if_unknown
is false) or return UAF_ASM_STATUS_ERROR
(if fail_if_unknown
is true).
result
containing the error code of that operation.
This interface has the following input parameters (see [FIDOCTAP]):
rk
, uv
, and up
).
The output parameters are (see [FIDOCTAP]):
rp.rpId
to the ASMRequest.args.AppID
user.Id
to the fido.uaf.userid
extension retrieved from ASMRequest.exts
;
set user.displayName
to ASMRequest.args.username
.
Fail if the fido.uaf.userid
extension is missing in ASMRequest.exts
.
clientDataHash
to FinalChallengeHash
pubKeyCredParams.type
to "public-key" and pubKeyCredParams.alg
to the preferred algorithm, e.g. "ES256".excludeList
to an empty listextensions
to the CBOR map extensionsCBOR
pinAuth
and pinProtocol
to the respective values supported by this ASM
(to the extent the underlying platform allows specifying these values).options
to an empty object and add items as follows
uvm.userVerificationMethod
includes one or more of the flags USER_VERIFY_FINGERPRINT
,
USER_VERIFY_PASSCODE
, USER_VERIFY_VOICEPRINT
, USER_VERIFY_FACEPRINT
,
USER_VERIFY_LOCATION
, USER_VERIFY_EYEPRINT
, USER_VERIFY_PATTERN
, or
USER_VERIFY_HANDPRINT
set options.userVerification
to true
and
set options.userPresence
to true
.
uvm.userVerificationMethod
is equal to USER_VERIFY_CLIENTPIN
set options.userVerification
to true
and
set options.userPresence
to false
.
uvm.userVerificationMethod
is equal to USER_VERIFY_PRESENCE
set options.userVerification
to false
and
set options.userPresence
to true
.
uvm.userVerificationMethod
is eequal to USER_VERIFY_NONE
set options.userVerification
to false
and
set options.userPresence
to false
.
If the authenticator uses clientPin but the clientPin was not set
(indicated by CTAP2_ERR_PIN_NOT_SET
), the ASM should ask the user for the clientPin and provide it to the authenticator.
result
is not equal to CTAP2_OK
and retry cannot fix the problem, then
map the CTAP error code to a UAF ASM error code using the table in section 5. Mapping CTAP2 error codes to ASM error codes
and return the resulting error code.
TAG_WAV1CBOR_REG_ASSERTION
structure:
finalChallengeHash
into field TAG_WAV1CBOR_SIGNED_DATA
TAG_ATTESTATION_FORMAT
TAG_ATTESTATION_STATEMENT
RegisterOut
object
RegisterOut.assertionScheme
to "WAV1CBOR"TAG_WAV1CBOR_REG_ASSERTION
in base64url format and set as RegisterOut.assertion
.
ASMResponse.responseData
to RegisterOut
.ASMResponse.statusCode
to the correct status code corresponding to the result
received earlier.ASMResponse.exts
to emptyASMResponse
objecta.assertionScheme
== "WAV1CBOR" AND a.assertion.TAG_WAV1CBOR_REG_ASSERTION
contains
TAG_WAV1CBOR_SIGNED_DATA
as first element:
authenticatorData
from TAG_WAV1CBOR_SIGNED_DATA.tbsData
claimedAAGUID
from authenticatorData.attestedCredentialData.AAGUID
.a.assertionScheme
matches Metadata(claimedAAGUID).assertionScheme
claimedAAGUID
indeed matches the policy specified
in the registration request.
Depending on the policy (e.g. in the case of AND combinations), it
might be required to evaluate other assertions included in this RegistrationResponse
in
order to determine whether this AAGUID matches the policy.
claimedAAGUID
(field authenticationAlgs
).fcp
is of type FinalChallengeParams [UAFProtocol], then
hash RegistrationResponse.fcParams
using hashing algorithm
suitable for this authenticator type. Look up the hash
algorithm in authenticator metadata, field AuthenticationAlgs
.
It is the hash algorithm associated with the first entry
related to a constant with prefix ALG_SIGN.
FCHash = hash(RegistrationResponse.fcParams)
fcp
is of type CollectedClientData [UAFProtocol], then
hash RegistrationResponse.fcParams
using hashing algorithm
specified in fcp.hashAlg
.
FCHash = hash(RegistrationResponse.fcParams)
Metadata(claimedAAGUID).AttestationType
for the claimedAAGUID
and make sure
that a.assertion.TAG_WAV1CBOR_REG_ASSERTION
contains the most preferred
attestation tag specified in field MatchCriteria.attestationTypes
in RegistrationRequest.policy
(if this field is present).
a.assertion.TAG_WAV1CBOR_REG_ASSERTION
doesn't contain the
preferred attestation - it is RECOMMENDED to skip this
assertion and continue with next onetbsData
to the data contained in a.assertion.tbsData
.authenticatorData
to the CBOR object tbsData
starts with.
Use the "length" field of the CBOR object to determine its end.clientDataHash
to the remaining bytes of the tbsData
(i.e. the bytes following the CBOR object).clientDataHash
== FCHash
up
and uv
bits from authenticatorData
.
Verify whether these bits match the UVM
extension sent in the request. Fail if the verification result is not acceptable.
up
=false and uv
=false means silent authentication (USER_VERIFY_NONE
)up
=true and uv
=false means user presence check only (USER_VERIFY_PRESENCE
)up
=false and uv
=true means user verification that doesn't provide user presence check, e.g. client Pin
or some other user verification method not necessarily implemented fully inside the authenticator
boundary (USER_VERIFY_CLIENTPIN
)up
=true and uv
=true means user verification using a user verification method implemented
inside the authenticator boundary (e.g. USER_VERIFY_FINGERPRINT, ...) or client Pin plus user presence check
(USER_VERIFY_CLIENTPIN
) AND USER_VERIFY_PRESENCE
- depending on the authenticator
capabilities as declared in the related Metadata Statement.UVM
extension is included in the response, extract this value and compare it
verify whether it matches the extension from the request. Fail if the verification result is not acceptable.
a.assertion.TAG_WAV1CBOR_REG_ASSERTION.TAG_ATTESTATION_STATEMENT
contains ATTESTATION_BASIC_FULL
tag
AttestationRootCertificates
for the claimedAAGUID in the
metadata [FIDOMetadataStatement] contains at least one element:
TAG_ATTESTATION_CERT
tags from
a.assertion.TAG_WAV1CBOR_REG_ASSERTION.ATTESTATION_BASIC_FULL
object.
The occurrences are ordered (see [UAFAuthnrCommands])
and represent the attestation certificate followed by the related
certificate chain.AttestationRootCertificates
for the claimedAAGUID in authenticator Metadata, field AttestationRootCertificates
.a.assertion.TAG_WAV1CBOR_REG_ASSERTION.TAG_ATTESTATION_STATEMENT.sig
using the attestation certificate (obtained before).Metadata(claimedAAGUID).AttestationRootCertificates
for this claimedAAGUID is
empty - continue with next assertiona.assertion.TAG_WAV1CBOR_REG_ASSERTION.TAG_ATESTATION_STATEMENT
contains an object of type ATTESTATION_BASIC_SURROGATE
AttestationRootCertificates
for the claimedAAGUID in the
metadata is not empty - continue with next assertion
(as the AAGUID obviously is expecting a different attestation method).a.assertion.TAG_WAV1CBOR_REG_ASSERTION
contains an object of type ATTESTATION_ECDAA
ecdaaTrustAnchors
for the claimedAAGUID in the
metadata [FIDOMetadataStatement] contains at least one element:
ecdaaTrustAnchors
entries, perform the
ECDAA Verify operation as specified in [FIDOEcdaaAlgorithm].
ecdaaTrustAnchors
entryMetadata(claimedAAID).ecdaaTrustAnchors
for this claimedAAGUID is
empty - continue with next assertiona.assertion.TAG_UAFV1_REG_ASSERTION
contains
another TAG_ATTESTATION
tag - verify the attestation by following
appropriate processing rules applicable to that attestation.
Currently this document defines the processing rules for Basic Attestation and
direct anonymous attestation (ECDAA).
authenticatorData.attestedCredentialData.credentialPubKey
into PublicKey,
authenticatorData.attestedCredentialData.credentialID
into KeyID,
authenticatorData.counter
into SignCounter,
authenticatorData.attestedCredentialData.AAGUID
into AAGUID.
authenticatorIndex
.
If the authenticator cannot be located, then fail with UAF_ASM_STATUS_AUTHENTICATOR_DISCONNECTED
.
callerid
against the one stored at registration time
and return UAF_ASM_STATUS_ACCESS_DENIED
if it doesn't match.
AuthenticateIn.finalChallenge
using the preferred authenticator-specific
hash function (FinalChallengeHash
).
The authenticator's preferred hash function information MUST meet the
algorithm defined in the AuthenticatorInfo.authenticationAlgorithm
field.
KeyIDRecords
of KeyID, related KeyHandle and related usernameAuthenticateIn.keyIDs
is not empty,
AuthenticateIn.appID
and AuthenticateIn.keyIDs
and matching entry into KeyIDRecords
UAF_ASM_STATUS_KEY_DISAPPEARED_PERMANENTLY
if the related key
disappeared permanently from the authenticator.UAF_ASM_STATUS_ACCESS_DENIED
if no entry has been found.AuthenticateIn.keyIDs
add an entry in KeyIDRecords
with entry.KeyID
and entry.KeyHandle
set to the respective keyID in AuthenticateIn.keyIDs
. Set entry.userName
to empty.
AuthenticateIn.keyIDs
is empty, lookup all KeyHandles
matching this request
and add an entry in KeyIDRecords
with entry.KeyID
and entry.KeyHandle
set to the respective KeyHandles
. Set entry.userName
the related userName.
KeyIDRecords
containes multiple entries,
show the related distinct usernames and ask the user to choose a single username.
Remember the KeyHandle
and the related KeyID
to this key.
AuthenticateIn.transaction
is NOT empty then select the
entry n
with the content type best matching the authenticator capabilities.
AuthenticateIn.transaction[n].contentType
== "text/plain"
then create a corresponding txAuthSimple
extension in extensionsCBOR
.
AuthenticateIn.transaction[n].contentType
!= "text/plain"
then create a corresponding txAuthGeneric
extension in extensionsCBOR
.
ASMRequest.exts
create a corresponding WebAuthn/FIDO2 extension (see [WebAuthn])
extension in extensionsCBOR
. If no corrsponding WebAuthn/FIDO2 extension is specified, ignore this extension.
result
containing the error code of that operation.
authenticatorGetAssertion has the following input parameters (see [FIDOCTAP]):
up
for user presence
and uv
for user verification).The output parameters are (see [FIDOCTAP]):
rpId
to the ASMRequest.args.AppID
clientDataHash
to FinalChallengeHash
allowList
to the KeyHandle
remembered earlierextensions
to the CBOR map extensionsCBOR
pinAuth
and pinProtocol
to the respective values supported by this ASM
(to the extent the underlying platform allows specifying these values).options
to an empty object and add items as follows
uvm.userVerificationMethod
includes one or more of the flags USER_VERIFY_FINGERPRINT
,
USER_VERIFY_PASSCODE
, USER_VERIFY_VOICEPRINT
, USER_VERIFY_FACEPRINT
,
USER_VERIFY_LOCATION
, USER_VERIFY_EYEPRINT
, USER_VERIFY_PATTERN
, or
USER_VERIFY_HANDPRINT
set options.uv
to true
and
set options.up
to true
.
uvm.userVerificationMethod
is equal to USER_VERIFY_CLIENTPIN
set options.uv
to true
and
set options.up
to false
. Remember to provide the clientPIN to the authenticator.
uvm.userVerificationMethod
is equal to USER_VERIFY_PRESENCE
set options.uv
to false
and
set options.up
to true
.
uvm.userVerificationMethod
is equal to USER_VERIFY_NONE
set options.uv
to false
and
set options.up
to false
.
If the authenticator uses clientPin but the clientPin was not set
(indicated by CTAP2_ERR_PIN_NOT_SET
), the ASM should ask the user for the clientPin and provide it to the authenticator.
result
is not equal to CTAP2_OK
and retry cannot fix the problem, then
map the CTAP error code to a UAF ASM error code using the table in section 5. Mapping CTAP2 error codes to ASM error codes
and return the resulting error code.
numberOfCredentials
in the response is > 1, then follow the rules in section "Client Logic" [FIDOCTAP] to receive and process the remaining (numberOfCredentials
-1) responses
(see authenticatorGetNextAssertion
in [FIDOCTAP]).
TAG_WAV1CBOR_AUTH_ASSERTION
structure.
AAGUID
(if known) into the respective TLV fields. Otherwise set the field to an empty value (zero length).
In the case of a platform authenticator, the AAGUID
value can be remembered at registration time.
In the case of a roaming authenticator, it might be possible to call
authenticatorGetInfo
[FIDOCTAP] which provides the AAGUID
in the response.
KeyID
into the respective TLV field.result.authData
into the value of the TAG_WAV1CBOR_SIGNED_DATA
field.result.signature
into the value of the TAG_SIGNATURE
field.AuthenticateOut
object
AuthenticateOut.assertionScheme
to "WAV1CBOR"
TAG_WAV1CBOR_AUTH_ASSERTION
in base64url format and
set as AuthenticateOut.assertion
ASMResponse.responseData
to AuthenticateOut
object.ASMResponse.statusCode
to the correct status code corresponding to the result
received earlier.ASMResponse.exts
to emptyASMResponse
objectInstead of skipping the assertion according to step 6.5. in section 3.5.7.5 [UAFProtocol], follow these rules:
a.assertionScheme
== "WAV1CBOR" AND a.assertion
starts with a valid structure
as defined in section 3.2 Authentication Assertion, then
tbsData
to the data contained in a.assertion.tbsData
.authenticatorData
to the CBOR object tbsData
starts with.
Use the "length" field of the CBOR object to determine its end.clientDataHash
to the remaining bytes of the tbsData
(i.e. the bytes following the CBOR object).claimedAAGUID
from a.assertion.AAGUID
(note that it might be empty).claimedKeyID
from a.assertion.KeyID
.UAuth.pub
associated with (claimedAAGUID
, claimedKeyID
) in the user's record.
If claimedAAGUID
is empty, search for a matching claimedKeyID
.
claimedAAGUID
is empty, set it to the AAGUID
stored along with UAuth.pub
a.assertionScheme
matches Metadata(claimedAAGUID).assertionScheme
claimedAAGUID
indeed matches the policy of the Authentication Request.
authenticatorData.SignCounter
and make sure it is either not supported by the authenticator
(i.e. the value provided and the value stored in the user's record are
both 0 or the value isKeyRestricted is set to 'false' in the related Metadata Statement)
or it has been incremented (compared to the value stored in the user's record)
AuthenticationAlgs
)
fcp
is of type FinalChallengeParams,
then hash AuthenticationResponse.FinalChallengeParams
using the hashing
algorithm suitable for this authenticator type. Look up the
hash algorithm in authenticator Metadata, field
AuthenticationAlgs
. It is the hash algorithm associated with
the first entry related to a constant with prefix ALG_SIGN.
FCHash = hash(AuthenticationResponse.FinalChallengeParams)
fcp
is of type CollectedClientData [UAFProtocol], then
hash AuthenticationResponse.fcParams
using hashing algorithm
specified in fcp.hashAlg
.
FCHash = hash(AuthenticationResponse.fcParams)
clientDataHash
== FCHash
up
and uv
bits from authenticatorData
.
Verify whether these bits match the UVM
extension sent in the request. Fail if the verification result is not acceptable.
up
=false and uv
=false means silent authentication (USER_VERIFY_NONE
)up
=true and uv
=false means user presence check only (USER_VERIFY_PRESENCE
)up
=false and uv
=true means user verification that doesn't provide user presence, e.g. client Pin
or some other user verification method not necessarily implemented fully inside the authenticator
boundary (USER_VERIFY_CLIENTPIN
)up
=true and uv
=true means user verification using a user verification method implemented
inside the authenticator boundary (e.g. USER_VERIFY_FINGERPRINT, ...) or client Pin plus user presence check
(USER_VERIFY_CLIENTPIN
) AND USER_VERIFY_PRESENCE
- depending on the authenticator
capabilities as declared in the related Metadata Statement.UVM
extension is included in the response, extract this value and compare it
verify whether it matches the extension from the request. Fail if the verification result is not acceptable.
authenticatorData
contains "txAuthSimple" (see section 10.2 [WebAuthn])
or "txAuthGeneric" (see section 10.3 [WebAuthn]) extension(s),
The transaction/transaction hash included in this AuthenticationResponse
must match the transaction content specified in the related AuthenticationRequest
.
As FIDO doesn’t mandate any specific FIDO Server API, the transaction content could be cached
by any relying party software component, e.g. the FIDO Server or the relying party Web Application.
cachedTransaction
add hash(cachedTransaction)
into
cachedTransactionHashList
cachedTransactionHashList
UAuth.pub
key found in step 1.9 and the appropriate authentication algorithm to
verify the signature a.assertion.Signature
of the to-be-signed object tbsData
.
SignCounter
in user's record with
authenticatorData.SignCounter
.
The values of claimedAAGUID
and claimedKeyID
are now
confirmed since the public key we looked up using those values was the correct one.
CTAP2 Code | CTAP2 Name | ASM Error Name |
---|---|---|
0x00 | CTAP1_ERR_SUCCESS, CTAP2_OK | UAF_ASM_STATUS_OK |
0x01 | CTAP1_ERR_INVALID_COMMAND | UAF_ASM_STATUS_ERROR |
0x02 | CTAP1_ERR_INVALID_PARAMETER | UAF_ASM_STATUS_ERROR |
0x03 | CTAP1_ERR_INVALID_LENGTH | UAF_ASM_STATUS_ERROR |
0x04 | CTAP1_ERR_INVALID_SEQ | UAF_ASM_STATUS_ERROR |
0x05 | CTAP1_ERR_TIMEOUT | UAF_ASM_STATUS_USER_NOT_RESPONSIVE |
0x06 | CTAP1_ERR_CHANNEL_BUSY | UAF_ASM_STATUS_ERROR |
0x0A | CTAP1_ERR_LOCK_REQUIRED | UAF_ASM_STATUS_ERROR |
0x0B | CTAP1_ERR_INVALID_CHANNEL | UAF_ASM_STATUS_ERROR |
0x11 | CTAP2_ERR_CBOR_UNEXPECTED_TYPE | UAF_ASM_STATUS_ERROR |
0x12 | CTAP2_ERR_INVALID_CBOR | UAF_ASM_STATUS_ERROR |
0x14 | CTAP2_ERR_MISSING_PARAMETER | UAF_ASM_STATUS_ERROR |
0x15 | CTAP2_ERR_LIMIT_EXCEEDED | UAF_ASM_STATUS_ERROR |
0x16 | CTAP2_ERR_UNSUPPORTED_EXTENSION | UAF_ASM_STATUS_ERROR |
0x19 | CTAP2_ERR_CREDENTIAL_EXCLUDED | UAF_ASM_STATUS_ERROR |
0x21 | CTAP2_ERR_PROCESSING | UAF_ASM_STATUS_ERROR |
0x22 | CTAP2_ERR_INVALID_CREDENTIAL | UAF_ASM_STATUS_ERROR |
0x23 | CTAP2_ERR_USER_ACTION_PENDING | UAF_ASM_STATUS_USER_NOT_RESPONSIVE |
0x24 | CTAP2_ERR_OPERATION_PENDING | UAF_ASM_STATUS_ERROR |
0x25 | CTAP2_ERR_NO_OPERATIONS | UAF_ASM_STATUS_ERROR |
0x26 | CTAP2_ERR_UNSUPPORTED_ALGORITHM | UAF_ASM_STATUS_ERROR |
0x27 | CTAP2_ERR_OPERATION_DENIED | UAF_ASM_STATUS_ACCESS_DENIED |
0x28 | CTAP2_ERR_KEY_STORE_FULL | UAF_ASM_STATUS_INSUFFICIENT_AUTHENTICATOR_RESOURCES |
0x2A | CTAP2_ERR_NO_OPERATION_PENDING | UAF_ASM_STATUS_ERROR |
0x2B | CTAP2_ERR_UNSUPPORTED_OPTION | UAF_ASM_STATUS_ERROR |
0x2C | CTAP2_ERR_INVALID_OPTION | UAF_ASM_STATUS_ERROR |
0x2D | CTAP2_ERR_KEEPALIVE_CANCEL | UAF_ASM_STATUS_ERROR |
0x2E | CTAP2_ERR_NO_CREDENTIALS | UAF_ASM_STATUS_ERROR |
0x2F | CTAP2_ERR_USER_ACTION_TIMEOUT | UAF_ASM_STATUS_USER_NOT_RESPONSIVE |
0x30 | CTAP2_ERR_NOT_ALLOWED | UAF_ASM_STATUS_ERROR |
0x31 | CTAP2_ERR_PIN_INVALID | UAF_ASM_STATUS_ACCESS_DENIED |
0x32 | CTAP2_ERR_PIN_BLOCKED | UAF_ASM_STATUS_USER_LOCKOUT |
0x33 | CTAP2_ERR_PIN_AUTH_INVALID | UAF_ASM_STATUS_ACCESS_DENIED |
0x34 | CTAP2_ERR_PIN_AUTH_BLOCKED | UAF_ASM_STATUS_USER_LOCKOUT |
0x35 | CTAP2_ERR_PIN_NOT_SET | UAF_ASM_STATUS_USER_NOT_ENROLLED |
0x36 | CTAP2_ERR_PIN_REQUIRED | UAF_ASM_STATUS_ACCESS_DENIED |
0x37 | CTAP2_ERR_PIN_POLICY_VIOLATION | UAF_ASM_STATUS_ACCESS_DENIED |
0x38 | CTAP2_ERR_PIN_TOKEN_EXPIRED | UAF_ASM_STATUS_ACCESS_DENIED |
0x39 | CTAP2_ERR_REQUEST_TOO_LARGE | UAF_ASM_STATUS_INSUFFICIENT_AUTHENTICATOR_RESOURCES |
0x3A | CTAP2_ERR_ACTION_TIMEOUT | UAF_ASM_STATUS_USER_NOT_RESPONSIVE |
0x3B | CTAP2_ERR_UP_REQUIRED | UAF_ASM_STATUS_ACCESS_DENIED |
0x7F | CTAP1_ERR_OTHER | UAF_ASM_STATUS_ERROR |
0xDF | CTAP2_ERR_SPEC_LAST | UAF_ASM_STATUS_ERROR |
0xE0 | CTAP2_ERR_EXTENSION_FIRST | UAF_ASM_STATUS_ERROR |
0xEF | CTAP2_ERR_EXTENSION_LAST | UAF_ASM_STATUS_ERROR |
0xF0 | CTAP2_ERR_VENDOR_FIRST | UAF_ASM_STATUS_ERROR |
0xFF | CTAP2_ERR_VENDOR_LAST | UAF_ASM_STATUS_ERROR |