
    ¿ig                        d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZ d dlmZmZ d d	lmZ d
 Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z eddddd i          pg Ze eddddd i          pg z  Z ee          D ]7\  ZZ e ee!          refdZ" e#ed ez  e"            e#ed ez  e"           8 G d! d"ej                  Z$ G d# d$ej                  Z%i fd%Z&e'd&k    rd' Z( ej)        d()           dS dS )*    )print_functionN	unhexlify)list_test_cases)load_test_vectorsload_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128SHA256)strxorc                 l    t          j        t          |                                         |          S )N)data)r   newr	   read)taglengths     _/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Cipher/test_GCM.pyget_tag_randomr   .   s)    <WS\\***//777    c                       e Zd Z edd          Z edd          Z edd          Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )GcmTestskey_128   	nonce_128   r      c                 R   t          j        | j        t           j        | j                  }t          dd          }|                    |          }t          j        | j        t           j        | j                  }|                    |          }|                     ||           d S )Nnonce	plaintexti@  )	r   r   r   MODE_GCMnonce_96r   encryptdecryptassertEqual)selfcipherptctpt2s        r   test_loopback_128zGcmTests.test_loopback_1288   s    s|4=IIIK22^^Bs|4=IIInnR  S!!!!!r   c                    t          j        | j        t           j                   t          j        | j        t           j        | j                  }|                    | j                  }t          j        | j        t           j        | j                  }|                     ||                    | j                             d S Nr    )r   r   r   r#   r$   r%   r   r'   )r(   r)   r+   s      r   
test_noncezGcmTests.test_nonceA   s    cl+++s|T]CC^^DI&&s|4=IIIV^^DI6677777r   c                 v    |                      t          t          j        | j        t          j        d           d S )Ntest12345678r    )assertRaises	TypeErrorr   r   r   r#   r(   s    r   test_nonce_must_be_bytesz!GcmTests.test_nonce_must_be_bytesK   s:    )SWdlCL / 	 	1 	1 	1 	1 	1r   c                 L   |                      t          t          j        | j        t          j        d           t          dd          D ]Z}t          j        | j        t          j        t          d          |z            }|                    t          d                     [d S )Nr   r       r   )	r3   
ValueErrorr   r   r   r#   ranger
   r%   )r(   xr)   s      r   test_nonce_lengthzGcmTests.test_nonce_lengthO   s    *cgt|S\ # 	 	% 	% 	% q# 	$ 	$AWT\3<tAww{KKKFNN477####	$ 	$r   c                     t          j        | j        t           j        | j                  }|                     |j        t           j                   d S r/   )r   r   r   r#   r$   r'   
