9 #include <openssl/asn1t.h> 10 #include <openssl/err.h> 13 #include <QLoggingCategory> 14 #include <QSharedPointer> 16 #if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) 17 #include <QScopeGuard> 22 Q_DECLARE_LOGGING_CATEGORY(card)
35 static_assert(std::is_void<T>::value,
"Implement specialization of newAsn1Object");
44 QSharedPointer<T>
newObject(
T* pObject = newAsn1Object<T>())
46 static auto deleter = [](
T* pObjectToDelete)
50 return QSharedPointer<T>(pObject, deleter);
60 static_assert(std::is_void<T>::value,
"Implement specialization of encodeObject");
72 unsigned char* encoded =
nullptr;
74 const auto guard = qScopeGuard([encoded] {
75 OPENSSL_free(encoded);
83 return QByteArray(reinterpret_cast<char*>(encoded), length);
93 static_assert(std::is_void<T>::value,
"Implement specialization of decodeObject");
104 static_assert(std::is_void<T>::value,
"Implement specialization of freeObject");
112 QSharedPointer<T>
decodeObject(
const QByteArray& pData,
bool pLogging =
true)
115 const char* tmp = pData.constData();
116 const auto** dataPointer = reinterpret_cast<unsigned const char**>(&tmp);
124 static auto deleter = [](
T* pTypeObject)
128 return QSharedPointer<T>(
object, deleter);
135 static const int CB_SUCCESS = 1;
141 static const int CB_ERROR = 0;
144 #define IMPLEMENT_ASN1_OBJECT(name)\ 146 name * newAsn1Object<name>()\ 148 return name##_new();\ 152 int encodeAsn1Object<name>(name * pObject, unsigned char** encoded)\ 154 return i2d_##name(pObject, encoded);\ 158 name * decodeAsn1Object<name>(name** pObject, const unsigned char** pData, long pDataLen)\ 160 return d2i_##name(pObject, pData, pDataLen);\ 164 void freeAsn1Object<name>(name * pObject)\ 166 name##_free(pObject);\ 169 #define DECLARE_ASN1_OBJECT(name)\ 170 template<> name * newAsn1Object<name>();\ 171 template<> int encodeAsn1Object<name>(name * pObject, unsigned char** encoded);\ 172 template<> name * decodeAsn1Object<name>(name** pObject, const unsigned char** pData, long pDataLen);\ 173 template<> void freeAsn1Object<name>(name * pObject); QSharedPointer< T > decodeObject(const QByteArray &pData, bool pLogging=true)
Template function for decoding an OpenSSL type from DER encoded QByteArray.
Definition: ASN1TemplateUtil.h:112
T * decodeAsn1Object(T **, const unsigned char **, long)
Default template function for decoding an OpenSSL type.
Definition: ASN1TemplateUtil.h:91
QByteArray getOpenSslError()
Definition: ASN1TemplateUtil.cpp:7
Implementation of ActivationContext for Intent based activation on Android systems.
Definition: ActivationContext.h:14
#define T(v)
Definition: http_parser.cpp:237
QSharedPointer< T > newObject(T *pObject=newAsn1Object< T >())
Template function for creating a SharedPointer holding an ASN.1 OpenSSL type.
Definition: ASN1TemplateUtil.h:44
void freeAsn1Object(T *)
Default template function for freeing an OpenSSL type.
Definition: ASN1TemplateUtil.h:102
T * newAsn1Object()
Default template function for creating an OpenSSL type.
Definition: ASN1TemplateUtil.h:33
int encodeAsn1Object(T *, unsigned char **)
Default template function for encoding an OpenSSL type.
Definition: ASN1TemplateUtil.h:58
QByteArray encodeObject(T *pObject)
Template function for encoding an OpenSSL type as DER encoded QByteArray.
Definition: ASN1TemplateUtil.h:69