Hex Artifact Content
Not logged in

Artifact f6484353b6de41fab84450bea5b69f8d2a834178:


0000: 2f 2a 0a 43 6f 64 65 20 61 75 74 6f 6d 61 74 69  /*.Code automati
0010: 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20  cally generated 
0020: 62 79 20 4b 65 63 63 61 6b 54 6f 6f 6c 73 21 0a  by KeccakTools!.
0030: 0a 54 68 65 20 4b 65 63 63 61 6b 20 73 70 6f 6e  .The Keccak spon
0040: 67 65 20 66 75 6e 63 74 69 6f 6e 2c 20 64 65 73  ge function, des
0050: 69 67 6e 65 64 20 62 79 20 47 75 69 64 6f 20 42  igned by Guido B
0060: 65 72 74 6f 6e 69 2c 20 4a 6f 61 6e 20 44 61 65  ertoni, Joan Dae
0070: 6d 65 6e 2c 0a 4d 69 63 68 61 c3 ab 6c 20 50 65  men,.Michaël Pe
0080: 65 74 65 72 73 20 61 6e 64 20 47 69 6c 6c 65 73  eters and Gilles
0090: 20 56 61 6e 20 41 73 73 63 68 65 2e 20 46 6f 72   Van Assche. For
00a0: 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f   more informatio
00b0: 6e 2c 20 66 65 65 64 62 61 63 6b 20 6f 72 0a 71  n, feedback or.q
00c0: 75 65 73 74 69 6f 6e 73 2c 20 70 6c 65 61 73 65  uestions, please
00d0: 20 72 65 66 65 72 20 74 6f 20 6f 75 72 20 77 65   refer to our we
00e0: 62 73 69 74 65 3a 20 68 74 74 70 3a 2f 2f 6b 65  bsite: http://ke
00f0: 63 63 61 6b 2e 6e 6f 65 6b 65 6f 6e 2e 6f 72 67  ccak.noekeon.org
0100: 2f 0a 0a 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  /..Implementatio
0110: 6e 20 62 79 20 74 68 65 20 64 65 73 69 67 6e 65  n by the designe
0120: 72 73 2c 0a 68 65 72 65 62 79 20 64 65 6e 6f 74  rs,.hereby denot
0130: 65 64 20 61 73 20 22 74 68 65 20 69 6d 70 6c 65  ed as "the imple
0140: 6d 65 6e 74 65 72 22 2e 0a 0a 54 6f 20 74 68 65  menter"...To the
0150: 20 65 78 74 65 6e 74 20 70 6f 73 73 69 62 6c 65   extent possible
0160: 20 75 6e 64 65 72 20 6c 61 77 2c 20 74 68 65 20   under law, the 
0170: 69 6d 70 6c 65 6d 65 6e 74 65 72 20 68 61 73 20  implementer has 
0180: 77 61 69 76 65 64 20 61 6c 6c 20 63 6f 70 79 72  waived all copyr
0190: 69 67 68 74 0a 61 6e 64 20 72 65 6c 61 74 65 64  ight.and related
01a0: 20 6f 72 20 6e 65 69 67 68 62 6f 72 69 6e 67 20   or neighboring 
01b0: 72 69 67 68 74 73 20 74 6f 20 74 68 65 20 73 6f  rights to the so
01c0: 75 72 63 65 20 63 6f 64 65 20 69 6e 20 74 68 69  urce code in thi
01d0: 73 20 66 69 6c 65 2e 0a 68 74 74 70 3a 2f 2f 63  s file..http://c
01e0: 72 65 61 74 69 76 65 63 6f 6d 6d 6f 6e 73 2e 6f  reativecommons.o
01f0: 72 67 2f 70 75 62 6c 69 63 64 6f 6d 61 69 6e 2f  rg/publicdomain/
0200: 7a 65 72 6f 2f 31 2e 30 2f 0a 2a 2f 0a 0a 23 64  zero/1.0/.*/..#d
0210: 65 66 69 6e 65 20 64 65 63 6c 61 72 65 41 42 43  efine declareABC
0220: 44 45 20 5c 0a 20 20 20 20 55 49 4e 54 36 34 20  DE \.    UINT64 
0230: 41 62 61 2c 20 41 62 65 2c 20 41 62 69 2c 20 41  Aba, Abe, Abi, A
0240: 62 6f 2c 20 41 62 75 3b 20 5c 0a 20 20 20 20 55  bo, Abu; \.    U
0250: 49 4e 54 36 34 20 41 67 61 2c 20 41 67 65 2c 20  INT64 Aga, Age, 
0260: 41 67 69 2c 20 41 67 6f 2c 20 41 67 75 3b 20 5c  Agi, Ago, Agu; \
0270: 0a 20 20 20 20 55 49 4e 54 36 34 20 41 6b 61 2c  .    UINT64 Aka,
0280: 20 41 6b 65 2c 20 41 6b 69 2c 20 41 6b 6f 2c 20   Ake, Aki, Ako, 
0290: 41 6b 75 3b 20 5c 0a 20 20 20 20 55 49 4e 54 36  Aku; \.    UINT6
02a0: 34 20 41 6d 61 2c 20 41 6d 65 2c 20 41 6d 69 2c  4 Ama, Ame, Ami,
02b0: 20 41 6d 6f 2c 20 41 6d 75 3b 20 5c 0a 20 20 20   Amo, Amu; \.   
02c0: 20 55 49 4e 54 36 34 20 41 73 61 2c 20 41 73 65   UINT64 Asa, Ase
02d0: 2c 20 41 73 69 2c 20 41 73 6f 2c 20 41 73 75 3b  , Asi, Aso, Asu;
02e0: 20 5c 0a 20 20 20 20 55 49 4e 54 36 34 20 42 62   \.    UINT64 Bb
02f0: 61 2c 20 42 62 65 2c 20 42 62 69 2c 20 42 62 6f  a, Bbe, Bbi, Bbo
0300: 2c 20 42 62 75 3b 20 5c 0a 20 20 20 20 55 49 4e  , Bbu; \.    UIN
0310: 54 36 34 20 42 67 61 2c 20 42 67 65 2c 20 42 67  T64 Bga, Bge, Bg
0320: 69 2c 20 42 67 6f 2c 20 42 67 75 3b 20 5c 0a 20  i, Bgo, Bgu; \. 
0330: 20 20 20 55 49 4e 54 36 34 20 42 6b 61 2c 20 42     UINT64 Bka, B
0340: 6b 65 2c 20 42 6b 69 2c 20 42 6b 6f 2c 20 42 6b  ke, Bki, Bko, Bk
0350: 75 3b 20 5c 0a 20 20 20 20 55 49 4e 54 36 34 20  u; \.    UINT64 
0360: 42 6d 61 2c 20 42 6d 65 2c 20 42 6d 69 2c 20 42  Bma, Bme, Bmi, B
0370: 6d 6f 2c 20 42 6d 75 3b 20 5c 0a 20 20 20 20 55  mo, Bmu; \.    U
0380: 49 4e 54 36 34 20 42 73 61 2c 20 42 73 65 2c 20  INT64 Bsa, Bse, 
0390: 42 73 69 2c 20 42 73 6f 2c 20 42 73 75 3b 20 5c  Bsi, Bso, Bsu; \
03a0: 0a 20 20 20 20 55 49 4e 54 36 34 20 43 61 2c 20  .    UINT64 Ca, 
03b0: 43 65 2c 20 43 69 2c 20 43 6f 2c 20 43 75 3b 20  Ce, Ci, Co, Cu; 
03c0: 5c 0a 20 20 20 20 55 49 4e 54 36 34 20 44 61 2c  \.    UINT64 Da,
03d0: 20 44 65 2c 20 44 69 2c 20 44 6f 2c 20 44 75 3b   De, Di, Do, Du;
03e0: 20 5c 0a 20 20 20 20 55 49 4e 54 36 34 20 45 62   \.    UINT64 Eb
03f0: 61 2c 20 45 62 65 2c 20 45 62 69 2c 20 45 62 6f  a, Ebe, Ebi, Ebo
0400: 2c 20 45 62 75 3b 20 5c 0a 20 20 20 20 55 49 4e  , Ebu; \.    UIN
0410: 54 36 34 20 45 67 61 2c 20 45 67 65 2c 20 45 67  T64 Ega, Ege, Eg
0420: 69 2c 20 45 67 6f 2c 20 45 67 75 3b 20 5c 0a 20  i, Ego, Egu; \. 
0430: 20 20 20 55 49 4e 54 36 34 20 45 6b 61 2c 20 45     UINT64 Eka, E
0440: 6b 65 2c 20 45 6b 69 2c 20 45 6b 6f 2c 20 45 6b  ke, Eki, Eko, Ek
0450: 75 3b 20 5c 0a 20 20 20 20 55 49 4e 54 36 34 20  u; \.    UINT64 
0460: 45 6d 61 2c 20 45 6d 65 2c 20 45 6d 69 2c 20 45  Ema, Eme, Emi, E
0470: 6d 6f 2c 20 45 6d 75 3b 20 5c 0a 20 20 20 20 55  mo, Emu; \.    U
0480: 49 4e 54 36 34 20 45 73 61 2c 20 45 73 65 2c 20  INT64 Esa, Ese, 
0490: 45 73 69 2c 20 45 73 6f 2c 20 45 73 75 3b 20 5c  Esi, Eso, Esu; \
04a0: 0a 0a 23 64 65 66 69 6e 65 20 70 72 65 70 61 72  ..#define prepar
04b0: 65 54 68 65 74 61 20 5c 0a 20 20 20 20 43 61 20  eTheta \.    Ca 
04c0: 3d 20 41 62 61 5e 41 67 61 5e 41 6b 61 5e 41 6d  = Aba^Aga^Aka^Am
04d0: 61 5e 41 73 61 3b 20 5c 0a 20 20 20 20 43 65 20  a^Asa; \.    Ce 
04e0: 3d 20 41 62 65 5e 41 67 65 5e 41 6b 65 5e 41 6d  = Abe^Age^Ake^Am
04f0: 65 5e 41 73 65 3b 20 5c 0a 20 20 20 20 43 69 20  e^Ase; \.    Ci 
0500: 3d 20 41 62 69 5e 41 67 69 5e 41 6b 69 5e 41 6d  = Abi^Agi^Aki^Am
0510: 69 5e 41 73 69 3b 20 5c 0a 20 20 20 20 43 6f 20  i^Asi; \.    Co 
0520: 3d 20 41 62 6f 5e 41 67 6f 5e 41 6b 6f 5e 41 6d  = Abo^Ago^Ako^Am
0530: 6f 5e 41 73 6f 3b 20 5c 0a 20 20 20 20 43 75 20  o^Aso; \.    Cu 
0540: 3d 20 41 62 75 5e 41 67 75 5e 41 6b 75 5e 41 6d  = Abu^Agu^Aku^Am
0550: 75 5e 41 73 75 3b 20 5c 0a 0a 23 69 66 64 65 66  u^Asu; \..#ifdef
0560: 20 55 73 65 42 65 62 69 67 6f 6b 69 6d 69 73 61   UseBebigokimisa
0570: 0a 2f 2f 20 2d 2d 2d 20 43 6f 64 65 20 66 6f 72  .// --- Code for
0580: 20 72 6f 75 6e 64 2c 20 77 69 74 68 20 70 72 65   round, with pre
0590: 70 61 72 65 2d 74 68 65 74 61 20 28 6c 61 6e 65  pare-theta (lane
05a0: 20 63 6f 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70   complementing p
05b0: 61 74 74 65 72 6e 20 27 62 65 62 69 67 6f 6b 69  attern 'bebigoki
05c0: 6d 69 73 61 27 29 0a 2f 2f 20 2d 2d 2d 20 36 34  misa').// --- 64
05d0: 2d 62 69 74 20 6c 61 6e 65 73 20 6d 61 70 70 65  -bit lanes mappe
05e0: 64 20 74 6f 20 36 34 2d 62 69 74 20 77 6f 72 64  d to 64-bit word
05f0: 73 0a 23 64 65 66 69 6e 65 20 74 68 65 74 61 52  s.#define thetaR
0600: 68 6f 50 69 43 68 69 49 6f 74 61 50 72 65 70 61  hoPiChiIotaPrepa
0610: 72 65 54 68 65 74 61 28 69 2c 20 41 2c 20 45 29  reTheta(i, A, E)
0620: 20 5c 0a 20 20 20 20 44 61 20 3d 20 43 75 5e 52   \.    Da = Cu^R
0630: 4f 4c 36 34 28 43 65 2c 20 31 29 3b 20 5c 0a 20  OL64(Ce, 1); \. 
0640: 20 20 20 44 65 20 3d 20 43 61 5e 52 4f 4c 36 34     De = Ca^ROL64
0650: 28 43 69 2c 20 31 29 3b 20 5c 0a 20 20 20 20 44  (Ci, 1); \.    D
0660: 69 20 3d 20 43 65 5e 52 4f 4c 36 34 28 43 6f 2c  i = Ce^ROL64(Co,
0670: 20 31 29 3b 20 5c 0a 20 20 20 20 44 6f 20 3d 20   1); \.    Do = 
0680: 43 69 5e 52 4f 4c 36 34 28 43 75 2c 20 31 29 3b  Ci^ROL64(Cu, 1);
0690: 20 5c 0a 20 20 20 20 44 75 20 3d 20 43 6f 5e 52   \.    Du = Co^R
06a0: 4f 4c 36 34 28 43 61 2c 20 31 29 3b 20 5c 0a 5c  OL64(Ca, 1); \.\
06b0: 0a 20 20 20 20 41 23 23 62 61 20 5e 3d 20 44 61  .    A##ba ^= Da
06c0: 3b 20 5c 0a 20 20 20 20 42 62 61 20 3d 20 41 23  ; \.    Bba = A#
06d0: 23 62 61 3b 20 5c 0a 20 20 20 20 41 23 23 67 65  #ba; \.    A##ge
06e0: 20 5e 3d 20 44 65 3b 20 5c 0a 20 20 20 20 42 62   ^= De; \.    Bb
06f0: 65 20 3d 20 52 4f 4c 36 34 28 41 23 23 67 65 2c  e = ROL64(A##ge,
0700: 20 34 34 29 3b 20 5c 0a 20 20 20 20 41 23 23 6b   44); \.    A##k
0710: 69 20 5e 3d 20 44 69 3b 20 5c 0a 20 20 20 20 42  i ^= Di; \.    B
0720: 62 69 20 3d 20 52 4f 4c 36 34 28 41 23 23 6b 69  bi = ROL64(A##ki
0730: 2c 20 34 33 29 3b 20 5c 0a 20 20 20 20 41 23 23  , 43); \.    A##
0740: 6d 6f 20 5e 3d 20 44 6f 3b 20 5c 0a 20 20 20 20  mo ^= Do; \.    
0750: 42 62 6f 20 3d 20 52 4f 4c 36 34 28 41 23 23 6d  Bbo = ROL64(A##m
0760: 6f 2c 20 32 31 29 3b 20 5c 0a 20 20 20 20 41 23  o, 21); \.    A#
0770: 23 73 75 20 5e 3d 20 44 75 3b 20 5c 0a 20 20 20  #su ^= Du; \.   
0780: 20 42 62 75 20 3d 20 52 4f 4c 36 34 28 41 23 23   Bbu = ROL64(A##
0790: 73 75 2c 20 31 34 29 3b 20 5c 0a 20 20 20 20 45  su, 14); \.    E
07a0: 23 23 62 61 20 3d 20 20 20 42 62 61 20 5e 28 20  ##ba =   Bba ^( 
07b0: 20 42 62 65 20 7c 20 20 42 62 69 20 29 3b 20 5c   Bbe |  Bbi ); \
07c0: 0a 20 20 20 20 45 23 23 62 61 20 5e 3d 20 4b 65  .    E##ba ^= Ke
07d0: 63 63 61 6b 46 31 36 30 30 52 6f 75 6e 64 43 6f  ccakF1600RoundCo
07e0: 6e 73 74 61 6e 74 73 5b 69 5d 3b 20 5c 0a 20 20  nstants[i]; \.  
07f0: 20 20 43 61 20 3d 20 45 23 23 62 61 3b 20 5c 0a    Ca = E##ba; \.
0800: 20 20 20 20 45 23 23 62 65 20 3d 20 20 20 42 62      E##be =   Bb
0810: 65 20 5e 28 28 7e 42 62 69 29 7c 20 20 42 62 6f  e ^((~Bbi)|  Bbo
0820: 20 29 3b 20 5c 0a 20 20 20 20 43 65 20 3d 20 45   ); \.    Ce = E
0830: 23 23 62 65 3b 20 5c 0a 20 20 20 20 45 23 23 62  ##be; \.    E##b
0840: 69 20 3d 20 20 20 42 62 69 20 5e 28 20 20 42 62  i =   Bbi ^(  Bb
0850: 6f 20 26 20 20 42 62 75 20 29 3b 20 5c 0a 20 20  o &  Bbu ); \.  
0860: 20 20 43 69 20 3d 20 45 23 23 62 69 3b 20 5c 0a    Ci = E##bi; \.
0870: 20 20 20 20 45 23 23 62 6f 20 3d 20 20 20 42 62      E##bo =   Bb
0880: 6f 20 5e 28 20 20 42 62 75 20 7c 20 20 42 62 61  o ^(  Bbu |  Bba
0890: 20 29 3b 20 5c 0a 20 20 20 20 43 6f 20 3d 20 45   ); \.    Co = E
08a0: 23 23 62 6f 3b 20 5c 0a 20 20 20 20 45 23 23 62  ##bo; \.    E##b
08b0: 75 20 3d 20 20 20 42 62 75 20 5e 28 20 20 42 62  u =   Bbu ^(  Bb
08c0: 61 20 26 20 20 42 62 65 20 29 3b 20 5c 0a 20 20  a &  Bbe ); \.  
08d0: 20 20 43 75 20 3d 20 45 23 23 62 75 3b 20 5c 0a    Cu = E##bu; \.
08e0: 5c 0a 20 20 20 20 41 23 23 62 6f 20 5e 3d 20 44  \.    A##bo ^= D
08f0: 6f 3b 20 5c 0a 20 20 20 20 42 67 61 20 3d 20 52  o; \.    Bga = R
0900: 4f 4c 36 34 28 41 23 23 62 6f 2c 20 32 38 29 3b  OL64(A##bo, 28);
0910: 20 5c 0a 20 20 20 20 41 23 23 67 75 20 5e 3d 20   \.    A##gu ^= 
0920: 44 75 3b 20 5c 0a 20 20 20 20 42 67 65 20 3d 20  Du; \.    Bge = 
0930: 52 4f 4c 36 34 28 41 23 23 67 75 2c 20 32 30 29  ROL64(A##gu, 20)
0940: 3b 20 5c 0a 20 20 20 20 41 23 23 6b 61 20 5e 3d  ; \.    A##ka ^=
0950: 20 44 61 3b 20 5c 0a 20 20 20 20 42 67 69 20 3d   Da; \.    Bgi =
0960: 20 52 4f 4c 36 34 28 41 23 23 6b 61 2c 20 33 29   ROL64(A##ka, 3)
0970: 3b 20 5c 0a 20 20 20 20 41 23 23 6d 65 20 5e 3d  ; \.    A##me ^=
0980: 20 44 65 3b 20 5c 0a 20 20 20 20 42 67 6f 20 3d   De; \.    Bgo =
0990: 20 52 4f 4c 36 34 28 41 23 23 6d 65 2c 20 34 35   ROL64(A##me, 45
09a0: 29 3b 20 5c 0a 20 20 20 20 41 23 23 73 69 20 5e  ); \.    A##si ^
09b0: 3d 20 44 69 3b 20 5c 0a 20 20 20 20 42 67 75 20  = Di; \.    Bgu 
09c0: 3d 20 52 4f 4c 36 34 28 41 23 23 73 69 2c 20 36  = ROL64(A##si, 6
09d0: 31 29 3b 20 5c 0a 20 20 20 20 45 23 23 67 61 20  1); \.    E##ga 
09e0: 3d 20 20 20 42 67 61 20 5e 28 20 20 42 67 65 20  =   Bga ^(  Bge 
09f0: 7c 20 20 42 67 69 20 29 3b 20 5c 0a 20 20 20 20  |  Bgi ); \.    
0a00: 43 61 20 5e 3d 20 45 23 23 67 61 3b 20 5c 0a 20  Ca ^= E##ga; \. 
0a10: 20 20 20 45 23 23 67 65 20 3d 20 20 20 42 67 65     E##ge =   Bge
0a20: 20 5e 28 20 20 42 67 69 20 26 20 20 42 67 6f 20   ^(  Bgi &  Bgo 
0a30: 29 3b 20 5c 0a 20 20 20 20 43 65 20 5e 3d 20 45  ); \.    Ce ^= E
0a40: 23 23 67 65 3b 20 5c 0a 20 20 20 20 45 23 23 67  ##ge; \.    E##g
0a50: 69 20 3d 20 20 20 42 67 69 20 5e 28 20 20 42 67  i =   Bgi ^(  Bg
0a60: 6f 20 7c 28 7e 42 67 75 29 29 3b 20 5c 0a 20 20  o |(~Bgu)); \.  
0a70: 20 20 43 69 20 5e 3d 20 45 23 23 67 69 3b 20 5c    Ci ^= E##gi; \
0a80: 0a 20 20 20 20 45 23 23 67 6f 20 3d 20 20 20 42  .    E##go =   B
0a90: 67 6f 20 5e 28 20 20 42 67 75 20 7c 20 20 42 67  go ^(  Bgu |  Bg
0aa0: 61 20 29 3b 20 5c 0a 20 20 20 20 43 6f 20 5e 3d  a ); \.    Co ^=
0ab0: 20 45 23 23 67 6f 3b 20 5c 0a 20 20 20 20 45 23   E##go; \.    E#
0ac0: 23 67 75 20 3d 20 20 20 42 67 75 20 5e 28 20 20  #gu =   Bgu ^(  
0ad0: 42 67 61 20 26 20 20 42 67 65 20 29 3b 20 5c 0a  Bga &  Bge ); \.
0ae0: 20 20 20 20 43 75 20 5e 3d 20 45 23 23 67 75 3b      Cu ^= E##gu;
0af0: 20 5c 0a 5c 0a 20 20 20 20 41 23 23 62 65 20 5e   \.\.    A##be ^
0b00: 3d 20 44 65 3b 20 5c 0a 20 20 20 20 42 6b 61 20  = De; \.    Bka 
0b10: 3d 20 52 4f 4c 36 34 28 41 23 23 62 65 2c 20 31  = ROL64(A##be, 1
0b20: 29 3b 20 5c 0a 20 20 20 20 41 23 23 67 69 20 5e  ); \.    A##gi ^
0b30: 3d 20 44 69 3b 20 5c 0a 20 20 20 20 42 6b 65 20  = Di; \.    Bke 
0b40: 3d 20 52 4f 4c 36 34 28 41 23 23 67 69 2c 20 36  = ROL64(A##gi, 6
0b50: 29 3b 20 5c 0a 20 20 20 20 41 23 23 6b 6f 20 5e  ); \.    A##ko ^
0b60: 3d 20 44 6f 3b 20 5c 0a 20 20 20 20 42 6b 69 20  = Do; \.    Bki 
0b70: 3d 20 52 4f 4c 36 34 28 41 23 23 6b 6f 2c 20 32  = ROL64(A##ko, 2
0b80: 35 29 3b 20 5c 0a 20 20 20 20 41 23 23 6d 75 20  5); \.    A##mu 
0b90: 5e 3d 20 44 75 3b 20 5c 0a 20 20 20 20 42 6b 6f  ^= Du; \.    Bko
0ba0: 20 3d 20 52 4f 4c 36 34 28 41 23 23 6d 75 2c 20   = ROL64(A##mu, 
0bb0: 38 29 3b 20 5c 0a 20 20 20 20 41 23 23 73 61 20  8); \.    A##sa 
0bc0: 5e 3d 20 44 61 3b 20 5c 0a 20 20 20 20 42 6b 75  ^= Da; \.    Bku
0bd0: 20 3d 20 52 4f 4c 36 34 28 41 23 23 73 61 2c 20   = ROL64(A##sa, 
0be0: 31 38 29 3b 20 5c 0a 20 20 20 20 45 23 23 6b 61  18); \.    E##ka
0bf0: 20 3d 20 20 20 42 6b 61 20 5e 28 20 20 42 6b 65   =   Bka ^(  Bke
0c00: 20 7c 20 20 42 6b 69 20 29 3b 20 5c 0a 20 20 20   |  Bki ); \.   
0c10: 20 43 61 20 5e 3d 20 45 23 23 6b 61 3b 20 5c 0a   Ca ^= E##ka; \.
0c20: 20 20 20 20 45 23 23 6b 65 20 3d 20 20 20 42 6b      E##ke =   Bk
0c30: 65 20 5e 28 20 20 42 6b 69 20 26 20 20 42 6b 6f  e ^(  Bki &  Bko
0c40: 20 29 3b 20 5c 0a 20 20 20 20 43 65 20 5e 3d 20   ); \.    Ce ^= 
0c50: 45 23 23 6b 65 3b 20 5c 0a 20 20 20 20 45 23 23  E##ke; \.    E##
0c60: 6b 69 20 3d 20 20 20 42 6b 69 20 5e 28 28 7e 42  ki =   Bki ^((~B
0c70: 6b 6f 29 26 20 20 42 6b 75 20 29 3b 20 5c 0a 20  ko)&  Bku ); \. 
0c80: 20 20 20 43 69 20 5e 3d 20 45 23 23 6b 69 3b 20     Ci ^= E##ki; 
0c90: 5c 0a 20 20 20 20 45 23 23 6b 6f 20 3d 20 28 7e  \.    E##ko = (~
0ca0: 42 6b 6f 29 5e 28 20 20 42 6b 75 20 7c 20 20 42  Bko)^(  Bku |  B
0cb0: 6b 61 20 29 3b 20 5c 0a 20 20 20 20 43 6f 20 5e  ka ); \.    Co ^
0cc0: 3d 20 45 23 23 6b 6f 3b 20 5c 0a 20 20 20 20 45  = E##ko; \.    E
0cd0: 23 23 6b 75 20 3d 20 20 20 42 6b 75 20 5e 28 20  ##ku =   Bku ^( 
0ce0: 20 42 6b 61 20 26 20 20 42 6b 65 20 29 3b 20 5c   Bka &  Bke ); \
0cf0: 0a 20 20 20 20 43 75 20 5e 3d 20 45 23 23 6b 75  .    Cu ^= E##ku
0d00: 3b 20 5c 0a 5c 0a 20 20 20 20 41 23 23 62 75 20  ; \.\.    A##bu 
0d10: 5e 3d 20 44 75 3b 20 5c 0a 20 20 20 20 42 6d 61  ^= Du; \.    Bma
0d20: 20 3d 20 52 4f 4c 36 34 28 41 23 23 62 75 2c 20   = ROL64(A##bu, 
0d30: 32 37 29 3b 20 5c 0a 20 20 20 20 41 23 23 67 61  27); \.    A##ga
0d40: 20 5e 3d 20 44 61 3b 20 5c 0a 20 20 20 20 42 6d   ^= Da; \.    Bm
0d50: 65 20 3d 20 52 4f 4c 36 34 28 41 23 23 67 61 2c  e = ROL64(A##ga,
0d60: 20 33 36 29 3b 20 5c 0a 20 20 20 20 41 23 23 6b   36); \.    A##k
0d70: 65 20 5e 3d 20 44 65 3b 20 5c 0a 20 20 20 20 42  e ^= De; \.    B
0d80: 6d 69 20 3d 20 52 4f 4c 36 34 28 41 23 23 6b 65  mi = ROL64(A##ke
0d90: 2c 20 31 30 29 3b 20 5c 0a 20 20 20 20 41 23 23  , 10); \.    A##
0da0: 6d 69 20 5e 3d 20 44 69 3b 20 5c 0a 20 20 20 20  mi ^= Di; \.    
0db0: 42 6d 6f 20 3d 20 52 4f 4c 36 34 28 41 23 23 6d  Bmo = ROL64(A##m
0dc0: 69 2c 20 31 35 29 3b 20 5c 0a 20 20 20 20 41 23  i, 15); \.    A#
0dd0: 23 73 6f 20 5e 3d 20 44 6f 3b 20 5c 0a 20 20 20  #so ^= Do; \.   
0de0: 20 42 6d 75 20 3d 20 52 4f 4c 36 34 28 41 23 23   Bmu = ROL64(A##
0df0: 73 6f 2c 20 35 36 29 3b 20 5c 0a 20 20 20 20 45  so, 56); \.    E
0e00: 23 23 6d 61 20 3d 20 20 20 42 6d 61 20 5e 28 20  ##ma =   Bma ^( 
0e10: 20 42 6d 65 20 26 20 20 42 6d 69 20 29 3b 20 5c   Bme &  Bmi ); \
0e20: 0a 20 20 20 20 43 61 20 5e 3d 20 45 23 23 6d 61  .    Ca ^= E##ma
0e30: 3b 20 5c 0a 20 20 20 20 45 23 23 6d 65 20 3d 20  ; \.    E##me = 
0e40: 20 20 42 6d 65 20 5e 28 20 20 42 6d 69 20 7c 20    Bme ^(  Bmi | 
0e50: 20 42 6d 6f 20 29 3b 20 5c 0a 20 20 20 20 43 65   Bmo ); \.    Ce
0e60: 20 5e 3d 20 45 23 23 6d 65 3b 20 5c 0a 20 20 20   ^= E##me; \.   
0e70: 20 45 23 23 6d 69 20 3d 20 20 20 42 6d 69 20 5e   E##mi =   Bmi ^
0e80: 28 28 7e 42 6d 6f 29 7c 20 20 42 6d 75 20 29 3b  ((~Bmo)|  Bmu );
0e90: 20 5c 0a 20 20 20 20 43 69 20 5e 3d 20 45 23 23   \.    Ci ^= E##
0ea0: 6d 69 3b 20 5c 0a 20 20 20 20 45 23 23 6d 6f 20  mi; \.    E##mo 
0eb0: 3d 20 28 7e 42 6d 6f 29 5e 28 20 20 42 6d 75 20  = (~Bmo)^(  Bmu 
0ec0: 26 20 20 42 6d 61 20 29 3b 20 5c 0a 20 20 20 20  &  Bma ); \.    
0ed0: 43 6f 20 5e 3d 20 45 23 23 6d 6f 3b 20 5c 0a 20  Co ^= E##mo; \. 
0ee0: 20 20 20 45 23 23 6d 75 20 3d 20 20 20 42 6d 75     E##mu =   Bmu
0ef0: 20 5e 28 20 20 42 6d 61 20 7c 20 20 42 6d 65 20   ^(  Bma |  Bme 
0f00: 29 3b 20 5c 0a 20 20 20 20 43 75 20 5e 3d 20 45  ); \.    Cu ^= E
0f10: 23 23 6d 75 3b 20 5c 0a 5c 0a 20 20 20 20 41 23  ##mu; \.\.    A#
0f20: 23 62 69 20 5e 3d 20 44 69 3b 20 5c 0a 20 20 20  #bi ^= Di; \.   
0f30: 20 42 73 61 20 3d 20 52 4f 4c 36 34 28 41 23 23   Bsa = ROL64(A##
0f40: 62 69 2c 20 36 32 29 3b 20 5c 0a 20 20 20 20 41  bi, 62); \.    A
0f50: 23 23 67 6f 20 5e 3d 20 44 6f 3b 20 5c 0a 20 20  ##go ^= Do; \.  
0f60: 20 20 42 73 65 20 3d 20 52 4f 4c 36 34 28 41 23    Bse = ROL64(A#
0f70: 23 67 6f 2c 20 35 35 29 3b 20 5c 0a 20 20 20 20  #go, 55); \.    
0f80: 41 23 23 6b 75 20 5e 3d 20 44 75 3b 20 5c 0a 20  A##ku ^= Du; \. 
0f90: 20 20 20 42 73 69 20 3d 20 52 4f 4c 36 34 28 41     Bsi = ROL64(A
0fa0: 23 23 6b 75 2c 20 33 39 29 3b 20 5c 0a 20 20 20  ##ku, 39); \.   
0fb0: 20 41 23 23 6d 61 20 5e 3d 20 44 61 3b 20 5c 0a   A##ma ^= Da; \.
0fc0: 20 20 20 20 42 73 6f 20 3d 20 52 4f 4c 36 34 28      Bso = ROL64(
0fd0: 41 23 23 6d 61 2c 20 34 31 29 3b 20 5c 0a 20 20  A##ma, 41); \.  
0fe0: 20 20 41 23 23 73 65 20 5e 3d 20 44 65 3b 20 5c    A##se ^= De; \
0ff0: 0a 20 20 20 20 42 73 75 20 3d 20 52 4f 4c 36 34  .    Bsu = ROL64
1000: 28 41 23 23 73 65 2c 20 32 29 3b 20 5c 0a 20 20  (A##se, 2); \.  
1010: 20 20 45 23 23 73 61 20 3d 20 20 20 42 73 61 20    E##sa =   Bsa 
1020: 5e 28 28 7e 42 73 65 29 26 20 20 42 73 69 20 29  ^((~Bse)&  Bsi )
1030: 3b 20 5c 0a 20 20 20 20 43 61 20 5e 3d 20 45 23  ; \.    Ca ^= E#
1040: 23 73 61 3b 20 5c 0a 20 20 20 20 45 23 23 73 65  #sa; \.    E##se
1050: 20 3d 20 28 7e 42 73 65 29 5e 28 20 20 42 73 69   = (~Bse)^(  Bsi
1060: 20 7c 20 20 42 73 6f 20 29 3b 20 5c 0a 20 20 20   |  Bso ); \.   
1070: 20 43 65 20 5e 3d 20 45 23 23 73 65 3b 20 5c 0a   Ce ^= E##se; \.
1080: 20 20 20 20 45 23 23 73 69 20 3d 20 20 20 42 73      E##si =   Bs
1090: 69 20 5e 28 20 20 42 73 6f 20 26 20 20 42 73 75  i ^(  Bso &  Bsu
10a0: 20 29 3b 20 5c 0a 20 20 20 20 43 69 20 5e 3d 20   ); \.    Ci ^= 
10b0: 45 23 23 73 69 3b 20 5c 0a 20 20 20 20 45 23 23  E##si; \.    E##
10c0: 73 6f 20 3d 20 20 20 42 73 6f 20 5e 28 20 20 42  so =   Bso ^(  B
10d0: 73 75 20 7c 20 20 42 73 61 20 29 3b 20 5c 0a 20  su |  Bsa ); \. 
10e0: 20 20 20 43 6f 20 5e 3d 20 45 23 23 73 6f 3b 20     Co ^= E##so; 
10f0: 5c 0a 20 20 20 20 45 23 23 73 75 20 3d 20 20 20  \.    E##su =   
1100: 42 73 75 20 5e 28 20 20 42 73 61 20 26 20 20 42  Bsu ^(  Bsa &  B
1110: 73 65 20 29 3b 20 5c 0a 20 20 20 20 43 75 20 5e  se ); \.    Cu ^
1120: 3d 20 45 23 23 73 75 3b 20 5c 0a 5c 0a 0a 2f 2f  = E##su; \.\..//
1130: 20 2d 2d 2d 20 43 6f 64 65 20 66 6f 72 20 72 6f   --- Code for ro
1140: 75 6e 64 20 28 6c 61 6e 65 20 63 6f 6d 70 6c 65  und (lane comple
1150: 6d 65 6e 74 69 6e 67 20 70 61 74 74 65 72 6e 20  menting pattern 
1160: 27 62 65 62 69 67 6f 6b 69 6d 69 73 61 27 29 0a  'bebigokimisa').
1170: 2f 2f 20 2d 2d 2d 20 36 34 2d 62 69 74 20 6c 61  // --- 64-bit la
1180: 6e 65 73 20 6d 61 70 70 65 64 20 74 6f 20 36 34  nes mapped to 64
1190: 2d 62 69 74 20 77 6f 72 64 73 0a 23 64 65 66 69  -bit words.#defi
11a0: 6e 65 20 74 68 65 74 61 52 68 6f 50 69 43 68 69  ne thetaRhoPiChi
11b0: 49 6f 74 61 28 69 2c 20 41 2c 20 45 29 20 5c 0a  Iota(i, A, E) \.
11c0: 20 20 20 20 44 61 20 3d 20 43 75 5e 52 4f 4c 36      Da = Cu^ROL6
11d0: 34 28 43 65 2c 20 31 29 3b 20 5c 0a 20 20 20 20  4(Ce, 1); \.    
11e0: 44 65 20 3d 20 43 61 5e 52 4f 4c 36 34 28 43 69  De = Ca^ROL64(Ci
11f0: 2c 20 31 29 3b 20 5c 0a 20 20 20 20 44 69 20 3d  , 1); \.    Di =
1200: 20 43 65 5e 52 4f 4c 36 34 28 43 6f 2c 20 31 29   Ce^ROL64(Co, 1)
1210: 3b 20 5c 0a 20 20 20 20 44 6f 20 3d 20 43 69 5e  ; \.    Do = Ci^
1220: 52 4f 4c 36 34 28 43 75 2c 20 31 29 3b 20 5c 0a  ROL64(Cu, 1); \.
1230: 20 20 20 20 44 75 20 3d 20 43 6f 5e 52 4f 4c 36      Du = Co^ROL6
1240: 34 28 43 61 2c 20 31 29 3b 20 5c 0a 5c 0a 20 20  4(Ca, 1); \.\.  
1250: 20 20 41 23 23 62 61 20 5e 3d 20 44 61 3b 20 5c    A##ba ^= Da; \
1260: 0a 20 20 20 20 42 62 61 20 3d 20 41 23 23 62 61  .    Bba = A##ba
1270: 3b 20 5c 0a 20 20 20 20 41 23 23 67 65 20 5e 3d  ; \.    A##ge ^=
1280: 20 44 65 3b 20 5c 0a 20 20 20 20 42 62 65 20 3d   De; \.    Bbe =
1290: 20 52 4f 4c 36 34 28 41 23 23 67 65 2c 20 34 34   ROL64(A##ge, 44
12a0: 29 3b 20 5c 0a 20 20 20 20 41 23 23 6b 69 20 5e  ); \.    A##ki ^
12b0: 3d 20 44 69 3b 20 5c 0a 20 20 20 20 42 62 69 20  = Di; \.    Bbi 
12c0: 3d 20 52 4f 4c 36 34 28 41 23 23 6b 69 2c 20 34  = ROL64(A##ki, 4
12d0: 33 29 3b 20 5c 0a 20 20 20 20 41 23 23 6d 6f 20  3); \.    A##mo 
12e0: 5e 3d 20 44 6f 3b 20 5c 0a 20 20 20 20 42 62 6f  ^= Do; \.    Bbo
12f0: 20 3d 20 52 4f 4c 36 34 28 41 23 23 6d 6f 2c 20   = ROL64(A##mo, 
1300: 32 31 29 3b 20 5c 0a 20 20 20 20 41 23 23 73 75  21); \.    A##su
1310: 20 5e 3d 20 44 75 3b 20 5c 0a 20 20 20 20 42 62   ^= Du; \.    Bb
1320: 75 20 3d 20 52 4f 4c 36 34 28 41 23 23 73 75 2c  u = ROL64(A##su,
1330: 20 31 34 29 3b 20 5c 0a 20 20 20 20 45 23 23 62   14); \.    E##b
1340: 61 20 3d 20 20 20 42 62 61 20 5e 28 20 20 42 62  a =   Bba ^(  Bb
1350: 65 20 7c 20 20 42 62 69 20 29 3b 20 5c 0a 20 20  e |  Bbi ); \.  
1360: 20 20 45 23 23 62 61 20 5e 3d 20 4b 65 63 63 61    E##ba ^= Kecca
1370: 6b 46 31 36 30 30 52 6f 75 6e 64 43 6f 6e 73 74  kF1600RoundConst
1380: 61 6e 74 73 5b 69 5d 3b 20 5c 0a 20 20 20 20 45  ants[i]; \.    E
1390: 23 23 62 65 20 3d 20 20 20 42 62 65 20 5e 28 28  ##be =   Bbe ^((
13a0: 7e 42 62 69 29 7c 20 20 42 62 6f 20 29 3b 20 5c  ~Bbi)|  Bbo ); \
13b0: 0a 20 20 20 20 45 23 23 62 69 20 3d 20 20 20 42  .    E##bi =   B
13c0: 62 69 20 5e 28 20 20 42 62 6f 20 26 20 20 42 62  bi ^(  Bbo &  Bb
13d0: 75 20 29 3b 20 5c 0a 20 20 20 20 45 23 23 62 6f  u ); \.    E##bo
13e0: 20 3d 20 20 20 42 62 6f 20 5e 28 20 20 42 62 75   =   Bbo ^(  Bbu
13f0: 20 7c 20 20 42 62 61 20 29 3b 20 5c 0a 20 20 20   |  Bba ); \.   
1400: 20 45 23 23 62 75 20 3d 20 20 20 42 62 75 20 5e   E##bu =   Bbu ^
1410: 28 20 20 42 62 61 20 26 20 20 42 62 65 20 29 3b  (  Bba &  Bbe );
1420: 20 5c 0a 5c 0a 20 20 20 20 41 23 23 62 6f 20 5e   \.\.    A##bo ^
1430: 3d 20 44 6f 3b 20 5c 0a 20 20 20 20 42 67 61 20  = Do; \.    Bga 
1440: 3d 20 52 4f 4c 36 34 28 41 23 23 62 6f 2c 20 32  = ROL64(A##bo, 2
1450: 38 29 3b 20 5c 0a 20 20 20 20 41 23 23 67 75 20  8); \.    A##gu 
1460: 5e 3d 20 44 75 3b 20 5c 0a 20 20 20 20 42 67 65  ^= Du; \.    Bge
1470: 20 3d 20 52 4f 4c 36 34 28 41 23 23 67 75 2c 20   = ROL64(A##gu, 
1480: 32 30 29 3b 20 5c 0a 20 20 20 20 41 23 23 6b 61  20); \.    A##ka
1490: 20 5e 3d 20 44 61 3b 20 5c 0a 20 20 20 20 42 67   ^= Da; \.    Bg
14a0: 69 20 3d 20 52 4f 4c 36 34 28 41 23 23 6b 61 2c  i = ROL64(A##ka,
14b0: 20 33 29 3b 20 5c 0a 20 20 20 20 41 23 23 6d 65   3); \.    A##me
14c0: 20 5e 3d 20 44 65 3b 20 5c 0a 20 20 20 20 42 67   ^= De; \.    Bg
14d0: 6f 20 3d 20 52 4f 4c 36 34 28 41 23 23 6d 65 2c  o = ROL64(A##me,
14e0: 20 34 35 29 3b 20 5c 0a 20 20 20 20 41 23 23 73   45); \.    A##s
14f0: 69 20 5e 3d 20 44 69 3b 20 5c 0a 20 20 20 20 42  i ^= Di; \.    B
1500: 67 75 20 3d 20 52 4f 4c 36 34 28 41 23 23 73 69  gu = ROL64(A##si
1510: 2c 20 36 31 29 3b 20 5c 0a 20 20 20 20 45 23 23  , 61); \.    E##
1520: 67 61 20 3d 20 20 20 42 67 61 20 5e 28 20 20 42  ga =   Bga ^(  B
1530: 67 65 20 7c 20 20 42 67 69 20 29 3b 20 5c 0a 20  ge |  Bgi ); \. 
1540: 20 20 20 45 23 23 67 65 20 3d 20 20 20 42 67 65     E##ge =   Bge
1550: 20 5e 28 20 20 42 67 69 20 26 20 20 42 67 6f 20   ^(  Bgi &  Bgo 
1560: 29 3b 20 5c 0a 20 20 20 20 45 23 23 67 69 20 3d  ); \.    E##gi =
1570: 20 20 20 42 67 69 20 5e 28 20 20 42 67 6f 20 7c     Bgi ^(  Bgo |
1580: 28 7e 42 67 75 29 29 3b 20 5c 0a 20 20 20 20 45  (~Bgu)); \.    E
1590: 23 23 67 6f 20 3d 20 20 20 42 67 6f 20 5e 28 20  ##go =   Bgo ^( 
15a0: 20 42 67 75 20 7c 20 20 42 67 61 20 29 3b 20 5c   Bgu |  Bga ); \
15b0: 0a 20 20 20 20 45 23 23 67 75 20 3d 20 20 20 42  .    E##gu =   B
15c0: 67 75 20 5e 28 20 20 42 67 61 20 26 20 20 42 67  gu ^(  Bga &  Bg
15d0: 65 20 29 3b 20 5c 0a 5c 0a 20 20 20 20 41 23 23  e ); \.\.    A##
15e0: 62 65 20 5e 3d 20 44 65 3b 20 5c 0a 20 20 20 20  be ^= De; \.    
15f0: 42 6b 61 20 3d 20 52 4f 4c 36 34 28 41 23 23 62  Bka = ROL64(A##b
1600: 65 2c 20 31 29 3b 20 5c 0a 20 20 20 20 41 23 23  e, 1); \.    A##
1610: 67 69 20 5e 3d 20 44 69 3b 20 5c 0a 20 20 20 20  gi ^= Di; \.    
1620: 42 6b 65 20 3d 20 52 4f 4c 36 34 28 41 23 23 67  Bke = ROL64(A##g
1630: 69 2c 20 36 29 3b 20 5c 0a 20 20 20 20 41 23 23  i, 6); \.    A##
1640: 6b 6f 20 5e 3d 20 44 6f 3b 20 5c 0a 20 20 20 20  ko ^= Do; \.    
1650: 42 6b 69 20 3d 20 52 4f 4c 36 34 28 41 23 23 6b  Bki = ROL64(A##k
1660: 6f 2c 20 32 35 29 3b 20 5c 0a 20 20 20 20 41 23  o, 25); \.    A#
1670: 23 6d 75 20 5e 3d 20 44 75 3b 20 5c 0a 20 20 20  #mu ^= Du; \.   
1680: 20 42 6b 6f 20 3d 20 52 4f 4c 36 34 28 41 23 23   Bko = ROL64(A##
1690: 6d 75 2c 20 38 29 3b 20 5c 0a 20 20 20 20 41 23  mu, 8); \.    A#
16a0: 23 73 61 20 5e 3d 20 44 61 3b 20 5c 0a 20 20 20  #sa ^= Da; \.   
16b0: 20 42 6b 75 20 3d 20 52 4f 4c 36 34 28 41 23 23   Bku = ROL64(A##
16c0: 73 61 2c 20 31 38 29 3b 20 5c 0a 20 20 20 20 45  sa, 18); \.    E
16d0: 23 23 6b 61 20 3d 20 20 20 42 6b 61 20 5e 28 20  ##ka =   Bka ^( 
16e0: 20 42 6b 65 20 7c 20 20 42 6b 69 20 29 3b 20 5c   Bke |  Bki ); \
16f0: 0a 20 20 20 20 45 23 23 6b 65 20 3d 20 20 20 42  .    E##ke =   B
1700: 6b 65 20 5e 28 20 20 42 6b 69 20 26 20 20 42 6b  ke ^(  Bki &  Bk
1710: 6f 20 29 3b 20 5c 0a 20 20 20 20 45 23 23 6b 69  o ); \.    E##ki
1720: 20 3d 20 20 20 42 6b 69 20 5e 28 28 7e 42 6b 6f   =   Bki ^((~Bko
1730: 29 26 20 20 42 6b 75 20 29 3b 20 5c 0a 20 20 20  )&  Bku ); \.   
1740: 20 45 23 23 6b 6f 20 3d 20 28 7e 42 6b 6f 29 5e   E##ko = (~Bko)^
1750: 28 20 20 42 6b 75 20 7c 20 20 42 6b 61 20 29 3b  (  Bku |  Bka );
1760: 20 5c 0a 20 20 20 20 45 23 23 6b 75 20 3d 20 20   \.    E##ku =  
1770: 20 42 6b 75 20 5e 28 20 20 42 6b 61 20 26 20 20   Bku ^(  Bka &  
1780: 42 6b 65 20 29 3b 20 5c 0a 5c 0a 20 20 20 20 41  Bke ); \.\.    A
1790: 23 23 62 75 20 5e 3d 20 44 75 3b 20 5c 0a 20 20  ##bu ^= Du; \.  
17a0: 20 20 42 6d 61 20 3d 20 52 4f 4c 36 34 28 41 23    Bma = ROL64(A#
17b0: 23 62 75 2c 20 32 37 29 3b 20 5c 0a 20 20 20 20  #bu, 27); \.    
17c0: 41 23 23 67 61 20 5e 3d 20 44 61 3b 20 5c 0a 20  A##ga ^= Da; \. 
17d0: 20 20 20 42 6d 65 20 3d 20 52 4f 4c 36 34 28 41     Bme = ROL64(A
17e0: 23 23 67 61 2c 20 33 36 29 3b 20 5c 0a 20 20 20  ##ga, 36); \.   
17f0: 20 41 23 23 6b 65 20 5e 3d 20 44 65 3b 20 5c 0a   A##ke ^= De; \.
1800: 20 20 20 20 42 6d 69 20 3d 20 52 4f 4c 36 34 28      Bmi = ROL64(
1810: 41 23 23 6b 65 2c 20 31 30 29 3b 20 5c 0a 20 20  A##ke, 10); \.  
1820: 20 20 41 23 23 6d 69 20 5e 3d 20 44 69 3b 20 5c    A##mi ^= Di; \
1830: 0a 20 20 20 20 42 6d 6f 20 3d 20 52 4f 4c 36 34  .    Bmo = ROL64
1840: 28 41 23 23 6d 69 2c 20 31 35 29 3b 20 5c 0a 20  (A##mi, 15); \. 
1850: 20 20 20 41 23 23 73 6f 20 5e 3d 20 44 6f 3b 20     A##so ^= Do; 
1860: 5c 0a 20 20 20 20 42 6d 75 20 3d 20 52 4f 4c 36  \.    Bmu = ROL6
1870: 34 28 41 23 23 73 6f 2c 20 35 36 29 3b 20 5c 0a  4(A##so, 56); \.
1880: 20 20 20 20 45 23 23 6d 61 20 3d 20 20 20 42 6d      E##ma =   Bm
1890: 61 20 5e 28 20 20 42 6d 65 20 26 20 20 42 6d 69  a ^(  Bme &  Bmi
18a0: 20 29 3b 20 5c 0a 20 20 20 20 45 23 23 6d 65 20   ); \.    E##me 
18b0: 3d 20 20 20 42 6d 65 20 5e 28 20 20 42 6d 69 20  =   Bme ^(  Bmi 
18c0: 7c 20 20 42 6d 6f 20 29 3b 20 5c 0a 20 20 20 20  |  Bmo ); \.    
18d0: 45 23 23 6d 69 20 3d 20 20 20 42 6d 69 20 5e 28  E##mi =   Bmi ^(
18e0: 28 7e 42 6d 6f 29 7c 20 20 42 6d 75 20 29 3b 20  (~Bmo)|  Bmu ); 
18f0: 5c 0a 20 20 20 20 45 23 23 6d 6f 20 3d 20 28 7e  \.    E##mo = (~
1900: 42 6d 6f 29 5e 28 20 20 42 6d 75 20 26 20 20 42  Bmo)^(  Bmu &  B
1910: 6d 61 20 29 3b 20 5c 0a 20 20 20 20 45 23 23 6d  ma ); \.    E##m
1920: 75 20 3d 20 20 20 42 6d 75 20 5e 28 20 20 42 6d  u =   Bmu ^(  Bm
1930: 61 20 7c 20 20 42 6d 65 20 29 3b 20 5c 0a 5c 0a  a |  Bme ); \.\.
1940: 20 20 20 20 41 23 23 62 69 20 5e 3d 20 44 69 3b      A##bi ^= Di;
1950: 20 5c 0a 20 20 20 20 42 73 61 20 3d 20 52 4f 4c   \.    Bsa = ROL
1960: 36 34 28 41 23 23 62 69 2c 20 36 32 29 3b 20 5c  64(A##bi, 62); \
1970: 0a 20 20 20 20 41 23 23 67 6f 20 5e 3d 20 44 6f  .    A##go ^= Do
1980: 3b 20 5c 0a 20 20 20 20 42 73 65 20 3d 20 52 4f  ; \.    Bse = RO
1990: 4c 36 34 28 41 23 23 67 6f 2c 20 35 35 29 3b 20  L64(A##go, 55); 
19a0: 5c 0a 20 20 20 20 41 23 23 6b 75 20 5e 3d 20 44  \.    A##ku ^= D
19b0: 75 3b 20 5c 0a 20 20 20 20 42 73 69 20 3d 20 52  u; \.    Bsi = R
19c0: 4f 4c 36 34 28 41 23 23 6b 75 2c 20 33 39 29 3b  OL64(A##ku, 39);
19d0: 20 5c 0a 20 20 20 20 41 23 23 6d 61 20 5e 3d 20   \.    A##ma ^= 
19e0: 44 61 3b 20 5c 0a 20 20 20 20 42 73 6f 20 3d 20  Da; \.    Bso = 
19f0: 52 4f 4c 36 34 28 41 23 23 6d 61 2c 20 34 31 29  ROL64(A##ma, 41)
1a00: 3b 20 5c 0a 20 20 20 20 41 23 23 73 65 20 5e 3d  ; \.    A##se ^=
1a10: 20 44 65 3b 20 5c 0a 20 20 20 20 42 73 75 20 3d   De; \.    Bsu =
1a20: 20 52 4f 4c 36 34 28 41 23 23 73 65 2c 20 32 29   ROL64(A##se, 2)
1a30: 3b 20 5c 0a 20 20 20 20 45 23 23 73 61 20 3d 20  ; \.    E##sa = 
1a40: 20 20 42 73 61 20 5e 28 28 7e 42 73 65 29 26 20    Bsa ^((~Bse)& 
1a50: 20 42 73 69 20 29 3b 20 5c 0a 20 20 20 20 45 23   Bsi ); \.    E#
1a60: 23 73 65 20 3d 20 28 7e 42 73 65 29 5e 28 20 20  #se = (~Bse)^(  
1a70: 42 73 69 20 7c 20 20 42 73 6f 20 29 3b 20 5c 0a  Bsi |  Bso ); \.
1a80: 20 20 20 20 45 23 23 73 69 20 3d 20 20 20 42 73      E##si =   Bs
1a90: 69 20 5e 28 20 20 42 73 6f 20 26 20 20 42 73 75  i ^(  Bso &  Bsu
1aa0: 20 29 3b 20 5c 0a 20 20 20 20 45 23 23 73 6f 20   ); \.    E##so 
1ab0: 3d 20 20 20 42 73 6f 20 5e 28 20 20 42 73 75 20  =   Bso ^(  Bsu 
1ac0: 7c 20 20 42 73 61 20 29 3b 20 5c 0a 20 20 20 20  |  Bsa ); \.    
1ad0: 45 23 23 73 75 20 3d 20 20 20 42 73 75 20 5e 28  E##su =   Bsu ^(
1ae0: 20 20 42 73 61 20 26 20 20 42 73 65 20 29 3b 20    Bsa &  Bse ); 
1af0: 5c 0a 5c 0a 0a 23 65 6c 73 65 20 2f 2f 20 55 73  \.\..#else // Us
1b00: 65 42 65 62 69 67 6f 6b 69 6d 69 73 61 0a 2f 2f  eBebigokimisa.//
1b10: 20 2d 2d 2d 20 43 6f 64 65 20 66 6f 72 20 72 6f   --- Code for ro
1b20: 75 6e 64 2c 20 77 69 74 68 20 70 72 65 70 61 72  und, with prepar
1b30: 65 2d 74 68 65 74 61 0a 2f 2f 20 2d 2d 2d 20 36  e-theta.// --- 6
1b40: 34 2d 62 69 74 20 6c 61 6e 65 73 20 6d 61 70 70  4-bit lanes mapp
1b50: 65 64 20 74 6f 20 36 34 2d 62 69 74 20 77 6f 72  ed to 64-bit wor
1b60: 64 73 0a 23 64 65 66 69 6e 65 20 74 68 65 74 61  ds.#define theta
1b70: 52 68 6f 50 69 43 68 69 49 6f 74 61 50 72 65 70  RhoPiChiIotaPrep
1b80: 61 72 65 54 68 65 74 61 28 69 2c 20 41 2c 20 45  areTheta(i, A, E
1b90: 29 20 5c 0a 20 20 20 20 44 61 20 3d 20 43 75 5e  ) \.    Da = Cu^
1ba0: 52 4f 4c 36 34 28 43 65 2c 20 31 29 3b 20 5c 0a  ROL64(Ce, 1); \.
1bb0: 20 20 20 20 44 65 20 3d 20 43 61 5e 52 4f 4c 36      De = Ca^ROL6
1bc0: 34 28 43 69 2c 20 31 29 3b 20 5c 0a 20 20 20 20  4(Ci, 1); \.    
1bd0: 44 69 20 3d 20 43 65 5e 52 4f 4c 36 34 28 43 6f  Di = Ce^ROL64(Co
1be0: 2c 20 31 29 3b 20 5c 0a 20 20 20 20 44 6f 20 3d  , 1); \.    Do =
1bf0: 20 43 69 5e 52 4f 4c 36 34 28 43 75 2c 20 31 29   Ci^ROL64(Cu, 1)
1c00: 3b 20 5c 0a 20 20 20 20 44 75 20 3d 20 43 6f 5e  ; \.    Du = Co^
1c10: 52 4f 4c 36 34 28 43 61 2c 20 31 29 3b 20 5c 0a  ROL64(Ca, 1); \.
1c20: 5c 0a 20 20 20 20 41 23 23 62 61 20 5e 3d 20 44  \.    A##ba ^= D
1c30: 61 3b 20 5c 0a 20 20 20 20 42 62 61 20 3d 20 41  a; \.    Bba = A
1c40: 23 23 62 61 3b 20 5c 0a 20 20 20 20 41 23 23 67  ##ba; \.    A##g
1c50: 65 20 5e 3d 20 44 65 3b 20 5c 0a 20 20 20 20 42  e ^= De; \.    B
1c60: 62 65 20 3d 20 52 4f 4c 36 34 28 41 23 23 67 65  be = ROL64(A##ge
1c70: 2c 20 34 34 29 3b 20 5c 0a 20 20 20 20 41 23 23  , 44); \.    A##
1c80: 6b 69 20 5e 3d 20 44 69 3b 20 5c 0a 20 20 20 20  ki ^= Di; \.    
1c90: 42 62 69 20 3d 20 52 4f 4c 36 34 28 41 23 23 6b  Bbi = ROL64(A##k
1ca0: 69 2c 20 34 33 29 3b 20 5c 0a 20 20 20 20 41 23  i, 43); \.    A#
1cb0: 23 6d 6f 20 5e 3d 20 44 6f 3b 20 5c 0a 20 20 20  #mo ^= Do; \.   
1cc0: 20 42 62 6f 20 3d 20 52 4f 4c 36 34 28 41 23 23   Bbo = ROL64(A##
1cd0: 6d 6f 2c 20 32 31 29 3b 20 5c 0a 20 20 20 20 41  mo, 21); \.    A
1ce0: 23 23 73 75 20 5e 3d 20 44 75 3b 20 5c 0a 20 20  ##su ^= Du; \.  
1cf0: 20 20 42 62 75 20 3d 20 52 4f 4c 36 34 28 41 23    Bbu = ROL64(A#
1d00: 23 73 75 2c 20 31 34 29 3b 20 5c 0a 20 20 20 20  #su, 14); \.    
1d10: 45 23 23 62 61 20 3d 20 20 20 42 62 61 20 5e 28  E##ba =   Bba ^(
1d20: 28 7e 42 62 65 29 26 20 20 42 62 69 20 29 3b 20  (~Bbe)&  Bbi ); 
1d30: 5c 0a 20 20 20 20 45 23 23 62 61 20 5e 3d 20 4b  \.    E##ba ^= K
1d40: 65 63 63 61 6b 46 31 36 30 30 52 6f 75 6e 64 43  eccakF1600RoundC
1d50: 6f 6e 73 74 61 6e 74 73 5b 69 5d 3b 20 5c 0a 20  onstants[i]; \. 
1d60: 20 20 20 43 61 20 3d 20 45 23 23 62 61 3b 20 5c     Ca = E##ba; \
1d70: 0a 20 20 20 20 45 23 23 62 65 20 3d 20 20 20 42  .    E##be =   B
1d80: 62 65 20 5e 28 28 7e 42 62 69 29 26 20 20 42 62  be ^((~Bbi)&  Bb
1d90: 6f 20 29 3b 20 5c 0a 20 20 20 20 43 65 20 3d 20  o ); \.    Ce = 
1da0: 45 23 23 62 65 3b 20 5c 0a 20 20 20 20 45 23 23  E##be; \.    E##
1db0: 62 69 20 3d 20 20 20 42 62 69 20 5e 28 28 7e 42  bi =   Bbi ^((~B
1dc0: 62 6f 29 26 20 20 42 62 75 20 29 3b 20 5c 0a 20  bo)&  Bbu ); \. 
1dd0: 20 20 20 43 69 20 3d 20 45 23 23 62 69 3b 20 5c     Ci = E##bi; \
1de0: 0a 20 20 20 20 45 23 23 62 6f 20 3d 20 20 20 42  .    E##bo =   B
1df0: 62 6f 20 5e 28 28 7e 42 62 75 29 26 20 20 42 62  bo ^((~Bbu)&  Bb
1e00: 61 20 29 3b 20 5c 0a 20 20 20 20 43 6f 20 3d 20  a ); \.    Co = 
1e10: 45 23 23 62 6f 3b 20 5c 0a 20 20 20 20 45 23 23  E##bo; \.    E##
1e20: 62 75 20 3d 20 20 20 42 62 75 20 5e 28 28 7e 42  bu =   Bbu ^((~B
1e30: 62 61 29 26 20 20 42 62 65 20 29 3b 20 5c 0a 20  ba)&  Bbe ); \. 
1e40: 20 20 20 43 75 20 3d 20 45 23 23 62 75 3b 20 5c     Cu = E##bu; \
1e50: 0a 5c 0a 20 20 20 20 41 23 23 62 6f 20 5e 3d 20  .\.    A##bo ^= 
1e60: 44 6f 3b 20 5c 0a 20 20 20 20 42 67 61 20 3d 20  Do; \.    Bga = 
1e70: 52 4f 4c 36 34 28 41 23 23 62 6f 2c 20 32 38 29  ROL64(A##bo, 28)
1e80: 3b 20 5c 0a 20 20 20 20 41 23 23 67 75 20 5e 3d  ; \.    A##gu ^=
1e90: 20 44 75 3b 20 5c 0a 20 20 20 20 42 67 65 20 3d   Du; \.    Bge =
1ea0: 20 52 4f 4c 36 34 28 41 23 23 67 75 2c 20 32 30   ROL64(A##gu, 20
1eb0: 29 3b 20 5c 0a 20 20 20 20 41 23 23 6b 61 20 5e  ); \.    A##ka ^
1ec0: 3d 20 44 61 3b 20 5c 0a 20 20 20 20 42 67 69 20  = Da; \.    Bgi 
1ed0: 3d 20 52 4f 4c 36 34 28 41 23 23 6b 61 2c 20 33  = ROL64(A##ka, 3
1ee0: 29 3b 20 5c 0a 20 20 20 20 41 23 23 6d 65 20 5e  ); \.    A##me ^
1ef0: 3d 20 44 65 3b 20 5c 0a 20 20 20 20 42 67 6f 20  = De; \.    Bgo 
1f00: 3d 20 52 4f 4c 36 34 28 41 23 23 6d 65 2c 20 34  = ROL64(A##me, 4
1f10: 35 29 3b 20 5c 0a 20 20 20 20 41 23 23 73 69 20  5); \.    A##si 
1f20: 5e 3d 20 44 69 3b 20 5c 0a 20 20 20 20 42 67 75  ^= Di; \.    Bgu
1f30: 20 3d 20 52 4f 4c 36 34 28 41 23 23 73 69 2c 20   = ROL64(A##si, 
1f40: 36 31 29 3b 20 5c 0a 20 20 20 20 45 23 23 67 61  61); \.    E##ga
1f50: 20 3d 20 20 20 42 67 61 20 5e 28 28 7e 42 67 65   =   Bga ^((~Bge
1f60: 29 26 20 20 42 67 69 20 29 3b 20 5c 0a 20 20 20  )&  Bgi ); \.   
1f70: 20 43 61 20 5e 3d 20 45 23 23 67 61 3b 20 5c 0a   Ca ^= E##ga; \.
1f80: 20 20 20 20 45 23 23 67 65 20 3d 20 20 20 42 67      E##ge =   Bg
1f90: 65 20 5e 28 28 7e 42 67 69 29 26 20 20 42 67 6f  e ^((~Bgi)&  Bgo
1fa0: 20 29 3b 20 5c 0a 20 20 20 20 43 65 20 5e 3d 20   ); \.    Ce ^= 
1fb0: 45 23 23 67 65 3b 20 5c 0a 20 20 20 20 45 23 23  E##ge; \.    E##
1fc0: 67 69 20 3d 20 20 20 42 67 69 20 5e 28 28 7e 42  gi =   Bgi ^((~B
1fd0: 67 6f 29 26 20 20 42 67 75 20 29 3b 20 5c 0a 20  go)&  Bgu ); \. 
1fe0: 20 20 20 43 69 20 5e 3d 20 45 23 23 67 69 3b 20     Ci ^= E##gi; 
1ff0: 5c 0a 20 20 20 20 45 23 23 67 6f 20 3d 20 20 20  \.    E##go =   
2000: 42 67 6f 20 5e 28 28 7e 42 67 75 29 26 20 20 42  Bgo ^((~Bgu)&  B
2010: 67 61 20 29 3b 20 5c 0a 20 20 20 20 43 6f 20 5e  ga ); \.    Co ^
2020: 3d 20 45 23 23 67 6f 3b 20 5c 0a 20 20 20 20 45  = E##go; \.    E
2030: 23 23 67 75 20 3d 20 20 20 42 67 75 20 5e 28 28  ##gu =   Bgu ^((
2040: 7e 42 67 61 29 26 20 20 42 67 65 20 29 3b 20 5c  ~Bga)&  Bge ); \
2050: 0a 20 20 20 20 43 75 20 5e 3d 20 45 23 23 67 75  .    Cu ^= E##gu
2060: 3b 20 5c 0a 5c 0a 20 20 20 20 41 23 23 62 65 20  ; \.\.    A##be 
2070: 5e 3d 20 44 65 3b 20 5c 0a 20 20 20 20 42 6b 61  ^= De; \.    Bka
2080: 20 3d 20 52 4f 4c 36 34 28 41 23 23 62 65 2c 20   = ROL64(A##be, 
2090: 31 29 3b 20 5c 0a 20 20 20 20 41 23 23 67 69 20  1); \.    A##gi 
20a0: 5e 3d 20 44 69 3b 20 5c 0a 20 20 20 20 42 6b 65  ^= Di; \.    Bke
20b0: 20 3d 20 52 4f 4c 36 34 28 41 23 23 67 69 2c 20   = ROL64(A##gi, 
20c0: 36 29 3b 20 5c 0a 20 20 20 20 41 23 23 6b 6f 20  6); \.    A##ko 
20d0: 5e 3d 20 44 6f 3b 20 5c 0a 20 20 20 20 42 6b 69  ^= Do; \.    Bki
20e0: 20 3d 20 52 4f 4c 36 34 28 41 23 23 6b 6f 2c 20   = ROL64(A##ko, 
20f0: 32 35 29 3b 20 5c 0a 20 20 20 20 41 23 23 6d 75  25); \.    A##mu
2100: 20 5e 3d 20 44 75 3b 20 5c 0a 20 20 20 20 42 6b   ^= Du; \.    Bk
2110: 6f 20 3d 20 52 4f 4c 36 34 28 41 23 23 6d 75 2c  o = ROL64(A##mu,
2120: 20 38 29 3b 20 5c 0a 20 20 20 20 41 23 23 73 61   8); \.    A##sa
2130: 20 5e 3d 20 44 61 3b 20 5c 0a 20 20 20 20 42 6b   ^= Da; \.    Bk
2140: 75 20 3d 20 52 4f 4c 36 34 28 41 23 23 73 61 2c  u = ROL64(A##sa,
2150: 20 31 38 29 3b 20 5c 0a 20 20 20 20 45 23 23 6b   18); \.    E##k
2160: 61 20 3d 20 20 20 42 6b 61 20 5e 28 28 7e 42 6b  a =   Bka ^((~Bk
2170: 65 29 26 20 20 42 6b 69 20 29 3b 20 5c 0a 20 20  e)&  Bki ); \.  
2180: 20 20 43 61 20 5e 3d 20 45 23 23 6b 61 3b 20 5c    Ca ^= E##ka; \
2190: 0a 20 20 20 20 45 23 23 6b 65 20 3d 20 20 20 42  .    E##ke =   B
21a0: 6b 65 20 5e 28 28 7e 42 6b 69 29 26 20 20 42 6b  ke ^((~Bki)&  Bk
21b0: 6f 20 29 3b 20 5c 0a 20 20 20 20 43 65 20 5e 3d  o ); \.    Ce ^=
21c0: 20 45 23 23 6b 65 3b 20 5c 0a 20 20 20 20 45 23   E##ke; \.    E#
21d0: 23 6b 69 20 3d 20 20 20 42 6b 69 20 5e 28 28 7e  #ki =   Bki ^((~
21e0: 42 6b 6f 29 26 20 20 42 6b 75 20 29 3b 20 5c 0a  Bko)&  Bku ); \.
21f0: 20 20 20 20 43 69 20 5e 3d 20 45 23 23 6b 69 3b      Ci ^= E##ki;
2200: 20 5c 0a 20 20 20 20 45 23 23 6b 6f 20 3d 20 20   \.    E##ko =  
2210: 20 42 6b 6f 20 5e 28 28 7e 42 6b 75 29 26 20 20   Bko ^((~Bku)&  
2220: 42 6b 61 20 29 3b 20 5c 0a 20 20 20 20 43 6f 20  Bka ); \.    Co 
2230: 5e 3d 20 45 23 23 6b 6f 3b 20 5c 0a 20 20 20 20  ^= E##ko; \.    
2240: 45 23 23 6b 75 20 3d 20 20 20 42 6b 75 20 5e 28  E##ku =   Bku ^(
2250: 28 7e 42 6b 61 29 26 20 20 42 6b 65 20 29 3b 20  (~Bka)&  Bke ); 
2260: 5c 0a 20 20 20 20 43 75 20 5e 3d 20 45 23 23 6b  \.    Cu ^= E##k
2270: 75 3b 20 5c 0a 5c 0a 20 20 20 20 41 23 23 62 75  u; \.\.    A##bu
2280: 20 5e 3d 20 44 75 3b 20 5c 0a 20 20 20 20 42 6d   ^= Du; \.    Bm
2290: 61 20 3d 20 52 4f 4c 36 34 28 41 23 23 62 75 2c  a = ROL64(A##bu,
22a0: 20 32 37 29 3b 20 5c 0a 20 20 20 20 41 23 23 67   27); \.    A##g
22b0: 61 20 5e 3d 20 44 61 3b 20 5c 0a 20 20 20 20 42  a ^= Da; \.    B
22c0: 6d 65 20 3d 20 52 4f 4c 36 34 28 41 23 23 67 61  me = ROL64(A##ga
22d0: 2c 20 33 36 29 3b 20 5c 0a 20 20 20 20 41 23 23  , 36); \.    A##
22e0: 6b 65 20 5e 3d 20 44 65 3b 20 5c 0a 20 20 20 20  ke ^= De; \.    
22f0: 42 6d 69 20 3d 20 52 4f 4c 36 34 28 41 23 23 6b  Bmi = ROL64(A##k
2300: 65 2c 20 31 30 29 3b 20 5c 0a 20 20 20 20 41 23  e, 10); \.    A#
2310: 23 6d 69 20 5e 3d 20 44 69 3b 20 5c 0a 20 20 20  #mi ^= Di; \.   
2320: 20 42 6d 6f 20 3d 20 52 4f 4c 36 34 28 41 23 23   Bmo = ROL64(A##
2330: 6d 69 2c 20 31 35 29 3b 20 5c 0a 20 20 20 20 41  mi, 15); \.    A
2340: 23 23 73 6f 20 5e 3d 20 44 6f 3b 20 5c 0a 20 20  ##so ^= Do; \.  
2350: 20 20 42 6d 75 20 3d 20 52 4f 4c 36 34 28 41 23    Bmu = ROL64(A#
2360: 23 73 6f 2c 20 35 36 29 3b 20 5c 0a 20 20 20 20  #so, 56); \.    
2370: 45 23 23 6d 61 20 3d 20 20 20 42 6d 61 20 5e 28  E##ma =   Bma ^(
2380: 28 7e 42 6d 65 29 26 20 20 42 6d 69 20 29 3b 20  (~Bme)&  Bmi ); 
2390: 5c 0a 20 20 20 20 43 61 20 5e 3d 20 45 23 23 6d  \.    Ca ^= E##m
23a0: 61 3b 20 5c 0a 20 20 20 20 45 23 23 6d 65 20 3d  a; \.    E##me =
23b0: 20 20 20 42 6d 65 20 5e 28 28 7e 42 6d 69 29 26     Bme ^((~Bmi)&
23c0: 20 20 42 6d 6f 20 29 3b 20 5c 0a 20 20 20 20 43    Bmo ); \.    C
23d0: 65 20 5e 3d 20 45 23 23 6d 65 3b 20 5c 0a 20 20  e ^= E##me; \.  
23e0: 20 20 45 23 23 6d 69 20 3d 20 20 20 42 6d 69 20    E##mi =   Bmi 
23f0: 5e 28 28 7e 42 6d 6f 29 26 20 20 42 6d 75 20 29  ^((~Bmo)&  Bmu )
2400: 3b 20 5c 0a 20 20 20 20 43 69 20 5e 3d 20 45 23  ; \.    Ci ^= E#
2410: 23 6d 69 3b 20 5c 0a 20 20 20 20 45 23 23 6d 6f  #mi; \.    E##mo
2420: 20 3d 20 20 20 42 6d 6f 20 5e 28 28 7e 42 6d 75   =   Bmo ^((~Bmu
2430: 29 26 20 20 42 6d 61 20 29 3b 20 5c 0a 20 20 20  )&  Bma ); \.   
2440: 20 43 6f 20 5e 3d 20 45 23 23 6d 6f 3b 20 5c 0a   Co ^= E##mo; \.
2450: 20 20 20 20 45 23 23 6d 75 20 3d 20 20 20 42 6d      E##mu =   Bm
2460: 75 20 5e 28 28 7e 42 6d 61 29 26 20 20 42 6d 65  u ^((~Bma)&  Bme
2470: 20 29 3b 20 5c 0a 20 20 20 20 43 75 20 5e 3d 20   ); \.    Cu ^= 
2480: 45 23 23 6d 75 3b 20 5c 0a 5c 0a 20 20 20 20 41  E##mu; \.\.    A
2490: 23 23 62 69 20 5e 3d 20 44 69 3b 20 5c 0a 20 20  ##bi ^= Di; \.  
24a0: 20 20 42 73 61 20 3d 20 52 4f 4c 36 34 28 41 23    Bsa = ROL64(A#
24b0: 23 62 69 2c 20 36 32 29 3b 20 5c 0a 20 20 20 20  #bi, 62); \.    
24c0: 41 23 23 67 6f 20 5e 3d 20 44 6f 3b 20 5c 0a 20  A##go ^= Do; \. 
24d0: 20 20 20 42 73 65 20 3d 20 52 4f 4c 36 34 28 41     Bse = ROL64(A
24e0: 23 23 67 6f 2c 20 35 35 29 3b 20 5c 0a 20 20 20  ##go, 55); \.   
24f0: 20 41 23 23 6b 75 20 5e 3d 20 44 75 3b 20 5c 0a   A##ku ^= Du; \.
2500: 20 20 20 20 42 73 69 20 3d 20 52 4f 4c 36 34 28      Bsi = ROL64(
2510: 41 23 23 6b 75 2c 20 33 39 29 3b 20 5c 0a 20 20  A##ku, 39); \.  
2520: 20 20 41 23 23 6d 61 20 5e 3d 20 44 61 3b 20 5c    A##ma ^= Da; \
2530: 0a 20 20 20 20 42 73 6f 20 3d 20 52 4f 4c 36 34  .    Bso = ROL64
2540: 28 41 23 23 6d 61 2c 20 34 31 29 3b 20 5c 0a 20  (A##ma, 41); \. 
2550: 20 20 20 41 23 23 73 65 20 5e 3d 20 44 65 3b 20     A##se ^= De; 
2560: 5c 0a 20 20 20 20 42 73 75 20 3d 20 52 4f 4c 36  \.    Bsu = ROL6
2570: 34 28 41 23 23 73 65 2c 20 32 29 3b 20 5c 0a 20  4(A##se, 2); \. 
2580: 20 20 20 45 23 23 73 61 20 3d 20 20 20 42 73 61     E##sa =   Bsa
2590: 20 5e 28 28 7e 42 73 65 29 26 20 20 42 73 69 20   ^((~Bse)&  Bsi 
25a0: 29 3b 20 5c 0a 20 20 20 20 43 61 20 5e 3d 20 45  ); \.    Ca ^= E
25b0: 23 23 73 61 3b 20 5c 0a 20 20 20 20 45 23 23 73  ##sa; \.    E##s
25c0: 65 20 3d 20 20 20 42 73 65 20 5e 28 28 7e 42 73  e =   Bse ^((~Bs
25d0: 69 29 26 20 20 42 73 6f 20 29 3b 20 5c 0a 20 20  i)&  Bso ); \.  
25e0: 20 20 43 65 20 5e 3d 20 45 23 23 73 65 3b 20 5c    Ce ^= E##se; \
25f0: 0a 20 20 20 20 45 23 23 73 69 20 3d 20 20 20 42  .    E##si =   B
2600: 73 69 20 5e 28 28 7e 42 73 6f 29 26 20 20 42 73  si ^((~Bso)&  Bs
2610: 75 20 29 3b 20 5c 0a 20 20 20 20 43 69 20 5e 3d  u ); \.    Ci ^=
2620: 20 45 23 23 73 69 3b 20 5c 0a 20 20 20 20 45 23   E##si; \.    E#
2630: 23 73 6f 20 3d 20 20 20 42 73 6f 20 5e 28 28 7e  #so =   Bso ^((~
2640: 42 73 75 29 26 20 20 42 73 61 20 29 3b 20 5c 0a  Bsu)&  Bsa ); \.
2650: 20 20 20 20 43 6f 20 5e 3d 20 45 23 23 73 6f 3b      Co ^= E##so;
2660: 20 5c 0a 20 20 20 20 45 23 23 73 75 20 3d 20 20   \.    E##su =  
2670: 20 42 73 75 20 5e 28 28 7e 42 73 61 29 26 20 20   Bsu ^((~Bsa)&  
2680: 42 73 65 20 29 3b 20 5c 0a 20 20 20 20 43 75 20  Bse ); \.    Cu 
2690: 5e 3d 20 45 23 23 73 75 3b 20 5c 0a 5c 0a 0a 2f  ^= E##su; \.\../
26a0: 2f 20 2d 2d 2d 20 43 6f 64 65 20 66 6f 72 20 72  / --- Code for r
26b0: 6f 75 6e 64 0a 2f 2f 20 2d 2d 2d 20 36 34 2d 62  ound.// --- 64-b
26c0: 69 74 20 6c 61 6e 65 73 20 6d 61 70 70 65 64 20  it lanes mapped 
26d0: 74 6f 20 36 34 2d 62 69 74 20 77 6f 72 64 73 0a  to 64-bit words.
26e0: 23 64 65 66 69 6e 65 20 74 68 65 74 61 52 68 6f  #define thetaRho
26f0: 50 69 43 68 69 49 6f 74 61 28 69 2c 20 41 2c 20  PiChiIota(i, A, 
2700: 45 29 20 5c 0a 20 20 20 20 44 61 20 3d 20 43 75  E) \.    Da = Cu
2710: 5e 52 4f 4c 36 34 28 43 65 2c 20 31 29 3b 20 5c  ^ROL64(Ce, 1); \
2720: 0a 20 20 20 20 44 65 20 3d 20 43 61 5e 52 4f 4c  .    De = Ca^ROL
2730: 36 34 28 43 69 2c 20 31 29 3b 20 5c 0a 20 20 20  64(Ci, 1); \.   
2740: 20 44 69 20 3d 20 43 65 5e 52 4f 4c 36 34 28 43   Di = Ce^ROL64(C
2750: 6f 2c 20 31 29 3b 20 5c 0a 20 20 20 20 44 6f 20  o, 1); \.    Do 
2760: 3d 20 43 69 5e 52 4f 4c 36 34 28 43 75 2c 20 31  = Ci^ROL64(Cu, 1
2770: 29 3b 20 5c 0a 20 20 20 20 44 75 20 3d 20 43 6f  ); \.    Du = Co
2780: 5e 52 4f 4c 36 34 28 43 61 2c 20 31 29 3b 20 5c  ^ROL64(Ca, 1); \
2790: 0a 5c 0a 20 20 20 20 41 23 23 62 61 20 5e 3d 20  .\.    A##ba ^= 
27a0: 44 61 3b 20 5c 0a 20 20 20 20 42 62 61 20 3d 20  Da; \.    Bba = 
27b0: 41 23 23 62 61 3b 20 5c 0a 20 20 20 20 41 23 23  A##ba; \.    A##
27c0: 67 65 20 5e 3d 20 44 65 3b 20 5c 0a 20 20 20 20  ge ^= De; \.    
27d0: 42 62 65 20 3d 20 52 4f 4c 36 34 28 41 23 23 67  Bbe = ROL64(A##g
27e0: 65 2c 20 34 34 29 3b 20 5c 0a 20 20 20 20 41 23  e, 44); \.    A#
27f0: 23 6b 69 20 5e 3d 20 44 69 3b 20 5c 0a 20 20 20  #ki ^= Di; \.   
2800: 20 42 62 69 20 3d 20 52 4f 4c 36 34 28 41 23 23   Bbi = ROL64(A##
2810: 6b 69 2c 20 34 33 29 3b 20 5c 0a 20 20 20 20 41  ki, 43); \.    A
2820: 23 23 6d 6f 20 5e 3d 20 44 6f 3b 20 5c 0a 20 20  ##mo ^= Do; \.  
2830: 20 20 42 62 6f 20 3d 20 52 4f 4c 36 34 28 41 23    Bbo = ROL64(A#
2840: 23 6d 6f 2c 20 32 31 29 3b 20 5c 0a 20 20 20 20  #mo, 21); \.    
2850: 41 23 23 73 75 20 5e 3d 20 44 75 3b 20 5c 0a 20  A##su ^= Du; \. 
2860: 20 20 20 42 62 75 20 3d 20 52 4f 4c 36 34 28 41     Bbu = ROL64(A
2870: 23 23 73 75 2c 20 31 34 29 3b 20 5c 0a 20 20 20  ##su, 14); \.   
2880: 20 45 23 23 62 61 20 3d 20 20 20 42 62 61 20 5e   E##ba =   Bba ^
2890: 28 28 7e 42 62 65 29 26 20 20 42 62 69 20 29 3b  ((~Bbe)&  Bbi );
28a0: 20 5c 0a 20 20 20 20 45 23 23 62 61 20 5e 3d 20   \.    E##ba ^= 
28b0: 4b 65 63 63 61 6b 46 31 36 30 30 52 6f 75 6e 64  KeccakF1600Round
28c0: 43 6f 6e 73 74 61 6e 74 73 5b 69 5d 3b 20 5c 0a  Constants[i]; \.
28d0: 20 20 20 20 45 23 23 62 65 20 3d 20 20 20 42 62      E##be =   Bb
28e0: 65 20 5e 28 28 7e 42 62 69 29 26 20 20 42 62 6f  e ^((~Bbi)&  Bbo
28f0: 20 29 3b 20 5c 0a 20 20 20 20 45 23 23 62 69 20   ); \.    E##bi 
2900: 3d 20 20 20 42 62 69 20 5e 28 28 7e 42 62 6f 29  =   Bbi ^((~Bbo)
2910: 26 20 20 42 62 75 20 29 3b 20 5c 0a 20 20 20 20  &  Bbu ); \.    
2920: 45 23 23 62 6f 20 3d 20 20 20 42 62 6f 20 5e 28  E##bo =   Bbo ^(
2930: 28 7e 42 62 75 29 26 20 20 42 62 61 20 29 3b 20  (~Bbu)&  Bba ); 
2940: 5c 0a 20 20 20 20 45 23 23 62 75 20 3d 20 20 20  \.    E##bu =   
2950: 42 62 75 20 5e 28 28 7e 42 62 61 29 26 20 20 42  Bbu ^((~Bba)&  B
2960: 62 65 20 29 3b 20 5c 0a 5c 0a 20 20 20 20 41 23  be ); \.\.    A#
2970: 23 62 6f 20 5e 3d 20 44 6f 3b 20 5c 0a 20 20 20  #bo ^= Do; \.   
2980: 20 42 67 61 20 3d 20 52 4f 4c 36 34 28 41 23 23   Bga = ROL64(A##
2990: 62 6f 2c 20 32 38 29 3b 20 5c 0a 20 20 20 20 41  bo, 28); \.    A
29a0: 23 23 67 75 20 5e 3d 20 44 75 3b 20 5c 0a 20 20  ##gu ^= Du; \.  
29b0: 20 20 42 67 65 20 3d 20 52 4f 4c 36 34 28 41 23    Bge = ROL64(A#
29c0: 23 67 75 2c 20 32 30 29 3b 20 5c 0a 20 20 20 20  #gu, 20); \.    
29d0: 41 23 23 6b 61 20 5e 3d 20 44 61 3b 20 5c 0a 20  A##ka ^= Da; \. 
29e0: 20 20 20 42 67 69 20 3d 20 52 4f 4c 36 34 28 41     Bgi = ROL64(A
29f0: 23 23 6b 61 2c 20 33 29 3b 20 5c 0a 20 20 20 20  ##ka, 3); \.    
2a00: 41 23 23 6d 65 20 5e 3d 20 44 65 3b 20 5c 0a 20  A##me ^= De; \. 
2a10: 20 20 20 42 67 6f 20 3d 20 52 4f 4c 36 34 28 41     Bgo = ROL64(A
2a20: 23 23 6d 65 2c 20 34 35 29 3b 20 5c 0a 20 20 20  ##me, 45); \.   
2a30: 20 41 23 23 73 69 20 5e 3d 20 44 69 3b 20 5c 0a   A##si ^= Di; \.
2a40: 20 20 20 20 42 67 75 20 3d 20 52 4f 4c 36 34 28      Bgu = ROL64(
2a50: 41 23 23 73 69 2c 20 36 31 29 3b 20 5c 0a 20 20  A##si, 61); \.  
2a60: 20 20 45 23 23 67 61 20 3d 20 20 20 42 67 61 20    E##ga =   Bga 
2a70: 5e 28 28 7e 42 67 65 29 26 20 20 42 67 69 20 29  ^((~Bge)&  Bgi )
2a80: 3b 20 5c 0a 20 20 20 20 45 23 23 67 65 20 3d 20  ; \.    E##ge = 
2a90: 20 20 42 67 65 20 5e 28 28 7e 42 67 69 29 26 20    Bge ^((~Bgi)& 
2aa0: 20 42 67 6f 20 29 3b 20 5c 0a 20 20 20 20 45 23   Bgo ); \.    E#
2ab0: 23 67 69 20 3d 20 20 20 42 67 69 20 5e 28 28 7e  #gi =   Bgi ^((~
2ac0: 42 67 6f 29 26 20 20 42 67 75 20 29 3b 20 5c 0a  Bgo)&  Bgu ); \.
2ad0: 20 20 20 20 45 23 23 67 6f 20 3d 20 20 20 42 67      E##go =   Bg
2ae0: 6f 20 5e 28 28 7e 42 67 75 29 26 20 20 42 67 61  o ^((~Bgu)&  Bga
2af0: 20 29 3b 20 5c 0a 20 20 20 20 45 23 23 67 75 20   ); \.    E##gu 
2b00: 3d 20 20 20 42 67 75 20 5e 28 28 7e 42 67 61 29  =   Bgu ^((~Bga)
2b10: 26 20 20 42 67 65 20 29 3b 20 5c 0a 5c 0a 20 20  &  Bge ); \.\.  
2b20: 20 20 41 23 23 62 65 20 5e 3d 20 44 65 3b 20 5c    A##be ^= De; \
2b30: 0a 20 20 20 20 42 6b 61 20 3d 20 52 4f 4c 36 34  .    Bka = ROL64
2b40: 28 41 23 23 62 65 2c 20 31 29 3b 20 5c 0a 20 20  (A##be, 1); \.  
2b50: 20 20 41 23 23 67 69 20 5e 3d 20 44 69 3b 20 5c    A##gi ^= Di; \
2b60: 0a 20 20 20 20 42 6b 65 20 3d 20 52 4f 4c 36 34  .    Bke = ROL64
2b70: 28 41 23 23 67 69 2c 20 36 29 3b 20 5c 0a 20 20  (A##gi, 6); \.  
2b80: 20 20 41 23 23 6b 6f 20 5e 3d 20 44 6f 3b 20 5c    A##ko ^= Do; \
2b90: 0a 20 20 20 20 42 6b 69 20 3d 20 52 4f 4c 36 34  .    Bki = ROL64
2ba0: 28 41 23 23 6b 6f 2c 20 32 35 29 3b 20 5c 0a 20  (A##ko, 25); \. 
2bb0: 20 20 20 41 23 23 6d 75 20 5e 3d 20 44 75 3b 20     A##mu ^= Du; 
2bc0: 5c 0a 20 20 20 20 42 6b 6f 20 3d 20 52 4f 4c 36  \.    Bko = ROL6
2bd0: 34 28 41 23 23 6d 75 2c 20 38 29 3b 20 5c 0a 20  4(A##mu, 8); \. 
2be0: 20 20 20 41 23 23 73 61 20 5e 3d 20 44 61 3b 20     A##sa ^= Da; 
2bf0: 5c 0a 20 20 20 20 42 6b 75 20 3d 20 52 4f 4c 36  \.    Bku = ROL6
2c00: 34 28 41 23 23 73 61 2c 20 31 38 29 3b 20 5c 0a  4(A##sa, 18); \.
2c10: 20 20 20 20 45 23 23 6b 61 20 3d 20 20 20 42 6b      E##ka =   Bk
2c20: 61 20 5e 28 28 7e 42 6b 65 29 26 20 20 42 6b 69  a ^((~Bke)&  Bki
2c30: 20 29 3b 20 5c 0a 20 20 20 20 45 23 23 6b 65 20   ); \.    E##ke 
2c40: 3d 20 20 20 42 6b 65 20 5e 28 28 7e 42 6b 69 29  =   Bke ^((~Bki)
2c50: 26 20 20 42 6b 6f 20 29 3b 20 5c 0a 20 20 20 20  &  Bko ); \.    
2c60: 45 23 23 6b 69 20 3d 20 20 20 42 6b 69 20 5e 28  E##ki =   Bki ^(
2c70: 28 7e 42 6b 6f 29 26 20 20 42 6b 75 20 29 3b 20  (~Bko)&  Bku ); 
2c80: 5c 0a 20 20 20 20 45 23 23 6b 6f 20 3d 20 20 20  \.    E##ko =   
2c90: 42 6b 6f 20 5e 28 28 7e 42 6b 75 29 26 20 20 42  Bko ^((~Bku)&  B
2ca0: 6b 61 20 29 3b 20 5c 0a 20 20 20 20 45 23 23 6b  ka ); \.    E##k
2cb0: 75 20 3d 20 20 20 42 6b 75 20 5e 28 28 7e 42 6b  u =   Bku ^((~Bk
2cc0: 61 29 26 20 20 42 6b 65 20 29 3b 20 5c 0a 5c 0a  a)&  Bke ); \.\.
2cd0: 20 20 20 20 41 23 23 62 75 20 5e 3d 20 44 75 3b      A##bu ^= Du;
2ce0: 20 5c 0a 20 20 20 20 42 6d 61 20 3d 20 52 4f 4c   \.    Bma = ROL
2cf0: 36 34 28 41 23 23 62 75 2c 20 32 37 29 3b 20 5c  64(A##bu, 27); \
2d00: 0a 20 20 20 20 41 23 23 67 61 20 5e 3d 20 44 61  .    A##ga ^= Da
2d10: 3b 20 5c 0a 20 20 20 20 42 6d 65 20 3d 20 52 4f  ; \.    Bme = RO
2d20: 4c 36 34 28 41 23 23 67 61 2c 20 33 36 29 3b 20  L64(A##ga, 36); 
2d30: 5c 0a 20 20 20 20 41 23 23 6b 65 20 5e 3d 20 44  \.    A##ke ^= D
2d40: 65 3b 20 5c 0a 20 20 20 20 42 6d 69 20 3d 20 52  e; \.    Bmi = R
2d50: 4f 4c 36 34 28 41 23 23 6b 65 2c 20 31 30 29 3b  OL64(A##ke, 10);
2d60: 20 5c 0a 20 20 20 20 41 23 23 6d 69 20 5e 3d 20   \.    A##mi ^= 
2d70: 44 69 3b 20 5c 0a 20 20 20 20 42 6d 6f 20 3d 20  Di; \.    Bmo = 
2d80: 52 4f 4c 36 34 28 41 23 23 6d 69 2c 20 31 35 29  ROL64(A##mi, 15)
2d90: 3b 20 5c 0a 20 20 20 20 41 23 23 73 6f 20 5e 3d  ; \.    A##so ^=
2da0: 20 44 6f 3b 20 5c 0a 20 20 20 20 42 6d 75 20 3d   Do; \.    Bmu =
2db0: 20 52 4f 4c 36 34 28 41 23 23 73 6f 2c 20 35 36   ROL64(A##so, 56
2dc0: 29 3b 20 5c 0a 20 20 20 20 45 23 23 6d 61 20 3d  ); \.    E##ma =
2dd0: 20 20 20 42 6d 61 20 5e 28 28 7e 42 6d 65 29 26     Bma ^((~Bme)&
2de0: 20 20 42 6d 69 20 29 3b 20 5c 0a 20 20 20 20 45    Bmi ); \.    E
2df0: 23 23 6d 65 20 3d 20 20 20 42 6d 65 20 5e 28 28  ##me =   Bme ^((
2e00: 7e 42 6d 69 29 26 20 20 42 6d 6f 20 29 3b 20 5c  ~Bmi)&  Bmo ); \
2e10: 0a 20 20 20 20 45 23 23 6d 69 20 3d 20 20 20 42  .    E##mi =   B
2e20: 6d 69 20 5e 28 28 7e 42 6d 6f 29 26 20 20 42 6d  mi ^((~Bmo)&  Bm
2e30: 75 20 29 3b 20 5c 0a 20 20 20 20 45 23 23 6d 6f  u ); \.    E##mo
2e40: 20 3d 20 20 20 42 6d 6f 20 5e 28 28 7e 42 6d 75   =   Bmo ^((~Bmu
2e50: 29 26 20 20 42 6d 61 20 29 3b 20 5c 0a 20 20 20  )&  Bma ); \.   
2e60: 20 45 23 23 6d 75 20 3d 20 20 20 42 6d 75 20 5e   E##mu =   Bmu ^
2e70: 28 28 7e 42 6d 61 29 26 20 20 42 6d 65 20 29 3b  ((~Bma)&  Bme );
2e80: 20 5c 0a 5c 0a 20 20 20 20 41 23 23 62 69 20 5e   \.\.    A##bi ^
2e90: 3d 20 44 69 3b 20 5c 0a 20 20 20 20 42 73 61 20  = Di; \.    Bsa 
2ea0: 3d 20 52 4f 4c 36 34 28 41 23 23 62 69 2c 20 36  = ROL64(A##bi, 6
2eb0: 32 29 3b 20 5c 0a 20 20 20 20 41 23 23 67 6f 20  2); \.    A##go 
2ec0: 5e 3d 20 44 6f 3b 20 5c 0a 20 20 20 20 42 73 65  ^= Do; \.    Bse
2ed0: 20 3d 20 52 4f 4c 36 34 28 41 23 23 67 6f 2c 20   = ROL64(A##go, 
2ee0: 35 35 29 3b 20 5c 0a 20 20 20 20 41 23 23 6b 75  55); \.    A##ku
2ef0: 20 5e 3d 20 44 75 3b 20 5c 0a 20 20 20 20 42 73   ^= Du; \.    Bs
2f00: 69 20 3d 20 52 4f 4c 36 34 28 41 23 23 6b 75 2c  i = ROL64(A##ku,
2f10: 20 33 39 29 3b 20 5c 0a 20 20 20 20 41 23 23 6d   39); \.    A##m
2f20: 61 20 5e 3d 20 44 61 3b 20 5c 0a 20 20 20 20 42  a ^= Da; \.    B
2f30: 73 6f 20 3d 20 52 4f 4c 36 34 28 41 23 23 6d 61  so = ROL64(A##ma
2f40: 2c 20 34 31 29 3b 20 5c 0a 20 20 20 20 41 23 23  , 41); \.    A##
2f50: 73 65 20 5e 3d 20 44 65 3b 20 5c 0a 20 20 20 20  se ^= De; \.    
2f60: 42 73 75 20 3d 20 52 4f 4c 36 34 28 41 23 23 73  Bsu = ROL64(A##s
2f70: 65 2c 20 32 29 3b 20 5c 0a 20 20 20 20 45 23 23  e, 2); \.    E##
2f80: 73 61 20 3d 20 20 20 42 73 61 20 5e 28 28 7e 42  sa =   Bsa ^((~B
2f90: 73 65 29 26 20 20 42 73 69 20 29 3b 20 5c 0a 20  se)&  Bsi ); \. 
2fa0: 20 20 20 45 23 23 73 65 20 3d 20 20 20 42 73 65     E##se =   Bse
2fb0: 20 5e 28 28 7e 42 73 69 29 26 20 20 42 73 6f 20   ^((~Bsi)&  Bso 
2fc0: 29 3b 20 5c 0a 20 20 20 20 45 23 23 73 69 20 3d  ); \.    E##si =
2fd0: 20 20 20 42 73 69 20 5e 28 28 7e 42 73 6f 29 26     Bsi ^((~Bso)&
2fe0: 20 20 42 73 75 20 29 3b 20 5c 0a 20 20 20 20 45    Bsu ); \.    E
2ff0: 23 23 73 6f 20 3d 20 20 20 42 73 6f 20 5e 28 28  ##so =   Bso ^((
3000: 7e 42 73 75 29 26 20 20 42 73 61 20 29 3b 20 5c  ~Bsu)&  Bsa ); \
3010: 0a 20 20 20 20 45 23 23 73 75 20 3d 20 20 20 42  .    E##su =   B
3020: 73 75 20 5e 28 28 7e 42 73 61 29 26 20 20 42 73  su ^((~Bsa)&  Bs
3030: 65 20 29 3b 20 5c 0a 5c 0a 0a 23 65 6e 64 69 66  e ); \.\..#endif
3040: 20 2f 2f 20 55 73 65 42 65 62 69 67 6f 6b 69 6d   // UseBebigokim
3050: 69 73 61 0a 0a 63 6f 6e 73 74 20 55 49 4e 54 36  isa..const UINT6
3060: 34 20 4b 65 63 63 61 6b 46 31 36 30 30 52 6f 75  4 KeccakF1600Rou
3070: 6e 64 43 6f 6e 73 74 61 6e 74 73 5b 32 34 5d 20  ndConstants[24] 
3080: 3d 20 7b 0a 20 20 20 20 30 78 30 30 30 30 30 30  = {.    0x000000
3090: 30 30 30 30 30 30 30 30 30 31 55 4c 4c 2c 0a 20  0000000001ULL,. 
30a0: 20 20 20 30 78 30 30 30 30 30 30 30 30 30 30 30     0x00000000000
30b0: 30 38 30 38 32 55 4c 4c 2c 0a 20 20 20 20 30 78  08082ULL,.    0x
30c0: 38 30 30 30 30 30 30 30 30 30 30 30 38 30 38 61  800000000000808a
30d0: 55 4c 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30  ULL,.    0x80000
30e0: 30 30 30 38 30 30 30 38 30 30 30 55 4c 4c 2c 0a  00080008000ULL,.
30f0: 20 20 20 20 30 78 30 30 30 30 30 30 30 30 30 30      0x0000000000
3100: 30 30 38 30 38 62 55 4c 4c 2c 0a 20 20 20 20 30  00808bULL,.    0
3110: 78 30 30 30 30 30 30 30 30 38 30 30 30 30 30 30  x000000008000000
3120: 31 55 4c 4c 2c 0a 20 20 20 20 30 78 38 30 30 30  1ULL,.    0x8000
3130: 30 30 30 30 38 30 30 30 38 30 38 31 55 4c 4c 2c  000080008081ULL,
3140: 0a 20 20 20 20 30 78 38 30 30 30 30 30 30 30 30  .    0x800000000
3150: 30 30 30 38 30 30 39 55 4c 4c 2c 0a 20 20 20 20  0008009ULL,.    
3160: 30 78 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0x00000000000000
3170: 38 61 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30  8aULL,.    0x000
3180: 30 30 30 30 30 30 30 30 30 30 30 38 38 55 4c 4c  0000000000088ULL
3190: 2c 0a 20 20 20 20 30 78 30 30 30 30 30 30 30 30  ,.    0x00000000
31a0: 38 30 30 30 38 30 30 39 55 4c 4c 2c 0a 20 20 20  80008009ULL,.   
31b0: 20 30 78 30 30 30 30 30 30 30 30 38 30 30 30 30   0x0000000080000
31c0: 30 30 61 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30  00aULL,.    0x00
31d0: 30 30 30 30 30 30 38 30 30 30 38 30 38 62 55 4c  0000008000808bUL
31e0: 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30 30 30  L,.    0x8000000
31f0: 30 30 30 30 30 30 30 38 62 55 4c 4c 2c 0a 20 20  00000008bULL,.  
3200: 20 20 30 78 38 30 30 30 30 30 30 30 30 30 30 30    0x800000000000
3210: 38 30 38 39 55 4c 4c 2c 0a 20 20 20 20 30 78 38  8089ULL,.    0x8
3220: 30 30 30 30 30 30 30 30 30 30 30 38 30 30 33 55  000000000008003U
3230: 4c 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30 30  LL,.    0x800000
3240: 30 30 30 30 30 30 38 30 30 32 55 4c 4c 2c 0a 20  0000008002ULL,. 
3250: 20 20 20 30 78 38 30 30 30 30 30 30 30 30 30 30     0x80000000000
3260: 30 30 30 38 30 55 4c 4c 2c 0a 20 20 20 20 30 78  00080ULL,.    0x
3270: 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 61  000000000000800a
3280: 55 4c 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30  ULL,.    0x80000
3290: 30 30 30 38 30 30 30 30 30 30 61 55 4c 4c 2c 0a  0008000000aULL,.
32a0: 20 20 20 20 30 78 38 30 30 30 30 30 30 30 38 30      0x8000000080
32b0: 30 30 38 30 38 31 55 4c 4c 2c 0a 20 20 20 20 30  008081ULL,.    0
32c0: 78 38 30 30 30 30 30 30 30 30 30 30 30 38 30 38  x800000000000808
32d0: 30 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 30  0ULL,.    0x0000
32e0: 30 30 30 30 38 30 30 30 30 30 30 31 55 4c 4c 2c  000080000001ULL,
32f0: 0a 20 20 20 20 30 78 38 30 30 30 30 30 30 30 38  .    0x800000008
3300: 30 30 30 38 30 30 38 55 4c 4c 20 7d 3b 0a 0a 23  0008008ULL };..#
3310: 64 65 66 69 6e 65 20 63 6f 70 79 46 72 6f 6d 53  define copyFromS
3320: 74 61 74 65 41 6e 64 58 6f 72 35 37 36 62 69 74  tateAndXor576bit
3330: 73 28 58 2c 20 73 74 61 74 65 2c 20 69 6e 70 75  s(X, state, inpu
3340: 74 29 20 5c 0a 20 20 20 20 58 23 23 62 61 20 3d  t) \.    X##ba =
3350: 20 73 74 61 74 65 5b 20 30 5d 5e 69 6e 70 75 74   state[ 0]^input
3360: 5b 20 30 5d 3b 20 5c 0a 20 20 20 20 58 23 23 62  [ 0]; \.    X##b
3370: 65 20 3d 20 73 74 61 74 65 5b 20 31 5d 5e 69 6e  e = state[ 1]^in
3380: 70 75 74 5b 20 31 5d 3b 20 5c 0a 20 20 20 20 58  put[ 1]; \.    X
3390: 23 23 62 69 20 3d 20 73 74 61 74 65 5b 20 32 5d  ##bi = state[ 2]
33a0: 5e 69 6e 70 75 74 5b 20 32 5d 3b 20 5c 0a 20 20  ^input[ 2]; \.  
33b0: 20 20 58 23 23 62 6f 20 3d 20 73 74 61 74 65 5b    X##bo = state[
33c0: 20 33 5d 5e 69 6e 70 75 74 5b 20 33 5d 3b 20 5c   3]^input[ 3]; \
33d0: 0a 20 20 20 20 58 23 23 62 75 20 3d 20 73 74 61  .    X##bu = sta
33e0: 74 65 5b 20 34 5d 5e 69 6e 70 75 74 5b 20 34 5d  te[ 4]^input[ 4]
33f0: 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 20 3d 20  ; \.    X##ga = 
3400: 73 74 61 74 65 5b 20 35 5d 5e 69 6e 70 75 74 5b  state[ 5]^input[
3410: 20 35 5d 3b 20 5c 0a 20 20 20 20 58 23 23 67 65   5]; \.    X##ge
3420: 20 3d 20 73 74 61 74 65 5b 20 36 5d 5e 69 6e 70   = state[ 6]^inp
3430: 75 74 5b 20 36 5d 3b 20 5c 0a 20 20 20 20 58 23  ut[ 6]; \.    X#
3440: 23 67 69 20 3d 20 73 74 61 74 65 5b 20 37 5d 5e  #gi = state[ 7]^
3450: 69 6e 70 75 74 5b 20 37 5d 3b 20 5c 0a 20 20 20  input[ 7]; \.   
3460: 20 58 23 23 67 6f 20 3d 20 73 74 61 74 65 5b 20   X##go = state[ 
3470: 38 5d 5e 69 6e 70 75 74 5b 20 38 5d 3b 20 5c 0a  8]^input[ 8]; \.
3480: 20 20 20 20 58 23 23 67 75 20 3d 20 73 74 61 74      X##gu = stat
3490: 65 5b 20 39 5d 3b 20 5c 0a 20 20 20 20 58 23 23  e[ 9]; \.    X##
34a0: 6b 61 20 3d 20 73 74 61 74 65 5b 31 30 5d 3b 20  ka = state[10]; 
34b0: 5c 0a 20 20 20 20 58 23 23 6b 65 20 3d 20 73 74  \.    X##ke = st
34c0: 61 74 65 5b 31 31 5d 3b 20 5c 0a 20 20 20 20 58  ate[11]; \.    X
34d0: 23 23 6b 69 20 3d 20 73 74 61 74 65 5b 31 32 5d  ##ki = state[12]
34e0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d 20  ; \.    X##ko = 
34f0: 73 74 61 74 65 5b 31 33 5d 3b 20 5c 0a 20 20 20  state[13]; \.   
3500: 20 58 23 23 6b 75 20 3d 20 73 74 61 74 65 5b 31   X##ku = state[1
3510: 34 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6d 61 20  4]; \.    X##ma 
3520: 3d 20 73 74 61 74 65 5b 31 35 5d 3b 20 5c 0a 20  = state[15]; \. 
3530: 20 20 20 58 23 23 6d 65 20 3d 20 73 74 61 74 65     X##me = state
3540: 5b 31 36 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6d  [16]; \.    X##m
3550: 69 20 3d 20 73 74 61 74 65 5b 31 37 5d 3b 20 5c  i = state[17]; \
3560: 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 73 74 61  .    X##mo = sta
3570: 74 65 5b 31 38 5d 3b 20 5c 0a 20 20 20 20 58 23  te[18]; \.    X#
3580: 23 6d 75 20 3d 20 73 74 61 74 65 5b 31 39 5d 3b  #mu = state[19];
3590: 20 5c 0a 20 20 20 20 58 23 23 73 61 20 3d 20 73   \.    X##sa = s
35a0: 74 61 74 65 5b 32 30 5d 3b 20 5c 0a 20 20 20 20  tate[20]; \.    
35b0: 58 23 23 73 65 20 3d 20 73 74 61 74 65 5b 32 31  X##se = state[21
35c0: 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73 69 20 3d  ]; \.    X##si =
35d0: 20 73 74 61 74 65 5b 32 32 5d 3b 20 5c 0a 20 20   state[22]; \.  
35e0: 20 20 58 23 23 73 6f 20 3d 20 73 74 61 74 65 5b    X##so = state[
35f0: 32 33 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73 75  23]; \.    X##su
3600: 20 3d 20 73 74 61 74 65 5b 32 34 5d 3b 20 5c 0a   = state[24]; \.
3610: 0a 23 64 65 66 69 6e 65 20 63 6f 70 79 46 72 6f  .#define copyFro
3620: 6d 53 74 61 74 65 41 6e 64 58 6f 72 38 33 32 62  mStateAndXor832b
3630: 69 74 73 28 58 2c 20 73 74 61 74 65 2c 20 69 6e  its(X, state, in
3640: 70 75 74 29 20 5c 0a 20 20 20 20 58 23 23 62 61  put) \.    X##ba
3650: 20 3d 20 73 74 61 74 65 5b 20 30 5d 5e 69 6e 70   = state[ 0]^inp
3660: 75 74 5b 20 30 5d 3b 20 5c 0a 20 20 20 20 58 23  ut[ 0]; \.    X#
3670: 23 62 65 20 3d 20 73 74 61 74 65 5b 20 31 5d 5e  #be = state[ 1]^
3680: 69 6e 70 75 74 5b 20 31 5d 3b 20 5c 0a 20 20 20  input[ 1]; \.   
3690: 20 58 23 23 62 69 20 3d 20 73 74 61 74 65 5b 20   X##bi = state[ 
36a0: 32 5d 5e 69 6e 70 75 74 5b 20 32 5d 3b 20 5c 0a  2]^input[ 2]; \.
36b0: 20 20 20 20 58 23 23 62 6f 20 3d 20 73 74 61 74      X##bo = stat
36c0: 65 5b 20 33 5d 5e 69 6e 70 75 74 5b 20 33 5d 3b  e[ 3]^input[ 3];
36d0: 20 5c 0a 20 20 20 20 58 23 23 62 75 20 3d 20 73   \.    X##bu = s
36e0: 74 61 74 65 5b 20 34 5d 5e 69 6e 70 75 74 5b 20  tate[ 4]^input[ 
36f0: 34 5d 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 20  4]; \.    X##ga 
3700: 3d 20 73 74 61 74 65 5b 20 35 5d 5e 69 6e 70 75  = state[ 5]^inpu
3710: 74 5b 20 35 5d 3b 20 5c 0a 20 20 20 20 58 23 23  t[ 5]; \.    X##
3720: 67 65 20 3d 20 73 74 61 74 65 5b 20 36 5d 5e 69  ge = state[ 6]^i
3730: 6e 70 75 74 5b 20 36 5d 3b 20 5c 0a 20 20 20 20  nput[ 6]; \.    
3740: 58 23 23 67 69 20 3d 20 73 74 61 74 65 5b 20 37  X##gi = state[ 7
3750: 5d 5e 69 6e 70 75 74 5b 20 37 5d 3b 20 5c 0a 20  ]^input[ 7]; \. 
3760: 20 20 20 58 23 23 67 6f 20 3d 20 73 74 61 74 65     X##go = state
3770: 5b 20 38 5d 5e 69 6e 70 75 74 5b 20 38 5d 3b 20  [ 8]^input[ 8]; 
3780: 5c 0a 20 20 20 20 58 23 23 67 75 20 3d 20 73 74  \.    X##gu = st
3790: 61 74 65 5b 20 39 5d 5e 69 6e 70 75 74 5b 20 39  ate[ 9]^input[ 9
37a0: 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 20 3d  ]; \.    X##ka =
37b0: 20 73 74 61 74 65 5b 31 30 5d 5e 69 6e 70 75 74   state[10]^input
37c0: 5b 31 30 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6b  [10]; \.    X##k
37d0: 65 20 3d 20 73 74 61 74 65 5b 31 31 5d 5e 69 6e  e = state[11]^in
37e0: 70 75 74 5b 31 31 5d 3b 20 5c 0a 20 20 20 20 58  put[11]; \.    X
37f0: 23 23 6b 69 20 3d 20 73 74 61 74 65 5b 31 32 5d  ##ki = state[12]
3800: 5e 69 6e 70 75 74 5b 31 32 5d 3b 20 5c 0a 20 20  ^input[12]; \.  
3810: 20 20 58 23 23 6b 6f 20 3d 20 73 74 61 74 65 5b    X##ko = state[
3820: 31 33 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75  13]; \.    X##ku
3830: 20 3d 20 73 74 61 74 65 5b 31 34 5d 3b 20 5c 0a   = state[14]; \.
3840: 20 20 20 20 58 23 23 6d 61 20 3d 20 73 74 61 74      X##ma = stat
3850: 65 5b 31 35 5d 3b 20 5c 0a 20 20 20 20 58 23 23  e[15]; \.    X##
3860: 6d 65 20 3d 20 73 74 61 74 65 5b 31 36 5d 3b 20  me = state[16]; 
3870: 5c 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 73 74  \.    X##mi = st
3880: 61 74 65 5b 31 37 5d 3b 20 5c 0a 20 20 20 20 58  ate[17]; \.    X
3890: 23 23 6d 6f 20 3d 20 73 74 61 74 65 5b 31 38 5d  ##mo = state[18]
38a0: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75 20 3d 20  ; \.    X##mu = 
38b0: 73 74 61 74 65 5b 31 39 5d 3b 20 5c 0a 20 20 20  state[19]; \.   
38c0: 20 58 23 23 73 61 20 3d 20 73 74 61 74 65 5b 32   X##sa = state[2
38d0: 30 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73 65 20  0]; \.    X##se 
38e0: 3d 20 73 74 61 74 65 5b 32 31 5d 3b 20 5c 0a 20  = state[21]; \. 
38f0: 20 20 20 58 23 23 73 69 20 3d 20 73 74 61 74 65     X##si = state
3900: 5b 32 32 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73  [22]; \.    X##s
3910: 6f 20 3d 20 73 74 61 74 65 5b 32 33 5d 3b 20 5c  o = state[23]; \
3920: 0a 20 20 20 20 58 23 23 73 75 20 3d 20 73 74 61  .    X##su = sta
3930: 74 65 5b 32 34 5d 3b 20 5c 0a 0a 23 64 65 66 69  te[24]; \..#defi
3940: 6e 65 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 65  ne copyFromState
3950: 41 6e 64 58 6f 72 31 30 32 34 62 69 74 73 28 58  AndXor1024bits(X
3960: 2c 20 73 74 61 74 65 2c 20 69 6e 70 75 74 29 20  , state, input) 
3970: 5c 0a 20 20 20 20 58 23 23 62 61 20 3d 20 73 74  \.    X##ba = st
3980: 61 74 65 5b 20 30 5d 5e 69 6e 70 75 74 5b 20 30  ate[ 0]^input[ 0
3990: 5d 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 20 3d  ]; \.    X##be =
39a0: 20 73 74 61 74 65 5b 20 31 5d 5e 69 6e 70 75 74   state[ 1]^input
39b0: 5b 20 31 5d 3b 20 5c 0a 20 20 20 20 58 23 23 62  [ 1]; \.    X##b
39c0: 69 20 3d 20 73 74 61 74 65 5b 20 32 5d 5e 69 6e  i = state[ 2]^in
39d0: 70 75 74 5b 20 32 5d 3b 20 5c 0a 20 20 20 20 58  put[ 2]; \.    X
39e0: 23 23 62 6f 20 3d 20 73 74 61 74 65 5b 20 33 5d  ##bo = state[ 3]
39f0: 5e 69 6e 70 75 74 5b 20 33 5d 3b 20 5c 0a 20 20  ^input[ 3]; \.  
3a00: 20 20 58 23 23 62 75 20 3d 20 73 74 61 74 65 5b    X##bu = state[
3a10: 20 34 5d 5e 69 6e 70 75 74 5b 20 34 5d 3b 20 5c   4]^input[ 4]; \
3a20: 0a 20 20 20 20 58 23 23 67 61 20 3d 20 73 74 61  .    X##ga = sta
3a30: 74 65 5b 20 35 5d 5e 69 6e 70 75 74 5b 20 35 5d  te[ 5]^input[ 5]
3a40: 3b 20 5c 0a 20 20 20 20 58 23 23 67 65 20 3d 20  ; \.    X##ge = 
3a50: 73 74 61 74 65 5b 20 36 5d 5e 69 6e 70 75 74 5b  state[ 6]^input[
3a60: 20 36 5d 3b 20 5c 0a 20 20 20 20 58 23 23 67 69   6]; \.    X##gi
3a70: 20 3d 20 73 74 61 74 65 5b 20 37 5d 5e 69 6e 70   = state[ 7]^inp
3a80: 75 74 5b 20 37 5d 3b 20 5c 0a 20 20 20 20 58 23  ut[ 7]; \.    X#
3a90: 23 67 6f 20 3d 20 73 74 61 74 65 5b 20 38 5d 5e  #go = state[ 8]^
3aa0: 69 6e 70 75 74 5b 20 38 5d 3b 20 5c 0a 20 20 20  input[ 8]; \.   
3ab0: 20 58 23 23 67 75 20 3d 20 73 74 61 74 65 5b 20   X##gu = state[ 
3ac0: 39 5d 5e 69 6e 70 75 74 5b 20 39 5d 3b 20 5c 0a  9]^input[ 9]; \.
3ad0: 20 20 20 20 58 23 23 6b 61 20 3d 20 73 74 61 74      X##ka = stat
3ae0: 65 5b 31 30 5d 5e 69 6e 70 75 74 5b 31 30 5d 3b  e[10]^input[10];
3af0: 20 5c 0a 20 20 20 20 58 23 23 6b 65 20 3d 20 73   \.    X##ke = s
3b00: 74 61 74 65 5b 31 31 5d 5e 69 6e 70 75 74 5b 31  tate[11]^input[1
3b10: 31 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 20  1]; \.    X##ki 
3b20: 3d 20 73 74 61 74 65 5b 31 32 5d 5e 69 6e 70 75  = state[12]^inpu
3b30: 74 5b 31 32 5d 3b 20 5c 0a 20 20 20 20 58 23 23  t[12]; \.    X##
3b40: 6b 6f 20 3d 20 73 74 61 74 65 5b 31 33 5d 5e 69  ko = state[13]^i
3b50: 6e 70 75 74 5b 31 33 5d 3b 20 5c 0a 20 20 20 20  nput[13]; \.    
3b60: 58 23 23 6b 75 20 3d 20 73 74 61 74 65 5b 31 34  X##ku = state[14
3b70: 5d 5e 69 6e 70 75 74 5b 31 34 5d 3b 20 5c 0a 20  ]^input[14]; \. 
3b80: 20 20 20 58 23 23 6d 61 20 3d 20 73 74 61 74 65     X##ma = state
3b90: 5b 31 35 5d 5e 69 6e 70 75 74 5b 31 35 5d 3b 20  [15]^input[15]; 
3ba0: 5c 0a 20 20 20 20 58 23 23 6d 65 20 3d 20 73 74  \.    X##me = st
3bb0: 61 74 65 5b 31 36 5d 3b 20 5c 0a 20 20 20 20 58  ate[16]; \.    X
3bc0: 23 23 6d 69 20 3d 20 73 74 61 74 65 5b 31 37 5d  ##mi = state[17]
3bd0: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20  ; \.    X##mo = 
3be0: 73 74 61 74 65 5b 31 38 5d 3b 20 5c 0a 20 20 20  state[18]; \.   
3bf0: 20 58 23 23 6d 75 20 3d 20 73 74 61 74 65 5b 31   X##mu = state[1
3c00: 39 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73 61 20  9]; \.    X##sa 
3c10: 3d 20 73 74 61 74 65 5b 32 30 5d 3b 20 5c 0a 20  = state[20]; \. 
3c20: 20 20 20 58 23 23 73 65 20 3d 20 73 74 61 74 65     X##se = state
3c30: 5b 32 31 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73  [21]; \.    X##s
3c40: 69 20 3d 20 73 74 61 74 65 5b 32 32 5d 3b 20 5c  i = state[22]; \
3c50: 0a 20 20 20 20 58 23 23 73 6f 20 3d 20 73 74 61  .    X##so = sta
3c60: 74 65 5b 32 33 5d 3b 20 5c 0a 20 20 20 20 58 23  te[23]; \.    X#
3c70: 23 73 75 20 3d 20 73 74 61 74 65 5b 32 34 5d 3b  #su = state[24];
3c80: 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63 6f 70 79   \..#define copy
3c90: 46 72 6f 6d 53 74 61 74 65 41 6e 64 58 6f 72 31  FromStateAndXor1
3ca0: 30 38 38 62 69 74 73 28 58 2c 20 73 74 61 74 65  088bits(X, state
3cb0: 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20 20 20 58  , input) \.    X
3cc0: 23 23 62 61 20 3d 20 73 74 61 74 65 5b 20 30 5d  ##ba = state[ 0]
3cd0: 5e 69 6e 70 75 74 5b 20 30 5d 3b 20 5c 0a 20 20  ^input[ 0]; \.  
3ce0: 20 20 58 23 23 62 65 20 3d 20 73 74 61 74 65 5b    X##be = state[
3cf0: 20 31 5d 5e 69 6e 70 75 74 5b 20 31 5d 3b 20 5c   1]^input[ 1]; \
3d00: 0a 20 20 20 20 58 23 23 62 69 20 3d 20 73 74 61  .    X##bi = sta
3d10: 74 65 5b 20 32 5d 5e 69 6e 70 75 74 5b 20 32 5d  te[ 2]^input[ 2]
3d20: 3b 20 5c 0a 20 20 20 20 58 23 23 62 6f 20 3d 20  ; \.    X##bo = 
3d30: 73 74 61 74 65 5b 20 33 5d 5e 69 6e 70 75 74 5b  state[ 3]^input[
3d40: 20 33 5d 3b 20 5c 0a 20 20 20 20 58 23 23 62 75   3]; \.    X##bu
3d50: 20 3d 20 73 74 61 74 65 5b 20 34 5d 5e 69 6e 70   = state[ 4]^inp
3d60: 75 74 5b 20 34 5d 3b 20 5c 0a 20 20 20 20 58 23  ut[ 4]; \.    X#
3d70: 23 67 61 20 3d 20 73 74 61 74 65 5b 20 35 5d 5e  #ga = state[ 5]^
3d80: 69 6e 70 75 74 5b 20 35 5d 3b 20 5c 0a 20 20 20  input[ 5]; \.   
3d90: 20 58 23 23 67 65 20 3d 20 73 74 61 74 65 5b 20   X##ge = state[ 
3da0: 36 5d 5e 69 6e 70 75 74 5b 20 36 5d 3b 20 5c 0a  6]^input[ 6]; \.
3db0: 20 20 20 20 58 23 23 67 69 20 3d 20 73 74 61 74      X##gi = stat
3dc0: 65 5b 20 37 5d 5e 69 6e 70 75 74 5b 20 37 5d 3b  e[ 7]^input[ 7];
3dd0: 20 5c 0a 20 20 20 20 58 23 23 67 6f 20 3d 20 73   \.    X##go = s
3de0: 74 61 74 65 5b 20 38 5d 5e 69 6e 70 75 74 5b 20  tate[ 8]^input[ 
3df0: 38 5d 3b 20 5c 0a 20 20 20 20 58 23 23 67 75 20  8]; \.    X##gu 
3e00: 3d 20 73 74 61 74 65 5b 20 39 5d 5e 69 6e 70 75  = state[ 9]^inpu
3e10: 74 5b 20 39 5d 3b 20 5c 0a 20 20 20 20 58 23 23  t[ 9]; \.    X##
3e20: 6b 61 20 3d 20 73 74 61 74 65 5b 31 30 5d 5e 69  ka = state[10]^i
3e30: 6e 70 75 74 5b 31 30 5d 3b 20 5c 0a 20 20 20 20  nput[10]; \.    
3e40: 58 23 23 6b 65 20 3d 20 73 74 61 74 65 5b 31 31  X##ke = state[11
3e50: 5d 5e 69 6e 70 75 74 5b 31 31 5d 3b 20 5c 0a 20  ]^input[11]; \. 
3e60: 20 20 20 58 23 23 6b 69 20 3d 20 73 74 61 74 65     X##ki = state
3e70: 5b 31 32 5d 5e 69 6e 70 75 74 5b 31 32 5d 3b 20  [12]^input[12]; 
3e80: 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d 20 73 74  \.    X##ko = st
3e90: 61 74 65 5b 31 33 5d 5e 69 6e 70 75 74 5b 31 33  ate[13]^input[13
3ea0: 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 20 3d  ]; \.    X##ku =
3eb0: 20 73 74 61 74 65 5b 31 34 5d 5e 69 6e 70 75 74   state[14]^input
3ec0: 5b 31 34 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6d  [14]; \.    X##m
3ed0: 61 20 3d 20 73 74 61 74 65 5b 31 35 5d 5e 69 6e  a = state[15]^in
3ee0: 70 75 74 5b 31 35 5d 3b 20 5c 0a 20 20 20 20 58  put[15]; \.    X
3ef0: 23 23 6d 65 20 3d 20 73 74 61 74 65 5b 31 36 5d  ##me = state[16]
3f00: 5e 69 6e 70 75 74 5b 31 36 5d 3b 20 5c 0a 20 20  ^input[16]; \.  
3f10: 20 20 58 23 23 6d 69 20 3d 20 73 74 61 74 65 5b    X##mi = state[
3f20: 31 37 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6d 6f  17]; \.    X##mo
3f30: 20 3d 20 73 74 61 74 65 5b 31 38 5d 3b 20 5c 0a   = state[18]; \.
3f40: 20 20 20 20 58 23 23 6d 75 20 3d 20 73 74 61 74      X##mu = stat
3f50: 65 5b 31 39 5d 3b 20 5c 0a 20 20 20 20 58 23 23  e[19]; \.    X##
3f60: 73 61 20 3d 20 73 74 61 74 65 5b 32 30 5d 3b 20  sa = state[20]; 
3f70: 5c 0a 20 20 20 20 58 23 23 73 65 20 3d 20 73 74  \.    X##se = st
3f80: 61 74 65 5b 32 31 5d 3b 20 5c 0a 20 20 20 20 58  ate[21]; \.    X
3f90: 23 23 73 69 20 3d 20 73 74 61 74 65 5b 32 32 5d  ##si = state[22]
3fa0: 3b 20 5c 0a 20 20 20 20 58 23 23 73 6f 20 3d 20  ; \.    X##so = 
3fb0: 73 74 61 74 65 5b 32 33 5d 3b 20 5c 0a 20 20 20  state[23]; \.   
3fc0: 20 58 23 23 73 75 20 3d 20 73 74 61 74 65 5b 32   X##su = state[2
3fd0: 34 5d 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63  4]; \..#define c
3fe0: 6f 70 79 46 72 6f 6d 53 74 61 74 65 41 6e 64 58  opyFromStateAndX
3ff0: 6f 72 31 31 35 32 62 69 74 73 28 58 2c 20 73 74  or1152bits(X, st
4000: 61 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20  ate, input) \.  
4010: 20 20 58 23 23 62 61 20 3d 20 73 74 61 74 65 5b    X##ba = state[
4020: 20 30 5d 5e 69 6e 70 75 74 5b 20 30 5d 3b 20 5c   0]^input[ 0]; \
4030: 0a 20 20 20 20 58 23 23 62 65 20 3d 20 73 74 61  .    X##be = sta
4040: 74 65 5b 20 31 5d 5e 69 6e 70 75 74 5b 20 31 5d  te[ 1]^input[ 1]
4050: 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 20 3d 20  ; \.    X##bi = 
4060: 73 74 61 74 65 5b 20 32 5d 5e 69 6e 70 75 74 5b  state[ 2]^input[
4070: 20 32 5d 3b 20 5c 0a 20 20 20 20 58 23 23 62 6f   2]; \.    X##bo
4080: 20 3d 20 73 74 61 74 65 5b 20 33 5d 5e 69 6e 70   = state[ 3]^inp
4090: 75 74 5b 20 33 5d 3b 20 5c 0a 20 20 20 20 58 23  ut[ 3]; \.    X#
40a0: 23 62 75 20 3d 20 73 74 61 74 65 5b 20 34 5d 5e  #bu = state[ 4]^
40b0: 69 6e 70 75 74 5b 20 34 5d 3b 20 5c 0a 20 20 20  input[ 4]; \.   
40c0: 20 58 23 23 67 61 20 3d 20 73 74 61 74 65 5b 20   X##ga = state[ 
40d0: 35 5d 5e 69 6e 70 75 74 5b 20 35 5d 3b 20 5c 0a  5]^input[ 5]; \.
40e0: 20 20 20 20 58 23 23 67 65 20 3d 20 73 74 61 74      X##ge = stat
40f0: 65 5b 20 36 5d 5e 69 6e 70 75 74 5b 20 36 5d 3b  e[ 6]^input[ 6];
4100: 20 5c 0a 20 20 20 20 58 23 23 67 69 20 3d 20 73   \.    X##gi = s
4110: 74 61 74 65 5b 20 37 5d 5e 69 6e 70 75 74 5b 20  tate[ 7]^input[ 
4120: 37 5d 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f 20  7]; \.    X##go 
4130: 3d 20 73 74 61 74 65 5b 20 38 5d 5e 69 6e 70 75  = state[ 8]^inpu
4140: 74 5b 20 38 5d 3b 20 5c 0a 20 20 20 20 58 23 23  t[ 8]; \.    X##
4150: 67 75 20 3d 20 73 74 61 74 65 5b 20 39 5d 5e 69  gu = state[ 9]^i
4160: 6e 70 75 74 5b 20 39 5d 3b 20 5c 0a 20 20 20 20  nput[ 9]; \.    
4170: 58 23 23 6b 61 20 3d 20 73 74 61 74 65 5b 31 30  X##ka = state[10
4180: 5d 5e 69 6e 70 75 74 5b 31 30 5d 3b 20 5c 0a 20  ]^input[10]; \. 
4190: 20 20 20 58 23 23 6b 65 20 3d 20 73 74 61 74 65     X##ke = state
41a0: 5b 31 31 5d 5e 69 6e 70 75 74 5b 31 31 5d 3b 20  [11]^input[11]; 
41b0: 5c 0a 20 20 20 20 58 23 23 6b 69 20 3d 20 73 74  \.    X##ki = st
41c0: 61 74 65 5b 31 32 5d 5e 69 6e 70 75 74 5b 31 32  ate[12]^input[12
41d0: 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d  ]; \.    X##ko =
41e0: 20 73 74 61 74 65 5b 31 33 5d 5e 69 6e 70 75 74   state[13]^input
41f0: 5b 31 33 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6b  [13]; \.    X##k
4200: 75 20 3d 20 73 74 61 74 65 5b 31 34 5d 5e 69 6e  u = state[14]^in
4210: 70 75 74 5b 31 34 5d 3b 20 5c 0a 20 20 20 20 58  put[14]; \.    X
4220: 23 23 6d 61 20 3d 20 73 74 61 74 65 5b 31 35 5d  ##ma = state[15]
4230: 5e 69 6e 70 75 74 5b 31 35 5d 3b 20 5c 0a 20 20  ^input[15]; \.  
4240: 20 20 58 23 23 6d 65 20 3d 20 73 74 61 74 65 5b    X##me = state[
4250: 31 36 5d 5e 69 6e 70 75 74 5b 31 36 5d 3b 20 5c  16]^input[16]; \
4260: 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 73 74 61  .    X##mi = sta
4270: 74 65 5b 31 37 5d 5e 69 6e 70 75 74 5b 31 37 5d  te[17]^input[17]
4280: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20  ; \.    X##mo = 
4290: 73 74 61 74 65 5b 31 38 5d 3b 20 5c 0a 20 20 20  state[18]; \.   
42a0: 20 58 23 23 6d 75 20 3d 20 73 74 61 74 65 5b 31   X##mu = state[1
42b0: 39 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73 61 20  9]; \.    X##sa 
42c0: 3d 20 73 74 61 74 65 5b 32 30 5d 3b 20 5c 0a 20  = state[20]; \. 
42d0: 20 20 20 58 23 23 73 65 20 3d 20 73 74 61 74 65     X##se = state
42e0: 5b 32 31 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73  [21]; \.    X##s
42f0: 69 20 3d 20 73 74 61 74 65 5b 32 32 5d 3b 20 5c  i = state[22]; \
4300: 0a 20 20 20 20 58 23 23 73 6f 20 3d 20 73 74 61  .    X##so = sta
4310: 74 65 5b 32 33 5d 3b 20 5c 0a 20 20 20 20 58 23  te[23]; \.    X#
4320: 23 73 75 20 3d 20 73 74 61 74 65 5b 32 34 5d 3b  #su = state[24];
4330: 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63 6f 70 79   \..#define copy
4340: 46 72 6f 6d 53 74 61 74 65 41 6e 64 58 6f 72 31  FromStateAndXor1
4350: 33 34 34 62 69 74 73 28 58 2c 20 73 74 61 74 65  344bits(X, state
4360: 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20 20 20 58  , input) \.    X
4370: 23 23 62 61 20 3d 20 73 74 61 74 65 5b 20 30 5d  ##ba = state[ 0]
4380: 5e 69 6e 70 75 74 5b 20 30 5d 3b 20 5c 0a 20 20  ^input[ 0]; \.  
4390: 20 20 58 23 23 62 65 20 3d 20 73 74 61 74 65 5b    X##be = state[
43a0: 20 31 5d 5e 69 6e 70 75 74 5b 20 31 5d 3b 20 5c   1]^input[ 1]; \
43b0: 0a 20 20 20 20 58 23 23 62 69 20 3d 20 73 74 61  .    X##bi = sta
43c0: 74 65 5b 20 32 5d 5e 69 6e 70 75 74 5b 20 32 5d  te[ 2]^input[ 2]
43d0: 3b 20 5c 0a 20 20 20 20 58 23 23 62 6f 20 3d 20  ; \.    X##bo = 
43e0: 73 74 61 74 65 5b 20 33 5d 5e 69 6e 70 75 74 5b  state[ 3]^input[
43f0: 20 33 5d 3b 20 5c 0a 20 20 20 20 58 23 23 62 75   3]; \.    X##bu
4400: 20 3d 20 73 74 61 74 65 5b 20 34 5d 5e 69 6e 70   = state[ 4]^inp
4410: 75 74 5b 20 34 5d 3b 20 5c 0a 20 20 20 20 58 23  ut[ 4]; \.    X#
4420: 23 67 61 20 3d 20 73 74 61 74 65 5b 20 35 5d 5e  #ga = state[ 5]^
4430: 69 6e 70 75 74 5b 20 35 5d 3b 20 5c 0a 20 20 20  input[ 5]; \.   
4440: 20 58 23 23 67 65 20 3d 20 73 74 61 74 65 5b 20   X##ge = state[ 
4450: 36 5d 5e 69 6e 70 75 74 5b 20 36 5d 3b 20 5c 0a  6]^input[ 6]; \.
4460: 20 20 20 20 58 23 23 67 69 20 3d 20 73 74 61 74      X##gi = stat
4470: 65 5b 20 37 5d 5e 69 6e 70 75 74 5b 20 37 5d 3b  e[ 7]^input[ 7];
4480: 20 5c 0a 20 20 20 20 58 23 23 67 6f 20 3d 20 73   \.    X##go = s
4490: 74 61 74 65 5b 20 38 5d 5e 69 6e 70 75 74 5b 20  tate[ 8]^input[ 
44a0: 38 5d 3b 20 5c 0a 20 20 20 20 58 23 23 67 75 20  8]; \.    X##gu 
44b0: 3d 20 73 74 61 74 65 5b 20 39 5d 5e 69 6e 70 75  = state[ 9]^inpu
44c0: 74 5b 20 39 5d 3b 20 5c 0a 20 20 20 20 58 23 23  t[ 9]; \.    X##
44d0: 6b 61 20 3d 20 73 74 61 74 65 5b 31 30 5d 5e 69  ka = state[10]^i
44e0: 6e 70 75 74 5b 31 30 5d 3b 20 5c 0a 20 20 20 20  nput[10]; \.    
44f0: 58 23 23 6b 65 20 3d 20 73 74 61 74 65 5b 31 31  X##ke = state[11
4500: 5d 5e 69 6e 70 75 74 5b 31 31 5d 3b 20 5c 0a 20  ]^input[11]; \. 
4510: 20 20 20 58 23 23 6b 69 20 3d 20 73 74 61 74 65     X##ki = state
4520: 5b 31 32 5d 5e 69 6e 70 75 74 5b 31 32 5d 3b 20  [12]^input[12]; 
4530: 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d 20 73 74  \.    X##ko = st
4540: 61 74 65 5b 31 33 5d 5e 69 6e 70 75 74 5b 31 33  ate[13]^input[13
4550: 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 20 3d  ]; \.    X##ku =
4560: 20 73 74 61 74 65 5b 31 34 5d 5e 69 6e 70 75 74   state[14]^input
4570: 5b 31 34 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6d  [14]; \.    X##m
4580: 61 20 3d 20 73 74 61 74 65 5b 31 35 5d 5e 69 6e  a = state[15]^in
4590: 70 75 74 5b 31 35 5d 3b 20 5c 0a 20 20 20 20 58  put[15]; \.    X
45a0: 23 23 6d 65 20 3d 20 73 74 61 74 65 5b 31 36 5d  ##me = state[16]
45b0: 5e 69 6e 70 75 74 5b 31 36 5d 3b 20 5c 0a 20 20  ^input[16]; \.  
45c0: 20 20 58 23 23 6d 69 20 3d 20 73 74 61 74 65 5b    X##mi = state[
45d0: 31 37 5d 5e 69 6e 70 75 74 5b 31 37 5d 3b 20 5c  17]^input[17]; \
45e0: 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 73 74 61  .    X##mo = sta
45f0: 74 65 5b 31 38 5d 5e 69 6e 70 75 74 5b 31 38 5d  te[18]^input[18]
4600: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75 20 3d 20  ; \.    X##mu = 
4610: 73 74 61 74 65 5b 31 39 5d 5e 69 6e 70 75 74 5b  state[19]^input[
4620: 31 39 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73 61  19]; \.    X##sa
4630: 20 3d 20 73 74 61 74 65 5b 32 30 5d 5e 69 6e 70   = state[20]^inp
4640: 75 74 5b 32 30 5d 3b 20 5c 0a 20 20 20 20 58 23  ut[20]; \.    X#
4650: 23 73 65 20 3d 20 73 74 61 74 65 5b 32 31 5d 3b  #se = state[21];
4660: 20 5c 0a 20 20 20 20 58 23 23 73 69 20 3d 20 73   \.    X##si = s
4670: 74 61 74 65 5b 32 32 5d 3b 20 5c 0a 20 20 20 20  tate[22]; \.    
4680: 58 23 23 73 6f 20 3d 20 73 74 61 74 65 5b 32 33  X##so = state[23
4690: 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73 75 20 3d  ]; \.    X##su =
46a0: 20 73 74 61 74 65 5b 32 34 5d 3b 20 5c 0a 0a 23   state[24]; \..#
46b0: 64 65 66 69 6e 65 20 63 6f 70 79 46 72 6f 6d 53  define copyFromS
46c0: 74 61 74 65 28 58 2c 20 73 74 61 74 65 29 20 5c  tate(X, state) \
46d0: 0a 20 20 20 20 58 23 23 62 61 20 3d 20 73 74 61  .    X##ba = sta
46e0: 74 65 5b 20 30 5d 3b 20 5c 0a 20 20 20 20 58 23  te[ 0]; \.    X#
46f0: 23 62 65 20 3d 20 73 74 61 74 65 5b 20 31 5d 3b  #be = state[ 1];
4700: 20 5c 0a 20 20 20 20 58 23 23 62 69 20 3d 20 73   \.    X##bi = s
4710: 74 61 74 65 5b 20 32 5d 3b 20 5c 0a 20 20 20 20  tate[ 2]; \.    
4720: 58 23 23 62 6f 20 3d 20 73 74 61 74 65 5b 20 33  X##bo = state[ 3
4730: 5d 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 20 3d  ]; \.    X##bu =
4740: 20 73 74 61 74 65 5b 20 34 5d 3b 20 5c 0a 20 20   state[ 4]; \.  
4750: 20 20 58 23 23 67 61 20 3d 20 73 74 61 74 65 5b    X##ga = state[
4760: 20 35 5d 3b 20 5c 0a 20 20 20 20 58 23 23 67 65   5]; \.    X##ge
4770: 20 3d 20 73 74 61 74 65 5b 20 36 5d 3b 20 5c 0a   = state[ 6]; \.
4780: 20 20 20 20 58 23 23 67 69 20 3d 20 73 74 61 74      X##gi = stat
4790: 65 5b 20 37 5d 3b 20 5c 0a 20 20 20 20 58 23 23  e[ 7]; \.    X##
47a0: 67 6f 20 3d 20 73 74 61 74 65 5b 20 38 5d 3b 20  go = state[ 8]; 
47b0: 5c 0a 20 20 20 20 58 23 23 67 75 20 3d 20 73 74  \.    X##gu = st
47c0: 61 74 65 5b 20 39 5d 3b 20 5c 0a 20 20 20 20 58  ate[ 9]; \.    X
47d0: 23 23 6b 61 20 3d 20 73 74 61 74 65 5b 31 30 5d  ##ka = state[10]
47e0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 20 3d 20  ; \.    X##ke = 
47f0: 73 74 61 74 65 5b 31 31 5d 3b 20 5c 0a 20 20 20  state[11]; \.   
4800: 20 58 23 23 6b 69 20 3d 20 73 74 61 74 65 5b 31   X##ki = state[1
4810: 32 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 20  2]; \.    X##ko 
4820: 3d 20 73 74 61 74 65 5b 31 33 5d 3b 20 5c 0a 20  = state[13]; \. 
4830: 20 20 20 58 23 23 6b 75 20 3d 20 73 74 61 74 65     X##ku = state
4840: 5b 31 34 5d 3b 20 5c 0a 20 20 20 20 58 23 23 6d  [14]; \.    X##m
4850: 61 20 3d 20 73 74 61 74 65 5b 31 35 5d 3b 20 5c  a = state[15]; \
4860: 0a 20 20 20 20 58 23 23 6d 65 20 3d 20 73 74 61  .    X##me = sta
4870: 74 65 5b 31 36 5d 3b 20 5c 0a 20 20 20 20 58 23  te[16]; \.    X#
4880: 23 6d 69 20 3d 20 73 74 61 74 65 5b 31 37 5d 3b  #mi = state[17];
4890: 20 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 73   \.    X##mo = s
48a0: 74 61 74 65 5b 31 38 5d 3b 20 5c 0a 20 20 20 20  tate[18]; \.    
48b0: 58 23 23 6d 75 20 3d 20 73 74 61 74 65 5b 31 39  X##mu = state[19
48c0: 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73 61 20 3d  ]; \.    X##sa =
48d0: 20 73 74 61 74 65 5b 32 30 5d 3b 20 5c 0a 20 20   state[20]; \.  
48e0: 20 20 58 23 23 73 65 20 3d 20 73 74 61 74 65 5b    X##se = state[
48f0: 32 31 5d 3b 20 5c 0a 20 20 20 20 58 23 23 73 69  21]; \.    X##si
4900: 20 3d 20 73 74 61 74 65 5b 32 32 5d 3b 20 5c 0a   = state[22]; \.
4910: 20 20 20 20 58 23 23 73 6f 20 3d 20 73 74 61 74      X##so = stat
4920: 65 5b 32 33 5d 3b 20 5c 0a 20 20 20 20 58 23 23  e[23]; \.    X##
4930: 73 75 20 3d 20 73 74 61 74 65 5b 32 34 5d 3b 20  su = state[24]; 
4940: 5c 0a 0a 23 64 65 66 69 6e 65 20 63 6f 70 79 54  \..#define copyT
4950: 6f 53 74 61 74 65 28 73 74 61 74 65 2c 20 58 29  oState(state, X)
4960: 20 5c 0a 20 20 20 20 73 74 61 74 65 5b 20 30 5d   \.    state[ 0]
4970: 20 3d 20 58 23 23 62 61 3b 20 5c 0a 20 20 20 20   = X##ba; \.    
4980: 73 74 61 74 65 5b 20 31 5d 20 3d 20 58 23 23 62  state[ 1] = X##b
4990: 65 3b 20 5c 0a 20 20 20 20 73 74 61 74 65 5b 20  e; \.    state[ 
49a0: 32 5d 20 3d 20 58 23 23 62 69 3b 20 5c 0a 20 20  2] = X##bi; \.  
49b0: 20 20 73 74 61 74 65 5b 20 33 5d 20 3d 20 58 23    state[ 3] = X#
49c0: 23 62 6f 3b 20 5c 0a 20 20 20 20 73 74 61 74 65  #bo; \.    state
49d0: 5b 20 34 5d 20 3d 20 58 23 23 62 75 3b 20 5c 0a  [ 4] = X##bu; \.
49e0: 20 20 20 20 73 74 61 74 65 5b 20 35 5d 20 3d 20      state[ 5] = 
49f0: 58 23 23 67 61 3b 20 5c 0a 20 20 20 20 73 74 61  X##ga; \.    sta
4a00: 74 65 5b 20 36 5d 20 3d 20 58 23 23 67 65 3b 20  te[ 6] = X##ge; 
4a10: 5c 0a 20 20 20 20 73 74 61 74 65 5b 20 37 5d 20  \.    state[ 7] 
4a20: 3d 20 58 23 23 67 69 3b 20 5c 0a 20 20 20 20 73  = X##gi; \.    s
4a30: 74 61 74 65 5b 20 38 5d 20 3d 20 58 23 23 67 6f  tate[ 8] = X##go
4a40: 3b 20 5c 0a 20 20 20 20 73 74 61 74 65 5b 20 39  ; \.    state[ 9
4a50: 5d 20 3d 20 58 23 23 67 75 3b 20 5c 0a 20 20 20  ] = X##gu; \.   
4a60: 20 73 74 61 74 65 5b 31 30 5d 20 3d 20 58 23 23   state[10] = X##
4a70: 6b 61 3b 20 5c 0a 20 20 20 20 73 74 61 74 65 5b  ka; \.    state[
4a80: 31 31 5d 20 3d 20 58 23 23 6b 65 3b 20 5c 0a 20  11] = X##ke; \. 
4a90: 20 20 20 73 74 61 74 65 5b 31 32 5d 20 3d 20 58     state[12] = X
4aa0: 23 23 6b 69 3b 20 5c 0a 20 20 20 20 73 74 61 74  ##ki; \.    stat
4ab0: 65 5b 31 33 5d 20 3d 20 58 23 23 6b 6f 3b 20 5c  e[13] = X##ko; \
4ac0: 0a 20 20 20 20 73 74 61 74 65 5b 31 34 5d 20 3d  .    state[14] =
4ad0: 20 58 23 23 6b 75 3b 20 5c 0a 20 20 20 20 73 74   X##ku; \.    st
4ae0: 61 74 65 5b 31 35 5d 20 3d 20 58 23 23 6d 61 3b  ate[15] = X##ma;
4af0: 20 5c 0a 20 20 20 20 73 74 61 74 65 5b 31 36 5d   \.    state[16]
4b00: 20 3d 20 58 23 23 6d 65 3b 20 5c 0a 20 20 20 20   = X##me; \.    
4b10: 73 74 61 74 65 5b 31 37 5d 20 3d 20 58 23 23 6d  state[17] = X##m
4b20: 69 3b 20 5c 0a 20 20 20 20 73 74 61 74 65 5b 31  i; \.    state[1
4b30: 38 5d 20 3d 20 58 23 23 6d 6f 3b 20 5c 0a 20 20  8] = X##mo; \.  
4b40: 20 20 73 74 61 74 65 5b 31 39 5d 20 3d 20 58 23    state[19] = X#
4b50: 23 6d 75 3b 20 5c 0a 20 20 20 20 73 74 61 74 65  #mu; \.    state
4b60: 5b 32 30 5d 20 3d 20 58 23 23 73 61 3b 20 5c 0a  [20] = X##sa; \.
4b70: 20 20 20 20 73 74 61 74 65 5b 32 31 5d 20 3d 20      state[21] = 
4b80: 58 23 23 73 65 3b 20 5c 0a 20 20 20 20 73 74 61  X##se; \.    sta
4b90: 74 65 5b 32 32 5d 20 3d 20 58 23 23 73 69 3b 20  te[22] = X##si; 
4ba0: 5c 0a 20 20 20 20 73 74 61 74 65 5b 32 33 5d 20  \.    state[23] 
4bb0: 3d 20 58 23 23 73 6f 3b 20 5c 0a 20 20 20 20 73  = X##so; \.    s
4bc0: 74 61 74 65 5b 32 34 5d 20 3d 20 58 23 23 73 75  tate[24] = X##su
4bd0: 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63 6f 70  ; \..#define cop
4be0: 79 53 74 61 74 65 56 61 72 69 61 62 6c 65 73 28  yStateVariables(
4bf0: 58 2c 20 59 29 20 5c 0a 20 20 20 20 58 23 23 62  X, Y) \.    X##b
4c00: 61 20 3d 20 59 23 23 62 61 3b 20 5c 0a 20 20 20  a = Y##ba; \.   
4c10: 20 58 23 23 62 65 20 3d 20 59 23 23 62 65 3b 20   X##be = Y##be; 
4c20: 5c 0a 20 20 20 20 58 23 23 62 69 20 3d 20 59 23  \.    X##bi = Y#
4c30: 23 62 69 3b 20 5c 0a 20 20 20 20 58 23 23 62 6f  #bi; \.    X##bo
4c40: 20 3d 20 59 23 23 62 6f 3b 20 5c 0a 20 20 20 20   = Y##bo; \.    
4c50: 58 23 23 62 75 20 3d 20 59 23 23 62 75 3b 20 5c  X##bu = Y##bu; \
4c60: 0a 20 20 20 20 58 23 23 67 61 20 3d 20 59 23 23  .    X##ga = Y##
4c70: 67 61 3b 20 5c 0a 20 20 20 20 58 23 23 67 65 20  ga; \.    X##ge 
4c80: 3d 20 59 23 23 67 65 3b 20 5c 0a 20 20 20 20 58  = Y##ge; \.    X
4c90: 23 23 67 69 20 3d 20 59 23 23 67 69 3b 20 5c 0a  ##gi = Y##gi; \.
4ca0: 20 20 20 20 58 23 23 67 6f 20 3d 20 59 23 23 67      X##go = Y##g
4cb0: 6f 3b 20 5c 0a 20 20 20 20 58 23 23 67 75 20 3d  o; \.    X##gu =
4cc0: 20 59 23 23 67 75 3b 20 5c 0a 20 20 20 20 58 23   Y##gu; \.    X#
4cd0: 23 6b 61 20 3d 20 59 23 23 6b 61 3b 20 5c 0a 20  #ka = Y##ka; \. 
4ce0: 20 20 20 58 23 23 6b 65 20 3d 20 59 23 23 6b 65     X##ke = Y##ke
4cf0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 20 3d 20  ; \.    X##ki = 
4d00: 59 23 23 6b 69 3b 20 5c 0a 20 20 20 20 58 23 23  Y##ki; \.    X##
4d10: 6b 6f 20 3d 20 59 23 23 6b 6f 3b 20 5c 0a 20 20  ko = Y##ko; \.  
4d20: 20 20 58 23 23 6b 75 20 3d 20 59 23 23 6b 75 3b    X##ku = Y##ku;
4d30: 20 5c 0a 20 20 20 20 58 23 23 6d 61 20 3d 20 59   \.    X##ma = Y
4d40: 23 23 6d 61 3b 20 5c 0a 20 20 20 20 58 23 23 6d  ##ma; \.    X##m
4d50: 65 20 3d 20 59 23 23 6d 65 3b 20 5c 0a 20 20 20  e = Y##me; \.   
4d60: 20 58 23 23 6d 69 20 3d 20 59 23 23 6d 69 3b 20   X##mi = Y##mi; 
4d70: 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 59 23  \.    X##mo = Y#
4d80: 23 6d 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75  #mo; \.    X##mu
4d90: 20 3d 20 59 23 23 6d 75 3b 20 5c 0a 20 20 20 20   = Y##mu; \.    
4da0: 58 23 23 73 61 20 3d 20 59 23 23 73 61 3b 20 5c  X##sa = Y##sa; \
4db0: 0a 20 20 20 20 58 23 23 73 65 20 3d 20 59 23 23  .    X##se = Y##
4dc0: 73 65 3b 20 5c 0a 20 20 20 20 58 23 23 73 69 20  se; \.    X##si 
4dd0: 3d 20 59 23 23 73 69 3b 20 5c 0a 20 20 20 20 58  = Y##si; \.    X
4de0: 23 23 73 6f 20 3d 20 59 23 23 73 6f 3b 20 5c 0a  ##so = Y##so; \.
4df0: 20 20 20 20 58 23 23 73 75 20 3d 20 59 23 23 73      X##su = Y##s
4e00: 75 3b 20 5c 0a 0a                                u; \..