B
    0[	                 @   sr   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dlm	Z	 dZ
eed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)int_from_bytes)   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   r6   r6   r%   r   E            v   r   ^   ~   r      L   B      r    r:      k   r   r   \      rE         rI      8   rJ      Z               rT   $      |   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)rc    ri   5lib/python3.7/site-packages/secretstorage/dhcrypto.pyint_to_bytes   s    rk   re   c               @   s*   e Zd ZddddZeddddZdS )SessionN)rd   c             C   s8   d | _ d | _d| _ttdd| _td| jt| _	d S )NTr   re   r   )
Zobject_pathaes_keyZ	encryptedr   osurandommy_private_keypowDH_PRIME_1024Zmy_public_key)selfri   ri   rj   __init__$   s
    zSession.__init__)server_public_keyrd   c             C   sd   t || jt}t|}ddt|  | }d}t||t }t|dt }|d d | _	d S )N    r   s                                          )
rq   rp   rr   rk   lenhmacnewr   Zdigestrm   )rs   ru   Zcommon_secretZsaltZpseudo_random_keyZoutput_blockri   ri   rj   set_server_public_key,   s    zSession.set_server_public_key)__name__
__module____qualname__rt   intr|   ri   ri   ri   rj   rl   #   s   rl   )__doc__rz   rg   rn   Zhashlibr   typingr   Zcryptography.utilsr   ZDH_PRIME_1024_BYTESr   bytesrk   rr   objectrl   ri   ri   ri   rj   <module>   s   

