| /* |
| 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 |