509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
y¾œbÉ  ã               @   sv   d dl Z d dlZd dlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 dd	lmZmZ dZdZG dd„ dƒZdS )é    N)Ú	unhexlifyé   )Úget_security_dir)Ú
bin_to_hex)ÚSaveFile)ÚInvalidRPCMethodé   )Úbytes_to_longÚlong_to_bytesé@   é   c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚNonceManagerc             C   s4   || _ || _d | _|| _tjjt| j jƒdƒ| _	d S )NZnonce)
Ú
repositoryÚ
enc_cipherÚend_of_nonce_reservationÚmanifest_nonceÚosÚpathÚjoinr   Zid_strÚ
nonce_file)Úselfr   r   r   © r   ú/usr/lib64/python3.6/nonces.pyÚ__init__   s
    zNonceManager.__init__c             C   sB   y(t | jdƒ�}tt|jƒ ƒƒS Q R X W n tk
r<   d S X d S )NÚr)Úopenr   r	   r   ÚreadÚFileNotFoundError)r   Úfdr   r   r   Úget_local_free_nonce   s
    z!NonceManager.get_local_free_noncec             C   sD   | j ƒ |krtdƒ‚t| jdd��}|jtt|ƒƒƒ W d Q R X d S )Nz6nonce space reservation with mismatched previous stateF)Zbinary)r   Ú	Exceptionr   r   Úwriter   r
   )r   Únext_unreservedÚstart_noncer   r   r   r   Úcommit_local_nonce_reservation   s    z+NonceManager.commit_local_nonce_reservationc             C   sD   y
| j jƒ S  tk
r>   tjjdƒ dd„ | _dd„ | _d S X d S )NzTPlease upgrade to borg version 1.1+ on the server for safer AES-CTR nonce handling.
c               S   s   d S )Nr   r   r   r   r   Ú<lambda>+   s    z2NonceManager.get_repo_free_nonce.<locals>.<lambda>c             S   s   d S )Nr   )r"   r#   r   r   r   r%   ,   s    )r   Zget_free_noncer   ÚsysÚstderrr!   Úget_repo_free_nonceÚcommit_repo_nonce_reservation)r   r   r   r   r(   %   s    


z NonceManager.get_repo_free_noncec             C   s   | j j||ƒ d S )N)r   Zcommit_nonce_reservation)r   r"   r#   r   r   r   r)   /   s    z*NonceManager.commit_repo_nonce_reservationc             C   sæ   | j r8tj| jjdd�}|| j ks&t‚|| | j kr8d S | jƒ }| jƒ }tdd„ ||| j	| j fD ƒƒ}|| t
 }|tk s~t‚| j d kr¢| jjd |jddd�ƒ n"|| j krÄ| jjd |jddd�ƒ | j||ƒ | j||ƒ || _ d S )NZbig)Ú	byteorderc             s   s   | ]}|d k	r|V  qd S )Nr   )Ú.0Úxr   r   r   ú	<genexpr>J   s    z2NonceManager.ensure_reservation.<locals>.<genexpr>é   )r   ÚintÚ
from_bytesr   ZivÚAssertionErrorr(   r   Úmaxr   ÚNONCE_SPACE_RESERVATIONÚMAX_REPRESENTABLE_NONCEÚresetÚto_bytesr)   r$   )r   Znonce_space_neededZ
next_nonceZrepo_free_nonceZlocal_free_nonceZfree_nonce_spaceZreservation_endr   r   r   Úensure_reservation2   s"    

zNonceManager.ensure_reservationN)	Ú__name__Ú
__module__Ú__qualname__r   r   r$   r(   r)   r7   r   r   r   r   r      s   
r   l            l   ÿÿÿÿ i   )r   r&   Zbinasciir   Zhelpersr   r   Úplatformr   Zremoter   Z	low_levelr	   r
   r4   r3   r   r   r   r   r   Ú<module>   s   