§
    qŠtjVF  ã                   óš  — d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ d	Z ej        eŽ Zd
ZdZej        dk    rd„ Znd„ Zej        dk     rd„ Znd„ Zd„ Zd,d„Z G d„ d¦  «        Zd„ Zd„ Zd„ Zefd„Zefd„Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d „ Z&d!„ Z'd"„ Z(d#„ Z)d$„ Z*d%„ Z+d&„ Z, G d'„ d(e-¦  «        Z.d)„ Z/d*„ Z0d+„ Z1dS )-aü  
This module includes some utility functions.

The methods most typically used are the sigencode and sigdecode functions
to be used with :func:`~ecdsa.keys.SigningKey.sign` and
:func:`~ecdsa.keys.VerifyingKey.verify`
respectively. See the :func:`sigencode_strings`, :func:`sigdecode_string`,
:func:`sigencode_der`, :func:`sigencode_strings_canonize`,
:func:`sigencode_string_canonize`, :func:`sigencode_der_canonize`,
:func:`sigdecode_strings`, :func:`sigdecode_string`, and
:func:`sigdecode_der` functions.
é    )ÚdivisionN)Úsha256)ÚPY2Úint2byteÚnexté   )Úder)Únormalise_bytes)r   é   iH  i='  r   r   )r   é   é„   r   é   )r   r   r   r   é   )r   c                 ó¨   — t          t                               | d¦  «        ¦  «        dd…                              t	          | ¦  «        dz  ¦  «        S )ú-Convert a bytestring to string of 0's and 1'sÚbigr   Né   )ÚbinÚintÚ
from_bytesÚzfillÚlen©Úent_256s    úH/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/ecdsa/util.pyÚentropy_to_bitsr   4   s@   € å•3—>’> '¨5Ñ1Ô1Ñ2Ô2°1°2°2Ô6×<Ò<½SÀ¹\¼\ÈAÑ=MÑNÔNÐNó    c                 ó@   — d                      d„ | D ¦   «         ¦  «        S )r   Ú c              3   ó„   K  — | ];}t          t          |¦  «        ¦  «        d d…                              d¦  «        V — Œ<dS )r   Nr   )r   Úordr   )Ú.0Úxs     r   ú	<genexpr>z"entropy_to_bits.<locals>.<genexpr><   sD   è è € ÐAÐA°A•s�3˜q™6œ6‘{”{ 1 2 2”×,Ò,¨QÑ/Ô/ÐAÐAÐAÐAÐAÐAr   )Újoinr   s    r   r   r   :   s#   € à�wŠwÐAÐA¸ÐAÑAÔAÑAÔAÐAr   )r   é   c                 ó@   — t          t          | ¦  «        ¦  «        dz
  S )Nr   )r   r   ©r#   s    r   Ú
