diff --git a/lang/cpp/src/key.cpp b/lang/cpp/src/key.cpp index 6f40f666..204eeca2 100644 --- a/lang/cpp/src/key.cpp +++ b/lang/cpp/src/key.cpp @@ -28,6 +28,8 @@ #include #include +#include +#include const GpgME::Key::Null GpgME::Key::null; @@ -848,4 +850,41 @@ const char *UserID::Signature::policyURL() const return 0; } +std::ostream &operator<<(std::ostream &os, const UserID &uid) +{ + os << "GpgME::UserID("; + if (!uid.isNull()) { + os << "\n name: " << protect(uid.name()) + << "\n email: " << protect(uid.email()) + << "\n comment: " << protect(uid.comment()) + << "\n validity: " << uid.validityAsString() + << "\n revoked: " << uid.isRevoked() + << "\n invalid: " << uid.isInvalid() + << "\n numsigs: " << uid.numSignatures() + << "\n tofuinfo:\n" << uid.tofuInfo(); + } + return os << ')'; +} + +std::ostream &operator<<(std::ostream &os, const Key &key) +{ + os << "GpgME::Key("; + if (!key.isNull()) { + os << "\n protocol: " << protect(key.protocolAsString()) + << "\n ownertrust: " << key.ownerTrustAsString() + << "\n issuer: " << protect(key.issuerName()) + << "\n fingerprint:" << protect(key.primaryFingerprint()) + << "\n listmode: " << key.keyListMode() + << "\n canSign: " << key.canReallySign() + << "\n canEncrypt: " << key.canEncrypt() + << "\n canCertify: " << key.canCertify() + << "\n canAuth: " << key.canAuthenticate() + << "\n uids:\n"; + const std::vector uids = key.userIDs(); + std::copy(uids.begin(), uids.end(), + std::ostream_iterator(os, "\n")); + } + return os << ')'; +} + } // namespace GpgME diff --git a/lang/cpp/src/key.h b/lang/cpp/src/key.h index e8d7ee23..85b16dfc 100644 --- a/lang/cpp/src/key.h +++ b/lang/cpp/src/key.h @@ -391,6 +391,9 @@ private: gpgme_key_sig_t sig; }; +GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const UserID &uid); +GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const Key &key); + } // namespace GpgME GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION(Key)