HEX
Server: LiteSpeed
System: Linux shams.tasjeel.ae 5.14.0-611.5.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 08:09:09 EST 2025 x86_64
User: infowars (1469)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //usr/lib64/python3.9/site-packages/borg/testsuite/__pycache__/key.cpython-39.opt-1.pyc
a

HZ�h�N�@s6ddlZddlZddlZddlZddlmZmZddlZddl	m
Z
mZmZddl	m
Z
mZmZmZmZmZmZmZddl	mZmZddl	mZmZmZmZddl	mZdd	l	mZdd
lmZddlmZ ddl!mZddl!m"Z"dd
l!m#Z#ddl!m$Z$ddl!m%Z%Gdd�d�Z&Gdd�d�Z'Gdd�d�Z(dS)�N)�hexlify�	unhexlify�)�
Passphrase�PasswordRetriesExceeded�
bin_to_hex)�PlaintextKey�
PassphraseKey�AuthenticatedKey�RepoKey�
KeyfileKey�Blake2KeyfileKey�
Blake2RepoKey�Blake2AuthenticatedKey)�ID_HMAC_SHA_256�ID_BLAKE2b_256)�TAMRequiredError�
TAMInvalid�TAMUnsupportedSuiteError�UnsupportedManifestError)�ArchiveTAMInvalid)�identify_key)�
bytes_to_long)�IntegrityError)�Location)�
StableDict)�get_security_dir)�msgpackc	@seZdZGdd�d�Zd��Zee�ddd��Z	ed�Z
d��Ze�
d	�Ze�
d
�Zejdd��Zejeeeeeeeefd
�dd��ZGdd�d�Zdd�Zdd�Zdd�Zdd�Zdd�Z dd�Z!dd�Z"d d!�Z#d"d#�Z$d$d%�Z%d&d'�Z&d(d)�Z'd*d+�Z(d,d-�Z)d.d/�Z*d0S)1�TestKeyc@seZdZee��d�ZdS)zTestKey.MockArgs�N)�__name__�
__module__�__qualname__r�tempfileZmkstemp�location�r%r%�8/usr/lib64/python3.9/site-packages/borg/testsuite/key.py�MockArgssr'aU
        BORG_KEY 0000000000000000000000000000000000000000000000000000000000000000
        hqppdGVyYXRpb25zzgABhqCkaGFzaNoAIMyonNI+7Cjv0qHi0AOBM6bLGxACJhfgzVD2oq
        bIS9SFqWFsZ29yaXRobaZzaGEyNTakc2FsdNoAINNK5qqJc1JWSUjACwFEWGTdM7Nd0a5l
        1uBGPEb+9XM9p3ZlcnNpb24BpGRhdGHaANAYDT5yfPpU099oBJwMomsxouKyx/OG4QIXK2
        hQCG2L2L/9PUu4WIuKvGrsXoP7syemujNfcZws5jLp2UPva4PkQhQsrF1RYDEMLh2eF9Ol
        rwtkThq1tnh7KjWMG9Ijt7/aoQtq0zDYP/xaFF8XXSJxiyP5zjH5+spB6RL0oQHvbsliSh
        /cXJq7jrqmrJ1phd6dg4SHAM/i+hubadZoS6m25OQzYAW09wZD/phG8OVa698Z5ed3HTaT
        SmrtgJL3EoOKgUI9d6BLE4dJdBqntifoz\W�z�
        0055f161493fcfc16276e8c31493c4641e1eb19a79d0326fad0291e5a9c98e5933
        00000000000003e8d21eaf9b86c297a8cd56432e1915bb
        Z@c3fbf14bc001ebcc3cd86e696c13482ed071740927cd7cbe1b01b4bfcee49314ay
        BORG_KEY 0000000000000000000000000000000000000000000000000000000000000000
        hqlhbGdvcml0aG2mc2hhMjU2pGRhdGHaAZBu680Do3CmfWzeMCwe48KJi3Vps9mEDy7MKF
        TastsEhiAd1RQMuxfZpklkLeddMMWk+aPtFiURRFb02JLXV5cKRC1o2ZDdiNa0nao+o6+i
        gUjjsea9TAu25t3vxh8uQWs5BuKRLBRr0nUgrSd0IYMUgn+iVbLJRzCCssvxsklkwQxN3F
        Y+MvBnn8kUXSeoSoQ2l0fBHzq94Y7LMOm/owMam5URnE8/UEc6ZXBrbyX4EXxDtUqJcs+D
        i451thtlGdigDLpvf9nyK66mjiCpPCTCgtlzq0Pe1jcdhnsUYLg+qWzXZ7e2opEZoC6XxS
        3DIuBOxG3Odqj9IKB+6/kl94vz98awPWFSpYcLZVWu7sIP38ZkUK+ad5MHTo/LvTuZdFnd
        iqKzZIDUJl3Zl1WGmP/0xVOmfIlznkCZy4d3SMuujwIcqQ5kDvwDRPpdhBBk+UWQY5vFXk
        kR1NBNLSTyhAzu3fiUmFl0qZ+UWPRkGAEBy/NuoEibrWwab8BX97cATyvnmOqYkU9PT0C6
        l2l9E4bPpGhhc2jaACDnIa8KgKv84/b5sjaMgSZeIVkuKSLJy2NN8zoH8lnd36ppdGVyYX
        Rpb25zzgABhqCkc2FsdNoAIEJLlLh7q74j3q53856H5GgzA1HH+aW5bA/as544+PGkp3Zl
        cnNpb24BZd04fdf9475cf2323c0ba7a99ddc011064f2e7d039f539f2e4480e6f5fc6ff9993d604040404040404098c8cee1c6db8c28947Z@d8bc68e961c79f99be39061589e5179b2113cd9226e07b08ddd4a1fef7ce93fbcCs|�dt|��|S)NZ
