mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
	
	
		
			186 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			186 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
|   | /* | ||
|  | Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni, | ||
|  | Joan Daemen, Michaƫl Peeters, Gilles Van Assche and Ronny Van Keer, hereby | ||
|  | denoted as "the implementer". | ||
|  | 
 | ||
|  | For more information, feedback or questions, please refer to our websites: | ||
|  | http://keccak.noekeon.org/ | ||
|  | http://keyak.noekeon.org/ | ||
|  | http://ketje.noekeon.org/ | ||
|  | 
 | ||
|  | To the extent possible under law, the implementer has waived all copyright | ||
|  | and related or neighboring rights to the source code in this file. | ||
|  | http://creativecommons.org/publicdomain/zero/1.0/ | ||
|  | */ | ||
|  | 
 | ||
|  | #if (defined(FullUnrolling)) | ||
|  | #define rounds24 \ | ||
|  |     prepareTheta \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta( 0, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta( 1, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta( 2, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta( 3, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta( 4, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta( 5, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta( 6, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta( 7, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta( 8, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta( 9, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(10, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(11, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(12, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(13, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(14, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(15, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(16, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(17, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(18, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(19, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(20, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(21, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(22, A, E) \ | ||
|  |     thetaRhoPiChiIota(23, E, A) \ | ||
|  | 
 | ||
|  | #define rounds12 \ | ||
|  |     prepareTheta \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(12, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(13, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(14, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(15, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(16, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(17, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(18, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(19, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(20, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(21, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(22, A, E) \ | ||
|  |     thetaRhoPiChiIota(23, E, A) \ | ||
|  | 
 | ||
|  | #elif (Unrolling == 12) | ||
|  | #define rounds24 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=0; i<24; i+=12) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i   , A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+ 1, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+ 2, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+ 3, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+ 4, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+ 5, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+ 6, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+ 7, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+ 8, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+ 9, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+10, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+11, E, A) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #define rounds12 \ | ||
|  |     prepareTheta \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(12, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(13, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(14, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(15, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(16, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(17, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(18, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(19, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(20, A, E) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(21, E, A) \ | ||
|  |     thetaRhoPiChiIotaPrepareTheta(22, A, E) \ | ||
|  |     thetaRhoPiChiIota(23, E, A) \ | ||
|  | 
 | ||
|  | #elif (Unrolling == 6) | ||
|  | #define rounds24 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=0; i<24; i+=6) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i  , A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+3, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+4, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+5, E, A) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #define rounds12 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=12; i<24; i+=6) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i  , A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+3, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+4, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+5, E, A) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #elif (Unrolling == 4) | ||
|  | #define rounds24 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=0; i<24; i+=4) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i  , A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+3, E, A) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #define rounds12 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=12; i<24; i+=4) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i  , A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+3, E, A) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #elif (Unrolling == 3) | ||
|  | #define rounds24 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=0; i<24; i+=3) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i  , A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ | ||
|  |         copyStateVariables(A, E) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #define rounds12 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=12; i<24; i+=3) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i  , A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+2, A, E) \ | ||
|  |         copyStateVariables(A, E) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #elif (Unrolling == 2) | ||
|  | #define rounds24 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=0; i<24; i+=2) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i  , A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #define rounds12 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=12; i<24; i+=2) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i  , A, E) \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i+1, E, A) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #elif (Unrolling == 1) | ||
|  | #define rounds24 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=0; i<24; i++) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i  , A, E) \ | ||
|  |         copyStateVariables(A, E) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #define rounds12 \ | ||
|  |     prepareTheta \ | ||
|  |     for(i=12; i<24; i++) { \ | ||
|  |         thetaRhoPiChiIotaPrepareTheta(i  , A, E) \ | ||
|  |         copyStateVariables(A, E) \ | ||
|  |     } \ | ||
|  | 
 | ||
|  | #else | ||
|  | #error "Unrolling is not correctly specified!" | ||
|  | #endif |