
    -hh              
       \   S SK r S SKrS SKJr  S SKJrJrJ	r
  S SKJr  S SKrS SKJrJrJr  S SKJrJrJr  S SKJrJrJrJrJrJrJr  S SKJrJr  S S	KJrJrJ r    S S
KJ!r!  S SKJ#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-  S SKJ.r.J/r/  \R`                  " S\1S \S9  \
R`                  " S\1S \S9  \R`                  " S\1S \S9  \R`                  " S\1S \S9  \
R`                  " S\1S \S9  \R`                  " S\1S \S9  \2Rf                  =r4\2l4        \2Rj                  Rm                  5        V Vs0 s H  u  pX_M	     snn r7\8" \2SS5      r9\" \5       " S S5      5       r:\" \5       " S S5      5       r;\" \5       " S S 5      5       r<\" \5       " S! S"5      5       r=\ R|                  S#:X  a  S S$KJ?r?J@r@  S S%KAJArAJBrBJCrC  S S&KAJDrDJErEJFrF  S SKArGS SKHrHS SKIrIS SKJrJ\KrLS'/rM\N" \S(5      rO\.rP\rQS) rRS* rSS+ rT\" S,S-5      rUS. rV " S/ S0\" S0S15      5      rW " S2 S3\W\5      rX " S4 S5\5      rY\XR                  4SSSS6.S7 jjr[SG\\S8\XR                  SSSSSS9.S: jjr]\[r^\]r_ " S; S<5      r`S= ra " S> S?\A5      rb\b\Ylc        \`\Yld        S@ reSArfSBrgSC rhSD ri\jS\F4SE jrkSF rlg! \" a     GNBf = fs  snn f )H    N)
namedtuple)EnumIntEnumIntFlag)_simple_enum)OPENSSL_VERSION_NUMBEROPENSSL_VERSION_INFOOPENSSL_VERSION)_SSLContext	MemoryBIO
SSLSession)SSLErrorSSLZeroReturnErrorSSLWantReadErrorSSLWantWriteErrorSSLSyscallErrorSSLEOFErrorSSLCertVerificationError)txt2objnid2obj)RAND_statusRAND_add
RAND_bytes)RAND_egd)HAS_SNIHAS_ECDHHAS_NPNHAS_ALPN	HAS_SSLv2	HAS_SSLv3	HAS_TLSv1HAS_TLSv1_1HAS_TLSv1_2HAS_TLSv1_3HAS_PSK)_DEFAULT_CIPHERS_OPENSSL_API_VERSION
_SSLMethodc                 <    U R                  S5      =(       a    U S:g  $ )N	PROTOCOL_PROTOCOL_SSLv23
startswithnames    ,/opt/python-3.13.8/usr/lib/python3.13/ssl.py<lambda>r1   }   s    -K$:K2KK    )sourceOptionsc                 $    U R                  S5      $ )NOP_r,   r.   s    r0   r1   r1      s    'r2   AlertDescriptionc                 $    U R                  S5      $ )NALERT_DESCRIPTION_r,   r.   s    r0   r1   r1      s    !56r2   SSLErrorNumberc                 $    U R                  S5      $ )N
SSL_ERROR_r,   r.   s    r0   r1   r1      s    .r2   VerifyFlagsc                 $    U R                  S5      $ )NVERIFY_r,   r.   s    r0   r1   r1      s    +r2   
VerifyModec                 $    U R                  S5      $ )NCERT_r,   r.   s    r0   r1   r1      s    )r2   PROTOCOL_SSLv2c                       \ rS rSr\R
                  r\R                  r\R                  r
\R                  r\R                  r\R                  r\R"                  rSrg)
TLSVersion    N)__name__
__module____qualname____firstlineno___sslPROTO_MINIMUM_SUPPORTEDMINIMUM_SUPPORTEDPROTO_SSLv3SSLv3PROTO_TLSv1TLSv1PROTO_TLSv1_1TLSv1_1PROTO_TLSv1_2TLSv1_2PROTO_TLSv1_3TLSv1_3PROTO_MAXIMUM_SUPPORTEDMAXIMUM_SUPPORTED__static_attributes__rG   r2   r0   rE   rE      sQ    44EE  G  G  G44r2   rE   c                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
_TLSContentType                    rG   N)rH   rI   rJ   rK   CHANGE_CIPHER_SPECALERT	HANDSHAKEAPPLICATION_DATAHEADERINNER_CONTENT_TYPEr[   rG   r2   r0   r]   r]      s%     EIFr2   r]   c                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&g%)&_TLSAlertType   r   
   r_   r`   ra      (   )   *   +   ,   -   .   /   0   1   2   3   <   F   G   P   V   Z   d   m   n   o   p   q   r   s   t   x   rG   N)'rH   rI   rJ   rK   CLOSE_NOTIFYUNEXPECTED_MESSAGEBAD_RECORD_MACDECRYPTION_FAILEDRECORD_OVERFLOWDECOMPRESSION_FAILUREHANDSHAKE_FAILURENO_CERTIFICATEBAD_CERTIFICATEUNSUPPORTED_CERTIFICATECERTIFICATE_REVOKEDCERTIFICATE_EXPIREDCERTIFICATE_UNKNOWNILLEGAL_PARAMETER
