7 #include "signatureutils.h"
8 #include <KLocalizedString>
12 static 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");
34 class Okular::CertificateInfoPrivate :
public QSharedData
40 EntityInfo issuerInfo;
41 EntityInfo subjectInfo;
45 CertificateInfo::KeyUsageExtensions keyUsageExtensions = CertificateInfo::KuNone;
47 CertificateInfo::PublicKeyType publicKeyType = CertificateInfo::OtherKey;
48 int publicKeyStrength = -1;
49 bool isSelfSigned =
false;
51 CertificateInfo::Backend backend = CertificateInfo::Backend::Unknown;
52 std::function<bool(
QString)> checkPasswordFunction;
55 CertificateInfo::CertificateInfo()
56 : d {
new CertificateInfoPrivate()}
60 Okular::CertificateInfo::CertificateInfo(
const Okular::CertificateInfo &other) =
default;
61 Okular::CertificateInfo::CertificateInfo(Okular::CertificateInfo &&other) noexcept =
default;
62 Okular::CertificateInfo &Okular::CertificateInfo::operator=(
const Okular::CertificateInfo &other) =
default;
63 CertificateInfo &Okular::CertificateInfo::operator=(Okular::CertificateInfo &&other) noexcept =
default;
65 CertificateInfo::~CertificateInfo() =
default;
67 Q_DECLARE_OPERATORS_FOR_FLAGS(CertificateInfo::KeyUsageExtensions)
69 bool CertificateInfo::isNull()
const
74 void CertificateInfo::setNull(
bool isNull)
79 int CertificateInfo::version()
const
83 void CertificateInfo::setVersion(
int version)
88 QByteArray CertificateInfo::serialNumber()
const
90 return d->serialNumber;
92 void CertificateInfo::setSerialNumber(
const QByteArray &serialNumber)
94 d->serialNumber = serialNumber;
97 QString CertificateInfo::issuerInfo(EntityInfoKey key, EmptyString empty)
const
100 case EntityInfoKey::CommonName:
101 return handleEmpty(d->issuerInfo.commonName, empty);
102 case EntityInfoKey::DistinguishedName:
103 return handleEmpty(d->issuerInfo.distinguishedName, empty);
104 case EntityInfoKey::EmailAddress:
105 return handleEmpty(d->issuerInfo.emailAddress, empty);
106 case EntityInfoKey::Organization:
107 return handleEmpty(d->issuerInfo.organization, empty);
112 void CertificateInfo::setIssuerInfo(EntityInfoKey key,
const QString &value)
115 case EntityInfoKey::CommonName:
116 d->issuerInfo.commonName = value;
118 case EntityInfoKey::DistinguishedName:
119 d->issuerInfo.distinguishedName = value;
121 case EntityInfoKey::EmailAddress:
122 d->issuerInfo.emailAddress = value;
124 case EntityInfoKey::Organization:
125 d->issuerInfo.organization = value;
130 QString CertificateInfo::subjectInfo(EntityInfoKey key, EmptyString empty)
const
133 case EntityInfoKey::CommonName:
134 return handleEmpty(d->subjectInfo.commonName, empty);
135 case EntityInfoKey::DistinguishedName:
136 return handleEmpty(d->subjectInfo.distinguishedName, empty);
137 case EntityInfoKey::EmailAddress:
138 return handleEmpty(d->subjectInfo.emailAddress, empty);
139 case EntityInfoKey::Organization:
140 return handleEmpty(d->subjectInfo.organization, empty);
145 void CertificateInfo::setSubjectInfo(EntityInfoKey key,
const QString &value)
148 case EntityInfoKey::CommonName:
149 d->subjectInfo.commonName = value;
151 case EntityInfoKey::DistinguishedName:
152 d->subjectInfo.distinguishedName = value;
154 case EntityInfoKey::EmailAddress:
155 d->subjectInfo.emailAddress = value;
157 case EntityInfoKey::Organization:
158 d->subjectInfo.organization = value;
163 QString CertificateInfo::nickName()
const
168 void CertificateInfo::setNickName(
const QString &nickName)
170 d->nickName = nickName;
173 QDateTime CertificateInfo::validityStart()
const
175 return d->validityStart;
180 d->validityStart =
start;
183 QDateTime CertificateInfo::validityEnd()
const
185 return d->validityEnd;
188 void Okular::CertificateInfo::setValidityEnd(
const QDateTime &validityEnd)
190 d->validityEnd = validityEnd;
193 CertificateInfo::KeyUsageExtensions CertificateInfo::keyUsageExtensions()
const
195 return d->keyUsageExtensions;
198 void Okular::CertificateInfo::setKeyUsageExtensions(Okular::CertificateInfo::KeyUsageExtensions ext)
200 d->keyUsageExtensions = ext;
208 void Okular::CertificateInfo::setPublicKey(
const QByteArray &publicKey)
210 d->publicKey = publicKey;
213 CertificateInfo::PublicKeyType CertificateInfo::publicKeyType()
const
215 return d->publicKeyType;
218 void CertificateInfo::setPublicKeyType(PublicKeyType type)
220 d->publicKeyType =
type;
223 int CertificateInfo::publicKeyStrength()
const
225 return d->publicKeyStrength;
228 void CertificateInfo::setPublicKeyStrength(
int strength)
230 d->publicKeyStrength = strength;
233 bool CertificateInfo::isSelfSigned()
const
235 return d->isSelfSigned;
238 void CertificateInfo::setSelfSigned(
bool selfSigned)
240 d->isSelfSigned = selfSigned;
243 QByteArray CertificateInfo::certificateData()
const
245 return d->certificateData;
248 void CertificateInfo::setCertificateData(
const QByteArray &certificateData)
250 d->certificateData = certificateData;
253 CertificateInfo::Backend CertificateInfo::backend()
const
258 void CertificateInfo::setBackend(Backend backend)
260 d->backend = backend;
263 bool CertificateInfo::checkPassword(
const QString &password)
const
265 if (d->checkPasswordFunction) {
266 return d->checkPasswordFunction(password);
271 void CertificateInfo::setCheckPasswordFunction(
const std::function<
bool(
const QString &)> &passwordFunction)
273 d->checkPasswordFunction = passwordFunction;
276 class Okular::SignatureInfoPrivate :
public QSharedData
279 SignatureInfo::SignatureStatus signatureStatus = SignatureInfo::SignatureStatusUnknown;
280 SignatureInfo::CertificateStatus certificateStatus = SignatureInfo::CertificateStatusUnknown;
281 SignatureInfo::HashAlgorithm hashAlgorithm = SignatureInfo::HashAlgorithmUnknown;
289 bool signsTotalDocument =
false;
293 SignatureInfo::SignatureInfo()
294 : d {
new SignatureInfoPrivate()}
298 SignatureInfo::SignatureInfo(SignatureInfo &&other) noexcept =
default;
299 SignatureInfo::SignatureInfo(
const SignatureInfo &other) =
default;
300 SignatureInfo &SignatureInfo::operator=(SignatureInfo &&other) noexcept =
default;
301 Okular::SignatureInfo &Okular::SignatureInfo::operator=(
const Okular::SignatureInfo &other) =
default;
302 SignatureInfo::~SignatureInfo() =
default;
304 SignatureInfo::SignatureStatus SignatureInfo::signatureStatus()
const
306 return d->signatureStatus;
309 void SignatureInfo::setSignatureStatus(SignatureInfo::SignatureStatus
status)
311 d->signatureStatus =
status;
314 SignatureInfo::CertificateStatus SignatureInfo::certificateStatus()
const
316 return d->certificateStatus;
319 void SignatureInfo::setCertificateStatus(SignatureInfo::CertificateStatus
status)
321 d->certificateStatus =
status;
324 SignatureInfo::HashAlgorithm SignatureInfo::hashAlgorithm()
const
326 return d->hashAlgorithm;
329 void Okular::SignatureInfo::setHashAlgorithm(Okular::SignatureInfo::HashAlgorithm algorithm)
331 d->hashAlgorithm = algorithm;
334 QString SignatureInfo::signerName()
const
336 return d->signerName;
339 void SignatureInfo::setSignerName(
const QString &signerName)
341 d->signerName = signerName;
344 QString SignatureInfo::signerSubjectDN()
const
346 return d->signerSubjectDN;
349 void Okular::SignatureInfo::setSignerSubjectDN(
const QString &signerSubjectDN)
351 d->signerSubjectDN = signerSubjectDN;
354 QString SignatureInfo::location()
const
359 void SignatureInfo::setLocation(
const QString &location)
364 QString SignatureInfo::reason()
const
369 void Okular::SignatureInfo::setReason(
const QString &reason)
374 QDateTime SignatureInfo::signingTime()
const
376 return d->signingTime;
379 void Okular::SignatureInfo::setSigningTime(
const QDateTime &time)
381 d->signingTime = time;
389 void SignatureInfo::setSignature(
const QByteArray &signature)
391 d->signature = signature;
396 return d->signedRangeBounds;
399 void SignatureInfo::setSignedRangeBounds(
const QList<qint64> &range)
401 d->signedRangeBounds = range;
404 bool SignatureInfo::signsTotalDocument()
const
406 return d->signsTotalDocument;
409 void SignatureInfo::setSignsTotalDocument(
bool total)
411 d->signsTotalDocument = total;
416 return d->certificateInfo;
419 void SignatureInfo::setCertificateInfo(
const Okular::CertificateInfo &info)
421 d->certificateInfo = info;
424 CertificateStore::CertificateStore()
434 *userCancelled =
false;
442 auto it = certs.
begin();
443 *nonDateValidCerts =
false;
444 while (it != certs.
end()) {
445 if (it->validityStart() > now || now > it->validityEnd()) {
446 it = certs.
erase(it);
447 *nonDateValidCerts =
true;