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; \..