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.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&r5Ysr5cCsJt�dd�}d}t|�|��dks&J�||�|�|�|�|��ksFJ�dS)N�foos@2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae)rr4r�id_hash�decrypt�encrypt)r+r6�chunkr%r%r&�test_plaintextpszTestKey.test_plaintextc	Cs0|�dd�t�|��|���}|j��dks2J�|�d�}|j�|�dksPJ�|�d�}||ksfJ�|�	d|�|�	d|�ks�J�|j�|�dks�J�|j�|�}t�
|��|�}|j��||j�t|�tj
�ks�J�t|j|j|jh�dks�J�|jdk�sJ�d}||�	|�|�|�|��k�s,J�dS)Nr2r3r�ABCr�rG)r)rr4r5r'�cipher�next_ivrJ�
extract_ivrI�detect�block_count�lenZPAYLOAD_OVERHEAD�id_key�enc_key�enc_hmac_key�
chunk_seedrH)	r+r-r/r6�manifest�	manifest2�iv�key2rKr%r%r&�test_keyfilevs 

(zTestKey.test_keyfilecCs�|�dd�|��}ttj�t|j�d�d��}|�d�Wd�n1sN0Yt	�
||���}|�d�}|j
�|�dks�J�|�d|�dks�J�dS)Nr2r3Znonce�wZ0000000000002000rMi )r)r5�open�os�path�joinrrF�writerr4r'rJrOrQrI)r+r-r/�
repository�fdr6rAr%r%r&�&test_keyfile_nonce_rollback_protection�s(
z.TestKey.test_keyfile_nonce_rollback_protectioncCs�|�d�}|�dt|��|�dd�|��r2J�t�|��|���}|��sRJ�d}|�|�}|�	|�}t�
|��|�}||�||�ks�J�|��t
�t�� t�
|��|�Wd�n1s�0YdS)N�keyfile�
BORG_KEY_FILEr2ZtestkfrM)rbr)r*�existsrr4r5r'rHrJrRrI�remove�pytest�raises�FileNotFoundError)r+r.r-rgr6rKZchunk_idZchunk_cdatar%r%r&�test_keyfile_kfenv�s


zTestKey.test_keyfile_kfenvcCsv|�d��d��}|�|j�Wd�n1s20Y|�dd�t�|��|j�}|�	|j
|j�dksrJ�dS�Nrgr^r2�
passphrase�payload)rbr_rc�keyfile2_key_filer)rrRr5�keyfile2_cdatarI�keyfile2_id�r+r-r/rer6r%r%r&�
test_keyfile2�s
*zTestKey.test_keyfile2cCs�|�d�}|�d��}|�|j�Wd�n1s60Y|�dt|��|�dd�t�|��|j	�}|�
|j|j	�dks�J�dS)Nrgr^rhr2rprq)rbr_rcrrr)r*rrRr5rsrIrt)r+r.r-rgrer6r%r%r&�test_keyfile2_kfenv�s
*zTestKey.test_keyfile2_kfenvcCsv|�d��d��}|�|j�Wd�n1s20Y|�dd�t�|��|j�}|�	|j
|j�dksrJ�dSro)rbr_rc�keyfile_blake2_key_filer)r
rRr5�keyfile_blake2_cdatarI�keyfile_blake2_idrur%r%r&�test_keyfile_blake2�s
*zTestKey.test_keyfile_blake2c	Cs�|�dd�t�|��d�}|j��dks.J�t|j�dks@J�t|j�dksRJ�t|j	�dksdJ�|j
dksrJ�|�d�}|j�|�dks�J�|�d�}||ks�J�|�
d|�|�
d|�ks�J�|j�|�d	ks�J�|j�|�}t�|��|�}|j��||j�t|��k�sJ�|j|jk�s(J�|j|jk�s:J�|j	|j	k�sLJ�|j
|j
k�s^J�d
}t|�|��dk�szJ�||�
|�|�|�|��k�s�J�dS)Nr2r3rs@793b0717f9d8fb01c751a487e9b827897ceea62409870600013fbc6b4d8d7ca6s@b885a05d329a086627412a6142aaeb9f6c54ab7950f996dd65587251f6bc0901s@2ff3654c6daf7381dbbe718d2b20b4f1ea1e34caa6cc65f6bb3ac376b93fed2ai�#��rMrrGs@818217cf07d37efad3860766dcdf1d21e401650fed2d76ed1d797d3aae925990)r)r	r4r5rOrPrrUrWrVrXrJrQrIrRrSrTrH)	r+r/r-r6rYrZr[r\rKr%r%r&�test_passphrase�s.

