in key/aziot-keys/src/key.rs [685:719]
fn delete_inner(locations: &[crate::implementation::Location]) -> Result<(), crate::AZIOT_KEYS_RC> {
for location in locations {
match location {
crate::implementation::Location::Filesystem(path) => match std::fs::remove_file(path) {
Ok(()) => (),
Err(err) if err.kind() == std::io::ErrorKind::NotFound => (),
Err(err) => return Err(crate::implementation::err_external(err)),
},
crate::implementation::Location::Pkcs11 { lib_path, uri } => {
let pkcs11_context = pkcs11::Context::load(lib_path.clone())
.map_err(crate::implementation::err_external)?;
let pkcs11_slot = pkcs11_context
.find_slot(&uri.slot_identifier)
.map_err(crate::implementation::err_external)?;
let pkcs11_session = pkcs11_context
.open_session(pkcs11_slot, uri.pin.clone())
.map_err(crate::implementation::err_external)?;
let object_label =
uri.object_label.as_deref()
.ok_or_else(|| crate::implementation::err_invalid_parameter(
"id",
"key corresponding to this ID cannot be deleted because it is a PKCS#11 key without an object label",
))?;
match pkcs11_session.delete_key(object_label) {
Ok(()) => (),
Err(err) => return Err(crate::implementation::err_external(err)),
}
}
}
}
Ok(())
}