summaryrefslogtreecommitdiffstats
path: root/openpgp-ffi/src
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2019-11-25 12:48:32 +0100
committerJustus Winter <justus@sequoia-pgp.org>2019-11-25 13:19:10 +0100
commit28d0231ce5373747cae1dbc97f988866540872ef (patch)
tree605edbbf63638acb358c7c3d09ccfe12507c4325 /openpgp-ffi/src
parent9c6174635ac40a32b273bf78493c1d6db3cc2d34 (diff)
openpgp: Specialize key iterator to return Key<SecretParts, _>.
- Once KeyIter::secret or KeyIter::unencrypted_secret is called, change the iterator type to iterate over &Key<SecretParts, _>. - Fixes #384.
Diffstat (limited to 'openpgp-ffi/src')
-rw-r--r--openpgp-ffi/src/tpk.rs16
1 files changed, 7 insertions, 9 deletions
diff --git a/openpgp-ffi/src/tpk.rs b/openpgp-ffi/src/tpk.rs
index ed834a90..92464175 100644
--- a/openpgp-ffi/src/tpk.rs
+++ b/openpgp-ffi/src/tpk.rs
@@ -647,14 +647,12 @@ pub extern "C" fn pgp_tpk_key_iter_revoked<'a>(
iter_wrapper.iter = tmp.revoked(Some(revoked));
}
-/// Changes the iterator to only return keys that have secret keys (or
-/// not).
+/// Changes the iterator to only return keys that have secret keys.
///
/// Note: you may not call this function after starting to iterate.
#[::sequoia_ffi_macros::extern_fn] #[no_mangle]
pub extern "C" fn pgp_tpk_key_iter_secret<'a>(
- iter_wrapper: *mut KeyIterWrapper<'a>,
- secret: bool)
+ iter_wrapper: *mut KeyIterWrapper<'a>)
{
let iter_wrapper = ffi_param_ref_mut!(iter_wrapper);
if iter_wrapper.next_called {
@@ -663,17 +661,16 @@ pub extern "C" fn pgp_tpk_key_iter_secret<'a>(
use std::mem;
let tmp = mem::replace(&mut iter_wrapper.iter, KeyIter::empty());
- iter_wrapper.iter = tmp.secret(Some(secret));
+ iter_wrapper.iter = unsafe { std::mem::transmute(tmp.secret()) };
}
/// Changes the iterator to only return keys that have unencrypted
-/// secret keys (or not).
+/// secret keys.
///
/// Note: you may not call this function after starting to iterate.
#[::sequoia_ffi_macros::extern_fn] #[no_mangle]
pub extern "C" fn pgp_tpk_key_iter_unencrypted_secret<'a>(
- iter_wrapper: *mut KeyIterWrapper<'a>,
- unencrypted_secret: bool)
+ iter_wrapper: *mut KeyIterWrapper<'a>)
{
let iter_wrapper = ffi_param_ref_mut!(iter_wrapper);
if iter_wrapper.next_called {
@@ -682,7 +679,8 @@ pub extern "C" fn pgp_tpk_key_iter_unencrypted_secret<'a>(
use std::mem;
let tmp = mem::replace(&mut iter_wrapper.iter, KeyIter::empty());
- iter_wrapper.iter = tmp.unencrypted_secret(Some(unencrypted_secret));
+ iter_wrapper.iter =
+ unsafe { std::mem::transmute(tmp.unencrypted_secret()) };
}
/// Returns the next key. Returns NULL if there are no more elements.