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 
16 namespace governikus
17 {
18 
29 {
30  ASN1_OBJECT* mProtocol;
31  ASN1_TYPE* mRequiredData;
32  ASN1_TYPE* mOptionalData;
33 };
34 
35 DECLARE_ASN1_FUNCTIONS(securityinfo_st)
36 #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
37 DECLARE_STACK_OF(securityinfo_st)
38 #else
39 DEFINE_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:
63  SecurityInfo();
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
friend class QSharedPointer< SecurityInfo >
Definition: SecurityInfo.h:49
SecurityProtocol getProtocol() const
Definition: SecurityInfo.cpp:64
SecurityInfo()
Definition: SecurityInfo.cpp:39
static QSharedPointer< SecurityInfo > decode(const QByteArray &pBytes)
Definition: SecurityInfo.h:66
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