ó
    ð›‘hÃ1  ã                  óP  • S r SSKJr  SSKrSSKrSSKJrJrJrJ	r	  SSK
r
SSKJrJrJrJrJrJrJr   SSKr\
R*                  " SS9 " S	 S
5      5       r        S'S jr      S(S jrS)S jrS*S jr\
R*                  " SS9 " S S5      5       r\
R*                  " SS9 " S S5      5       r\
R*                  " SS9 " S S5      5       r\
R*                  " SS9 " S S5      5       r\\\\\4   r \	 " S S\5      5       r \
R*                  " SSS9 " S S5      5       r!\
R*                  " SS9 " S S5      5       r"\
R*                  " SSS9 " S S 5      5       r#\
R*                  " SSS9 " S! S"5      5       r$S+S# jr%S,S$ jr&\'RQ                  S%S&5      r)g! \ a    Sr GNlf = f)-z
Common verification code.
é    )ÚannotationsN)ÚProtocolÚSequenceÚUnionÚruntime_checkableé   )ÚCertificateErrorÚDNSMismatchÚIPAddressMismatchÚMismatchÚSRVMismatchÚURIMismatchÚVerificationErrorT)Úslotsc                  ór   • \ rS rSr% Sr\R                  " 5       rS\S'   \R                  " 5       r	S\S'   Sr
g)	ÚServiceMatché   z4
A match of a service id and a certificate pattern.
Ú	ServiceIDÚ
service_idÚCertificatePatternÚcert_pattern© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚattrÚibr   Ú__annotations__r   Ú__static_attributes__r   ó    Ú[C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\service_identity/hazmat.pyr   r      s*   ‡ ñð !ŸGšG›I€J�	Ó%Ø'+§w¢w£y€LÐ$Ö0r"   r   c                ó°  • U (       d  Sn[        U5      e/ n[        X5      [        X5      -   nU Vs/ s H  ofR                  PM     nnU H(  nX‡;  d  M
  UR                  UR	                  US95        M*     U HD  nX‡;  d  M
  [        XR                  5      (       d  M&  UR                  UR	                  US95        MF     U(       a	  [        US9eU$ s  snf )zÐ
Verify whether *cert_patterns* are valid for *obligatory_ids* and
*optional_ids*.

*obligatory_ids* must be both present and match.  *optional_ids* must match
if a pattern of the respective type is present.
z3Certificate does not contain any `subjectAltName`s.)Úmismatched_id)Úerrors)r	   Ú_find_matchesr   ÚappendÚerror_on_mismatchÚ_contains_instance_ofÚpattern_classr   )	Úcert_patternsÚobligatory_idsÚoptional_idsÚmsgr&   ÚmatchesÚmatchÚmatched_idsÚis	            r#   Úverify_service_identityr4   )   sÝ   € ö ØCˆÜ˜sÓ#Ð#à€FÜ˜MÓ:¼]Øó>ñ €Gñ 29Ó9²¨×#Ô#±€KÐ9ÛˆØÕØ�M‰MØ×#Ñ#°!Ð#Ð4öñ ó ˆð
 ÕÔ$9ØŸ?™?÷%
ó %
ð �M‰MØ×#Ñ#°!Ð#Ð4öñ ö Ü vÑ.Ð.à€Nùò- :s   ²Cc           	     óŽ   • / nU H<  nU  H3  nUR                  U5      (       d  M  UR                  [        XCS95        M5     M>     U$ )zt
Search for matching certificate patterns and service_ids.

Args:
    service_ids: List of service IDs like DNS_ID.
)r   r   )Úverifyr(   r   )r,   Úservice_idsr0   ÚsidÚcids        r#   r'   r'   W   sE   € ð €GÛˆÛ ˆCØ�z‰z˜#�‹Ø—‘Ü ¨cÑBöó !ñ ð €Nr"   c                ó.   ^• [        U4S jU  5       5      $ )Nc              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7f©N)Ú
isinstance)Ú.0ÚeÚcls     €r#   Ú	<genexpr>Ú(_contains_instance_of.<locals>.<genexpr>m   s   øé € Ð.ª# QŒz˜!˜R× Ð ª#ùs   ƒ)Úany)Úseqr@   s    `r#   r*   r*   l   s   ø€ ÜÔ.©#Ó.Ó.Ð.r"   c                ó  • [        U [        5      (       a   U R                  S5      n  [	        U 5        g! [         a     gf = f! [
         a     Of = f [        R                  " U R                  SS5      5        g! [
         a     gf = f)z®