bit_lengthr)   A   s   € Ý•3�q‘6”6‰{Œ{˜Q‰Ðr   c                 ó.   — |                       ¦   «         pdS ©Nr   )r)   r(   s    r   r)   r)   F   s   € Ø�|Š|‰~Œ~Ð" Ð"r   c                 ó2   — dt          d| z  ¦  «        z   dz  S )Nr   z%xr   )r   )Úorders    r   Úorderlenr.   J   s   € Ø•�D˜5‘LÑ!Ô!Ñ! aÑ'Ð'r   c                 óö   — | dk    sJ ‚|€t           j        }t          | dz
  ¦  «        }|dz  dz   }	  ||¦  «        }t          |¦  «        }t	          |d|…         d¬¦  «        dz   }d|cxk     r| k     rn n|S ŒI)a  Return a random integer k such that 1 <= k < order, uniformly
    distributed across that range. Worst case should be a mean of 2 loops at
    (2**k)+2.

    Note that this function is not declared to be forwards-compatible: we may
    change the behavior in future releases. The entropy= argument (which
    should get a callable that behaves like os.urandom) can be used to
    achieve stability within a given release (for repeatable unit tests), but
    should not be used as a long-term-compatible key generation algorithm.
    r   Nr   r   T)Úbaser   )ÚosÚurandomr)   r   r   )r-   ÚentropyÚupper_2Ú	upper_256r   Úent_2Úrand_nums          r   Ú	randranger8   N   s¨   € ð �1Š9ˆ9ˆ9ˆ9Ø€Ý”*ˆÝ˜ ™Ñ#Ô#€GØ˜1‘˜qÑ €IðØ�'˜)Ñ$Ô$ˆÝ Ñ(Ô(ˆÝ�u˜X˜g˜X”¨QÐ/Ñ/Ô/°!Ñ3ˆØˆxÐÐÒÐ˜%ÒÐÐÐÐØˆOðr   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚPRNGc                 ó:   — |                       |¦  «        | _        d S ©N)Úblock_generatorÚ	generator)ÚselfÚseeds     r   Ú__init__zPRNG.__init__l   s   € Ø×-Ò-¨dÑ3Ô3ˆŒˆˆr   c                 ó�   ‡ — ˆ fd„t          |¦  «        D ¦   «         }t          rd                     |¦  «        S t          |¦  «        S )Nc                 ó8   •— g | ]}t          ‰j        ¦  «        ‘ŒS © )r   r>   )r"   Úir?   s     €r   ú