$zTestKey.test_passphrasecCsRt|�}||dN<t�t��|�d|�Wd�n1sD0YdS)Nr�)�	bytearrayrkrl�IntegrityErrorBaserI)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)Nrgr^r2rpr�)rbr_rcrrr)rrRr5rs�rangerTr�rkrlrr~rHrI)r+r-r/rer6rA�irEr%r%r&�test_decrypt_integrity�s*
zTestKey.test_decrypt_integritycCsR|j}d}|�|�}t|�}||jks*J�|�||�}|�d|�}||ksNJ�dS)NrG)rdrJr�	__class__rRrI)r+r6rd�	plaintext�	encryptedZidentified_key_classZ
loaded_keyZ	decryptedr%r%r&�test_roundtrip�s
zTestKey.test_roundtripcCs>d}|�|�}|jd|dd�|ks&J�|�d|�|ks:J�dS)N�	123456789F)�
decompress)rJrI)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)rHZ	assert_idr~rkrlr)r+r6r�rEZ
id_changedZplaintext_changedr%r%r&�test_assert_id�s
*zTestKey.test_assert_idcCsd|�dd�t�|��|���}tjtjus0J�t|j�dksBJ�d}|�	|�}|d|ks`J�dS)Nr2r3r=r�s)
r)r
r4r5r'rHrrTrUrJ�r+r-r6r�Z
authenticatedr%r%r&�test_authenticated_encrypts
z"TestKey.test_authenticated_encryptcCsd|�dd�t�|��|���}tjtjus0J�t|j�dksBJ�d}|�	|�}|d|ks`J�dS)Nr2r3�r�s)
r)rr4r5r'rHrrTrUrJr�r%r%r&�!test_blake2_authenticated_encrypts
z)TestKey.test_blake2_authenticated_encryptN)+r r!r"r'�striprrr�re�subrsrtrxrD�fromhexryrzrk�fixturer/rr
rrr
rrr6r5rLr]rfrnrvrwr{r|r�r�r�r�r�r�r�r%r%r%r&rsH

	

�


	

rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestPassphrasecCs�|�tddd��|�dd�t��|��\}}d|vs>J�d|vsJJ�|�dd�t��}|��\}}d|vsvJ�d|vs�J�|d	ks�J�|�tdd
d��t��|��\}}d|vs�J�d|vs�J�dS)N�getpasscSsdS)N�	12aöäür%��promptr%r%r&�<lambda>r}zATestPassphrase.test_passphrase_new_verification.<locals>.<lambda>ZBORG_DISPLAY_PASSPHRASE�noZ12ZyesZ313261c3b6c3a4c3bcr�cSsdS)N�1234/@=r%r�r%r%r&r�*r}r�)�setattrr�r)r�new�
readouterr)r+�capsysr-�out�errrpr%r%r&� test_passphrase_new_verifications"z/TestPassphrase.test_passphrase_new_verificationcCsp|�dd�|�tddd��t�t��tjdd�Wd�n1sJ0Y|��\}}d|vslJ�dS)Nr2Fr�cSsdS)Nr(r%r�r%r%r&r�2r}z:TestPassphrase.test_passphrase_new_empty.<locals>.<lambda>)Zallow_emptyzmust not be blank)	�delenvr�r�rkrlrrr�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�;r}z<TestPassphrase.test_passphrase_new_retries.<locals>.<lambda>)
r��iterr�r�r�rkrlrrr��r+r-r%r�r&�test_passphrase_new_retries8s
z*TestPassphrase.test_passphrase_new_retriescCsdttd��vsJ�dS)NZsecret)�reprrr9r%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���)rkrlr�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�packbrkrlrr��unpack_and_verify_archiver�r%r%r&�test_missing_when_requiredRs

(z"TestTAM.test_missing_when_requiredcCsZt�i�}d|_|�|�\}}|iks*J�|r2J�|�|�\}}}|iksNJ�|rVJ�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�rkrlrr�r�r�r%r%r&�test_unknown_type_when_requiredcs��(z'TestTAM.test_unknown_type_when_requiredcCsbt�dddii�}d|_|�|�\}}|iks2J�|r:J�|�|�\}}}|iksVJ�|r^J�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�rkrlr��r+r6r��excr�r%r%r&�test_invalid_manifest|s
�zTestTAM.test_invalid_manifestcCsFt�d|i�}t�|��|�|�Wd�n1s80YdSr�)rr�rkrlr�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�rkrlrr�rr�)r+r6r�r�rAr�r�r%r%r&�test_wrong_types�s ��
(zTestTAM.test_wrong_typescCsxddi}|j|dd�}|�d�s$J�t�|�}|dddksBJ�|�|�\}}|sXJ�|d	d
kshJ�d|vstJ�dS)N�foo�bar�manifest��context���tam�type�HKDF_HMAC_SHA512rG�bar)�pack_and_authenticate_metadata�
startswithr�unpackbr�)r+r6rAr�r�r�r%r%r&�test_round_trip_manifest�s
z TestTAM.test_round_trip_manifestcCszddi}|j|dd�}|�d�s$J�t�|�}|dddksBJ�|�|�\}}}|sZJ�|d	d
ksjJ�d|vsvJ�dS)Nr�r��archiver�r�r�r�r�rGr�)r�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�}|�d�s$J�tj|td�}t|d|�dksJJ�|d|d	d
�td
�|d|<t|d|�dks�J�t�|�}t�	t
��|�|�Wd�n1s�0YdS)Nr�r�r�r�r��Zobject_hookr�r�rr=)r�r�rr�rrTrDr�rkrlrr��r+r6r�rAr�r�r%r%r&�test_tampered_manifest�s$
zTestTAM.test_tampered_manifestcCs�ddi}|j|dd�}|�d�s$J�tj|td�}t|d|�dksJJ�|d|d	d
�td
�|d|<t|d|�dks�J�t�|�}t�	t
��|�|�Wd�n1s�0YdS)Nr�r�r�r�r�r�r�r�rr=)r�r�rr�rrTrDr�rkrlrr�r�r%r%r&�test_tampered_archive�s$
zTestTAM.test_tampered_archive)r r!r"rkr�r6r�r�r�r�r�ZmarkZparametrizerrr�rr�rDr�r�r�r�r�r%r%r%r&r�CsH
	

�

�




��



r�))r�Zos.pathr`r�r#ZbinasciirrrkZ
crypto.keyrrrrr	r
rrr
rrrrrrrrrrZcrypto.low_levelrrrZhelpersrrrrrr�r�r%r%r%r&�<module>s.()