correct const arrays of strings
This commit is contained in:
@@ -1815,6 +1815,10 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_from_enterprise_attestation_mode() {
|
fn test_from_enterprise_attestation_mode() {
|
||||||
|
assert_eq!(
|
||||||
|
EnterpriseAttestationMode::try_from(0),
|
||||||
|
Err(Ctap2StatusCode::CTAP2_ERR_INVALID_OPTION),
|
||||||
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
EnterpriseAttestationMode::try_from(1),
|
EnterpriseAttestationMode::try_from(1),
|
||||||
Ok(EnterpriseAttestationMode::VendorFacilitated),
|
Ok(EnterpriseAttestationMode::VendorFacilitated),
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ pub const INITIAL_SIGNATURE_COUNTER: u32 = 1;
|
|||||||
// individual certificates then makes authenticators identifiable. Do NOT set
|
// individual certificates then makes authenticators identifiable. Do NOT set
|
||||||
// USE_BATCH_ATTESTATION to true at the same time in this case!
|
// USE_BATCH_ATTESTATION to true at the same time in this case!
|
||||||
pub const ENTERPRISE_ATTESTATION_MODE: Option<EnterpriseAttestationMode> = None;
|
pub const ENTERPRISE_ATTESTATION_MODE: Option<EnterpriseAttestationMode> = None;
|
||||||
const ENTERPRISE_RP_ID_LIST: Vec<String> = Vec::new();
|
const ENTERPRISE_RP_ID_LIST: &[&str] = &[];
|
||||||
// Our credential ID consists of
|
// Our credential ID consists of
|
||||||
// - 16 byte initialization vector for AES-256,
|
// - 16 byte initialization vector for AES-256,
|
||||||
// - 32 byte ECDSA private key for the credential,
|
// - 32 byte ECDSA private key for the credential,
|
||||||
@@ -598,7 +598,7 @@ where
|
|||||||
(
|
(
|
||||||
EnterpriseAttestationMode::PlatformManaged,
|
EnterpriseAttestationMode::PlatformManaged,
|
||||||
EnterpriseAttestationMode::PlatformManaged,
|
EnterpriseAttestationMode::PlatformManaged,
|
||||||
) => ENTERPRISE_RP_ID_LIST.contains(&rp_id),
|
) => ENTERPRISE_RP_ID_LIST.contains(&rp_id.as_str()),
|
||||||
_ => true,
|
_ => true,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ const MAX_SUPPORTED_RESIDENT_KEYS: usize = 150;
|
|||||||
|
|
||||||
const MAX_PIN_RETRIES: u8 = 8;
|
const MAX_PIN_RETRIES: u8 = 8;
|
||||||
const DEFAULT_MIN_PIN_LENGTH: u8 = 4;
|
const DEFAULT_MIN_PIN_LENGTH: u8 = 4;
|
||||||
const DEFAULT_MIN_PIN_LENGTH_RP_IDS: Vec<String> = Vec::new();
|
const DEFAULT_MIN_PIN_LENGTH_RP_IDS: &[&str] = &[];
|
||||||
// This constant is an attempt to limit storage requirements. If you don't set it to 0,
|
// This constant is an attempt to limit storage requirements. If you don't set it to 0,
|
||||||
// the stored strings can still be unbounded, but that is true for all RP IDs.
|
// the stored strings can still be unbounded, but that is true for all RP IDs.
|
||||||
pub const MAX_RP_IDS_LENGTH: usize = 8;
|
pub const MAX_RP_IDS_LENGTH: usize = 8;
|
||||||
@@ -439,12 +439,17 @@ impl PersistentStore {
|
|||||||
/// Returns the list of RP IDs that are used to check if reading the minimum PIN length is
|
/// Returns the list of RP IDs that are used to check if reading the minimum PIN length is
|
||||||
/// allowed.
|
/// allowed.
|
||||||
pub fn min_pin_length_rp_ids(&self) -> Result<Vec<String>, Ctap2StatusCode> {
|
pub fn min_pin_length_rp_ids(&self) -> Result<Vec<String>, Ctap2StatusCode> {
|
||||||
let rp_ids = self
|
let rp_ids = self.store.find(key::MIN_PIN_LENGTH_RP_IDS)?.map_or_else(
|
||||||
.store
|
|| {
|
||||||
.find(key::MIN_PIN_LENGTH_RP_IDS)?
|
Some(
|
||||||
.map_or(Some(DEFAULT_MIN_PIN_LENGTH_RP_IDS), |value| {
|
DEFAULT_MIN_PIN_LENGTH_RP_IDS
|
||||||
deserialize_min_pin_length_rp_ids(&value)
|
.iter()
|
||||||
});
|
.map(|&s| String::from(s))
|
||||||
|
.collect(),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
|value| deserialize_min_pin_length_rp_ids(&value),
|
||||||
|
);
|
||||||
debug_assert!(rp_ids.is_some());
|
debug_assert!(rp_ids.is_some());
|
||||||
Ok(rp_ids.unwrap_or_default())
|
Ok(rp_ids.unwrap_or_default())
|
||||||
}
|
}
|
||||||
@@ -455,7 +460,8 @@ impl PersistentStore {
|
|||||||
min_pin_length_rp_ids: Vec<String>,
|
min_pin_length_rp_ids: Vec<String>,
|
||||||
) -> Result<(), Ctap2StatusCode> {
|
) -> Result<(), Ctap2StatusCode> {
|
||||||
let mut min_pin_length_rp_ids = min_pin_length_rp_ids;
|
let mut min_pin_length_rp_ids = min_pin_length_rp_ids;
|
||||||
for rp_id in DEFAULT_MIN_PIN_LENGTH_RP_IDS {
|
for rp_id in DEFAULT_MIN_PIN_LENGTH_RP_IDS.iter() {
|
||||||
|
let rp_id = String::from(*rp_id);
|
||||||
if !min_pin_length_rp_ids.contains(&rp_id) {
|
if !min_pin_length_rp_ids.contains(&rp_id) {
|
||||||
min_pin_length_rp_ids.push(rp_id);
|
min_pin_length_rp_ids.push(rp_id);
|
||||||
}
|
}
|
||||||
@@ -1203,7 +1209,8 @@ mod test {
|
|||||||
persistent_store.set_min_pin_length_rp_ids(rp_ids.clone()),
|
persistent_store.set_min_pin_length_rp_ids(rp_ids.clone()),
|
||||||
Ok(())
|
Ok(())
|
||||||
);
|
);
|
||||||
for rp_id in DEFAULT_MIN_PIN_LENGTH_RP_IDS {
|
for rp_id in DEFAULT_MIN_PIN_LENGTH_RP_IDS.iter() {
|
||||||
|
let rp_id = rp_id.to_string().to_string();
|
||||||
if !rp_ids.contains(&rp_id) {
|
if !rp_ids.contains(&rp_id) {
|
||||||
rp_ids.push(rp_id);
|
rp_ids.push(rp_id);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user