diff options
-rw-r--r-- | ffi/include/sequoia/openpgp.h | 26 | ||||
-rw-r--r-- | ffi/src/openpgp.rs | 36 |
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. |