summaryrefslogtreecommitdiffstats
path: root/ffi
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@pep.foundation>2018-11-22 11:04:43 +0100
committerNeal H. Walfield <neal@pep.foundation>2018-11-22 11:04:43 +0100
commitfbaba5b7245e90cb445dd0a702bea371ec9f0757 (patch)
treeb7115b08de4fdf3b97d72b01ce94c22432b7da8a /ffi
parent89c7f7d72f041cc739cde563558acd381164a965 (diff)
ffi: Wrap Secret.
Diffstat (limited to 'ffi')
-rw-r--r--ffi/include/sequoia/openpgp.h7
-rw-r--r--ffi/src/openpgp.rs26
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()
+ })
+}