%module M2Crypto_ext %include "constraints.i" %{ #include typedef STACK_OF(X509_EXTENSION) X509_EXTENSION_STACK; %} %apply Pointer NONNULL { X509_REQ * }; %inline %{ X509_EXTENSION_STACK *x509_req_get_extensions(X509_REQ *req) { return X509_REQ_get_extensions(req); } %} %inline %{ PyObject *x509_extension_get_data(X509_EXTENSION *ext) { ASN1_OCTET_STRING *octet_str = X509_EXTENSION_get_data(ext); const unsigned char* octet_str_data = octet_str->data; long xlen; int tag, xclass; ASN1_get_object(&octet_str_data, &xlen, &tag, &xclass, octet_str->length); PyObject * encodedString; encodedString = PyString_FromStringAndSize((const char*)octet_str_data, xlen); return encodedString; } %}