
    ,h0                     r    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y	)    )Integer)SHA512SHAKE256)bchris_bytes)EccKey	construct_import_ed25519_public_key_import_ed448_public_keyc                     t        |       dk(  rt        |       \  }}d}n6t        |       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:`Crypto.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       X/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/Signature/eddsa.pyimport_public_keyr   )   sf    " 7|r)'21
	W	'01
6WEFF:q!<<    c                 v    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:`Crypto.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   sA    " 7|r
	W	
STT
 '44r   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)EdDSASigSchemezlAn EdDSA signature object.
    Do not instantiate directly.
    Use :func:`Crypto.Signature.eddsa.new`.
    c                     || _         || _        |j                         | _        |j                  j
                  | _        y)zCreate a new EdDSA object.

        Do not instantiate this object directly,
        use `Crypto.Signature.DSS.new` instead.
        N)_key_context_export_eddsa_public_A_curveorder_order)selfkeycontexts      r   __init__zEdDSASigScheme.__init__i   s3     	**,jj&&r   c                 6    | j                   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     yy$$&&r   c                    | j                   j                         st        d      | j                   j                  dk(  r?t	        |t
        j                        }|st        |      st        d      | j                  }nc| j                   j                  dk(  r?t	        |t        j                        }|st        |      st        d      | j                  }nt        d       |||      S )aJ  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:`Crypto.Hash.SHA512` for Ed25519,
            and :class:`Crypto.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     yy$$&;<<99??i'K):):;B(;/ OPP $ 2 2YY__'K)>)>?B(;/ PQQ $ 0 0 899 b11r   c                 :   | j                   s|rFt        |      }dt        |      z   t        t        | j                               z   | j                   z   }nd}|r|j	                         n|}t        j                  || j                  j                  z   |z         j	                         }t        j                  |d      | j                  z  }t        || j                  j                  j                  z        j                         }t        j                  ||z   | j                   z   |z         j	                         }	t        j                  |	d      | j                  z  }
||
| j                  j"                  z  z   | j                  z  }||j%                  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   sF   ==Br7D6dCDMM*+,.2mm<D D&(k  "k
 D499#4#44s:;BBDvx04;;>A		 0 0 2 223HHJD4K$''1C78??Avx04;;>TYY[[ DKK/ajjX...r   c                    t        |      }dt        |      z   t        t        | j                              z   | j                  z   }|r|j	                  d      n|}t        j                  || j                  j                  z   |z         j	                  d      }t        j                  |d      | j                  z  }t        || j                  j                  j                  z        j                         }t        j                  ||z   | j                   z   |z         j	                  d      }	t        j                  |	d      | j                  z  }
||
| j                  j"                  z  z   | j                  z  }||j%                  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   s>   2wT$Z'C&'(*.--8 ')kr"k
 dTYY%6%66<=BB3Gvx04;;>A		 0 0 2 223HHJdTkDGG3c9:??Dvx04;;>TYY[[ DKK/ajjX...r   c                    | j                   j                  dk(  r?t        |t        j                        }|st        |      st        d      | j                  }nc| j                   j                  dk(  r?t        |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:`Crypto.Hash.SHA512` object for Ed25519,
            and :class:`Crypto.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    $ 99??i'K):):;B(;/ OPP"&"6"6YY__'K)>)>?B(;/ PQQ"&"4"4 899";	2>>r   c                 :   t        |      dk7  rt        d      | j                  s|rFt        |      }dt	        |      z   t	        t        | j                              z   | j                  z   }nd}|r|j                         n|}	 t        |d d       j                  }t        j                  |dd  d      }|| j                  kD  rt        d      t        j                  ||d d z   | j                  z   |z         j                         }	t        j                  |	d      | j                  z  }
|d	z  | j                  j                  j                   z  }d	|z  |
d	z  | j                  j                  z  z   }||k7  rt        d
      y # t        $ r t        d      w xY w)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==Br7D6dCDMM*+,.2mm<D D&(k  "k
	C!)CR.188A y~x8t{{?ABBD9Sb>1DGG;cABIIKvx04;;>Q))+++ QQ!1!111V=>>   	CABB	Cs   F Fc                    t        |      dk7  rt        d      t        |      }dt        |      z   t        t        | j                              z   | j                  z   }|r|j                  d      n|}	 t        |d d       j                  }t        j                  |dd  d      }|| j                  kD  rt        d      t        j                  ||d d z   | j                  z   |z         j                  d      }	t        j                  |	d      | j                  z  }
|d	z  | j                  j                  j                   z  }d	|z  |
d	z  | j                  j                  z  z   }||k7  rt        d
      y # t        $ r t        d      w xY w)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2wT$Z'C&'(*.--8 ')kr"k
	C!)CR.188A y~x8t{{?ABBdYs^3dgg=CDII#Nvx04;;>Q))+++ QQ!1!111V=>>   	CABB	Cs   5E6 6FN)__name__
__module____qualname____doc__r/   r2   r@   r:   r<   rb   r^   r_    r   r   r#   r#   c   s2    

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

    Args:
        key (:class:`Crypto.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'r      z3Context for EdDSA must not be longer than 255 bytes)r8   r   r   r   r   r#   )r-   moder.   s      r   rH   rH   9  si    & c6"cii7K&KABBy122	W	NOO#w''r   )N)Crypto.Math.Numbersr   Crypto.Hashr   r   Crypto.Util.py3compatr   r   Crypto.PublicKey.ECCr   r	   r
   r   r   r!   objectr#   rH   rr   r   r   <module>r|      s8   > ( ( 0< <=85<S?V S?l(r   