9 #include <openssl/asn1t.h>
10 #include <openssl/err.h>
14 #include <QSharedPointer>
26 static_assert(std::is_void<T>::value,
"Implement specialization of newAsn1Object");
35 QSharedPointer<T>
newObject(
T* pObject = newAsn1Object<T>())
37 static auto deleter = [](
T* pObjectToDelete)
41 return QSharedPointer<T>(pObject, deleter);
51 static_assert(std::is_void<T>::value,
"Implement specialization of encodeObject");
62 unsigned char* encoded =
nullptr;
66 BIO* bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
67 ERR_print_errors(bio_err);
71 return QByteArray(reinterpret_cast<char*>(encoded), length);
81 static_assert(std::is_void<T>::value,
"Implement specialization of decodeObject");
92 static_assert(std::is_void<T>::value,
"Implement specialization of freeObject");
102 const char* tmp = pData.constData();
103 const unsigned char** dataPointer =
reinterpret_cast<unsigned const char**
>(&tmp);
107 static auto deleter = [](
T* pTypeObject)
111 return QSharedPointer<T>(object, deleter);
118 static const int CB_SUCCESS = 1;
124 static const int CB_ERROR = 0;
127 #define IMPLEMENT_ASN1_OBJECT(name)\
129 name * newAsn1Object<name>()\
131 return name##_new();\
135 int encodeAsn1Object<name>(name * pObject, unsigned char** encoded)\
137 return i2d_##name(pObject, encoded);\
141 name * decodeAsn1Object<name>(name** pObject, const unsigned char** pData, long pDataLen)\
143 return d2i_##name(pObject, pData, pDataLen);\
147 void freeAsn1Object<name>(name * pObject)\
149 name##_free(pObject);\
152 #define DECLARE_ASN1_OBJECT(name)\
153 template<> name * newAsn1Object<name>();\
154 template<> int encodeAsn1Object<name>(name * pObject, unsigned char** encoded);\
155 template<> name * decodeAsn1Object<name>(name** pObject, const unsigned char** pData, long pDataLen);\
156 template<> void freeAsn1Object<name>(name * pObject);
T * decodeAsn1Object(T **, const unsigned char **, long)
Default template function for decoding an OpenSSL type.
Definition: ASN1TemplateUtil.h:79
#define T(v)
Definition: http_parser.cpp:234
QSharedPointer< T > newObject(T *pObject=newAsn1Object< T >())
Template function for creating a SharedPointer holding an ASN.1 OpenSSL type.
Definition: ASN1TemplateUtil.h:35
void freeAsn1Object(T *)
Default template function for freeing an OpenSSL type.
Definition: ASN1TemplateUtil.h:90
T * newAsn1Object()
Default template function for creating an OpenSSL type.
Definition: ASN1TemplateUtil.h:24
QSharedPointer< T > decodeObject(const QByteArray &pData)
Template function for decoding an OpenSSL type from DER encoded QByteArray.
Definition: ASN1TemplateUtil.h:100
int encodeAsn1Object(T *, unsigned char **)
Default template function for encoding an OpenSSL type.
Definition: ASN1TemplateUtil.h:49
QByteArray encodeObject(T *pObject)
Template function for encoding an OpenSSL type as DER encoded QByteArray.
Definition: ASN1TemplateUtil.h:60