
    ,h                        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      xs g Ze eddddd i      xs g z  Z ee      D ].  \  ZZ e ee!      refdZ" e#ed ez  e"        e#ed ez  e"       0  G d! d"ej*                        Z$ G d# d$ej*                        Z%i fd%Z&e'd&k(  rd' Z( ejR                  d()       yy)*    )print_functionN)	unhexlify)list_test_cases)load_test_vectorsload_test_vectors_wycheproof)tobytesbchr)AES)SHAKE128SHA256)strxorc                 ^    t        j                  t        |             j                  |      S )N)data)r   newr   read)taglengths     a/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/SelfTest/Cipher/test_GCM.pyget_tag_randomr   .   s     <<WS\*//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y)GcmTestskey_128   	nonce_128   r      c                 l   t        j                  | j                  t         j                  | j                        }t        dd      }|j                  |      }t        j                  | j                  t         j                  | j                        }|j                  |      }| j                  ||       y )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   sv    s||4==IK2^^Bs||4==InnR S!r   c                    t        j                  | j                  t         j                         t        j                  | j                  t         j                  | j                        }|j                  | j                        }t        j                  | j                  t         j                  | j                        }| j                  ||j                  | j                               y Nr   )r
   r   r   r"   r#   r$   r   r&   )r'   r(   r*   s      r   
test_noncezGcmTests.test_nonceA   s    cll+s||T]]C^^DII&s||4==IV^^DII67r   c                     | j                  t        t        j                  | j                  t        j
                  d       y )Ntest12345678r   )assertRaises	TypeErrorr
   r   r   r"   r'   s    r   test_nonce_must_be_bytesz!GcmTests.test_nonce_must_be_bytesK   s,    )SWWdllCLL / 	 	1r   c                 R   | j                  t        t        j                  | j                  t        j
                  d       t        dd      D ]X  }t        j                  | j                  t        j
                  t        d      |z        }|j                  t        d             Z y )Nr   r      r   )	r2   
