diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2019-11-25 12:48:32 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2019-11-25 13:19:10 +0100 |
commit | 28d0231ce5373747cae1dbc97f988866540872ef (patch) | |
tree | 605edbbf63638acb358c7c3d09ccfe12507c4325 /openpgp-ffi/src | |
parent | 9c6174635ac40a32b273bf78493c1d6db3cc2d34 (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.rs | 16 |
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. |