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

y��b� �@s�ddlZddlZddlZddlmZmZmZddlmZddlm	Z	m
Z
mZmZm
Z
mZddlmZddlmZmZmZmZmZGd	d
�d
e�ZGdd�de�ZGd
d�de�ZGdd�de�Zdd�ZGdd�d�ZdS)�N)�	unhexlify�
a2b_base64�
b2a_base64)�sha256�)�Manifest�NoManifestError�Error�yes�
bin_to_hex�	dash_open)�
Repository�)�
KeyfileKey�KeyfileNotFoundError�RepoKeyNotFoundError�KeyBlobStorage�identify_keyc@seZdZdZdS)�UnencryptedRepoz9Keymanagement not available for unencrypted repositories.N)�__name__�
__module__�__qualname__�__doc__�rr�"/usr/lib64/python3.6/keymanager.pyr
src@seZdZdZdS)�UnknownKeyTypezKeytype {0} is unknown.N)rrrrrrrrrsrc@seZdZdZdS)�RepoIdMismatchzHThis key backup seems to be for a different backup repository, aborting.N)rrrrrrrrrsrc@seZdZdZdS)�NotABorgKeyFilez-This file is not a borg key backup, aborting.N)rrrrrrrrrsrcCs t�}|j|�|j�d|�S)N)r�updateZ	hexdigest)�dataZnum�hrrr�sha256_truncateds
r!c@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�
KeyManagercCsf||_d|_d|_y|jjtj�}Wntjk
r>t�YnXt	|�}|j
|_|jtjkrbt
��dS)N)�
repository�keyblob�keyblob_storage�getrZMANIFEST_IDr
ZObjectNotFoundrrZSTORAGErZ
NO_STORAGEr)�selfr#Z
manifest_data�keyrrr�__init__$s
zKeyManager.__init__cCs�|jtjkrNt|j�}|j�}t|d��}dj|j�dd��|_	WdQRXn:|jtj
kr�|jj�j�}|s�|jj
j�}t|�d�||_	dS)N�r�r)r%r�KEYFILErr#�find_key�open�join�	readlinesr$�REPOZload_key�decodeZ	_locationZcanonical_pathr)r'�k�target�fd�key_data�locrrr�load_keyblob3s
$
zKeyManager.load_keyblobcCsr|jtjkrNt|j�}y|j�}Wntk
r@|j|�}YnX|j|�n |jtj	krn|jj
|jjd��dS)Nzutf-8)
r%rr,rr#r-rZget_new_target�
store_keyfiler1Zsave_keyr$�encode)r'�argsr3r4rrr�
store_keyblobBs
zKeyManager.store_keyblobcCs8dtjt|jj�f}||j7}|jjd�s4|d7}|S)Nz%s %s
�
)r�FILE_IDrr#�idr$�endswith)r'rrrr�get_keyfile_dataNs

zKeyManager.get_keyfile_datac	Cs(t|d��}|j|j��WdQRXdS)N�w)r�writerA)r'r4r5rrrr9UszKeyManager.store_keyfilecCs|dkrd}|j|�dS)N�-)r9)r'�pathrrr�exportYszKeyManager.exportcCsX|dkrd}t|d��8}|j�}tjdd�}|jd|j�d�}|j|�WdQRXdS)NrD�wbZborgz
paperkey.htmls</textarea>)rrA�pkgutil�get_data�replacer:rC)r'rEr5r6Zhtmlrrr�	export_qr_szKeyManager.export_qrc	Cs|dkrd}dd�}d}t|j�}|d7}t|�dd}t|jj�dd�}t|d�}|d	j|||�||�tt|�d
|d
|j	d�d��7}d
}x^t|�r�|d7}|dd�}	t|j
ddd�|	d�}
|dj||t|	��|
�7}|dd�}q�Wt|d��}|j|�WdQRXdS)NrDcSsBd}d}x4|D],}|r*|ddkr*|d7}||7}|d7}qW|S)Nr+r�� rr)�s�ret�iZchrrr�groupedms
z+KeyManager.export_paperkey.<locals>.groupedz:To restore key use borg key import --paper /path/to/repo

zBORG PAPER KEY v1
���zid: {0:d} / {1} / {2} - {3}
�/�asciirrr�big)�	byteorderz{0:2d}: {1} - {2}
rB)
rr$�lenrr#r?r!�format�strr:�to_bytesrrC)r'rErQrFZbinary�lines�repoidZcomplete_checksum�idxZbinline�checksumr5rrr�export_paperkeyis,


(
zKeyManager.export_paperkeyc
Cs|tj}|dt|jj�d}t|jd��>}|jt|��}||krZ|j	|�sTt
��nt��|j�|_WdQRX|j
|�dS)NrMr=r*)rr>rr#r?rrE�readrY�
startswithrrr$r<)r'r;Zfile_idZ
first_liner5Zfile_first_linerrr�import_keyfile�s
zKeyManager.import_keyfilec)Cs�yddl}Wntk
r(td�YnXt|jj�dd�}�y<�x4x�td�jdd�}|dkrntd�rnt	��y|j
d�\}}Wntk
r�td	�wHYnXy|j
d
�\}}}	Wntk
r�td�wHYnXt|j
�jd�d
�|kr�td�qHyt|�}
Wntk
�r td�YnXPqHW||k�r8t��d}d}x�tdj|��}
|
jdd�}
|
dk�rvtd��rvt	��y|
j
d�\}}Wn"tk
�r�td	��wBYnXyt|�}Wn$tjk
�r�td��wBYnXt|jd
dd�|d
�|k�rtdj|���qB||7}||
k�r"P|d7}�qBWt|d�|	k�rJtd�qFdjtjt|�jd���d|_|j|�PqFWWnt	k
�r�td�dSXdS)Nrz?Note: No line editing available due to missing readline supportrSzid: rMr+zAbort import? [yN]:rDz1each line must contain exactly one '-', try againrUz5the id line must contain exactly three '/', try againrVrz0line checksum did not match, try same line againz#internal error while parsing length�rz{0:2d}: z8only characters 0-9 and a-f and '-' are valid, try againrW)rXz/line checksum did not match, try line {0} againrTzIThe overall checksum did not match, retry or enter a blank line to abort.r=z
 - aborted)�readline�ImportError�printrr#r?�inputrJr
�EOFError�split�
ValueErrorr!�lowerr:�intrrZr�binasciir	r\r/�textwrapZwraprr2r$r<)r'r;rfr^Zidlinerr`Zid_linesZ	id_repoidZid_complete_checksumr]�resultr_Zinline�partrrr�import_paperkey�s�





 

zKeyManager.import_paperkeyN)
rrrr)r8r<rAr9rFrKrardrsrrrrr"#s
$r")rorHrprrrZhashlibrZhelpersrrr	r
rrr#r
r(rrrrrrrrrr!r"rrrr�<module>s