block_sizer(   r)   s     r   test_block_size_128zGcmTests.test_block_size_128X   s?    s|4=III*CN;;;;;r   c                    t          j        | j        t           j        | j                  }|                     |j        | j                   t          j        | j        t           j                  j        }t          j        | j        t           j                  j        }|                     t          |          d           |                     ||           d S )Nr    r   )	r   r   r   r#   r$   r'   r!   lenassertNotEqual)r(   r)   nonce1nonce2s       r   test_nonce_attributezGcmTests.test_nonce_attribute\   s    s|4=IIIt}555 s|44:s|44:Vb)))FF+++++r   c                 T   |                      t          t          j        | j        t          j        | j        d           |                      t          t          j        | j        t          j        | j        d           t          j        | j        t          j        | j        d           d S )N   )r!   unknownF)r!   	use_aesni)r3   r4   r   r   r   r#   r$   r5   s    r   test_unknown_parametersz GcmTests.test_unknown_parametersf   s    )SWdlCL-	, 	, 	,)SWdlCL $q 	 	: 	: 	:
 	cl$-	! 	! 	! 	! 	! 	!r   c                     dD ]\}t          j        | j        t           j        | j                  } t          ||          d          }|                     |d           ]d S )Nr%   r&   r    r   )r   r   r   r#   r$   getattrr'   )r(   funcr)   results       r   test_null_encryption_decryptionz(GcmTests.test_null_encryption_decryptionq   si    ( 	* 	*DWT\3<t}MMMF*WVT**3//FVS))))	* 	*r   c                    t          j        | j        t           j        | j                  }|                    d           |                     t          |j        d           t          j        | j        t           j        | j                  }|                    d           |                     t          |j        d           d S )Nr    r   )	r   r   r   r#   r$   r%   r3   r4   r&   r?   s     r   test_either_encrypt_or_decryptz'GcmTests.test_either_encrypt_or_decryptw   s    s|4=IIIs)V^S999s|4=IIIs)V^S99999r   c                 6   t          j        | j        t           j        | j                  }|                     t          |j        d           t          j        | j        t           j        | j                  }|                     t          |j        d           d S )Nr    ztest1234567890-*)	r   r   r   r#   r$   r3   r4   r%   r&   r?   s     r   test_data_must_be_bytesz GcmTests.test_data_must_be_bytes   sv    s|4=III)V^5HIIIs|4=III)V^5HIIIIIr   c                    |                      t          t          j        | j        t          j        | j        d           |                      t          t          j        | j        t          j        | j        d           t          dd          D ]n}t          j        | j        t          j        | j        |          }|                    | j	                  \  }}| 
                    t          |          |           ot          j        | j        t          j        | j                  }|                    | j	                  \  }}| 
                    t          |          d           d S )N   )r!   mac_len      r    r   )r3   r9   r   r   r   r#   r$   r:   encrypt_and_digestr   r'   rB   )r(   rX   r)   _macs        r   test_mac_lenzGcmTests.test_mac_len   s7   *cgt|S\ $q 	 	: 	: 	:*cgt|S\ $t 	 	= 	= 	= Q'' 	0 	0GWT\3<t}%,. . .F..ty99FAsSXXw//// s|4=III**49553S2&&&&&r   c                 T   ddl m} t          j        | j        t          j        | j                  }|                    | j                  \  }} ||d          }t          j        | j        t          j        | j                  }| 	                    t          |j        ||           d S )Nr   )strxor_cr    r8   )Cryptodome.Util.strxorr`   r   r   r   r#   r$   r[   r   r3   r9   decrypt_and_verify)r(   r`   r)   r+   r]   invalid_macs         r   test_invalid_maczGcmTests.test_invalid_mac   s    333333s|4=III++DI66ChsD))s|4=III*f&?%	' 	' 	' 	' 	'r   c                 n   t          j        | j        t           j        | j                  }|                                }|                     |                                t          |                     t          j        | j        t           j        | j                  }|	                    |           d S r/   )
r   r   r   r#   r$   	hexdigestr'   digestr   	hexverify)r(   r)   mac_hexs      r   test_hex_maczGcmTests.test_hex_mac   s    s|4=III""$$)G*<*<===s|4=III!!!!!r   c                    t          dd          }t          dd          }t          j        | j        t          j        | j                  }|                    |           |                    |          \  }}d }dD ]}t          j        | j        t          j        | j                  } |||          D ]}|                    |           d}	 |||          D ]}|	|                    |          z  }	| 	                    ||	           |
                    |           dD ]}t          j        | j        t          j        | j                  } |||          D ]}|                    |           d}
 |||          D ]}|
|                    |          z  }
| 	                    ||
           | 	                    |                                |           d S )Nzauthenticated data   r"   r    c                 \      fdt          dt                               D             S )Nc                 *    g | ]}||z            S  ro   ).0ichunk_lengthr   s     r   
<listcomp>zBGcmTests.test_message_chunks.<locals>.break_up.<locals>.<listcomp>   s3     # # #qD1\>)* # # #r   r   )r:   rB   )r   rr   s   ``r   break_upz.GcmTests.test_message_chunks.<locals>.break_up   sJ    # # # # #E!SYY 5" 5" # # # #r   )
r8      rW   rH   
      r   (   P   r   r   )r   r   r   r   r#   r$   updater[   r&   r'   verifyr%   rg   )r(   	auth_datar"   r)   
ciphertextref_macrt   rr   chunkr,   ct2s              r   test_message_chunkszGcmTests.test_message_chunks   s    ##7==	";44	s|4=IIIi   $77	BB
G	# 	# 	#
 @ 
	# 
	#LWT\3<t}MMMF!)\:: % %e$$$$C!*l;; - -v~~e,,,Y,,,MM'"""" @ 
	7 
	7LWT\3<t}MMMF!)\:: % %e$$$$C!)\:: - -v~~e,,,Z---V]]__g6666
	7 
	7r   c                    t          | j                  }t          | j                  }t          | j                  }t          | j                  }t	          j        | j        t          j        | j                  }|                    | j                   |                    | j                  }|	                                }t	          j        |t          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |                    |          }	d|d d<   |	                                }
