HEX
Server: LiteSpeed
System: Linux s3.sitechai.com 4.18.0-553.51.1.lve.1.el8.x86_64 #1 SMP Wed May 14 14:34:57 UTC 2025 x86_64
User: workzeni (2217)
PHP: 8.1.32
Disabled: mail, show_source, system, shell_exec, passthru, exec, eval, shell
Upload Files
File: //usr/lib64/python3.6/site-packages/borg/testsuite/__pycache__/key.cpython-36.opt-1.pyc
3

�i�O�@s.ddlZddlZddlZddlZddlmZmZddlZddl	m
Z
mZmZddl	m
Z
mZmZmZmZmZmZmZddl	mZmZddl	mZmZmZmZddl	mZdd	l	mZdd
lmZmZddl m!Z!dd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�num_aes_blocks)�IntegrityError)�Location)�
StableDict)�get_security_dir)�msgpackc@seZdZGdd�d�Zdj�Zeejddd��Z	ed�Z
dj�Zej
d	�Zej
d
�Zejdd��Zejeeeeeeefd
�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@seZdZeej�d�ZdS)zTestKey.MockArgs�N)�__name__�
__module__�__qualname__r�tempfileZmkstemp�location�r&r&�/usr/lib64/python3.6/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|jdt|��|S)NZ
BORG_KEYS_DIR)�setenv�str)�self�request�monkeypatch�tmpdirr&r&r'�keys_dirEszTestKey.keys_dir)ZparamscCs"|jdd�|jj|j�|j��S)N�BORG_PASSPHRASE�test)r*Zparam�create�MockRepositoryr()r,r-r.r&r&r'�keyJs
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#�rawr6r7r&r&r&r'�	_LocationXsr9� cCsdS)Nr&)r,r&r&r'�get_free_noncebsz%TestKey.MockRepository.get_free_noncecCsdS)Nr&)r,Znext_unreservedZstart_noncer&r&r'�commit_nonce_reservationesz/TestKey.MockRepository.commit_nonce_reservationcCs
||_dS)N)�key_data)r,�datar&r&r'�save_keyhszTestKey.MockRepository.save_keycCs|jS)N)r=)r,r&r&r'�load_keykszTestKey.MockRepository.load_keyN)
r!r"r#r9Z	_location�bytes�idr�id_strr;r<r?r@r&r&r&r'r4Wsr4cCstjdd�}d}dS)Nsfoo)rr3)r,r5�chunkr&r&r'�test_plaintextnszTestKey.test_plaintextc	CsV|jdd�tj|j�|j��}|jd�}|jd�}|j|�}tj|j�|�}d}dS)Nr1r2sABCsfoo)r*rr3r4r(�encrypt�
extract_nonce�detect)	r,r.r0r5�manifest�	manifest2�iv�key2rDr&r&r'�test_keyfilets


zTestKey.test_keyfilec
Csb|jdd�|j�}ttjjt|j�d�d��}|jd�WdQRXt	j
||j��}|jd�}dS)Nr1r2Znonce�wZ0000000000002000sABC)
r*r4�open�os�path�joinrrC�writerr3r(rF)r,r.r0�
repository�fdr5r>r&r&r'�&test_keyfile_nonce_rollback_protection�s
z.TestKey.test_keyfile_nonce_rollback_protectionc
Cs�|jd�}|jdt|��|jdd�tj|j�|j��}d}|j|�}|j|�}tj	|j�|�}|j
�tjt
��tj	|j�|�WdQRXdS)N�keyfile�
BORG_KEY_FILEr1ZtestkfsABC)rRr*r+rr3r4r(�id_hashrFrH�remove�pytest�raises�FileNotFoundError)r,r/r.rWr5rDZchunk_idZchunk_cdatar&r&r'�test_keyfile_kfenv�s


