11#include <openssl/asn1t.h>
12#include <openssl/err.h>
15#include <QLoggingCategory>
17#include <QSharedPointer>
19Q_DECLARE_LOGGING_CATEGORY(card)
32 static_assert(std::is_void_v<T>,
"Implement specialization of newAsn1Object");
57 static_assert(std::is_void_v<T>,
"Implement specialization of encodeObject");
95 static_assert(std::is_void_v<T>,
"Implement specialization of decodeObject");
106 static_assert(std::is_void_v<T>,
"Implement specialization of freeObject");
119 const auto*
dataPointer =
reinterpret_cast<const unsigned char*
>(
pData.constData());
136static const int CB_SUCCESS = 1;
142static const int CB_ERROR = 0;
145#if OPENSSL_VERSION_NUMBER < 0x30000000L
146 #define i2d_const_cast(name, object) const_cast<name*>(object)
148 #define i2d_const_cast(name, object) object
152#define IMPLEMENT_ASN1_OBJECT(name)\
154 name * newAsn1Object<name>()\
156 return name##_new();\
160 int encodeAsn1Object<name>(const name * pObject, uchar** encoded)\
162 return i2d_##name(i2d_const_cast(name, pObject), encoded);\
166 name * decodeAsn1Object<name>(name** pObject, const uchar** pData, long pDataLen)\
168 return d2i_##name(pObject, pData, pDataLen);\
172 void freeAsn1Object<name>(name * pObject)\
174 name##_free(pObject);\
177#define DECLARE_ASN1_OBJECT(name)\
178 template<> name * newAsn1Object<name>();\
179 template<> int encodeAsn1Object<name>(const name * pObject, uchar** encoded);\
180 template<> name * decodeAsn1Object<name>(name** pObject, const uchar** pData, long pDataLen);\
181 template<> void freeAsn1Object<name>(name * pObject);
#define T(v)
Definition http_parser.cpp:237
Implementation of GeneralAuthenticate response APDUs.
Definition CommandApdu.h:17
T * newAsn1Object()
Default template function for creating an OpenSSL type.
Definition ASN1TemplateUtil.h:30
QSharedPointer< T > newObject(T *pObject=newAsn1Object< T >())
Template function for creating a SharedPointer holding an ASN.1 OpenSSL type.
Definition ASN1TemplateUtil.h:41
T * decodeAsn1Object(T **, const uchar **, long)
Default template function for decoding an OpenSSL type.
Definition ASN1TemplateUtil.h:93
int encodeAsn1Object(const T *, uchar **)
Default template function for encoding an OpenSSL type.
Definition ASN1TemplateUtil.h:55
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:114
QByteArray encodeObject(T *pObject)
Template function for encoding an OpenSSL type as DER encoded QByteArray.
Definition ASN1TemplateUtil.h:66
void freeAsn1Object(T *)
Default template function for freeing an OpenSSL type.
Definition ASN1TemplateUtil.h:104