o
    	h4                      @   s   U d dl mZ d dlmZmZ d dlmZ eej	Z
e Zeed< e Zeed< d Zd Ze
r8e Ze Zdedefdd	Zded
edefddZdedefddZdedefddZded
edefddZded
edefddZdS )    )
exceptions)ffilib)ensurecrypto_scalarmult_BYTEScrypto_scalarmult_SCALARBYTESnreturnc                 C   s@   t dt}t|| }t|dkdtjd t |t	dd S )z
    Computes and returns the scalar product of a standard group element and an
    integer ``n``.

    :param n: bytes
    :rtype: bytes
    unsigned char[]r   Unexpected library errorraisingN)
r   newr   r   crypto_scalarmult_baser   excRuntimeErrorbufferr   r   qrc r   a/var/www/html/optinet_system/venv/lib/python3.10/site-packages/nacl/bindings/crypto_scalarmult.pyr   $   s   r   pc                 C   sB   t dt}t|| |}t|dkdtjd t |t	dd S )z
    Computes and returns the scalar product of the given group element and an
    integer ``n``.

    :param p: bytes
    :param n: bytes
    :rtype: bytes
    r
   r   r   r   N)
r   r   r   r   crypto_scalarmultr   r   r   r   r   r   r   r   r   r   r   r   r   4   s   	r   c                 C   x   t tdtjd t t| tot| tkddtj	d t
dt}t|| }t |dkdtjd t
|tdd S )	a  
    Computes and returns the scalar product of a standard group element and an
    integer ``n`` on the edwards25519 curve.

    :param n: a :py:data:`.crypto_scalarmult_ed25519_SCALARBYTES` long bytes
              sequence representing a scalar
    :type n: bytes
    :return: a point on the edwards25519 curve, represented as a
             :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence
    :rtype: bytes
    :raises nacl.exceptions.UnavailableError: If called when using a
        minimal build of libsodium.
    Not available in minimal buildr   &Input must be a {} long bytes sequence%crypto_scalarmult_ed25519_SCALARBYTESr
   r   r   N)r   has_crypto_scalarmult_ed25519r   UnavailableError
isinstancebyteslenr   format	TypeErrorr   r   crypto_scalarmult_ed25519_BYTESr   crypto_scalarmult_ed25519_baser   r   r   r   r   r   r'   E   "   

	r'   c                 C   r   )	a:  
    Computes and returns the scalar product of a standard group element and an
    integer ``n`` on the edwards25519 curve. The integer ``n`` is not clamped.

    :param n: a :py:data:`.crypto_scalarmult_ed25519_SCALARBYTES` long bytes
              sequence representing a scalar
    :type n: bytes
    :return: a point on the edwards25519 curve, represented as a
             :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence
    :rtype: bytes
    :raises nacl.exceptions.UnavailableError: If called when using a
        minimal build of libsodium.
    r   r   r   r   r
   r   r   N)r   r   r   r    r!   r"   r#   r   r$   r%   r   r   r&   r   &crypto_scalarmult_ed25519_base_noclampr   r   r   r   r   r   r)   j   r(   r)   c                 C      t tdtjd t t| tot| tkddtj	d t t|to't|t
kddtj	d tdt
}t|| |}t |dkdtjd t|t
d	d	 S )
aq  
    Computes and returns the scalar product of a *clamped* integer ``n``
    and the given group element on the edwards25519 curve.
    The scalar is clamped, as done in the public key generation case,
    by setting to zero the bits in position [0, 1, 2, 255] and setting
    to one the bit in position 254.

    :param n: a :py:data:`.crypto_scalarmult_ed25519_SCALARBYTES` long bytes
              sequence representing a scalar
    :type n: bytes
    :param p: a :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence
              representing a point on the edwards25519 curve
    :type p: bytes
    :return: a point on the edwards25519 curve, represented as a
             :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence
    :rtype: bytes
    :raises nacl.exceptions.UnavailableError: If called when using a
        minimal build of libsodium.
    r   r   r   r   r&   r
   r   r   N)r   r   r   r    r!   r"   r#   r   r$   r%   r&   r   r   r   crypto_scalarmult_ed25519r   r   r   r   r   r   r+      s0   

	r+   c                 C   r*   )
a  
    Computes and returns the scalar product of an integer ``n``
    and the given group element on the edwards25519 curve. The integer
    ``n`` is not clamped.

    :param n: a :py:data:`.crypto_scalarmult_ed25519_SCALARBYTES` long bytes
              sequence representing a scalar
    :type n: bytes
    :param p: a :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence
              representing a point on the edwards25519 curve
    :type p: bytes
    :return: a point on the edwards25519 curve, represented as a
             :py:data:`.crypto_scalarmult_ed25519_BYTES` long bytes sequence
    :rtype: bytes
    :raises nacl.exceptions.UnavailableError: If called when using a
        minimal build of libsodium.
    r   r   r   r   r&   r
   r   r   N)r   r   r   r    r!   r"   r#   r   r$   r%   r&   r   r   r   !crypto_scalarmult_ed25519_noclampr   r   r   r   r   r   r,      s0   

	r,   N)naclr   r   nacl._sodiumr   r   nacl.exceptionsr   bool$PYNACL_HAS_CRYPTO_SCALARMULT_ED25519r   crypto_scalarmult_bytesr   int__annotations__crypto_scalarmult_scalarbytesr   r&   r   crypto_scalarmult_ed25519_bytes%crypto_scalarmult_ed25519_scalarbytesr"   r   r   r'   r)   r+   r,   r   r   r   r   <module>   s$   
%%3