7#include "signatureutils.h"
8#include <KLocalizedString>
12static QString handleEmpty(
const QString &
string, CertificateInfo::EmptyString empty)
14 if (
string.isEmpty()) {
16 case CertificateInfo::EmptyString::Empty:
18 case CertificateInfo::EmptyString::TranslatedNotAvailable:
19 return i18n(
"Not Available");
30 QString distinguishedName;
34class Okular::CertificateInfoPrivate :
public QSharedData
39 QByteArray serialNumber;
40 EntityInfo issuerInfo;
41 EntityInfo subjectInfo;
43 QDateTime validityStart;
44 QDateTime validityEnd;
45 CertificateInfo::KeyUsageExtensions keyUsageExtensions = CertificateInfo::KuNone;
47 CertificateInfo::PublicKeyType publicKeyType = CertificateInfo::OtherKey;
48 int publicKeyStrength = -1;
49 bool isSelfSigned =
false;
50 QByteArray certificateData;
51 CertificateInfo::Backend backend = CertificateInfo::Backend::Unknown;
52 CertificateInfo::KeyLocation keyLocation = CertificateInfo::KeyLocation::Unknown;
53 CertificateInfo::CertificateType certificateType = CertificateInfo::CertificateType::X509;
54 bool isQualified =
false;
55 std::function<bool(QString)> checkPasswordFunction;
58CertificateInfo::CertificateInfo()
59 : d {new CertificateInfoPrivate()}
63Okular::CertificateInfo::CertificateInfo(
const Okular::CertificateInfo &other) =
default;
64Okular::CertificateInfo::CertificateInfo(Okular::CertificateInfo &&other)
noexcept =
default;
65Okular::CertificateInfo &Okular::CertificateInfo::operator=(
const Okular::CertificateInfo &other) =
default;
66CertificateInfo &Okular::CertificateInfo::operator=(Okular::CertificateInfo &&other)
noexcept =
default;
68CertificateInfo::~CertificateInfo() =
default;
70Q_DECLARE_OPERATORS_FOR_FLAGS(CertificateInfo::KeyUsageExtensions)
72bool CertificateInfo::isNull()
const
77void CertificateInfo::setNull(
bool isNull)
82int CertificateInfo::version()
const
86void CertificateInfo::setVersion(
int version)
91QByteArray CertificateInfo::serialNumber()
const
93 return d->serialNumber;
95void CertificateInfo::setSerialNumber(
const QByteArray &serialNumber)
97 d->serialNumber = serialNumber;
100QString CertificateInfo::issuerInfo(EntityInfoKey key, EmptyString empty)
const
103 case EntityInfoKey::CommonName:
104 return handleEmpty(d->issuerInfo.commonName, empty);
105 case EntityInfoKey::DistinguishedName:
106 return handleEmpty(d->issuerInfo.distinguishedName, empty);
107 case EntityInfoKey::EmailAddress:
108 return handleEmpty(d->issuerInfo.emailAddress, empty);
109 case EntityInfoKey::Organization:
110 return handleEmpty(d->issuerInfo.organization, empty);
115void CertificateInfo::setIssuerInfo(EntityInfoKey key,
const QString &value)
118 case EntityInfoKey::CommonName:
119 d->issuerInfo.commonName = value;
121 case EntityInfoKey::DistinguishedName:
122 d->issuerInfo.distinguishedName = value;
124 case EntityInfoKey::EmailAddress:
125 d->issuerInfo.emailAddress = value;
127 case EntityInfoKey::Organization:
128 d->issuerInfo.organization = value;
133QString CertificateInfo::subjectInfo(EntityInfoKey key, EmptyString empty)
const
136 case EntityInfoKey::CommonName:
137 return handleEmpty(d->subjectInfo.commonName, empty);
138 case EntityInfoKey::DistinguishedName:
139 return handleEmpty(d->subjectInfo.distinguishedName, empty);
140 case EntityInfoKey::EmailAddress:
141 return handleEmpty(d->subjectInfo.emailAddress, empty);
142 case EntityInfoKey::Organization:
143 return handleEmpty(d->subjectInfo.organization, empty);
148void CertificateInfo::setSubjectInfo(EntityInfoKey key,
const QString &value)
151 case EntityInfoKey::CommonName:
152 d->subjectInfo.commonName = value;
154 case EntityInfoKey::DistinguishedName:
155 d->subjectInfo.distinguishedName = value;
157 case EntityInfoKey::EmailAddress:
158 d->subjectInfo.emailAddress = value;
160 case EntityInfoKey::Organization:
161 d->subjectInfo.organization = value;
166QString CertificateInfo::nickName()
const
171void CertificateInfo::setNickName(
const QString &nickName)
173 d->nickName = nickName;
176QDateTime CertificateInfo::validityStart()
const
178 return d->validityStart;
181void CertificateInfo::setValidityStart(
const QDateTime &
start)
183 d->validityStart =
start;
186QDateTime CertificateInfo::validityEnd()
const
188 return d->validityEnd;
191void Okular::CertificateInfo::setValidityEnd(
const QDateTime &validityEnd)
193 d->validityEnd = validityEnd;
196CertificateInfo::KeyUsageExtensions CertificateInfo::keyUsageExtensions()
const
198 return d->keyUsageExtensions;
201void Okular::CertificateInfo::setKeyUsageExtensions(Okular::CertificateInfo::KeyUsageExtensions ext)
203 d->keyUsageExtensions = ext;
206QByteArray CertificateInfo::publicKey()
const
211void Okular::CertificateInfo::setPublicKey(
const QByteArray &publicKey)
213 d->publicKey = publicKey;
216CertificateInfo::PublicKeyType CertificateInfo::publicKeyType()
const
218 return d->publicKeyType;
221void CertificateInfo::setPublicKeyType(PublicKeyType type)
223 d->publicKeyType =
type;
226int CertificateInfo::publicKeyStrength()
const
228 return d->publicKeyStrength;
231void CertificateInfo::setPublicKeyStrength(
int strength)
233 d->publicKeyStrength = strength;
236bool CertificateInfo::isSelfSigned()
const
238 return d->isSelfSigned;
241void CertificateInfo::setSelfSigned(
bool selfSigned)
243 d->isSelfSigned = selfSigned;
246QByteArray CertificateInfo::certificateData()
const
248 return d->certificateData;
251void CertificateInfo::setCertificateData(
const QByteArray &certificateData)
253 d->certificateData = certificateData;
256CertificateInfo::KeyLocation CertificateInfo::keyLocation()
const
258 return d->keyLocation;
261void CertificateInfo::setKeyLocation(KeyLocation location)
266CertificateInfo::Backend CertificateInfo::backend()
const
271void CertificateInfo::setBackend(Backend backend)
273 d->backend = backend;
276bool CertificateInfo::checkPassword(
const QString &password)
const
278 if (d->checkPasswordFunction) {
279 return d->checkPasswordFunction(password);
284void CertificateInfo::setCheckPasswordFunction(
const std::function<
bool(
const QString &)> &passwordFunction)
286 d->checkPasswordFunction = passwordFunction;
289bool CertificateInfo::isQualified()
const
291 return d->isQualified;
294void CertificateInfo::setQualified(
bool qualified)
296 d->isQualified = qualified;
299CertificateInfo::CertificateType CertificateInfo::certificateType()
const
301 return d->certificateType;
304void CertificateInfo::setCertificateType(CertificateType type)
306 d->certificateType =
type;
309class Okular::SignatureInfoPrivate :
public QSharedData
312 SignatureInfo::SignatureStatus signatureStatus = SignatureInfo::SignatureStatusUnknown;
313 SignatureInfo::CertificateStatus certificateStatus = SignatureInfo::CertificateStatusUnknown;
314 SignatureInfo::HashAlgorithm hashAlgorithm = SignatureInfo::HashAlgorithmUnknown;
316 QString signerSubjectDN;
319 QDateTime signingTime;
320 QByteArray signature;
321 QList<qint64> signedRangeBounds;
322 bool signsTotalDocument =
false;
326SignatureInfo::SignatureInfo()
327 : d {new SignatureInfoPrivate()}
331SignatureInfo::SignatureInfo(SignatureInfo &&other)
noexcept =
default;
332SignatureInfo::SignatureInfo(
const SignatureInfo &other) =
default;
333SignatureInfo &SignatureInfo::operator=(SignatureInfo &&other)
noexcept =
default;
334Okular::SignatureInfo &Okular::SignatureInfo::operator=(
const Okular::SignatureInfo &other) =
default;
335SignatureInfo::~SignatureInfo() =
default;
337SignatureInfo::SignatureStatus SignatureInfo::signatureStatus()
const
339 return d->signatureStatus;
342void SignatureInfo::setSignatureStatus(SignatureInfo::SignatureStatus
status)
344 d->signatureStatus =
status;
347SignatureInfo::CertificateStatus SignatureInfo::certificateStatus()
const
349 return d->certificateStatus;
352void SignatureInfo::setCertificateStatus(SignatureInfo::CertificateStatus
status)
354 d->certificateStatus =
status;
357SignatureInfo::HashAlgorithm SignatureInfo::hashAlgorithm()
const
359 return d->hashAlgorithm;
362void Okular::SignatureInfo::setHashAlgorithm(Okular::SignatureInfo::HashAlgorithm algorithm)
364 d->hashAlgorithm = algorithm;
367QString SignatureInfo::signerName()
const
369 return d->signerName;
372void SignatureInfo::setSignerName(
const QString &signerName)
374 d->signerName = signerName;
377QString SignatureInfo::signerSubjectDN()
const
379 return d->signerSubjectDN;
382void Okular::SignatureInfo::setSignerSubjectDN(
const QString &signerSubjectDN)
384 d->signerSubjectDN = signerSubjectDN;
387QString SignatureInfo::location()
const
392void SignatureInfo::setLocation(
const QString &location)
394 d->location = location;
397QString SignatureInfo::reason()
const
402void Okular::SignatureInfo::setReason(
const QString &reason)
407QDateTime SignatureInfo::signingTime()
const
409 return d->signingTime;
412void Okular::SignatureInfo::setSigningTime(
const QDateTime &time)
414 d->signingTime = time;
417QByteArray SignatureInfo::signature()
const
422void SignatureInfo::setSignature(
const QByteArray &signature)
424 d->signature = signature;
427QList<qint64> SignatureInfo::signedRangeBounds()
const
429 return d->signedRangeBounds;
432void SignatureInfo::setSignedRangeBounds(
const QList<qint64> &range)
434 d->signedRangeBounds = range;
437bool SignatureInfo::signsTotalDocument()
const
439 return d->signsTotalDocument;
442void SignatureInfo::setSignsTotalDocument(
bool total)
444 d->signsTotalDocument = total;
447CertificateInfo SignatureInfo::certificateInfo()
const
449 return d->certificateInfo;
452void SignatureInfo::setCertificateInfo(
const Okular::CertificateInfo &info)
454 d->certificateInfo = info;
457CertificateStore::CertificateStore()
467 *userCancelled =
false;
475 auto it = certs.
begin();
476 *nonDateValidCerts =
false;
477 while (it != certs.
end()) {
478 if (it->validityStart() > now || (it->validityEnd().isValid() && now > it->validityEnd())) {
479 it = certs.
erase(it);
480 *nonDateValidCerts =
true;
QList< CertificateInfo > signingCertificatesForNow(bool *userCancelled, bool *nonDateValidCerts) const
Returns list of valid, usable signing certificates for current date and time.
virtual ~CertificateStore()
Destructor.
virtual QList< CertificateInfo > signingCertificates(bool *userCancelled) const
Returns list of valid, usable signing certificates.
Q_SCRIPTABLE CaptureState status()
Q_SCRIPTABLE Q_NOREPLY void start()
QString i18n(const char *text, const TYPE &arg...)
Type type(const QSqlDatabase &db)
QVariant location(const QVariant &res)
QMultiMap< CertificateInfoType, QString > CertificateInfo
QDateTime currentDateTime()
iterator erase(const_iterator begin, const_iterator end)