| 
                    ||	           | 
                    ||
           | 
                    |j        |j                   t          | j                  }t          | j                  }t          | j                  }~t	          j        |t          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |                    t          |	          t          |
                    }| 
                    | j        |           d S Nr    s   rW   )	bytearrayr   r$   r   r   r   r#   rz   r%   rg   r'   r!   rb   )r(   key_banonce_ba	header_badata_bacipher1r+   r   cipher2ct_testtag_testcipher4pt_tests                r   test_bytearrayzGcmTests.test_bytearray   s:    4<((T]++di((	DI&&'$,, $/ / / 	ty!!!__TY''nn'&, (* * * %rr
&!y!!!'	"1"//'**%>>##W%%%h'''666 4<((T]++di((	'&, (* * * %rr
&!y!!!'	"1",,Yw-?-?8ATATUUG,,,,,r   c                 v   t          t          | j                            }t          t          | j                            }t          t          | j                            }t          t          | j                            }t          j        | j        t
          j        | j                  }|                    | j                   |	                    | j                  }|
                                }t          j        |t
          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |	                    |          }	d|d d<   |
                                }
|                     ||	           |                     ||
           |                     |j        |j                   t          t          | j                            }t          t          | j                            }t          t          | j                            }~t          j        |t
          j        |          }d|d d<   d|d d<   |                    |           d|d d<   |                    t          |	          t          |
                    }|                     | j        |           d S r   )
memoryviewr   r   r$   r   r   r   r#   rz   r%   rg   r'   r!   rb   )r(   key_mvnonce_mv	header_mvdata_mvr   r+   r   r   r   r   r   r   s                r   test_memoryviewzGcmTests.test_memoryview  sr    Idl3344i6677y3344	Yty1122'$,, $/ / / 	ty!!!__TY''nn'&, (* * * %rr
&!y!!!'	"1"//'**%>>##W%%%h'''666 Idl3344i6677y3344	'&, (* * * %rr
&!y!!!'	"1",,Z-@-@*XBVBVWWG,,,,,r   c                 t   d}t          j        | j        t           j        | j                  }|                    |          }|                                }t          d          }t          j        | j        t           j        | j                  }|                    ||          }|                     ||           |                     |d            t          j        | j        t           j        | j                  }|	                    ||          }|                     ||           |                     |d            t          j        | j        t           j        | j                  }|
                    ||          \  }}|                     ||           |                     |d            |                     ||           t          j        | j        t           j        | j                  }|                    |||          }|                     ||           |                     |d            d S Ns   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555r    r   output)r   r   r   r#   r$   r%   rg   r   r'   r&   r[   rb   )r(   r*   r)   r+   r   r   restag_outs           r   test_output_paramzGcmTests.test_output_param4  s   s|4=III^^Bmmoo3s|4=IIInnRn//V$$$d###s|4=IIInnRn//V$$$d###s|4=III00F0CCWV$$$d###g&&&s|4=III''C'??V$$$d#####r   c                 "   d}t          j        | j        t           j        | j                  }|                    |          }t          t          d                    }t          j        | j        t           j        | j                  }|                    ||           |                     ||           t          j        | j        t           j        | j                  }|	                    ||           |                     ||           d S r   )
r   r   r   r#   r$   r%   r   r   r'   r&   )r(   r*   r)   r+   r   s        r   test_output_param_memoryviewz%GcmTests.test_output_param_memoryviewQ  s    s|4=III^^BIcNN++s|4=IIIr&)))V$$$s|4=IIIr&)))V$$$$$r   c                 4   d}d|z  }t          j        | j        t           j        | j                  }|                    |          }t          j        | j        t           j        | j                  }|                     t          |j        |d|z             t          j        | j        t           j        | j                  }|                     t          |j        |d|z             t          |dz
            }t          j        | j        t           j        | j                  }|                     t          |j        ||           t          j        | j        t           j        | j                  }|                     t          |j        ||           d S )Nr      5r       0r   r8   )r   r   r   r#   r$   r%   r3   r4   r&   r   r9   )r(   LEN_PTr*   r)   r+   shorter_outputs         r   test_output_param_negzGcmTests.test_output_param_neg`  sH   F]s|4=III^^Bs|4=III)V^RvNNNs|4=III)V^RvNNN"6A:..s|4=III*fnbPPPs|4=III*fnbPPPPPr   N)__name__
