Initial import to Tizen
[profile/ivi/python-pyOpenSSL.git] / OpenSSL / crypto / crypto.h
1 /*
2  * crypto.h
3  *
4  * Copyright (C) AB Strakt
5  * See LICENSE for details.
6  *
7  * Exports from crypto.c.
8  * See the file RATIONALE for a short explanation of why this module was written.
9  *
10  * Reviewed 2001-07-23
11  *
12  */
13 #ifndef PyOpenSSL_CRYPTO_H_
14 #define PyOpenSSL_CRYPTO_H_
15
16 #include <Python.h>
17 #include "x509.h"
18 #include "x509name.h"
19 #include "netscape_spki.h"
20 #include "x509store.h"
21 #include "x509req.h"
22 #include "pkey.h"
23 #include "x509ext.h"
24 #include "pkcs7.h"
25 #include "pkcs12.h"
26 #include "crl.h"
27 #include "revoked.h"
28 #include "../util.h"
29
30 extern PyObject *crypto_Error;
31
32 #define crypto_X509_New_NUM             0
33 #define crypto_X509_New_RETURN          crypto_X509Obj *
34 #define crypto_X509_New_PROTO           (X509 *, int)
35
36 #define crypto_X509Req_New_NUM          1
37 #define crypto_X509Req_New_RETURN       crypto_X509ReqObj *
38 #define crypto_X509Req_New_PROTO        (X509_REQ *, int)
39
40 #define crypto_X509Store_New_NUM        2
41 #define crypto_X509Store_New_RETURN     crypto_X509StoreObj *
42 #define crypto_X509Store_New_PROTO      (X509_STORE *, int)
43
44 #define crypto_PKey_New_NUM             3
45 #define crypto_PKey_New_RETURN          crypto_PKeyObj *
46 #define crypto_PKey_New_PROTO           (EVP_PKEY *, int)
47
48 #define crypto_X509Name_New_NUM         4
49 #define crypto_X509Name_New_RETURN      crypto_X509NameObj *
50 #define crypto_X509Name_New_PROTO       (X509_NAME *, int)
51
52 #define crypto_X509Extension_New_NUM    5
53 #define crypto_X509Extension_New_RETURN crypto_X509ExtensionObj *
54 #define crypto_X509Extension_New_PROTO  (char *, int, char *, crypto_X509Obj *, crypto_X509Obj *)
55
56 #define crypto_PKCS7_New_NUM            6
57 #define crypto_PKCS7_New_RETURN         crypto_PKCS7Obj *
58 #define crypto_PKCS7_New_PROTO          (PKCS7 *, int)
59
60 #define crypto_NetscapeSPKI_New_NUM         7
61 #define crypto_NetscapeSPKI_New_RETURN      crypto_NetscapeSPKIObj *
62 #define crypto_NetscapeSPKI_New_PROTO       (NETSCAPE_SPKI *, int)
63
64 #define crypto_API_pointers             8
65
66 #if defined(PY3) || defined(crypto_MODULE)
67
68 #ifdef _WIN32
69 #define EXPORT __declspec(dllexport)
70 #else
71 #define EXPORT
72 #endif
73
74 extern EXPORT crypto_X509_New_RETURN      crypto_X509_New      crypto_X509_New_PROTO;
75 extern EXPORT crypto_X509Name_New_RETURN  crypto_X509Name_New  crypto_X509Name_New_PROTO;
76 extern crypto_X509Req_New_RETURN   crypto_X509Req_New   crypto_X509Req_New_PROTO;
77 extern EXPORT crypto_X509Store_New_RETURN crypto_X509Store_New crypto_X509Store_New_PROTO;
78 extern crypto_PKey_New_RETURN      crypto_PKey_New      crypto_PKey_New_PROTO;
79 extern crypto_X509Extension_New_RETURN crypto_X509Extension_New crypto_X509Extension_New_PROTO;
80 extern crypto_PKCS7_New_RETURN     crypto_PKCS7_New     crypto_PKCS7_New_PROTO;
81 extern crypto_NetscapeSPKI_New_RETURN  crypto_NetscapeSPKI_New  crypto_NetscapeSPKI_New_PROTO;
82
83 int crypto_byte_converter(PyObject *input, void *output);
84
85 #else /* crypto_MODULE */
86
87 extern void **crypto_API;
88
89 #define crypto_X509_New         \
90  (*(crypto_X509_New_RETURN (*)crypto_X509_New_PROTO) crypto_API[crypto_X509_New_NUM])
91 #define crypto_X509Name_New     \
92  (*(crypto_X509Name_New_RETURN (*)crypto_X509Name_New_PROTO) crypto_API[crypto_X509Name_New_NUM])
93 #define crypto_X509Req_New      \
94  (*(crypto_X509Req_New_RETURN (*)crypto_X509Req_New_PROTO) crypto_API[crypto_X509Req_New_NUM])
95 #define crypto_X509Store_New    \
96  (*(crypto_X509Store_New_RETURN (*)crypto_X509Store_New_PROTO) crypto_API[crypto_X509Store_New_NUM])
97 #define crypto_PKey_New         \
98  (*(crypto_PKey_New_RETURN (*)crypto_PKey_New_PROTO) crypto_API[crypto_PKey_New_NUM])
99 #define crypto_X509Extension_New\
100  (*(crypto_X509Extension_New_RETURN (*)crypto_X509Extension_New_PROTO) crypto_API[crypto_X509Extension_New_NUM])
101 #define crypto_PKCS7_New        \
102  (*(crypto_PKCS7_New_RETURN (*)crypto_PKCS7_New_PROTO) crypto_API[crypto_PKCS7_New_NUM])
103 #define crypto_NetscapeSPKI_New     \
104  (*(crypto_NetscapeSPKI_New_RETURN (*)crypto_NetscapeSPKI_New_PROTO) crypto_API[crypto_NetscapeSPKI_New_NUM])
105
106 #define import_crypto() \
107 { \
108   PyObject *crypto_module = PyImport_ImportModule("OpenSSL.crypto"); \
109   if (crypto_module != NULL) { \
110     PyObject *crypto_dict, *crypto_api_object; \
111     crypto_dict = PyModule_GetDict(crypto_module); \
112     crypto_api_object = PyDict_GetItemString(crypto_dict, "_C_API"); \
113     if (PyCObject_Check(crypto_api_object)) { \
114       crypto_API = (void **)PyCObject_AsVoidPtr(crypto_api_object); \
115     } \
116   } \
117 }
118
119 #endif /* crypto_MODULE */
120
121 /* Define a new type for emitting text.  Hopefully these don't collide with
122  * future official OpenSSL constants, but the switch statement of
123  * dump_certificate() will alert us if it matters.
124  */
125 #ifndef X509_FILETYPE_TEXT 
126 #define X509_FILETYPE_TEXT  (58)
127 #endif
128
129 #endif /* PyOpenSSL_CRYPTO_H_ */