zTestKey.test_keyfile_kfenvc
CsJ|jd�jd��}|j|j�WdQRX|jdd�tj|j�|j�}dS)NrWrNr1�
passphrase)	rRrOrS�keyfile2_key_filer*rrHr4�keyfile2_cdata)r,r.r0rUr5r&r&r'�
test_keyfile2�s
zTestKey.test_keyfile2cCs^|jd�}|jd��}|j|j�WdQRX|jdt|��|jdd�tj|j�|j	�}dS)NrWrNrXr1r_)
rRrOrSr`r*r+rrHr4ra)r,r/r.rWrUr5r&r&r'�test_keyfile2_kfenv�s
zTestKey.test_keyfile2_kfenvc
CsJ|jd�jd��}|j|j�WdQRX|jdd�tj|j�|j�}dS)NrWrNr1r_)	rRrOrS�keyfile_blake2_key_filer*r
rHr4�keyfile_blake2_cdata)r,r.r0rUr5r&r&r'�test_keyfile_blake2�s
zTestKey.test_keyfile_blake2c	CsR|jdd�tj|j�d�}|jd�}|jd�}|j|�}tj|j�|�}d}dS)Nr1r2sABCsfoo)r*r	r3r4rFrGrH)	r,r0r.r5rIrJrKrLrDr&r&r'�test_passphrase�s


zTestKey.test_passphrasec
Cs>t|�}||dN<tjt��|jd|�WdQRXdS)Nr �)�	bytearrayr[r\r�decrypt)r,r5r>�offsetr&r&r'�
_corrupt_byte�szTestKey._corrupt_bytecCs�|jd�jd��}|j|j�WdQRX|jdd�tj|j�|j�}|j}x"t	t
|��D]}|j|||�qZWtj
t��2t|j�}t|j|��}d|d<|j||�WdQRXdS)NrWrNr1r_r�)rRrOrSr`r*rrHr4ra�range�lenrlr[r\rrirYrj)r,r.r0rUr5r>�irBr&r&r'�test_decrypt_integrity�s
zTestKey.test_decrypt_integritycCs8|j}d}|j|�}t|�}|j||�}|jd|�}dS)Nsfoo)rTrFrrHrj)r,r5rT�	plaintext�	encryptedZidentified_key_classZ
loaded_keyZ	decryptedr&r&r'�test_roundtrip�s
zTestKey.test_roundtripcCsd}|j|�}dS)Ns	123456789)rF)r,r5rrrsr&r&r'�test_decrypt_decompress�s
zTestKey.test_decrypt_decompresscCs�d}|j|�}|j||�t|�}|ddN<tjt��|j||�WdQRX|d}tjt��|j||�WdQRXdS)Ns	123456789rr �1)rYZ	assert_idrir[r\r)r,r5rrrBZ
id_changedZplaintext_changedr&r&r'�test_assert_id�s
zTestKey.test_assert_idcCs2|jdd�tj|j�|j��}d}|j|�}dS)Nr1r2s	123456789)r*r
r3r4r(rF)r,r.r5rr�
authenticatedr&r&r'�test_authenticated_encrypts

z"TestKey.test_authenticated_encryptcCs2|jdd�tj|j�|j��}d}|j|�}dS)Nr1r2s	123456789)r*rr3r4r(rF)r,r.r5rrrxr&r&r'�!test_blake2_authenticated_encrypts

z)TestKey.test_blake2_authenticated_encryptN)+r!r"r#r(�stripr`r�re�subraZkeyfile2_idrdrA�fromhexreZkeyfile_blake2_idr[�fixturer0rr
rrr
rrr5r4rErMrVr^rbrcrfrgrlrqrtrurwryrzr&r&r&r'rsB

	

	
rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestPassphrasecCs||jtddd��|jdd�tj�|j�\}}|jdd�tj�}|j�\}}|jtddd��tj�|j�\}}dS)N�getpasscSsdS)Nu	12aöäür&)�promptr&r&r'�<lambda>szATestPassphrase.test_passphrase_new_verification.<locals>.<lambda>ZBORG_DISPLAY_PASSPHRASE�no�yescSsdS)Nz1234/@=r&)r�r&r&r'r�*s)�setattrr�r*r�new�
readouterr)r,�capsysr.�out�errr_r&r&r'� test_passphrase_new_verificationsz/TestPassphrase.test_passphrase_new_verificationc
CsP|jdd�|jtddd��tjt��tjdd�WdQRX|j�\}}dS)Nr1Fr�cSsdS)Nr)r&)r�r&r&r'r�2sz:TestPassphrase.test_passphrase_new_empty.<locals>.<lambda>)Zallow_empty)	�delenvr�r�r[r\rrr�r�)r,r�r.r�r�r&r&r'�test_passphrase_new_empty0sz(TestPassphrase.test_passphrase_new_emptyc	sP|jdd�ttd���|jtd�fdd��tjt��tj	�WdQRXdS)Nr1F�r�cstt���S)N)r+�next)r�)�ascending_numbersr&r'r�;sz<TestPassphrase.test_passphrase_new_retries.<locals>.<lambda>)
r��iterrnr�r�r[r\rrr�)r,r.r&)r�r'�test_passphrase_new_retries8s
z*TestPassphrase.test_passphrase_new_retriescCsdS)Nr&)r,r&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
ejjd
ie
fddie
fdefdeff�dd��Zejjd
ie
fddie
fdefdeff�dd��Zejjdied�fed�ifded�fed�dff�dd��Zdd�Zdd�Zejjdd%�d!d"��Zejjdd&�d#d$��ZdS)'�TestTAMcCs |jdd�tjtj�tj��S)Nr1r2)r*rr3rr4r()r,r.r&r&r'r5DszTestTAM.keycCsRd}tjt��|j|�WdQRXd}tjttjf��|j|�WdQRXdS)Ns
����foobars���)r[r\r�unpack_and_verify_manifest�
ValueErrorrZUnpackException)r,r5�blobr&r&r'�test_unpack_futureIszTestTAM.test_unpack_futurecCsNtji�}tjt��|j|�WdQRXtjt��|j|�WdQRXdS)N)r�packbr[r\rr��unpack_and_verify_archive)r,r5r�r&r&r'�test_missing_when_requiredRs