BORG_KEYS_DIR)�setenv�str)�self�request�monkeypatch�tmpdirr%r%r&�keys_dirFszTestKey.keys_dir)�paramscCs"|�dd�|j�|��|���S�N�BORG_PASSPHRASE�test)r)Zparam�create�MockRepositoryr')r+r,r-r%r%r&�keyKszTestKey.keyc@sPeZdZGdd�d�Ze�Zed�Zee�Zdd�Z	dd�Z
dd	�Zd
d�ZdS)
zTestKey.MockRepositoryc@seZdZdZZdd�ZdS)z TestKey.MockRepository._Locationz/some/placecCs|jS�N)�	processed�r+r%r%r&�canonical_path]sz/TestKey.MockRepository._Location.canonical_pathN)r r!r"�rawr8r:r%r%r%r&�	_LocationZsr<� cCsdSr7r%r9r%r%r&�get_free_noncedsz%TestKey.MockRepository.get_free_noncecCsdSr7r%)r+Znext_unreservedZstart_noncer%r%r&�commit_nonce_reservationgsz/TestKey.MockRepository.commit_nonce_reservationcCs
||_dSr7�Zkey_data)r+�datar%r%r&�save_keyjszTestKey.MockRepository.save_keycCs|jSr7r@r9r%r%r&�load_keymszTestKey.MockRepository.load_keyN)
r r!r"r<Z	_location�bytes�idr�id_strr>r?rBrCr%r%r%r&r5Ysr5cCst�dd�}d}dS�N�foo)rr4)r+r6�chunkr%r%r&�test_plaintextpszTestKey.test_plaintextc	CsX|�dd�t�|��|���}|�d�}|�d�}|j�|�}t�|��|�}d}dS�Nr2r3�ABCrH)	r)rr4r5r'�encrypt�cipher�
extract_iv�detect)	r+r-r/r6�manifest�	manifest2�iv�key2rIr%r%r&�test_keyfilevs

zTestKey.test_keyfilecCsv|�dd�|��}ttj�t|j�d�d��}|�d�Wd�n1sN0Yt	�
||���}|�d�}dS)Nr2r3Znonce�wZ0000000000002000rL)
r)r5�open�os�path�joinrrF�writerr4r'rM)r+r-r/�
repository�fdr6rAr%r%r&�&test_keyfile_nonce_rollback_protection�s(
z.TestKey.test_keyfile_nonce_rollback_protectioncCs�|�d�}|�dt|��|�dd�t�|��|���}d}|�|�}|�|�}t�	|��|�}|�
�t�t
�� t�	|��|�Wd�n1s�0YdS)N�keyfile�
BORG_KEY_FILEr2ZtestkfrL)rZr)r*rr4r5r'�id_hashrMrP�remove�pytest�raises�FileNotFoundError)r+r.r-r_r6rIZchunk_idZchunk_cdatar%r%r&�test_keyfile_kfenv�s