Check whether *pattern* could be/match an IP address.

Args:
    pattern: A pattern for a host name.

Returns:
    `True` if *pattern* could be an IP address, else `False`.
ÚasciiFTÚ*Ú1)	r=   ÚbytesÚdecodeÚUnicodeErrorÚintÚ
ValueErrorÚ	ipaddressÚ
ip_addressÚreplace©Úpatterns    r#   Ú_is_ip_addressrS   p   s“   € ô �'œ5×!Ñ!ð	Ø—n‘n WÓ-ˆGðÜˆGŒð øô ó 	Ùð	ûô
 ó Ùðúð
Ü×Ò˜WŸ_™_¨S°#Ó6Ô7ð øô ó Ùðús2   —5 ©A µ
AÁAÁ
AÁAÁ&A= Á=
B
Â	B
c                  ó~   • \ rS rSr% Sr\R                  " 5       rS\S'   \	R                  " S5      r\S	S j5       rSrg)
Ú
DNSPatterné�   z/
A DNS pattern as extracted from certificates.
rI   rR   ó   ^[a-z0-9\-_.]+$c                ó  • [        U[        5      (       d  Sn[        U5      eUR                  5       nUS:X  d  [	        U5      (       d  SU;   a  SU< S3n[        U5      eUR                  [        5      nSU;   a  [        U5        U " US9$ )Nz'The DNS pattern must be a bytes string.r"   ó    zInvalid DNS pattern Ú.ó   *rQ   )	r=   rI   Ú	TypeErrorÚstriprS   r	   Ú	translateÚ_TRANS_TO_LOWERÚ_validate_pattern)ÚclsrR   r/   s      r#   Ú
from_bytesÚDNSPattern.from_bytesš   s„   € ä˜'¤5×)Ñ)Ø;ˆCÜ˜C“.Ð à—-‘-“/ˆà�c‹>œ^¨G×4Ñ4¸ÀÓ8HØ(¨©°1Ð5ˆCÜ" 3Ó'Ð'à×#Ñ#¤OÓ4ˆØ�7‹?Ü˜gÔ&á˜7Ñ#Ð#r"   r   N)rR   rI   ÚreturnrU   )r   r   r   r   r   r   r   rR   r    ÚreÚcompileÚ_RE_LEGAL_CHARSÚclassmethodrb   r!   r   r"   r#   rU   rU   �   s:   ‡ ñð
 —W’W“Y€GˆUÓà—j’jÐ!4Ó5€Oàó$ó ó$r"   rU   c                  óZ   • \ rS rSr% Sr\R                  " 5       rS\S'   \	SS j5       r
Srg)	ÚIPAddressPatterné­   z7
An IP address pattern as extracted from certificates.
ú-ipaddress.IPv4Address | ipaddress.IPv6AddressrR   c                óz   •  U " [         R                  " U5      S9$ ! [         a    SU< S3n[        U5      S ef = f)NrQ   zInvalid IP address pattern rZ   )rN   rO   rM   r	   )ra   Úbsr/   s      r#   rb   ÚIPAddressPattern.from_bytes¶   sG   € ð	2Ùœy×3Ò3°BÓ7Ñ8Ð8øÜó 	2Ø/°©v°QÐ7ˆCÜ" 3Ó'¨TÐ1ð	2ús   ‚ œ:r   N)rn   rI   rd   rj   )r   r   r   r   r   r   r   rR   r    rh   rb   r!   r   r"   r#   rj   rj   ­   s-   ‡ ñð
 >B¿WºW»Y€GÐ:ÓFàó2ó ó2r"   rj   c                  ó†   • \ rS rSr% Sr\R                  " 5       rS\S'   \R                  " 5       r	S\S'   \
S
S j5       rSrg	)Ú
URIPatterné¿   z0
An URI pattern as extracted from certificates.
rI   Úprotocol_patternrU   Údns_patternc                óB  • [        U[        5      (       d  Sn[        U5      eUR                  5       R	                  [
        5      nSU;  d  SU;   d  [        U5      (       a  SU< S3n[        U5      eUR                  S5      u  p4U " U[        R                  U5      S9$ )Nz'The URI pattern must be a bytes string.ó   :r[   zInvalid URI pattern rZ   )rs   rt   ©r=   rI   r\   r]   r^   r_   rS   r	   ÚsplitrU   rb   )ra   rR   r/   rs   Úhostnames        r#   rb   ÚURIPattern.from_bytesÊ   s•   € ä˜'¤5×)Ñ)Ø;ˆCÜ˜C“.Ð à—-‘-“/×+Ñ+¬OÓ<ˆà�wÓ $¨'£/´^ÀG×5LÑ5LØ(¨©°1Ð5ˆCÜ" 3Ó'Ð'à%,§]¡]°4Ó%8Ñ"ÐáØ-Ü"×-Ñ-¨hÓ7ñ
ð 	
r"   r   N)rR   rI   rd   rq   )r   r   r   r   r   r   r   rs   r    rt   rh   rb   r!   r   r"   r#   rq   rq   ¿   s<   ‡ ñð
 #Ÿgšg›iÐ�eÓ'à"Ÿgšg›i€K�Ó'àó
ó ó
r"   rq   c                  ó†   • \ rS rSr% Sr\R                  " 5       rS\S'   \R                  " 5       r	S\S'   \
S
S j5       rSrg	)Ú
SRVPatternéÞ   z0
An SRV pattern as extracted from certificates.
rI   Úname_patternrU   rt   c                ó\  • [        U[        5      (       d  Sn[        U5      eUR                  5       R	                  [
        5      nUS   S:w  d  SU;  d  SU;   d  [        U5      (       a  SU< S3n[        U5      eUR                  SS5      u  p4U " USS  [        R                  U5      S	9$ )
Nz'The SRV pattern must be a bytes string.r   é_   ó   .r[   zInvalid SRV pattern rZ   r   )r~   rt   rw   )ra   rR   r/   Únamery   s        r#   rb   ÚSRVPattern.from_bytesé   sª   € ä˜'¤5×)Ñ)Ø;ˆCÜ˜C“.Ð à—-‘-“/×+Ñ+¬OÓ<ˆð �A‰J˜'Ó!Ø˜7Ó"Ø�w‹Ü˜g×&Ñ&à(¨©°1Ð5ˆCÜ" 3Ó'Ð'à Ÿ™ t¨QÓ/‰ˆÙØ˜a˜b˜¬z×/DÑ/DÀXÓ/Nñ
ð 	
r"   r   N)rR   rI   rd   r|   )r   r   r   r   r   r   r   r~   r    rt   rh   rb   r!   r   r"   r#   r|   r|   Þ   s;   ‡ ñð
 Ÿ'š'›)€L�%Ó#à"Ÿgšg›i€K�Ó'àó
ó ó
r"   r|   c                  óF   • \ rS rSr\SS j5       r\SS j5       rS	S jrSrg)
r   i	  c                ó   • g r<   r   ©Úselfs    r#   r+   ÚServiceID.pattern_class  s   € Ø9<r"   c                ó   • g r<   r   r†   s    r#   r)   ÚServiceID.error_on_mismatch  s   € Ø36r"   c                ó   • g r<   r   ©r‡   rR   s     r#   r6   ÚServiceID.verify  s   € ¸3r"   r   N)rd   ztype[CertificatePattern])rd   ztype[Mismatch]©rR   r   rd   Úbool)	r   r   r   r   Úpropertyr+   r)   r6   r!   r   r"   r#   r   r   	  s!   † àÛ<ó Ø<àÛ6ó Ø6ç>r"   r   F)Úinitr   c                  ó†   • \ rS rSr% Sr\R                  " 5       rS\S'   \	R                  " S5      r\r\rS
S jrSS jrSrg	)ÚDNS_IDi  z!
A DNS service ID, aka hostname.
rI   ry   rW   c                óø  • [        U[        5      (       d  Sn[        U5      eUR                  5       nU(       a  [	        U5      (       a  Sn[        U5      e[        S U 5       5      (       a/  [        (       a  [        R                  " U5      nOSn[        U5      eUR                  S5      nUR                  [        5      U l        U R                  R                  U R                  5      c  Sn[        U5      eg )NzDNS-ID must be a text string.zInvalid DNS-ID.c              3  ó>   #   • U  H  n[        U5      S :„  v •  M     g7f)é   N)Úord)r>   Úcs     r#   rA   Ú"DNS_ID.__init__.<locals>.<genexpr>+  s   é € Ð.¢X Œs�1‹v˜Ž|¢Xùs   ‚z+idna library is required for non-ASCII IDs.rF   )r=   Ústrr\   r]   rS   rM   rC   ÚidnaÚencodeÚImportErrorr^   r_   ry   rg   r1   )r‡   ry   r/   Úascii_ids       r#   Ú__init__ÚDNS_ID.__init__!  sÉ   € Ü˜(¤C×(Ñ(Ø1ˆCÜ˜C“.Ð à—>‘>Ó#ˆÞœ>¨(×3Ñ3Ø#ˆCÜ˜S“/Ð!äÑ.¡XÓ.×.Ñ.ßŠtÜŸ;š; xÓ0‘àC�Ü! #Ó&Ð&à—‘ wÓ/ˆHà ×*Ñ*¬?Ó;ˆŒØ×Ñ×%Ñ% d§m¡mÓ4Ñ<Ø#ˆCÜ˜S“/Ð!ð =r"   c                óx   • [        XR                  5      (       a   [        UR                  U R                  5      $ g)z3
https://tools.ietf.org/search/rfc6125#section-6.4
F)r=   r+   Ú_hostname_matchesrR   ry   rŒ   s     r#   r6   ÚDNS_ID.verify9  s-   € ô �g×1Ñ1×2Ñ2Ü$ W§_¡_°d·m±mÓDÐDàr"   )ry   N)ry   rš   rŽ   )r   r   r   r   r   r   r   ry   r    re   rf   rg   rU   r+   r
   r)   rŸ   r6   r!   r   r"   r#   r“   r“     s?   ‡ ñð —g’g“i€HˆeÓð —j’jÐ!4Ó5€OØ€MØ#Ðô"÷0r"   r“   c                  ój   • \ rS rSr% Sr\R                  " \R                  S9r	S\
S'   \r\rS	S jrSrg)
ÚIPAddress_IDiC  z
An IP address service ID.
)Ú	converterrl   Úipc                ój   • [        XR                  5      (       a  U R                  UR                  :H  $ g)z3
https://tools.ietf.org/search/rfc2818#section-3.1
F)r=   r+   r§   rR   rŒ   s     r#   r6   ÚIPAddress_ID.verifyP  s+   € ô �g×1Ñ1×2Ñ2Ø—7‘7˜gŸo™oÑ-Ð-àr"   r   NrŽ   )r   r   r   r   r   r   r   rN   rO   r§   r    rj   r+   r   r)   r6   r!   r   r"   r#   r¥   r¥   C  s:   ‡ ñð 9=¿ºØ×&Ñ&ñ9€BÐ5ó ð %€MØ)Ð÷r"   r¥   c                  óŽ   • \ rS rSr% Sr\R                  " 5       rS\S'   \R                  " 5       r	S\S'   \
r\rSS jrSS jrS	rg
)ÚURI_IDiZ  z
An URI service ID.
rI   Úprotocolr“   Údns_idc                ód  • [        U[        5      (       d  Sn[        U5      eUR                  5       nSU;  d  [	        U5      (       a  Sn[        U5      eUR                  S5      u  p4UR                  S5      R                  [        5      U l
        [        UR                  S5      5      U l        g )NzURI-ID must be a text string.Ú:zInvalid URI-ID.rF   Ú/)r=   rš   r\   r]   rS   rM   rx   rœ   r^   r_   r¬   r“   r­   )r‡   Úurir/   Úprotry   s        r#   rŸ   ÚURI_ID.__init__f  sˆ   € Ü˜#œs×#Ñ#Ø1ˆCÜ˜C“.Ð à�i‰i‹kˆØ�c‹>œ^¨C×0Ñ0Ø#ˆCÜ˜S“/Ð!àŸ™ 3›‰ˆàŸ™ GÓ,×6Ñ6´ÓGˆŒÜ˜XŸ^™^¨CÓ0Ó1ˆ�r"   c                óÂ   • [        XR                  5      (       aE  UR                  U R                  :H  =(       a%    U R                  R                  UR                  5      $ g)z5
https://tools.ietf.org/search/rfc6125#section-6.5.2
F)r=   r+   rs   r¬   r­   r6   rt   rŒ   s     r#   r6   ÚURI_ID.verifyu  sN   € ô �g×1Ñ1×2Ñ2à×(Ñ(¨D¯M©MÑ9÷ <Ø—K‘K×&Ñ& w×':Ñ':Ó;ðð
 r"   )r­   r¬   N)r±   rš   rŽ   )r   r   r   r   r   r   r   r¬   r    r­   rq   r+   r   r)   rŸ   r6   r!   r   r"   r#   r«   r«   Z  s>   ‡ ñð —g’g“i€HˆeÓØ—W’W“Y€FˆFÓà€MØ#Ðô2÷
r"   r«   c                  óŽ   • \ rS rSr% Sr\R                  " 5       rS\S'   \R                  " 5       r	S\S'   \
r\rSS jrSS jrS	rg
)ÚSRV_IDi‚  z
An SRV service ID.
rI   r‚   r“   r­   c                ó`  • [        U[        5      (       d  Sn[        U5      eUR                  5       nSU;  d  [	        U5      (       d	  US   S:w  a  Sn[        U5      eUR                  SS5      u  p4USS  R                  S5      R                  [        5      U l
        [        U5      U l        g )NzSRV-ID must be a text string.rZ   r   Ú_zInvalid SRV-ID.r   rF   )r=   rš   r\   r]   rS   rM   rx   rœ   r^   r_   r‚   r“   r­   )r‡   Úsrvr/   r‚   ry   s        r#   rŸ   ÚSRV_ID.__init__Ž  s’   € Ü˜#œs×#Ñ#Ø1ˆCÜ˜C“.Ð à�i‰i‹kˆØ�c‹>œ^¨C×0Ñ0°C¸±F¸c³MØ#ˆCÜ˜S“/Ð!àŸ™ 3¨Ó*‰ˆà˜˜�H—O‘O GÓ,×6Ñ6´ÓGˆŒ	Ü˜XÓ&ˆ�r"   c                óÂ   • [        XR                  5      (       aE  U R                  UR                  :H  =(       a%    U R                  R                  UR                  5      $ g)z5
https://tools.ietf.org/search/rfc6125#section-6.5.1
F)r=   r+   r‚   r~   r­   r6   rt   rŒ   s     r#   r6   ÚSRV_ID.verify�  sP   € ô �g×1Ñ1×2Ñ2Ø—9‘9 × 4Ñ 4Ñ4÷ ¸¿¹×9KÑ9KØ×#Ñ#ó:ð ð r"   )r­   r‚   N)rº   rš   rŽ   )r   r   r   r   r   r   r   r‚   r    r­   r|   r+   r   r)   rŸ   r6   r!   r   r"   r#   r·   r·   ‚  s>   ‡ ñð —'’'“)€Dˆ%ÓØ—W’W“Y€FˆFÓà€MØ#Ðô'÷	r"   r·   c                ó®   • SU ;   aL  U R                  SS5      u  p#UR                  SS5      u  pEX5:w  a  gUR                  S5      (       a  gUSU4;   $ X:H  $ )zL
:return: `True` if *cert_pattern* matches *actual_hostname*, else `False`.
r[   r�   r   Fs   xn--)rx   Ú
startswith)r   Úactual_hostnameÚ	cert_headÚ	cert_tailÚactual_headÚactual_tails         r#   r¢   r¢   ©  sl   € ð ˆ|ÓØ+×1Ñ1°$¸Ó:Ñˆ	Ø#2×#8Ñ#8¸¸qÓ#AÑ ˆØÓ#Øà×!Ñ! '×*Ñ*Øà˜T ;Ð/Ñ/Ð/àÑ*Ð*r"   c                óB  • U R                  S5      nUS:”  a  SU < S3n[        U5      eU R                  S5      n[        U5      S:  a  SU < S3n[        U5      eSUS   ;  a  SU < S	3n[        U5      e[	        S
 U 5       5      (       a  SU < S3n[        U5      eg)z\
Check whether the usage of wildcards within *cert_pattern* conforms with
our expectations.
r[   r   zCertificate's DNS-ID z contains too many wildcards.r�   é   z0 has too few host components for wildcard usage.r   z+ has a wildcard outside the left-most part.c              3  óB   #   • U  H  n[        U5      (       + v •  M     g 7fr<   )Úlen)r>   Úps     r#   rA   Ú$_validate_pattern.<locals>.<genexpr>Ì  s   é € Ð
%šu˜!Œs�1‹v�:‰:šuùs   ‚z contains empty parts.N)Úcountr	   rx   rÈ   rC   )r   Úcntr/   Úpartss       r#   r`   r`   »  sÄ   € ð
 ×
Ñ
˜TÓ
"€CØ
ˆQƒwØ% lÑ%5Ð5RÐSˆÜ˜sÓ#Ð#Ø×Ñ˜tÓ$€EÜ
ˆ5ƒz�Aƒ~Ø% lÑ%5Ð5eÐfˆÜ˜sÓ#Ð#à�5˜‘8ÓØ% lÑ%5Ð5`ÐaˆÜ˜sÓ#Ð#Ü
Ñ
%™uÓ
%×%Ñ%Ø% lÑ%5Ð5KÐLˆÜ˜sÓ#Ð#ð &r"   s   ABCDEFGHIJKLMNOPQRSTUVWXYZs   abcdefghijklmnopqrstuvwxyz)r,   úSequence[CertificatePattern]r-   úSequence[ServiceID]r.   rÏ   rd   úlist[ServiceMatch])r,   rÎ   r7   rÏ   rd   rÐ   )rD   zSequence[object]r@   Útyperd   r�   )rR   zstr | bytesrd   r�   )r   rI   rÀ   rI   rd   r�   )r   rI   rd   ÚNone)*r   Ú
__future__r   rN   re   Útypingr   r   r   r   r   Ú
exceptionsr	   r
   r   r   r   r   r   r›   r�   Úsr   r4   r'   r*   rS   rU   rj   rq   r|   r   r   r“   r¥   r«   r·   r¢   r`   rI   Ú	maketransr_   r   r"   r#   Ú<module>rØ      s5  ðñõ #ã Û 	ç ?Ó ?ã ÷÷ ñ ðÛð
 ‡‚ˆdÑ÷1ð 1ó ð1ð+Ø/ð+à'ð+ð &ð+ð ô	+ð\Ø/ðà$ðð ôô*/ôð> ‡‚ˆdÑ÷$ð $ó ð$ð: ‡‚ˆdÑ÷2ð 2ó ð2ð" ‡‚ˆdÑ÷
ð 
ó ð
ð< ‡‚ˆdÑ÷
ð 
ó ð
ðB Ø�
˜JÐ(8Ð8ñÐ ðð ô?�ó ?ó ð?ð ‡‚ˆU˜$Ñ÷+ð +ó  ð+ð\ ‡‚ˆdÑ÷ð ó ðð, ‡‚ˆU˜$Ñ÷$ð $ó  ð$ðN ‡‚ˆU˜$Ñ÷#ð #ó  ð#ôL+ô$$ð. —/‘/Ø!Ð#@ó�øðo ó ØƒDðús   ´F ÆF%Æ$F%