|
35 | 35 | using namespace digidoc;
|
36 | 36 | using namespace std;
|
37 | 37 |
|
| 38 | +template<typename C, typename T> |
| 39 | +[[nodiscard]] |
| 40 | +constexpr bool contains(const C &list, const T &value) |
| 41 | +{ |
| 42 | + return find(list.begin(), list.end(), std::forward<decltype(value)>(value)) != list.end(); |
| 43 | +}; |
| 44 | + |
38 | 45 | const X509CertStore::Type X509CertStore::CA {
|
39 | 46 | "http://uri.etsi.org/TrstSvc/Svctype/CA/QC",
|
40 | 47 | };
|
41 | 48 |
|
42 | 49 | const X509CertStore::Type X509CertStore::TSA {
|
43 |
| - "http://uri.etsi.org/TrstSvc/Svctype/TSA", |
44 | 50 | "http://uri.etsi.org/TrstSvc/Svctype/TSA/QTST",
|
45 |
| - "http://uri.etsi.org/TrstSvc/Svctype/TSA/TSS-QC", |
46 |
| - "http://uri.etsi.org/TrstSvc/Svctype/TSA/TSS-AdESQCandQES", |
47 | 51 | };
|
48 | 52 |
|
49 | 53 | const X509CertStore::Type X509CertStore::OCSP {
|
@@ -240,29 +244,24 @@ bool X509CertStore::verify(const X509Cert &cert, bool noqscd) const
|
240 | 244 | const vector<string> policies = cert.certificatePolicies();
|
241 | 245 | const vector<string> qcstatement = cert.qcStatements();
|
242 | 246 | const vector<X509Cert::KeyUsage> keyUsage = cert.keyUsage();
|
243 |
| - auto containsPolicy = [&policies](const string &policy) { |
244 |
| - return find(policies.cbegin(), policies.cend(), policy) != policies.cend(); |
245 |
| - }; |
246 |
| - auto containsQCStatement = [&qcstatement](const string &statement) { |
247 |
| - return find(qcstatement.cbegin(), qcstatement.cend(), statement) != qcstatement.cend(); |
248 |
| - }; |
249 |
| - |
250 |
| - bool isQCCompliant = containsQCStatement(X509Cert::QC_COMPLIANT); |
| 247 | + bool isQCCompliant = contains(qcstatement, X509Cert::QC_COMPLIANT); |
251 | 248 | bool isQSCD =
|
252 |
| - containsPolicy(X509Cert::QCP_PUBLIC_WITH_SSCD) || |
253 |
| - containsPolicy(X509Cert::QCP_LEGAL_QSCD) || |
254 |
| - containsPolicy(X509Cert::QCP_NATURAL_QSCD) || |
255 |
| - containsQCStatement(X509Cert::QC_SSCD); |
| 249 | + contains(policies, X509Cert::QCP_PUBLIC_WITH_SSCD) || |
| 250 | + contains(policies, X509Cert::QCP_LEGAL_QSCD) || |
| 251 | + contains(policies, X509Cert::QCP_NATURAL_QSCD) || |
| 252 | + contains(qcstatement, X509Cert::QC_SSCD); |
256 | 253 |
|
257 |
| - bool isESeal = // Special treamtent for E-Seals |
258 |
| - containsPolicy(X509Cert::QCP_LEGAL) || |
259 |
| - containsQCStatement(X509Cert::QCT_ESEAL); |
260 |
| - auto matchPolicySet = [&containsPolicy](const vector<string> &policySet){ |
261 |
| - return all_of(policySet.cbegin(), policySet.cend(), containsPolicy); |
| 254 | + bool isESeal = // Special treamtent for E-Seals |
| 255 | + contains(policies, X509Cert::QCP_LEGAL) || |
| 256 | + contains(qcstatement, X509Cert::QCT_ESEAL); |
| 257 | + auto matchPolicySet = [&policies](const vector<string> &policySet){ |
| 258 | + return all_of(policySet.cbegin(), policySet.cend(), [&policies](const string &policy) { |
| 259 | + return contains(policies, policy); |
| 260 | + }); |
262 | 261 | };
|
263 | 262 | auto matchKeyUsageSet = [&keyUsage](const map<X509Cert::KeyUsage,bool> &keyUsageSet){
|
264 | 263 | return all_of(keyUsageSet.cbegin(), keyUsageSet.cend(), [&keyUsage](pair<X509Cert::KeyUsage, bool> keyUsageBit){
|
265 |
| - return (find(keyUsage.cbegin(), keyUsage.cend(), keyUsageBit.first) != keyUsage.cend()) == keyUsageBit.second; |
| 264 | + return contains(keyUsage, keyUsageBit.first) == keyUsageBit.second; |
266 | 265 | });
|
267 | 266 | };
|
268 | 267 |
|
|
0 commit comments