xref: /third_party/python/Modules/_ssl.h (revision 7db96d56)
17db96d56Sopenharmony_ci#ifndef Py_SSL_H
27db96d56Sopenharmony_ci#define Py_SSL_H
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci/* OpenSSL header files */
57db96d56Sopenharmony_ci#include "openssl/evp.h"
67db96d56Sopenharmony_ci#include "openssl/x509.h"
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci/*
97db96d56Sopenharmony_ci * ssl module state
107db96d56Sopenharmony_ci */
117db96d56Sopenharmony_citypedef struct {
127db96d56Sopenharmony_ci    /* Types */
137db96d56Sopenharmony_ci    PyTypeObject *PySSLContext_Type;
147db96d56Sopenharmony_ci    PyTypeObject *PySSLSocket_Type;
157db96d56Sopenharmony_ci    PyTypeObject *PySSLMemoryBIO_Type;
167db96d56Sopenharmony_ci    PyTypeObject *PySSLSession_Type;
177db96d56Sopenharmony_ci    PyTypeObject *PySSLCertificate_Type;
187db96d56Sopenharmony_ci    /* SSL error object */
197db96d56Sopenharmony_ci    PyObject *PySSLErrorObject;
207db96d56Sopenharmony_ci    PyObject *PySSLCertVerificationErrorObject;
217db96d56Sopenharmony_ci    PyObject *PySSLZeroReturnErrorObject;
227db96d56Sopenharmony_ci    PyObject *PySSLWantReadErrorObject;
237db96d56Sopenharmony_ci    PyObject *PySSLWantWriteErrorObject;
247db96d56Sopenharmony_ci    PyObject *PySSLSyscallErrorObject;
257db96d56Sopenharmony_ci    PyObject *PySSLEOFErrorObject;
267db96d56Sopenharmony_ci    /* Error mappings */
277db96d56Sopenharmony_ci    PyObject *err_codes_to_names;
287db96d56Sopenharmony_ci    PyObject *err_names_to_codes;
297db96d56Sopenharmony_ci    PyObject *lib_codes_to_names;
307db96d56Sopenharmony_ci    /* socket type from module CAPI */
317db96d56Sopenharmony_ci    PyTypeObject *Sock_Type;
327db96d56Sopenharmony_ci    /* Interned strings */
337db96d56Sopenharmony_ci    PyObject *str_library;
347db96d56Sopenharmony_ci    PyObject *str_reason;
357db96d56Sopenharmony_ci    PyObject *str_verify_code;
367db96d56Sopenharmony_ci    PyObject *str_verify_message;
377db96d56Sopenharmony_ci} _sslmodulestate;
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_cistatic struct PyModuleDef _sslmodule_def;
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ciPy_LOCAL_INLINE(_sslmodulestate*)
427db96d56Sopenharmony_ciget_ssl_state(PyObject *module)
437db96d56Sopenharmony_ci{
447db96d56Sopenharmony_ci    void *state = PyModule_GetState(module);
457db96d56Sopenharmony_ci    assert(state != NULL);
467db96d56Sopenharmony_ci    return (_sslmodulestate *)state;
477db96d56Sopenharmony_ci}
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci#define get_state_type(type) \
507db96d56Sopenharmony_ci    (get_ssl_state(PyType_GetModuleByDef(type, &_sslmodule_def)))
517db96d56Sopenharmony_ci#define get_state_ctx(c) (((PySSLContext *)(c))->state)
527db96d56Sopenharmony_ci#define get_state_sock(s) (((PySSLSocket *)(s))->ctx->state)
537db96d56Sopenharmony_ci#define get_state_obj(o) ((_sslmodulestate *)PyType_GetModuleState(Py_TYPE(o)))
547db96d56Sopenharmony_ci#define get_state_mbio(b) get_state_obj(b)
557db96d56Sopenharmony_ci#define get_state_cert(c) get_state_obj(c)
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci/* ************************************************************************
587db96d56Sopenharmony_ci * certificate
597db96d56Sopenharmony_ci */
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_cienum py_ssl_encoding {
627db96d56Sopenharmony_ci    PY_SSL_ENCODING_PEM=X509_FILETYPE_PEM,
637db96d56Sopenharmony_ci    PY_SSL_ENCODING_DER=X509_FILETYPE_ASN1,
647db96d56Sopenharmony_ci    PY_SSL_ENCODING_PEM_AUX=X509_FILETYPE_PEM + 0x100,
657db96d56Sopenharmony_ci};
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_citypedef struct {
687db96d56Sopenharmony_ci    PyObject_HEAD
697db96d56Sopenharmony_ci    X509 *cert;
707db96d56Sopenharmony_ci    Py_hash_t hash;
717db96d56Sopenharmony_ci} PySSLCertificate;
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci/* ************************************************************************
747db96d56Sopenharmony_ci * helpers and utils
757db96d56Sopenharmony_ci */
767db96d56Sopenharmony_cistatic PyObject *_PySSL_BytesFromBIO(_sslmodulestate *state, BIO *bio);
777db96d56Sopenharmony_cistatic PyObject *_PySSL_UnicodeFromBIO(_sslmodulestate *state, BIO *bio, const char *error);
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci#endif /* Py_SSL_H */
80