diff options
author | Neal H. Walfield <neal@pep.foundation> | 2018-11-22 11:04:43 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@pep.foundation> | 2018-11-22 11:04:43 +0100 |
commit | fbaba5b7245e90cb445dd0a702bea371ec9f0757 (patch) | |
tree | b7115b08de4fdf3b97d72b01ce94c22432b7da8a /ffi | |
parent | 89c7f7d72f041cc739cde563558acd381164a965 (diff) |
ffi: Wrap Secret.
Diffstat (limited to 'ffi')
-rw-r--r-- | ffi/include/sequoia/openpgp.h | 7 | ||||
-rw-r--r-- | ffi/src/openpgp.rs | 26 |
2 files changed, 33 insertions, 0 deletions
diff --git a/ffi/include/sequoia/openpgp.h b/ffi/include/sequoia/openpgp.h index a46aa275..9d1ebdc1 100644 --- a/ffi/include/sequoia/openpgp.h +++ b/ffi/include/sequoia/openpgp.h @@ -1295,4 +1295,11 @@ sq_writer_stack_t sq_encryptor_new (sq_context_t ctx, size_t recipients_len, sq_encryption_mode_t mode); +typedef struct sq_secret *sq_secret_t; + +/*/ +/// Creates an sq_secret_t from a decrypted session key. +/*/ +sq_secret_t sq_secret_cached(uint8_t algo, + uint8_t *session_key, size_t session_key_len); #endif diff --git a/ffi/src/openpgp.rs b/ffi/src/openpgp.rs index a531fec0..95d1f521 100644 --- a/ffi/src/openpgp.rs +++ b/ffi/src/openpgp.rs @@ -34,6 +34,9 @@ use self::openpgp::tpk::{ }; use self::openpgp::packet; use self::openpgp::parse::{PacketParserResult, PacketParser, PacketParserEOF}; +use self::openpgp::parse::stream::{ + Secret, +}; use self::openpgp::serialize::Serialize; use self::openpgp::constants::{ DataFormat, @@ -2097,3 +2100,26 @@ pub extern "system" fn sq_encryptor_new &recipients, encryption_mode)) } + +// Secret. + +/// Creates an sq_secret_t from a decrypted session key. +#[no_mangle] +pub fn sq_secret_cached<'a>(algo: u8, + session_key: *const u8, + session_key_len: size_t) + -> *mut Secret +{ + let session_key = if session_key_len > 0 { + unsafe { + slice::from_raw_parts(session_key, session_key_len) + } + } else { + &[] + }; + + box_raw!(Secret::Cached { + algo: algo.into(), + session_key: session_key.to_vec().into() + }) +} |