<listcomp>z!PRNG.__call__.<locals>.<listcomp>p   s#   ø€ Ð;Ð;Ð; a�T�$”.Ñ!Ô!Ð;Ð;Ð;r   r   )Úranger   r%   Úbytes)r?   ÚnumbytesÚas   `  r   Ú__call__zPRNG.__call__o   sE   ø€ Ø;Ð;Ð;Ð;­5°©?¬?Ð;Ñ;Ô;ˆåð 	Ø—7’7˜1‘:”:Ðå˜‘8”8ˆOr   c              #   ó–   K  — d}	 t          d||fz                       ¦   «         ¦  «                             ¦   «         D ]}|V — Œ|dz  }ŒE)Nr   Tz
prng-%d-%sr   )r   ÚencodeÚdigest)r?   r@   ÚcounterÚbytes       r   r=   zPRNG.block_generatorw   se   è è € Øˆð	ÝØ ¨$ Ñ/×7Ò7Ñ9Ô9ñô çŠf‰hŒhðð �ð �
�
�
�
Ø�q‰LˆGð	r   N)Ú__name__Ú
__module__Ú__qualname__rA   rK   r=   rD   r   r   r:   r:   f   sA   € € € € € ð4ð 4ð 4ðð ð ðð ð ð ð r   r:   c                 óä   —  t          | ¦  «        dt          |¦  «        z  ¦  «        }t          t          j        |¦  «        d¦  «        |dz
  z  dz   }d|cxk    r|k     sn J d||f¦   «         ‚|S )Nr   é   r   )r:   r.   r   ÚbinasciiÚhexlify)r@   r-   r0   Únumbers       r   Ú%randrange_from_seed__overshoot_modulorY   �   s…   € ð �4�‰:Œ:�a�( 5™/œ/Ñ)Ñ*Ô*€DÝ•(Ô" 4Ñ(Ô(¨"Ñ-Ô-°¸±Ñ;¸qÑ@€FØ�ÐÐÒÐ˜ÒÐÐÐÐ  F¨EÐ 2ÑÔÐØ€Mr   c                 ó   — d| z  dz
  S r+   rD   )Únumbitss    r   Úlsb_of_onesr\   Ž   s   € Ø�‰L˜AÑÐr   c                 óp   — t          t          j        | dz
  d¦  «        dz   ¦  «        }|dz  }|dz  }|||fS )Nr   r   r   )r   ÚmathÚlog)r-   ÚbitsrH   Ú	extrabitss       r   Úbits_and_bytesrb   ’   sC   € Ý�tŒx˜ ™	 1Ñ%Ô%¨Ñ)Ñ*Ô*€DØ�A‰I€EØ�q‘€IØ�˜	Ð!Ð!r   c                 ó   — t          |¦  «        \  }}}|r|dz  } || ¦  «                             ¦   «         d |…         }d|t          |¦  «        z
  z  |z   }dt          t	          j        |¦  «        d¦  «        z   }d|cxk    r|k     sn J ‚|S )Nr   ú rU   )rb   rN   r   r   rV   rW   )r@   r-   Úhashmodr`   Ú_bytesra   r0   rX   s           r   Ú#randrange_from_seed__truncate_bytesrg   ¥   s®   € õ -¨UÑ3Ô3Ñ€Dˆ&�)Øð Ø�!‰ˆØˆ7�4‰=Œ=×ÒÑ!Ô! ' 6 'Ô*€DØ�V�c $™iœiÑ'Ñ(¨4Ñ/€DØ••XÔ% dÑ+Ô+¨RÑ0Ô0Ñ0€FØ�ÐÐÒÐ˜ÒÐÐÐÐÐØ€Mr   c                 óÚ  — t          t          j        |dz
  d¦  «        dz   ¦  «        }|dz   dz  } || ¦  «                             ¦   «         d |…         }d|t	          |¦  «        z
  z  |z   }d|z  |z
  }|r=t          t          |d         ¦  «        t          |¦  «        z  ¦  «        |dd …         z   }dt          t          j	        |¦  «        d¦  «        z   }d|cxk    r|k     sn J ‚|S )Nr   r   r&   r   rd   r   rU   )
r   r^   r_   rN   r   r   r!   r\   rV   rW   )r@   r-   re   r`   Úmaxbytesr0   ÚtopbitsrX   s           r   Ú"randrange_from_seed__truncate_bitsrk   ³   s   € õ �tŒx˜ ™	 1Ñ%Ô%¨Ñ)Ñ*Ô*€DØ�q‘˜Q‰€HØˆ7�4‰=Œ=×ÒÑ!Ô! ) 8 )Ô,€DØ�X¥ D¡	¤	Ñ)Ñ*¨TÑ1€DØ�(‰l˜TÑ!€GØð HÝ�˜D œG™œ¥{°7Ñ';Ô';Ñ;Ñ<Ô<¸tÀAÀBÀB¼xÑGˆØ••XÔ% dÑ+Ô+¨RÑ0Ô0Ñ0€FØ�ÐÐÒÐ˜ÒÐÐÐÐÐØ€Mr   c                 ó,  — |dk    sJ ‚t          |¦  «        \  }}}t          | ¦  «        }	 d}|r5t          t           |d¦  «        ¦  «        t	          |¦  «        z  ¦  «        }t          | ||¦  «        z   ¦  «        dz   }d|cxk    r|k     rn n|S Œj)Nr   Tr   )rb   r:   r   r!   r\   Ústring_to_number)r@   r-   r`   rH   ra   ÚgenerateÚ	extrabyteÚguesss           r   Ú randrange_from_seed__trytryagainrq   Â   s¸   € ð �1Š9ˆ9ˆ9ˆ9Ý+¨EÑ2Ô2Ñ€Dˆ%�Ý�D‰zŒz€HðØˆ	Øð 	LÝ ¥ X X¨a¡[¤[Ñ!1Ô!1µKÀ	Ñ4JÔ4JÑ!JÑKÔKˆIÝ  ¨X¨X°e©_¬_Ñ!<Ñ=Ô=ÀÑAˆØ�ÐÐÒÐ˜ÒÐÐÐÐØˆLðr   c                 óþ   — t          |¦  «        }dt          d|z  ¦  «        z   dz   }t          j        || z                       ¦   «         ¦  «        }t          |¦  «        |k    sJ t          |¦  «        |f¦   «         ‚|S ©Nz%0r   r#   )r.   ÚstrrV   Ú	unhexlifyrM   r   ©Únumr-   ÚlÚfmt_strÚstrings        r   Únumber_to_stringr{   Õ   su   € Ý�‰Œ€AØ•S˜˜Q™‘Z”ZÑ #Ñ%€GÝÔ ¨3¡× 6Ò 6Ñ 8Ô 8Ñ9Ô9€FÝˆv‰;Œ;˜!ÒÐÐ�c &™kœk¨1Ð-ÑÔÐØ€Mr   c                 ó¶   — t          |¦  «        }dt          d|z  ¦  «        z   dz   }t          j        || z                       ¦   «         ¦  «        }|d |…         S rs   )r.   rt   rV   ru   rM   rv   s        r   Únumber_to_string_cropr}   Ý   sT   € Ý�‰Œ€AØ•S˜˜Q™‘Z”ZÑ #Ñ%€GÝÔ ¨3¡× 6Ò 6Ñ 8Ô 8Ñ9Ô9€FØ�"�1�"Œ:Ðr   c                 óF   — t          t          j        | ¦  «        d¦  «        S ©NrU   )r   rV   rW   )rz   s    r   rm   rm   ä   s   € Ý�xÔ Ñ'Ô'¨Ñ,Ô,Ð,r   c                 ó¼   — t          |¦  «        }t          | ¦  «        |k    sJ t          | ¦  «        |f¦   «         ‚t          t          j        | ¦  «        d¦  «        S r   )r.   r   r   rV   rW   )rz   r-   rx   s      r   Ústring_to_number_fixedlenr�   è   sR   € Ý�‰Œ€AÝˆv‰;Œ;˜!ÒÐÐ�c &™kœk¨1Ð-ÑÔÐÝ�xÔ Ñ'Ô'¨Ñ,Ô,Ð,r   c                 óJ   — t          | |¦  «        }t          ||¦  «        }||fS )aZ  
    Encode the signature to a pair of strings in a tuple

    Encodes signature into raw encoding (:term:`raw encoding`) with the
    ``r`` and ``s`` parts of the signature encoded separately.

    It's expected that this function will be used as a ``sigencode=`` parameter
    in :func:`ecdsa.keys.SigningKey.sign` method.

    :param int r: first parameter of the signature
    :param int s: second parameter of the signature
    :param int order: the order of the curve over which the signature was
        computed

    :return: raw encoding of ECDSA signature
    :rtype: tuple(bytes, bytes)
    )r{   ©ÚrÚsr-   Úr_strÚs_strs        r   Úsigencode_stringsrˆ   î   s,   € õ$ ˜Q Ñ&Ô&€EÝ˜Q Ñ&Ô&€EØ�5ˆ>Ðr   c                 ó4   — t          | ||¦  «        \  }}||z   S )aÉ  
    Encode the signature to raw format (:term:`raw encoding`)

    It's expected that this function will be used as a ``sigencode=`` parameter
    in :func:`ecdsa.keys.SigningKey.sign` method.

    :param int r: first parameter of the signature
    :param int s: second parameter of the signature
    :param int order: the order of the curve over which the signature was
        computed

    :return: raw encoding of ECDSA signature
    :rtype: bytes
    )rˆ   rƒ   s        r   Úsigencode_stringrŠ     s#   € õ" % Q¨¨5Ñ1Ô1�L€Eˆ5Ø�5‰=Ðr   c                 ót   — t          j        t          j        | ¦  «        t          j        |¦  «        ¦  «        S )a‹  
    Encode the signature into the ECDSA-Sig-Value structure using :term:`DER`.

    Encodes the signature to the following :term:`ASN.1` structure::

        Ecdsa-Sig-Value ::= SEQUENCE {
            r       INTEGER,
            s       INTEGER
        }

    It's expected that this function will be used as a ``sigencode=`` parameter
    in :func:`ecdsa.keys.SigningKey.sign` method.

    :param int r: first parameter of the signature
    :param int s: second parameter of the signature
    :param int order: the order of the curve over which the signature was
        computed

    :return: DER encoding of ECDSA signature
    :rtype: bytes
    )r	   Úencode_sequenceÚencode_integer©r„   r…   r-   s      r   Úsigencode_derr�     s-   € õ, Ô�sÔ1°!Ñ4Ô4µcÔ6HÈÑ6KÔ6KÑLÔLÐLr   c                 ó"   — | |dz  k    r|| z
  } | S )a8  
    Internal function for ensuring that the ``s`` value of a signature is in
    the "canonical" format.

    :param int s: the second parameter of ECDSA signature
    :param int order: the order of the curve over which the signatures was
        computed

    :return: canonical value of s
    :rtype: int
    r   rD   )r…   r-   s     r   Ú	_canonizer‘   3  s   € ð 	ˆ5�A‰:‚~€~Ø�A‰IˆØ€Hr   c                 óD   — t          ||¦  «        }t          | ||¦  «        S )a  
    Encode the signature to a pair of strings in a tuple

    Encodes signature into raw encoding (:term:`raw encoding`) with the
    ``r`` and ``s`` parts of the signature encoded separately.

    Makes sure that the signature is encoded in the canonical format, where
    the ``s`` parameter is always smaller than ``order / 2``.
    Most commonly used in bitcoin.

    It's expected that this function will be used as a ``sigencode=`` parameter
    in :func:`ecdsa.keys.SigningKey.sign` method.

    :param int r: first parameter of the signature
    :param int s: second parameter of the signature
    :param int order: the order of the curve over which the signature was
        computed

    :return: raw encoding of ECDSA signature
    :rtype: tuple(bytes, bytes)
    )r‘   rˆ   rŽ   s      r   Úsigencode_strings_canonizer“   D  s%   € õ, 	�!�UÑÔ€AÝ˜Q  5Ñ)Ô)Ð)r   c                 óD   — t          ||¦  «        }t          | ||¦  «        S )aw  
    Encode the signature to raw format (:term:`raw encoding`)

    Makes sure that the signature is encoded in the canonical format, where
    the ``s`` parameter is always smaller than ``order / 2``.
    Most commonly used in bitcoin.

    It's expected that this function will be used as a ``sigencode=`` parameter
    in :func:`ecdsa.keys.SigningKey.sign` method.

    :param int r: first parameter of the signature
    :param int s: second parameter of the signature
    :param int order: the order of the curve over which the signature was
        computed

    :return: raw encoding of ECDSA signature
    :rtype: bytes
    )r‘   rŠ   rŽ   s      r   Úsigencode_string_canonizer•   ^  s%   € õ& 	�!�UÑÔ€AÝ˜A˜q %Ñ(Ô(Ð(r   c                 óD   — t          ||¦  «        }t          | ||¦  «        S )a9  
    Encode the signature into the ECDSA-Sig-Value structure using :term:`DER`.

    Makes sure that the signature is encoded in the canonical format, where
    the ``s`` parameter is always smaller than ``order / 2``.
    Most commonly used in bitcoin.

    Encodes the signature to the following :term:`ASN.1` structure::

        Ecdsa-Sig-Value ::= SEQUENCE {
            r       INTEGER,
            s       INTEGER
        }

    It's expected that this function will be used as a ``sigencode=`` parameter
    in :func:`ecdsa.keys.SigningKey.sign` method.

    :param int r: first parameter of the signature
    :param int s: second parameter of the signature
    :param int order: the order of the curve over which the signature was
        computed

    :return: DER encoding of ECDSA signature
    :rtype: bytes
    )r‘   r�   rŽ   s      r   Úsigencode_der_canonizer—   u  s%   € õ4 	�!�UÑÔ€AÝ˜˜A˜uÑ%Ô%Ð%r   c                   ó   — e Zd ZdZdS )ÚMalformedSignatureaB  
    Raised by decoding functions when the signature is malformed.

    Malformed in this context means that the relevant strings or integers
    do not match what a signature over provided curve would create. Either
    because the byte strings have incorrect lengths or because the encoded
    values are too large.
    N)rQ   rR   rS   Ú__doc__rD   r   r   r™   r™   “  s   € € € € € ðð ð 	€Dr   r™   c                 ó8  — t          | ¦  «        } t          |¦  «        }t          | ¦  «        d|z  k    s3t          d                     d|z  t          | ¦  «        ¦  «        ¦  «        ‚t          | d|…         |¦  «        }t          | |d…         |¦  «        }||fS )aà  
    Decoder for :term:`raw encoding`  of ECDSA signatures.

    raw encoding is a simple concatenation of the two integers that comprise
    the signature, with each encoded using the same amount of bytes depending
    on curve size/order.

    It's expected that this function will be used as the ``sigdecode=``
    parameter to the :func:`ecdsa.keys.VerifyingKey.verify` method.

    :param signature: encoded signature
    :type signature: bytes like object
    :param order: order of the curve over which the signature was computed
    :type order: int

    :raises MalformedSignature: when the encoding of the signature is invalid

    :return: tuple with decoded ``r`` and ``s`` values of signature
    :rtype: tuple of ints
    r   zWInvalid length of signature, expected {0} bytes long, provided string is {1} bytes longN)r
   r.   r   r™   Úformatr�   )Ú	signaturer-   rx   r„   r…   s        r   Úsigdecode_stringrž      sš   € õ*   	Ñ*Ô*€IÝ�‰Œ€AÝˆy‰>Œ>˜Q ™UÒ"Ð"Ý ð0ß06²°q¸1±u½cÀ)¹n¼nÑ0MÔ0Mñ
