
    <[j9              
       @   d dl Z d dlZd dlZd dlZdadaddZddZd ZdZ	dZ
dZd	Zd ZdZdZdZd	Zee j        e	e j        e
e j        ee j        ee j        iZd
Zd Zd Zd Zd Zd ZddZd Zd Z d Z!eeddd	dfdZ"d Z#d Z$ G d d          Z% G d d          Z&dS )    NFTc                 
    | a d S N)_rfc5054_compatenables    R/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/srp/_pysrp.pyrfc5054_enabler	      s    OOO    c                 
    | a d S r   )_no_username_in_xr   s    r   no_username_in_xr      s    r
               ))   EEAF0AB9ADB38DD69C33F80AFA8FC5E86072618775FF3C0B9EA2314C9C256576D674DF7496EA81D3383B4813D692C6E0E0D5D8E250B98BE48E495C1D6089DAD15DC7D7B46154D6B6CE8EF4AD69B15D4982559B297BCF1885C529F566660E57EC68EDBC3C05726CC02FD4CBF4976EAA9AFD5138FE8376435B9FC61D2FC0EB06E32)   AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73r   )   FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF5)   FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C93402849236C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AACC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E438777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F5683423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD922222E04A4037C0713EB57A81A23F0C73473FC646CEA306B4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A364597E899A0255DC164F31CC50846851DF9AB48195DED7EA1B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F924009438B481C6CD7889A002ED5EE382BC9190DA6FC026E479558E4475677E9AA9E3050E2765694DFC81F56E880B96E7160C980DD98EDD3DFFFFFFFFFFFFFFFFF0x13c                 x    | t           k     rt          |          \  }}t          |d          t          |d          fS N   )	NG_CUSTOM	_ng_constint)ng_typen_hexg_hexs      r   get_ngr"      s6     '+uuR==#eB--''r
   c                 H    d}t          j        |           D ]
}|dz  |z  }|S )Nr      )six	iterbytes)snbs      r   bytes_to_longr*      s4    	A]1  !VqLHr
   c                 "   t                      }d}d}|| k    r=| |z	  dz  }|                    t          |                     |||z  z  }|dz  }|| k    =|                                 t	          j        d                    |                    S )Nr      r$    )listappendchrreverser%   r)   join)r(   lxoffr)   s        r   long_to_bytesr6      s    A	A
C
q&&#X	#a&&cNq	 q&&
 IIKKK5r
   c                 D    t          t          j        |                     S r   )r*   osurandom)nbytess    r   
get_randomr;      s    "*f..000r
   c                 <    | dz  dz
  }t          |           d|z  z  S )Nr$   r   )r;   )r:   offsets     r   get_random_of_lengthr>      s&    Qh!^Fv1;//r
   r-   c                 f   t          |t          j                  rt          |          }|r)t          |t          j                  rt          |          }|r)t          |t          j                  rt          |          }||z   |z   }t	           | |                                          d          S r   )
isinstancer%   integer_typesr6   long	hexdigest)
hash_classs1s2s3r'   s        r   old_HrH      s    "c'(( 2	 jS.// 2	 jS.// 2
R"A

1''))2...r
   c           	      n   |                     dd           } |             }|D ]}|{t          |t          j                  rt	          |          n|}|9t
          r2|                    t          |t          |          z
                       |                    |           |	                                S )Nwidth)
getr@   r%   rA   r6   r   updatebyteslendigest)rD   argskwargsrJ   hr'   datas          r   HrT      s    JJw%%E
A  ='1!S5F'G'GN=###QD _ %D		 122333HHd88::r
   c                    t          |          }t          |          }t          rt          |          t          |          z
  nd} | |                                           | d                    d|z  |g                                                    t          j        d                    fdt          dt                              D                                 S )Nr   r
       r-   c              3      K   | ]<}t          t          j        |          t          j        |          z            V  =d S r   )r0   r%   
indexbytes).0ihNhgs     r   	<genexpr>zHNxorg.<locals>.<genexpr>   sI      kkTU3r1 5 5r18M8M MOOkkkkkkr
   )r6   r   rN   rO   r2   r%   r)   range)rD   Ngbin_Nbin_gpaddingr[   r\   s         @@r   HNxorgrd      s    !E!E)8?c%jj3u::%%aG	U			#	#	%	%B	SXXgu577	9	9	@	@	B	BB5"''kkkkkY^_`adegahahYiYikkkkkmmmr
   c                 X   t          |d          r|                                n|}t          |d          r|                                n|}t          rt          j        d          }t          t          | |t          | |t          j        d          z   |z                                 S )Nencoder-   :)hasattrrf   r   r%   r)   r*   rT   )rD   saltusernamepasswords       r   gen_xrl      s    $+Hh$?$?Mx   XH$+Hh$?$?Mx   XH 599!JaXc

