cpython/Modules/_ssl.h
David Benjamin 02f9920900
gh-100062: Remove error code tables from _ssl and err_names_to_codes (GH-100063)
Prior to https://github.com/python/cpython/pull/25300, the
make_ssl_data.py script used various tables, exposed in _ssl, to update
the error list.

After that PR, this is no longer used. Moreover, the err_names_to_codes
map isn't used at all. Clean those up. This gets them out of the way if,
in the future, OpenSSL provides an API to do what the code here is doing
directly. (https://github.com/openssl/openssl/issues/19848)
2023-04-03 23:44:00 +01:00

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 *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 */