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>> fromHex(const QByteArrayList& pHexByteList);
52  static QSharedPointer<const cvcertificate_st> fromHex(const QByteArray& pHexBytes);
53  [[nodiscard]] QByteArray encode() const;
54 
55  [[nodiscard]] const CVCertificateBody& getBody() const;
56  [[nodiscard]] QByteArray getRawBody() const;
57  [[nodiscard]] const ECDSA_SIG* getEcdsaSignature() const;
58  [[nodiscard]] QByteArray getRawSignature() const;
59  [[nodiscard]] QByteArray getDerSignature() const;
60 
61  [[nodiscard]] bool isValidOn(const QDateTime& pValidationDate) const;
62  [[nodiscard]] bool isIssuedBy(const cvcertificate_st& pIssuer) const;
63 
64  static int decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt, void* pExarg);
65 };
66 
67 
68 DECLARE_ASN1_FUNCTIONS(CVCertificate)
70 
71 
72 inline bool operator==(const CVCertificate& pLeft, const CVCertificate& pRight)
73 {
74  return pLeft.getRawBody() == pRight.getRawBody() && pLeft.getRawSignature() == pRight.getRawSignature();
75 }
76 
77 
78 inline bool operator!=(const CVCertificate& pLeft, const CVCertificate& pRight)
79 {
80  return !(pLeft == pRight);
81 }
82 
83 
84 } // namespace governikus
85 
86 QDebug operator<<(QDebug pDbg, const governikus::CVCertificate& pCvc);
87 QDebug operator<<(QDebug pDbg, const QSharedPointer<const governikus::CVCertificate>& pCvc);
88 QDebug operator<<(QDebug pDbg, QSharedPointer<governikus::CVCertificate>& pCvc);
89 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:163
Implementation of ActivationContext for Intent based activation on Android systems.
Definition: ActivationContext.h:15
const CVCertificateBody & getBody() const
QByteArray getRawSignature() const
Definition: CVCertificate.cpp:134
bool isValidOn(const QDateTime &pValidationDate) const
Definition: CVCertificate.cpp:150
QByteArray getDerSignature() const
Definition: CVCertificate.cpp:140
bool operator!=(const CVCertificate &pLeft, const CVCertificate &pRight)
Definition: CVCertificate.h:78
bool isIssuedBy(const cvcertificate_st &pIssuer) const
QByteArray getRawBody() const
Definition: CVCertificate.cpp:121
const ECDSA_SIG * getEcdsaSignature() const
Definition: CVCertificate.cpp:128
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:45
According to.
Definition: CVCertificate.h:39