AusweisApp2
CVCertificate.h
gehe zur Dokumentation dieser Datei
1 
7 #pragma once
8 
9 
10 #include "CVCertificateBody.h"
11 
12 
13 #include <QByteArrayList>
14 #include <QDebug>
15 
16 #include <openssl/ecdsa.h>
17 
18 
19 namespace governikus
20 {
21 
37 struct SIGNATURE
38  : public ASN1_OCTET_STRING
39 {
40  // we use inheritance, because the structure ValidityDate is already a typedef of ASN1_OCTET_STRING
41  // and we cannot have two template specializations for the same type.
42 };
43 
44 
45 using CVCertificate = struct cvcertificate_st
46 {
47  CVCertificateBody* mBody;
49  ECDSA_SIG* mEcdsaSignature;
50 
51  static QVector<QSharedPointer<const cvcertificate_st>> fromRaw(const QByteArrayList& pByteList);
52  static QSharedPointer<const cvcertificate_st> fromRaw(const QByteArray& pBytes);
53 #ifndef QT_NO_DEBUG
54  static QSharedPointer<const cvcertificate_st> fromHex(const QByteArray& pBytes);
55 #endif
56  [[nodiscard]] QByteArray encode() const;
57 
58  [[nodiscard]] const CVCertificateBody& getBody() const;
59  [[nodiscard]] QByteArray getRawBody() const;
60  [[nodiscard]] const ECDSA_SIG* getEcdsaSignature() const;
61  [[nodiscard]] QByteArray getRawSignature() const;
62  [[nodiscard]] QByteArray getDerSignature() const;
63 
64  [[nodiscard]] bool isValidOn(const QDateTime& pValidationDate) const;
65  [[nodiscard]] bool isIssuedBy(const cvcertificate_st& pIssuer) const;
66 
67  static int decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt, void* pExarg);
68 };
69 
70 
71 DECLARE_ASN1_FUNCTIONS(CVCertificate)
73 
74 
75 inline bool operator==(const CVCertificate& pLeft, const CVCertificate& pRight)
76 {
77  return pLeft.getRawBody() == pRight.getRawBody() && pLeft.getRawSignature() == pRight.getRawSignature();
78 }
79 
80 
81 inline bool operator!=(const CVCertificate& pLeft, const CVCertificate& pRight)
82 {
83  return !(pLeft == pRight);
84 }
85 
86 
87 } // namespace governikus
88 
89 QDebug operator<<(QDebug pDbg, const governikus::CVCertificate& pCvc);
90 QDebug operator<<(QDebug pDbg, const QSharedPointer<const governikus::CVCertificate>& pCvc);
91 QDebug operator<<(QDebug pDbg, const QSharedPointer<governikus::CVCertificate>& pCvc);
92 QDebug operator<<(QDebug pDbg, const QVector<QSharedPointer<governikus::CVCertificate>>& pCvcs);
#define DECLARE_ASN1_OBJECT(name)
Definition: ASN1TemplateUtil.h:169
QDebug operator<<(QDebug pDbg, const governikus::CVCertificate &pCvc)
Definition: CVCertificate.cpp:173
A simple template renderer.
Definition: ActivationContext.h:15
const CVCertificateBody & getBody() const
QByteArray getRawSignature() const
Definition: CVCertificate.cpp:144
bool isValidOn(const QDateTime &pValidationDate) const
Definition: CVCertificate.cpp:160
QByteArray getDerSignature() const
Definition: CVCertificate.cpp:150
bool operator!=(const CVCertificate &pLeft, const CVCertificate &pRight)
Definition: CVCertificate.h:81
bool isIssuedBy(const cvcertificate_st &pIssuer) const
QByteArray getRawBody() const
Definition: CVCertificate.cpp:131
const ECDSA_SIG * getEcdsaSignature() const
Definition: CVCertificate.cpp:138
QByteArray encode() const
SIGNATURE * mSignature
Definition: CVCertificate.h:48
ECDSA_SIG * mEcdsaSignature
Definition: CVCertificate.h:49
struct cvcertificate_st { CVCertificateBody *mBody CVCertificate
Definition: CVCertificate.h:47
struct certificateprofilebody_st { ASN1_OCTET_STRING *mCertificateProfileIdentifier CVCertificateBody
Definition: CVCertificateBody.h:46
According to.
Definition: CVCertificate.h:39