/* * crypto.h * * Copyright (C) AB Strakt 2001, All rights reserved * * Exports from crypto.c. * See the file RATIONALE for a short explanation of why this module was written. * * Reviewed 2001-07-23 * * @(#) $Id: crypto.h,v 1.2 2004/09/23 14:25:28 murata Exp $ */ #ifndef PyOpenSSL_CRYPTO_H_ #define PyOpenSSL_CRYPTO_H_ #include #include "x509.h" #include "x509name.h" #include "x509store.h" #include "x509req.h" #include "pkey.h" #include "x509ext.h" #include "pkcs7.h" #include "pkcs12.h" #include "../util.h" extern PyObject *crypto_Error; #ifdef exception_from_error_queue # undef exception_from_error_queue #endif #define exception_from_error_queue() do { \ PyObject *errlist = error_queue_to_list(); \ PyErr_SetObject(crypto_Error, errlist); \ Py_DECREF(errlist); \ } while (0) #define crypto_X509_New_NUM 0 #define crypto_X509_New_RETURN crypto_X509Obj * #define crypto_X509_New_PROTO (X509 *, int) #define crypto_X509Req_New_NUM 1 #define crypto_X509Req_New_RETURN crypto_X509ReqObj * #define crypto_X509Req_New_PROTO (X509_REQ *, int) #define crypto_X509Store_New_NUM 2 #define crypto_X509Store_New_RETURN crypto_X509StoreObj * #define crypto_X509Store_New_PROTO (X509_STORE *, int) #define crypto_PKey_New_NUM 3 #define crypto_PKey_New_RETURN crypto_PKeyObj * #define crypto_PKey_New_PROTO (EVP_PKEY *, int) #define crypto_X509Name_New_NUM 4 #define crypto_X509Name_New_RETURN crypto_X509NameObj * #define crypto_X509Name_New_PROTO (X509_NAME *, int) #define crypto_X509Extension_New_NUM 5 #define crypto_X509Extension_New_RETURN crypto_X509ExtensionObj * #define crypto_X509Extension_New_PROTO (char *, int, char *) #define crypto_PKCS7_New_NUM 6 #define crypto_PKCS7_New_RETURN crypto_PKCS7Obj * #define crypto_PKCS7_New_PROTO (PKCS7 *, int) #define crypto_API_pointers 7 #ifdef crypto_MODULE extern crypto_X509_New_RETURN crypto_X509_New crypto_X509_New_PROTO; extern crypto_X509Name_New_RETURN crypto_X509Name_New crypto_X509Name_New_PROTO; extern crypto_X509Req_New_RETURN crypto_X509Req_New crypto_X509Req_New_PROTO; extern crypto_X509Store_New_RETURN crypto_X509Store_New crypto_X509Store_New_PROTO; extern crypto_PKey_New_RETURN crypto_PKey_New crypto_PKey_New_PROTO; extern crypto_X509Extension_New_RETURN crypto_X509Extension_New crypto_X509Extension_New_PROTO; extern crypto_PKCS7_New_RETURN crypto_PKCS7_New crypto_PKCS7_New_PROTO; #else /* crypto_MODULE */ extern void **crypto_API; #define crypto_X509_New \ (*(crypto_X509_New_RETURN (*)crypto_X509_New_PROTO) crypto_API[crypto_X509_New_NUM]) #define crypto_X509Name_New \ (*(crypto_X509Name_New_RETURN (*)crypto_X509Name_New_PROTO) crypto_API[crypto_X509Name_New_NUM]) #define crypto_X509Req_New \ (*(crypto_X509Req_New_RETURN (*)crypto_X509Req_New_PROTO) crypto_API[crypto_X509Req_New_NUM]) #define crypto_X509Store_New \ (*(crypto_X509Store_New_RETURN (*)crypto_X509Store_New_PROTO) crypto_API[crypto_X509Store_New_NUM]) #define crypto_PKey_New \ (*(crypto_PKey_New_RETURN (*)crypto_PKey_New_PROTO) crypto_API[crypto_PKey_New_NUM]) #define crypto_X509Extension_New\ (*(crypto_X509Extension_New_RETURN (*)crypto_X509Extension_New_PROTO) crypto_API[crypto_X509Extension_New_NUM]) #define crypto_PKCS7_New \ (*(crypto_PKCS7_New_RETURN (*)crypto_PKCS7_New_PROTO) crypto_API[crypto_PKCS7_New_NUM]) #define import_crypto() \ { \ PyObject *crypto_module = PyImport_ImportModule("OpenSSL.crypto"); \ if (crypto_module != NULL) { \ PyObject *crypto_dict, *crypto_api_object; \ crypto_dict = PyModule_GetDict(crypto_module); \ crypto_api_object = PyDict_GetItemString(crypto_dict, "_C_API"); \ if (PyCObject_Check(crypto_api_object)) { \ crypto_API = (void **)PyCObject_AsVoidPtr(crypto_api_object); \ } \ } \ } #endif /* crypto_MODULE */ #endif /* PyOpenSSL_CRYPTO_H_ */