summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ffi/include/sequoia/openpgp.h26
-rw-r--r--ffi/src/openpgp.rs36
2 files changed, 40 insertions, 22 deletions
diff --git a/ffi/include/sequoia/openpgp.h b/ffi/include/sequoia/openpgp.h
index c2702c95..0e0439f8 100644
--- a/ffi/include/sequoia/openpgp.h
+++ b/ffi/include/sequoia/openpgp.h
@@ -367,28 +367,10 @@ typedef enum sq_tag {
SQ_TAG_PRIVATE3 = 63,
} sq_tag_t;
-static inline const char *sq_tag_to_string(sq_tag_t tag) {
- switch (tag) {
- case SQ_TAG_PKESK: return "PKESK";
- case SQ_TAG_SIGNATURE: return "SIGNATURE";
- case SQ_TAG_SKESK: return "SKESK";
- case SQ_TAG_ONE_PASS_SIG: return "ONE PASS SIG";
- case SQ_TAG_SECRET_KEY: return "SECRET KEY";
- case SQ_TAG_PUBLIC_KEY: return "PUBLIC KEY";
- case SQ_TAG_SECRET_SUBKEY: return "SECRET SUBKEY";
- case SQ_TAG_COMPRESSED_DATA: return "COMPRESSED DATA";
- case SQ_TAG_SED: return "SED";
- case SQ_TAG_MARKER: return "MARKER";
- case SQ_TAG_LITERAL: return "LITERAL";
- case SQ_TAG_TRUST: return "TRUST";
- case SQ_TAG_USER_ID: return "USER ID";
- case SQ_TAG_PUBLIC_SUBKEY: return "PUBLIC SUBKEY";
- case SQ_TAG_USER_ATTRIBUTE: return "USER ATTRIBUTE";
- case SQ_TAG_SEIP: return "SEIP";
- case SQ_TAG_MDC: return "MDC";
- default: return "OTHER";
- }
-}
+/*/
+/// Returns a human-readable tag name.
+/*/
+const char *sq_tag_to_string (sq_tag_t tag);
/*/
/// Opaque types for all the Packets that Sequoia understands.
diff --git a/ffi/src/openpgp.rs b/ffi/src/openpgp.rs
index 3db1aa70..d98aa50c 100644
--- a/ffi/src/openpgp.rs
+++ b/ffi/src/openpgp.rs
@@ -24,6 +24,7 @@ use self::openpgp::{
Packet,
packet::{
Signature,
+ Tag,
PKESK,
SKESK,
key::SecretKey,
@@ -62,6 +63,41 @@ use super::build_hasher;
use super::error::Status;
use super::core::Context;
+/* openpgp::packet::Tag. */
+
+/// Returns a human-readable tag name.
+///
+/// ```c
+/// #include <assert.h>
+/// #include <string.h>
+/// #include <sequoia.h>
+///
+/// assert (strcmp (sq_tag_to_string (2), "SIGNATURE") == 0);
+/// ```
+#[no_mangle]
+pub extern "system" fn sq_tag_to_string(tag: u8) -> *const c_char {
+ match Tag::from(tag) {
+ Tag::PKESK => "PKESK\x00",
+ Tag::Signature => "SIGNATURE\x00",
+ Tag::SKESK => "SKESK\x00",
+ Tag::OnePassSig => "ONE PASS SIG\x00",
+ Tag::SecretKey => "SECRET KEY\x00",
+ Tag::PublicKey => "PUBLIC KEY\x00",
+ Tag::SecretSubkey => "SECRET SUBKEY\x00",
+ Tag::CompressedData => "COMPRESSED DATA\x00",
+ Tag::SED => "SED\x00",
+ Tag::Marker => "MARKER\x00",
+ Tag::Literal => "LITERAL\x00",
+ Tag::Trust => "TRUST\x00",
+ Tag::UserID => "USER ID\x00",
+ Tag::PublicSubkey => "PUBLIC SUBKEY\x00",
+ Tag::UserAttribute => "USER ATTRIBUTE\x00",
+ Tag::SEIP => "SEIP\x00",
+ Tag::MDC => "MDC\x00",
+ _ => "OTHER\x00",
+ }.as_bytes().as_ptr() as *const c_char
+}
+
/* sequoia::openpgp::KeyID. */
/// Reads a binary key ID.