
    ÿig0                     z    d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	m
Z
mZmZ d Zd Z G d de          Zdd
Zd	S )    )Integer)SHA512SHAKE256)bchris_bytes)EccKey	construct_import_ed25519_public_key_import_ed448_public_keyc                    t          |           dk    rt          |           \  }}d}nGt          |           dk    rt          |           \  }}d}nt          dt          |           z            t	          |||          S )a  Create a new Ed25519 or Ed448 public key object,
    starting from the key encoded as raw ``bytes``,
    in the format described in RFC8032.

    Args:
      encoded (bytes):
        The EdDSA public key to import.
        It must be 32 bytes for Ed25519, and 57 bytes for Ed448.

    Returns:
      :class:`Cryptodome.PublicKey.EccKey` : a new ECC key object.

    Raises:
      ValueError: when the given key cannot be parsed.
        Ed255199   Ed448zNot an EdDSA key (%d bytes))curvepoint_xpoint_y)lenr
   r   
ValueErrorr	   )encodedxy
curve_names       V/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/Signature/eddsa.pyimport_public_keyr   )   s    " 7||r)'221

	W		'001

6WEFFF:q!<<<<    c                     t          |           dk    rd}n%t          |           dk    rd}nt          d          t          | |          S )a  Create a new Ed25519 or Ed448 private key object,
    starting from the key encoded as raw ``bytes``,
    in the format described in RFC8032.

    Args:
      encoded (bytes):
        The EdDSA private key to import.
        It must be 32 bytes for Ed25519, and 57 bytes for Ed448.

    Returns:
      :class:`Cryptodome.PublicKey.EccKey` : a new ECC key object.

    Raises:
      ValueError: when the given key cannot be parsed.
    r   ed25519r   ed448z8Incorrect length. Only EdDSA private keys are supported.)seedr   )r   r   r	   )r   r   s     r   import_private_keyr!   E   sX    " 7||r

	W		

STTT
 '4444r   c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )EdDSASigSchemezpAn EdDSA signature object.
    Do not instantiate directly.
    Use :func:`Cryptodome.Signature.eddsa.new`.
    c                 v    || _         || _        |                                | _        |j        j        | _        dS )zCreate a new EdDSA object.

        Do not instantiate this object directly,
        use `Cryptodome.Signature.DSS.new` instead.
        N)_key_context_export_eddsa_public_A_curveorder_order)selfkeycontexts      r   __init__zEdDSASigScheme.__init__i   s5     	**,,j&r   c                 4    | j                                         S )zRReturn ``True`` if this signature object can be used
        for signing messages.)r%   has_private)r,   s    r   can_signzEdDSASigScheme.can_signu   s     y$$&&&r   c                    | j                                         st          d          | j         j        dk    rBt	          |t
          j                  }|st          |          st          d          | j        }na| j         j        dk    rBt	          |t          j
                  }|st          |          st          d          | j        }nt          d           |||          S )aR  Compute the EdDSA signature of a message.

        Args:
          msg_or_hash (bytes or a hash object):
            The message to sign (``bytes``, in case of *PureEdDSA*) or
            the hash that was carried out over the message (hash object, for *HashEdDSA*).

            The hash object must be :class:`Cryptodome.Hash.SHA512` for Ed25519,
            and :class:`Cryptodome.Hash.SHAKE256` object for Ed448.

        :return: The signature as ``bytes``. It is always 64 bytes for Ed25519, and 114 bytes for Ed448.
        :raise TypeError: if the EdDSA key has no private half
        zPrivate key is needed to signr   -'msg_or_hash' must be bytes of a SHA-512 hashr   .'msg_or_hash' must be bytes of a SHAKE256 hashIncorrect curve for EdDSA)r%   r1   	TypeErrorr   
isinstancer   
SHA512Hashr   _sign_ed25519r   SHAKE256_XOF_sign_ed448r   )r,   msg_or_hashpheddsa_sign_methods       r   signzEdDSASigScheme.sign{   s     y$$&& 	=;<<<9?i''K):;;B Q(;// Q OPPP $ 2Y_''K)>??B R(;// R PQQQ $ 0 8999  b111r   c                    | j         s|rLt          |          }dt          |          z   t          t          | j                             z   | j         z   }nd}|r|                                n|}t          j        || j        j        z   |z                                             }t          j
        |d          | j        z  }t          || j        j        j        z                                            }t          j        ||z   | j        z   |z                                             }	t          j
        |	d          | j        z  }
||
| j        j        z  z   | j        z  }||                    dd          z   S )N    SigEd25519 no Ed25519 collisionsr   littlepointr   )r&   intr   r   digestr   newr%   _prefixr   
from_bytesr+   r   r)   Gr'   r(   dto_bytes)r,   r=   r>   flagdom2PHMr_hashrR_pkk_hashkss               r   r:   zEdDSASigScheme._sign_ed25519   sZ   = 	B 	r77D6dCDM**++,.2m<DD D&(9k  """k
 D49#44s:;;BBDDvx004;>A	 0 22333HHJJD4K$'1C788??AAvx004;>TY[ DK/ajjX....r   c                    t          |          }dt          |          z   t          t          | j                            z   | j        z   }|r|                    d          n|}t          j        || j        j        z   |z                                 d          }t          j
        |d          | j        z  }t          || j        j        j        z                                            }t          j        ||z   | j        z   |z                                 d          }	t          j
        |	d          | j        z  }