ô 
ð 	
õ 	" )¨B¨Q¨B¤-°Ñ7Ô7€AÝ! )¨A¨B¨B¤-°Ñ7Ô7€AØˆaˆ4€Kr   c                 ó>  — t          | ¦  «        dk    s/t          d                     t          | ¦  «        ¦  «        ¦  «        ‚| \  }}t          |¦  «        }t          |¦  «        }t	          |¦  «        }t          |¦  «        |k    s0t          d                     |t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        |k    s0t          d                     |t          |¦  «        ¦  «        ¦  «        ‚t          ||¦  «        }t          ||¦  «        }||fS )aÁ  
    Decode the signature from two strings.

    First string needs to be a big endian encoding of ``r``, second needs to
    be a big endian encoding of the ``s`` parameter of an ECDSA signature.

    It's expected that this function will be used as the ``sigdecode=``
    parameter to the :func:`ecdsa.keys.VerifyingKey.verify` method.

    :param list rs_strings: list of two bytes-like objects, each encoding one
        parameter of signature
    :param int order: order of the curve over which the signature was computed

    :raises MalformedSignature: when the encoding of the signature is invalid

    :return: tuple with decoded ``r`` and ``s`` values of signature
    :rtype: tuple of ints
    r   z3Invalid number of strings provided: {0}, expected 2zjInvalid length of first string ('r' parameter), expected {0} bytes long, provided string is {1} bytes longzkInvalid length of second string ('s' parameter), expected {0} bytes long, provided string is {1} bytes long)r   r™   rœ   r
   r.   r�   )Ú
