§
    &xÅj�!  ã                   ó¾   — d dl mZ d dlZd dlmZ d dlmZ d dlmZ	m
Z d dlmZmZ  G d„ de¦  «        Z G d	„ d
ej        e¦  «        Z G d„ dej        e¦  «        ZdS )é    )ÚOptionalN)Úencoding)Ú
exceptions)Ú
PrivateKeyÚ	PublicKey)ÚStringFixerÚrandomc            	       óˆ   — e Zd ZU dZeed<   eed<   ededededd fd„¦   «         Zedefd	„¦   «         Z	edefd
„¦   «         Z
dS )ÚSignedMessagezb
    A bytes subclass that holds a message that has been signed by a
    :class:`SigningKey`.
    Ú
_signatureÚ_messageÚ	signatureÚmessageÚcombinedÚreturnc                 ó8   —  | |¦  «        }||_         ||_        |S ©N)r   r   )Úclsr   r   r   Úobjs        ú=C:\Projects\Historical\venv\Lib\site-packages\nacl/signing.pyÚ_from_partszSignedMessage._from_parts#   s$   € ð ˆc�(‰mŒmˆØ"ˆŒØˆŒØˆ
ó    c                 ó   — | j         S )zL
        The signature contained within the :class:`SignedMessage`.
        )r   ©Úselfs    r   r   zSignedMessage.signature,   s   € ð
 ŒÐr   c                 ó   — | j         S )zJ
        The message contained within the :class:`SignedMessage`.
        )r   r   s    r   r   zSignedMessage.message3   s   € ð
 Œ}Ðr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚbytesÚ__annotations__Úclassmethodr   Úpropertyr   r   © r   r   r   r      sÃ   € € € € € € ðð ð
 ÐÐÑØ€O€O�OàðØðØ(-ðØ9>ðà	ðð ð ñ „[ðð ð˜5ð ð ð ñ „Xðð ð˜ð ð ð ñ „Xðð ð r   r   c            	       ó¼   — e Zd ZdZej        fdedej        fd„Zdefd„Z	de
fd„Zdedefd	„Zdedefd
„Zdej        fdedee         dej        defd„Zdefd„ZdS )Ú	VerifyKeyzà
    The public key counterpart to an Ed25519 SigningKey for producing digital
    signatures.

    :param key: [:class:`bytes`] Serialized Ed25519 public key
    :param encoder: A class that is able to decode the `key`
    ÚkeyÚencoderc                 ó   — |                      |¦  «        }t          |t          ¦  «        st          j        d¦  «        ‚t          |¦  «        t          j        j        k    r&t          j	        dt          j        j        z  ¦  «        ‚|| _
        d S )Nz'VerifyKey must be created from 32 bytesz%The key must be exactly %s bytes long)ÚdecodeÚ
