Skip to content

Commit 0968367

Browse files
keymgmt: Data validation - Check key presence
When validating keydata, check that the referred to key is indeed stored in the provider. Signed-off-by: Tomás González <tomasagustin.gonzalezorlando@arm.com>
1 parent 9fefbd8 commit 0968367

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

parsec-openssl-provider/src/keymgmt/mod.rs

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ use parsec_openssl2::*;
1616
use std::sync::{Arc, Mutex};
1717

1818
struct ParsecProviderKeyObject {
19-
_provctx: Arc<ParsecProviderContext>,
19+
provctx: Arc<ParsecProviderContext>,
2020
key_name: Mutex<Option<String>>,
2121
}
2222

2323
fn kmgmt_keyobj_new(provctx: Arc<ParsecProviderContext>) -> Arc<ParsecProviderKeyObject> {
2424
Arc::new(ParsecProviderKeyObject {
25-
_provctx: provctx.clone(),
25+
provctx: provctx.clone(),
2626
key_name: None.into(),
2727
})
2828
}
@@ -163,10 +163,35 @@ pub unsafe extern "C" fn parsec_provider_kmgmt_validate(
163163
Arc::increment_strong_count(keydata_ptr);
164164
let arc_keydata = Arc::from_raw(keydata_ptr);
165165
let key_name = arc_keydata.key_name.lock().unwrap();
166-
if key_name.is_some() {
167-
OPENSSL_SUCCESS
168-
} else {
169-
OPENSSL_ERROR
166+
let result =
167+
super::r#catch(
168+
Some(|| super::Error::PROVIDER_KEYMGMT_VALIDATE),
169+
|| match &*key_name {
170+
Some(name) => {
171+
let err_keys = arc_keydata.provctx.client.list_keys();
172+
let has_name = match err_keys {
173+
Ok(keys) => keys
174+
.iter()
175+
.find(|&kinfo| kinfo.name == name.as_str())
176+
.is_some(),
177+
Err(_) => {
178+
return Err("Failed to list Parsec Provider's Keys".into());
179+
}
180+
};
181+
182+
if has_name {
183+
Ok(OPENSSL_SUCCESS)
184+
} else {
185+
Err("Specified Key not found in the Parsec Provider".into())
186+
}
187+
}
188+
None => Err("keydata to validate failed: Key name not specified".into()),
189+
},
190+
);
191+
192+
match result {
193+
Ok(result) => result,
194+
Err(()) => OPENSSL_ERROR,
170195
}
171196
} else {
172197
OPENSSL_SUCCESS

parsec-openssl-provider/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ openssl_errors::openssl_errors! {
113113
PROVIDER_GET_PARAMS("parsec_provider_get_params");
114114
PROVIDER_QUERY("parsec_provider_query");
115115
PROVIDER_KEYMGMT_SET_PARAMS("parsec_provider_kmgmt_set_params");
116+
PROVIDER_KEYMGMT_VALIDATE("parsec_provider_kmgmt_validate");
116117
}
117118

118119
reasons {

0 commit comments

Comments
 (0)