Use Store instead of Storage in Env
This commit is contained in:
@@ -17,7 +17,7 @@ use super::command::AuthenticatorLargeBlobsParameters;
|
||||
use super::customization::MAX_MSG_SIZE;
|
||||
use super::response::{AuthenticatorLargeBlobsResponse, ResponseData};
|
||||
use super::status_code::Ctap2StatusCode;
|
||||
use super::storage::PersistentStore;
|
||||
use crate::ctap::storage;
|
||||
use crate::env::Env;
|
||||
use alloc::vec;
|
||||
use alloc::vec::Vec;
|
||||
@@ -45,9 +45,9 @@ impl LargeBlobs {
|
||||
}
|
||||
|
||||
/// Process the large blob command.
|
||||
pub fn process_command<E: Env>(
|
||||
pub fn process_command(
|
||||
&mut self,
|
||||
persistent_store: &mut PersistentStore<E>,
|
||||
env: &mut impl Env,
|
||||
client_pin: &mut ClientPin,
|
||||
large_blobs_params: AuthenticatorLargeBlobsParameters,
|
||||
) -> Result<ResponseData, Ctap2StatusCode> {
|
||||
@@ -66,7 +66,7 @@ impl LargeBlobs {
|
||||
if get > MAX_FRAGMENT_LENGTH || offset.checked_add(get).is_none() {
|
||||
return Err(Ctap2StatusCode::CTAP1_ERR_INVALID_LENGTH);
|
||||
}
|
||||
let config = persistent_store.get_large_blob_array(offset, get)?;
|
||||
let config = storage::get_large_blob_array(env, offset, get)?;
|
||||
return Ok(ResponseData::AuthenticatorLargeBlobs(Some(
|
||||
AuthenticatorLargeBlobsResponse { config },
|
||||
)));
|
||||
@@ -85,7 +85,7 @@ impl LargeBlobs {
|
||||
if offset != self.expected_next_offset {
|
||||
return Err(Ctap2StatusCode::CTAP1_ERR_INVALID_SEQ);
|
||||
}
|
||||
if persistent_store.pin_hash()?.is_some() || persistent_store.has_always_uv()? {
|
||||
if storage::pin_hash(env)?.is_some() || storage::has_always_uv(env)? {
|
||||
let pin_uv_auth_param =
|
||||
pin_uv_auth_param.ok_or(Ctap2StatusCode::CTAP2_ERR_PUAT_REQUIRED)?;
|
||||
let pin_uv_auth_protocol =
|
||||
@@ -122,7 +122,7 @@ impl LargeBlobs {
|
||||
self.buffer = Vec::new();
|
||||
return Err(Ctap2StatusCode::CTAP2_ERR_INTEGRITY_FAILURE);
|
||||
}
|
||||
persistent_store.commit_large_blob_array(&self.buffer)?;
|
||||
storage::commit_large_blob_array(env, &self.buffer)?;
|
||||
self.buffer = Vec::new();
|
||||
}
|
||||
return Ok(ResponseData::AuthenticatorLargeBlobs(None));
|
||||
@@ -143,7 +143,6 @@ mod test {
|
||||
#[test]
|
||||
fn test_process_command_get_empty() {
|
||||
let mut env = TestEnv::new();
|
||||
let mut persistent_store = PersistentStore::new(&mut env);
|
||||
let key_agreement_key = crypto::ecdh::SecKey::gensk(env.rng());
|
||||
let pin_uv_auth_token = [0x55; 32];
|
||||
let mut client_pin =
|
||||
@@ -163,7 +162,7 @@ mod test {
|
||||
pin_uv_auth_protocol: None,
|
||||
};
|
||||
let large_blobs_response =
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params);
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params);
|
||||
match large_blobs_response.unwrap() {
|
||||
ResponseData::AuthenticatorLargeBlobs(Some(response)) => {
|
||||
assert_eq!(response.config, large_blob);
|
||||
@@ -175,7 +174,6 @@ mod test {
|
||||
#[test]
|
||||
fn test_process_command_commit_and_get() {
|
||||
let mut env = TestEnv::new();
|
||||
let mut persistent_store = PersistentStore::new(&mut env);
|
||||
let key_agreement_key = crypto::ecdh::SecKey::gensk(env.rng());
|
||||
let pin_uv_auth_token = [0x55; 32];
|
||||
let mut client_pin =
|
||||
@@ -196,7 +194,7 @@ mod test {
|
||||
pin_uv_auth_protocol: None,
|
||||
};
|
||||
let large_blobs_response =
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params);
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params);
|
||||
assert_eq!(
|
||||
large_blobs_response,
|
||||
Ok(ResponseData::AuthenticatorLargeBlobs(None))
|
||||
@@ -211,7 +209,7 @@ mod test {
|
||||
pin_uv_auth_protocol: None,
|
||||
};
|
||||
let large_blobs_response =
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params);
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params);
|
||||
assert_eq!(
|
||||
large_blobs_response,
|
||||
Ok(ResponseData::AuthenticatorLargeBlobs(None))
|
||||
@@ -226,7 +224,7 @@ mod test {
|
||||
pin_uv_auth_protocol: None,
|
||||
};
|
||||
let large_blobs_response =
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params);
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params);
|
||||
match large_blobs_response.unwrap() {
|
||||
ResponseData::AuthenticatorLargeBlobs(Some(response)) => {
|
||||
assert_eq!(response.config, large_blob);
|
||||
@@ -238,7 +236,6 @@ mod test {
|
||||
#[test]
|
||||
fn test_process_command_commit_unexpected_offset() {
|
||||
let mut env = TestEnv::new();
|
||||
let mut persistent_store = PersistentStore::new(&mut env);
|
||||
let key_agreement_key = crypto::ecdh::SecKey::gensk(env.rng());
|
||||
let pin_uv_auth_token = [0x55; 32];
|
||||
let mut client_pin =
|
||||
@@ -259,7 +256,7 @@ mod test {
|
||||
pin_uv_auth_protocol: None,
|
||||
};
|
||||
let large_blobs_response =
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params);
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params);
|
||||
assert_eq!(
|
||||
large_blobs_response,
|
||||
Ok(ResponseData::AuthenticatorLargeBlobs(None))
|
||||
@@ -275,7 +272,7 @@ mod test {
|
||||
pin_uv_auth_protocol: None,
|
||||
};
|
||||
let large_blobs_response =
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params);
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params);
|
||||
assert_eq!(
|
||||
large_blobs_response,
|
||||
Err(Ctap2StatusCode::CTAP1_ERR_INVALID_SEQ),
|
||||
@@ -285,7 +282,6 @@ mod test {
|
||||
#[test]
|
||||
fn test_process_command_commit_unexpected_length() {
|
||||
let mut env = TestEnv::new();
|
||||
let mut persistent_store = PersistentStore::new(&mut env);
|
||||
let key_agreement_key = crypto::ecdh::SecKey::gensk(env.rng());
|
||||
let pin_uv_auth_token = [0x55; 32];
|
||||
let mut client_pin =
|
||||
@@ -307,7 +303,7 @@ mod test {
|
||||
pin_uv_auth_protocol: None,
|
||||
};
|
||||
let large_blobs_response =
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params);
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params);
|
||||
assert_eq!(
|
||||
large_blobs_response,
|
||||
Ok(ResponseData::AuthenticatorLargeBlobs(None))
|
||||
@@ -322,7 +318,7 @@ mod test {
|
||||
pin_uv_auth_protocol: None,
|
||||
};
|
||||
let large_blobs_response =
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params);
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params);
|
||||
assert_eq!(
|
||||
large_blobs_response,
|
||||
Err(Ctap2StatusCode::CTAP1_ERR_INVALID_PARAMETER),
|
||||
@@ -332,7 +328,6 @@ mod test {
|
||||
#[test]
|
||||
fn test_process_command_commit_end_offset_overflow() {
|
||||
let mut env = TestEnv::new();
|
||||
let mut persistent_store = PersistentStore::new(&mut env);
|
||||
let key_agreement_key = crypto::ecdh::SecKey::gensk(env.rng());
|
||||
let pin_uv_auth_token = [0x55; 32];
|
||||
let mut client_pin =
|
||||
@@ -348,7 +343,7 @@ mod test {
|
||||
pin_uv_auth_protocol: None,
|
||||
};
|
||||
assert_eq!(
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params),
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params),
|
||||
Err(Ctap2StatusCode::CTAP1_ERR_INVALID_LENGTH),
|
||||
);
|
||||
}
|
||||
@@ -356,7 +351,6 @@ mod test {
|
||||
#[test]
|
||||
fn test_process_command_commit_unexpected_hash() {
|
||||
let mut env = TestEnv::new();
|
||||
let mut persistent_store = PersistentStore::new(&mut env);
|
||||
let key_agreement_key = crypto::ecdh::SecKey::gensk(env.rng());
|
||||
let pin_uv_auth_token = [0x55; 32];
|
||||
let mut client_pin =
|
||||
@@ -376,7 +370,7 @@ mod test {
|
||||
pin_uv_auth_protocol: None,
|
||||
};
|
||||
let large_blobs_response =
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params);
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params);
|
||||
assert_eq!(
|
||||
large_blobs_response,
|
||||
Err(Ctap2StatusCode::CTAP2_ERR_INTEGRITY_FAILURE),
|
||||
@@ -385,7 +379,6 @@ mod test {
|
||||
|
||||
fn test_helper_process_command_commit_with_pin(pin_uv_auth_protocol: PinUvAuthProtocol) {
|
||||
let mut env = TestEnv::new();
|
||||
let mut persistent_store = PersistentStore::new(&mut env);
|
||||
let key_agreement_key = crypto::ecdh::SecKey::gensk(env.rng());
|
||||
let pin_uv_auth_token = [0x55; 32];
|
||||
let mut client_pin =
|
||||
@@ -397,7 +390,7 @@ mod test {
|
||||
let mut large_blob = vec![0x1B; DATA_LEN];
|
||||
large_blob.extend_from_slice(&Sha256::hash(&large_blob[..])[..TRUNCATED_HASH_LEN]);
|
||||
|
||||
persistent_store.set_pin(&[0u8; 16], 4).unwrap();
|
||||
storage::set_pin(&mut env, &[0u8; 16], 4).unwrap();
|
||||
let mut large_blob_data = vec![0xFF; 32];
|
||||
// Command constant and offset bytes.
|
||||
large_blob_data.extend(&[0x0C, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
||||
@@ -417,7 +410,7 @@ mod test {
|
||||
pin_uv_auth_protocol: Some(pin_uv_auth_protocol),
|
||||
};
|
||||
let large_blobs_response =
|
||||
large_blobs.process_command(&mut persistent_store, &mut client_pin, large_blobs_params);
|
||||
large_blobs.process_command(&mut env, &mut client_pin, large_blobs_params);
|
||||
assert_eq!(
|
||||
large_blobs_response,
|
||||
Ok(ResponseData::AuthenticatorLargeBlobs(None))
|
||||
|
||||
Reference in New Issue
Block a user