ValueErrorr
   r   r   r"   ranger	   r$   )r'   xr(   s      r   test_nonce_lengthzGcmTests.test_nonce_lengthO   su    *cggt||S\\ # 	 	% q# 	$AWWT\\3<<tAw{KFNN47#	$r   c                     t        j                  | j                  t         j                  | j                        }| j                  |j                  t         j                         y 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**CNN;r   c                    t        j                  | j                  t         j                  | j                        }| j                  |j                  | j                         t        j                  | j                  t         j                        j                  }t        j                  | j                  t         j                        j                  }| j                  t        |      d       | j                  ||       y )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t}}5 s||4::s||4::Vb)FF+r   c                    | j                  t        t        j                  | j                  t        j
                  | j                  d       | j                  t        t        j                  | j                  t        j
                  | j                  d       t        j                  | j                  t        j
                  | j                  d       y )N   )r    unknownF)r    	use_aesni)r2   r3   r
   r   r   r"   r#   r4   s    r   test_unknown_parametersz GcmTests.test_unknown_parametersf   s    )SWWdllCLL--	,)SWWdllCLL $q 	 	:
 	cll$--	!r   c                     dD ]`  }t        j                  | j                  t         j                  | j                        } t        ||      d      }| j                  |d       b y )Nr$   r%   r   r   )r
   r   r   r"   r#   getattrr&   )r'   funcr(   results       r   test_null_encryption_decryptionz(GcmTests.test_null_encryption_decryptionq   sR    ( 	*DWWT\\3<<t}}MF*WVT*3/FVS)	*r   c                    t        j                  | j                  t         j                  | j                        }|j                  d       | j                  t        |j                  d       t        j                  | j                  t         j                  | j                        }|j                  d       | j                  t        |j
                  d       y )Nr   r   )	r
   r   r   r"   r#   r$   r2   r3   r%   r>   s     r   test_either_encrypt_or_decryptz'GcmTests.test_either_encrypt_or_decryptw   s    s||4==Is)V^^S9s||4==Is)V^^S9r   c                 p   t        j                  | j                  t         j                  | j                        }| j                  t        |j                  d       t        j                  | j                  t         j                  | j                        }| j                  t        |j                  d       y )Nr   ztest1234567890-*)	r
   r   r   r"   r#   r2   r3   r$   r%   r>   s     r   test_data_must_be_bytesz GcmTests.test_data_must_be_bytes   sl    s||4==I)V^^5HIs||4==I)V^^5HIr   c                     | j                  t        t        j                  | j                  t        j
                  | j                  d       | j                  t        t        j                  | j                  t        j
                  | j                  d       t        dd      D ]v  }t        j                  | j                  t        j
                  | j                  |      }|j                  | j                        \  }}| j                  t        |      |       x t        j                  | j                  t        j
                  | j                        }|j                  | j                        \  }}| j                  t        |      d       y )N   )r    mac_len      r   r   )r2   r8   r
   r   r   r"   r#   r9   encrypt_and_digestr   r&   rA   )r'   rW   r(   _macs        r   test_mac_lenzGcmTests.test_mac_len   s   *cggt||S\\ $q 	 	:*cggt||S\\ $t 	 	= Q' 	0GWWT\\3<<t}}%,.F..tyy9FAsSXw/		0 s||4==I**49953S2&r   c                    ddl m} t        j                  | j                  t        j
                  | j                        }|j                  | j                        \  }} ||d      }t        j                  | j                  t        j
                  | j                        }| j                  t        |j                  ||       y )Nr   )strxor_cr   r7   )Crypto.Util.strxorr_   r
   r   r   r"   r#   rZ   r   r2   r8   decrypt_and_verify)r'   r_   r(   r*   r\   invalid_macs         r   test_invalid_maczGcmTests.test_invalid_mac   s    /s||4==I++DII6CsD)s||4==I*f&?&?%	'r   c                    t        j                  | j                  t         j                  | j                        }|j                         }| j                  |j                         t        |             t        j                  | j                  t         j                  | j                        }|j                  |       y r.   )
r
   r   r   r"   r#   	hexdigestr&   digestr   	hexverify)r'   r(   mac_hexs      r   test_hex_maczGcmTests.test_hex_mac   su    s||4==I""$)G*<=s||4==I!r   c                    t        dd      }t        dd      }t        j                  | j                  t        j                  | j
                        }|j                  |       |j                  |      \  }}d }dD ]  }t        j                  | j                  t        j                  | j
                        } |||      D ]  }|j                  |        d}	 |||      D ]  }|	|j                  |      z  }	 | j                  ||	       |j                  |        dD ]  }t        j                  | j                  t        j                  | j
                        } |||      D ]  }|j                  |        d}
 |||      D ]  }|
|j                  |      z  }
 | j                  ||
       | j                  |j                         |        y )Nzauthenticated data   r!   r   c                 `    t        dt        |       |      D cg c]
  }| |||z     c}S c c}w )Nr   )r9   rA   )r   chunk_lengthis      r   break_upz.GcmTests.test_message_chunks.<locals>.break_up   s9    49!SY 5" #qD1\>* # # #s   +)
r7      rV   rG   
      r   (   P   r   r   )r   r
   r   r   r"   r#   updaterZ   r%   r&   verifyr$   rf   )r'   	auth_datar!   r(   
ciphertextref_macro   rm   chunkr+   ct2s              r   test_message_chunkszGcmTests.test_message_chunks   s    ##7=	";4	s||4==Ii $77	B
G	#
 @ 
	#LWWT\\3<<t}}MF!)\: %e$%C!*l; -v~~e,,-Y,MM'"
	# @ 
	7LWWT\\3<<t}}MF!)\: %e$%C!)\: -v~~e,,-Z-V]]_g6
	7r   c                    t        | j                        }t        | j                        }t        | j                        }t        | j                        }t	        j
                  | j                  t        j                  | j                        }|j                  | j                         |j                  | j                        }|j                         }t	        j
                  |t        j                  |      }d|d d d|d d |j                  |       d|d d |j                  |      }	d|d d |j                         }
