ó
    ð›‘hÈ  ã                   ó˜   • S SK r S SKJr  S SKrS SKrSS\S\S\\   S\4S jjrSS\S	\S\\   S\4S
 jjrSS\S\S	\S\\   S\4
S jjr	g)é    N)ÚOptionalÚemailÚpasswordÚsaltÚreturnc                 óp  • U(       dH  [         R                  " 5       nUR                  U R                  S5      5        UR	                  5       SS n[        U5      S:X  d   e[        R                  R                  UR                  S5      USSSS[        R                  R                  R                  SS	9nU$ )
a  
Compute argon2id based secret from user email and password only. This uses Argon2id
for stretching a potentially weak user password/PIN and subsequent HKDF based key
extending to derive private key material (PKM) for different usage contexts.

The Argon2 parameters used are the following:

* kdf ``argon2id-13``
* time cost ``4096``
* memory cost ``512``
* parallelism ``1``

See `draft-irtf-cfrg-argon2 <https://datatracker.ietf.org/doc/draft-irtf-cfrg-argon2/>`__ and
`argon2-cffi <https://argon2-cffi.readthedocs.io/en/stable/>`__.

:param email: User email.
:param password: User password.
:param salt: Optional salt to use (must be 16 bytes long). If none is given, compute salt
    from email as ``salt = SHA256(email)[:16]``.
:return: The computed private key material (256b, 32 octets).
Úutf8Né   i   i   é   é    é   )Úsecretr   Ú	time_costÚmemory_costÚparallelismÚhash_lenÚtypeÚversion)ÚhashlibÚsha256ÚupdateÚencodeÚdigestÚlenÚargon2Ú	low_levelÚhash_secret_rawÚTypeÚID)r   r   r   ÚmÚpkms        ÚXC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\autobahn/xbr/_wallet.pyÚstretch_argon2_secretr#   !   sž   € ö, Ü�NŠNÓˆØ	�‰�—‘˜fÓ%Ô&Ø�x‰x‹z˜#˜2ˆˆÜˆt‹9˜‹?Ðˆ?ä
×
Ñ
×
*Ñ
*Ø�‰˜vÓ&ØØØØØÜ×Ñ×"Ñ"×%Ñ%Øð +ð 	€Cð €Jó    r!   Úcontextc                 ól   • [         R                  " X [        R                  S9nUR	                  USS9nU$ )zÚ

Expand ``pkm`` and ``context`` into a key of length ``bytes`` using
HKDF's expand function based on HMAC SHA-512). See the HKDF draft RFC and paper for usage notes.

:param pkm:
:param context:
:param salt:
:return:
)r   Úinput_key_materialÚhashr   )ÚinfoÚlength)ÚhkdfÚHkdfr   Úsha512Úexpand)r!   r%   r   ÚkdfÚkeys        r"   Úexpand_argon2_secretr1   K   s/   € ô �)Š)˜¼G¿N¹NÑ
K€CØ
�*‰*˜'¨"ˆ*Ð
-€CØ€Jr$   c                 ó  • U(       dH  [         R                  " 5       nUR                  U R                  S5      5        UR	                  5       SS n[        U5      S:X  d   eUR                  S5      n[        XUS9n[        XRUS9nU$ )zG

:param email:
:param password:
:param context:
:param salt:
:return:
r	   Nr
   )r   r   r   )r!   r%   r   )r   r   r   r   r   r   r#   r1   )r   r   r%   r   r    r!   r0   s          r"   Úpkm_from_argon2_secretr3   [   st   € ö Ü�NŠNÓˆØ	�‰�—‘˜fÓ%Ô&Ø�x‰x‹z˜#˜2ˆˆÜˆt‹9˜‹?Ðˆ?à�n‰n˜VÓ$€Gä
 eÀTÑ
J€CÜ
 3¸dÑ
C€Cà€Jr$   )N)
r   Útypingr   r   r+   ÚstrÚbytesr#   r1   r3   © r$   r"   Ú<module>r8      sŽ   ðó6 Ý Û Û ñ' ð '°ð '¸8ÀE¹?ð 'ÐV[õ 'ñT˜eð ¨eð ¸8ÀE¹?ð ÐV[õ ñ  #ð °ð ¸sð È(ÐSXÉ/ð Ðejö r$   