Current File : //usr/lib/python3/dist-packages/service_identity/__pycache__/hazmat.cpython-312.pyc
�

զex0��x�dZddlmZddlZddlZddlmZmZmZm	Z	ddl
Z
ddlmZm
Z
mZmZmZmZmZ	ddlZe
j*d��Gd	�d
��Z								d'd�Z						d(d�Zd)d
�Zd*d�Ze
j*d��Gd�d��Ze
j*d��Gd�d��Ze
j*d��Gd�d��Ze
j*d��Gd�d��ZeeeeefZ	e	Gd�de��Z e
j*dd��Gd�d��Z!e
j*d��Gd�d��Z"e
j*dd��Gd�d ��Z#e
j*dd��Gd!�d"��Z$d+d#�Z%d,d$�Z&e'jQd%d&�Z)y#e$rdZY���wxYw)-z
Common verification code.
�)�annotationsN)�Protocol�Sequence�Union�runtime_checkable�)�CertificateError�DNSMismatch�IPAddressMismatch�Mismatch�SRVMismatch�URIMismatch�VerificationErrorT)�slotsc�j�eZdZUdZej
�Zded<ej
�Zded<y)�ServiceMatchz<
    A match of a service id and a certificate pattern.
    �	ServiceID�
service_id�CertificatePattern�cert_patternN)	�__name__�
__module__�__qualname__�__doc__�attr�ibr�__annotations__r���9/usr/lib/python3/dist-packages/service_identity/hazmat.pyrrs.���$�D�G�G�I�J�	�%�'.�t�w�w�y�L�$�0rrc��|std��g}t||�t||�z}|D�cgc]}|j��}}|D](}||vs�|j|j	|����*|D]?}||vs�t||j�s�|j|j	|����A|rt|���|Scc}w)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_idsr#�matches�match�matched_ids�is        r �verify_service_identityr0)s�����A�
�	
��F��M�>�:�]��|�>��G�29�9��5�#�#�9�K�9�
�@���K���M�M�!�-�-�A�-�>�?�@��@��

�K��$9��1�?�?�%
�
�M�M�!�-�-�A�-�>�?�@���v�.�.��N��%:s�Cc��g}|D]7}|D]0}|j|�s�|jt||����2�9|S)z�
    Search for matching certificate patterns and service_ids.

    Args:
        service_ids: List of service IDs like DNS_ID.
    )rr)�verifyr%r)r)�service_idsr,�sid�cids     r r$r$TsP���G��O�� �	O�C��z�z�#�����|���M�N�	O�O��Nrc�,��t�fd�|D��S)Nc3�6�K�|]}t|�����y�w�N)�
