(root)/
Python-3.11.7/
Modules/
_ssl.h
       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  get_ssl_state(PyObject *module)
      43  {
      44      void *state = PyModule_GetState(module);
      45      assert(state != NULL);
      46      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 */