Branch data Line data Source code
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*) 42 : 25876 : get_ssl_state(PyObject *module) 43 : : { 44 : 25876 : void *state = PyModule_GetState(module); 45 : : assert(state != NULL); 46 : 25876 : 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 */