| /* |
| * crypto.h |
| * |
| * Copyright (C) AB Strakt |
| * See LICENSE for details. |
| * |
| * Exports from crypto.c. |
| * See the file RATIONALE for a short explanation of why this module was written. |
| * |
| * Reviewed 2001-07-23 |
| * |
| */ |
| #ifndef PyOpenSSL_CRYPTO_H_ |
| #define PyOpenSSL_CRYPTO_H_ |
| |
| #include <Python.h> |
| /* Work around a bug in OpenSSL 1.0.0 which is caused by winsock.h being |
| included (from dtls1.h) too late by the OpenSSL header files, overriding |
| the fixes (in ossl_typ.h) for symbol clashes caused by this OS header |
| file. |
| |
| In order to have those fixes still take effect, we include winsock.h |
| here, prior to including any OpenSSL header files. |
| |
| */ |
| #ifdef _WIN32 |
| # include "winsock.h" |
| #endif |
| |
| #include "x509.h" |
| #include "x509name.h" |
| #include "netscape_spki.h" |
| #include "x509store.h" |
| #include "x509req.h" |
| #include "pkey.h" |
| #include "x509ext.h" |
| #include "pkcs7.h" |
| #include "pkcs12.h" |
| #include "crl.h" |
| #include "revoked.h" |
| #include "../util.h" |
| |
| extern PyObject *crypto_Error; |
| |
| #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 *, crypto_X509Obj *, crypto_X509Obj *) |
| |
| #define crypto_PKCS7_New_NUM 6 |
| #define crypto_PKCS7_New_RETURN crypto_PKCS7Obj * |
| #define crypto_PKCS7_New_PROTO (PKCS7 *, int) |
| |
| #define crypto_NetscapeSPKI_New_NUM 7 |
| #define crypto_NetscapeSPKI_New_RETURN crypto_NetscapeSPKIObj * |
| #define crypto_NetscapeSPKI_New_PROTO (NETSCAPE_SPKI *, int) |
| |
| #define crypto_API_pointers 8 |
| |
| #if defined(PY3) || defined(crypto_MODULE) |
| |
| #ifdef _WIN32 |
| #define EXPORT __declspec(dllexport) |
| #else |
| #define EXPORT |
| #endif |
| |
| extern EXPORT crypto_X509_New_RETURN crypto_X509_New crypto_X509_New_PROTO; |
| extern EXPORT crypto_X509Name_New_RETURN crypto_X509Name_New crypto_X509Name_New_PROTO; |
| extern crypto_X509Req_New_RETURN crypto_X509Req_New crypto_X509Req_New_PROTO; |
| extern EXPORT 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; |
| extern crypto_NetscapeSPKI_New_RETURN crypto_NetscapeSPKI_New crypto_NetscapeSPKI_New_PROTO; |
| |
| int crypto_byte_converter(PyObject *input, void *output); |
| |
| #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 crypto_NetscapeSPKI_New \ |
| (*(crypto_NetscapeSPKI_New_RETURN (*)crypto_NetscapeSPKI_New_PROTO) crypto_API[crypto_NetscapeSPKI_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 */ |
| |
| /* Define a new type for emitting text. Hopefully these don't collide with |
| * future official OpenSSL constants, but the switch statement of |
| * dump_certificate() will alert us if it matters. |
| */ |
| #ifndef X509_FILETYPE_TEXT |
| #define X509_FILETYPE_TEXT (58) |
| #endif |
| |
| #endif /* PyOpenSSL_CRYPTO_H_ */ |