AusweisApp2
SecurityInfo.h
gehe zur Dokumentation dieser Datei
1
7#pragma once
8
9#include "ASN1TemplateUtil.h"
10#include "SecurityProtocol.h"
11
12#include <QSharedPointer>
13#include <openssl/asn1.h>
14
15
16namespace governikus
17{
18
29{
30 ASN1_OBJECT* mProtocol;
31 ASN1_TYPE* mRequiredData;
32 ASN1_TYPE* mOptionalData;
33};
34
35DECLARE_ASN1_FUNCTIONS(securityinfo_st)
36#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
37DECLARE_STACK_OF(securityinfo_st)
38#else
39DEFINE_STACK_OF(securityinfo_st)
40#endif
41
42/*
43 * Because OpenSSL's template macro system does not support inheritance,
44 * we wrap the securityinfo_st in class SecurityInfo and use this for inheritance.
45 */
47{
48 Q_DISABLE_COPY(SecurityInfo)
49 friend class QSharedPointer<SecurityInfo>;
50
51 private:
52 const QSharedPointer<const securityinfo_st> mDelegate;
53
54 explicit SecurityInfo(const QSharedPointer<const securityinfo_st>& pDelegate);
55
56 /*
57 * Sub classes must override this method to allow the base class to access
58 * the protocol's ASN1_OBJECT pointer.
59 */
60 [[nodiscard]] virtual ASN1_OBJECT* getProtocolObjectIdentifier() const;
61
62 protected:
64
65 public:
66 static QSharedPointer<SecurityInfo> decode(const QByteArray& pBytes)
67 {
68 if (const auto& delegate = decodeObject<securityinfo_st>(pBytes))
69 {
70 return QSharedPointer<SecurityInfo>::create(delegate);
71 }
73 }
74
75
76 virtual ~SecurityInfo() = default;
77
81 [[nodiscard]] Oid getOid() const;
82
86 [[nodiscard]] SecurityProtocol getProtocol() const;
87};
88
89
91
92} // namespace governikus
#define DECLARE_ASN1_OBJECT(name)
Definition: ASN1TemplateUtil.h:169
Definition: SecurityInfo.h:47
static QSharedPointer< SecurityInfo > decode(const QByteArray &pBytes)
Definition: SecurityInfo.h:66
friend class QSharedPointer< SecurityInfo >
Definition: SecurityInfo.h:49
SecurityProtocol getProtocol() const
Definition: SecurityInfo.cpp:64
SecurityInfo()
Definition: SecurityInfo.cpp:39
virtual ~SecurityInfo()=default
Oid getOid() const
Definition: SecurityInfo.cpp:58
A simple template renderer.
Definition: ActivationContext.h:15
Definition: SecurityInfo.h:29
ASN1_TYPE * mOptionalData
Definition: SecurityInfo.h:32
ASN1_OBJECT * mProtocol
Definition: SecurityInfo.h:30
ASN1_TYPE * mRequiredData
Definition: SecurityInfo.h:31