aboutsummaryrefslogtreecommitdiffstats
path: root/lang/cpp/src/verificationresult.cpp
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2025-02-03 09:49:25 +0000
committerIngo Klöcker <[email protected]>2025-02-03 09:55:40 +0000
commit763d5f5d6a88ec938b8678ab597e1404af724553 (patch)
tree7f3791e3560bd3a51470494bf965b9f9a40a87bd /lang/cpp/src/verificationresult.cpp
parentbuild: Fix generation of ChangeLog on secondary working trees (diff)
downloadgpgme-763d5f5d6a88ec938b8678ab597e1404af724553.tar.gz
gpgme-763d5f5d6a88ec938b8678ab597e1404af724553.zip
cpp,qt: Remove C++ and Qt bindings
* README: Update. * configure.ac: Remove checks, variables and file generations related to the C++/Qt bindings. Remove cpp and qt* from available_languages and default_languages. * lang/Makefile.am (DIST_SUBDIRS): Remove cpp and qt. * lang/cpp, lang/qt: Remove. * m4/ax_check_compile_flag.m4, m4/ax_cxx_compile_stdcxx.m4, m4/ax_gcc_func_attribute.m4, m4/pkg.m4, m4/qt5.m4, m4/qt6.m4: Remove. -- The C++ and Qt bindings have been moved to separate Git repositories: gpgmepp and gpgmeqt. GnuPG-bug-id: 7262
Diffstat (limited to 'lang/cpp/src/verificationresult.cpp')
-rw-r--r--lang/cpp/src/verificationresult.cpp642
1 files changed, 0 insertions, 642 deletions
diff --git a/lang/cpp/src/verificationresult.cpp b/lang/cpp/src/verificationresult.cpp
deleted file mode 100644
index 0299fcec..00000000
--- a/lang/cpp/src/verificationresult.cpp
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- verificationresult.cpp - wraps a gpgme verify result
- Copyright (C) 2004 Klarälvdalens Datakonsult AB
- 2016 Bundesamt für Sicherheit in der Informationstechnik
- Software engineering by Intevation GmbH
-
- This file is part of GPGME++.
-
- GPGME++ is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- GPGME++ is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with GPGME++; see the file COPYING.LIB. If not, write to the
- Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifdef HAVE_CONFIG_H
- #include "config.h"
-#endif
-
-#include <verificationresult.h>
-#include <notation.h>
-#include "result_p.h"
-#include "util.h"
-#include "key.h"
-#include "context.h"
-
-#include <gpgme.h>
-
-#include <istream>
-#include <algorithm>
-#include <iterator>
-#include <string>
-#include <cstring>
-#include <cstdlib>
-
-#include <string.h>
-
-class GpgME::VerificationResult::Private
-{
-public:
- explicit Private(const gpgme_verify_result_t r)
- {
- if (!r) {
- return;
- }
- if (r->file_name) {
- file_name = r->file_name;
- }
- // copy recursively, using compiler-generated copy ctor.
- // We just need to handle the pointers in the structs:
- for (gpgme_signature_t is = r->signatures ; is ; is = is->next) {
- gpgme_signature_t scopy = new _gpgme_signature(*is);
- if (is->fpr) {
- scopy->fpr = strdup(is->fpr);
- }
-// PENDING(marc) why does this crash on Windows in strdup()?
-# ifndef _WIN32
- if (is->pka_address) {
- scopy->pka_address = strdup(is->pka_address);
- }
-# else
- scopy->pka_address = nullptr;
-# endif
- scopy->next = nullptr;
- sigs.push_back(scopy);
- // copy keys
- if (scopy->key) {
- keys.push_back(Key(scopy->key, true));
- } else {
- keys.push_back(Key());
- }
- // copy notations:
- nota.push_back(std::vector<Nota>());
- purls.push_back(nullptr);
- for (gpgme_sig_notation_t in = is->notations ; in ; in = in->next) {
- if (!in->name) {
- if (in->value) {
- purls.back() = strdup(in->value); // policy url
- }
- continue;
- }
- Nota n = { nullptr, nullptr, in->flags };
- n.name = strdup(in->name);
- if (in->value) {
- n.value = strdup(in->value);
- }
- nota.back().push_back(n);
- }
- }
- }
- ~Private()
- {
- for (std::vector<gpgme_signature_t>::iterator it = sigs.begin() ; it != sigs.end() ; ++it) {
- std::free((*it)->fpr);
- std::free((*it)->pka_address);
- delete *it; *it = nullptr;
- }
- for (std::vector< std::vector<Nota> >::iterator it = nota.begin() ; it != nota.end() ; ++it) {
- for (std::vector<Nota>::iterator jt = it->begin() ; jt != it->end() ; ++jt) {
- std::free(jt->name); jt->name = nullptr;
- std::free(jt->value); jt->value = nullptr;
- }
- }
- std::for_each(purls.begin(), purls.end(), &std::free);
- }
-
- struct Nota {
- char *name;
- char *value;
- gpgme_sig_notation_flags_t flags;
- };
-
- std::vector<gpgme_signature_t> sigs;
- std::vector< std::vector<Nota> > nota;
- std::vector<GpgME::Key> keys;
- std::vector<char *> purls;
- std::string file_name;
- Protocol proto;
-};
-
-GpgME::VerificationResult::VerificationResult(gpgme_ctx_t ctx, int error)
- : GpgME::Result(error), d()
-{
- init(ctx);
-}
-
-GpgME::VerificationResult::VerificationResult(gpgme_ctx_t ctx, const Error &error)
- : GpgME::Result(error), d()
-{
- init(ctx);
-}
-
-void GpgME::VerificationResult::init(gpgme_ctx_t ctx)
-{
- if (!ctx) {
- return;
- }
- gpgme_verify_result_t res = gpgme_op_verify_result(ctx);
- if (!res) {
- return;
- }
- d.reset(new Private(res));
- gpgme_protocol_t proto = gpgme_get_protocol(ctx);
- d->proto = proto == GPGME_PROTOCOL_OpenPGP ? OpenPGP :
- proto == GPGME_PROTOCOL_CMS ? CMS :
- UnknownProtocol;
-}
-
-make_standard_stuff(VerificationResult)
-
-const char *GpgME::VerificationResult::fileName() const
-{
- return d ? d->file_name.c_str() : nullptr ;
-}
-
-unsigned int GpgME::VerificationResult::numSignatures() const
-{
- return d ? d->sigs.size() : 0 ;
-}
-
-GpgME::Signature GpgME::VerificationResult::signature(unsigned int idx) const
-{
- return Signature(d, idx);
-}
-
-std::vector<GpgME::Signature> GpgME::VerificationResult::signatures() const
-{
- if (!d) {
- return std::vector<Signature>();
- }
- std::vector<Signature> result;
- result.reserve(d->sigs.size());
- for (unsigned int i = 0 ; i < d->sigs.size() ; ++i) {
- result.push_back(Signature(d, i));
- }
- return result;
-}
-
-GpgME::Signature::Signature(const std::shared_ptr<VerificationResult::Private> &parent, unsigned int i)
- : d(parent), idx(i)
-{
-}
-
-GpgME::Signature::Signature() : d(), idx(0) {}
-
-bool GpgME::Signature::isNull() const
-{
- return !d || idx >= d->sigs.size() ;
-}
-
-GpgME::Signature::Summary GpgME::Signature::summary() const
-{
- if (isNull()) {
- return None;
- }
- gpgme_sigsum_t sigsum = d->sigs[idx]->summary;
- unsigned int result = 0;
- if (sigsum & GPGME_SIGSUM_VALID) {
- result |= Valid;
- }
- if (sigsum & GPGME_SIGSUM_GREEN) {
- result |= Green;
- }
- if (sigsum & GPGME_SIGSUM_RED) {
- result |= Red;
- }
- if (sigsum & GPGME_SIGSUM_KEY_REVOKED) {
- result |= KeyRevoked;
- }
- if (sigsum & GPGME_SIGSUM_KEY_EXPIRED) {
- result |= KeyExpired;
- }
- if (sigsum & GPGME_SIGSUM_SIG_EXPIRED) {
- result |= SigExpired;
- }
- if (sigsum & GPGME_SIGSUM_KEY_MISSING) {
- result |= KeyMissing;
- }
- if (sigsum & GPGME_SIGSUM_CRL_MISSING) {
- result |= CrlMissing;
- }
- if (sigsum & GPGME_SIGSUM_CRL_TOO_OLD) {
- result |= CrlTooOld;
- }
- if (sigsum & GPGME_SIGSUM_BAD_POLICY) {
- result |= BadPolicy;
- }
- if (sigsum & GPGME_SIGSUM_SYS_ERROR) {
- result |= SysError;
- }
- if (sigsum & GPGME_SIGSUM_TOFU_CONFLICT) {
- result |= TofuConflict;
- }
- return static_cast<Summary>(result);
-}
-
-const char *GpgME::Signature::fingerprint() const
-{
- return isNull() ? nullptr : d->sigs[idx]->fpr ;
-}
-
-GpgME::Error GpgME::Signature::status() const
-{
- return Error(isNull() ? 0 : d->sigs[idx]->status);
-}
-
-time_t GpgME::Signature::creationTime() const
-{
- return static_cast<time_t>(isNull() ? 0 : d->sigs[idx]->timestamp);
-}
-
-time_t GpgME::Signature::expirationTime() const
-{
- return static_cast<time_t>(isNull() ? 0 : d->sigs[idx]->exp_timestamp);
-}
-
-bool GpgME::Signature::neverExpires() const
-{
- return expirationTime() == (time_t)0;
-}
-
-bool GpgME::Signature::isWrongKeyUsage() const
-{
- return !isNull() && d->sigs[idx]->wrong_key_usage;
-}
-
-bool GpgME::Signature::isVerifiedUsingChainModel() const
-{
- return !isNull() && d->sigs[idx]->chain_model;
-}
-
-bool GpgME::Signature::isDeVs() const
-{
- return !isNull() && d->sigs[idx]->is_de_vs;
-}
-
-bool GpgME::Signature::isBetaCompliance() const
-{
- return !isNull() && d->sigs[idx]->beta_compliance;
-}
-
-GpgME::Signature::PKAStatus GpgME::Signature::pkaStatus() const
-{
- if (!isNull()) {
- return static_cast<PKAStatus>(d->sigs[idx]->pka_trust);
- }
- return UnknownPKAStatus;
-}
-
-const char *GpgME::Signature::pkaAddress() const
-{
- if (!isNull()) {
- return d->sigs[idx]->pka_address;
- }
- return nullptr;
-}
-
-GpgME::Signature::Validity GpgME::Signature::validity() const
-{
- if (isNull()) {
- return Unknown;
- }
- switch (d->sigs[idx]->validity) {
- default:
- case GPGME_VALIDITY_UNKNOWN: return Unknown;
- case GPGME_VALIDITY_UNDEFINED: return Undefined;
- case GPGME_VALIDITY_NEVER: return Never;
- case GPGME_VALIDITY_MARGINAL: return Marginal;
- case GPGME_VALIDITY_FULL: return Full;
- case GPGME_VALIDITY_ULTIMATE: return Ultimate;
- }
-}
-
-char GpgME::Signature::validityAsString() const
-{
- if (isNull()) {
- return '?';
- }
- switch (d->sigs[idx]->validity) {
- default:
- case GPGME_VALIDITY_UNKNOWN: return '?';
- case GPGME_VALIDITY_UNDEFINED: return 'q';
- case GPGME_VALIDITY_NEVER: return 'n';
- case GPGME_VALIDITY_MARGINAL: return 'm';
- case GPGME_VALIDITY_FULL: return 'f';
- case GPGME_VALIDITY_ULTIMATE: return 'u';
- }
-}
-
-GpgME::Error GpgME::Signature::nonValidityReason() const
-{
- return Error(isNull() ? 0 : d->sigs[idx]->validity_reason);
-}
-
-unsigned int GpgME::Signature::publicKeyAlgorithm() const
-{
- if (!isNull()) {
- return d->sigs[idx]->pubkey_algo;
- }
- return 0;
-}
-
-const char *GpgME::Signature::publicKeyAlgorithmAsString() const
-{
- if (!isNull()) {
- return gpgme_pubkey_algo_name(d->sigs[idx]->pubkey_algo);
- }
- return nullptr;
-}
-
-unsigned int GpgME::Signature::hashAlgorithm() const
-{
- if (!isNull()) {
- return d->sigs[idx]->hash_algo;
- }
- return 0;
-}
-
-const char *GpgME::Signature::hashAlgorithmAsString() const
-{
- if (!isNull()) {
- return gpgme_hash_algo_name(d->sigs[idx]->hash_algo);
- }
- return nullptr;
-}
-
-const char *GpgME::Signature::policyURL() const
-{
- return isNull() ? nullptr : d->purls[idx] ;
-}
-
-GpgME::Notation GpgME::Signature::notation(unsigned int nidx) const
-{
- return GpgME::Notation(d, idx, nidx);
-}
-
-std::vector<GpgME::Notation> GpgME::Signature::notations() const
-{
- if (isNull()) {
- return std::vector<GpgME::Notation>();
- }
- std::vector<GpgME::Notation> result;
- result.reserve(d->nota[idx].size());
- for (unsigned int i = 0 ; i < d->nota[idx].size() ; ++i) {
- result.push_back(GpgME::Notation(d, idx, i));
- }
- return result;
-}
-
-GpgME::Key GpgME::Signature::key() const
-{
- if (isNull()) {
- return Key();
- }
- return d->keys[idx];
-}
-
-GpgME::Key GpgME::Signature::key(bool search, bool update) const
-{
- if (isNull()) {
- return Key();
- }
-
- GpgME::Key ret = key();
- if (ret.isNull() && search && fingerprint ()) {
- auto ctx = Context::createForProtocol (d->proto);
- if (ctx) {
- ctx->setKeyListMode(KeyListMode::Local |
- KeyListMode::Signatures |
- KeyListMode::SignatureNotations |
- KeyListMode::Validate |
- KeyListMode::WithTofu |
- KeyListMode::WithKeygrip);
- Error e;
- ret = d->keys[idx] = ctx->key(fingerprint(), e, false);
- delete ctx;
- }
- }
- if (update) {
- d->keys[idx].update();
- ret = d->keys[idx];
- }
- return ret;
-}
-
-class GpgME::Notation::Private
-{
-public:
- Private() : d(), sidx(0), nidx(0), nota(nullptr) {}
- Private(const std::shared_ptr<VerificationResult::Private> &priv, unsigned int sindex, unsigned int nindex)
- : d(priv), sidx(sindex), nidx(nindex), nota(nullptr)
- {
-
- }
- Private(gpgme_sig_notation_t n)
- : d(), sidx(0), nidx(0), nota(n ? new _gpgme_sig_notation(*n) : nullptr)
- {
- if (nota && nota->name) {
- nota->name = strdup(nota->name);
- }
- if (nota && nota->value) {
- nota->value = strdup(nota->value);
- }
- }
- Private(const Private &other)
- : d(other.d), sidx(other.sidx), nidx(other.nidx), nota(other.nota)
- {
- if (nota) {
- nota->name = strdup(nota->name);
- nota->value = strdup(nota->value);
- }
- }
- ~Private()
- {
- if (nota) {
- std::free(nota->name); nota->name = nullptr;
- std::free(nota->value); nota->value = nullptr;
- delete nota;
- }
- }
-
- std::shared_ptr<VerificationResult::Private> d;
- unsigned int sidx, nidx;
- gpgme_sig_notation_t nota;
-};
-
-GpgME::Notation::Notation(const std::shared_ptr<VerificationResult::Private> &parent, unsigned int sindex, unsigned int nindex)
- : d(new Private(parent, sindex, nindex))
-{
-
-}
-
-GpgME::Notation::Notation(gpgme_sig_notation_t nota)
- : d(new Private(nota))
-{
-
-}
-
-GpgME::Notation::Notation() : d() {}
-
-bool GpgME::Notation::isNull() const
-{
- if (!d) {
- return true;
- }
- if (d->d) {
- return d->sidx >= d->d->nota.size() || d->nidx >= d->d->nota[d->sidx].size() ;
- }
- return !d->nota;
-}
-
-const char *GpgME::Notation::name() const
-{
- return
- isNull() ? nullptr :
- d->d ? d->d->nota[d->sidx][d->nidx].name :
- d->nota ? d->nota->name : nullptr ;
-}
-
-const char *GpgME::Notation::value() const
-{
- return
- isNull() ? nullptr :
- d->d ? d->d->nota[d->sidx][d->nidx].value :
- d->nota ? d->nota->value : nullptr ;
-}
-
-GpgME::Notation::Flags GpgME::Notation::flags() const
-{
- return
- convert_from_gpgme_sig_notation_flags_t(
- isNull() ? 0:
- d->d ? d->d->nota[d->sidx][d->nidx].flags :
- d->nota ? d->nota->flags : 0);
-}
-
-bool GpgME::Notation::isHumanReadable() const
-{
- return flags() & HumanReadable;
-}
-
-bool GpgME::Notation::isCritical() const
-{
- return flags() & Critical;
-}
-
-std::ostream &GpgME::operator<<(std::ostream &os, const VerificationResult &result)
-{
- os << "GpgME::VerificationResult(";
- if (!result.isNull()) {
- os << "\n error: " << result.error()
- << "\n fileName: " << protect(result.fileName())
- << "\n signatures:\n";
- const std::vector<Signature> sigs = result.signatures();
- std::copy(sigs.begin(), sigs.end(),
- std::ostream_iterator<Signature>(os, "\n"));
- }
- return os << ')';
-}
-
-std::ostream &GpgME::operator<<(std::ostream &os, Signature::PKAStatus pkaStatus)
-{
- os << "GpgME::Signature::PKAStatus(";
- switch (pkaStatus) {
-#define OUTPUT( x ) case GpgME::Signature:: x: os << #x; break
- OUTPUT(UnknownPKAStatus);
- OUTPUT(PKAVerificationFailed);
- OUTPUT(PKAVerificationSucceeded);
-#undef OUTPUT
- default:
- os << "??? (" << static_cast<int>(pkaStatus) << ')';
- break;
- }
- return os << ')';
-}
-
-std::ostream &GpgME::operator<<(std::ostream &os, Signature::Summary summary)
-{
- os << "GpgME::Signature::Summary(";
- if (summary == Signature::None) {
- os << "None";
- } else {
-#define OUTPUT( x ) if ( !(summary & (GpgME::Signature:: x)) ) {} else do { os << #x " "; } while(0)
- OUTPUT(Valid);
- OUTPUT(Green);
- OUTPUT(Red);
- OUTPUT(KeyRevoked);
- OUTPUT(KeyExpired);
- OUTPUT(SigExpired);
- OUTPUT(KeyMissing);
- OUTPUT(CrlMissing);
- OUTPUT(CrlTooOld);
- OUTPUT(BadPolicy);
- OUTPUT(SysError);
- OUTPUT(TofuConflict);
-#undef OUTPUT
- }
- return os << ')';
-}
-
-std::ostream &GpgME::operator<<(std::ostream &os, const Signature &sig)
-{
- os << "GpgME::Signature(";
- if (!sig.isNull()) {
- os << "\n Summary: " << sig.summary()
- << "\n Fingerprint: " << protect(sig.fingerprint())
- << "\n Status: " << sig.status()
- << "\n creationTime: " << sig.creationTime()
- << "\n expirationTime: " << sig.expirationTime()
- << "\n isWrongKeyUsage: " << sig.isWrongKeyUsage()
- << "\n isVerifiedUsingChainModel: " << sig.isVerifiedUsingChainModel()
- << "\n pkaStatus: " << sig.pkaStatus()
- << "\n pkaAddress: " << protect(sig.pkaAddress())
- << "\n validity: " << sig.validityAsString()
- << "\n nonValidityReason: " << sig.nonValidityReason()
- << "\n publicKeyAlgorithm: " << protect(sig.publicKeyAlgorithmAsString())
- << "\n hashAlgorithm: " << protect(sig.hashAlgorithmAsString())
- << "\n policyURL: " << protect(sig.policyURL())
- << "\n isDeVs: " << sig.isDeVs()
- << "\n isBetaCompliance: " << sig.isBetaCompliance()
- << "\n notations:\n";
- const std::vector<Notation> nota = sig.notations();
- std::copy(nota.begin(), nota.end(),
- std::ostream_iterator<Notation>(os, "\n"));
- }
- return os << ')';
-}
-
-std::ostream &GpgME::operator<<(std::ostream &os, Notation::Flags flags)
-{
- os << "GpgME::Notation::Flags(";
- if (flags == Notation::NoFlags) {
- os << "NoFlags";
- } else {
-#define OUTPUT( x ) if ( !(flags & (GpgME::Notation:: x)) ) {} else do { os << #x " "; } while(0)
- OUTPUT(HumanReadable);
- OUTPUT(Critical);
-#undef OUTPUT
- }
- return os << ')';
-}
-
-std::ostream &GpgME::operator<<(std::ostream &os, const Notation &nota)
-{
- os << "GpgME::Signature::Notation(";
- if (!nota.isNull()) {
- os << "\n name: " << protect(nota.name())
- << "\n value: " << protect(nota.value())
- << "\n flags: " << nota.flags()
- << '\n';
- }
- return os << ")";
-}