||
| j        j        z  z   | j        z  }||                    dd          z   S )N   SigEd448@   r   rC   rD   r   )rF   r   r   r&   readr   rH   r%   rI   r   rJ   r+   r   r)   rK   r'   r(   rL   rM   )r,   r=   r>   rN   dom4rP   rQ   rR   rS   rT   rU   rV   s               r   r<   zEdDSASigScheme._sign_ed448   sH   2wwT$ZZ'C&&''(*.-8 ')9kr"""k
 dTY%66<==BB3GGvx004;>A	 0 22333HHJJdTkDG3c9::??DDvx004;>TY[ DK/ajjX....r   c                    | j         j        dk    rBt          |t          j                  }|st          |          st          d          | j        }na| j         j        dk    rBt          |t          j	                  }|st          |          st          d          | j
        }nt          d           ||||          S )a  Check if an EdDSA signature is authentic.

        Args:
          msg_or_hash (bytes or a hash object):
            The message to verify (``bytes``, in case of *PureEdDSA*) or
            the hash that was carried out over the message (hash object, for *HashEdDSA*).

            The hash object must be :class:`Cryptodome.Hash.SHA512` object for Ed25519,
            and :class:`Cryptodome.Hash.SHAKE256` for Ed448.

          signature (``bytes``):
            The signature that needs to be validated.
            It must be 64 bytes for Ed25519, and 114 bytes for Ed448.

        :raise ValueError: if the signature is not authentic
        r   r4   r   r5   r6   )r%   r   r8   r   r9   r   r7   _verify_ed25519r   r;   _verify_ed448r   )r,   r=   	signaturer>   eddsa_verify_methods        r   verifyzEdDSASigScheme.verify   s    $ 9?i''K):;;B Q(;// Q OPPP"&"6Y_''K)>??B R(;// R PQQQ"&"4 8999"";	2>>>r   c                 F   t          |          dk    rt          d          | j        s|rLt          |          }dt	          |          z   t	          t          | j                            z   | j        z   }nd}|r|                                n|}	 t          |d d                   j        }n# t          $ r t          d          w xY wt          j	        |dd          d          }|| j
        k    rt          d          t          j        ||d d         z   | j        z   |z                                             }	t          j	        |	d          | j
        z  }
|d	z  | j        j        j        z  }d	|z  |
d	z  | j        j        z  z   }||k    rt          d
          d S )NrY   'The signature is not authentic (length)rB   r   r   "The signature is not authentic (R)rC   "The signature is not authentic (S)   The signature is not authentic)r   r   r&   rF   r   rG   r   pointQr   rJ   r+   r   rH   r(   r%   r)   rK   )r,   r=   r`   r>   rN   rO   rP   RrV   rT   rU   point1point2s                r   r^   zEdDSASigScheme._verify_ed25519   s   y>>RFGGG= 	B 	r77D6dCDM**++,.2m<DD D&(9k  """k
	C!)CRC.118AA 	C 	C 	CABBB	Cy~x88t{??ABBBD9SbS>1DG;cABBIIKKvx004;>Q)++ QQ!111V=>>> s   B0 0C
c                 2   t          |          dk    rt          d          t          |          }dt          |          z   t          t          | j                            z   | j        z   }|r|                    d          n|}	 t          |d d                   j        }n# t          $ r t          d          w xY wt          j	        |dd          d          }|| j
        k    rt          d          t          j        ||d d         z   | j        z   |z                                 d          }	t          j	        |	d          | j
        z  }
|d	z  | j        j        j        z  }d	|z  |
d	z  | j        j        z  z   }||k    rt          d
          d S )NrZ   rd   rX   rY   r   re   rC   rf   rg   rh   )r   r   rF   r   r&   r[   r   ri   r   rJ   r+   r   rH   r(   r%   r)   rK   )r,   r=   r`   r>   rN   r\   rP   rj   rV   rT   rU   rk   rl   s                r   r_   zEdDSASigScheme._verify_ed448  s   y>>S  FGGG2wwT$ZZ'C&&''(*.-8 ')9kr"""k
	C!)CRC.118AA 	C 	C 	CABBB	Cy~x88t{??ABBBdYss^3dg=CDDII#NNvx004;>Q)++ QQ!111V=>>> s   B% %B?N)__name__
__module____qualname____doc__r/   r2   r@   r:   r<   rb   r^   r_    r   r   r#   r#   c   s         

' 
' 
'' ' '!2 !2 !2F/ / /6/ / /0!? !? !?F!? !? !?F? ? ? ? ?r   r#   Nc                     t          | t                    r	| j        dvrt          d          |dk    rt          d          |d}n"t	          |          dk    rt          d          t          | |          S )	a  Create a signature object :class:`EdDSASigScheme` that
    can perform or verify an EdDSA signature.

    Args:
        key (:class:`Cryptodome.PublicKey.ECC` object):
            The key to use for computing the signature (*private* keys only)
            or for verifying one.
            The key must be on the curve ``Ed25519`` or ``Ed448``.

        mode (string):
            This parameter must be ``'rfc8032'``.

        context (bytes):
            Up to 255 bytes of `context <https://datatracker.ietf.org/doc/html/rfc8032#page-41>`_,
            which is a constant byte string to segregate different protocols or
            different applications of the same key.
    )r   r   z&EdDSA can only be used with EdDSA keysrfc8032zMode must be 'rfc8032'Nr      z3Context for EdDSA must not be longer than 255 bytes)r8   r   r   r   r   r#   )r-   moder.   s      r   rH   rH   9  s    & c6"" Cci7K&K&KABBBy1222	W		NOOO#w'''r   )N)Cryptodome.Math.Numbersr   Cryptodome.Hashr   r   Cryptodome.Util.py3compatr   r   Cryptodome.PublicKey.ECCr   r	   r
   r   r   r!   objectr#   rH   rr   r   r   <module>r|      s   > , + + + + + , , , , , , , , 4 4 4 4 4 4 4 4< < < < < < < < < < < <= = =85 5 5<S? S? S? S? S?V S? S? S?l( ( ( ( ( (r   