1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
/*
* 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 (crypto_api_object && 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_ */
|