9#include <openssl/asn1t.h>
10#include <openssl/err.h>
13#include <QLoggingCategory>
15#include <QSharedPointer>
17Q_DECLARE_LOGGING_CATEGORY(card)
30 static_assert(std::is_void<T>::value,
"Implement specialization of newAsn1Object");
39QSharedPointer<T>
newObject(
T* pObject = newAsn1Object<T>())
41 static auto deleter = [](
T* pObjectToDelete)
45 return QSharedPointer<T>(pObject, deleter);
55 static_assert(std::is_void<T>::value,
"Implement specialization of encodeObject");
67 unsigned char* encoded =
nullptr;
69 const auto guard = qScopeGuard([encoded] {
70 OPENSSL_free(encoded);
78 return QByteArray(
reinterpret_cast<char*
>(encoded), length);
88 static_assert(std::is_void<T>::value,
"Implement specialization of decodeObject");
99 static_assert(std::is_void<T>::value,
"Implement specialization of freeObject");
107QSharedPointer<T>
decodeObject(
const QByteArray& pData,
bool pLogging =
true)
110 const char* tmp = pData.constData();
111 const auto** dataPointer =
reinterpret_cast<unsigned const char**
>(&tmp);
119 static auto deleter = [](
T* pTypeObject)
123 return QSharedPointer<T>(
object, deleter);
130static const int CB_SUCCESS = 1;
136static const int CB_ERROR = 0;
139#define IMPLEMENT_ASN1_OBJECT(name)\
141 name * newAsn1Object<name>()\
143 return name##_new();\
147 int encodeAsn1Object<name>(name * pObject, unsigned char** encoded)\
149 return i2d_##name(pObject, encoded);\
153 name * decodeAsn1Object<name>(name** pObject, const unsigned char** pData, long pDataLen)\
155 return d2i_##name(pObject, pData, pDataLen);\
159 void freeAsn1Object<name>(name * pObject)\
161 name##_free(pObject);\
164#define DECLARE_ASN1_OBJECT(name)\
165 template<> name * newAsn1Object<name>();\
166 template<> int encodeAsn1Object<name>(name * pObject, unsigned char** encoded);\
167 template<> name * decodeAsn1Object<name>(name** pObject, const unsigned char** pData, long pDataLen);\
168 template<> void freeAsn1Object<name>(name * pObject);
#define T(v)
Definition: http_parser.cpp:237
Implementation of ActivationContext for Intent based activation on Android systems.
Definition: ActivationContext.h:15
int encodeAsn1Object(T *, unsigned char **)
Default template function for encoding an OpenSSL type.
Definition: ASN1TemplateUtil.h:53
T * newAsn1Object()
Default template function for creating an OpenSSL type.
Definition: ASN1TemplateUtil.h:28
QSharedPointer< T > newObject(T *pObject=newAsn1Object< T >())
Template function for creating a SharedPointer holding an ASN.1 OpenSSL type.
Definition: ASN1TemplateUtil.h:39
T * decodeAsn1Object(T **, const unsigned char **, long)
Default template function for decoding an OpenSSL type.
Definition: ASN1TemplateUtil.h:86
QByteArray getOpenSslError()
Definition: ASN1TemplateUtil.cpp:7
QSharedPointer< T > decodeObject(const QByteArray &pData, bool pLogging=true)
Template function for decoding an OpenSSL type from DER encoded QByteArray.
Definition: ASN1TemplateUtil.h:107
QByteArray encodeObject(T *pObject)
Template function for encoding an OpenSSL type as DER encoded QByteArray.
Definition: ASN1TemplateUtil.h:64
void freeAsn1Object(T *)
Default template function for freeing an OpenSSL type.
Definition: ASN1TemplateUtil.h:97