new error codes and enum cleanups
This commit is contained in:
@@ -176,11 +176,12 @@ pub enum AuthenticatorTransport {
|
|||||||
|
|
||||||
impl From<AuthenticatorTransport> for cbor::Value {
|
impl From<AuthenticatorTransport> for cbor::Value {
|
||||||
fn from(transport: AuthenticatorTransport) -> Self {
|
fn from(transport: AuthenticatorTransport) -> Self {
|
||||||
|
use AuthenticatorTransport::*;
|
||||||
match transport {
|
match transport {
|
||||||
AuthenticatorTransport::Usb => "usb",
|
Usb => "usb",
|
||||||
AuthenticatorTransport::Nfc => "nfc",
|
Nfc => "nfc",
|
||||||
AuthenticatorTransport::Ble => "ble",
|
Ble => "ble",
|
||||||
AuthenticatorTransport::Internal => "internal",
|
Internal => "internal",
|
||||||
}
|
}
|
||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
@@ -190,12 +191,13 @@ impl TryFrom<cbor::Value> for AuthenticatorTransport {
|
|||||||
type Error = Ctap2StatusCode;
|
type Error = Ctap2StatusCode;
|
||||||
|
|
||||||
fn try_from(cbor_value: cbor::Value) -> Result<Self, Ctap2StatusCode> {
|
fn try_from(cbor_value: cbor::Value) -> Result<Self, Ctap2StatusCode> {
|
||||||
|
use AuthenticatorTransport::*;
|
||||||
let transport_string = extract_text_string(cbor_value)?;
|
let transport_string = extract_text_string(cbor_value)?;
|
||||||
match &transport_string[..] {
|
match &transport_string[..] {
|
||||||
"usb" => Ok(AuthenticatorTransport::Usb),
|
"usb" => Ok(Usb),
|
||||||
"nfc" => Ok(AuthenticatorTransport::Nfc),
|
"nfc" => Ok(Nfc),
|
||||||
"ble" => Ok(AuthenticatorTransport::Ble),
|
"ble" => Ok(Ble),
|
||||||
"internal" => Ok(AuthenticatorTransport::Internal),
|
"internal" => Ok(Internal),
|
||||||
_ => Err(Ctap2StatusCode::CTAP2_ERR_CBOR_UNEXPECTED_TYPE),
|
_ => Err(Ctap2StatusCode::CTAP2_ERR_CBOR_UNEXPECTED_TYPE),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -469,10 +471,11 @@ impl TryFrom<cbor::Value> for CredentialProtectionPolicy {
|
|||||||
type Error = Ctap2StatusCode;
|
type Error = Ctap2StatusCode;
|
||||||
|
|
||||||
fn try_from(cbor_value: cbor::Value) -> Result<Self, Ctap2StatusCode> {
|
fn try_from(cbor_value: cbor::Value) -> Result<Self, Ctap2StatusCode> {
|
||||||
|
use CredentialProtectionPolicy::*;
|
||||||
match extract_integer(cbor_value)? {
|
match extract_integer(cbor_value)? {
|
||||||
0x01 => Ok(CredentialProtectionPolicy::UserVerificationOptional),
|
0x01 => Ok(UserVerificationOptional),
|
||||||
0x02 => Ok(CredentialProtectionPolicy::UserVerificationOptionalWithCredentialIdList),
|
0x02 => Ok(UserVerificationOptionalWithCredentialIdList),
|
||||||
0x03 => Ok(CredentialProtectionPolicy::UserVerificationRequired),
|
0x03 => Ok(UserVerificationRequired),
|
||||||
_ => Err(Ctap2StatusCode::CTAP2_ERR_CBOR_UNEXPECTED_TYPE),
|
_ => Err(Ctap2StatusCode::CTAP2_ERR_CBOR_UNEXPECTED_TYPE),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -683,27 +686,18 @@ impl TryFrom<CoseKey> for ecdh::PubKey {
|
|||||||
|
|
||||||
#[cfg_attr(any(test, feature = "debug_ctap"), derive(Debug, PartialEq))]
|
#[cfg_attr(any(test, feature = "debug_ctap"), derive(Debug, PartialEq))]
|
||||||
pub enum ClientPinSubCommand {
|
pub enum ClientPinSubCommand {
|
||||||
GetPinRetries,
|
GetPinRetries = 0x01,
|
||||||
GetKeyAgreement,
|
GetKeyAgreement = 0x02,
|
||||||
SetPin,
|
SetPin = 0x03,
|
||||||
ChangePin,
|
ChangePin = 0x04,
|
||||||
GetPinUvAuthTokenUsingPin,
|
GetPinUvAuthTokenUsingPin = 0x05,
|
||||||
GetPinUvAuthTokenUsingUv,
|
GetPinUvAuthTokenUsingUv = 0x06,
|
||||||
GetUvRetries,
|
GetUvRetries = 0x07,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<ClientPinSubCommand> for cbor::Value {
|
impl From<ClientPinSubCommand> for cbor::Value {
|
||||||
fn from(subcommand: ClientPinSubCommand) -> Self {
|
fn from(subcommand: ClientPinSubCommand) -> Self {
|
||||||
match subcommand {
|
(subcommand as u64).into()
|
||||||
ClientPinSubCommand::GetPinRetries => 0x01,
|
|
||||||
ClientPinSubCommand::GetKeyAgreement => 0x02,
|
|
||||||
ClientPinSubCommand::SetPin => 0x03,
|
|
||||||
ClientPinSubCommand::ChangePin => 0x04,
|
|
||||||
ClientPinSubCommand::GetPinUvAuthTokenUsingPin => 0x05,
|
|
||||||
ClientPinSubCommand::GetPinUvAuthTokenUsingUv => 0x06,
|
|
||||||
ClientPinSubCommand::GetUvRetries => 0x07,
|
|
||||||
}
|
|
||||||
.into()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -711,16 +705,19 @@ impl TryFrom<cbor::Value> for ClientPinSubCommand {
|
|||||||
type Error = Ctap2StatusCode;
|
type Error = Ctap2StatusCode;
|
||||||
|
|
||||||
fn try_from(cbor_value: cbor::Value) -> Result<Self, Ctap2StatusCode> {
|
fn try_from(cbor_value: cbor::Value) -> Result<Self, Ctap2StatusCode> {
|
||||||
|
use ClientPinSubCommand::*;
|
||||||
let subcommand_int = extract_unsigned(cbor_value)?;
|
let subcommand_int = extract_unsigned(cbor_value)?;
|
||||||
match subcommand_int {
|
match subcommand_int {
|
||||||
0x01 => Ok(ClientPinSubCommand::GetPinRetries),
|
0x01 => Ok(GetPinRetries),
|
||||||
0x02 => Ok(ClientPinSubCommand::GetKeyAgreement),
|
0x02 => Ok(GetKeyAgreement),
|
||||||
0x03 => Ok(ClientPinSubCommand::SetPin),
|
0x03 => Ok(SetPin),
|
||||||
0x04 => Ok(ClientPinSubCommand::ChangePin),
|
0x04 => Ok(ChangePin),
|
||||||
0x05 => Ok(ClientPinSubCommand::GetPinUvAuthTokenUsingPin),
|
0x05 => Ok(GetPinUvAuthTokenUsingPin),
|
||||||
0x06 => Ok(ClientPinSubCommand::GetPinUvAuthTokenUsingUv),
|
0x06 => Ok(GetPinUvAuthTokenUsingUv),
|
||||||
0x07 => Ok(ClientPinSubCommand::GetUvRetries),
|
0x07 => Ok(GetUvRetries),
|
||||||
// TODO(kaczmarczyck) what is the correct status code for this error?
|
#[cfg(feature = "with_ctap2_1")]
|
||||||
|
_ => Err(Ctap2StatusCode::CTAP2_ERR_INVALID_SUBCOMMAND),
|
||||||
|
#[cfg(not(feature = "with_ctap2_1"))]
|
||||||
_ => Err(Ctap2StatusCode::CTAP1_ERR_INVALID_PARAMETER),
|
_ => Err(Ctap2StatusCode::CTAP1_ERR_INVALID_PARAMETER),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ pub enum Ctap2StatusCode {
|
|||||||
CTAP2_ERR_MISSING_PARAMETER = 0x14,
|
CTAP2_ERR_MISSING_PARAMETER = 0x14,
|
||||||
CTAP2_ERR_LIMIT_EXCEEDED = 0x15,
|
CTAP2_ERR_LIMIT_EXCEEDED = 0x15,
|
||||||
CTAP2_ERR_UNSUPPORTED_EXTENSION = 0x16,
|
CTAP2_ERR_UNSUPPORTED_EXTENSION = 0x16,
|
||||||
|
#[cfg(feature = "with_ctap2_1")]
|
||||||
|
CTAP2_ERR_FP_DATABASE_FULL = 0x17,
|
||||||
|
#[cfg(feature = "with_ctap2_1")]
|
||||||
|
CTAP2_ERR_PC_STORAGE_FULL = 0x18,
|
||||||
CTAP2_ERR_CREDENTIAL_EXCLUDED = 0x19,
|
CTAP2_ERR_CREDENTIAL_EXCLUDED = 0x19,
|
||||||
CTAP2_ERR_PROCESSING = 0x21,
|
CTAP2_ERR_PROCESSING = 0x21,
|
||||||
CTAP2_ERR_INVALID_CREDENTIAL = 0x22,
|
CTAP2_ERR_INVALID_CREDENTIAL = 0x22,
|
||||||
@@ -60,6 +64,10 @@ pub enum Ctap2StatusCode {
|
|||||||
CTAP2_ERR_ACTION_TIMEOUT = 0x3A,
|
CTAP2_ERR_ACTION_TIMEOUT = 0x3A,
|
||||||
CTAP2_ERR_UP_REQUIRED = 0x3B,
|
CTAP2_ERR_UP_REQUIRED = 0x3B,
|
||||||
CTAP2_ERR_UV_BLOCKED = 0x3C,
|
CTAP2_ERR_UV_BLOCKED = 0x3C,
|
||||||
|
#[cfg(feature = "with_ctap2_1")]
|
||||||
|
CTAP2_ERR_INTEGRITY_FAILURE = 0x3D,
|
||||||
|
#[cfg(feature = "with_ctap2_1")]
|
||||||
|
CTAP2_ERR_INVALID_SUBCOMMAND = 0x3E,
|
||||||
CTAP1_ERR_OTHER = 0x7F,
|
CTAP1_ERR_OTHER = 0x7F,
|
||||||
CTAP2_ERR_SPEC_LAST = 0xDF,
|
CTAP2_ERR_SPEC_LAST = 0xDF,
|
||||||
CTAP2_ERR_EXTENSION_FIRST = 0xE0,
|
CTAP2_ERR_EXTENSION_FIRST = 0xE0,
|
||||||
|
|||||||
Reference in New Issue
Block a user