mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			79 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 *err_names_to_codes;
 | 
						|
    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;
 | 
						|
} _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 */
 |