__module____qualname__r   r   r$   r   r-   r0   r6   r<   r@   rF   rK   rQ   rS   rU   r^   rd   rj   r   r   r   r   r   r   ro   r   r   r   r   2   so       nY++G~k2..H>&#&&D" " "8 8 81 1 1$ $ $< < <, , ,	! 	! 	!* * *: : :J J J' ' '&	' 	' 	'" " "'7 '7 '7R-- -- --^-- -- --^$ $ $:% % %Q Q Q Q Qr   r   c                       e Zd Z edd          Z edd          Z edd          Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd ZdS )GcmFSMTestsr   r   r   r   r   r   c                 b   t          j        | j        t           j        | j                  }|                    | j                  }|                                }t          j        | j        t           j        | j                  }|                    |           |	                    |           d S r/   )
r   r   r   r#   r$   r%   r   rg   r&   r{   r(   r)   r+   r]   s       r   -test_valid_init_encrypt_decrypt_digest_verifyz9GcmFSMTests.test_valid_init_encrypt_decrypt_digest_verifyz  s     s|#}. . .^^DI&&mmoo s|#}. . .rcr   c                 l   t          j        | j        t           j        | j                  }|                    | j                   |                                }t          j        | j        t           j        | j                  }|                    | j                   |                    |           d S r/   )	r   r   r   r#   r$   rz   r   rg   r{   r(   r)   r]   s      r   $test_valid_init_update_digest_verifyz0GcmFSMTests.test_valid_init_update_digest_verify  s     s|#}. . .di   mmoo s|#}. . .di   cr   c                    t          j        | j        t           j        | j                  }|                    | j                   |                    | j                  }|                                }t          j        | j        t           j        | j                  }|                    | j                   |	                    |           |
                    |           d S r/   )r   r   r   r#   r$   rz   r   r%   rg   r&   r{   r   s       r   test_valid_full_pathz GcmFSMTests.test_valid_full_path  s     s|#}. . .di   ^^DI&&mmoo s|#}. . .di   rcr   c                     t          j        | j        t           j        | j                  }|                                 d S r/   )r   r   r   r#   r$   rg   r?   s     r   test_valid_init_digestz"GcmFSMTests.test_valid_init_digest  s/    s|4=IIIr   c                    t          j        | j        t           j        | j                  }|                                }t          j        | j        t           j        | j                  }|                    |           d S r/   )r   r   r   r#   r$   rg   r{   r   s      r   test_valid_init_verifyz"GcmFSMTests.test_valid_init_verify  s_    s|4=IIImmoos|4=IIIcr   c                    dD ]}d d| j         | j         dz   fD ]}|d }nt          |          }t          j        | j        t          j        | j                  }||                    |           t          ||          } || j                     || j                     || j                     || j                    d S )NrM   s   333   3r    )	r   rB   r   r   r   r#   r$   rz   rN   )r(   method_namer|   	assoc_lenr)   methods         r   &test_valid_multiple_encrypt_or_decryptz2GcmFSMTests.test_valid_multiple_encrypt_or_decrypt  s    / 	" 	"K"FDI"i$.0 " "	$ $II #IIs|'+}6 6 6(MM),,, 55ty!!!ty!!!ty!!!ty!!!!"	" 	"r   c                    t          j        | j        t           j        | j                  }|                    | j                   |                                }t          d          D ]*}| 	                    ||                                           +t          j        | j        t           j        | j                  }|                    | j                   t          d          D ]}|
                    |           d S )Nr       rZ   )r   r   r   r#   r$   rz   r   rg   r:   r'   r{   )r(   r)   	first_macr;   s       r   $test_valid_multiple_digest_or_verifyz0GcmFSMTests.test_valid_multiple_digest_or_verify  s    s|4=IIIdi   MMOO	q 	9 	9AY8888 s|4=IIIdi   q 	% 	%AMM)$$$$	% 	%r   c                    t          j        | j        t           j        | j                  }|                    | j                   |                    | j                  \  }}t          j        | j        t           j        | j                  }|                    | j                   |                    ||          }| 	                    | j        |           d S r/   )
