/ src / __pycache__ / identity_manager.cpython-312.pyc
identity_manager.cpython-312.pyc
 1 2  ��ia����ddlZddlZddlZddlZddlZddlmZmZm	Z	ddl
 3  mZmZddl
mZddlmZddlmZmZddlmZGd�d	�ZGd
 4  �d�ZGd�d
�Zd�Zedk(re�yy)�N)�Dict�Any�Tuple)�hash_secret_raw�Type)�HKDF)�hashes)�ed25519�x25519)�
serializationc�F�eZdZdZgZedefd��Zeddede	fd��Z
 5  y)�
PhraseManagerzJhttps://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/english.txt�returnc���|j�s�	tjjtjj	t
 6  �d�}tjj
|�rSt|d�5}|j�j�jd�|_ddd�|jStjj|j�}|j�jd�j�jd�}t!|�dk(rR||_t|d�5}|j#dj|j��ddd�|jS	|jS|jS#1swY|jSxYw#1swY|jSxYw#t$$r}t'd|����d}~wwxYw)Nzbip39_english.txt�r�
 7  �utf-8i�wzFailed to load wordlist: )�	_wordlist�os�path�join�dirname�__file__�exists�open�read�strip�split�urllib�request�urlopen�WORDLIST_URL�decode�len�write�	Exception�RuntimeError)�cls�
 8  cache_path�f�req�words�es      �A/Volumes/sil/Brainiac/projects/ENVOY/xray/src/identity_manager.py�get_wordlistzPhraseManager.get_wordlistsp���}�}�
D��W�W�\�\�"�'�'�/�/�(�*C�EX�Y�
 9  ��7�7�>�>�*�-��j�#�.�!�()������(8�(>�(>�t�(D��
