summaryrefslogtreecommitdiffstats
path: root/ffi/src/openpgp/keyid.rs
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2019-01-17 11:11:27 +0100
committerJustus Winter <justus@sequoia-pgp.org>2019-01-17 16:48:28 +0100
commit3f58832474a4b270e136544016a401ef773ac065 (patch)
treec617160250c3040ca964c1b72ab5957cd872b82f /ffi/src/openpgp/keyid.rs
parent38b4108cc1eac851ac17932c5c33623dd535bebb (diff)
openpgp-ffi: New crate.
- This creates a new crate, 'sequoia-openpgp-ffi', and moves a handful of functions from 'sequoia-ffi' to it. - The 'sequoia-ffi' crate is a superset of the 'sequoia-openpgp-ffi' crate. This is accomplished by some include! magic. - My first attempt involved having 'sequoia-ffi' depend on 'sequoia-openpgp-ffi', so that the former just re-exports the symbols. However, that turned out to be unreliable, and might be not what we want, because it could also duplicate parts of Rust's standard library. - Fixes #144.
Diffstat (limited to 'ffi/src/openpgp/keyid.rs')
-rw-r--r--ffi/src/openpgp/keyid.rs99
1 files changed, 0 insertions, 99 deletions
diff --git a/ffi/src/openpgp/keyid.rs b/ffi/src/openpgp/keyid.rs
deleted file mode 100644
index 2b8d3e2e..00000000
--- a/ffi/src/openpgp/keyid.rs
+++ /dev/null
@@ -1,99 +0,0 @@
-//! Handles KeyIDs.
-//!
-//! Wraps [`sequoia-openpgp::KeyID`].
-//!
-//! [`sequoia-openpgp::KeyID`]: ../../../sequoia_openpgp/enum.KeyID.html
-
-use std::hash::{Hash, Hasher};
-use std::ptr;
-use std::slice;
-use libc::{uint8_t, uint64_t, c_char};
-
-extern crate sequoia_openpgp;
-use self::sequoia_openpgp::KeyID;
-
-use build_hasher;
-
-/// Reads a binary key ID.
-///
-/// # Example
-///
-/// ```c
-/// #include <assert.h>
-/// #include <stdlib.h>
-/// #include <string.h>
-/// #include <sequoia.h>
-///
-/// sq_keyid_t mr_b = sq_keyid_from_bytes ("\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb");
-///
-/// char *mr_b_as_string = sq_keyid_to_string (mr_b);
-/// assert (strcmp (mr_b_as_string, "BBBB BBBB BBBB BBBB") == 0);
-///
-/// sq_keyid_free (mr_b);
-/// free (mr_b_as_string);
-/// ```
-#[::ffi_catch_abort] #[no_mangle]
-pub extern "system" fn sq_keyid_from_bytes(id: *const uint8_t) -> *mut KeyID {
- assert!(!id.is_null());
- let id = unsafe { slice::from_raw_parts(id, 8) };
- Box::into_raw(Box::new(KeyID::from_bytes(id)))
-}
-
-/// Reads a hex-encoded Key ID.
-#[::ffi_catch_abort] #[no_mangle]
-pub extern "system" fn sq_keyid_from_hex(id: *const c_char) -> *mut KeyID {
- let id = ffi_param_cstr!(id).to_string_lossy();
- KeyID::from_hex(&id)
- .map(|id| Box::into_raw(Box::new(id)))
- .unwrap_or(ptr::null_mut())
-}
-
-/// Frees an `KeyID` object.
-#[::ffi_catch_abort] #[no_mangle]
-pub extern "system" fn sq_keyid_free(keyid: Option<&mut KeyID>) {
- ffi_free!(keyid)
-}
-
-/// Clones the KeyID.
-#[::ffi_catch_abort] #[no_mangle]
-pub extern "system" fn sq_keyid_clone(id: *const KeyID)
- -> *mut KeyID {
- let id = ffi_param_ref!(id);
- box_raw!(id.clone())
-}
-
-/// Hashes the KeyID.
-#[::ffi_catch_abort] #[no_mangle]
-pub extern "system" fn sq_keyid_hash(id: *const KeyID)
- -> uint64_t {
- let id = ffi_param_ref!(id);
- let mut hasher = build_hasher();
- id.hash(&mut hasher);
- hasher.finish()
-}
-
-/// Converts the KeyID to its standard representation.
-#[::ffi_catch_abort] #[no_mangle]
-pub extern "system" fn sq_keyid_to_string(id: *const KeyID)
- -> *mut c_char {
- let id = ffi_param_ref!(id);
- ffi_return_string!(id.to_string())
-}
-
-/// Converts the KeyID to a hexadecimal number.
-#[::ffi_catch_abort] #[no_mangle]
-pub extern "system" fn sq_keyid_to_hex(id: *const KeyID)
- -> *mut c_char {
- let id = ffi_param_ref!(id);
- ffi_return_string!(id.to_hex())
-}
-
-/// Compares KeyIDs.
-#[::ffi_catch_abort] #[no_mangle]
-pub extern "system" fn sq_keyid_equal(a: *const KeyID,
- b: *const KeyID)
- -> bool {
- let a = ffi_param_ref!(a);
- let b = ffi_param_ref!(b);
- a == b
-}