r   r   r   r#   r$   rz   r   r[   rb   r'   )r(   r)   r+   r]   r*   s        r   0test_valid_encrypt_and_digest_decrypt_and_verifyz<GcmFSMTests.test_valid_encrypt_and_digest_decrypt_and_verify  s    s|4=IIIdi   ++DI66C s|4=IIIdi   &&r3//B'''''r   c           	      H   dD ]\  }}dD ]}t          j        | j        t           j        | j                  }|r|                    | j                    t          ||          | j                   |                     t          t          ||          | j                   d S )N)rM   )r&   r%   )TFr    )
r   r   r   r#   r$   rz   r   rN   r3   r4   )r(   method1_namemethod2_nameassoc_data_presentr)   s        r   #test_invalid_mixing_encrypt_decryptz/GcmFSMTests.test_invalid_mixing_encrypt_decrypt  s    +C 		- 		-&L,&3 - -"s|'+}6 6 6% -MM$),,,---di888!!)WV\-J-J"&)- - - --		- 		-r   c                    dD ]}t          j        | j        t           j        | j                  }|                    | j                   |                                 |                     t          t          ||          | j                   t          j        | j        t           j        | j                  }|                    | j                   d S )N)r%   rz   r    )r   r   r   r#   r$   r%   r   rg   r3   r4   rN   r[   )r(   r   r)   s      r   +test_invalid_encrypt_or_update_after_digestz7GcmFSMTests.test_invalid_encrypt_or_update_after_digest  s    . 	1 	1KWT\3<t}MMMFNN49%%%MMOOOi)E)E"i) ) ) WT\3<t}MMMF%%di0000	1 	1r   c                    t          j        | j        t           j        | j                  }|                    | j                  }|                                }dD ]}t          j        | j        t           j        | j                  }|                    |           |	                    |           | 
                    t          t          ||          | j                   t          j        | j        t           j        | j                  }|                    ||           | 
                    t          t          ||          | j                   d S )Nr    )r&   rz   )r   r   r   r#   r$   r%   r   rg   r&   r{   r3   r4   rN   rb   )r(   r)   r+   r]   r   s        r   +test_invalid_decrypt_or_update_after_verifyz7GcmFSMTests.test_invalid_decrypt_or_update_after_verify  s&   s|4=III^^DI&&mmoo. 
	) 
	)KWT\3<t}MMMFNN2MM#i)E)E"i) ) ) WT\3<t}MMMF%%b#...i)E)E"i) ) ) )
	) 
	)r   N)r   r   r   r   r   r$   r   r   r   r   r   r   r   r   r   r   r   r   ro   r   r   r   r   t  s        nY++G~k2..H>&#&&D         
  " " "$% % %
( 
( 
(- - -	1 	1 	1) ) ) ) )r   r   c                   8    e Zd ZdZg dZd eD             Zd ZdS )TestVectorszClass exercising the GCM test vectors found in
       http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf)) r   r    58e2fccefa7e3061367f1d57a4e7455a 00000000000000000000000000000000000000000000000000000000)r   r    0388dace60b6a392f328c2b971b2fe78 ab6e47d42cec13bdf53a67b21257bddfr   r   )r   ڀd9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255ڀ42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985 4d5c2af327cd64a62cf35abd2ba6fab4 feffe9928665731c6d6a8f9467308308cafebabefacedbaddecaf888)(feedfacedeadbeeffeedfacedeadbeefabaddad2xd9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39x42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091 5bc94fbc3221a5db94fae95ae7121a47r   r   )r   r   x61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598 3612d2e79e3b0785561be14aaca2fccbr   cafebabefacedbad)r   r   x8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5 619cc5aefffe0bfa462af43c1699d050r   x9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b)r   r   r    cd33b28ac773f74ba00ed1f3125724350000000000000000000000000000000000000000000000000r   )r   r    98e7247c07f0fe411c267e4384b0f600 2ff58d80033927ab8ef4d4587514f0fbr   r   )r   r   ڀ3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710acade256 9924a7c8587336bfb118024db8674a140feffe9928665731c6d6a8f9467308308feffe9928665731cr   )r   r   x3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710 2519498e80f1478f37ba55bd6d27618cr   r   )r   r   x0f10f599ae14a154ed24b36e25324db8c566632ef2bbb34f8347280fc4507057fddc29df9a471f75c66541d4d4dad1c9e93a19a58e8b473fa0f062f7 65dcc57fcf623a24094fcca40d3533f8r   r   )r   r   xd27e88681ce3243c4830165a8fdcf9ff1de9a1d8e6b447ef6ef7b79828666e4581e79012af34ddd9e2f037589b292db3e67c036745fa22e7e9b7373b dcf566ff291c25bbb8568fc3d376a6d9r   r   )r   r   r    530f8afbc74536b9a963b4f1c4cb738b@0000000000000000000000000000000000000000000000000000000000000000r   )r   r    cea7403d4d606b6e074ec5d3baf39d18 d0d1c8a799996bf0265b98b5d48ab919r   r   )r   r   ڀ522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad b094dac5d93471bdec1a502270e3cc6c@feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308r   )r   r   x522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662 76fc6ece0f4e1768cddf8853bb2d551br   r   )r   r   xc3762df1ca787d32ae47c13bf19844cbaf1ae14d0b976afac52ff7d79bba9de0feb582d33934a4f0954cc2363bc73f7862ac430e64abe499f47c9b1f 3a337dbf46a792c45e454913fe2ea8f2r   r   )r   r   x5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3f a44a8266ee1c8eb0c8b5d4cf5ae9f19ar   r   c                 &    g | ]}d  |D             S )c                 ,    g | ]}t          |          S ro   r   )rp   r;   s     r   rs   z!TestVectors.<listcomp>.<listcomp>  s    ...aYq\\...r   ro   )rp   tvs     r   rs   zTestVectors.<listcomp>  s'    JJJ2..2...JJJr   c           	         | j         D ]\  }}}}}}t          j        |t          j        |t	          |                    }|                    |           |                    |          \  }}	|                     ||           |                     ||	           t          j        |t          j        |t	          |                    }|                    |           |                    ||          }
