mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef Py_SSL_H
 | |
| #define Py_SSL_H
 | |
| 
 | |
| /* OpenSSL header files */
 | |
| #include "openssl/evp.h"
 | |
| #include "openssl/x509.h"
 | |
| 
 | |
| /*
 | |
|  * ssl module state
 | |
|  */
 | |
| typedef struct {
 | |
|     /* Types */
 | |
|     PyTypeObject *PySSLContext_Type;
 | |
|     PyTypeObject *PySSLSocket_Type;
 | |
|     PyTypeObject *PySSLMemoryBIO_Type;
 | |
|     PyTypeObject *PySSLSession_Type;
 | |
|     PyTypeObject *PySSLCertificate_Type;
 | |
|     /* SSL error object */
 | |
|     PyObject *PySSLErrorObject;
 | |
|     PyObject *PySSLCertVerificationErrorObject;
 | |
|     PyObject *PySSLZeroReturnErrorObject;
 | |
|     PyObject *PySSLWantReadErrorObject;
 | |
|     PyObject *PySSLWantWriteErrorObject;
 | |
|     PyObject *PySSLSyscallErrorObject;
 | |
|     PyObject *PySSLEOFErrorObject;
 | |
|     /* Error mappings */
 | |
|     PyObject *err_codes_to_names;
 | |
|     PyObject *lib_codes_to_names;
 | |
|     /* socket type from module CAPI */
 | |
|     PyTypeObject *Sock_Type;
 | |
|     /* Interned strings */
 | |
|     PyObject *str_library;
 | |
|     PyObject *str_reason;
 | |
|     PyObject *str_verify_code;
 | |
|     PyObject *str_verify_message;
 | |
|     /* keylog lock */
 | |
|     PyThread_type_lock keylog_lock;
 | |
| } _sslmodulestate;
 | |
| 
 | |
| static struct PyModuleDef _sslmodule_def;
 | |
| 
 | |
| Py_LOCAL_INLINE(_sslmodulestate*)
 | |
| get_ssl_state(PyObject *module)
 | |
| {
 | |
|     void *state = PyModule_GetState(module);
 | |
|     assert(state != NULL);
 | |
|     return (_sslmodulestate *)state;
 | |
| }
 | |
| 
 | |
| #define get_state_type(type) \
 | |
|     (get_ssl_state(PyType_GetModuleByDef(type, &_sslmodule_def)))
 | |
| #define get_state_ctx(c) (((PySSLContext *)(c))->state)
 | |
| #define get_state_sock(s) (((PySSLSocket *)(s))->ctx->state)
 | |
| #define get_state_obj(o) ((_sslmodulestate *)PyType_GetModuleState(Py_TYPE(o)))
 | |
| #define get_state_mbio(b) get_state_obj(b)
 | |
| #define get_state_cert(c) get_state_obj(c)
 | |
| 
 | |
| /* ************************************************************************
 | |
|  * certificate
 | |
|  */
 | |
| 
 | |
| enum py_ssl_encoding {
 | |
|     PY_SSL_ENCODING_PEM=X509_FILETYPE_PEM,
 | |
|     PY_SSL_ENCODING_DER=X509_FILETYPE_ASN1,
 | |
|     PY_SSL_ENCODING_PEM_AUX=X509_FILETYPE_PEM + 0x100,
 | |
| };
 | |
| 
 | |
| typedef struct {
 | |
|     PyObject_HEAD
 | |
|     X509 *cert;
 | |
|     Py_hash_t hash;
 | |
| } PySSLCertificate;
 | |
| 
 | |
| /* ************************************************************************
 | |
|  * helpers and utils
 | |
|  */
 | |
| static PyObject *_PySSL_BytesFromBIO(_sslmodulestate *state, BIO *bio);
 | |
| static PyObject *_PySSL_UnicodeFromBIO(_sslmodulestate *state, BIO *bio, const char *error);
 | |
| 
 | |
| #endif /* Py_SSL_H */
 | 
