diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2019-01-15 15:26:09 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2019-01-15 18:02:37 +0100 |
commit | af870aa2bf8b844c8fab3f09cc7942c4c761dc06 (patch) | |
tree | 5748fe2f1d789201297a8d616e44885c5a05c254 /ffi/src | |
parent | 4b6c6cd19b4a98ab27fc9f16fbe80272cba7ed8a (diff) |
ffi: Move TSK glue to a new module.
Diffstat (limited to 'ffi/src')
-rw-r--r-- | ffi/src/openpgp/mod.rs | 65 | ||||
-rw-r--r-- | ffi/src/openpgp/tsk.rs | 81 |
2 files changed, 82 insertions, 64 deletions
diff --git a/ffi/src/openpgp/mod.rs b/ffi/src/openpgp/mod.rs index f3316944..ca3b5531 100644 --- a/ffi/src/openpgp/mod.rs +++ b/ffi/src/openpgp/mod.rs @@ -18,7 +18,6 @@ use self::openpgp::{ KeyID, RevocationStatus, TPK, - TSK, Packet, packet::{ Signature, @@ -45,7 +44,6 @@ use self::openpgp::parse::stream::{ Verifier, DetachedVerifier, }; -use self::openpgp::serialize::Serialize; use self::openpgp::constants::{ DataFormat, }; @@ -59,6 +57,7 @@ pub mod fingerprint; pub mod keyid; pub mod packet_pile; pub mod tpk; +pub mod tsk; /* openpgp::packet::Tag. */ @@ -123,68 +122,6 @@ pub extern "system" fn sq_revocation_status_free( ffi_free!(rs) } -/* TSK */ - -/// Generates a new RSA 3072 bit key with UID `primary_uid`. -#[no_mangle] -pub extern "system" fn sq_tsk_new(ctx: *mut Context, - primary_uid: *const c_char, - tsk_out: *mut *mut TSK, - revocation_out: *mut *mut Signature) - -> Status -{ - let ctx = ffi_param_ref_mut!(ctx); - assert!(!primary_uid.is_null()); - let tsk_out = ffi_param_ref_mut!(tsk_out); - let revocation_out = ffi_param_ref_mut!(revocation_out); - let primary_uid = unsafe { - CStr::from_ptr(primary_uid) - }; - match TSK::new(primary_uid.to_string_lossy()) { - Ok((tsk, revocation)) => { - *tsk_out = box_raw!(tsk); - *revocation_out = box_raw!(revocation); - Status::Success - }, - Err(e) => fry_status!(ctx, Err::<(), failure::Error>(e)), - } -} - -/// Frees the TSK. -#[no_mangle] -pub extern "system" fn sq_tsk_free(tsk: Option<&mut TSK>) { - ffi_free!(tsk) -} - -/// Returns a reference to the corresponding TPK. -#[no_mangle] -pub extern "system" fn sq_tsk_tpk(tsk: *const TSK) - -> *const TPK { - let tsk = ffi_param_ref!(tsk); - tsk.tpk() -} - -/// Converts the TSK into a TPK. -#[no_mangle] -pub extern "system" fn sq_tsk_into_tpk(tsk: *mut TSK) - -> *mut TPK { - let tsk = ffi_param_move!(tsk); - box_raw!(tsk.into_tpk()) -} - - -/// Serializes the TSK. -#[no_mangle] -pub extern "system" fn sq_tsk_serialize(ctx: *mut Context, - tsk: *const TSK, - writer: *mut Box<Write>) - -> Status { - let ctx = ffi_param_ref_mut!(ctx); - let tsk = ffi_param_ref!(tsk); - let writer = ffi_param_ref_mut!(writer); - fry_status!(ctx, tsk.serialize(writer)) -} - /* openpgp::Packet. */ /// Frees the Packet. diff --git a/ffi/src/openpgp/tsk.rs b/ffi/src/openpgp/tsk.rs new file mode 100644 index 00000000..a92124d9 --- /dev/null +++ b/ffi/src/openpgp/tsk.rs @@ -0,0 +1,81 @@ +//! Handles TSKs. +//! +//! Wraps [`sequoia-openpgp::TSK`]. +//! +//! [`sequoia-openpgp::TSK`]: ../../../sequoia_openpgp/struct.TSK.html + +use failure; +use std::ffi::CStr; +use std::io::Write; +use libc::c_char; + +extern crate sequoia_openpgp; +use self::sequoia_openpgp::{ + TPK, + TSK, + packet::Signature, + serialize::Serialize, +}; + +use ::core::Context; +use ::error::Status; + +/// Generates a new RSA 3072 bit key with UID `primary_uid`. +#[no_mangle] +pub extern "system" fn sq_tsk_new(ctx: *mut Context, + primary_uid: *const c_char, + tsk_out: *mut *mut TSK, + revocation_out: *mut *mut Signature) + -> Status +{ + let ctx = ffi_param_ref_mut!(ctx); + assert!(!primary_uid.is_null()); + let tsk_out = ffi_param_ref_mut!(tsk_out); + let revocation_out = ffi_param_ref_mut!(revocation_out); + let primary_uid = unsafe { + CStr::from_ptr(primary_uid) + }; + match TSK::new(primary_uid.to_string_lossy()) { + Ok((tsk, revocation)) => { + *tsk_out = box_raw!(tsk); + *revocation_out = box_raw!(revocation); + Status::Success + }, + Err(e) => fry_status!(ctx, Err::<(), failure::Error>(e)), + } +} + +/// Frees the TSK. +#[no_mangle] +pub extern "system" fn sq_tsk_free(tsk: Option<&mut TSK>) { + ffi_free!(tsk) +} + +/// Returns a reference to the corresponding TPK. +#[no_mangle] +pub extern "system" fn sq_tsk_tpk(tsk: *const TSK) + -> *const TPK { + let tsk = ffi_param_ref!(tsk); + tsk.tpk() +} + +/// Converts the TSK into a TPK. +#[no_mangle] +pub extern "system" fn sq_tsk_into_tpk(tsk: *mut TSK) + -> *mut TPK { + let tsk = ffi_param_move!(tsk); + box_raw!(tsk.into_tpk()) +} + + +/// Serializes the TSK. +#[no_mangle] +pub extern "system" fn sq_tsk_serialize(ctx: *mut Context, + tsk: *const TSK, + writer: *mut Box<Write>) + -> Status { + let ctx = ffi_param_ref_mut!(ctx); + let tsk = ffi_param_ref!(tsk); + let writer = ffi_param_ref_mut!(writer); + fry_status!(ctx, tsk.serialize(writer)) +} |