|                     ||
           d S )N)rX   )	test_vectorsr   r   r#   rB   rz   r[   r'   rb   )r(   
assoc_datar*   r+   r]   keyr!   r)   r   mac2r,   s              r   runTestzTestVectors.runTest  s   373D 	& 	&/JBS% WS#,s3xxHHHFMM*%%%11"55ICR%%%S$''' WS#,s3xxHHHFMM*%%%++B44CR%%%%	& 	&r   N)r   r   r   __doc__test_vectors_hexr  r  ro   r   r   r   r   	  s\        f fn n n` KJ9IJJJL& & & & &r   r   c                       e Zd ZdZd Zd ZdS )TestVectorsGueronKrasnovzClass exercising the GCM test vectors found in
       'The fragility of AES-GCM authentication algorithm', Gueron, Krasnov
       https://eprint.iacr.org/2013/157.pdfc                 4   t          d          }t          d          }t          d          }t          d          }t          j        |t          j        |                              |          }|                     ||                                           d S )N 3da6c536d6295579c0959a7043efb5032b926197d34e091ef722db94ڠ00000000000000000000000000000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f 69dd586555ce3fcc89663801a71d957b)r   r   r   r#   rz   r'   rg   )r(   r  ivaadrg   r)   s         r   test_1zTestVectorsGueronKrasnov.test_1  s    :;;233 ; < <
 =>>clB//66s;;11111r   c                    t          d          }t          d          }t          d          }t          d          }t          d          }t          d          }t          j        |t          j        |                              |          }|                    |          \  }}	|                     ||           |                     ||	           d S )N 843ffcf5d2b72694d19ed01d01249412dbcca32ebf9b804617c3aa9e@00000000000000000000000000000000101112131415161718191a1b1c1d1e1fڠ000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4fڠ6268c6fa2a80b2d137467f092f657ac04d89be2beaa623d61b5a868c8f03ff95d3dcee23ad2f1ab3a6c80eaf4b140eb05de3457f0fbc111a6b43d0763aa422a3013cf1dc37fe417d1fbfc449b75d4cc5 3b629ccfbc1119b7319e1dce2cd6fd6d)r   r   r   r#   rz   r[   r'   )