=RU]=]._._aabbbr
   c                    |t           k    r||t          d          t          |         }t          |||          \  }	}
t	          t          |                    }t	          t          |
t          ||| |          |	                    }||fS )N:Both n_hex and g_hex are required when ng_type = NG_CUSTOM)r   
ValueError	_hash_mapr"   r6   r;   powrl   )rj   rk   hash_algr   r    r!   salt_lenk_hexrD   r_   r`   _s_vs                r   create_salted_verification_keyrw      s    )%-UVVVH&J
'5%
)
)CAa	
H..	0	0B	Az2x K KQOO	Q	QBr6Mr
   c                 `   t          |d          r|                                n|} |             }|                    t          | ||                     |                     | |                                                     t          |t          j                  rt          |          }|                    |           |                    t          |                     |                    t          |                     |                    |           |                                S )Nrf   )	rh   rf   rL   rd   rO   r@   r%   rA   r6   )	rD   r_   r`   Ir'   ABKrR   s	            r   calculate_Mr}      s    a**1


A
AHHfj!Q((***HHjjmm""$$&&&!S&'' !HHaMMMHHmA   HHmA   HHaMMM88::r
   c                      |             }|                     t          |                     |                     |           |                     |           |                                S r   )rL   r6   rO   )rD   rz   Mr|   rR   s        r   calculate_H_AMKr      sS    
AHHmA   HHaMMMHHaMMM88::r
   c                   V    e Zd ZdeeddddfdZd Zd Zd Zd Z	d Z
ddZd	 Zd
 ZdS )VerifierNc                    |t           k    r||t          d          |	r"t          |	          dk    rt          d          || _        t	          |          | _        || _        d | _        d| _        d| _	        t          |||          \  }}t          |         }|
;t	          t          |||t          t          |                                        }nt          |
d          }|| _        || _        || _        || _        |r|                     |           | j	        sV|	rt	          |	          | _        nt+          d          | _        || j        z  t-          || j        |          z   |z  | _        d S d S )Nrn      z256 bytes required for bytes_bFrJ   r   )r   ro   rN   r'   r*   vry   r|   _authenticatedsafety_failedr"   rp   rT   r6   r   rD   r_   r`   k_set_Ar)   r>   rq   r{   )selfrj   bytes_sbytes_vbytes_Arr   r   r    r!   bytes_brt   r_   r`   rD   r   s                  r   __init__zVerifier.__init__  s}   iU]emYZZZ 	?s7||s**=>>>w''#"WeU44!*
=&:q!3}UVGWGWCXCX(Z(Z(Z[[AAUBA$ 	!KK   ! 	8 5&w//-s44hQ!2!22a7DFFF	8 	8r
   c                     | j         S r   r   r   s    r   authenticatedzVerifier.authenticated*      ""r
   c                     | j         S r   ry   r   s    r   get_usernamezVerifier.get_username.  	    vr
   c                 *    t          | j                  S r   )r6   r)   r   s    r   get_ephemeral_secretzVerifier.get_ephemeral_secret2      TV$$$r
   c                 "    | j         r| j        nd S r   r   r|   r   s    r   get_session_keyzVerifier.get_session_key6      ,6tvv$6r
   c                 J    | j         rdS | j        t          | j                  fS )N)NN)r   r'   r6   r{   r   s    r   get_challengezVerifier.get_challenge:  s)     	39FM$&1122r
   c                     |r|                      |           t          | d          st          d          | j        s-|                                  || j        k    rd| _        | j        S d S d S )Nrz   zRbytes_A must be provided through Verifier constructor or verify_session parameter.T)r   rh   ro   r   _derive_H_AMKr   r   H_AMK)r   user_Mr   s      r   verify_sessionzVerifier.verify_sessionA  s     	!KK   tS!! 	sqrrr! 	"   &*#z!		" 	"r
   c                 ^    t          |          | _        | j        | j        z  dk    | _        d S )Nr   )r*   rz   r_   r   )r   r   s     r   r   zVerifier._set_AM  s,    w''!Vdf_1r
   c                    t          t          | j        | j        | j        t          t          | j                                                | _        t          | j        t          | j
        | j        | j                  z  | j        | j                  | _        |                     t          | j                                                            | _        t          | j        | j        | j        | j        | j        | j        | j        | j                  | _        t)          | j        | j        | j        | j                  | _        d S )Nr   )r*   rT   rD   rz   r{   rN   r6   r_   urq   r   r)   SrO   r|   r}   r`   ry   r'   r   r   r   r   s    r   r   zVerifier._derive_H_AMKS  s    q$&$&MZ^Z`LaLaHbHbcccddTVC888$&$&II-"7"799@@BBdotvtvtvtvtvW[W]_c_egg$dotvtvtvOO