rs_stringsr-   r†   r‡   rx   r„   r…   s          r   Úsigdecode_stringsr¡   Á  s  € õ& ˆz‰?Œ?˜aÒÐÝ ØA×HÒHÝ�J‘”ñô ñ
ô 
ð 	
ð
  �N€UˆEÝ˜EÑ"Ô"€EÝ˜EÑ"Ô"€EÝ�‰Œ€AÝˆu‰:Œ:˜Š?ˆ?Ý ðçš ¥3 u¡:¤:Ñ.Ô.ñ
ô 
ð 	
õ
 ˆu‰:Œ:˜Š?ˆ?Ý ðçš ¥3 u¡:¤:Ñ.Ô.ñ
ô 
ð 	
õ
 	" %¨Ñ/Ô/€AÝ! %¨Ñ/Ô/€AØˆaˆ4€Kr   c                 ón  — t          | ¦  «        } t          j        | ¦  «        \  }}|dk    r)t          j        dt	          j        |¦  «        z  ¦  «        ‚t          j        |¦  «        \  }}t          j        |¦  «        \  }}|dk    r)t          j        dt	          j        |¦  «        z  ¦  «        ‚||fS )a  
    Decoder for DER format of ECDSA signatures.

    DER format of signature is one that uses the :term:`ASN.1` :term:`DER`
    rules to encode it as a sequence of two integers::

        Ecdsa-Sig-Value ::= SEQUENCE {
            r       INTEGER,
            s       INTEGER
        }

    It's expected that this function will be used as as the ``sigdecode=``
    parameter to the :func:`ecdsa.keys.VerifyingKey.verify` method.

    :param sig_der: encoded signature
    :type sig_der: bytes like object
    :param order: order of the curve over which the signature was computed
    :type order: int

    :raises UnexpectedDER: when the encoding of signature is invalid

    :return: tuple with decoded ``r`` and ``s`` values of signature
    :rtype: tuple of ints
    r   ztrailing junk after DER sig: %sz#trailing junk after DER numbers: %s)r
   r	   Úremove_sequenceÚUnexpectedDERrV   rW   Úremove_integer)Úsig_derr-   r    Úemptyr„   Úrestr…   s          r   Úsigdecode_derr©   ï  s½   € õ2 ˜gÑ&Ô&€GåÔ+¨GÑ4Ô4Ñ€J�Ø�‚|€|ÝÔØ-µÔ0@ÀÑ0GÔ0GÑGñ
