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