r
   r   )__name__
__module____qualname__SHA1NG_2048r   r   r   r   r   r   r   r   r    r
   r   r   r     s        ;?$X_gksw  BF  NR !8 !8 !8 !8H# # #  % % %7 7 73 3 3	" 	" 	" 	"2 2 2P P P P Pr
   r   c                   N    e Zd ZeedddddfdZd Zd Zd Zd Z	d Z
d Zd	 ZdS )
UserNc
                    |t           k    r||t          d          |r"t          |          dk    rt          d          t          |||          \  }
}t          |         }|	;t          t          ||
|t          t          |
                                        }nt          |	d          }|| _	        || _
        |rt          |          | _        nt          d          | _        |rt          |          | _        nt          || j        |
          | _        d | _        d | _        d | _        d | _        d| _        || _        |
| _        || _        || _        d S )Nrn   r   z256 bytes required for bytes_ar   r   F)r   ro   rN   r"   rp   r*   rT   r6   r   ry   par>   rz   rq   r   r   r|   r   r   rD   r_   r`   r   )r   rj   rk   rr   r   r    r!   bytes_ar   rt   r_   r`   rD   r   s                 r   r   zUser.__init__^  sU   iU]emYZZZ 	?s7||s**=>>>WeU44!*
=&q*a#mTUFVFVBWBW'Y'Y'YZZAAUBA 	1"7++DFF)300DF 	'"7++DFFDFA&&DF
#$r
   c                     | j         S r   r   r   s    r   r   zUser.authenticated  r   r
   c                     | j         S r   r   r   s    r   r   zUser.get_username  r   r
   c                 *    t          | j                  S r   )r6   r   r   s    r   r   zUser.get_ephemeral_secret  r   r
   c                 "    | j         r| j        nd S r   r   r   s    r   r   zUser.get_session_key  r   r
   c                 8    | j         t          | j                  fS r   )ry   r6   rz   r   s    r   start_authenticationzUser.start_authentication  s    df--..r
   c                 ^   || _         t          |          | _        | j        }| j        }| j        }| j        }| j        |z  dk    rd S t          t          || j        | j        t          t          |                                        | _        | j        dk    rd S t          || j         | j        | j                  | _        t!          || j        |          | _        t!          | j        || j        z  z
  | j        | j        | j        z  z   |          | _         |t          | j                                                            | _        t-          |||| j        | j         | j        | j        | j                  | _        t1          || j        | j        | j                  | _        | j        S )Nr   r   )r'   r*   r{   r_   r`   r   rD   rT   rz   rN   r6   r   rl   ry   r   r4   rq   r   r   r   rO   r|   r}   r   r   r   )r   r   bytes_Br_   r`   r   rD   s          r   process_challengezUser.process_challenge  sd   ))FFF_
 FQJ14q*dfdfCVWHXHXDYDY[[[\\ 6Q;;4
DFDFDF<<Q""dfqx'46DF46M+AAFFZtv!6!688??AA *aDFDFDFDFTXTZ\\$ZHH
vr
   c                 .    | j         |k    r	d| _        d S d S )NT)r   r   )r   	host_HAMKs     r   r   zUser.verify_session  s%    :"""&D #"r
   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r   r   r   ]  s        48'QU]akoy}  FJ    D# # #  % % %7 7 7/ / /
  D' ' ' ' 'r
   r   )T)r-   r-   )'hashlibr8   binasciir%   r   r   r	   r   r   SHA224SHA256SHA384SHA512NG_1024r   NG_4096NG_8192r   sha1sha224sha256sha384sha512rp   r   r"   r*   r6   r;   r>   rH   rT   rd   rl   rw   r}   r   r   r   r   r
   r   <module>r      s     				  



        
 
	
	
	
	
	w|w~w~w~w~	(	P	d( ( (  
 
 
1 1 10 0 0
/ / / /  (	n 	n 	nc c c BFw^bjnyz  CG        TP TP TP TP TP TP TP TPr\' \' \' \' \' \' \' \' \' \'r
   