1 #ifndef Py_SSL_H 2 #define Py_SSL_H 3 4 /* OpenSSL header files */ 5 #include "openssl/evp.h" 6 #include "openssl/x509.h" 7 8 /* 9 * ssl module state 10 */ 11 typedef struct { 12 /* Types */ 13 PyTypeObject *PySSLContext_Type; 14 PyTypeObject *PySSLSocket_Type; 15 PyTypeObject *PySSLMemoryBIO_Type; 16 PyTypeObject *PySSLSession_Type; 17 PyTypeObject *PySSLCertificate_Type; 18 /* SSL error object */ 19 PyObject *PySSLErrorObject; 20 PyObject *PySSLCertVerificationErrorObject; 21 PyObject *PySSLZeroReturnErrorObject; 22 PyObject *PySSLWantReadErrorObject; 23 PyObject *PySSLWantWriteErrorObject; 24 PyObject *PySSLSyscallErrorObject; 25 PyObject *PySSLEOFErrorObject; 26 /* Error mappings */ 27 PyObject *err_codes_to_names; 28 PyObject *err_names_to_codes; 29 PyObject *lib_codes_to_names; 30 /* socket type from module CAPI */ 31 PyTypeObject *Sock_Type; 32 /* Interned strings */ 33 PyObject *str_library; 34 PyObject *str_reason; 35 PyObject *str_verify_code; 36 PyObject *str_verify_message; 37 } _sslmodulestate; 38 39 static struct PyModuleDef _sslmodule_def; 40 41 Py_LOCAL_INLINE(_sslmodulestate*) get_ssl_state(PyObject * module)42get_ssl_state(PyObject *module) 43 { 44 void *state = PyModule_GetState(module); 45 assert(state != NULL); 46 return (_sslmodulestate *)state; 47 } 48 49 #define get_state_type(type) \ 50 (get_ssl_state(PyType_GetModuleByDef(type, &_sslmodule_def))) 51 #define get_state_ctx(c) (((PySSLContext *)(c))->state) 52 #define get_state_sock(s) (((PySSLSocket *)(s))->ctx->state) 53 #define get_state_obj(o) ((_sslmodulestate *)PyType_GetModuleState(Py_TYPE(o))) 54 #define get_state_mbio(b) get_state_obj(b) 55 #define get_state_cert(c) get_state_obj(c) 56 57 /* ************************************************************************ 58 * certificate 59 */ 60 61 enum py_ssl_encoding { 62 PY_SSL_ENCODING_PEM=X509_FILETYPE_PEM, 63 PY_SSL_ENCODING_DER=X509_FILETYPE_ASN1, 64 PY_SSL_ENCODING_PEM_AUX=X509_FILETYPE_PEM + 0x100, 65 }; 66 67 typedef struct { 68 PyObject_HEAD 69 X509 *cert; 70 Py_hash_t hash; 71 } PySSLCertificate; 72 73 /* ************************************************************************ 74 * helpers and utils 75 */ 76 static PyObject *_PySSL_BytesFromBIO(_sslmodulestate *state, BIO *bio); 77 static PyObject *_PySSL_UnicodeFromBIO(_sslmodulestate *state, BIO *bio, const char *error); 78 79 #endif /* Py_SSL_H */ 80