Current File : //usr/lib64/python3.6/site-packages/borg/crypto/__pycache__/nonces.cpython-36.pyc
3

y��b��@svddlZddlZddlmZddlmZddlmZddlmZddl	m
Z
dd	lmZm
Z
dZdZGdd
�d
�ZdS)�N)�	unhexlify�)�get_security_dir)�
bin_to_hex)�SaveFile)�InvalidRPCMethod�)�
bytes_to_long�
long_to_bytes�@�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�NonceManagercCs4||_||_d|_||_tjjt|jj�d�|_	dS)NZnonce)
�
repository�
enc_cipher�end_of_nonce_reservation�manifest_nonce�os�path�joinrZid_str�
nonce_file)�selfrrr�r�/usr/lib64/python3.6/nonces.py�__init__s
zNonceManager.__init__cCsBy(t|jd��}tt|j���SQRXWntk
r<dSXdS)N�r)�openrr	r�read�FileNotFoundError)r�fdrrr�get_local_free_nonces
z!NonceManager.get_local_free_noncecCsD|j�|krtd��t|jdd��}|jtt|���WdQRXdS)Nz6nonce space reservation with mismatched previous stateF)Zbinary)r�	Exceptionrr�writerr
)r�next_unreserved�start_noncerrrr�commit_local_nonce_reservationsz+NonceManager.commit_local_nonce_reservationcCsDy
|jj�Stk
r>tjjd�dd�|_dd�|_dSXdS)NzTPlease upgrade to borg version 1.1+ on the server for safer AES-CTR nonce handling.
cSsdS)Nrrrrr�<lambda>+sz2NonceManager.get_repo_free_nonce.<locals>.<lambda>cSsdS)Nr)r"r#rrrr%,s)rZget_free_noncer�sys�stderrr!�get_repo_free_nonce�commit_repo_nonce_reservation)rrrrr(%s


z NonceManager.get_repo_free_noncecCs|jj||�dS)N)rZcommit_nonce_reservation)rr"r#rrrr)/sz*NonceManager.commit_repo_nonce_reservationcCs�|jr8tj|jjdd�}||jks&t�|||jkr8dS|j�}|j�}tdd�|||j	|jfD��}||t
}|tks~t�|jdkr�|jjd|j
ddd��n"||jkr�|jjd|j
ddd��|j||�|j||�||_dS)NZbig)�	byteordercss|]}|dk	r|VqdS)Nr)�.0�xrrr�	<genexpr>Jsz2NonceManager.ensure_reservation.<locals>.<genexpr>�)r�int�
from_bytesrZiv�AssertionErrorr(r�maxr�NONCE_SPACE_RESERVATION�MAX_REPRESENTABLE_NONCE�reset�to_bytesr)r$)rZnonce_space_neededZ
next_nonceZrepo_free_nonceZlocal_free_nonceZfree_nonce_spaceZreservation_endrrr�ensure_reservation2s"

zNonceManager.ensure_reservationN)	�__name__�
__module__�__qualname__rrr$r(r)r7rrrrr
s
r
ll����i)rr&ZbinasciirZhelpersrr�platformrZremoterZ	low_levelr	r
r4r3r
rrrr�<module>s