UNKNOWN_CAACCESS_DENIEDDECODE_ERRORDECRYPT_ERROREXPORT_RESTRICTIONPROTOCOL_VERSIONINSUFFICIENT_SECURITYINTERNAL_ERRORINAPPROPRIATE_FALLBACKUSER_CANCELEDNO_RENEGOTIATIONMISSING_EXTENSIONUNSUPPORTED_EXTENSIONCERTIFICATE_UNOBTAINABLEUNRECOGNIZED_NAMEBAD_CERTIFICATE_STATUS_RESPONSEBAD_CERTIFICATE_HASH_VALUEUNKNOWN_PSK_IDENTITYCERTIFICATE_REQUIREDNO_APPLICATION_PROTOCOLr[   rG   r2   r0   rl   rl      s     LNONO JMLMNM"&)#!$!r2   rl   c                   l    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrg)_TLSMessageType   r                                          r_   r`   ra   rb      C      rd   rG   N)rH   rI   rJ   rK   HELLO_REQUESTCLIENT_HELLOSERVER_HELLOHELLO_VERIFY_REQUESTNEWSESSION_TICKETEND_OF_EARLY_DATAHELLO_RETRY_REQUESTENCRYPTED_EXTENSIONSCERTIFICATESERVER_KEY_EXCHANGECERTIFICATE_REQUESTSERVER_DONECERTIFICATE_VERIFYCLIENT_KEY_EXCHANGEFINISHEDCERTIFICATE_URLCERTIFICATE_STATUSSUPPLEMENTAL_DATA
KEY_UPDATE
NEXT_PROTOMESSAGE_HASHre   r[   rG   r2   r0   r   r      s~     MLLKKHOJJLr2   r   win32)enum_certificates	enum_crls)socketSOCK_STREAMcreate_connection)
SOL_SOCKETSO_TYPE_GLOBAL_DEFAULT_TIMEOUT
tls-uniqueHOSTFLAG_NEVER_CHECK_SUBJECTc                 6   U (       d  gU R                  S5      nU(       d!  U R                  5       UR                  5       :H  $ US:  a  [        SR                  U 5      5      eU R	                  S5      u  p4nSU;   a  [        SR                  U 5      5      eU(       d  [        SR                  U 5      5      eUS:w  a  [        SR                  U 5      5      eUR	                  S5      u  pdnU(       a  U(       d  gUR                  5       UR                  5       :H  $ )	NF*r   z1too many wildcards in certificate DNS name: {!r}..z9wildcard can only be present in the leftmost label: {!r}.z>sole wildcard without additional labels are not support: {!r}.z<partial wildcards in leftmost label are not supported: {!r}.)countlowerCertificateErrorformat	partition)dnhostname	wildcardsdn_leftmostsepdn_remainderhostname_leftmosthostname_remainders           r0   _dnsname_matchr     s    IxxzX^^---1}?FFrJL 	L &(\\#%6"Kl
lF2J  	  F2J  	  cF2J  	  2:1C1CC1H..C#5#;#;#===r2   c                     [         R                  " U 5      n[         R                  " U5      U :X  a  U$ [        SR	                  U 5      5      e! [
         a     Of = f [         R                  " [         R                  U 5      $ ! [
         a    [        SR	                  U 5      5      e[         a     Of = f[        SR	                  U 5      5      e)Nz'{!r} is not a quad-dotted IPv4 address.z+{!r} is neither an IPv4 nor an IP6 address.z{!r} is not an IPv4 address.)	_socket	inet_aton	inet_ntoa
ValueErrorr   OSError	inet_ptonAF_INET6AttributeError)ipnameaddrs     r0   _inet_patonr   I  s      (
 T"f,K 9@@H     !1!16:: 4 $$*F6N4 	4  3::6B
CCs#   A 
AA$B -B43B4c                 <    [        U R                  5       5      nX!:H  $ N)r   rstrip)cert_ipaddresshost_ipips      r0   _ipaddress_matchr  l  s     
^**,	-B=r2   DefaultVerifyPathszQcafile capath openssl_cafile_env openssl_cafile openssl_capath_env openssl_capathc                  v   [         R                  " 5       n [        R                  R	                  U S   U S   5      n[        R                  R	                  U S   U S   5      n[        [        R                  R                  U5      (       a  UOS [        R                  R                  U5      (       a  UOS /U Q76 $ )Nr   r   r   r   )	rL   get_default_verify_pathsosenvirongetr  pathisfileisdir)partscafilecapaths      r0   r  r  |  s     ))+E ZZ^^E!HeAh/FZZ^^E!HeAh/Fv(>(>fD(*f(=(=f4&$& &r2   c                   X   ^  \ rS rSrSrU 4S jr\U 4S j5       r\U 4S j5       rSr	U =r
$ )_ASN1Objecti  rG   c                 6   > [         TU ]  " U /[        USS9Q76 $ )NFr.   super__new___txt2obj)clsoid	__class__s     r0   r  _ASN1Object.__new__  s    ws?Xc%>??r2   c                 8   > [         TU ]  " U /[        U5      Q76 $ r   )r  r  _nid2obj)r  nidr  s     r0   fromnid_ASN1Object.fromnid  s     ws3Xc]33r2   c                 6   > [         TU ]  " U /[        USS9Q76 $ )NTr.   r  )r  r/   r  s     r0   fromname_ASN1Object.fromname  s      ws?Xd%>??r2   )rH   rI   rJ   rK   	__slots__r  classmethodr  r"  r[   __classcell__r  s   @r0   r  r    s:     I@ 4 4
 @ @r2   r  znid shortname longname oidc                       \ rS rSrSrSrSrg)Purposei  z1.3.6.1.5.5.7.3.1z1.3.6.1.5.5.7.3.2rG   N)rH   rI   rJ   rK   SERVER_AUTHCLIENT_AUTHr[   rG   r2   r0   r)  r)    s     &K%Kr2   r)  c                     ^  \ rS rSrSrSrSrS S jrS r    S!S jr	  S"S jr
S rS	 rS
 rS r\R                   4S jr\" \S5      (       a@  \U 4S j5       r\R,                  U 4S j5       r\U 4S j5       r\R,                  U 4S j5       r\U 4S j5       r\R,                  U 4S j5       r\" \S5      (       a  \S 5       r\R,                  S 5       rO\S 5       r\U 4S j5       r\R,                  U 4S j5       r\U 4S j5       r\U 4S j5       r\R,                  U 4S j5       r\U 4S j5       r\R,                  U 4S j5       rSrU =r $ )#
SSLContexti  )CAROOTNc                 x    Uc   [         R                  " S[        SS9  [        n[        R
                  " X5      nU$ )Nz9ssl.SSLContext() without protocol argument is deprecated.r   )category
stacklevel)warningswarnDeprecationWarningPROTOCOL_TLSr   r  )r  protocolargskwargsselfs        r0   r  SSLContext.__new__  s9    MMK+
 $H""31r2   c                     Uc  g [        U[        5      (       a   UR                  S5      R                  S5      $ UR                  S5      $ )Nidnaascii)
isinstancestrencodedecode)r:  r   s     r0   _encode_hostnameSSLContext._encode_hostname  sA    #&&??6*11'::??7++r2   c           
      @    U R                   R                  UUUUUU US9$ )N)sockserver_sidedo_handshake_on_connectsuppress_ragged_eofsserver_hostnamecontextsession)sslsocket_class_create)r:  rF  rG  rH  rI  rJ  rL  s          r0   wrap_socketSSLContext.wrap_socket  s7     ##++#$;!5+ , 
 	
