From e391a08c6f96cd2d93c49b888459ee3f42058118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20Kl=C3=B6cker?= Date: Tue, 4 May 2021 18:35:47 +0200 Subject: [PATCH] cpp: Add getters for the attributes of a trust signature * lang/cpp/src/key.h (TrustSignatureTrust): New enum. * lang/cpp/src/key.h, lang/cpp/src/key.cpp (UserID::Signature::isTrustSignature): New. (UserID::Signature::trustValue): New. (UserID::Signature::trustDepth): New. (UserID::Signature::trustScope): New. -- GnuPG-bug-id: 5245, 5420 --- NEWS | 4 ++++ lang/cpp/src/key.cpp | 23 +++++++++++++++++++++++ lang/cpp/src/key.h | 11 +++++++++++ 3 files changed, 38 insertions(+) diff --git a/NEWS b/NEWS index e8272bb0..5aa556c1 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,10 @@ Noteworthy changes in version 1.15.2 (unreleased) * Interface changes relative to the 1.15.1 release: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + cpp: UserID::Signature::isTrustSignature NEW. + cpp: UserID::Signature::trustValue NEW. + cpp: UserID::Signature::trustDepth NEW. + cpp: UserID::Signature::trustScope NEW. gpgme_key_sig_t EXTENDED: New field 'trust_depth'. gpgme_key_sig_t EXTENDED: New field 'trust_value'. gpgme_key_sig_t EXTENDED: New field 'trust_scope'. diff --git a/lang/cpp/src/key.cpp b/lang/cpp/src/key.cpp index f9cc2b60..b893a7cd 100644 --- a/lang/cpp/src/key.cpp +++ b/lang/cpp/src/key.cpp @@ -1083,6 +1083,29 @@ const char *UserID::Signature::policyURL() const return nullptr; } +bool UserID::Signature::isTrustSignature() const +{ + return sig && sig->trust_depth > 0; +} + +TrustSignatureTrust UserID::Signature::trustValue() const +{ + if (!sig || !isTrustSignature()) { + return TrustSignatureTrust::None; + } + return sig->trust_value >= 120 ? TrustSignatureTrust::Complete : TrustSignatureTrust::Partial; +} + +unsigned int UserID::Signature::trustDepth() const +{ + return sig ? sig->trust_depth : 0; +} + +const char *UserID::Signature::trustScope() const +{ + return sig ? sig->trust_scope : nullptr; +} + std::string UserID::addrSpecFromString(const char *userid) { if (!userid) { diff --git a/lang/cpp/src/key.h b/lang/cpp/src/key.h index 515bf185..0e6380db 100644 --- a/lang/cpp/src/key.h +++ b/lang/cpp/src/key.h @@ -47,6 +47,12 @@ class TofuInfo; typedef std::shared_ptr< std::remove_pointer::type > shared_gpgme_key_t; +enum class TrustSignatureTrust : char { + None = 0, + Partial, + Complete, +}; + // // class Key // @@ -514,6 +520,11 @@ public: GpgME::Notation notation(unsigned int idx) const; std::vector notations() const; + bool isTrustSignature() const; + TrustSignatureTrust trustValue() const; + unsigned int trustDepth() const; + const char *trustScope() const; + private: shared_gpgme_key_t key; gpgme_user_id_t uid;