isinstancer!   ÚexcÚ	TypeErrorÚlenÚnaclÚbindingsÚcrypto_sign_PUBLICKEYBYTESÚ
ValueErrorÚ_key)r   r(   r)   s      r   Ú__init__zVerifyKey.__init__D   s€   € ð �nŠn˜SÑ!Ô!ˆÝ˜#�uÑ%Ô%ð 	KÝ”-Ð IÑJÔJÐJåˆs‰8Œ8•t”}Ô?Ò?Ð?Ý”.Ø7Ý”-Ô:ñ;ñô ð ð
 ˆŒ	ˆ	ˆ	r   r   c                 ó   — | j         S r   )r4   r   s    r   Ú	__bytes__zVerifyKey.__bytes__T   s
   € ØŒyÐr   c                 ó:   — t          t          | ¦  «        ¦  «        S r   ©Úhashr!   r   s    r   Ú__hash__zVerifyKey.__hash__W   ó   € Ý•E˜$‘K”KÑ Ô Ð r   Úotherc                 ó¤   — t          || j        ¦  «        sdS t          j                             t          | ¦  «        t          |¦  «        ¦  «        S ©NF©r,   Ú	__class__r0   r1   Úsodium_memcmpr!   ©r   r=   s     r   Ú__eq__zVerifyKey.__eq__Z   ó?   € Ý˜% ¤Ñ0Ô0ð 	Ø�5ÝŒ}×*Ò*­5°©;¬;½¸e¹¼ÑEÔEÐEr   c                 ó   — | |k     S r   r%   rC   s     r   Ú__ne__zVerifyKey.__ne___   ó   € Ø˜E’MÐ"Ð"r   NÚsmessager   c                 ó²  — |�œt          |t          ¦  «        s&t          j        dt          j        j        z  ¦  «        ‚t          |¦  «        t          j        j        k    r&t          j        dt          j        j        z  ¦  «        ‚|| 	                    |¦  «        z   }n| 	                    |¦  «        }t          j         
                    || j        ¦  «        S )aV  
        Verifies the signature of a signed message, returning the message
        if it has not been tampered with else raising
        :class:`~nacl.exceptions.BadSignatureError`.

        :param smessage: [:class:`bytes`] Either the original messaged or a
            signature and message concated together.
        :param signature: [:class:`bytes`] If an unsigned message is given for
            smessage then the detached signature must be provided.
        :param encoder: A class that is able to decode the secret message and
            signature.
        :rtype: :class:`bytes`
        Nz4Verification signature must be created from %d bytesz+The signature must be exactly %d bytes long)r,   r!   r-   r.   r0   r1   Úcrypto_sign_BYTESr/   r3   r+   Úcrypto_sign_openr4   )r   rI   r   r)   s       r   ÚverifyzVerifyKey.verifyb   sÅ   € ð& Ð õ ˜i­Ñ/Ô/ð Ý”mØJÝ”mÔ5ñ6ñô ð õ
 �9‰~Œ~¥¤Ô!@Ò@Ð@Ý”nØAÝ”mÔ5ñ6ñô ð ð
 ! 7§>¢>°(Ñ#;Ô#;Ñ;ˆHˆHð —~’~ hÑ/Ô/ˆHåŒ}×-Ò-¨h¸¼	ÑBÔBÐBr   c                 óh   — t           j                             | j        ¦  «        }t	          |¦  «        S )z›
        Converts a :class:`~nacl.signing.VerifyKey` to a
        :class:`~nacl.public.PublicKey`

        :rtype: :class:`~nacl.public.PublicKey`
        )r0   r1   Ú$crypto_sign_ed25519_pk_to_curve25519r4   Ú_Curve25519_PublicKey)r   Úraw_pks     r   Úto_curve25519_public_keyz"VerifyKey.to_curve25519_public_key‹   s)   € õ ”×CÒCÀDÄIÑNÔNˆÝ$ VÑ,Ô,Ð,r   )r   r   r   r    r   Ú
RawEncoderr!   ÚEncoderr5   r7   Úintr;   ÚobjectÚboolrD   rG   r   rM   rP   rR   r%   r   r   r'   r'   ;   sI  € € € € € ðð ð 7?Ô6Iðð ØðØ#+Ô#3ðð ð ð ð ˜5ð ð ð ð ð!˜#ð !ð !ð !ð !ðF˜Fð F tð Fð Fð Fð Fð
#˜Fð # tð #ð #ð #ð #ð &*Ø$,Ô$7ð	'Cð 'Càð'Cð ˜E”?ð'Cð Ô!ð	'Cð
 
ð'Cð 'Cð 'Cð 'CðR-Ð*?ð -ð -ð -ð -ð -ð -r   r'   c                   óÂ   — e Zd ZdZej        fdedej        fd„Zdefd„Z	de
fd„Zdedefd	„Zdedefd
„Zedd„¦   «         Zej        fdedej        defd„Zdefd„ZdS )Ú
SigningKeyaÙ  
    Private key for producing digital signatures using the Ed25519 algorithm.

    Signing keys are produced from a 32-byte (256-bit) random seed value. This
    value can be passed into the :class:`~nacl.signing.SigningKey` as a
    :func:`bytes` whose length is 32.

    .. warning:: This **must** be protected and remain secret. Anyone who knows
        the value of your :class:`~nacl.signing.SigningKey` or it's seed can
        masquerade as you.

    :param seed: [:class:`bytes`] Random 32-byte value (i.e. private key)
    :param encoder: A class that is able to decode the seed

    :ivar: verify_key: [:class:`~nacl.signing.VerifyKey`] The verify
        (i.e. public) key that corresponds with this signing key.
    Úseedr)   c                 óš  — |                      |¦  «        }t          |t          ¦  «        st          j        d¦  «        ‚t          |¦  «        t          j        j        k    r&t          j	        dt          j        j        z  ¦  «        ‚t          j         
                    |¦  «        \  }}|| _        || _        t          |¦  «        | _        d S )Nz.SigningKey must be created from a 32 byte seedz&The seed must be exactly %d bytes long)r+   r,   r!   r-   r.   r/   r0   r1   Úcrypto_sign_SEEDBYTESr3   Úcrypto_sign_seed_keypairÚ_seedÚ_signing_keyr'   Ú