r(   r  r  r  r*   r+   rg   r)   r   digest2s
             r   test_2zTestVectorsGueronKrasnov.test_2  s    :;;233 ; < < ; < <
  ; < <
 =>>clB//66s;;0044WS!!!)))))r   N)r   r   r   r  r  r  ro   r   r   r	  r	    s<        / /2 2 2* * * * *r   r	  c                       e Zd Zd ZdS )NISTTestVectorsGCMc                 T    d| _         t          j                            | |           d S )NT	use_clmulunittestTestCase__init__r(   as     r   r"  zNISTTestVectorsGCM.__init__  s(    ""4+++++r   Nr   r   r   r"  ro   r   r   r  r    #        , , , , ,r   r  c                       e Zd Zd ZdS )NISTTestVectorsGCM_no_clmulc                 T    d| _         t          j                            | |           d S )NFr  r#  s     r   r"  z$NISTTestVectorsGCM_no_clmul.__init__
  s(    ""4+++++r   Nr%  ro   r   r   r(  r(    r&  r   r(  )Cipherr   zgcmDecrypt128.rspzGCM decryptcountc                      t          |           S Nintr;   s    r   <lambda>r1        CFF r   zgcmEncryptExtIV128.rspzGCM encryptc                      t          |           S r-  r.  r0  s    r   r1  r1    r2  r   c                    |j         | _        t          j        |j        t          j        |j        t          |j                  | j	                  }|
                    |j                   d|j        v r.|                     t          |j        |j        |j                   d S |                    |j        |j                  }|                     ||j                   d S )N)r!   rX   r  FAIL)descdescriptionr   r   r  r#   r  rB   r   r  rz   r  othersr3   r9   rb   r+   r'   r*   )r(   r   r)   r*   s       r   single_testr9  !  s    7RU%([[DNL L LbfRYj&*C"$%1 1 1 1 1 **25"&99BR'''''r   ztest_%dc                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestVectorsWycheproofc                 n    t           j                            |            || _        || _        d| _        d S )NNone)r   r!  r"  _wycheproof_warnings_extra_params_id)r(   wycheproof_warningsextra_paramss      r   r"  zTestVectorsWycheproof.__init__4  s4    ""4((($7!)r   c                 @    d }t          dddd|i          | _        d S )Nc                     | d         dz  S )NtagSize   ro   )groups    r   