�/��}�}��!�.�.�0�0��1A�1A�B�C��H�H�J�-�-�g�6�<�<�>�D�D�T�J�E��5�z�T�)�(-��
�!�*�c�2�a��G�G�D�I�I�c�m�m�$<�=�3��}�}��
*��}�}��s�}�}��/��}�}���	3��}�}����
D�"�%>�q�c�#B�C�C��
D�s[�A,G�;3F �.G�BG�+F7�3G� F4�%G�4G�7G�<G�G�	G*�G%�%G*�lengthc�j��|j��dj�fd�t|�D��S)z@Generates a random 12-word phrase from the 2048-word dictionary.� c3�H�K�|]}tj�����y�w�N)�secrets�choice)�.0�_r-s  �r/�	<genexpr>z0PhraseManager.generate_phrase.<locals>.<genexpr>+s�����E�}�!����u�-�}�s�")r0r�range)r)r1r-s  @r/�generate_phrasezPhraseManager.generate_phrase's,���� � �"���x�x�E�u�V�}�E�E�E�N)�)�__name__�
10  __module__�__qualname__r#r�classmethod�listr0�int�strr<�r=r/rrsK��_�L��I���T����(�F�S�F�#�F��Fr=rc�,�eZdZeddededefd��Zy)�SeedDeriver�phrase�saltrc	��t|jd�|jd�ddddtj��}|S)zx
11          Derives the root_seed using Argon2id.
12          Parameters: memory: 256MB, iterations: 3, parallelism: 4
13          r�i�� )�secretrJ�	time_cost�memory_cost�parallelism�hash_len�type)r�encoder�ID)rIrJ�	root_seeds   r/�derive_root_seedzSeedDeriver.derive_root_seed/sA��$��=�=��)����W�%��"������
14  �	��r=N)�
envoy_v4_salt)r?r@rA�staticmethodrE�bytesrXrFr=r/rHrH.s)������C��e���r=rHc���eZdZdefd�Zdedefd�Zdejfd�Z	defd�Z
15  dejfd�Zdeejeffd	�Z
dejfd
16  �Zdefd�Zy)
�EnvoyIdentityTreerWc��||_yr5)rW)�selfrWs  r/�__init__zEnvoyIdentityTree.__init__Cs	��"��r=�inforc��ttj�dd|jd���}|j	|j
17  �S)z+Derives a 32-byte subkey using HKDF-SHA256.rNNr)�	algorithmr1rJra)rr	�SHA256rU�deriverW)r_ra�hkdfs   r/�_derive_subkeyz EnvoyIdentityTree._derive_subkeyFs<����m�m�o������W�%�	
18  ���{�{�4�>�>�*�*r=c�b�|jd�}tjj|�S)z*Derives the core ENVOY identity (Ed25519).zenvoy/identity�rgr
19  �Ed25519PrivateKey�from_private_bytes�r_�raw_keys  r/�get_envoy_identityz$EnvoyIdentityTree.get_envoy_identityPs*���%�%�&6�7���(�(�;�;�G�D�Dr=c�
20  �|j�}|j�jtjj
21  tjj
22  ��}tj|�j�S)z3Step 4: user_id = SHA256(envoy_identity_public_key)��encoding�format)
23  rn�
24  public_key�public_bytesr�Encoding�Raw�PublicFormat�hashlib�sha256�	hexdigest)r_�priv�	pub_bytess   r/�get_user_idzEnvoyIdentityTree.get_user_idUsd���&�&�(���O�O�%�2�2�"�+�+�/�/� �-�-�1�1�3�
25  �	��~�~�i�(�2�2�4�4r=c�b�|jd�}tjj|�S)z*Step 5: Radicle integration key (Ed25519).z
envoy/radiclerirls  r/�get_radicle_keyz!EnvoyIdentityTree.get_radicle_key^s)���%�%�o�6���(�(�;�;�G�D�Dr=c�b�|jd�}tjj|�}|j	�jtjjtjj��}tj|�j�dd}d|��}||fS)z)Step 6: IRC identity and nick generation.z	envoy/ircrpN�
26  �envoy_)
rgr
27  rjrkrsrtrrurvrwrxryrz)r_rmr{r|�nick_suffix�nicks      r/�get_irc_identityz"EnvoyIdentityTree.get_irc_identitycs����%�%�k�2���(�(�;�;�G�D���O�O�%�2�2�"�+�+�/�/� �-�-�1�1�3�
28  �	��n�n�Y�/�9�9�;�C�R�@����}�%���T�z�r=c�b�|jd�}tjj|�S)z$Step 7: Age encryption key (X25519).�envoy/encryption)rgr�X25519PrivateKeyrkrls  r/�get_age_keyzEnvoyIdentityTree.get_age_keyos*���%�%�&8�9���&�&�9�9�'�B�Br=c�l�	ddl}|jd�}|j�S#t$rYywxYw)zHExports the age key in standard AGE-SECRET-KEY-1... format using bech32.rNr��)�base58rg�hex�ImportError)r_r�rms   r/�export_age_identityz%EnvoyIdentityTree.export_age_identityts;��	���)�)�*<�=�G��;�;�=� ���	��	�s�$'�	3�3N)r?r@rAr[r`rErgr
29  rjrnr}rrr�rr�r�r�rFr=r/r]r]Bs���#�%�#�+�3�+�5�+�E�G�$=�$=�E�
30  5�S�5�E��!:�!:�E�
31  
32  �%��(A�(A�3�(F�"G�
33  �C�V�4�4�C�
34  
�S�
r=r]c��td�tj�}td|���td�tj	|�}td|j����td�t
|�}|j�}td|���|j�\}}td|���|j�}td|���y)	Nz"--- Phase 1: Generating Phrase ---zPhrase: z/
35  --- Phase 2: Deriving Root Seed (Argon2id) ---zRoot Seed (hex): z%
36  --- Phase 3-7: Deriving Key Tree ---z	User ID: z
37  IRC Nick: zAge Encryption Raw Key (hex): )
38  �printrr<rHrXr�r]r}r�r�)rIrW�tree�user_id�irc_priv�irc_nick�age_raws       r/�demo_identity_generationr��s���	�
39  .�/�
�
*�
*�
,�F�	�H�V�H�
40  ��	�
41  <�=��,�,�V�4�I�	��i�m�m�o�.�
42  /�0�	�
43  2�3��Y�'�D���� �G�	�I�g�Y�
44  � ��.�.�0��H�h�	�J�x�j�
45  !�"��&�&�(�G�	�*�7�)�
46  4�5r=�__main__)rrx�json�urllib.requestr r6�typingrrr�argon2.low_levelrr�'cryptography.hazmat.primitives.kdf.hkdfr�cryptography.hazmat.primitivesr	�)cryptography.hazmat.primitives.asymmetricr
47  rrrrHr]r�r?rFr=r/�<module>r�se��	�����#�#�2�8�1�E�8�F�F�@��(?�?�B6�2�z����r=