| j                  ||	       | j                  ||
       | j                  |j                  |j                         t        | j                        }t        | j                        }t        | j                        }~t	        j
                  |t        j                  |      }d|d d d|d d |j                  |       d|d d |j                  t        |	      t        |
            }| j                  | j                  |       y Nr   s   rV   )	bytearrayr   r#   r   r
   r   r"   ru   r$   rf   r&   r    ra   )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]]+dii(	DII&''$,,,, $/ 	tyy!__TYY'nn''&,, (* %r
&!y!'	"1//'*%>>#W%h'6 4<<(T]]+dii(	''&,, (* %r
&!y!'	"1,,Yw-?8ATUG,r   c                 "   t        t        | j                              }t        t        | j                              }t        t        | j                              }t        t        | j                              }t        j                  | j                  t
        j                  | j                        }|j                  | j                         |j                  | j                        }|j                         }t        j                  |t
        j                  |      }d|d d d|d d |j                  |       d|d d |j                  |      }	d|d d |j                         }
| j                  ||	       | j                  ||
       | j                  |j                  |j                         t        t        | j                              }t        t        | j                              }t        t        | j                              }~t        j                  |t
        j                  |      }d|d d d|d d |j                  |       d|d d |j                  t        |	      t        |
            }| j                  | j                  |       y r~   )
memoryviewr   r   r#   r   r
   r   r"   ru   r$   rf   r&   r    ra   )r'   key_mvnonce_mv	header_mvdata_mvr   r*   r   r   r   r   r   r   s                r   test_memoryviewzGcmTests.test_memoryview  s    Idll34i67y34	Ytyy12''$,,,, $/ 	tyy!__TYY'nn''&,, (* %r
&!y!'	"1//'*%>>#W%h'6 Idll34i67y34	''&,, (* %r
&!y!'	"1,,Z-@*XBVWG,r   c                    d}t        j                  | j                  t         j                  | j                        }|j                  |      }|j                         }t        d      }t        j                  | j                  t         j                  | j                        }|j                  ||      }| j                  ||       | j                  |d        t        j                  | j                  t         j                  | j                        }|j                  ||      }| j                  ||       | j                  |d        t        j                  | j                  t         j                  | j                        }|j                  ||      \  }}| j                  ||       | j                  |d        | j                  ||       t        j                  | j                  t         j                  | j                        }|j                  |||      }| j                  ||       | j                  |d        y Ns   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555r   r   output)r
   r   r   r"   r#   r$   rf   r   r&   r%   rZ   ra   )r'   r)   r(   r*   r   r   restag_outs           r   test_output_paramzGcmTests.test_output_param4  s   s||4==I^^Bmmo3s||4==InnRn/V$d#s||4==InnRn/V$d#s||4==I00F0CWV$d#g&s||4==I''C'?V$d#r   c                 B   d}t        j                  | j                  t         j                  | j                        }|j                  |      }t        t        d            }t        j                  | j                  t         j                  | j                        }|j                  ||       | j                  ||       t        j                  | j                  t         j                  | j                        }|j                  ||       | j                  ||       y 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^^BIcN+s||4==Ir&)V$s||4==Ir&)V$r   c                    d}d|z  }t        j                  | j                  t         j                  | j                        }|j                  |      }t        j                  | j                  t         j                  | j                        }| j                  t        |j
                  |d|z         t        j                  | j                  t         j                  | j                        }| j                  t        |j                  |d|z         t        |dz
        }t        j                  | j                  t         j                  | j                        }| j                  t        |j
                  ||       t        j                  | j                  t         j                  | j                        }| j                  t        |j                  ||       y )Nr      5r      0r   r7   )r
   r   r   r"   r#   r$   r2   r3   r%   r   r8   )r'   LEN_PTr)   r(   r*   shorter_outputs         r   test_output_param_negzGcmTests.test_output_param_neg`  s6   F]s||4==I^^Bs||4==I)V^^RvNs||4==I)V^^RvN"6A:.s||4==I*fnnbPs||4==I*fnnbPr   N)__name__