zTestKey.test_keyfile_kfenvcCs^|�d��d��}|�|j�Wd�n1s20Y|�dd�t�|��|j�}dS�Nr_rVr2�
passphrase)	rZrWr[�keyfile2_key_filer)rrPr5�keyfile2_cdata�r+r-r/r]r6r%r%r&�
test_keyfile2�s
*zTestKey.test_keyfile2cCsr|�d�}|�d��}|�|j�Wd�n1s60Y|�dt|��|�dd�t�|��|j	�}dS)Nr_rVr`r2rh)
rZrWr[rir)r*rrPr5rj)r+r.r-r_r]r6r%r%r&�test_keyfile2_kfenv�s
*zTestKey.test_keyfile2_kfenvcCs^|�d��d��}|�|j�Wd�n1s20Y|�dd�t�|��|j�}dSrg)	rZrWr[�keyfile_blake2_key_filer)r
rPr5�keyfile_blake2_cdatarkr%r%r&�test_keyfile_blake2�s
*zTestKey.test_keyfile_blake2c	CsT|�dd�t�|��d�}|�d�}|�d�}|j�|�}t�|��|�}d}dSrK)r)r	r4r5rMrNrOrP)	r+r/r-r6rQrRrSrTrIr%r%r&�test_passphrase�s

zTestKey.test_passphrasecCsRt|�}||dN<t�t��|�d|�Wd�n1sD0YdS)Nr�)�	bytearrayrcrd�IntegrityErrorBase�decrypt)r+r6rA�offsetr%r%r&�
_corrupt_byte�szTestKey._corrupt_bytecCs�|�d��d��}|�|j�Wd�n1s20Y|�dd�t�|��|j�}|j}t	t
|��D]}|�|||�qlt�
t��<t|j�}t|�|��}d|d<|�||�Wd�n1s�0YdS)Nr_rVr2rhr�)rZrWr[rir)rrPr5rj�range�lenrwrcrdrrsraru)r+r-r/r]r6rA�irEr%r%r&�test_decrypt_integrity�s*
zTestKey.test_decrypt_integritycCs8|j}d}|�|�}t|�}|�||�}|�d|�}dSrG)r\rMrrPru)r+r6r\�	plaintext�	encryptedZidentified_key_classZ
loaded_keyZ	decryptedr%r%r&�test_roundtrip�s
zTestKey.test_roundtripcCsd}|�|�}dS)N�	123456789)rM)r+r6r}r~r%r%r&�test_decrypt_decompress�s
zTestKey.test_decrypt_decompresscCs�d}|�|�}|�||�t|�}|ddN<t�t��|�||�Wd�n1s^0Y|d}t�t��|�||�Wd�n1s�0YdS)Nr�rr�1)raZ	assert_idrsrcrdr)r+r6r}rEZ
id_changedZplaintext_changedr%r%r&�test_assert_id�s
*zTestKey.test_assert_idcCs2|�dd�t�|��|���}d}|�|�}dS�Nr2r3r�)r)r
r4r5r'rM�r+r-r6r}Z
authenticatedr%r%r&�test_authenticated_encrypts

z"TestKey.test_authenticated_encryptcCs2|�dd�t�|��|���}d}|�|�}dSr�)r)rr4r5r'rMr�r%r%r&�!test_blake2_authenticated_encrypts

z)TestKey.test_blake2_authenticated_encryptN)+r r!r"r'�striprir�re�subrjZkeyfile2_idrnrD�fromhexroZkeyfile_blake2_idrc�fixturer/rr
rrr
rrr6r5rJrUr^rfrlrmrprqrwr|rr�r�r�r�r%r%r%r&rsH

	

�


	

rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestPassphrasecCs||�tddd��|�dd�t��|��\}}|�dd�t��}|��\}}|�tddd��t��|��\}}dS)N�getpasscSsdS)Nu	12aöäür%��promptr%r%r&�<lambda>rrzATestPassphrase.test_passphrase_new_verification.<locals>.<lambda>ZBORG_DISPLAY_PASSPHRASE�noZyescSsdS)Nz1234/@=r%r�r%r%r&r�*rr)�setattrr�r)r�new�
readouterr)r+�capsysr-�out�errrhr%r%r&� test_passphrase_new_verificationsz/TestPassphrase.test_passphrase_new_verificationcCsd|�dd�|�tddd��t�t��tjdd�Wd�n1sJ0Y|��\}}dS)Nr2Fr�cSsdS)Nr(r%r�r%r%r&r�2rrz:TestPassphrase.test_passphrase_new_empty.<locals>.<lambda>)Zallow_empty)	�delenvr�r�rcrdrrr�r�)r+r�r-r�r�r%r%r&�test_passphrase_new_empty0s*z(TestPassphrase.test_passphrase_new_emptycsd|�dd�ttd���|�td�fdd��t�t��t�	�Wd�n1sV0YdS)Nr2F�r�cstt���Sr7)r*�nextr��Zascending_numbersr%r&r�;rrz<TestPassphrase.test_passphrase_new_retries.<locals>.<lambda>)
r��iterryr�r�rcrdrrr��r+r-r%r�r&�test_passphrase_new_retries8s
z*TestPassphrase.test_passphrase_new_retriescCsdSr7r%r9r%r%r&�test_passphrase_repr?sz#TestPassphrase.test_passphrase_reprN)r r!r"r�r�r�r�r%r%r%r&r�sr�c@s(eZdZejdd��Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
ej�d
ie
fddie
fdefdeff�dd��Zej�d
ie
fddie
fdefdeff�dd��Zejjdied�fed�ifded�fed�dffgd�d�dd��Zdd�Zdd�Zej�d d!�d"d#��Zej�d d!�d$d%��ZdS)&�TestTAMcCs |�dd�t�t��t���Sr1)r)rr4rr5r'r�r%r%r&r6DszTestTAM.keycCsvd}t�t��|�|�Wd�n1s.0Yd}t�tj��|�|�Wd�n1sh0YdS)Ns
����foobars���)rcrdr�unpack_and_verify_manifestrZUnpackException�r+r6�blobr%r%r&�test_unpack_futureIs(zTestTAM.test_unpack_futurecCsvt�i�}t�t��|�|�Wd�n1s40Yt�t��|�|�Wd�n1sh0YdSr7)r�packbrcrdrr��unpack_and_verify_archiver�r%r%r&�test_missing_when_requiredRs

(z"TestTAM.test_missing_when_requiredcCs2t�i�}d|_|�|�\}}|�|�\}}}dS)NF�rr�Ztam_requiredr�r��r+r6r��unpacked�verified�_r%r%r&�test_missingYs

zTestTAM.test_missingcCs~t�dddii�}t�t��|�|�Wd�n1s<0Yt�t��|�|�Wd�n1sp0YdS)N�tam�type�HMAC_VOLLBIT)rr�rcrdrr�r�r�r%r%r&�test_unknown_type_when_requiredcs��(z'TestTAM.test_unknown_type_when_requiredcCs:t�dddii�}d|_|�|�\}}|�|�\}}}dS)Nr�r�r�Fr�r�r%r%r&�test_unknown_typens��zTestTAM.test_unknown_typeztam, excr���Ni�cCsFt�d|i�}t�|��|�|�Wd�n1s80YdS�Nr�)rr�rcrdr��r+r6r��excr�r%r%r&�test_invalid_manifest|s
�zTestTAM.test_invalid_manifestcCsFt�d|i�}t�|��|�|�Wd�n1s80YdSr�)rr�rcrdr�r�r%r%r&�test_invalid_archive�s
�zTestTAM.test_invalid_archivez
hmac, salt�@)zed-b64zb64-edzn-b64zb64-n)ZidscCs�dd||d�i}|d}|dur&|d=|dur4|d=t�|�}t�t��|�|�Wd�n1sh0Yt�t��|�|�Wd�n1s�0YdS)Nr�ZHKDF_HMAC_SHA512)r��hmac�saltr�r�)rr�rcrdrr�rr�)r+r6r�r�rAr�r�r%r%r&�test_wrong_types�s ��
(zTestTAM.test_wrong_typescCs2ddi}|j|dd�}t�|�}|�|�\}}dS)N�foo�bar�manifest��context)�pack_and_authenticate_metadatar�unpackbr�)r+r6rAr�r�r�r%r%r&�test_round_trip_manifest�s

z TestTAM.test_round_trip_manifestcCs4ddi}|j|dd�}t�|�}|�|�\}}}dS)Nr�r��archiver�)r�rr�r�)r+r6rAr�r�r�r�r%r%r&�test_round_trip_archive�s

zTestTAM.test_round_trip_archive�which)shmacssaltcCs�ddi}|j|dd�}tj|td�}|d|dd�td�|d|<t�|�}t�t��|�	|�Wd�n1s|0YdS)	Nr�r�r�r��Zobject_hook�tamrr=)
r�rr�rrDr�rcrdrr��r+r6r�rAr�r�r%r%r&�test_tampered_manifest�s$
zTestTAM.test_tampered_manifestcCs�ddi}|j|dd�}tj|td�}|d|dd�td�|d|<t�|�}t�t��|�	|�Wd�n1s|0YdS)	Nr�r�r�r�r�r�rr=)
r�rr�rrDr�rcrdrr�r�r%r%r&�test_tampered_archive�s$
zTestTAM.test_tampered_archive)r r!r"rcr�r6r�r�r�r�r�ZmarkZparametrizerrr�rr�rDr�r�r�r�r�r%r%r%r&r�CsH
	

�

�




��



r�))r�Zos.pathrXr�r#ZbinasciirrrcZ
crypto.keyrrrrr	r
rrr
rrrrrrrrrrZcrypto.low_levelrrrtZhelpersrrrrrr�r�r%r%r%r&�<module>s.()