U
    Mf$                     @   sZ  d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ dd	 Zd d
lmZ G dd deZd dlmZ G dd deZdZdZeD ] ZefddZeede e qeD ] ZefddZeede e q[[dZeD ] ZefddZeede e qG dd de jZi fddZedkrVdd Ze j d d! dS )"    N)	unhexlify)list_test_cases)tobytes)AESDES3DES)SHAKE128)load_test_vectors_wycheproofc                 C   s   t jt| d|S )N)data)r   newr   read)taglength r   G/tmp/pip-unpacked-wheel-l_0d1exj/Cryptodome/SelfTest/Cipher/test_OFB.pyget_tag_random(   s    r   )BlockChainingTestsc                   @   s(   e Zd ZejZejZdd Zdd Z	dS )OfbTestsc                    s   dgd }t j| jt j| jdd  fdd|D }t j| jt j| jdd | d| d| t j| jt j| jdd  fd	d|D }t j| jt j| jdd | d| d| d S )
N   7777777d      Zsegment_sizec                    s   g | ]}  |qS r   encrypt.0xcipherr   r   
<listcomp>8   s     z4OfbTests.test_unaligned_data_128.<locals>.<listcomp>       c                    s   g | ]}  |qS r   r   r   r   r   r   r   =   s     )r   r   Zkey_128MODE_CFBZiv_128assertEqualjoinr   selfZ
plaintextsZciphertextsr   r   r   test_unaligned_data_1284   s    
z OfbTests.test_unaligned_data_128c                    s   dgd }t j| jt j| jdd  fdd|D }t j| jt j| jdd | d| d| t j| jt j| jdd  fd	d|D }t j| jt j| jdd | d| d| d S )
Nr   r   r   r   c                    s   g | ]}  |qS r   r   r   r   r   r   r   D   s     z3OfbTests.test_unaligned_data_64.<locals>.<listcomp>r    @   c                    s   g | ]}  |qS r   r   r   r   r   r   r   I   s     )r   r   Zkey_192r"   Ziv_64r#   r$   r   r%   r   r   r   test_unaligned_data_64A   s    
zOfbTests.test_unaligned_data_64N)
__name__
__module____qualname__r   MODE_OFBaes_moder   	des3_moder'   r)   r   r   r   r   r   -   s   r   )NistBlockChainingVectorsc                   @   s   e Zd ZejZejZejZ	dS )NistOfbVectorsN)
r*   r+   r,   r   r-   r.   r   Zdes_moder   r/   r   r   r   r   r1   P   s   r1   )zOFBGFSbox128.rspzOFBGFSbox192.rspzOFBGFSbox256.rspzOFBKeySbox128.rspzOFBKeySbox192.rspzOFBKeySbox256.rspzOFBVarKey128.rspzOFBVarKey192.rspzOFBVarKey256.rspzOFBVarTxt128.rspzOFBVarTxt192.rspzOFBVarTxt256.rspzOFBMMT128.rspzOFBMMT192.rspzOFBMMT256.rsp)zOFBMCT128.rspzOFBMCT192.rspzOFBMCT256.rspc                 C   s   |  | d S N)Z_do_kat_aes_testr&   	file_namer   r   r   new_funcq   s    r5   Z	test_AES_c                 C   s   |  | d S r2   )Z_do_mct_aes_testr3   r   r   r   r5   v   s    )zTOFBMMT2.rspzTOFBMMT3.rspzTOFBinvperm.rspzTOFBpermop.rspzTOFBsubtab.rspzTOFBvarkey.rspzTOFBvartext.rspc                 C   s   |  | d S r2   )Z_do_tdes_testr3   r   r   r   r5      s    Z
test_TDES_c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	SP800TestVectorszPClass exercising the OFB test vectors found in Section F.4
    of NIST SP 800-3Ac                 C   s   d}d}d}d}t |}t |}t |}t |}t|tj|}| ||| t|tj|}| ||| t|tj|}| ||d d |d d  t|tj|}| ||d d |d d  d S )Nڀ6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710Z3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5eZ 2b7e151628aed2a6abf7158809cf4f3c 000102030405060708090a0b0c0d0e0fr   r   r   r-   r#   r   Zdecryptr&   	plaintextZ
ciphertextkeyZivr   r   r   r   test_aes_128   s     "zSP800TestVectors.test_aes_128c                 C   s   d}d}d}d}t |}t |}t |}t |}t|tj|}| ||| t|tj|}| ||| t|tj|}| ||d d |d d  t|tj|}| ||d d |d d  d S )Nr7   Zcdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9acc92aZ08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br8   r9   r:   r;   r   r   r   test_aes_192   s     "zSP800TestVectors.test_aes_192c                 C   s   d}d}d}d}t |}t |}t |}t |}t|tj|}| ||| t|tj|}| ||| t|tj|}| ||d d |d d  t|tj|}| ||d d |d d  d S )Nr7   Zdc7e84bfda79164b7ecd8486985d38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8be740e484Z@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4r8   r9   r:   r;   r   r   r   test_aes_256   s     "zSP800TestVectors.test_aes_256N)r*   r+   r,   __doc__r>   r?   r@   r   r   r   r   r6      s   r6   c                 C   s6   g }|t t7 }| dr&|t t7 }|t t7 }|S )NZ
slow_tests)r   r   getr1   r6   )configtestsr   r   r   	get_tests   s    
rE   __main__c                   C   s   t t S r2   )unittestZ	TestSuiterE   r   r   r   r   <lambda>   r    rH   suite)ZdefaultTest)!rG   binasciir   ZCryptodome.SelfTest.st_commonr   ZCryptodome.Util.py3compatr   ZCryptodome.Cipherr   r   r   ZCryptodome.Hashr   ZCryptodome.SelfTest.loaderr	   r   Z#Cryptodome.SelfTest.Cipher.test_CBCr   r   r0   r1   Znist_aes_kat_mmt_filesZnist_aes_mct_filesr4   r5   setattrZnist_tdes_filesZTestCaser6   rE   r*   rI   mainr   r   r   r   <module>   s:   !
V	