__module____qualname__r   r   r#   r   r,   r/   r5   r;   r?   rE   rJ   rP   rR   rT   r]   rc   ri   r|   r   r   r   r   r    r   r   r   r   2   s    Y+Gk2.H&#&D"81$<,	!*:J'&	'"'7R--^--^$:%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y)GcmFSMTestsr   r   r   r   r   r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                        }|j                         }t        j                  | j                  t         j                  | j                        }|j                  |       |j                  |       y r.   )
r
   r   r   r"   r#   r$   r   rf   r%   rv   r'   r(   r*   r\   s       r   -test_valid_init_encrypt_decrypt_digest_verifyz9GcmFSMTests.test_valid_init_encrypt_decrypt_digest_verifyz  s}     s||#}}.^^DII&mmo s||#}}.rcr   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                         }t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  |       y r.   )	r
   r   r   r"   r#   ru   r   rf   rv   r'   r(   r\   s      r   $test_valid_init_update_digest_verifyz0GcmFSMTests.test_valid_init_update_digest_verify  s     s||#}}.dii mmo s||#}}.dii cr   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  | j                        }|j                         }t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  |       |j                  |       y r.   )r
   r   r   r"   r#   ru   r   r$   rf   r%   rv   r   s       r   test_valid_full_pathz GcmFSMTests.test_valid_full_path  s     s||#}}.dii ^^DII&mmo s||#}}.dii rcr   c                     t        j                  | j                  t         j                  | j                        }|j                          y r.   )r
   r   r   r"   r#   rf   r>   s     r   test_valid_init_digestz"GcmFSMTests.test_valid_init_digest  s)    s||4==Ir   c                 .   t        j                  | j                  t         j                  | j                        }|j                         }t        j                  | j                  t         j                  | j                        }|j                  |       y r.   )r
   r   r   r"   r#   rf   rv   r   s      r   test_valid_init_verifyz"GcmFSMTests.test_valid_init_verify  sU    s||4==Immos||4==Icr   c                    dD ]  }d d| j                   | j                   dz   fD ]  }|d }nt        |      }t        j                  | j                  t        j
                  | j                        }||j                  |       t        ||      } || j                           || j                           || j                           || j                            y )NrL   s   333   3r   )	r   rA   r
   r   r   r"   r#   ru   rM   )r'   method_namerw   	assoc_lenr(   methods         r   &test_valid_multiple_encrypt_or_decryptz2GcmFSMTests.test_valid_multiple_encrypt_or_decrypt  s    / 	"K"FDII"ii$.0 "	$ $I #IIs||'+}}6(MM), 5tyy!tyy!tyy!tyy!"	"r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                         }t        d      D ]"  }| j                  ||j                                $ t        j                  | j                  t         j                  | j                        }|j                  | j                         t        d      D ]  }|j                  |        y )Nr      rY   )r
   r   r   r"   r#   ru   r   rf   r9   r&   rv   )r'   r(   	first_macr:   s       r   $test_valid_multiple_digest_or_verifyz0GcmFSMTests.test_valid_multiple_digest_or_verify  s    s||4==Idii MMO	q 	9AY8	9 s||4==Idii q 	%AMM)$	%r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  | j                        \  }}t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                  ||      }| j                  | j                  |       y r.   )
r
   r   r   r"   r#   ru   r   rZ   ra   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dii ++DII6C s||4==Idii &&r3/B'r   c           	      b   dD ]  \  }}dD ]  }t        j                  | j                  t         j                  | j                        }|r|j                  | j                          t        ||      | j                         | j                  t        t        ||      | j                           y )N)rL   )r%   r$   )TFr   )
