Blame lang/cpp/src/tofuinfo.cpp

Packit d7e8d0
/* tofuinfo.cpp - wraps gpgme tofu info
Packit d7e8d0
  Copyright (C) 2016 by Bundesamt für Sicherheit in der Informationstechnik
Packit d7e8d0
  Software engineering by Intevation GmbH
Packit d7e8d0
Packit d7e8d0
  This file is part of GPGME++.
Packit d7e8d0
Packit d7e8d0
  GPGME++ is free software; you can redistribute it and/or
Packit d7e8d0
  modify it under the terms of the GNU Library General Public
Packit d7e8d0
  License as published by the Free Software Foundation; either
Packit d7e8d0
  version 2 of the License, or (at your option) any later version.
Packit d7e8d0
Packit d7e8d0
  GPGME++ is distributed in the hope that it will be useful,
Packit d7e8d0
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit d7e8d0
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit d7e8d0
  GNU Library General Public License for more details.
Packit d7e8d0
Packit d7e8d0
  You should have received a copy of the GNU Library General Public License
Packit d7e8d0
  along with GPGME++; see the file COPYING.LIB.  If not, write to the
Packit d7e8d0
  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Packit d7e8d0
  Boston, MA 02110-1301, USA.
Packit d7e8d0
*/
Packit d7e8d0
Packit d7e8d0
#ifdef HAVE_CONFIG_H
Packit d7e8d0
 #include "config.h"
Packit d7e8d0
#endif
Packit d7e8d0
Packit d7e8d0
#include "tofuinfo.h"
Packit d7e8d0
Packit d7e8d0
#include <istream>
Packit d7e8d0
#include "util.h"
Packit d7e8d0
Packit d7e8d0
class GpgME::TofuInfo::Private
Packit d7e8d0
{
Packit d7e8d0
public:
Packit d7e8d0
    Private() {}
Packit d7e8d0
    Private(gpgme_tofu_info_t info)
Packit d7e8d0
        : mInfo(info ? new _gpgme_tofu_info(*info) : nullptr)
Packit d7e8d0
    {
Packit d7e8d0
        if (mInfo && mInfo->description) {
Packit d7e8d0
            mInfo->description = strdup(mInfo->description);
Packit d7e8d0
        }
Packit d7e8d0
    }
Packit d7e8d0
Packit d7e8d0
    Private(const Private &other)
Packit d7e8d0
        : mInfo(other.mInfo)
Packit d7e8d0
    {
Packit d7e8d0
        if (mInfo && mInfo->description) {
Packit d7e8d0
            mInfo->description = strdup(mInfo->description);
Packit d7e8d0
        }
Packit d7e8d0
    }
Packit d7e8d0
Packit d7e8d0
    ~Private()
Packit d7e8d0
    {
Packit d7e8d0
        if (mInfo) {
Packit d7e8d0
            std::free(mInfo->description);
Packit d7e8d0
            mInfo->description = nullptr;
Packit d7e8d0
Packit d7e8d0
            delete mInfo;
Packit d7e8d0
        }
Packit d7e8d0
    }
Packit d7e8d0
Packit d7e8d0
    gpgme_tofu_info_t mInfo;
Packit d7e8d0
};
Packit d7e8d0
Packit d7e8d0
GpgME::TofuInfo::TofuInfo(gpgme_tofu_info_t info)
Packit d7e8d0
    : d(new Private(info))
