in pkcs11/pkcs11/src/session.rs [286:315]
fn next(&mut self) -> Option<Self::Item> {
unsafe {
let mut object_handle = pkcs11_sys::CK_INVALID_OBJECT_HANDLE;
let mut num_objects = 0;
let result = (self.session.context.C_FindObjects)(
self.session.handle,
&mut object_handle,
1,
&mut num_objects,
);
if result != pkcs11_sys::CKR_OK {
return Some(Err(FindObjectsError::FindObjectsFailed(
format!("C_FindObjects failed with {result}").into(),
)));
}
match num_objects {
0 => None,
1 if object_handle != pkcs11_sys::CK_INVALID_OBJECT_HANDLE => {
Some(Ok(object_handle))
}
1 => Some(Err(FindObjectsError::FindObjectsFailed(
"C_FindObjects found 1 object but object handle is still CK_INVALID_HANDLE"
.into(),
))),
num_objects => Some(Err(FindObjectsError::FindObjectsFailed(
format!("C_FindObjects found {num_objects} objects").into(),
))),
}
}
}