Skip to content

Commit f5d8e57

Browse files
0x0ecerobin-nitrokey
authored andcommitted
ctap2.3: getinfo 0x19-0x1F fields + cbor type-mismatch error code
1 parent d57ed81 commit f5d8e57

3 files changed

Lines changed: 61 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88

99
[Unreleased]: https://github.com/trussed-dev/ctap-types/compare/0.6.0-rc.2...HEAD
1010

11-
-
11+
- Add fields 0x19 to 0x1F to `ctap2::get_info::Response`.
12+
- Map `cbor_smol::Error::DeserializeBadBool` to `Error::CborUnexpectedType` instead of `Error::InvalidCbor`.
1213

1314
## [0.6.0-rc.2] 2026-05-27
1415

src/ctap2.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ impl From<CtapMappingError> for Error {
6464
CtapMappingError::InvalidCommand(_cmd) => Error::InvalidCommand,
6565
CtapMappingError::ParsingError(cbor_error) => match cbor_error {
6666
cbor_smol::Error::SerdeMissingField => Error::MissingParameter,
67+
cbor_smol::Error::DeserializeBadBool => Error::CborUnexpectedType,
6768
_ => Error::InvalidCbor,
6869
},
6970
}

src/ctap2/get_info.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
use crate::webauthn::FilteredPublicKeyCredentialParameters;
2+
#[cfg(feature = "get-info-full")]
3+
use crate::String;
24
use crate::{Bytes, TryFromStrError, Vec};
35
use serde::{Deserialize, Serialize};
46
use serde_indexed::{DeserializeIndexed, SerializeIndexed};
@@ -133,6 +135,48 @@ pub struct Response {
133135
#[cfg(feature = "get-info-full")]
134136
#[serde(skip_serializing_if = "Option::is_none")]
135137
pub long_touch_for_reset: Option<bool>,
138+
139+
// 0x19
140+
// FIDO_2_3
141+
#[cfg(feature = "get-info-full")]
142+
#[serde(skip_serializing_if = "Option::is_none")]
143+
pub enc_identifier: Option<String<64>>,
144+
145+
// 0x1A
146+
// FIDO_2_3
147+
#[cfg(feature = "get-info-full")]
148+
#[serde(skip_serializing_if = "Option::is_none")]
149+
pub transports_for_reset: Option<Vec<String<8>, 4>>,
150+
151+
// 0x1B
152+
// FIDO_2_3
153+
#[cfg(feature = "get-info-full")]
154+
#[serde(skip_serializing_if = "Option::is_none")]
155+
pub pin_complexity_policy: Option<bool>,
156+
157+
// 0x1C
158+
// FIDO_2_3
159+
#[cfg(feature = "get-info-full")]
160+
#[serde(skip_serializing_if = "Option::is_none")]
161+
pub pin_complexity_policy_url: Option<String<128>>,
162+
163+
// 0x1D
164+
// FIDO_2_3
165+
#[cfg(feature = "get-info-full")]
166+
#[serde(skip_serializing_if = "Option::is_none")]
167+
pub max_pin_length: Option<u8>,
168+
169+
// 0x1E
170+
// FIDO_2_3
171+
#[cfg(feature = "get-info-full")]
172+
#[serde(skip_serializing_if = "Option::is_none")]
173+
pub enc_cred_store_state: Option<String<64>>,
174+
175+
// 0x1F
176+
// FIDO_2_3
177+
#[cfg(feature = "get-info-full")]
178+
#[serde(skip_serializing_if = "Option::is_none")]
179+
pub authenticator_config_commands: Option<Vec<u8, 4>>,
136180
}
137181

138182
impl Default for Response {
@@ -199,6 +243,20 @@ impl ResponseBuilder {
199243
uv_count_since_last_pin_entry: None,
200244
#[cfg(feature = "get-info-full")]
201245
long_touch_for_reset: None,
246+
#[cfg(feature = "get-info-full")]
247+
enc_identifier: None,
248+
#[cfg(feature = "get-info-full")]
249+
transports_for_reset: None,
250+
#[cfg(feature = "get-info-full")]
251+
pin_complexity_policy: None,
252+
#[cfg(feature = "get-info-full")]
253+
pin_complexity_policy_url: None,
254+
#[cfg(feature = "get-info-full")]
255+
max_pin_length: None,
256+
#[cfg(feature = "get-info-full")]
257+
enc_cred_store_state: None,
258+
#[cfg(feature = "get-info-full")]
259+
authenticator_config_commands: None,
202260
}
203261
}
204262
}

0 commit comments

Comments
 (0)