isinstance)�.0�e�cls  �r �	<genexpr>z(_contains_instance_of.<locals>.<genexpr>gs�����.�Q�z�!�R� �.�s�)�any)�seqr<s `r r'r'fs����.�#�.�.�.rc��t|t�r	|jd�}	t	|�y#t$rYywxYw#t
$rYnwxYw	t
j|jdd��y#t
$rYywxYw)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)	r9�bytes�decode�UnicodeError�int�
ValueError�	ipaddress�
ip_address�replace��patterns r �_is_ip_addressrNjs����'�5�!�	��n�n�W�-�G�
��G�����	��	���
��
������W�_�_�S�#�6�7�������s-�0�?�	<�<�	A�
A�%A5�5	B�Bc�t�eZdZUdZej
�Zded<ejd�Z
edd��Zy)�
DNSPatternz7
    A DNS pattern as extracted from certificates.
    rDrM�^[a-z0-9\-_.]+$c��t|t�std��|j�}|dk(st	|�sd|vrtd|�d���|j
t�}d|vrt|�||��S)Nz'The DNS pattern must be a bytes string.r�zInvalid DNS pattern �.�*rL)	r9rD�	TypeError�striprNr	�	translate�_TRANS_TO_LOWER�_validate_pattern)�clsrMs  r �
from_byteszDNSPattern.from_bytes�sw���'�5�)��E�F�F��-�-�/���c�>�^�G�4���8H�"�%9�'��A�#F�G�G��#�#�O�4���7�?��g�&��7�#�#rN)rMrD�returnrP)
rrrrrrrMr�re�compile�_RE_LEGAL_CHARS�classmethodr\rrr rPrP�s>���
�T�W�W�Y�G�U�� �b�j�j�!4�5�O��
$��
$rrPc�P�eZdZUdZej
�Zded<edd��Z	y)�IPAddressPatternz?
    An IP address pattern as extracted from certificates.
    �-ipaddress.IPv4Address | ipaddress.IPv6AddressrMc�v�	|tj|���S#t$rtd|�d��d�wxYw)NrLzInvalid IP address pattern rT)rIrJrHr	)r[�bss  r r\zIPAddressPattern.from_bytes�sH��	��y�3�3�B�7�8�8���	�"�-�b�V�1�5���
�	�s��8N)rfrDr]rc)
rrrrrrrMrrar\rrr rcrc�s/���
>E�T�W�W�Y�G�
:�F����rrcc�|�eZdZUdZej
�Zded<ej
�Zded<e	dd��Z
y)	�
URIPatternz8
    An URI pattern as extracted from certificates.
    rD�protocol_patternrP�dns_patternc�$�t|t�std��|j�j	t
�}d|vsd|vst
|�rtd|�d���|jd�\}}||tj|���S)Nz'The URI pattern must be a bytes string.�:rUzInvalid URI pattern rT)rirj�r9rDrVrWrXrYrNr	�splitrPr\)r[rMri�hostnames    r r\zURIPattern.from_bytes�s����'�5�)��E�F�F��-�-�/�+�+�O�<���w��$�'�/�^�G�5L�"�%9�'��A�#F�G�G�%,�]�]�4�%8�"��(��-�"�-�-�h�7�
�	
rN)rMrDr]rh)rrrrrrrirrjrar\rrr rhrh�s@���
&�d�g�g�i��e�'�%�d�g�g�i�K��'��
��
rrhc�|�eZdZUdZej
�Zded<ej
�Zded<e	dd��Z
y)	�
SRVPatternz8
    An SRV pattern as extracted from certificates.
    rD�name_patternrPrjc�<�t|t�std��|j�j	t
�}|ddk7sd|vsd|vst
|�rtd|�d���|jdd�\}}||ddtj|��	�S)
Nz'The SRV pattern must be a bytes string.r�_�.rUzInvalid SRV pattern rTr)rrrjrm)r[rM�nameros    r r\zSRVPattern.from_bytes�s����'�5�)��E�F�F��-�-�/�+�+�O�<��
�A�J�'�!��7�"��w���g�&�"�%9�'��A�#F�G�G� ���t�Q�/���h���a�b��z�/D�/D�X�/N�
�	
rN)rMrDr]rq)rrrrrrrrrrjrar\rrr rqrq�s?���
"�$�'�'�)�L�%�#�%�d�g�g�i�K��'��
��
rrqc�8�eZdZedd��Zedd��Zdd�Zy)rc��yr8r��selfs r r(zServiceID.pattern_class����rc��yr8rrys r r&zServiceID.error_on_mismatchr{rc��yr8r�rzrMs  r r2zServiceID.verifys��rN)r]ztype[CertificatePattern])r]ztype[Mismatch]�rMrr]�bool)rrr�propertyr(r&r2rrr rr�s-��
��������rrF)�initrc�z�eZdZUdZej
�Zded<ejd�Z
eZe
Zdd�Zd	d�Zy)
�DNS_IDz)
    A DNS service ID, aka hostname.
    rDrorQc��t|t�std��|j�}|rt	|�rtd��t
d�|D��r'trtj|�}ntd��|jd�}|jt�|_|jj|j��td��y)NzDNS-ID must be a text string.zInvalid DNS-ID.c3�8K�|]}t|�dkD���y�w)�N)�ord)r:�cs  r r=z"DNS_ID.__init__.<locals>.<genexpr> s����.��s�1�v��|�.�s�z+idna library is required for non-ASCII IDs.rA)r9�strrVrWrNrHr>�idna�encode�ImportErrorrXrYror`r-)rzro�ascii_ids   r �__init__zDNS_ID.__init__s����(�C�(��;�<�<��>�>�#���>�(�3��.�/�/��.�X�.�.���;�;�x�0��!�A��� ���w�/�H� �*�*�?�;��
����%�%�d�m�m�4�<��.�/�/�=rc�p�t||j�r t|j|j�Sy)zC
        https://tools.ietf.org/search/rfc6125#section-6.4
        F)r9r(�_hostname_matchesrMror~s  r r2z
DNS_ID.verify.s,���g�t�1�1�2�$�W�_�_�d�m�m�D�D�rN)ror�r)rrrrrrrorr^r_r`rPr(r
r&r�r2rrr r�r�sC����d�g�g�i�H�e��!�b�j�j�!4�5�O��M�#��0�,rr�c�f�eZdZUdZej
ej��Zde	d<e
ZeZ
dd�Zy)�IPAddress_IDz#
    An IP address service ID.
    )�	converterrd�ipc�b�t||j�r|j|jk(Sy)zC
        https://tools.ietf.org/search/rfc2818#section-3.1
        F)r9r(r�rMr~s  r r2zIPAddress_ID.verifyEs*���g�t�1�1�2��7�7�g�o�o�-�-�rNr)rrrrrrrIrJr�rrcr(rr&r2rrr r�r�8s=���9@�����&�&�9�B�5��%�M�)��rr�c��eZdZUdZej
�Zded<ej
�Zded<e	Z
eZd	d�Z
d
d�Zy)�URI_IDz
    An URI service ID.
    rD�protocolr��dns_idc�F�t|t�std��|j�}d|vst	|�rtd��|j
d�\}}|jd�jt�|_
t|jd��|_y)NzURI-ID must be a text string.�:zInvalid URI-ID.rA�/)
r9r�rVrWrNrHrnr�rXrYr�r�r�)rz�uri�protros    r r�zURI_ID.__init__[s~���#�s�#��;�<�<��i�i�k���c�>�^�C�0��.�/�/����3����h����G�,�6�6��G��
��X�^�^�C�0�1��rc��t||j�r@|j|jk(xr%|jj|j�Sy)zE
        https://tools.ietf.org/search/rfc6125#section-6.5.2
        F)r9r(rir�r�r2rjr~s  r r2z
URI_ID.verifyhsM���g�t�1�1�2��(�(�D�M�M�9�<��K�K�&�&�w�':�':�;�
�
rN)r�r�r)rrrrrrr�rr�rhr(rr&r�r2rrr r�r�OsB����d�g�g�i�H�e���T�W�W�Y�F�F���M�#��2�
rr�c��eZdZUdZej
�Zded<ej
�Zded<e	Z
eZd	d�Z
d
d�Zy)�SRV_IDz
    An SRV service ID.
    rDrvr�r�c�@�t|t�std��|j�}d|vst	|�s|ddk7rtd��|j
dd�\}}|ddjd�jt�|_
t|�|_y)NzSRV-ID must be a text string.rTr�_zInvalid SRV-ID.rrA)
r9r�rVrWrNrHrnr�rXrYrvr�r�)rz�srvrvros    r r�zSRV_ID.__init__�s����#�s�#��;�<�<��i�i�k���c�>�^�C�0�C��F�c�M��.�/�/����3��*���h����H�O�O�G�,�6�6��G��	��X�&��rc��t||j�r@|j|jk(xr%|jj|j�Sy)zE
        https://tools.ietf.org/search/rfc6125#section-6.5.1
        F)r9r(rvrrr�r2rjr~s  r r2z
SRV_ID.verify�sO���g�t�1�1�2��9�9�� 4� 4�4�����9K�9K��#�#�:�
�rN)r�r�r)rrrrrrrvrr�rqr(r
r&r�r2rrr r�r�usB����$�'�'�)�D�%���T�W�W�Y�F�F���M�#��'�	rr�c��d|vrN|jdd�\}}|jdd�\}}||k7ry|jd�ry|dk(xs||k(S||k(S)zT
    :return: `True` if *cert_pattern* matches *actual_hostname*, else `False`.
    rUrurFsxn--)rn�
startswith)r�actual_hostname�	cert_head�	cert_tail�actual_head�actual_tails      r r�r��sv���|��+�1�1�$��:��	�9�#2�#8�#8��q�#A� ��[���#���!�!�'�*���D� �<�I��$<�<��?�*�*rc�.�|jd�}|dkDrtd|�d���|jd�}t|�dkrtd|�d���d|dvrtd	j	|���td
�|D��rtd|�d���y)
zh
    Check whether the usage of wildcards within *cert_pattern* conforms with
    our expectations.
    rUrzCertificate's DNS-ID z contains too many wildcards.ru�z0 has too few host components for wildcard usage.rzDCertificate's DNS-ID {!r} has a wildcard outside the left-most part.c3�4K�|]}t|����y�wr8)�len)r:�ps  r r=z$_validate_pattern.<locals>.<genexpr>�s����
%�!�s�1�v�:�
%�s�z contains empty parts.N)�countr	rnr��formatr>)r�cnt�partss   r rZrZ�s���
�
�
�T�
"�C�
�Q�w��#�L�#3�3P�Q�
�	
�
���t�$�E�
�5�z�A�~��#�L�#3�4�
�
�	
�
�5��8���
��F�<�(�
�	
��
%�u�
%�%��#�L�#3�3I�J�
�	
�&rsABCDEFGHIJKLMNOPQRSTUVWXYZsabcdefghijklmnopqrstuvwxyz)r)�Sequence[CertificatePattern]r*�Sequence[ServiceID]r+r�r]�list[ServiceMatch])r)r�r3r�r]r�)r?zSequence[object]r<�typer]r�)rMzstr | bytesr]r�)rrDr�rDr]r�)rrDr]�None)*r�
__future__rrIr^�typingrrrrr�
exceptionsr	r
rrr
rrr�r��srr0r$r'rNrPrcrhrqrrr�r�r�r�r�rZrD�	maketransrYrrr �<module>r�sF���#��	�?�?�������
����d��1�1��1�(�/�(�'�(�&�(��	(�V�/��$����$/��<����d��$�$��$�6����d������$����d��
�
��
�8����d��
�
��
�>��
�J�(8�8�����
��
��
�����U�$��)�)� �)�X����d������,����U�$��"�"� �"�J����U�$��!�!� �!�H+�$
�:�/�/�!�#@����]
���D��s�F.�.F9�8F9