r2   c           	      X    U R                   R                  XUU R                  U5      XPS9$ )N)rG  rJ  rL  rK  )sslobject_classrN  rC  )r:  incomingoutgoingrG  rJ  rL  s         r0   wrap_bioSSLContext.wrap_bio  s8     ##++K 11/B , 
 	
r2   c                 @   [         R                  " S[        SS9  [        5       nU Hc  n[	        US5      n[        U5      S:X  d  [        U5      S:  a  [        S5      eUR                  [        U5      5        UR                  U5        Me     U R                  U5        g )N'ssl NPN is deprecated, use ALPN insteadr   r2  r>  r      z(NPN protocols must be 1 to 255 in length)
r3  r4  r5  	bytearraybyteslenr   appendextend_set_npn_protocols)r:  npn_protocolsprotosr7  bs        r0   set_npn_protocolsSSLContext.set_npn_protocols  s    5	

 %Hh(A1v{c!fslIJJMM#a&!MM! & 	'r2   c                 p   ^ ^ Tc  S T l         g [        T5      (       d  [        S5      eU U4S jnUT l         g )Nznot a callable objectc                 8   > TR                  U5      nT" XU5      $ r   )rC  )sslobj
servernamesslctxr:  server_name_callbacks      r0   shim_cb3SSLContext.set_servername_callback.<locals>.shim_cb  s     !22:>
+FGGr2   )sni_callbackcallable	TypeError)r:  rk  rl  s   `` r0   set_servername_callback"SSLContext.set_servername_callback  s9    ' $D011 788H !(Dr2   c                    [        5       nU Hc  n[        US5      n[        U5      S:X  d  [        U5      S:  a  [        S5      eUR	                  [        U5      5        UR                  U5        Me     U R                  U5        g )Nr>  r   rZ  z)ALPN protocols must be 1 to 255 in length)r[  r\  r]  r   r^  r_  _set_alpn_protocols)r:  alpn_protocolsrb  r7  rc  s        r0   set_alpn_protocolsSSLContext.set_alpn_protocols  sl    &Hh(A1v{c!fslJKKMM#a&!MM! ' 	  (r2   c                 >    [        U5       H5  u  p4nUS:X  d  M  USL d  UR                  U;   d  M%   U R                  US9  M7     g ! [         a%  n[        R
                  " SU< 35         S nAMd  S nAff = f! [         a    [        R
                  " S5         g f = f)Nx509_asnT)cadataz.Bad certificate in Windows certificate store: z-unable to enumerate Windows certificate store)r   r  load_verify_locationsr   r3  r4  PermissionError)r:  	storenamepurposecertencodingtrustexcs          r0   _load_windows_store_certs$SSLContext._load_windows_store_certs  s    
	K):9)E%z)}u(<d 66d6C *F  ( d$MM,Z[^Za*bccd 	KMMIJ	Ks?   A9 A9 AA9 
A6A1+A9 1A66A9 9 BBc                     [        U[        5      (       d  [        U5      e[        R                  S:X  a$  U R
                   H  nU R                  X!5        M     U R                  5         g )Nr   )r?  r  rp  sysplatform_windows_cert_storesr  set_default_verify_paths)r:  r~  r}  s      r0   load_default_certsSSLContext.load_default_certs  sP    ';//G$$<<7"!66	..yB 7%%'r2   minimum_versionc                 *   > [        [        TU ]  5      $ r   )rE   r  r  r:  r  s    r0   r  SSLContext.minimum_version      eg566r2   c                    > U[         R                  :X  a$  U =R                  [        R                  ) -  sl        [
        [        [        ]  R                  X5        g r   )	rE   rP   optionsr4   OP_NO_SSLv3r  r-  r  __set__r:  valuer  s     r0   r  r    s=    
(((!4!4 44*j9AA$Nr2   c                 *   > [        [        TU ]  5      $ r   )rE   r  maximum_versionr  s    r0   r  SSLContext.maximum_version#  r  r2   c                 H   > [         [        [        ]
  R                  X5        g r   )r  r-  r  r  r  s     r0   r  r  '  s    *j9AA$Nr2   c                 *   > [        [        TU ]  5      $ r   )r4   r  r  r  s    r0   r  SSLContext.options+  s    uw''r2   c                 H   > [         [        [        ]
  R                  X5        g r   )r  r-  r  r  r  s     r0   r  r  /  s    j*-55dBr2   r   c                 b    U R                   [        R                  -  nU[        R                  :g  $ r   _host_flagsrL   r   )r:  ncss     r0   hostname_checks_common_name&SSLContext.hostname_checks_common_name4  s)    ""T%F%FFC$;;;;r2   c                     U(       a%  U =R                   [        R                  ) -  sl         g U =R                   [        R                  -  sl         g r   r  )r:  r  s     r0   r  r  9  s6      T%F%F$FF   D$E$EE r2   c                     gNTrG   r:  s    r0   r  r  @  s    r2   c                 8   > [         TU ]  nUb  UR                  $ g r   )r  _msg_callbackuser_function)r:  innerr  s     r0   r  SSLContext._msg_callbackD  s%    B %&&&r2   c                    >^ Tc#  [         [        [        ]
  R                  U S 5        g [	        TS5      (       d  [        T S35      eU4S jnTUl        [         [        [        ]
  R                  X5        g )N__call__z is not callable.c                 4  >  [        U5      n [        U5      nU[        R                  :X  a  [        nO!U[        R                  :X  a  [
        nO[        n U" U5      nT" XUX4U5      $ ! [         a     Nhf = f! [         a     Nlf = f! [         a     N7f = fr   )rE   r   r]   ri   rf   rl   r   )conn	directionversioncontent_typemsg_typedatamsg_enumcallbacks          r0   r  'SSLContext._msg_callback.<locals>.innert  s    $W-.|< 555*!6!66(*#H- DW(D: :'  
    s4   A* A: B
 *
A76A7:
BB

BB)r  r-  r  r  hasattrrp  r  )r:  r  r  r  s    ` r0   r  r  k  sg    *j7??dKx,,xj(9:;;	:2 'j*3;;DHr2   c                 *   > [        [        TU ]  5      $ r   )r(   r  r7  r  s    r0   r7  SSLContext.protocol  s    %'*++r2   c                 *   > [        [        TU ]  5      $ r   )r=   r  verify_flagsr  s    r0   r  SSLContext.verify_flags  s    57/00r2   c                 H   > [         [        [        ]
  R                  X5        g r   )r  r-  r  r  r  s     r0   r  r    s    j*2::4Gr2   c                 T   > [         TU ]  n [        U5      $ ! [         a    Us $ f = fr   )r  verify_moder@   r   r  s     r0   r  SSLContext.verify_mode  s1    #	e$$ 	L	s   
 ''c                 H   > [         [        [        ]
  R                  X5        g r   )r  r-  r  r  r  s     r0   r  r    s    j*199$Fr2   )rn  r   )FTTNN)FNN)!rH   rI   rJ   rK   r  rM  rR  r  rC  rO  rU  rd  rq  rv  r  r)  r*  r  r  r   propertyr  setterr  r  rL   r  r  r7  r  r  r[   r&  r'  s   @r0   r-  r-    s    *OO	, -2,0)-26
  8=/3
( (	)K *1)<)< ( {-..		7 
	7 
			O 
 	O
 
	7 
	7 
			O 
 	O ( ( ^^C C t344		< 
	< 
%	+	+	F 
,	F 
	 
	 $ $L #I #IJ , , 1 1 H H   G Gr2   r-  )r  r  rz  c                   [        U [        5      (       d  [        U 5      eU [        R                  :X  a"  [        [        5      n[        Ul        SUl	        O/U [        R                  :X  a  [        [        5      nO[        U 5      eU=R                  [        R                  [        R                   -  -  sl        U(       d  U(       d  U(       a  UR#                  XU5        O%UR                  [$        :w  a  UR'                  U 5        [)        US5      (       aK  [*        R,                  R/                  S5      nU(       a%  [0        R2                  R4                  (       d  XTl        U$ )NTkeylog_filenameSSLKEYLOGFILE)r?  r  rp  r)  r*  r-  PROTOCOL_TLS_CLIENTCERT_REQUIREDr  check_hostnamer+  PROTOCOL_TLS_SERVERr   r  rL   VERIFY_X509_PARTIAL_CHAINVERIFY_X509_STRICTr{  	CERT_NONEr  r  r  r	  r
  r  flagsignore_environmentr  )r~  r  r  rz  rK  
keylogfiles         r0   create_default_contextr    s    g{++  
 '%%%01+!%	G''	'01!! T;;!445 6 6%%ff=					) 	""7+w)**ZZ^^O4
cii::&0#Nr2   F)	cert_reqsr  r~  certfilekeyfiler  r  rz  c                   [        U[        5      (       d  [        U5      eU[        R                  :X  a
  U c  [
        n O)U[        R                  :X  a
  U c  [        n O[        U5      e[        U 5      n	X)l
        Ub  Xl        U(       a  SU	l
        U(       a  U(       d  [        S5      eU(       d  U(       a  U	R                  XE5        U(       d  U(       d  U(       a  U	R                  XgU5        O%U	R                  [        :w  a  U	R                  U5        [!        U	S5      (       aK  ["        R$                  R'                  S5      n
U
(       a%  [(        R*                  R,                  (       d  Xl        U	$ )NTzcertfile must be specifiedr  r  )r?  r  rp  r)  r*  r  r+  r  r   r-  r  r  load_cert_chainr{  r  r  r  r  r	  r
  r  r  r  r  )r7  r  r  r~  r  r  r  r  rz  rK  r  s              r0   _create_unverified_contextr    s    g{++  
 '%%%*H	G''	'*H!!"G+'!%x56672 6%%ff=					) 	""7+w)**ZZ^^O4
cii::&0#Nr2   c                   6   \ rS rSrS r\  SS j5       r\S 5       r\R                  S 5       r\S 5       r
\
R                  S 5       r
\S	 5       r\S
 5       r\S 5       rSS jrS rSS jrS rS rS rS rS rS rS rS rS rS rS S jrS rS rSrg)!	SSLObjecti  c                 F    [        U R                  R                   S35      e)NzU does not have a public constructor. Instances are returned by SSLContext.wrap_bio().rp  r  rH   r:  r8  r9  s      r0   __init__SSLObject.__init__'  s+    ~~&&' (L M
 	
r2   Nc           	      X    U R                  U 5      nUR                  XUUXuS9nXl        U$ )N)rG  rJ  ownerrL  )r  	_wrap_bio_sslobj)	r  rS  rT  rG  rJ  rL  rK  r:  rh  s	            r0   rN  SSLObject._create-  s>     {{3""K+ # 

 r2   c                 .    U R                   R                  $ r   r  rK  r  s    r0   rK  SSLObject.context9       ||###r2   c                 $    XR                   l        g r   r  r:  ctxs     r0   rK  r  >  s    "r2   c                 .    U R                   R                  $ r   r  rL  r  s    r0   rL  SSLObject.sessionB  r  r2   c                 $    XR                   l        g r   r  r:  rL  s     r0   rL  r  G  s    &r2   c                 .    U R                   R                  $ r   r  session_reusedr  s    r0   r  SSLObject.session_reusedK  s     ||***r2   c                 .    U R                   R                  $ r   )r  rG  r  s    r0   rG  SSLObject.server_sideP  s     ||'''r2   c                 .    U R                   R                  $ r   )r  rJ  r  s    r0   rJ  SSLObject.server_hostnameU  s     ||+++r2   c                 |    Ub  U R                   R                  X5      nU$ U R                   R                  U5      nU$ r   )r  read)r:  r]  buffervs       r0   r  SSLObject.read[  s@     !!#.A  !!#&Ar2   c                 8    U R                   R                  U5      $ r   )r  writer:  r  s     r0   r   SSLObject.writeg  s     ||!!$''r2   c                 8    U R                   R                  U5      $ r   )r  getpeercertr:  binary_forms     r0   r  SSLObject.getpeercerto  s     ||''44r2   c                     U R                   R                  5       nUc  / $ U Vs/ s H!  o"R                  [        R                  5      PM#     sn$ s  snf r   r  get_verified_chainpublic_bytesrL   ENCODING_DERr:  chainr  s      r0   r
  SSLObject.get_verified_chainx  sG     //1=IAFG!!$"3"34GGG   (Ac                     U R                   R                  5       nUc  / $ U Vs/ s H!  o"R                  [        R                  5      PM#     sn$ s  snf r   r  get_unverified_chainr  rL   r  r  s      r0   r  SSLObject.get_unverified_chain  sG     113=IAFG!!$"3"34GGGr  c                 8    [         R                  " S[        SS9  g NrX  r   rY  )r3  r4  r5  r  s    r0   selected_npn_protocolSSLObject.selected_npn_protocol  s     	5	
r2   c                 6    U R                   R                  5       $ r   )r  selected_alpn_protocolr  s    r0   r   SSLObject.selected_alpn_protocol  s     ||2244r2   c                 6    U R                   R                  5       $ r   )r  cipherr  s    r0   r  SSLObject.cipher  s     ||""$$r2   c                 6    U R                   R                  5       $ r   )r  shared_ciphersr  s    r0   r   SSLObject.shared_ciphers  s     ||**,,r2   c                 6    U R                   R                  5       $ r   )r  compressionr  s    r0   r#  SSLObject.compression  s     ||''))r2   c                 6    U R                   R                  5       $ r   )r  pendingr  s    r0   r&  SSLObject.pending  s    ||##%%r2   c                 8    U R                   R                  5         g r   )r  do_handshaker  s    r0   r)  SSLObject.do_handshake  s    !!#r2   c                 6    U R                   R                  5       $ r   )r  shutdownr  s    r0   unwrapSSLObject.unwrap  s    ||$$&&r2   c                 8    U R                   R                  U5      $ r   )r  get_channel_bindingr:  cb_types     r0   r0  SSLObject.get_channel_binding  s     ||//88r2   c                 6    U R                   R                  5       $ r   r  r  r  s    r0   r  SSLObject.version  s     ||##%%r2   c                 6    U R                   R                  5       $ r   )r  verify_client_post_handshaker  s    r0   r8  &SSLObject.verify_client_post_handshake  s    ||88::r2   )r  )FNNN   NFr   )rH   rI   rJ   rK   r  r%  rN  r  rK  r  rL  r  rG  rJ  r  r   r  r
  r  r  r  r  r   r#  r&  r)  r-  r0  r  r8  r[   rG   r2   r0   r  r    s   
 5:=A	 	 $ $ ^^# # $ $ ^^' ' + + ( ( , ,

(5H	H
5%
-*
&$'9&
;r2   r  c                 X    [        [        U R                  5      R                  U l        U $ r   )getattrr  rH   __doc__)funcs    r0   _sslcopydocrB    s    9dmm4<<DLKr2   c                     ^  \ rS rSrS r\   S.U 4S jj5       r\\S 5       5       r	\	R                  S 5       r	\\S 5       5       r\R                  S 5       r\\S 5       5       rS	 rS/S
 jrS rS0S jrS r\S1S j5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rS2U 4S jjrS/U 4S jjrS rS2U 4S jjrS3U 4S jjrS4U 4S jjrS5U 4S jjr S4U 4S jjr!S5U 4S jjr"S r#S  r$\S! 5       r%U 4S" jr&\S# 5       r'\S$ 5       r(U 4S% jr)\S1S& j5       r*U 4S' jr+S( r,S) r-U 4S* jr.\S6S+ j5       r/\S, 5       r0S-r1U =r2$ )7	SSLSocketi  c                 F    [        U R                  R                   S35      e)NzX does not have a public constructor. Instances are returned by SSLContext.wrap_socket().r  r  s      r0   r  SSLSocket.__init__  s)    ~~&&' (( )
 	
r2   c                   > UR                  [        [        5      [        :w  a  [	        S5      eU(       a   U(       a  [        S5      eUb  [        S5      eUR                  (       a  U(       d  [        S5      eUR                  5       n[        UR                  UR                  UR                  UR                  5       S9n	U R                  " U 40 U	D6n
[        [        U
]B  " S0 U	D6  UR#                  5          Xjl        Xzl        SU
l        S U
l        X*l        UR/                  U5      U
l        X:l        XJl         U
R7                  5         SnU
RM                  U5        Xl'        U(       al  U
R$                  RQ                  XU
R0                  XR&                  S9U
l        U(       a1  U
R                  5       nUS:X  a  [        S5      eU
RS                  5         U
$ ! [8         a  nUR:                  [:        R<                  :w  a  e SnU
R?                  5       nU
RA                  S5         U
RC                  S5      nOH! [8         a;  nUR:                  [:        R<                  [:        RD                  4;  a  e S	n S nAOS nAff = fU
RA                  U5        U(       a0  S
n[G        WR:                  U5      nUUl$        S Ul%         Ue! S nf = f S nAGNS nAff = f!    U
RU                  5         e ! [8         a     e f = f= f)Nz!only stream sockets are supportedz4server_hostname can only be specified in client modez,session can only be specified in client modez'check_hostname requires server_hostname)familytypeprotofilenoFTr   r2   z5Closed before TLS handshake with data in recv buffer.r  rL          zHdo_handshake_on_connect should not be specified for non-blocking socketsrG   )+
getsockoptr   r   r   NotImplementedErrorr   r  
gettimeoutdictrH  rI  rJ  rK  r  r  rD  r  detach_context_session_closedr  rG  rC  rJ  rH  rI  getpeernamer   errnoENOTCONNgetblockingsetblockingrecvEINVALr   reasonlibrary
settimeout
_connected_wrap_socketr)  close)r  rF  rG  rH  rI  rJ  rK  rL  sock_timeoutr9  r:  	connectedeblockingnotconn_pre_handshake_datar]   notconn_pre_handshake_data_errortimeoutr  s                     r0   rN  SSLSocket._create  s    ??:w/;>%&IJJ  "2 3 3"  "/ 0 0!!/FGG(;;TYYdjj;;=
 {{3)&)i'1&1C	#M#M DLDL*#*#;#;O#LD +B((<%#!  "D !	OOL)'O#}}99t';';  :   +"oo/G#~()stt%%' o  @77enn,!	++-  '
5
 261. 5wwu~~u||&DD14.	5
   *- UF7?7P4>D4;?C4<@>> <@8 .%@b	

   s   9AK <G BK 
K$AK'H98K9
I>1I94K9I>>AK KKK	K KK K;K+*K;+
K85K;7K88K;c                     U R                   $ r   )rS  r  s    r0   rK  SSLSocket.context=  s     }}r2   c                 0    Xl         XR                  l        g r   )rS  r  rK  r  s     r0   rK  rl  B  s    "r2   c                 J    U R                   b  U R                   R                  $ g r   r  r  s    r0   rL  SSLSocket.sessionG  s#     <<#<<''' $r2   c                 L    Xl         U R                  b  XR                  l        g g r   )rT  r  rL  r  s     r0   rL  ro  M  s     <<##*LL  $r2   c                 J    U R                   b  U R                   R                  $ g r   r  r  s    r0   r  SSLSocket.session_reusedS  s#     <<#<<... $r2   c                 F    [        SU R                  R                  -  5      e)NzCan't dup() %s instances)rO  r  rH   r  s    r0   dupSSLSocket.dupY  s$    !"<"&.."9"9#: ; 	;r2   c                     g r   rG   )r:  msgs     r0   _checkClosedSSLSocket._checkClosed]  s    r2   c                 H    U R                   (       d  U R                  5         g g r   )r`  rV  r  s    r0   _check_connectedSSLSocket._check_connecteda  s    
  r2   c                 V   U R                  5         U R                  c  [        S5      e Ub  U R                  R                  X5      $ U R                  R                  U5      $ ! [         a;  nUR
                  S   [        :X  a  U R                  (       a  Ub   S nAg S nAge S nAff = f)Nz'Read on closed or unwrapped SSL socket.r   r2   )rx  r  r   r  r   r8  SSL_ERROR_EOFrI  )r:  r]  r  xs       r0   r  SSLSocket.readi  s     	<<FGG	!||((55||((-- 	vvayM)d.G.G%	s#   A# A# #
B(-+B#"B##B(c                     U R                  5         U R                  c  [        S5      eU R                  R                  U5      $ )Nz(Write on closed or unwrapped SSL socket.)rx  r  r   r   r  s     r0   r   SSLSocket.write~  s;     	<<GHH||!!$''r2   c                 x    U R                  5         U R                  5         U R                  R                  U5      $ r   )rx  r{  r  r  r  s     r0   r  SSLSocket.getpeercert  s/    ||''44r2   c                     U R                   R                  5       nUc  / $ U Vs/ s H!  o"R                  [        R                  5      PM#     sn$ s  snf r   r	  r  s      r0   r
  SSLSocket.get_verified_chain  sE    //1=IAFG!!$"3"34GGGr  c                     U R                   R                  5       nUc  / $ U Vs/ s H!  o"R                  [        R                  5      PM#     sn$ s  snf r   r  r  s      r0   r  SSLSocket.get_unverified_chain  sE    113=IAFG!!$"3"34GGGr  c                 X    U R                  5         [        R                  " S[        SS9  g r  )rx  r3  r4  r5  r  s    r0   r  SSLSocket.selected_npn_protocol  s(    5	

 r2   c                     U R                  5         U R                  b  [        R                  (       d  g U R                  R	                  5       $ r   )rx  r  rL   r   r  r  s    r0   r   SSLSocket.selected_alpn_protocol  s4    <<t}}<<6688r2   c                 r    U R                  5         U R                  c  g U R                  R                  5       $ r   )rx  r  r  r  s    r0   r  SSLSocket.cipher  s.    <<<<&&((r2   c                 r    U R                  5         U R                  c  g U R                  R                  5       $ r   )rx  r  r   r  s    r0   r   SSLSocket.shared_ciphers  s.    <<<<..00r2   c                 r    U R                  5         U R                  c  g U R                  R                  5       $ r   )rx  r  r#  r  s    r0   r#  SSLSocket.compression  s.    <<<<++--r2   c                    > U R                  5         U R                  b9  US:w  a  [        SU R                  -  5      eU R                  R	                  U5      $ [
        TU ]  X5      $ )Nr   z3non-zero flags not allowed in calls to send() on %s)rx  r  r   r  r   r  send)r:  r  r  r  s      r0   r  SSLSocket.send  sb    <<#z INN#$ $ <<%%d++7<,,r2   c                    > U R                  5         U R                  b  [        SU R                  -  5      eUc  [        TU ]  X5      $ [        TU ]  XU5      $ )Nz%sendto not allowed on instances of %s)rx  r  r   r  r  sendto)r:  r  flags_or_addrr   r  s       r0   r  SSLSocket.sendto  sZ    <<#D!^^, - -\7>$667>$t<<r2   c                 2    [        SU R                  -  5      e)Nz&sendmsg not allowed on instances of %srO  r  r  s      r0   sendmsgSSLSocket.sendmsg  s      ""J"&..#1 2 	2r2   c                   > U R                  5         U R                  b|  US:w  a  [        SU R                  -  5      eSn[	        U5       oDR                  S5       n[        U5      nX6:  a  U R                  XSS  5      nX7-  nX6:  a  M  S S S 5        S S S 5        g [        TU ]%  X5      $ ! , (       d  f       N&= f! , (       d  f       g = f)Nr   z6non-zero flags not allowed in calls to sendall() on %sB)
rx  r  r   r  
memoryviewcastr]  r  r  sendall)	r:  r  r  r   view	byte_viewamountr  r  s	           r0   r  SSLSocket.sendall  s    <<#z LNN#$ $ ED!T99S>YYn		)F"34AJE n ,:!! 7?4// ,:>!!s$   
B;-B*
B;*
B8	4B;;
C	c                 b   > U R                   b  U R                  XU5      $ [        TU ]  XU5      $ r   )r  _sendfile_use_sendr  sendfile)r:  fileoffsetr   r  s       r0   r  SSLSocket.sendfile  s6     <<#**4?? 7#D%88r2   c                    > U R                  5         U R                  b/  US:w  a  [        SU R                  -  5      eU R	                  U5      $ [
        TU ]  X5      $ )Nr   z3non-zero flags not allowed in calls to recv() on %s)rx  r  r   r  r  r  r[  r:  buflenr  r  s      r0   r[  SSLSocket.recv  s\    <<#z INN#$ $ 99V$$7<..r2   c                 B  > U R                  5         Uc/  Ub*  [        U5       nUR                  nS S S 5        U(       d  SnOSnU R                  b/  US:w  a  [	        SU R
                  -  5      eU R                  X!5      $ [        TU ]!  XU5      $ ! , (       d  f       Nf= f)Nr;  r   z8non-zero flags not allowed in calls to recv_into() on %s)	rx  r  nbytesr  r   r  r  r  	recv_into)r:  r  r  r  r  r  s        r0   r  SSLSocket.recv_into	  s    >!'4![[F (!F<<#z L..!" " 99V,,7$VU;; ('s   B
Bc                    > U R                  5         U R                  b  [        SU R                  -  5      e[        TU ]  X5      $ )Nz'recvfrom not allowed on instances of %s)rx  r  r   r  r  recvfromr  s      r0   r  SSLSocket.recvfrom  sG    <<#F!^^, - - 7#F22r2   c                    > U R                  5         U R                  b  [        SU R                  -  5      e[        TU ]  XU5      $ )Nz,recvfrom_into not allowed on instances of %s)rx  r  r   r  r  recvfrom_into)r:  r  r  r  r  s       r0   r  SSLSocket.recvfrom_into$  sI    <<#K!^^, - - 7(??r2   c                 2    [        SU R                  -  5      e)Nz&recvmsg not allowed on instances of %sr  r  s      r0   recvmsgSSLSocket.recvmsg,  s    !"J"&..#1 2 	2r2   c                 2    [        SU R                  -  5      e)Nz+recvmsg_into not allowed on instances of %sr  r  s      r0   recvmsg_intoSSLSocket.recvmsg_into0  s     ! #')-#8 9 	9r2   c                 r    U R                  5         U R                  b  U R                  R                  5       $ gNr   )rx  r  r&  r  s    r0   r&  SSLSocket.pending4  s.    <<#<<''))r2   c                 R   > U R                  5         S U l        [        TU ]  U5        g r   )rx  r  r  r,  )r:  howr  s     r0   r,  SSLSocket.shutdown<  s#    r2   c                     U R                   (       a#  U R                   R                  5       nS U l         U$ [        S[        U 5      -   5      eNzNo SSL wrapper around )r  r,  r   r@  )r:  ss     r0   r-  SSLSocket.unwrapA  s<    <<%%'ADLH5D	ABBr2   c                     U R                   (       a  U R                   R                  5       $ [        S[        U 5      -   5      er  )r  r8  r   r@  r  s    r0   r8  &SSLSocket.verify_client_post_handshakeJ  s1    <<<<<<>>5D	ABBr2   c                 0   > S U l         [        TU ]	  5         g r   )r  r  _real_closer  s    r0   r  SSLSocket._real_closeQ  s    r2   c                    U R                  5         U R                  5       n US:X  a  U(       a  U R                  S 5        U R                  R	                  5         U R                  U5        g ! U R                  U5        f = f)NrM  )r{  rP  r_  r  r)  )r:  blockri  s      r0   r)  SSLSocket.do_handshakeU  s]    //#	%#~%%LL%%'OOG$DOOG$s   8A, ,A?c                   > U R                   (       a  [        S5      eU R                  (       d  U R                  b  [        S5      eU R                  R                  U SU R                  X R                  S9U l         U(       a  [        TU ]%  U5      nOS n[        TU ])  U5        U(       d(  SU l        U R                  (       a  U R                  5         U$ ! [        [        4 a	    S U l        e f = f)Nz!can't connect in server-side modez/attempt to connect already-connected SSLSocket!FrL  T)rG  r   r`  r  rK  ra  rJ  rT  r  
connect_exconnectrH  r)  r   )r:  r   r  rcr  s       r0   _real_connectSSLSocket._real_connect`  s    @AA ??dll6NOO||00%-- 1 
	W'-%"&//%%'I$ 	DL	s   =AC C/c                 (    U R                  US5        g )NFr  r:  r   s     r0   r  SSLSocket.connectz  s     	4'r2   c                 &    U R                  US5      $ r  r  r  s     r0   r  SSLSocket.connect_ex  s     !!$--r2   c                    > [         TU ]  5       u  pU R                  R                  UU R                  U R
                  SS9nX4$ )NT)rH  rI  rG  )r  acceptrK  rO  rH  rI  )r:  newsockr   r  s      r0   r  SSLSocket.accept  sM    
 (,,**7,0,H,H)-)B)B $ + & }r2   c                     U R                   b  U R                   R                  U5      $ U[        ;  a  [        SR	                  U5      5      eg )Nz({0} channel binding type not implemented)r  r0  CHANNEL_BINDING_TYPESr   r   r1  s     r0   r0  SSLSocket.get_channel_binding  sJ    <<#<<33G<<33 >EEgN  r2   c                 R    U R                   b  U R                   R                  5       $ g r   r5  r  s    r0   r  SSLSocket.version  s"    <<#<<''))r2   )	rU  r`  rS  rT  r  rH  rJ  rG  rI  )FTTNNNr   r:  r<  )r   )r   N)r;  r   r  r=  )3rH   rI   rJ   rK   r  r%  rN  r  rB  rK  r  rL  r  rt  rx  r{  r  r   r  r
  r  r  r  r  r   r#  r  r  r  r  r  r[  r  r  r  r  r  r&  r,  r-  r8  r  r)  r  r  r  r  r0  r  r[   r&  r'  s   @r0   rD  rD    s;   

 FJ;?&*\ \|    ^^# # (  ( ^^+ +
 /  /;*( 5 5
 H H H H   9 9 ) ) 1 1 . .	-=20 9	/<&3@29  
 C C C C % %4(
.

    r2   rD  c                     SSK Jn  SSKJn  SnSn UR	                  U S S R                  5       5      S-   nU" U SS  U5      nU" US   U4USS	 -   5      $ ! [         a    [        S
U < SU< S35      ef = f)Nr   )strptime)timegm)JanFebMarAprMayJunJulAugSepOctNovDecz %d %H:%M:%S %Y GMTr   r   r   r   z
time data z does not match format "%b")timer  calendarr  indextitler   )	cert_timer  r  monthstime_formatmonth_numbertts          r0   cert_time_to_secondsr    s     F (K
7||IbqM$7$7$9:Q> im[1 r!ul+b1g566  F-6E F 	FFs   %A A5z-----BEGIN CERTIFICATE-----z-----END CERTIFICATE-----c                 
   [        [        R                  " U 5      SS5      n[        /nU[	        S[        U5      S5       Vs/ s H	  o1X3S-    PM     sn-  nUR                  [        S-   5        SR                  U5      $ s  snf )NASCIIstrictr   @   
)	r@  base64standard_b64encode
PEM_HEADERranger]  r^  
PEM_FOOTERjoin)der_cert_bytesfssis       r0   DER_cert_to_PEM_certr    sv     	F%%n5wIA
BeAs1vr2
32Qt92
33BIIj4 99R= 4s   B c                 v   U R                  [        5      (       d  [        S[        -  5      eU R                  5       R	                  [
        5      (       d  [        S[
        -  5      eU R                  5       [        [        5      [        [
        5      *  n[        R                  " UR                  SS5      5      $ )Nz(Invalid PEM encoding; must start with %sz&Invalid PEM encoding; must end with %sr  r  )
r-   r	  r   stripendswithr  r]  r  decodebytesrA  )pem_cert_stringds     r0   PEM_cert_to_DER_certr    s     %%j11C%& ' 	'  "++J77A%& ' 	'JZ0@AAahhw9::r2   c                    U u  pEUb  [         nO[        n[        UUUS9n[        XS9 nUR	                  XS9 n	U	R                  S5      n
S S S 5        S S S 5        [        W
5      $ ! , (       d  f       N!= f! , (       d  f       N*= f)N)r  r  )ri  )rJ  T)r  r  _create_stdlib_contextr   rO  r  r  )r   ssl_versionca_certsri  hostportr  rK  rF  sslsockdercerts              r0   get_server_certificater!    s     JD!		$[/8,46G 
4	1T   <))$/G = 
2  (( =< 
2	1s"   A7A&A7&
A4	0A77
Bc                 .    [         R                  U S5      $ )Nz	<unknown>)_PROTOCOL_NAMESr
  )protocol_codes    r0   get_protocol_namer%    s    }k::r2   r   )mr  r  collectionsr   enumr   _Enumr   _IntEnumr   _IntFlagr   rL   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r   r   r   ImportErrorr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   	_convert_rH   r(   r6  r+   __members__itemsr#  r?  _SSLv2_IF_EXISTSrE   r]   rl   r   r  r   r   r   r   r   r   r   r   r   r  rW  r3  r   socket_errorr  r  HAS_NEVER_CHECK_COMMON_NAME_RESTRICTED_SERVER_CIPHERSr   r   r   r  r  r  r  r)  r-  r*  r  r  r  _create_default_https_contextr  r  rB  rD  rM  rR  r  r	  r  r  r  r  r!  r%  )r/   r  s   00r0   <module>r4     sP  |  	 " H H   N N 3 3   : 2 2	    8   (K
 	  x'
 	  6
 	  h.
 	  8+
 	  ()
 0:/F/F F*,2<2H2H2N2N2PQ2P;45;2PQ:'7>  h5 5 5 h   h&" &" &"R h     : <<71 9 9 ? ?     % %d,JK  . + .>b DF	   4 &@*],HI @*&k5 &AG AGH $+#6#6 .$"&t.`49*/9L9L$($"&tD4n !7  4 q; q;hN Nd '
 &
 
7< +
(
; .A$(2I),;Q,  		T Rs   J ,J(J%$J%