Skip to content

Commit 2ce6169

Browse files
authored
Merge pull request #321 from ionut-arm/list-keys
Improve mandatory Provide methods
2 parents f502bd6 + 6743d0b commit 2ce6169

File tree

5 files changed

+66
-55
lines changed

5 files changed

+66
-55
lines changed

e2e_tests/tests/all_providers/normal.rs

Lines changed: 52 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,19 @@ fn list_keys() {
138138

139139
assert!(keys.is_empty());
140140

141-
let key1 = String::from("list_keys1");
142-
let key2 = String::from("list_keys2");
143-
let key3 = String::from("list_keys3");
144-
145-
client.set_provider(ProviderID::MbedCrypto);
146-
client.generate_rsa_sign_key(key1.clone()).unwrap();
147-
client.set_provider(ProviderID::Pkcs11);
148-
client.generate_rsa_sign_key(key2.clone()).unwrap();
149-
client.set_provider(ProviderID::Tpm);
150-
client.generate_rsa_sign_key(key3.clone()).unwrap();
141+
let providers = client.list_providers().expect("Failed to list providers");
142+
let mut suitable_providers = vec![];
143+
144+
for provider in providers.iter() {
145+
client.set_provider(provider.id);
146+
if !client.is_operation_supported(Opcode::PsaGenerateKey) {
147+
continue;
148+
}
149+
suitable_providers.push(provider.clone());
150+
client
151+
.generate_rsa_sign_key(format!("list_keys_{}", provider.id))
152+
.unwrap();
153+
}
151154

152155
let key_names: Vec<(String, ProviderID)> = client
153156
.list_keys()
@@ -156,10 +159,11 @@ fn list_keys() {
156159
.map(|k| (k.name, k.provider_id))
157160
.collect();
158161

159-
assert_eq!(key_names.len(), 3);
160-
assert!(key_names.contains(&(key1.clone(), ProviderID::MbedCrypto)));
161-
assert!(key_names.contains(&(key2.clone(), ProviderID::Pkcs11)));
162-
assert!(key_names.contains(&(key3.clone(), ProviderID::Tpm)));
162+
assert_eq!(key_names.len(), suitable_providers.len());
163+
164+
for provider in suitable_providers.iter() {
165+
assert!(key_names.contains(&(format!("list_keys_{}", provider.id), provider.id)));
166+
}
163167
}
164168

165169
#[test]
@@ -197,27 +201,46 @@ fn invalid_provider_list_clients() {
197201
fn list_and_delete_clients() {
198202
let mut client = TestClient::new();
199203
client.do_not_destroy_keys();
200-
client.set_default_auth(Some("list_clients test".to_string()));
204+
205+
let all_providers_user = "list_clients test".to_string();
206+
client.set_default_auth(Some(all_providers_user.clone()));
201207

202208
let clients = client.list_clients().expect("list_clients failed");
203-
assert!(!clients.contains(&"list_clients test".to_string()));
209+
assert!(!clients.contains(&all_providers_user));
210+
211+
let providers = client.list_providers().expect("Failed to list providers");
212+
let mut suitable_providers = vec![];
204213

205-
let key1 = String::from("list_clients1");
206-
let key2 = String::from("list_keys2");
207-
let key3 = String::from("list_keys3");
214+
for provider in providers.iter() {
215+
client.set_provider(provider.id);
216+
if !client.is_operation_supported(Opcode::PsaGenerateKey) {
217+
continue;
218+
}
219+
suitable_providers.push(provider.clone());
208220

209-
client.set_provider(ProviderID::MbedCrypto);
210-
client.generate_rsa_sign_key(key1.clone()).unwrap();
211-
client.set_provider(ProviderID::Pkcs11);
212-
client.generate_rsa_sign_key(key2.clone()).unwrap();
213-
client.set_provider(ProviderID::Tpm);
214-
client.generate_rsa_sign_key(key3.clone()).unwrap();
221+
client.set_default_auth(Some(all_providers_user.clone()));
222+
client
223+
.generate_rsa_sign_key("all-providers-user-key".to_string())
224+
.unwrap();
225+
226+
client.set_default_auth(Some(format!("user_{}", provider.id)));
227+
client
228+
.generate_rsa_sign_key(format!("user_{}-key", provider.id))
229+
.unwrap();
230+
}
231+
232+
client.set_default_auth(Some(all_providers_user.clone()));
215233

216234
let clients = client.list_clients().expect("list_clients failed");
217-
assert!(clients.contains(&"list_clients test".to_string()));
218-
client
219-
.delete_client("list_clients test".to_string())
220-
.unwrap();
235+
236+
assert!(clients.contains(&all_providers_user));
237+
client.delete_client(all_providers_user).unwrap();
238+
239+
for provider in suitable_providers.iter() {
240+
let username = format!("user_{}", provider.id);
241+
assert!(clients.contains(&username));
242+
client.delete_client(username).unwrap();
243+
}
221244

222245
let keys = client.list_keys().expect("list_keys failed");
223246

e2e_tests/tests/per_provider/normal_tests/hash.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,14 @@ fn hash_not_supported() {
2727
let mut client = TestClient::new();
2828
if !client.is_operation_supported(Opcode::PsaHashCompute) {
2929
assert_eq!(
30-
client.hash_compute(Hash::Sha256, &vec![],).unwrap_err(),
30+
client.hash_compute(Hash::Sha256, &[],).unwrap_err(),
3131
ResponseStatus::PsaErrorNotSupported
3232
);
3333
}
3434

3535
if !client.is_operation_supported(Opcode::PsaHashCompare) {
3636
assert_eq!(
37-
client
38-
.hash_compare(Hash::Sha256, &vec![], &vec![])
39-
.unwrap_err(),
37+
client.hash_compare(Hash::Sha256, &[], &[]).unwrap_err(),
4038
ResponseStatus::PsaErrorNotSupported
4139
);
4240
}

e2e_tests/tests/per_provider/normal_tests/key_agreement.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,7 @@ fn simple_raw_key_agreement() {
7070
.generate_ecc_pair_secp_r1_key(key_name.clone())
7171
.unwrap();
7272
let _shared_secret = client
73-
.raw_key_agreement(
74-
RawKeyAgreement::Ecdh,
75-
key_name.clone(),
76-
&PEER_PUBLIC_KEY_SECPR1,
77-
)
73+
.raw_key_agreement(RawKeyAgreement::Ecdh, key_name, &PEER_PUBLIC_KEY_SECPR1)
7874
.unwrap();
7975
}
8076

@@ -91,11 +87,7 @@ fn raw_key_agreement_secpr1() {
9187
.import_ecc_pair_secp_r1_key(key_name.clone(), OUR_KEY_DATA_SECPR1.to_vec())
9288
.unwrap();
9389
let shared_secret = client
94-
.raw_key_agreement(
95-
RawKeyAgreement::Ecdh,
96-
key_name.clone(),
97-
&PEER_PUBLIC_KEY_SECPR1,
98-
)
90+
.raw_key_agreement(RawKeyAgreement::Ecdh, key_name, &PEER_PUBLIC_KEY_SECPR1)
9991
.unwrap();
10092

10193
assert_eq!(&EXPECTED_OUTPUT_SECPR1, shared_secret.as_slice());

src/providers/core/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,10 @@ impl Provide for Provider {
142142

143143
Ok(result)
144144
}
145+
146+
fn describe(&self) -> Result<(ProviderInfo, HashSet<Opcode>)> {
147+
unreachable!()
148+
}
145149
}
146150

147151
/// Builder for CoreProvider

src/providers/mod.rs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,14 @@ use parsec_interface::requests::{ResponseStatus, Result};
130130
///
131131
/// Definition of the interface that a provider must implement to
132132
/// be linked into the service through a backend handler.
133+
///
134+
/// The methods with no default are used on a service-level by the
135+
/// core provider and so must be supported by all providers.
133136
pub trait Provide {
134137
/// Return a description of the current provider.
135138
///
136139
/// The descriptions are gathered in the Core Provider and returned for a ListProviders operation.
137-
fn describe(&self) -> Result<(list_providers::ProviderInfo, HashSet<Opcode>)> {
138-
trace!("describe ingress");
139-
Err(ResponseStatus::PsaErrorNotSupported)
140-
}
140+
fn describe(&self) -> Result<(list_providers::ProviderInfo, HashSet<Opcode>)>;
141141

142142
/// List the providers running in the service.
143143
fn list_providers(&self, _op: list_providers::Operation) -> Result<list_providers::Result> {
@@ -165,16 +165,10 @@ pub trait Provide {
165165
&self,
166166
_app_name: ApplicationName,
167167
_op: list_keys::Operation,
168-
) -> Result<list_keys::Result> {
169-
trace!("list_keys ingress");
170-
Err(ResponseStatus::PsaErrorNotSupported)
171-
}
168+
) -> Result<list_keys::Result>;
172169

173170
/// Lists all clients currently having data in the service.
174-
fn list_clients(&self, _op: list_clients::Operation) -> Result<list_clients::Result> {
175-
trace!("list_clients ingress");
176-
Err(ResponseStatus::PsaErrorNotSupported)
177-
}
171+
fn list_clients(&self, _op: list_clients::Operation) -> Result<list_clients::Result>;
178172

179173
/// Delete all data a client has in the service..
180174
fn delete_client(&self, _op: delete_client::Operation) -> Result<delete_client::Result> {

0 commit comments

Comments
 (0)