r
   r   r   r"   r#   ru   r   rM   r2   r3   )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%MM$)),--dii8!!)WV\-J"&))--		-r   c                    dD ]  }t        j                  | j                  t         j                  | j                        }|j                  | j                         |j                          | j                  t        t        ||      | j                         t        j                  | j                  t         j                  | j                        }|j                  | j                          y )N)r$   ru   r   )r
   r   r   r"   r#   r$   r   rf   r2   r3   rM   rZ   )r'   r   r(   s      r   +test_invalid_encrypt_or_update_after_digestz7GcmFSMTests.test_invalid_encrypt_or_update_after_digest  s    . 	1KWWT\\3<<t}}MFNN499%MMOi)E"ii) WWT\\3<<t}}MF%%dii0	1r   c                    t        j                  | j                  t         j                  | j                        }|j                  | j                        }|j                         }dD ]  }t        j                  | j                  t         j                  | j                        }|j                  |       |j                  |       | j                  t        t        ||      | j                         t        j                  | j                  t         j                  | j                        }|j                  ||       | j                  t        t        ||      | j                          y )Nr   )r%   ru   )r
   r   r   r"   r#   r$   r   rf   r%   rv   r2   r3   rM   ra   )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^^DII&mmo. 
	)KWWT\\3<<t}}MFNN2MM#i)E"ii) WWT\\3<<t}}MF%%b#.i)E"ii)
	)r   N)r   r   r   r   r   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   t  s]    Y+Gk2.H&#&D 
"$%
(-	1)r   r   c                       e Zd ZdZg dZeD  cg c]  }|D cg c]  }t        |       c} c}}}} Zd Zyc c}w c c}}}} w )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           	         | j                   D ]  \  }}}}}}t        j                  |t        j                  |t	        |            }|j                  |       |j                  |      \  }}	| j                  ||       | j                  ||	       t        j                  |t        j                  |t	        |            }|j                  |       |j                  ||      }
| j                  ||
        y )N)rW   )	test_vectorsr
   r   r"   rA   ru   rZ   r&   ra   )r'   
