File size: 4,340 Bytes
a4f2c84 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
//========================================================================
//
// CertificateInfo.h
//
// This file is licensed under the GPLv2 or later
//
// Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@gmail.com>
// Copyright 2018, 2019 Albert Astals Cid <aacid@kde.org>
// Copyright 2018 Oliver Sander <oliver.sander@tu-dresden.de>
// Copyright 2020 Thorsten Behrens <Thorsten.Behrens@CIB.de>
// Copyright 2023 g10 Code GmbH, Author: Sune Stolborg Vuorela <sune@vuorela.dk>
//
//========================================================================
#ifndef CERTIFICATEINFO_H
#define CERTIFICATEINFO_H
#include <memory>
#include <ctime>
#include "goo/GooString.h"
#include "poppler_private_export.h"
enum CertificateKeyUsageExtension
{
KU_DIGITAL_SIGNATURE = 0x80,
KU_NON_REPUDIATION = 0x40,
KU_KEY_ENCIPHERMENT = 0x20,
KU_DATA_ENCIPHERMENT = 0x10,
KU_KEY_AGREEMENT = 0x08,
KU_KEY_CERT_SIGN = 0x04,
KU_CRL_SIGN = 0x02,
KU_ENCIPHER_ONLY = 0x01,
KU_NONE = 0x00
};
enum PublicKeyType
{
RSAKEY,
DSAKEY,
ECKEY,
OTHERKEY
};
/** A signing key can be located in different places
sometimes. For the user, it might be easier to pick
the key located on a card if it has some visual
indicator that it is somehow removable.
\note a keylocation for a certificate without a private
key (cannot be used for signing) will likely be "Unknown"
*/
enum class KeyLocation
{
Unknown, /** We don't know the location */
Other, /** We know the location, but it is somehow not covered by this enum */
Computer, /** The key is on this computer */
HardwareToken /** The key is on a dedicated hardware token, either a smartcard or a dedicated usb token (e.g. gnuk, nitrokey or yubikey) */
};
class POPPLER_PRIVATE_EXPORT X509CertificateInfo
{
public:
X509CertificateInfo();
~X509CertificateInfo();
X509CertificateInfo(const X509CertificateInfo &) = delete;
X509CertificateInfo &operator=(const X509CertificateInfo &) = delete;
struct PublicKeyInfo
{
PublicKeyInfo() = default;
PublicKeyInfo(PublicKeyInfo &&) noexcept = default;
PublicKeyInfo &operator=(PublicKeyInfo &&) noexcept = default;
PublicKeyInfo(const PublicKeyInfo &) = delete;
PublicKeyInfo &operator=(const PublicKeyInfo &) = delete;
GooString publicKey;
PublicKeyType publicKeyType = OTHERKEY;
unsigned int publicKeyStrength = 0; // in bits
};
struct EntityInfo
{
EntityInfo() = default;
~EntityInfo() = default;
EntityInfo(EntityInfo &&) noexcept = default;
EntityInfo &operator=(EntityInfo &&) noexcept = default;
EntityInfo(const EntityInfo &) = delete;
EntityInfo &operator=(const EntityInfo &) = delete;
std::string commonName;
std::string distinguishedName;
std::string email;
std::string organization;
};
struct Validity
{
Validity() : notBefore(0), notAfter(0) { }
time_t notBefore;
time_t notAfter;
};
/* GETTERS */
int getVersion() const;
const GooString &getSerialNumber() const;
const GooString &getNickName() const;
const EntityInfo &getIssuerInfo() const;
const Validity &getValidity() const;
const EntityInfo &getSubjectInfo() const;
const PublicKeyInfo &getPublicKeyInfo() const;
unsigned int getKeyUsageExtensions() const;
const GooString &getCertificateDER() const;
bool getIsSelfSigned() const;
KeyLocation getKeyLocation() const;
/* SETTERS */
void setVersion(int);
void setSerialNumber(const GooString &);
void setNickName(const GooString &);
void setIssuerInfo(EntityInfo &&);
void setValidity(Validity);
void setSubjectInfo(EntityInfo &&);
void setPublicKeyInfo(PublicKeyInfo &&);
void setKeyUsageExtensions(unsigned int);
void setCertificateDER(const GooString &);
void setIsSelfSigned(bool);
void setKeyLocation(KeyLocation location);
private:
EntityInfo issuer_info;
EntityInfo subject_info;
PublicKeyInfo public_key_info;
Validity cert_validity;
GooString cert_serial;
GooString cert_der;
GooString cert_nick;
unsigned int ku_extensions;
int cert_version;
bool is_self_signed;
KeyLocation keyLocation;
};
#endif
|