diff --git a/lang/cpp/src/key.cpp b/lang/cpp/src/key.cpp index 204eeca2..cfa1ba31 100644 --- a/lang/cpp/src/key.cpp +++ b/lang/cpp/src/key.cpp @@ -24,6 +24,7 @@ #include "util.h" #include "tofuinfo.h" +#include "context.h" #include @@ -322,6 +323,27 @@ const Key &Key::mergeWith(const Key &other) return *this; } +void Key::update() +{ + auto ctx = Context::createForProtocol(protocol()); + if (!ctx) { + return; + } + ctx->setKeyListMode(KeyListMode::Local | + KeyListMode::Signatures | + KeyListMode::SignatureNotations | + KeyListMode::Validate | + KeyListMode::WithTofu); + Error err; + auto newKey = ctx->key(primaryFingerprint(), err, hasSecret()); + delete ctx; + if (err) { + return; + } + swap(newKey); + return; +} + // // // class Subkey diff --git a/lang/cpp/src/key.h b/lang/cpp/src/key.h index 85b16dfc..f193093c 100644 --- a/lang/cpp/src/key.h +++ b/lang/cpp/src/key.h @@ -146,6 +146,12 @@ public: unsigned int keyListMode() const; + /*! Update information about this key. + * Starts a keylisting for this key with validity + * and tofu information gathering. Blocks for + * how long the keylisting takes.*/ + void update(); + private: gpgme_key_t impl() const {