filter_tagz/TestVectorsWycheproof.setUp.<locals>.filter_tag<  s    #q((r   )r*  
wycheproofzaes_gcm_test.jsonzWycheproof GCMtag_size)	group_tag)r   r   )r(   rH  s     r   setUpzTestVectorsWycheproof.setUp:  sA    	) 	) 	) //G/B/?:Dj9QS S Sr   c                     | j         S r-  )r@  r5   s    r   shortDescriptionz&TestVectorsWycheproof.shortDescriptionD  s	    xr   c                 ~    |j         r3| j        r.dd l}|                    d| j        d|j        d           d S d S d S )Nr   zWycheproof warning: z ())warningr>  warningswarnr@  comment)r(   r   rR  s      r   rS  zTestVectorsWycheproof.warnG  sd    : 	R$3 	ROOOMMM4888RZZZPQQQQQ	R 	R 	R 	Rr   c                 F   dt          |j                  z   | _        	 t          j        |j        t          j        |j        fd|j        i| j	        }nC# t          $ r6}t          |j                  dk    rdt          |          v rY d }~d S |d }~ww xY w|                    |j                   |                    |j                  \  }}|j        rM|                     ||j                   |                     ||j                   |                     |           d S d S )NzWycheproof Encrypt GCM Test #rX   r   Nonce cannot be empty)stridr@  r   r   r  r#   r  rJ  r?  r9   rB   rz   r  r[   msgvalidr'   r+   r   rS  )r(   r   r)   er+   r   s         r   test_encryptz"TestVectorsWycheproof.test_encryptL  s,   2SZZ?	WRVS\25 . ."+ .,. .FF 	 	 	25zzQ#:c!ff#D#DG	
 	bf++BF33C8 	R'''S"&)))IIbMMMMM	 	s   4A 
B)BBBc                 L   dt          |j                  z   | _        	 t          j        |j        t          j        |j        fd|j        i| j	        }nC# t          $ r6}t          |j                  dk    rdt          |          v rY d }~d S |d }~ww xY w|                    |j                   	 |                    |j        |j                  }|j        sJ |                     ||j                   |                     |           d S # t          $ r |j        rJ Y d S w xY w)NzWycheproof Decrypt GCM Test #rX   r   rV  )rW  rX  r@  r   r   r  r#   r  rJ  r?  r9   rB   rz   r  rb   r+   r   rZ  r'   rY  rS  )r(   r   r)   r[  r*   s        r   test_decryptz"TestVectorsWycheproof.test_decrypt^  sF   2SZZ?	WRVS\25 . ."+ .,. .FF 	 	 	25zzQ#:c!ff#D#DG	
 	bf	**25"&99B 8OOOR(((IIbMMMMM  	  	  	 x	 s/   4A 
B)BBB1 D D#"D#c                    dt          |j                  z   | _        t          |j                  dk    st          |j                  dk     rd S t          j        |j        t          j	        |j        fd|j
        i| j        }|                    |j                   t          |j        dt          |j                  dz
  z  dz             }|                     t           |j        ||j                   d S )Nz%Wycheproof Corrupt Decrypt GCM Test #r   r8   rX          )rW  rX  r@  rB   r  r+   r   r   r  r#   rJ  r?  rz   r  r   r3   r9   rb   r   )r(   r   r)   
ct_corrupts       r   test_corrupt_decryptz*TestVectorsWycheproof.test_corrupt_decrypts  s    :SZZGru::??c"%jj1nnFru * *bk *(* *bfBE7c"%jj1n#=#GHH
*f&?RVTTTTTr   c                     | j         D ]A}|                     |           |                     |           |                     |           Bd S r-  )r   r\  r^  rc  )r(   r   s     r   r  zTestVectorsWycheproof.runTest}  s\    ' 	* 	*Bb!!!b!!!%%b))))	* 	*r   N)r   r   r   r"  rL  rN  rS  r\  r^  rc  r  ro   r   r   r;  r;  2  s          S S S  R R R
  $  *U U U* * * * *r   r;  c                       e Zd Zd Zd ZdS )TestVariableLengthc                 R    t           j                            |            || _        d S r-  )r   r!  r"  r?  )r(   rB  s     r   r"  zTestVariableLength.__init__  s'    ""4((()r   c                    d}t          j                    }t          d          D ]}d                    |                              d          }t          |          |z  }t          j        |t          j        fd|i| j        }|	                    |          \  }}|
                    |           |
                    |           |                     |                                d           d S )Ns   0000000000000000   z{0:04d}zutf-8r!   @7b7eb1ffbe67a2e53a912067c0ec8e62ebc7ce4d83490ea7426941349811bdf4)r   r   r:   formatencoder
   r   r#   r?  r[   rz   r'   rf   )	r(   r  hr   r!   r   r)   r+   r   s	            r   r  zTestVariableLength.runTest  s    JLLCjj 	 	F$$V,,33G<<E<<&(DWS#,RReRt?QRRF//55GBHHRLLLHHSMMMM(jkkkkkr   N)r   r   r   r"  r  ro   r   r   rf  rf    s7        * * *l l l l lr   rf  c                    ddl m} |                     d          }g }|t          t                    z  }|t          t
                    z  }|t                      gz  }|t          |          gz  }|t          t                    z  }|t                      gz  }|                     d          r|t          t                    z  }|                                rV|t          |d          gz  }|t          d          gz  }|                     d          r|t          t                    z  }nt          d           |S )Nr   )_cpu_featuresrA  
slow_testsF)r  z%Skipping test of PCLMULDQD in AES GCM)Cryptodome.Utilro  getr   r   r   r   r;  r	  rf  r  
have_clmulr(  print)configro  rA  testss       r   	get_testsrw    sK   ------ **%:;;E	_X&&&E	_[)))E	kmm_E	#$78899E	_5666E	 ""##Ezz, 5!3444!! 7'(;uMMMNN$u55566::l## 	B_%@AAAE5666Lr   __main__c                  F    t          j        t                                 d S r-  )r   	TestSuiterw  ro   r   r   suiter{    s    9;;'''''r   r{  )defaultTest)*
__future__r   r   binasciir   Cryptodome.SelfTest.st_commonr   Cryptodome.SelfTest.loaderr   r   Cryptodome.Util.py3compatr	   r
   Cryptodome.Cipherr   Cryptodome.Hashr   r   ra   r   r   r!  r   r   r   r	  r  r(  test_vectors_nist	enumerateidxr   
isinstancerW  r9  setattrr;  rf  rw  r   r{  mainro   r   r   <module>r     s  > & % % % % %        9 9 9 9 9 9 V V V V V V V V 3 3 3 3 3 3 3 3 ! ! ! ! ! ! , , , , , , , , ) ) ) ) ) )8 8 8Q Q Q Q Qx  Q Q QD
R) R) R) R) R)(# R) R) R)jK& K& K& K& K&(# K& K& K&\'* '* '* '* '*x0 '* '* '*T, , , , ,* , , ,, , , , ,("3 , , , &%)+% "2"23	5 5 ; 9;	  &&)0% "2"23	5 5 ; 9;	;  y*++ G GGC z"c  ( ( ( ( G	C===G'S+FFFFP* P* P* P* P*H- P* P* P*fl l l l l* l l l*     4 z( ( (HMg&&&&&& r   