correct const arrays of strings

This commit is contained in:
Fabian Kaczmarczyck
2021-02-05 11:23:12 +01:00
parent 53e0591363
commit 49cccfd270
3 changed files with 22 additions and 11 deletions

View File

@@ -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),

View File

@@ -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 {

View File

@@ -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);
} }