Format: application/octet-stream
⬇ Download File (14.3 KB)
   1  import enum
   2  import socket
   3  import sys
   4  from _typeshed import StrPath
   5  from typing import Any, Callable, ClassVar, Dict, Iterable, List, NamedTuple, Optional, Set, Text, Tuple, Type, Union, overload
   6  from typing_extensions import Literal
   7  
   8  _PCTRTT = Tuple[Tuple[str, str], ...]
   9  _PCTRTTT = Tuple[_PCTRTT, ...]
  10  _PeerCertRetDictType = Dict[str, Union[str, _PCTRTTT, _PCTRTT]]
  11  _PeerCertRetType = Union[_PeerCertRetDictType, bytes, None]
  12  _EnumRetType = List[Tuple[bytes, str, Union[Set[str], bool]]]
  13  _PasswordType = Union[Callable[[], Union[str, bytes]], str, bytes]
  14  
  15  if sys.version_info >= (3, 5):
  16      _SC1ArgT = Union[SSLSocket, SSLObject]
  17  else:
  18      _SC1ArgT = SSLSocket
  19  _SrvnmeCbType = Callable[[_SC1ArgT, Optional[str], SSLSocket], Optional[int]]
  20  
  21  class SSLError(OSError):
  22      library: str
  23      reason: str
  24  
  25  class SSLZeroReturnError(SSLError): ...
  26  class SSLWantReadError(SSLError): ...
  27  class SSLWantWriteError(SSLError): ...
  28  class SSLSyscallError(SSLError): ...
  29  class SSLEOFError(SSLError): ...
  30  
  31  if sys.version_info >= (3, 7):
  32      class SSLCertVerificationError(SSLError, ValueError):
  33          verify_code: int
  34          verify_message: str
  35      CertificateError = SSLCertVerificationError
  36  else:
  37      class CertificateError(ValueError): ...
  38  
  39  def wrap_socket(
  40      sock: socket.socket,
  41      keyfile: Optional[str] = ...,
  42      certfile: Optional[str] = ...,
  43      server_side: bool = ...,
  44      cert_reqs: int = ...,
  45      ssl_version: int = ...,
  46      ca_certs: Optional[str] = ...,
  47      do_handshake_on_connect: bool = ...,
  48      suppress_ragged_eofs: bool = ...,
  49      ciphers: Optional[str] = ...,
  50  ) -> SSLSocket: ...
  51  def create_default_context(
  52      purpose: Any = ..., *, cafile: Optional[str] = ..., capath: Optional[str] = ..., cadata: Union[Text, bytes, None] = ...
  53  ) -> SSLContext: ...
  54  
  55  if sys.version_info >= (3, 7):
  56      def _create_unverified_context(
  57          protocol: int = ...,
  58          *,
  59          cert_reqs: int = ...,
  60          check_hostname: bool = ...,
  61          purpose: Any = ...,
  62          certfile: Optional[str] = ...,
  63          keyfile: Optional[str] = ...,
  64          cafile: Optional[str] = ...,
  65          capath: Optional[str] = ...,
  66          cadata: Union[Text, bytes, None] = ...,
  67      ) -> SSLContext: ...
  68  
  69  else:
  70      def _create_unverified_context(
  71          protocol: int = ...,
  72          *,
  73          cert_reqs: Optional[int] = ...,
  74          check_hostname: bool = ...,
  75          purpose: Any = ...,
  76          certfile: Optional[str] = ...,
  77          keyfile: Optional[str] = ...,
  78          cafile: Optional[str] = ...,
  79          capath: Optional[str] = ...,
  80          cadata: Union[Text, bytes, None] = ...,
  81      ) -> SSLContext: ...
  82  
  83  _create_default_https_context: Callable[..., SSLContext]
  84  
  85  if sys.version_info >= (3, 3):
  86      def RAND_bytes(__num: int) -> bytes: ...
  87      def RAND_pseudo_bytes(__num: int) -> Tuple[bytes, bool]: ...
  88  
  89  def RAND_status() -> bool: ...
  90  def RAND_egd(path: str) -> None: ...
  91  def RAND_add(__s: bytes, __entropy: float) -> None: ...
  92  def match_hostname(cert: _PeerCertRetType, hostname: str) -> None: ...
  93  def cert_time_to_seconds(cert_time: str) -> int: ...
  94  def get_server_certificate(addr: Tuple[str, int], ssl_version: int = ..., ca_certs: Optional[str] = ...) -> str: ...
  95  def DER_cert_to_PEM_cert(der_cert_bytes: bytes) -> str: ...
  96  def PEM_cert_to_DER_cert(pem_cert_string: str) -> bytes: ...
  97  
  98  class DefaultVerifyPaths(NamedTuple):
  99      cafile: str
 100      capath: str
 101      openssl_cafile_env: str
 102      openssl_cafile: str
 103      openssl_capath_env: str
 104      openssl_capath: str
 105  
 106  def get_default_verify_paths() -> DefaultVerifyPaths: ...
 107  
 108  if sys.platform == "win32":
 109      def enum_certificates(store_name: str) -> _EnumRetType: ...
 110      def enum_crls(store_name: str) -> _EnumRetType: ...
 111  
 112  CERT_NONE: int
 113  CERT_OPTIONAL: int
 114  CERT_REQUIRED: int
 115  
 116  VERIFY_DEFAULT: int
 117  VERIFY_CRL_CHECK_LEAF: int
 118  VERIFY_CRL_CHECK_CHAIN: int
 119  VERIFY_X509_STRICT: int
 120  VERIFY_X509_TRUSTED_FIRST: int
 121  
 122  PROTOCOL_SSLv23: int
 123  PROTOCOL_SSLv2: int
 124  PROTOCOL_SSLv3: int
 125  PROTOCOL_TLSv1: int
 126  PROTOCOL_TLSv1_1: int
 127  PROTOCOL_TLSv1_2: int
 128  PROTOCOL_TLS: int
 129  if sys.version_info >= (3, 6):
 130      PROTOCOL_TLS_CLIENT: int
 131      PROTOCOL_TLS_SERVER: int
 132  
 133  if sys.version_info >= (3, 6):
 134      class Options(enum.IntFlag):
 135          OP_ALL: int
 136          OP_NO_SSLv2: int
 137          OP_NO_SSLv3: int
 138          OP_NO_TLSv1: int
 139          OP_NO_TLSv1_1: int
 140          OP_NO_TLSv1_2: int
 141          OP_CIPHER_SERVER_PREFERENCE: int
 142          OP_SINGLE_DH_USE: int
 143          OP_SINGLE_ECDH_USE: int
 144          OP_NO_COMPRESSION: int
 145          OP_NO_TICKET: int
 146          if sys.version_info >= (3, 7):
 147              OP_NO_RENEGOTIATION: int
 148              OP_NO_TLSv1_3: int
 149          if sys.version_info >= (3, 8):
 150              OP_ENABLE_MIDDLEBOX_COMPAT: int
 151      OP_ALL: Options
 152      OP_NO_SSLv2: Options
 153      OP_NO_SSLv3: Options
 154      OP_NO_TLSv1: Options
 155      OP_NO_TLSv1_1: Options
 156      OP_NO_TLSv1_2: Options
 157      OP_CIPHER_SERVER_PREFERENCE: Options
 158      OP_SINGLE_DH_USE: Options
 159      OP_SINGLE_ECDH_USE: Options
 160      OP_NO_COMPRESSION: Options
 161      OP_NO_TICKET: Options
 162      if sys.version_info >= (3, 7):
 163          OP_NO_RENEGOTIATION: Options
 164          OP_NO_TLSv1_3: Options
 165      if sys.version_info >= (3, 8):
 166          OP_ENABLE_MIDDLEBOX_COMPAT: Options
 167  else:
 168      OP_ALL: int
 169      OP_NO_SSLv2: int
 170      OP_NO_SSLv3: int
 171      OP_NO_TLSv1: int
 172      OP_NO_TLSv1_1: int
 173      OP_NO_TLSv1_2: int
 174      OP_CIPHER_SERVER_PREFERENCE: int
 175      OP_SINGLE_DH_USE: int
 176      OP_SINGLE_ECDH_USE: int
 177      OP_NO_COMPRESSION: int
 178  
 179  if sys.version_info >= (3, 7):
 180      HAS_NEVER_CHECK_COMMON_NAME: bool
 181      HAS_SSLv2: bool
 182      HAS_SSLv3: bool
 183      HAS_TLSv1: bool
 184      HAS_TLSv1_1: bool
 185      HAS_TLSv1_2: bool
 186      HAS_TLSv1_3: bool
 187  HAS_ALPN: bool
 188  HAS_ECDH: bool
 189  HAS_SNI: bool
 190  HAS_NPN: bool
 191  CHANNEL_BINDING_TYPES: List[str]
 192  
 193  OPENSSL_VERSION: str
 194  OPENSSL_VERSION_INFO: Tuple[int, int, int, int, int]
 195  OPENSSL_VERSION_NUMBER: int
 196  
 197  ALERT_DESCRIPTION_HANDSHAKE_FAILURE: int
 198  ALERT_DESCRIPTION_INTERNAL_ERROR: int
 199  ALERT_DESCRIPTION_ACCESS_DENIED: int
 200  ALERT_DESCRIPTION_BAD_CERTIFICATE: int
 201  ALERT_DESCRIPTION_BAD_CERTIFICATE_HASH_VALUE: int
 202  ALERT_DESCRIPTION_BAD_CERTIFICATE_STATUS_RESPONSE: int
 203  ALERT_DESCRIPTION_BAD_RECORD_MAC: int
 204  ALERT_DESCRIPTION_CERTIFICATE_EXPIRED: int
 205  ALERT_DESCRIPTION_CERTIFICATE_REVOKED: int
 206  ALERT_DESCRIPTION_CERTIFICATE_UNKNOWN: int
 207  ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE: int
 208  ALERT_DESCRIPTION_CLOSE_NOTIFY: int
 209  ALERT_DESCRIPTION_DECODE_ERROR: int
 210  ALERT_DESCRIPTION_DECOMPRESSION_FAILURE: int
 211  ALERT_DESCRIPTION_DECRYPT_ERROR: int
 212  ALERT_DESCRIPTION_ILLEGAL_PARAMETER: int
 213  ALERT_DESCRIPTION_INSUFFICIENT_SECURITY: int
 214  ALERT_DESCRIPTION_NO_RENEGOTIATION: int
 215  ALERT_DESCRIPTION_PROTOCOL_VERSION: int
 216  ALERT_DESCRIPTION_RECORD_OVERFLOW: int
 217  ALERT_DESCRIPTION_UNEXPECTED_MESSAGE: int
 218  ALERT_DESCRIPTION_UNKNOWN_CA: int
 219  ALERT_DESCRIPTION_UNKNOWN_PSK_IDENTITY: int
 220  ALERT_DESCRIPTION_UNRECOGNIZED_NAME: int
 221  ALERT_DESCRIPTION_UNSUPPORTED_CERTIFICATE: int
 222  ALERT_DESCRIPTION_UNSUPPORTED_EXTENSION: int
 223  ALERT_DESCRIPTION_USER_CANCELLED: int
 224  
 225  class _ASN1Object(NamedTuple):
 226      nid: int
 227      shortname: str
 228      longname: str
 229      oid: str
 230  
 231  if sys.version_info < (3,):
 232      class Purpose(_ASN1Object):
 233          SERVER_AUTH: ClassVar[Purpose]
 234          CLIENT_AUTH: ClassVar[Purpose]
 235  
 236  else:
 237      class Purpose(_ASN1Object, enum.Enum):
 238          SERVER_AUTH: _ASN1Object
 239          CLIENT_AUTH: _ASN1Object
 240  
 241  class SSLSocket(socket.socket):
 242      context: SSLContext
 243      server_side: bool
 244      server_hostname: Optional[str]
 245      if sys.version_info >= (3, 6):
 246          session: Optional[SSLSession]
 247          session_reused: Optional[bool]
 248      def read(self, len: int = ..., buffer: Optional[bytearray] = ...) -> bytes: ...
 249      def write(self, data: bytes) -> int: ...
 250      def do_handshake(self, block: bool = ...) -> None: ...  # block is undocumented
 251      @overload
 252      def getpeercert(self, binary_form: Literal[False] = ...) -> Optional[_PeerCertRetDictType]: ...
 253      @overload
 254      def getpeercert(self, binary_form: Literal[True]) -> Optional[bytes]: ...
 255      @overload
 256      def getpeercert(self, binary_form: bool) -> _PeerCertRetType: ...
 257      def cipher(self) -> Optional[Tuple[str, str, int]]: ...
 258      if sys.version_info >= (3, 5):
 259          def shared_ciphers(self) -> Optional[List[Tuple[str, str, int]]]: ...
 260      def compression(self) -> Optional[str]: ...
 261      def get_channel_binding(self, cb_type: str = ...) -> Optional[bytes]: ...
 262      def selected_alpn_protocol(self) -> Optional[str]: ...
 263      def selected_npn_protocol(self) -> Optional[str]: ...
 264      def accept(self) -> Tuple[SSLSocket, socket._RetAddress]: ...
 265      def unwrap(self) -> socket.socket: ...
 266      def version(self) -> Optional[str]: ...
 267      def pending(self) -> int: ...
 268      if sys.version_info >= (3, 8):
 269          def verify_client_post_handshake(self) -> None: ...
 270  
 271  if sys.version_info >= (3, 7):
 272      class TLSVersion(enum.IntEnum):
 273          MINIMUM_SUPPORTED: int
 274          MAXIMUM_SUPPORTED: int
 275          SSLv3: int
 276          TLSv1: int
 277          TLSv1_1: int
 278          TLSv1_2: int
 279          TLSv1_3: int
 280  
 281  class SSLContext:
 282      check_hostname: bool
 283      if sys.version_info >= (3, 6):
 284          options: Options
 285      else:
 286          options: int
 287      if sys.version_info >= (3, 8):
 288          post_handshake_auth: bool
 289      @property
 290      def protocol(self) -> int: ...
 291      verify_flags: int
 292      verify_mode: int
 293      if sys.version_info >= (3, 5):
 294          def __init__(self, protocol: int = ...) -> None: ...
 295      else:
 296          def __init__(self, protocol: int) -> None: ...
 297      def cert_store_stats(self) -> Dict[str, int]: ...
 298      def load_cert_chain(
 299          self, certfile: StrPath, keyfile: Optional[StrPath] = ..., password: Optional[_PasswordType] = ...
 300      ) -> None: ...
 301      def load_default_certs(self, purpose: Purpose = ...) -> None: ...
 302      def load_verify_locations(
 303          self, cafile: Optional[StrPath] = ..., capath: Optional[StrPath] = ..., cadata: Union[Text, bytes, None] = ...
 304      ) -> None: ...
 305      def get_ca_certs(self, binary_form: bool = ...) -> Union[List[_PeerCertRetDictType], List[bytes]]: ...
 306      def set_default_verify_paths(self) -> None: ...
 307      def set_ciphers(self, __cipherlist: str) -> None: ...
 308      def set_alpn_protocols(self, alpn_protocols: Iterable[str]) -> None: ...
 309      if sys.version_info >= (3, 7):
 310          sni_callback: Optional[Callable[[SSLObject, str, SSLContext], Union[None, int]]]
 311          sslobject_class: Type[SSLObject]
 312      def set_npn_protocols(self, npn_protocols: Iterable[str]) -> None: ...
 313      if sys.version_info >= (3, 7):
 314          def set_servername_callback(self, server_name_callback: Optional[_SrvnmeCbType]) -> None: ...
 315      else:
 316          def set_servername_callback(self, __method: Optional[_SrvnmeCbType]) -> None: ...
 317      def load_dh_params(self, __path: str) -> None: ...
 318      def set_ecdh_curve(self, __name: str) -> None: ...
 319      if sys.version_info >= (3, 6):
 320          def wrap_socket(
 321              self,
 322              sock: socket.socket,
 323              server_side: bool = ...,
 324              do_handshake_on_connect: bool = ...,
 325              suppress_ragged_eofs: bool = ...,
 326              server_hostname: Optional[str] = ...,
 327              session: Optional[SSLSession] = ...,
 328          ) -> SSLSocket: ...
 329      else:
 330          def wrap_socket(
 331              self,
 332              sock: socket.socket,
 333              server_side: bool = ...,
 334              do_handshake_on_connect: bool = ...,
 335              suppress_ragged_eofs: bool = ...,
 336              server_hostname: Optional[str] = ...,
 337          ) -> SSLSocket: ...
 338      if sys.version_info >= (3, 6):
 339          def wrap_bio(
 340              self,
 341              incoming: MemoryBIO,
 342              outgoing: MemoryBIO,
 343              server_side: bool = ...,
 344              server_hostname: Optional[str] = ...,
 345              session: Optional[SSLSession] = ...,
 346          ) -> SSLObject: ...
 347      elif sys.version_info >= (3, 5):
 348          def wrap_bio(
 349              self, incoming: MemoryBIO, outgoing: MemoryBIO, server_side: bool = ..., server_hostname: Optional[str] = ...
 350          ) -> SSLObject: ...
 351      def session_stats(self) -> Dict[str, int]: ...
 352      if sys.version_info >= (3, 7):
 353          hostname_checks_common_name: bool
 354          maximum_version: TLSVersion
 355          minimum_version: TLSVersion
 356  
 357  if sys.version_info >= (3, 5):
 358      class SSLObject:
 359          context: SSLContext
 360          server_side: bool
 361          server_hostname: Optional[str]
 362          if sys.version_info >= (3, 6):
 363              session: Optional[SSLSession]
 364              session_reused: bool
 365          def read(self, len: int = ..., buffer: Optional[bytearray] = ...) -> bytes: ...
 366          def write(self, data: bytes) -> int: ...
 367          @overload
 368          def getpeercert(self, binary_form: Literal[False] = ...) -> Optional[_PeerCertRetDictType]: ...
 369          @overload
 370          def getpeercert(self, binary_form: Literal[True]) -> Optional[bytes]: ...
 371          @overload
 372          def getpeercert(self, binary_form: bool) -> _PeerCertRetType: ...
 373          def selected_alpn_protocol(self) -> Optional[str]: ...
 374          def selected_npn_protocol(self) -> Optional[str]: ...
 375          def cipher(self) -> Optional[Tuple[str, str, int]]: ...
 376          def shared_ciphers(self) -> Optional[List[Tuple[str, str, int]]]: ...
 377          def compression(self) -> Optional[str]: ...
 378          def pending(self) -> int: ...
 379          def do_handshake(self) -> None: ...
 380          def unwrap(self) -> None: ...
 381          def version(self) -> Optional[str]: ...
 382          def get_channel_binding(self, cb_type: str = ...) -> Optional[bytes]: ...
 383          if sys.version_info >= (3, 8):
 384              def verify_client_post_handshake(self) -> None: ...
 385      class MemoryBIO:
 386          pending: int
 387          eof: bool
 388          def read(self, __size: int = ...) -> bytes: ...
 389          def write(self, __buf: bytes) -> int: ...
 390          def write_eof(self) -> None: ...
 391  
 392  if sys.version_info >= (3, 6):
 393      class SSLSession:
 394          id: bytes
 395          time: int
 396          timeout: int
 397          ticket_lifetime_hint: int
 398          has_ticket: bool
 399      class VerifyFlags(enum.IntFlag):
 400          VERIFY_DEFAULT: int
 401          VERIFY_CRL_CHECK_LEAF: int
 402          VERIFY_CRL_CHECK_CHAIN: int
 403          VERIFY_X509_STRICT: int
 404          VERIFY_X509_TRUSTED_FIRST: int
 405      class VerifyMode(enum.IntEnum):
 406          CERT_NONE: int
 407          CERT_OPTIONAL: int
 408          CERT_REQUIRED: int
 409  
 410  # TODO below documented in cpython but not in docs.python.org
 411  # taken from python 3.4
 412  SSL_ERROR_EOF: int
 413  SSL_ERROR_INVALID_ERROR_CODE: int
 414  SSL_ERROR_SSL: int
 415  SSL_ERROR_SYSCALL: int
 416  SSL_ERROR_WANT_CONNECT: int
 417  SSL_ERROR_WANT_READ: int
 418  SSL_ERROR_WANT_WRITE: int
 419  SSL_ERROR_WANT_X509_LOOKUP: int
 420  SSL_ERROR_ZERO_RETURN: int
 421  
 422  def get_protocol_name(protocol_code: int) -> str: ...
 423  
 424  AF_INET: int
 425  PEM_FOOTER: str
 426  PEM_HEADER: str
 427  SOCK_STREAM: int
 428  SOL_SOCKET: int
 429  SO_TYPE: int
 430