verify_key)r   rZ   r)   Ú
public_keyÚ
secret_keys        r   r5   zSigningKey.__init__©   s¸   € ð �~Š~˜dÑ#Ô#ˆÝ˜$¥Ñ&Ô&ð 	Ý”-Ø@ñô ð õ
 ˆt‰9Œ9�œÔ;Ò;Ð;Ý”.Ø8Ý”-Ô5ñ6ñô ð õ
 "&¤×!GÒ!GÈÑ!MÔ!MÑˆ
�JàˆŒ
Ø&ˆÔÝ# JÑ/Ô/ˆŒˆˆr   r   c                 ó   — | j         S r   )r^   r   s    r   r7   zSigningKey.__bytes__Â   s
   € ØŒzÐr   c                 ó:   — t          t          | ¦  «        ¦  «        S r   r9   r   s    r   r;   zSigningKey.__hash__Å   r<   r   r=   c                 ó¤   — t          || j        ¦  «        sdS t          j                             t          | ¦  «        t          |¦  «        ¦  «        S r?   r@   rC   s     r   rD   zSigningKey.__eq__È   rE   r   c                 ó   — | |k     S r   r%   rC   s     r   rG   zSigningKey.__ne__Í   rH   r   c                 óh   —  | t          t          j        j        ¦  «        t          j        ¬¦  «        S )z�
        Generates a random :class:`~nacl.signing.SigningKey` object.

        :rtype: :class:`~nacl.signing.SigningKey`
        )r)   )r	   r0   r1   r\   r   rS   )r   s    r   ÚgeneratezSigningKey.generateÐ   s3   € ð ˆsÝ•4”=Ô6Ñ7Ô7ÝÔ'ð
ñ 
ô 
ð 	
r   r   c                 óD  — t           j                             || j        ¦  «        }t           j        j        }|                     |d|…         ¦  «        }|                     ||d…         ¦  «        }|                     |¦  «        }t                               |||¦  «        S )zñ
        Sign a message using this key.

        :param message: [:class:`bytes`] The data to be signed.
        :param encoder: A class that is used to encode the signed message.
        :rtype: :class:`~nacl.signing.SignedMessage`
        N)r0   r1   Úcrypto_signr_   rK   Úencoder   r   )r   r   r)   Ú
raw_signedrK   r   Úsigneds          r   ÚsignzSigningKey.signÜ   sŒ   € õ ”]×.Ò.¨w¸Ô8IÑJÔJˆ
å œMÔ;ÐØ—N’N :Ð.@Ð/@Ð.@Ô#AÑBÔBˆ	Ø—.’. Ð,=Ð,>Ð,>Ô!?Ñ@Ô@ˆØ—’ 
Ñ+Ô+ˆå×(Ò(¨°G¸VÑDÔDÐDr   c                 ól   — | j         }t          j                             |¦  «        }t	          |¦  «        S )zž
        Converts a :class:`~nacl.signing.SigningKey` to a
        :class:`~nacl.public.PrivateKey`

        :rtype: :class:`~nacl.public.PrivateKey`
        )r_   r0   r1   Ú$crypto_sign_ed25519_sk_to_curve25519Ú_Curve25519_PrivateKey)r   ÚskÚraw_privates      r   Úto_curve25519_private_keyz$SigningKey.to_curve25519_private_keyñ   s/   € ð ÔˆÝ”m×HÒHÈÑLÔLˆÝ% kÑ2Ô2Ð2r   N)r   rY   )r   r   r   r    r   rS   r!   rT   r5   r7   rU   r;   rV   rW   rD   rG   r#   rh   r   rn   rq   rt   r%   r   r   rY   rY   –   sX  € € € € € ðð ð* %-Ô$7ð0ð 0àð0ð Ô!ð0ð 0ð 0ð 0ð2˜5ð ð ð ð ð!˜#ð !ð !ð !ð !ðF˜Fð F tð Fð Fð Fð Fð
#˜Fð # tð #ð #ð #ð #ð ð	
ð 	
ð 	
ñ „[ð	
ð %-Ô$7ðEð EàðEð Ô!ðEð 
ð	Eð Eð Eð Eð*	3Ð+Að 	3ð 	3ð 	3ð 	3ð 	3ð 	3r   rY   )Útypingr   Únacl.bindingsr0   r   r   r-   Únacl.publicr   rq   r   rP   Ú
nacl.utilsr   r	   r!   r   Ú	Encodabler'   rY   r%   r   r   ú<module>rz      s1  ðð Ð Ð Ð Ð Ð à Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð �Eñ ô ð ðBX-ð X-ð X-ð X-ð X-�Ô" Kñ X-ô X-ð X-ðvd3ð d3ð d3ð d3ð d3�Ô# [ñ d3ô d3ð d3ð d3ð d3r   