assoc_datar)   r*   r\   keyr    r(   r{   mac2r+   s              r   runTestzTestVectors.runTest  s    373D3D 	&/JBS% WWS#,,s3xHFMM*%11"5ICR%S$' WWS#,,s3xHFMM*%++B4CR%	&r   N)r   r   r   __doc__test_vectors_hexr   r   r   ).0tvr:   r   s   0000r   r   r   	  sD    fn` :JJJ22.aYq\.JL& /Js   	A
<A
A
r   c                       e Zd ZdZd Zd Zy)TestVectorsGueronKrasnovzClass exercising the GCM test vectors found in
       'The fragility of AES-GCM authentication algorithm', Gueron, Krasnov
       https://eprint.iacr.org/2013/157.pdfc                    t        d      }t        d      }t        d      }t        d      }t        j                  |t        j                  |      j	                  |      }| j                  ||j                                y )N 3da6c536d6295579c0959a7043efb5032b926197d34e091ef722db94ڠ00000000000000000000000000000000000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f 69dd586555ce3fcc89663801a71d957b)r   r
   r   r"   ru   r&   rf   )r'   r   ivaadrf   r(   s         r   test_1zTestVectorsGueronKrasnov.test_1  sk    :;23 ; <
 =>cllB/66s;1r   c                 `   t        d      }t        d      }t        d      }t        d      }t        d      }t        d      }t        j                  |t        j                  |      j	                  |      }|j                  |      \  }}	| j                  ||       | j                  ||	       y )N 843ffcf5d2b72694d19ed01d01249412dbcca32ebf9b804617c3aa9e@00000000000000000000000000000000101112131415161718191a1b1c1d1e1fڠ000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4fڠ6268c6fa2a80b2d137467f092f657ac04d89be2beaa623d61b5a868c8f03ff95d3dcee23ad2f1ab3a6c80eaf4b140eb05de3457f0fbc111a6b43d0763aa422a3013cf1dc37fe417d1fbfc449b75d4cc5 3b629ccfbc1119b7319e1dce2cd6fd6d)r   r
   r   r"   ru   rZ   r&   )
r'   r   r
  r  r)   r*   rf   r(   r{   digest2s
             r   test_2zTestVectorsGueronKrasnov.test_2  s    :;23 ; < ; <
  ; <
 =>cllB/66s;004WS!)r   N)r   r   r   r   r  r  r   r   r   r  r    s    /2*r   r  c                       e Zd Zd Zy)NISTTestVectorsGCMc                 R    d| _         t        j                  j                  | |       y )NT	use_clmulunittestTestCase__init__r'   as     r   r  zNISTTestVectorsGCM.__init__  s    ""4+r   Nr   r   r   r  r   r   r   r  r        ,r   r  c                       e Zd Zd Zy)NISTTestVectorsGCM_no_clmulc                 R    d| _         t        j                  j                  | |       y )NFr  r  s     r   r  z$NISTTestVectorsGCM_no_clmul.__init__
  s    ""4+r   Nr   r   r   r   r#  r#    r!  r   r#  )Cipherr
   zgcmDecrypt128.rspzGCM decryptcountc                     t        |       S Nintr:   s    r   <lambda>r,    
    CF r   zgcmEncryptExtIV128.rspzGCM encryptc                     t        |       S r(  r)  r+  s    r   r,  r,    r-  r   c                    |j                   | _        t        j                  |j                  t        j
                  |j                  t        |j                        | j                        }|j                  |j                         d|j                  v r7| j                  t        |j                  |j                   |j                         y |j                  |j                   |j                        }| j#                  ||j$                         y )N)r    rW   r  FAIL)descdescriptionr
   r   r   r"   r
  rA   r   r  ru   r  othersr2   r8   ra   r*   r&   r)   )r'   r  r(   r)   s       r   single_testr4  !  s    77RUU%([DNNLbffRYYj&*C*C"$%%1 **255"&&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
y	)
TestVectorsWycheproofc                 l    t         j                  j                  |        || _        || _        d| _        y )NNone)r  r  r  _wycheproof_warnings_extra_params_id)r'   wycheproof_warningsextra_paramss      r   r  zTestVectorsWycheproof.__init__4  s-    ""4($7!)r   c                 6    d }t        dddd|i      | _        y )Nc                     | d   dz  S )NtagSize   r   )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'   rC  s     r   setUpzTestVectorsWycheproof.setUp:  s'    	) //G/B/?:Dj9QSr   c                     | j                   S r(  )r;  r4   s    r   shortDescriptionz&TestVectorsWycheproof.shortDescriptionD  s    xxr   c                     |j                   r>| j                  r1dd l}|j                  d| j                  d|j
                  d       y y y )Nr   zWycheproof warning: z ())warningr9  warningswarnr;  comment)r'   r  rM  s      r   rN  zTestVectorsWycheproof.warnG  s4    ::$33MM488RZZPQ 4:r   c                 x   dt        |j                        z   | _        	 t        j                  |j
                  t        j                  |j                  fd|j                  i| j                  }|j                  |j                         |j                  |j                        \  }}|j                   rJ| j#                  ||j$                         | j#                  ||j&                         | j)                  |       y y # t        $ r1}t        |j                        dk(  rdt        |      v rY d }~y |d }~ww xY w)NzWycheproof Encrypt GCM Test #rW   r   Nonce cannot be empty)stridr;  r
   r   r   r"   r
  rE  r:  r8   rA   ru   r  rZ   msgvalidr&   r*   r   rN  )r'   r  r(   er*   r   s         r   test_encryptz"TestVectorsWycheproof.test_encryptL  s    2SZ?	WWRVVS\\255 ."++ .,,.F 	bff++BFF3C88R'S"&&)IIbM   	255zQ#:c!f#DG	s   AC? ?	D9%D42D44D9c                    dt        |j                        z   | _        	 t        j                  |j
                  t        j                  |j                  fd|j                  i| j                  }|j                  |j                         	 |j                  |j                  |j                         }|j"                  sJ | j%                  ||j&                         | j)                  |       y # t        $ r1}t        |j                        dk(  rdt        |      v rY d }~y |d }~ww xY w# t        $ r |j"                  rJ Y y w xY w)NzWycheproof Decrypt GCM Test #rW   r   rQ  )rR  rS  r;  r
   r   r   r"   r
  rE  r:  r8   rA   ru   r  ra   r*   r   rU  r&   rT  rN  )r'   r  r(   rV  r)   s        r   test_decryptz"TestVectorsWycheproof.test_decrypt^  s    2SZ?	WWRVVS\\255 ."++ .,,.F 	bff	**255"&&9B 88OR(IIbM  	255zQ#:c!f#DG	  	 xxx	 s0   AC- &D* -	D'6%D" D""D'*EEc                 2   dt        |j                        z   | _        t        |j                        dk(  st        |j
                        dk  ry t        j                  |j                  t        j                  |j                  fd|j                  i| j                  }|j                  |j                         t        |j
                  dt        |j
                        dz
  z  dz         }| j                  t         |j"                  ||j$                         y )Nz%Wycheproof Corrupt Decrypt GCM Test #r   r7   rW          )rR  rS  r;  rA   r
  r*   r
   r   r   r"   rE  r:  ru   r  r   r2   r8   ra   r   )r'   r  r(   
ct_corrupts       r   test_corrupt_decryptz*TestVectorsWycheproof.test_corrupt_decrypts  s    :SZGruu:?c"%%j1nruu *bkk *((*bffBEE7c"%%j1n#=#GH
*f&?&?RVVTr   c                     | j                   D ]5  }| j                  |       | j                  |       | j                  |       7 y r(  )r  rW  rY  r^  )r'   r  s     r   r   zTestVectorsWycheproof.runTest}  s?    '' 	*Bb!b!%%b)	*r   N)r   r   r   r  rG  rI  rN  rW  rY  r^  r   r   r   r   r6  r6  2  s-    SR
$*U*r   r6  c                       e Zd Zd Zd Zy)TestVariableLengthc                 P    t         j                  j                  |        || _        y r(  )r  r  r  r:  )r'   r=  s     r   r  zTestVariableLength.__init__  s    ""4()r   c                    d}t        j                         }t        d      D ]  }dj                  |      j	                  d      }t        |      |z  }t        j                  |t        j                  fd|i| j                  }|j                  |      \  }}|j                  |       |j                  |        | j                  |j                         d       y )Ns   0000000000000000   z{0:04d}zutf-8r    @7b7eb1ffbe67a2e53a912067c0ec8e62ebc7ce4d83490ea7426941349811bdf4)r   r   r9   formatencoder	   r
   r"   r:  rZ   ru   r&   re   )	r'   r   hr   r    r   r(   r*   r   s	            r   r   zTestVariableLength.runTest  s    JJLCj 	F$$V,33G<E<&(DWWS#,,ReRt?Q?QRF//5GBHHRLHHSM	 	(jkr   N)r   r   r   r  r   r   r   r   ra  ra    s    *lr   ra  c                    ddl m} | j                  d      }g }|t        t              z  }|t        t
              z  }|t               gz  }|t        |      gz  }|t        t              z  }|t               gz  }| j                  d      r|t        t              z  }|j                         rF|t        |d      gz  }|t        d      gz  }| j                  d      r|t        t              z  }|S t        d       |S )Nr   )_cpu_featuresr<  
slow_testsF)r  z%Skipping test of PCLMULDQD in AES GCM)Crypto.Utilrj  getr   r   r   r   r6  r  ra  r  
have_clmulr#  print)configrj  r<  testss       r   	get_testsrr    s    ) **%:;E	_X&&E	_[))E	km_E	#$7899E	_566E	 "##Ezz,!344!'(;uMNN$u566::l#_%@AAE L 	56Lr   __main__c                  >    t        j                  t                      y r(  )r  	TestSuiterr  r   r   r   suiterv    s    9;'r   rv  )defaultTest)*
__future__r   r  binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   r   Crypto.Util.py3compatr   r	   Crypto.Cipherr
   Crypto.Hashr   r   r`   r   r   r  r   r   r   r  r  r#  test_vectors_nist	enumerateidxr  
isinstancerR  r4  setattrr6  ra  rr  r   rv  mainr   r   r   <module>r     s  > &   5 R /  ( %8Qx   QD
R)(## R)jK&(## K&\'*x00 '*T,** ,,("3"3 , &)+% "23	5 ; 9;	  &)0% "23	5 ; 9;	;  *+ GGC "c ( 	C='S+F)G.P*H-- P*fl** l*  4 z(HMMg& r   