o
    µ+ke  ć                   @   s`   d dl mZ ddlmZmZmZ ddlmZmZmZ ddlm	Z	 ddl
mZ G dd	 d	eZd
S )é    )Śhexlifyé   )ŚAES256_CTR_HMAC_SHA256ŚUNENCRYPTEDŚIntegrityError)Śbytes_to_longŚbytes_to_intŚlong_to_bytes)Śhkdf_hmac_sha512é   )ŚBaseTestCasec                   @   s\   e Zd 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
dd Zdd ZdS )ŚCryptoTestCasec                 C   s   |   tdd” d S )Ns      r   )Śassert_equalr   ©Śself© r   ś9usr/lib/python3.10/site-packages/borg/testsuite/crypto.pyŚtest_bytes_to_int   s   z CryptoTestCase.test_bytes_to_intc                 C   s$   |   tdd” |   tdd” d S )Ns          r   )r   r   r	   r   r   r   r   Śtest_bytes_to_long   s   z!CryptoTestCase.test_bytes_to_longc                 C   sT   d}d}d}t d d |dd}|j||d}|  ||| ” | |”}|  ||” d S )Nó    s   datas   headeré   )Ś
header_len©Śheader)r   Śencryptr   Śdecrypt)r   ŚivŚdatar   ŚcsZenvelopeZgot_datar   r   r   Śtest_UNENCRYPTED   s   
zCryptoTestCase.test_UNENCRYPTEDc                    s8  d}d}d}d}d}t |||ddd  j||d}|dd }|dd	 }|d	d
 }|d
d  }	|  t|d” |  t|d” |  t|d” |  t|	d” |    ” d” t ||t|dd   |”}
|  ||
” |    ” d” t ||t|dd |d d
 d |dd   |  t fdd” d S )Nó    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYó    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   ó   foofoofoofoofoofoofoofoofoofooó   Br   ©r   Z
aad_offsetr   é!   é)   s   42s@   af90b488b0cc4a8f768fe2d6814fa65aec66b148135e54f7d4d29a27f22f57a8ó   0000000000000000ó<   c6efb702de12498f34a2c2bbc8149e759996d08bf6dc5c610aefc0c3a466r   ó    é*   c                      ó
      ”S ©N©r   r   ©r   Zhdr_mac_iv_cdata_corruptedr   r   Ś<lambda><   ó   
 z<CryptoTestCase.test_AES256_CTR_HMAC_SHA256.<locals>.<lambda>©	r   r   r   r   Znext_ivŚlenr   Zassert_raisesr   ©r   Zmac_keyZenc_keyr   r   r   Zhdr_mac_iv_cdataŚhdrZmacZcdataZpdatar   r.   r   Śtest_AES256_CTR_HMAC_SHA256    s2   
’z*CryptoTestCase.test_AES256_CTR_HMAC_SHA256c                    s8  d}d}d}d}d}t |||ddd  j||d	}|dd }|dd
 }|d
d }|dd  }	|  t|d” |  t|d” |  t|d” |  t|	d” |    ” d” t ||t|dd   |”}
|  ||
” |    ” d” t ||t|dd |d d d |dd   |  t fdd” d S )Nr    r!   r   r"   s   4Vé   r   r$   r   é#   é+   s   123456s@   7659a915d9927072ef130258052351a17ef882692893c3850dd798c03d2dd138r'   r(   r   r)   c                      r+   r,   r-   r   r.   r   r   r/   Y   r0   z@CryptoTestCase.test_AES256_CTR_HMAC_SHA256_aad.<locals>.<lambda>r1   r3   r   r.   r   Śtest_AES256_CTR_HMAC_SHA256_aad>   s2   
’z.CryptoTestCase.test_AES256_CTR_HMAC_SHA256_aadc                 C   s@   d}t  d”}t  d”}d}t||||}|t  d”ksJ d S )Ns   Ś000102030405060708090a0b0cŚf0f1f2f3f4f5f6f7f8f9r*   ZT832390086cda71fb47625bb5ceb168e4c8e26a1a16ed34d9fc7fe92c1481579338da362cb8d9f925d7cb©ŚbytesŚfromhexr
   ©r   ZikmZsaltŚinfoŚlZokmr   r   r   Śtest_hkdf_hmac_sha512^   s   

z$CryptoTestCase.test_hkdf_hmac_sha512c                 C   óF   t  d”}t  d”}t  d”}d}t||||}|t  d”ks!J d S )NZ 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4fZ 606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafZ b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfefféR   Z¤ce6c97192805b346e6161e821ed165673b84f400a2b514b2fe23d84cd189ddf1b695b48cbd1c8388441137b3ce28f16aa64ba33ba466b24df6cfcb021ecff235f6a2056ce3af1de44d572097a8505d9e7a93r<   r?   r   r   r   Śtest_hkdf_hmac_sha512_2g   s   


z&CryptoTestCase.test_hkdf_hmac_sha512_2c                 C   ó:   t  d”}d }d}d}t||||}|t  d”ksJ d S )NZ,0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0br   r*   ZTf5fa02b18298a72a8c23898a8703472c6eb179dc204c03425c970e3b164bf90fff22d04836d0e2343bacr<   r?   r   r   r   Śtest_hkdf_hmac_sha512_3t   ó   
z&CryptoTestCase.test_hkdf_hmac_sha512_3c                 C   rC   )NZ0b0b0b0b0b0b0b0b0b0b0br:   r;   r*   ZT7413e8997e020610fbf6823f2ce14bff01875db1ca55f68cfcf3954dc8aff53559bd5e3028b080f7c068r<   r?   r   r   r   Śtest_hkdf_hmac_sha512_4}   s   


z&CryptoTestCase.test_hkdf_hmac_sha512_4c                 C   rF   )NZ,0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0cr   r*   ZT1407d46013d98bc6decefcfee55f0f90b0c7f63d68eb1a80eaf07e953cfc0a3a5240a155d6e4daa965bbr<   r?   r   r   r   Śtest_hkdf_hmac_sha512_5   rH   z&CryptoTestCase.test_hkdf_hmac_sha512_5N)Ś__name__Ś
__module__Ś__qualname__r   r   r   r5   r9   rB   rE   rG   rI   rJ   r   r   r   r   r      s    
 			r   N)Śbinasciir   Zcrypto.low_levelr   r   r   r   r   r	   r
   Ś r   r   r   r   r   r   Ś<module>   s   