ô 
ð 	
õ Ô  Ñ,Ô,�G€A€tÝÔ! $Ñ'Ô'�H€A€uØ�‚|€|ÝÔØ1µHÔ4DÀUÑ4KÔ4KÑKñ
ô 
ð 	
ð ˆaˆ4€Kr   r<   )2rš   Ú
__future__r   r1   r^   rV   ÚsysÚhashlibr   Úsixr   r   r   r   r	   Ú_compatr
   Úoid_ecPublicKeyÚ
encode_oidÚencoded_oid_ecPublicKeyÚoid_ecDHÚ	oid_ecMQVÚversion_infor   r)   r.   r8   r:   rY   r\   rb   rg   rk   rq   r{   r}   rm   r�   rˆ   rŠ   r�   r‘   r“   r•   r—   Ú	Exceptionr™   rž   r¡   r©   rD   r   r   ú<module>r¶      sð  ððð ð  Ð Ð Ð Ð Ð à 	€	€	€	Ø €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $ð +€Ø(˜#œ.¨/Ð:Ð ð €ð €	àÔ�tÒÐðOð Oð Oð OðBð Bð Bð
 Ô�fÒÐðð ð ð ð
#ð #ð #ð(ð (ð (ðð ð ð ð0ð ð ð ð ñ ô ð ð6
ð 
ð 
ðð ð ð"ð "ð "ð& >Dð ð ð ð ð =Cð ð ð ð ðð ð ð&ð ð ðð ð ð-ð -ð -ð-ð -ð -ðð ð ð.ð ð ð*Mð Mð Mð2ð ð ð"*ð *ð *ð4)ð )ð )ð.&ð &ð &ð<
	ð 
	ð 
	ð 
	ð 
	˜ñ 
	ô 
	ð 
	ðð ð ðB+ð +ð +ð\&ð &ð &ð &ð &r   