Packit d7e8d0
{
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
GpgME::TofuInfo::TofuInfo() : d()
Packit d7e8d0
{
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
bool GpgME::TofuInfo::isNull() const
Packit d7e8d0
{
Packit d7e8d0
    return !d || !d->mInfo;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
GpgME::TofuInfo::Validity GpgME::TofuInfo::validity() const
Packit d7e8d0
{
Packit d7e8d0
    if (isNull()) {
Packit d7e8d0
        return ValidityUnknown;
Packit d7e8d0
    }
Packit d7e8d0
    switch (d->mInfo->validity) {
Packit d7e8d0
        case 0:
Packit d7e8d0
            return Conflict;
Packit d7e8d0
        case 1:
Packit d7e8d0
            return NoHistory;
Packit d7e8d0
        case 2:
Packit d7e8d0
            return LittleHistory;
Packit d7e8d0
        case 3:
Packit d7e8d0
            return BasicHistory;
Packit d7e8d0
        case 4:
Packit d7e8d0
            return LargeHistory;
Packit d7e8d0
        default:
Packit d7e8d0
            return ValidityUnknown;
Packit d7e8d0
    }
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
GpgME::TofuInfo::Policy GpgME::TofuInfo::policy() const
Packit d7e8d0
{
Packit d7e8d0
    if (isNull()) {
Packit d7e8d0
        return PolicyUnknown;
Packit d7e8d0
    }
Packit d7e8d0
    switch (d->mInfo->policy) {
Packit d7e8d0
        case GPGME_TOFU_POLICY_NONE:
Packit d7e8d0
            return PolicyNone;
Packit d7e8d0
        case GPGME_TOFU_POLICY_AUTO:
Packit d7e8d0
            return PolicyAuto;
Packit d7e8d0
        case GPGME_TOFU_POLICY_GOOD:
Packit d7e8d0
            return PolicyGood;
Packit d7e8d0
        case GPGME_TOFU_POLICY_BAD:
Packit d7e8d0
            return PolicyBad;
Packit d7e8d0
        case GPGME_TOFU_POLICY_ASK:
Packit d7e8d0
            return PolicyAsk;
Packit d7e8d0
        case GPGME_TOFU_POLICY_UNKNOWN:
Packit d7e8d0
        default:
Packit d7e8d0
            return PolicyUnknown;
Packit d7e8d0
    }
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
const char *GpgME::TofuInfo::description() const
Packit d7e8d0
{
Packit d7e8d0
    return isNull() ? nullptr : d->mInfo->description;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
unsigned short GpgME::TofuInfo::signCount() const
Packit d7e8d0
{
Packit d7e8d0
    return isNull() ? 0 : d->mInfo->signcount;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
unsigned short GpgME::TofuInfo::encrCount() const
Packit d7e8d0
{
Packit d7e8d0
    return isNull() ? 0 : d->mInfo->encrcount;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
unsigned long GpgME::TofuInfo::signFirst() const
Packit d7e8d0
{
Packit d7e8d0
    return isNull() ? 0 : d->mInfo->signfirst;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
unsigned long GpgME::TofuInfo::signLast() const
Packit d7e8d0
{
Packit d7e8d0
    return isNull() ? 0 : d->mInfo->signlast;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
unsigned long GpgME::TofuInfo::encrFirst() const
Packit d7e8d0
{
Packit d7e8d0
    return isNull() ? 0 : d->mInfo->encrfirst;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
unsigned long GpgME::TofuInfo::encrLast() const
Packit d7e8d0
{
Packit d7e8d0
    return isNull() ? 0 : d->mInfo->encrlast;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
std::ostream &GpgME::operator<<(std::ostream &os, const GpgME::TofuInfo &info)
Packit d7e8d0
{
Packit d7e8d0
    os << "GpgME::Signature::TofuInfo(";
Packit d7e8d0
    if (!info.isNull()) {
Packit d7e8d0
        os << "\n desc: "     << protect(info.description())
Packit d7e8d0
           << "\n validity: " << info.validity()
Packit d7e8d0
           << "\n policy: "   << info.policy()
Packit d7e8d0
           << "\n signcount: "<< info.signCount()
Packit d7e8d0
           << "\n signfirst: "<< info.signFirst()
Packit d7e8d0
           << "\n signlast: " << info.signLast()
Packit d7e8d0
           << "\n encrcount: "<< info.encrCount()
Packit d7e8d0
           << "\n encrfirst: "<< info.encrFirst()
Packit d7e8d0
           << "\n encrlast: " << info.encrLast()
Packit d7e8d0
           << '\n';
Packit d7e8d0
    }
Packit d7e8d0
    return os << ")";
Packit d7e8d0
}