o
    !`q	                     @   sj   d Z ddlZddlZddlZddlmZ ddlmZ dZde	de
fdd	Ze	ed
ZG dd deZdS )zThis module contains needed classes, functions and constants
to implement dh-ietf1024-sha256-aes128-cbc-pkcs7 secret encryption
algorithm.    N)sha256)Optional)   r   r   r   r   r   r   r               !   h      4         b                  )      N         g      t   r            ;         "   Q   J   r   y      r                        :   C      0   +   
   m      _      7   O      5   r5   r5   r$   r   E            v   r   ^   ~   r      L   B      r   r9      k   r   r   \      rD         rH      8   rI      Z               rS   $      |   K         I   (   f   r$      r[   S      r   r   r   r   r   r   r   r   numberreturnc                 C   s   |  t|  d dS )Nr   big)to_bytesmathZceil
bit_length)rb    rh   8/usr/lib/python3/dist-packages/secretstorage/dhcrypto.pyint_to_bytes   s   rj   rd   c                   @   s(   e Zd ZdddZdeddfddZdS )	Sessionrc   Nc                 C   s:   d | _ d | _d| _ttdd| _td| jt	| _
d S )NTr   rd   r   )Zobject_pathaes_keyZ	encryptedint
from_bytesosurandommy_private_keypowDH_PRIME_1024Zmy_public_key)selfrh   rh   ri   __init__#   s
   zSession.__init__server_public_keyc                 C   sd   t || jt}t|}ddt|  | }d}t||t }t|dt }|d d | _	d S )N    r   s                                          )
rr   rq   rs   rj   lenhmacnewr   Zdigestrl   )rt   rv   Zcommon_secret_intZcommon_secretZsaltZpseudo_random_keyZoutput_blockrh   rh   ri   set_server_public_key+   s   zSession.set_server_public_key)rc   N)__name__
__module____qualname__ru   rm   r}   rh   rh   rh   ri   rk   "   s    
rk   )__doc__r{   rf   ro   Zhashlibr   typingr   ZDH_PRIME_1024_BYTESrm   bytesrj   rn   rs   objectrk   rh   rh   rh   ri   <module>   s   