z"TestTAM.test_missing_when_requiredcCs2tji�}d|_|j|�\}}|j|�\}}}dS)NF)rr��tam_requiredr�r�)r,r5r��unpacked�verified�_r&r&r'�test_missingYs

zTestTAM.test_missingcCsVtjdddii�}tjt��|j|�WdQRXtjt��|j|�WdQRXdS)N�tam�type�HMAC_VOLLBIT)rr�r[r\rr�r�)r,r5r�r&r&r'�test_unknown_type_when_requiredcsz'TestTAM.test_unknown_type_when_requiredcCs:tjdddii�}d|_|j|�\}}|j|�\}}}dS)Nr�r�r�F)rr�r�r�r�)r,r5r�r�r�r�r&r&r'�test_unknown_typenszTestTAM.test_unknown_typeztam, excr���Ni�c	Cs2tjd|i�}tj|��|j|�WdQRXdS)Nr�)rr�r[r\r�)r,r5r��excr�r&r&r'�test_invalid_manifest|s
zTestTAM.test_invalid_manifestc	Cs2tjd|i�}tj|��|j|�WdQRXdS)Nr�)rr�r[r\r�)r,r5r�r�r�r&r&r'�test_invalid_archive�s
zTestTAM.test_invalid_archivez
hmac, salt�@cCs�dd||d�i}|d}|dkr&|d=|dkr4|d=tj|�}tjt��|j|�WdQRXtjt��|j|�WdQRXdS)Nr�ZHKDF_HMAC_SHA512)r��hmac�saltr�r�)rr�r[r\rr�rr�)r,r5r�r�r>r�r�r&r&r'�test_wrong_types�s

zTestTAM.test_wrong_typescCs2ddi}|j|dd�}tj|�}|j|�\}}dS)N�foo�barsmanifest)�context)�pack_and_authenticate_metadatar�unpackbr�)r,r5r>r�r�r�r&r&r'�test_round_trip_manifest�s

z TestTAM.test_round_trip_manifestcCs4ddi}|j|dd�}tj|�}|j|�\}}}dS)Nr�r�sarchive)r�)r�rr�r�)r,r5r>r�r�r�r�r&r&r'�test_round_trip_archive�s

zTestTAM.test_round_trip_archive�which�hmac�saltc	Csvddi}|j|dd�}tj|td�}|d|dd�td�|d|<tj|�}tjt��|j	|�WdQRXdS)	Nr�r�smanifest)r�)�object_hookstamrr:)
r�rr�rrAr�r[r\rr�)r,r5r�r>r�r�r&r&r'�test_tampered_manifest�s$
zTestTAM.test_tampered_manifestc	Csvddi}|j|dd�}tj|td�}|d|dd�td�|d|<tj|�}tjt��|j	|�WdQRXdS)	Nr�r�sarchive)r�)r�stamrr:)
r�rr�rrAr�r[r\rr�)r,r5r�r>r�r�r&r&r'�test_tampered_archive�s$
zTestTAM.test_tampered_archive)r�r�)r�r�)r!r"r#r[rr5r�r�r�r�r�ZmarkZparametrizerrr�rr�rAr�r�r�r�r�r&r&r&r'r�Cs2	

	
	




r�))r�Zos.pathrPr|r$Zbinasciirrr[Z
crypto.keyrrrrr	r
rrr
rrrrrrrrrrZcrypto.low_levelrrZhelpersrrrrrrr�r�r&r&r&r'�<module>s,()