0000: 2f 2a 0a 54 68 65 20 4b 65 63 63 61 6b 20 73 70 /*.The Keccak sp
0010: 6f 6e 67 65 20 66 75 6e 63 74 69 6f 6e 2c 20 64 onge function, d
0020: 65 73 69 67 6e 65 64 20 62 79 20 47 75 69 64 6f esigned by Guido
0030: 20 42 65 72 74 6f 6e 69 2c 20 4a 6f 61 6e 20 44 Bertoni, Joan D
0040: 61 65 6d 65 6e 2c 0a 4d 69 63 68 61 c3 ab 6c 20 aemen,.Michaël
0050: 50 65 65 74 65 72 73 20 61 6e 64 20 47 69 6c 6c Peeters and Gill
0060: 65 73 20 56 61 6e 20 41 73 73 63 68 65 2e 20 46 es Van Assche. F
0070: 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 or more informat
0080: 69 6f 6e 2c 20 66 65 65 64 62 61 63 6b 20 6f 72 ion, feedback or
0090: 0a 71 75 65 73 74 69 6f 6e 73 2c 20 70 6c 65 61 .questions, plea
00a0: 73 65 20 72 65 66 65 72 20 74 6f 20 6f 75 72 20 se refer to our
00b0: 77 65 62 73 69 74 65 3a 20 68 74 74 70 3a 2f 2f website: http://
00c0: 6b 65 63 63 61 6b 2e 6e 6f 65 6b 65 6f 6e 2e 6f keccak.noekeon.o
00d0: 72 67 2f 0a 0a 49 6d 70 6c 65 6d 65 6e 74 61 74 rg/..Implementat
00e0: 69 6f 6e 20 62 79 20 74 68 65 20 64 65 73 69 67 ion by the desig
00f0: 6e 65 72 73 2c 0a 68 65 72 65 62 79 20 64 65 6e ners,.hereby den
0100: 6f 74 65 64 20 61 73 20 22 74 68 65 20 69 6d 70 oted as "the imp
0110: 6c 65 6d 65 6e 74 65 72 22 2e 0a 0a 54 6f 20 74 lementer"...To t
0120: 68 65 20 65 78 74 65 6e 74 20 70 6f 73 73 69 62 he extent possib
0130: 6c 65 20 75 6e 64 65 72 20 6c 61 77 2c 20 74 68 le under law, th
0140: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 72 20 68 61 e implementer ha
0150: 73 20 77 61 69 76 65 64 20 61 6c 6c 20 63 6f 70 s waived all cop
0160: 79 72 69 67 68 74 0a 61 6e 64 20 72 65 6c 61 74 yright.and relat
0170: 65 64 20 6f 72 20 6e 65 69 67 68 62 6f 72 69 6e ed or neighborin
0180: 67 20 72 69 67 68 74 73 20 74 6f 20 74 68 65 20 g rights to the
0190: 73 6f 75 72 63 65 20 63 6f 64 65 20 69 6e 20 74 source code in t
01a0: 68 69 73 20 66 69 6c 65 2e 0a 68 74 74 70 3a 2f his file..http:/
01b0: 2f 63 72 65 61 74 69 76 65 63 6f 6d 6d 6f 6e 73 /creativecommons
01c0: 2e 6f 72 67 2f 70 75 62 6c 69 63 64 6f 6d 61 69 .org/publicdomai
01d0: 6e 2f 7a 65 72 6f 2f 31 2e 30 2f 0a 2a 2f 0a 0a n/zero/1.0/.*/..
01e0: 23 64 65 66 69 6e 65 20 64 65 63 6c 61 72 65 41 #define declareA
01f0: 42 43 44 45 20 5c 0a 20 20 20 20 56 31 32 38 20 BCDE \. V128
0200: 41 62 61 67 65 2c 20 41 62 65 67 69 2c 20 41 62 Abage, Abegi, Ab
0210: 69 67 6f 2c 20 41 62 6f 67 75 2c 20 41 62 75 67 igo, Abogu, Abug
0220: 61 3b 20 5c 0a 20 20 20 20 56 31 32 38 20 41 6b a; \. V128 Ak
0230: 61 6d 65 2c 20 41 6b 65 6d 69 2c 20 41 6b 69 6d ame, Akemi, Akim
0240: 6f 2c 20 41 6b 6f 6d 75 2c 20 41 6b 75 6d 61 3b o, Akomu, Akuma;
0250: 20 5c 0a 20 20 20 20 56 31 32 38 20 41 62 61 65 \. V128 Abae
0260: 2c 20 41 62 69 6f 2c 20 41 67 61 65 2c 20 41 67 , Abio, Agae, Ag
0270: 69 6f 2c 20 41 6b 61 65 2c 20 41 6b 69 6f 2c 20 io, Akae, Akio,
0280: 41 6d 61 65 2c 20 41 6d 69 6f 3b 20 5c 0a 20 20 Amae, Amio; \.
0290: 20 20 56 36 34 20 41 62 61 2c 20 41 62 65 2c 20 V64 Aba, Abe,
02a0: 41 62 69 2c 20 41 62 6f 2c 20 41 62 75 3b 20 5c Abi, Abo, Abu; \
02b0: 0a 20 20 20 20 56 36 34 20 41 67 61 2c 20 41 67 . V64 Aga, Ag
02c0: 65 2c 20 41 67 69 2c 20 41 67 6f 2c 20 41 67 75 e, Agi, Ago, Agu
02d0: 3b 20 5c 0a 20 20 20 20 56 36 34 20 41 6b 61 2c ; \. V64 Aka,
02e0: 20 41 6b 65 2c 20 41 6b 69 2c 20 41 6b 6f 2c 20 Ake, Aki, Ako,
02f0: 41 6b 75 3b 20 5c 0a 20 20 20 20 56 36 34 20 41 Aku; \. V64 A
0300: 6d 61 2c 20 41 6d 65 2c 20 41 6d 69 2c 20 41 6d ma, Ame, Ami, Am
0310: 6f 2c 20 41 6d 75 3b 20 5c 0a 20 20 20 20 56 31 o, Amu; \. V1
0320: 32 38 20 41 73 61 73 65 2c 20 41 73 69 73 6f 3b 28 Asase, Asiso;
0330: 20 5c 0a 20 20 20 20 56 36 34 20 41 73 75 3b 20 \. V64 Asu;
0340: 5c 0a 20 20 20 20 56 31 32 38 20 42 62 61 67 65 \. V128 Bbage
0350: 2c 20 42 62 65 67 69 2c 20 42 62 69 67 6f 2c 20 , Bbegi, Bbigo,
0360: 42 62 6f 67 75 2c 20 42 62 75 67 61 3b 20 5c 0a Bbogu, Bbuga; \.
0370: 20 20 20 20 56 31 32 38 20 42 6b 61 6d 65 2c 20 V128 Bkame,
0380: 42 6b 65 6d 69 2c 20 42 6b 69 6d 6f 2c 20 42 6b Bkemi, Bkimo, Bk
0390: 6f 6d 75 2c 20 42 6b 75 6d 61 3b 20 5c 0a 20 20 omu, Bkuma; \.
03a0: 20 20 56 31 32 38 20 42 73 61 73 65 2c 20 42 73 V128 Bsase, Bs
03b0: 65 73 69 2c 20 42 73 69 73 6f 2c 20 42 73 6f 73 esi, Bsiso, Bsos
03c0: 75 2c 20 42 73 75 73 61 3b 20 5c 0a 20 20 20 20 u, Bsusa; \.
03d0: 56 31 32 38 20 43 61 65 2c 20 43 65 69 2c 20 43 V128 Cae, Cei, C
03e0: 69 6f 2c 20 43 6f 75 2c 20 43 75 61 3b 20 5c 0a io, Cou, Cua; \.
03f0: 20 20 20 20 56 31 32 38 20 44 61 75 2c 20 44 65 V128 Dau, De
0400: 61 2c 20 44 69 65 2c 20 44 6f 69 2c 20 44 75 6f a, Die, Doi, Duo
0410: 3b 20 5c 0a 20 20 20 20 56 31 32 38 20 44 75 61 ; \. V128 Dua
0420: 2c 20 44 61 65 2c 20 44 65 69 2c 20 44 69 6f 2c , Dae, Dei, Dio,
0430: 20 44 6f 75 3b 20 5c 0a 20 20 20 20 56 31 32 38 Dou; \. V128
0440: 20 45 62 61 67 65 2c 20 45 62 65 67 69 2c 20 45 Ebage, Ebegi, E
0450: 62 69 67 6f 2c 20 45 62 6f 67 75 2c 20 45 62 75 bigo, Ebogu, Ebu
0460: 67 61 3b 20 5c 0a 20 20 20 20 56 31 32 38 20 45 ga; \. V128 E
0470: 6b 61 6d 65 2c 20 45 6b 65 6d 69 2c 20 45 6b 69 kame, Ekemi, Eki
0480: 6d 6f 2c 20 45 6b 6f 6d 75 2c 20 45 6b 75 6d 61 mo, Ekomu, Ekuma
0490: 3b 20 5c 0a 20 20 20 20 56 31 32 38 20 45 73 61 ; \. V128 Esa
04a0: 73 65 2c 20 45 73 69 73 6f 3b 20 5c 0a 20 20 20 se, Esiso; \.
04b0: 20 56 36 34 20 45 73 75 3b 20 5c 0a 20 20 20 20 V64 Esu; \.
04c0: 56 31 32 38 20 5a 65 72 6f 3b 0a 0a 23 64 65 66 V128 Zero;..#def
04d0: 69 6e 65 20 70 72 65 70 61 72 65 54 68 65 74 61 ine prepareTheta
04e0: 0a 0a 23 64 65 66 69 6e 65 20 63 6f 6d 70 75 74 ..#define comput
04f0: 65 44 20 5c 0a 20 20 20 20 43 75 61 20 3d 20 47 eD \. Cua = G
0500: 45 54 36 34 4c 4f 4c 4f 28 43 75 61 2c 20 43 61 ET64LOLO(Cua, Ca
0510: 65 29 3b 20 5c 0a 20 20 20 20 44 65 69 20 3d 20 e); \. Dei =
0520: 58 4f 52 31 32 38 28 43 61 65 2c 20 52 4f 4c 36 XOR128(Cae, ROL6
0530: 34 36 34 73 61 6d 65 28 43 69 6f 2c 20 31 29 29 464same(Cio, 1))
0540: 3b 20 5c 0a 20 20 20 20 44 6f 75 20 3d 20 58 4f ; \. Dou = XO
0550: 52 31 32 38 28 43 69 6f 2c 20 52 4f 4c 36 34 36 R128(Cio, ROL646
0560: 34 73 61 6d 65 28 43 75 61 2c 20 31 29 29 3b 20 4same(Cua, 1));
0570: 5c 0a 20 20 20 20 43 65 69 20 3d 20 47 45 54 36 \. Cei = GET6
0580: 34 48 49 4c 4f 28 43 61 65 2c 20 43 69 6f 29 3b 4HILO(Cae, Cio);
0590: 20 5c 0a 20 20 20 20 44 61 65 20 3d 20 58 4f 52 \. Dae = XOR
05a0: 31 32 38 28 43 75 61 2c 20 52 4f 4c 36 34 36 34 128(Cua, ROL6464
05b0: 73 61 6d 65 28 43 65 69 2c 20 31 29 29 3b 20 5c same(Cei, 1)); \
05c0: 0a 20 20 20 20 44 61 75 20 3d 20 47 45 54 36 34 . Dau = GET64
05d0: 4c 4f 48 49 28 44 61 65 2c 20 44 6f 75 29 3b 20 LOHI(Dae, Dou);
05e0: 5c 0a 20 20 20 20 44 65 61 20 3d 20 53 57 41 50 \. Dea = SWAP
05f0: 36 34 28 44 61 65 29 3b 20 5c 0a 20 20 20 20 44 64(Dae); \. D
0600: 69 65 20 3d 20 53 57 41 50 36 34 28 44 65 69 29 ie = SWAP64(Dei)
0610: 3b 20 5c 0a 20 20 20 20 44 6f 69 20 3d 20 47 45 ; \. Doi = GE
0620: 54 36 34 4c 4f 4c 4f 28 44 6f 75 2c 20 44 69 65 T64LOLO(Dou, Die
0630: 29 3b 20 5c 0a 20 20 20 20 44 75 6f 20 3d 20 53 ); \. Duo = S
0640: 57 41 50 36 34 28 44 6f 75 29 3b 0a 0a 2f 2f 20 WAP64(Dou);..//
0650: 2d 2d 2d 20 54 68 65 74 61 20 52 68 6f 20 50 69 --- Theta Rho Pi
0660: 20 43 68 69 20 49 6f 74 61 20 50 72 65 70 61 72 Chi Iota Prepar
0670: 65 2d 74 68 65 74 61 0a 2f 2f 20 2d 2d 2d 20 36 e-theta.// --- 6
0680: 34 2d 62 69 74 20 6c 61 6e 65 73 20 6d 61 70 70 4-bit lanes mapp
0690: 65 64 20 74 6f 20 36 34 2d 62 69 74 20 61 6e 64 ed to 64-bit and
06a0: 20 31 32 38 2d 62 69 74 20 77 6f 72 64 73 0a 23 128-bit words.#
06b0: 64 65 66 69 6e 65 20 74 68 65 74 61 52 68 6f 50 define thetaRhoP
06c0: 69 43 68 69 49 6f 74 61 50 72 65 70 61 72 65 54 iChiIotaPrepareT
06d0: 68 65 74 61 28 69 2c 20 41 2c 20 45 29 20 5c 0a heta(i, A, E) \.
06e0: 20 20 20 20 63 6f 6d 70 75 74 65 44 20 5c 0a 20 computeD \.
06f0: 20 20 20 5c 0a 20 20 20 20 42 62 61 67 65 20 3d \. Bbage =
0700: 20 58 4f 52 31 32 38 28 47 45 54 36 34 4c 4f 48 XOR128(GET64LOH
0710: 49 28 41 23 23 62 61 67 65 2c 20 41 23 23 62 6f I(A##bage, A##bo
0720: 67 75 29 2c 20 44 61 75 29 3b 20 5c 0a 20 20 20 gu), Dau); \.
0730: 20 42 62 61 67 65 20 3d 20 52 4f 4c 36 34 36 34 Bbage = ROL6464
0740: 28 42 62 61 67 65 2c 20 30 2c 20 32 30 29 3b 20 (Bbage, 0, 20);
0750: 5c 0a 20 20 20 20 42 62 65 67 69 20 3d 20 58 4f \. Bbegi = XO
0760: 52 31 32 38 28 47 45 54 36 34 48 49 4c 4f 28 41 R128(GET64HILO(A
0770: 23 23 62 61 67 65 2c 20 41 23 23 6b 61 6d 65 29 ##bage, A##kame)
0780: 2c 20 44 65 61 29 3b 20 5c 0a 20 20 20 20 42 62 , Dea); \. Bb
0790: 65 67 69 20 3d 20 52 4f 4c 36 34 36 34 28 42 62 egi = ROL6464(Bb
07a0: 65 67 69 2c 20 34 34 2c 20 33 29 3b 20 5c 0a 20 egi, 44, 3); \.
07b0: 20 20 20 42 62 69 67 6f 20 3d 20 58 4f 52 31 32 Bbigo = XOR12
07c0: 38 28 47 45 54 36 34 4c 4f 48 49 28 41 23 23 6b 8(GET64LOHI(A##k
07d0: 69 6d 6f 2c 20 41 23 23 6b 61 6d 65 29 2c 20 44 imo, A##kame), D
07e0: 69 65 29 3b 20 5c 0a 20 20 20 20 42 62 69 67 6f ie); \. Bbigo
07f0: 20 3d 20 52 4f 4c 36 34 36 34 28 42 62 69 67 6f = ROL6464(Bbigo
0800: 2c 20 34 33 2c 20 34 35 29 3b 20 5c 0a 20 20 20 , 43, 45); \.
0810: 20 45 23 23 62 61 67 65 20 3d 20 58 4f 52 31 32 E##bage = XOR12
0820: 38 28 42 62 61 67 65 2c 20 41 4e 44 6e 75 31 32 8(Bbage, ANDnu12
0830: 38 28 42 62 65 67 69 2c 20 42 62 69 67 6f 29 29 8(Bbegi, Bbigo))
0840: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 ; \. XOReq128
0850: 28 45 23 23 62 61 67 65 2c 20 43 4f 4e 53 54 36 (E##bage, CONST6
0860: 34 28 4b 65 63 63 61 6b 46 31 36 30 30 52 6f 75 4(KeccakF1600Rou
0870: 6e 64 43 6f 6e 73 74 61 6e 74 73 5b 69 5d 29 29 ndConstants[i]))
0880: 3b 20 5c 0a 20 20 20 20 43 61 65 20 3d 20 45 23 ; \. Cae = E#
0890: 23 62 61 67 65 3b 20 5c 0a 20 20 20 20 42 62 6f #bage; \. Bbo
08a0: 67 75 20 3d 20 58 4f 52 31 32 38 28 47 45 54 36 gu = XOR128(GET6
08b0: 34 48 49 4c 4f 28 41 23 23 6b 69 6d 6f 2c 20 41 4HILO(A##kimo, A
08c0: 23 23 73 69 73 6f 29 2c 20 44 6f 69 29 3b 20 5c ##siso), Doi); \
08d0: 0a 20 20 20 20 42 62 6f 67 75 20 3d 20 52 4f 4c . Bbogu = ROL
08e0: 36 34 36 34 28 42 62 6f 67 75 2c 20 32 31 2c 20 6464(Bbogu, 21,
08f0: 36 31 29 3b 20 5c 0a 20 20 20 20 45 23 23 62 65 61); \. E##be
0900: 67 69 20 3d 20 58 4f 52 31 32 38 28 42 62 65 67 gi = XOR128(Bbeg
0910: 69 2c 20 41 4e 44 6e 75 31 32 38 28 42 62 69 67 i, ANDnu128(Bbig
0920: 6f 2c 20 42 62 6f 67 75 29 29 3b 20 5c 0a 20 20 o, Bbogu)); \.
0930: 20 20 43 65 69 20 3d 20 45 23 23 62 65 67 69 3b Cei = E##begi;
0940: 20 5c 0a 20 20 20 20 42 62 75 67 61 20 3d 20 58 \. Bbuga = X
0950: 4f 52 31 32 38 28 47 45 54 36 34 4c 4f 4c 4f 28 OR128(GET64LOLO(
0960: 41 23 23 73 75 2c 20 41 23 23 62 6f 67 75 29 2c A##su, A##bogu),
0970: 20 44 75 6f 29 3b 20 5c 0a 20 20 20 20 42 62 75 Duo); \. Bbu
0980: 67 61 20 3d 20 52 4f 4c 36 34 36 34 28 42 62 75 ga = ROL6464(Bbu
0990: 67 61 2c 20 31 34 2c 20 32 38 29 3b 20 5c 0a 20 ga, 14, 28); \.
09a0: 20 20 20 45 23 23 62 69 67 6f 20 3d 20 58 4f 52 E##bigo = XOR
09b0: 31 32 38 28 42 62 69 67 6f 2c 20 41 4e 44 6e 75 128(Bbigo, ANDnu
09c0: 31 32 38 28 42 62 6f 67 75 2c 20 42 62 75 67 61 128(Bbogu, Bbuga
09d0: 29 29 3b 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 )); \. Cio =
09e0: 45 23 23 62 69 67 6f 3b 20 5c 0a 20 20 20 20 45 E##bigo; \. E
09f0: 23 23 62 6f 67 75 20 3d 20 58 4f 52 31 32 38 28 ##bogu = XOR128(
0a00: 42 62 6f 67 75 2c 20 41 4e 44 6e 75 31 32 38 28 Bbogu, ANDnu128(
0a10: 42 62 75 67 61 2c 20 42 62 61 67 65 29 29 3b 20 Bbuga, Bbage));
0a20: 5c 0a 20 20 20 20 43 6f 75 20 3d 20 45 23 23 62 \. Cou = E##b
0a30: 6f 67 75 3b 20 5c 0a 20 20 20 20 45 23 23 62 75 ogu; \. E##bu
0a40: 67 61 20 3d 20 58 4f 52 31 32 38 28 42 62 75 67 ga = XOR128(Bbug
0a50: 61 2c 20 41 4e 44 6e 75 31 32 38 28 42 62 61 67 a, ANDnu128(Bbag
0a60: 65 2c 20 42 62 65 67 69 29 29 3b 20 5c 0a 20 20 e, Bbegi)); \.
0a70: 20 20 43 75 61 20 3d 20 45 23 23 62 75 67 61 3b Cua = E##buga;
0a80: 20 5c 0a 5c 0a 20 20 20 20 42 6b 61 6d 65 20 3d \.\. Bkame =
0a90: 20 58 4f 52 31 32 38 28 47 45 54 36 34 4c 4f 48 XOR128(GET64LOH
0aa0: 49 28 41 23 23 62 65 67 69 2c 20 41 23 23 62 75 I(A##begi, A##bu
0ab0: 67 61 29 2c 20 44 65 61 29 3b 20 5c 0a 20 20 20 ga), Dea); \.
0ac0: 20 42 6b 61 6d 65 20 3d 20 52 4f 4c 36 34 36 34 Bkame = ROL6464
0ad0: 28 42 6b 61 6d 65 2c 20 31 2c 20 33 36 29 3b 20 (Bkame, 1, 36);
0ae0: 5c 0a 20 20 20 20 42 6b 65 6d 69 20 3d 20 58 4f \. Bkemi = XO
0af0: 52 31 32 38 28 47 45 54 36 34 48 49 4c 4f 28 41 R128(GET64HILO(A
0b00: 23 23 62 65 67 69 2c 20 41 23 23 6b 65 6d 69 29 ##begi, A##kemi)
0b10: 2c 20 44 69 65 29 3b 20 5c 0a 20 20 20 20 42 6b , Die); \. Bk
0b20: 65 6d 69 20 3d 20 52 4f 4c 36 34 36 34 28 42 6b emi = ROL6464(Bk
0b30: 65 6d 69 2c 20 36 2c 20 31 30 29 3b 20 5c 0a 20 emi, 6, 10); \.
0b40: 20 20 20 42 6b 69 6d 6f 20 3d 20 58 4f 52 31 32 Bkimo = XOR12
0b50: 38 28 47 45 54 36 34 4c 4f 48 49 28 41 23 23 6b 8(GET64LOHI(A##k
0b60: 6f 6d 75 2c 20 41 23 23 6b 65 6d 69 29 2c 20 44 omu, A##kemi), D
0b70: 6f 69 29 3b 20 5c 0a 20 20 20 20 42 6b 69 6d 6f oi); \. Bkimo
0b80: 20 3d 20 52 4f 4c 36 34 36 34 28 42 6b 69 6d 6f = ROL6464(Bkimo
0b90: 2c 20 32 35 2c 20 31 35 29 3b 20 5c 0a 20 20 20 , 25, 15); \.
0ba0: 20 45 23 23 6b 61 6d 65 20 3d 20 58 4f 52 31 32 E##kame = XOR12
0bb0: 38 28 42 6b 61 6d 65 2c 20 41 4e 44 6e 75 31 32 8(Bkame, ANDnu12
0bc0: 38 28 42 6b 65 6d 69 2c 20 42 6b 69 6d 6f 29 29 8(Bkemi, Bkimo))
0bd0: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 ; \. XOReq128
0be0: 28 43 61 65 2c 20 45 23 23 6b 61 6d 65 29 3b 20 (Cae, E##kame);
0bf0: 5c 0a 20 20 20 20 42 6b 6f 6d 75 20 3d 20 58 4f \. Bkomu = XO
0c00: 52 31 32 38 28 47 45 54 36 34 48 49 48 49 28 41 R128(GET64HIHI(A
0c10: 23 23 6b 6f 6d 75 2c 20 41 23 23 73 69 73 6f 29 ##komu, A##siso)
0c20: 2c 20 44 75 6f 29 3b 20 5c 0a 20 20 20 20 42 6b , Duo); \. Bk
0c30: 6f 6d 75 20 3d 20 52 4f 4c 36 34 36 34 28 42 6b omu = ROL6464(Bk
0c40: 6f 6d 75 2c 20 38 2c 20 35 36 29 3b 20 5c 0a 20 omu, 8, 56); \.
0c50: 20 20 20 45 23 23 6b 65 6d 69 20 3d 20 58 4f 52 E##kemi = XOR
0c60: 31 32 38 28 42 6b 65 6d 69 2c 20 41 4e 44 6e 75 128(Bkemi, ANDnu
0c70: 31 32 38 28 42 6b 69 6d 6f 2c 20 42 6b 6f 6d 75 128(Bkimo, Bkomu
0c80: 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 )); \. XOReq1
0c90: 32 38 28 43 65 69 2c 20 45 23 23 6b 65 6d 69 29 28(Cei, E##kemi)
0ca0: 3b 20 5c 0a 20 20 20 20 42 6b 75 6d 61 20 3d 20 ; \. Bkuma =
0cb0: 58 4f 52 31 32 38 28 47 45 54 36 34 4c 4f 4c 4f XOR128(GET64LOLO
0cc0: 28 41 23 23 73 61 73 65 2c 20 41 23 23 62 75 67 (A##sase, A##bug
0cd0: 61 29 2c 20 44 61 75 29 3b 20 5c 0a 20 20 20 20 a), Dau); \.
0ce0: 42 6b 75 6d 61 20 3d 20 52 4f 4c 36 34 36 34 28 Bkuma = ROL6464(
0cf0: 42 6b 75 6d 61 2c 20 31 38 2c 20 32 37 29 3b 20 Bkuma, 18, 27);
0d00: 5c 0a 20 20 20 20 45 23 23 6b 69 6d 6f 20 3d 20 \. E##kimo =
0d10: 58 4f 52 31 32 38 28 42 6b 69 6d 6f 2c 20 41 4e XOR128(Bkimo, AN
0d20: 44 6e 75 31 32 38 28 42 6b 6f 6d 75 2c 20 42 6b Dnu128(Bkomu, Bk
0d30: 75 6d 61 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 uma)); \. XOR
0d40: 65 71 31 32 38 28 43 69 6f 2c 20 45 23 23 6b 69 eq128(Cio, E##ki
0d50: 6d 6f 29 3b 20 5c 0a 20 20 20 20 45 23 23 6b 6f mo); \. E##ko
0d60: 6d 75 20 3d 20 58 4f 52 31 32 38 28 42 6b 6f 6d mu = XOR128(Bkom
0d70: 75 2c 20 41 4e 44 6e 75 31 32 38 28 42 6b 75 6d u, ANDnu128(Bkum
0d80: 61 2c 20 42 6b 61 6d 65 29 29 3b 20 5c 0a 20 20 a, Bkame)); \.
0d90: 20 20 58 4f 52 65 71 31 32 38 28 43 6f 75 2c 20 XOReq128(Cou,
0da0: 45 23 23 6b 6f 6d 75 29 3b 20 5c 0a 20 20 20 20 E##komu); \.
0db0: 45 23 23 6b 75 6d 61 20 3d 20 58 4f 52 31 32 38 E##kuma = XOR128
0dc0: 28 42 6b 75 6d 61 2c 20 41 4e 44 6e 75 31 32 38 (Bkuma, ANDnu128
0dd0: 28 42 6b 61 6d 65 2c 20 42 6b 65 6d 69 29 29 3b (Bkame, Bkemi));
0de0: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 \. XOReq128(
0df0: 43 75 61 2c 20 45 23 23 6b 75 6d 61 29 3b 20 5c Cua, E##kuma); \
0e00: 0a 5c 0a 20 20 20 20 42 73 61 73 65 20 3d 20 58 .\. Bsase = X
0e10: 4f 52 31 32 38 28 41 23 23 62 69 67 6f 2c 20 53 OR128(A##bigo, S
0e20: 57 41 50 36 34 28 44 6f 69 29 29 3b 20 5c 0a 20 WAP64(Doi)); \.
0e30: 20 20 20 42 73 61 73 65 20 3d 20 52 4f 4c 36 34 Bsase = ROL64
0e40: 36 34 28 42 73 61 73 65 2c 20 36 32 2c 20 35 35 64(Bsase, 62, 55
0e50: 29 3b 20 5c 0a 20 20 20 20 42 73 69 73 6f 20 3d ); \. Bsiso =
0e60: 20 58 4f 52 31 32 38 28 41 23 23 6b 75 6d 61 2c XOR128(A##kuma,
0e70: 20 53 57 41 50 36 34 28 44 61 75 29 29 3b 20 5c SWAP64(Dau)); \
0e80: 0a 20 20 20 20 42 73 69 73 6f 20 3d 20 52 4f 4c . Bsiso = ROL
0e90: 36 34 36 34 28 42 73 69 73 6f 2c 20 33 39 2c 20 6464(Bsiso, 39,
0ea0: 34 31 29 3b 20 5c 0a 20 20 20 20 42 73 75 73 61 41); \. Bsusa
0eb0: 20 3d 20 58 4f 52 36 34 28 43 4f 50 59 36 34 48 = XOR64(COPY64H
0ec0: 49 32 4c 4f 28 41 23 23 73 61 73 65 29 2c 20 44 I2LO(A##sase), D
0ed0: 65 69 29 3b 20 5c 0a 20 20 20 20 42 73 75 73 61 ei); \. Bsusa
0ee0: 20 3d 20 52 4f 4c 36 34 36 34 73 61 6d 65 28 42 = ROL6464same(B
0ef0: 73 75 73 61 2c 20 32 29 3b 20 5c 0a 20 20 20 20 susa, 2); \.
0f00: 42 73 75 73 61 20 3d 20 47 45 54 36 34 4c 4f 4c Bsusa = GET64LOL
0f10: 4f 28 42 73 75 73 61 2c 20 42 73 61 73 65 29 3b O(Bsusa, Bsase);
0f20: 20 5c 0a 20 20 20 20 42 73 65 73 69 20 3d 20 47 \. Bsesi = G
0f30: 45 54 36 34 48 49 4c 4f 28 42 73 61 73 65 2c 20 ET64HILO(Bsase,
0f40: 42 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 42 73 Bsiso); \. Bs
0f50: 6f 73 75 20 3d 20 47 45 54 36 34 48 49 4c 4f 28 osu = GET64HILO(
0f60: 42 73 69 73 6f 2c 20 42 73 75 73 61 29 3b 20 5c Bsiso, Bsusa); \
0f70: 0a 20 20 20 20 45 23 23 73 61 73 65 20 3d 20 58 . E##sase = X
0f80: 4f 52 31 32 38 28 42 73 61 73 65 2c 20 41 4e 44 OR128(Bsase, AND
0f90: 6e 75 31 32 38 28 42 73 65 73 69 2c 20 42 73 69 nu128(Bsesi, Bsi
0fa0: 73 6f 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 so)); \. XORe
0fb0: 71 31 32 38 28 43 61 65 2c 20 45 23 23 73 61 73 q128(Cae, E##sas
0fc0: 65 29 3b 20 5c 0a 20 20 20 20 45 23 23 73 69 73 e); \. E##sis
0fd0: 6f 20 3d 20 58 4f 52 31 32 38 28 42 73 69 73 6f o = XOR128(Bsiso
0fe0: 2c 20 41 4e 44 6e 75 31 32 38 28 42 73 6f 73 75 , ANDnu128(Bsosu
0ff0: 2c 20 42 73 75 73 61 29 29 3b 20 5c 0a 20 20 20 , Bsusa)); \.
1000: 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 45 XOReq128(Cio, E
1010: 23 23 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 45 ##siso); \. E
1020: 23 23 73 75 20 3d 20 47 45 54 36 34 4c 4f 4c 4f ##su = GET64LOLO
1030: 28 58 4f 52 31 32 38 28 42 73 75 73 61 2c 20 41 (XOR128(Bsusa, A
1040: 4e 44 6e 75 31 32 38 28 42 73 61 73 65 2c 20 42 NDnu128(Bsase, B
1050: 73 65 73 69 29 29 2c 20 5a 65 72 6f 29 3b 20 5c sesi)), Zero); \
1060: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 75 . XOReq128(Cu
1070: 61 2c 20 45 23 23 73 75 29 3b 20 5c 0a 5c 0a 20 a, E##su); \.\.
1080: 20 20 20 5a 65 72 6f 20 3d 20 5a 45 52 4f 31 32 Zero = ZERO12
1090: 38 28 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 8(); \. XOReq
10a0: 31 32 38 28 43 61 65 2c 20 47 45 54 36 34 48 49 128(Cae, GET64HI
10b0: 48 49 28 43 75 61 2c 20 5a 65 72 6f 29 29 3b 20 HI(Cua, Zero));
10c0: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 \. XOReq128(C
10d0: 61 65 2c 20 47 45 54 36 34 4c 4f 4c 4f 28 5a 65 ae, GET64LOLO(Ze
10e0: 72 6f 2c 20 43 65 69 29 29 3b 20 5c 0a 20 20 20 ro, Cei)); \.
10f0: 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 47 XOReq128(Cio, G
1100: 45 54 36 34 48 49 48 49 28 43 65 69 2c 20 5a 65 ET64HIHI(Cei, Ze
1110: 72 6f 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 ro)); \. XORe
1120: 71 31 32 38 28 43 69 6f 2c 20 47 45 54 36 34 4c q128(Cio, GET64L
1130: 4f 4c 4f 28 5a 65 72 6f 2c 20 43 6f 75 29 29 3b OLO(Zero, Cou));
1140: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 \. XOReq128(
1150: 43 75 61 2c 20 47 45 54 36 34 48 49 48 49 28 43 Cua, GET64HIHI(C
1160: 6f 75 2c 20 5a 65 72 6f 29 29 3b 20 5c 0a 0a 2f ou, Zero)); \../
1170: 2f 20 2d 2d 2d 20 54 68 65 74 61 20 52 68 6f 20 / --- Theta Rho
1180: 50 69 20 43 68 69 20 49 6f 74 61 0a 2f 2f 20 2d Pi Chi Iota.// -
1190: 2d 2d 20 36 34 2d 62 69 74 20 6c 61 6e 65 73 20 -- 64-bit lanes
11a0: 6d 61 70 70 65 64 20 74 6f 20 36 34 2d 62 69 74 mapped to 64-bit
11b0: 20 61 6e 64 20 31 32 38 2d 62 69 74 20 77 6f 72 and 128-bit wor
11c0: 64 73 0a 23 64 65 66 69 6e 65 20 74 68 65 74 61 ds.#define theta
11d0: 52 68 6f 50 69 43 68 69 49 6f 74 61 28 69 2c 20 RhoPiChiIota(i,
11e0: 41 2c 20 45 29 20 74 68 65 74 61 52 68 6f 50 69 A, E) thetaRhoPi
11f0: 43 68 69 49 6f 74 61 50 72 65 70 61 72 65 54 68 ChiIotaPrepareTh
1200: 65 74 61 28 69 2c 20 41 2c 20 45 29 0a 0a 63 6f eta(i, A, E)..co
1210: 6e 73 74 20 55 49 4e 54 36 34 20 4b 65 63 63 61 nst UINT64 Kecca
1220: 6b 46 31 36 30 30 52 6f 75 6e 64 43 6f 6e 73 74 kF1600RoundConst
1230: 61 6e 74 73 5b 32 34 5d 20 3d 20 7b 0a 20 20 20 ants[24] = {.
1240: 20 30 78 30 30 30 30 30 30 30 30 30 30 30 30 30 0x0000000000000
1250: 30 30 31 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30 001ULL,. 0x00
1260: 30 30 30 30 30 30 30 30 30 30 38 30 38 32 55 4c 00000000008082UL
1270: 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30 30 30 L,. 0x8000000
1280: 30 30 30 30 30 38 30 38 61 55 4c 4c 2c 0a 20 20 00000808aULL,.
1290: 20 20 30 78 38 30 30 30 30 30 30 30 38 30 30 30 0x800000008000
12a0: 38 30 30 30 55 4c 4c 2c 0a 20 20 20 20 30 78 30 8000ULL,. 0x0
12b0: 30 30 30 30 30 30 30 30 30 30 30 38 30 38 62 55 00000000000808bU
12c0: 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 30 30 30 LL,. 0x000000
12d0: 30 30 38 30 30 30 30 30 30 31 55 4c 4c 2c 0a 20 0080000001ULL,.
12e0: 20 20 20 30 78 38 30 30 30 30 30 30 30 38 30 30 0x80000000800
12f0: 30 38 30 38 31 55 4c 4c 2c 0a 20 20 20 20 30 78 08081ULL,. 0x
1300: 38 30 30 30 30 30 30 30 30 30 30 30 38 30 30 39 8000000000008009
1310: 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 30 30 ULL,. 0x00000
1320: 30 30 30 30 30 30 30 30 30 38 61 55 4c 4c 2c 0a 0000000008aULL,.
1330: 20 20 20 20 30 78 30 30 30 30 30 30 30 30 30 30 0x0000000000
1340: 30 30 30 30 38 38 55 4c 4c 2c 0a 20 20 20 20 30 000088ULL,. 0
1350: 78 30 30 30 30 30 30 30 30 38 30 30 30 38 30 30 x000000008000800
1360: 39 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 30 9ULL,. 0x0000
1370: 30 30 30 30 38 30 30 30 30 30 30 61 55 4c 4c 2c 00008000000aULL,
1380: 0a 20 20 20 20 30 78 30 30 30 30 30 30 30 30 38 . 0x000000008
1390: 30 30 30 38 30 38 62 55 4c 4c 2c 0a 20 20 20 20 000808bULL,.
13a0: 30 78 38 30 30 30 30 30 30 30 30 30 30 30 30 30 0x80000000000000
13b0: 38 62 55 4c 4c 2c 0a 20 20 20 20 30 78 38 30 30 8bULL,. 0x800
13c0: 30 30 30 30 30 30 30 30 30 38 30 38 39 55 4c 4c 0000000008089ULL
13d0: 2c 0a 20 20 20 20 30 78 38 30 30 30 30 30 30 30 ,. 0x80000000
13e0: 30 30 30 30 38 30 30 33 55 4c 4c 2c 0a 20 20 20 00008003ULL,.
13f0: 20 30 78 38 30 30 30 30 30 30 30 30 30 30 30 38 0x8000000000008
1400: 30 30 32 55 4c 4c 2c 0a 20 20 20 20 30 78 38 30 002ULL,. 0x80
1410: 30 30 30 30 30 30 30 30 30 30 30 30 38 30 55 4c 00000000000080UL
1420: 4c 2c 0a 20 20 20 20 30 78 30 30 30 30 30 30 30 L,. 0x0000000
1430: 30 30 30 30 30 38 30 30 61 55 4c 4c 2c 0a 20 20 00000800aULL,.
1440: 20 20 30 78 38 30 30 30 30 30 30 30 38 30 30 30 0x800000008000
1450: 30 30 30 61 55 4c 4c 2c 0a 20 20 20 20 30 78 38 000aULL,. 0x8
1460: 30 30 30 30 30 30 30 38 30 30 30 38 30 38 31 55 000000080008081U
1470: 4c 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30 30 LL,. 0x800000
1480: 30 30 30 30 30 30 38 30 38 30 55 4c 4c 2c 0a 20 0000008080ULL,.
1490: 20 20 20 30 78 30 30 30 30 30 30 30 30 38 30 30 0x00000000800
14a0: 30 30 30 30 31 55 4c 4c 2c 0a 20 20 20 20 30 78 00001ULL,. 0x
14b0: 38 30 30 30 30 30 30 30 38 30 30 30 38 30 30 38 8000000080008008
14c0: 55 4c 4c 20 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 ULL };..#define
14d0: 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 41 6e 64 copyFromStateAnd
14e0: 58 6f 72 35 37 36 62 69 74 73 28 58 2c 20 73 74 Xor576bits(X, st
14f0: 61 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20 ate, input) \.
1500: 20 20 58 23 23 62 61 65 20 3d 20 58 4f 52 31 32 X##bae = XOR12
1510: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 8(LOAD128(state[
1520: 20 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 0]), LOAD128u(i
1530: 6e 70 75 74 5b 20 30 5d 29 29 3b 20 5c 0a 20 20 nput[ 0])); \.
1540: 20 20 58 23 23 62 61 20 3d 20 58 23 23 62 61 65 X##ba = X##bae
1550: 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 20 3d 20 ; \. X##be =
1560: 47 45 54 36 34 48 49 48 49 28 58 23 23 62 61 65 GET64HIHI(X##bae
1570: 2c 20 58 23 23 62 61 65 29 3b 20 5c 0a 20 20 20 , X##bae); \.
1580: 20 43 61 65 20 3d 20 58 23 23 62 61 65 3b 20 5c Cae = X##bae; \
1590: 0a 20 20 20 20 58 23 23 62 69 6f 20 3d 20 58 4f . X##bio = XO
15a0: 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 R128(LOAD128(sta
15b0: 74 65 5b 20 32 5d 29 2c 20 4c 4f 41 44 31 32 38 te[ 2]), LOAD128
15c0: 75 28 69 6e 70 75 74 5b 20 32 5d 29 29 3b 20 5c u(input[ 2])); \
15d0: 0a 20 20 20 20 58 23 23 62 69 20 3d 20 58 23 23 . X##bi = X##
15e0: 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 6f bio; \. X##bo
15f0: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 = GET64HIHI(X##
1600: 62 69 6f 2c 20 58 23 23 62 69 6f 29 3b 20 5c 0a bio, X##bio); \.
1610: 20 20 20 20 43 69 6f 20 3d 20 58 23 23 62 69 6f Cio = X##bio
1620: 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 20 3d 20 ; \. X##bu =
1630: 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 XOR64(LOAD64(sta
1640: 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 44 36 34 28 te[ 4]), LOAD64(
1650: 69 6e 70 75 74 5b 20 34 5d 29 29 3b 20 5c 0a 20 input[ 4])); \.
1660: 20 20 20 43 75 61 20 3d 20 58 23 23 62 75 3b 20 Cua = X##bu;
1670: 5c 0a 20 20 20 20 58 23 23 67 61 65 20 3d 20 58 \. X##gae = X
1680: 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 OR128(LOAD128u(s
1690: 74 61 74 65 5b 20 35 5d 29 2c 20 4c 4f 41 44 31 tate[ 5]), LOAD1
16a0: 32 38 75 28 69 6e 70 75 74 5b 20 35 5d 29 29 3b 28u(input[ 5]));
16b0: 20 5c 0a 20 20 20 20 58 23 23 67 61 20 3d 20 58 \. X##ga = X
16c0: 23 23 67 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 ##gae; \. X##
16d0: 62 75 67 61 20 3d 20 47 45 54 36 34 4c 4f 4c 4f buga = GET64LOLO
16e0: 28 58 23 23 62 75 2c 20 58 23 23 67 61 29 3b 20 (X##bu, X##ga);
16f0: 5c 0a 20 20 20 20 58 23 23 67 65 20 3d 20 47 45 \. X##ge = GE
1700: 54 36 34 48 49 48 49 28 58 23 23 67 61 65 2c 20 T64HIHI(X##gae,
1710: 58 23 23 67 61 65 29 3b 20 5c 0a 20 20 20 20 58 X##gae); \. X
1720: 23 23 62 61 67 65 20 3d 20 47 45 54 36 34 4c 4f ##bage = GET64LO
1730: 4c 4f 28 58 23 23 62 61 2c 20 58 23 23 67 65 29 LO(X##ba, X##ge)
1740: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 ; \. XOReq128
1750: 28 43 61 65 2c 20 58 23 23 67 61 65 29 3b 20 5c (Cae, X##gae); \
1760: 0a 20 20 20 20 58 23 23 67 69 6f 20 3d 20 58 4f . X##gio = XO
1770: 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74 R128(LOAD128u(st
1780: 61 74 65 5b 20 37 5d 29 2c 20 4c 4f 41 44 31 32 ate[ 7]), LOAD12
1790: 38 75 28 69 6e 70 75 74 5b 20 37 5d 29 29 3b 20 8u(input[ 7]));
17a0: 5c 0a 20 20 20 20 58 23 23 67 69 20 3d 20 58 23 \. X##gi = X#
17b0: 23 67 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 #gio; \. X##b
17c0: 65 67 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 egi = GET64LOLO(
17d0: 58 23 23 62 65 2c 20 58 23 23 67 69 29 3b 20 5c X##be, X##gi); \
17e0: 0a 20 20 20 20 58 23 23 67 6f 20 3d 20 47 45 54 . X##go = GET
17f0: 36 34 48 49 48 49 28 58 23 23 67 69 6f 2c 20 58 64HIHI(X##gio, X
1800: 23 23 67 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23 ##gio); \. X#
1810: 23 62 69 67 6f 20 3d 20 47 45 54 36 34 4c 4f 4c #bigo = GET64LOL
1820: 4f 28 58 23 23 62 69 2c 20 58 23 23 67 6f 29 3b O(X##bi, X##go);
1830: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 \. XOReq128(
1840: 43 69 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a Cio, X##gio); \.
1850: 20 20 20 20 58 23 23 67 75 20 3d 20 4c 4f 41 44 X##gu = LOAD
1860: 36 34 28 73 74 61 74 65 5b 20 39 5d 29 3b 20 5c 64(state[ 9]); \
1870: 0a 20 20 20 20 58 23 23 62 6f 67 75 20 3d 20 47 . X##bogu = G
1880: 45 54 36 34 4c 4f 4c 4f 28 58 23 23 62 6f 2c 20 ET64LOLO(X##bo,
1890: 58 23 23 67 75 29 3b 20 5c 0a 20 20 20 20 58 4f X##gu); \. XO
18a0: 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 67 75 Req64(Cua, X##gu
18b0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 65 20 ); \. X##kae
18c0: 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b = LOAD128(state[
18d0: 31 30 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 10]); \. X##k
18e0: 61 20 3d 20 58 23 23 6b 61 65 3b 20 5c 0a 20 20 a = X##kae; \.
18f0: 20 20 58 23 23 6b 65 20 3d 20 47 45 54 36 34 48 X##ke = GET64H
1900: 49 48 49 28 58 23 23 6b 61 65 2c 20 58 23 23 6b IHI(X##kae, X##k
1910: 61 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 ae); \. XOReq
1920: 31 32 38 28 43 61 65 2c 20 58 23 23 6b 61 65 29 128(Cae, X##kae)
1930: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 6f 20 3d ; \. X##kio =
1940: 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 LOAD128(state[1
1950: 32 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 2]); \. X##ki
1960: 20 3d 20 58 23 23 6b 69 6f 3b 20 5c 0a 20 20 20 = X##kio; \.
1970: 20 58 23 23 6b 6f 20 3d 20 47 45 54 36 34 48 49 X##ko = GET64HI
1980: 48 49 28 58 23 23 6b 69 6f 2c 20 58 23 23 6b 69 HI(X##kio, X##ki
1990: 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 o); \. XOReq1
19a0: 32 38 28 43 69 6f 2c 20 58 23 23 6b 69 6f 29 3b 28(Cio, X##kio);
19b0: 20 5c 0a 20 20 20 20 58 23 23 6b 75 6d 61 20 3d \. X##kuma =
19c0: 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 LOAD128(state[1
19d0: 34 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 4]); \. XOReq
19e0: 36 34 28 43 75 61 2c 20 58 23 23 6b 75 6d 61 29 64(Cua, X##kuma)
19f0: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 65 20 3d 20 ; \. X##me =
1a00: 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 36 5d LOAD64(state[16]
1a10: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 6d 65 ); \. X##kame
1a20: 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 = GET64LOLO(X##
1a30: 6b 61 2c 20 58 23 23 6d 65 29 3b 20 5c 0a 20 20 ka, X##me); \.
1a40: 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 XOReq128(Cae,
1a50: 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 75 6d GET64HIHI(X##kum
1a60: 61 2c 20 58 23 23 6b 61 6d 65 29 29 3b 20 5c 0a a, X##kame)); \.
1a70: 20 20 20 20 58 23 23 6d 69 6f 20 3d 20 4c 4f 41 X##mio = LOA
1a80: 44 31 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29 D128u(state[17])
1a90: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 ; \. X##mi =
1aa0: 58 23 23 6d 69 6f 3b 20 5c 0a 20 20 20 20 58 23 X##mio; \. X#
1ab0: 23 6b 65 6d 69 20 3d 20 47 45 54 36 34 4c 4f 4c #kemi = GET64LOL
1ac0: 4f 28 58 23 23 6b 65 2c 20 58 23 23 6d 69 29 3b O(X##ke, X##mi);
1ad0: 20 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 47 \. X##mo = G
1ae0: 45 54 36 34 48 49 48 49 28 58 23 23 6d 69 6f 2c ET64HIHI(X##mio,
1af0: 20 58 23 23 6d 69 6f 29 3b 20 5c 0a 20 20 20 20 X##mio); \.
1b00: 58 23 23 6b 69 6d 6f 20 3d 20 47 45 54 36 34 4c X##kimo = GET64L
1b10: 4f 4c 4f 28 58 23 23 6b 69 2c 20 58 23 23 6d 6f OLO(X##ki, X##mo
1b20: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 ); \. XOReq12
1b30: 38 28 43 69 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 8(Cio, X##mio);
1b40: 5c 0a 20 20 20 20 58 23 23 6d 75 20 3d 20 4c 4f \. X##mu = LO
1b50: 41 44 36 34 28 73 74 61 74 65 5b 31 39 5d 29 3b AD64(state[19]);
1b60: 20 5c 0a 20 20 20 20 58 23 23 6b 6f 6d 75 20 3d \. X##komu =
1b70: 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 6f GET64LOLO(X##ko
1b80: 2c 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 , X##mu); \.
1b90: 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 XOReq64(Cua, X##
1ba0: 6d 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 61 mu); \. X##sa
1bb0: 73 65 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 se = LOAD128(sta
1bc0: 74 65 5b 32 30 5d 29 3b 20 5c 0a 20 20 20 20 58 te[20]); \. X
1bd0: 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 OReq128(Cae, X##
1be0: 73 61 73 65 29 3b 20 5c 0a 20 20 20 20 58 23 23 sase); \. X##
1bf0: 73 69 73 6f 20 3d 20 4c 4f 41 44 31 32 38 28 73 siso = LOAD128(s
1c00: 74 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 20 tate[22]); \.
1c10: 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 XOReq128(Cio, X
1c20: 23 23 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 58 ##siso); \. X
1c30: 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 ##su = LOAD64(st
1c40: 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20 20 ate[24]); \.
1c50: 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 XOReq64(Cua, X##
1c60: 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 su); \..#define
1c70: 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 41 6e 64 copyFromStateAnd
1c80: 58 6f 72 38 33 32 62 69 74 73 28 58 2c 20 73 74 Xor832bits(X, st
1c90: 61 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20 ate, input) \.
1ca0: 20 20 58 23 23 62 61 65 20 3d 20 58 4f 52 31 32 X##bae = XOR12
1cb0: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 8(LOAD128(state[
1cc0: 20 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 0]), LOAD128u(i
1cd0: 6e 70 75 74 5b 20 30 5d 29 29 3b 20 5c 0a 20 20 nput[ 0])); \.
1ce0: 20 20 58 23 23 62 61 20 3d 20 58 23 23 62 61 65 X##ba = X##bae
1cf0: 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 20 3d 20 ; \. X##be =
1d00: 47 45 54 36 34 48 49 48 49 28 58 23 23 62 61 65 GET64HIHI(X##bae
1d10: 2c 20 58 23 23 62 61 65 29 3b 20 5c 0a 20 20 20 , X##bae); \.
1d20: 20 43 61 65 20 3d 20 58 23 23 62 61 65 3b 20 5c Cae = X##bae; \
1d30: 0a 20 20 20 20 58 23 23 62 69 6f 20 3d 20 58 4f . X##bio = XO
1d40: 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 R128(LOAD128(sta
1d50: 74 65 5b 20 32 5d 29 2c 20 4c 4f 41 44 31 32 38 te[ 2]), LOAD128
1d60: 75 28 69 6e 70 75 74 5b 20 32 5d 29 29 3b 20 5c u(input[ 2])); \
1d70: 0a 20 20 20 20 58 23 23 62 69 20 3d 20 58 23 23 . X##bi = X##
1d80: 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 6f bio; \. X##bo
1d90: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 = GET64HIHI(X##
1da0: 62 69 6f 2c 20 58 23 23 62 69 6f 29 3b 20 5c 0a bio, X##bio); \.
1db0: 20 20 20 20 43 69 6f 20 3d 20 58 23 23 62 69 6f Cio = X##bio
1dc0: 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 20 3d 20 ; \. X##bu =
1dd0: 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 XOR64(LOAD64(sta
1de0: 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 44 36 34 28 te[ 4]), LOAD64(
1df0: 69 6e 70 75 74 5b 20 34 5d 29 29 3b 20 5c 0a 20 input[ 4])); \.
1e00: 20 20 20 43 75 61 20 3d 20 58 23 23 62 75 3b 20 Cua = X##bu;
1e10: 5c 0a 20 20 20 20 58 23 23 67 61 65 20 3d 20 58 \. X##gae = X
1e20: 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 OR128(LOAD128u(s
1e30: 74 61 74 65 5b 20 35 5d 29 2c 20 4c 4f 41 44 31 tate[ 5]), LOAD1
1e40: 32 38 75 28 69 6e 70 75 74 5b 20 35 5d 29 29 3b 28u(input[ 5]));
1e50: 20 5c 0a 20 20 20 20 58 23 23 67 61 20 3d 20 58 \. X##ga = X
1e60: 23 23 67 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 ##gae; \. X##
1e70: 62 75 67 61 20 3d 20 47 45 54 36 34 4c 4f 4c 4f buga = GET64LOLO
1e80: 28 58 23 23 62 75 2c 20 58 23 23 67 61 29 3b 20 (X##bu, X##ga);
1e90: 5c 0a 20 20 20 20 58 23 23 67 65 20 3d 20 47 45 \. X##ge = GE
1ea0: 54 36 34 48 49 48 49 28 58 23 23 67 61 65 2c 20 T64HIHI(X##gae,
1eb0: 58 23 23 67 61 65 29 3b 20 5c 0a 20 20 20 20 58 X##gae); \. X
1ec0: 23 23 62 61 67 65 20 3d 20 47 45 54 36 34 4c 4f ##bage = GET64LO
1ed0: 4c 4f 28 58 23 23 62 61 2c 20 58 23 23 67 65 29 LO(X##ba, X##ge)
1ee0: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 ; \. XOReq128
1ef0: 28 43 61 65 2c 20 58 23 23 67 61 65 29 3b 20 5c (Cae, X##gae); \
1f00: 0a 20 20 20 20 58 23 23 67 69 6f 20 3d 20 58 4f . X##gio = XO
1f10: 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74 R128(LOAD128u(st
1f20: 61 74 65 5b 20 37 5d 29 2c 20 4c 4f 41 44 31 32 ate[ 7]), LOAD12
1f30: 38 75 28 69 6e 70 75 74 5b 20 37 5d 29 29 3b 20 8u(input[ 7]));
1f40: 5c 0a 20 20 20 20 58 23 23 67 69 20 3d 20 58 23 \. X##gi = X#
1f50: 23 67 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 #gio; \. X##b
1f60: 65 67 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 egi = GET64LOLO(
1f70: 58 23 23 62 65 2c 20 58 23 23 67 69 29 3b 20 5c X##be, X##gi); \
1f80: 0a 20 20 20 20 58 23 23 67 6f 20 3d 20 47 45 54 . X##go = GET
1f90: 36 34 48 49 48 49 28 58 23 23 67 69 6f 2c 20 58 64HIHI(X##gio, X
1fa0: 23 23 67 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23 ##gio); \. X#
1fb0: 23 62 69 67 6f 20 3d 20 47 45 54 36 34 4c 4f 4c #bigo = GET64LOL
1fc0: 4f 28 58 23 23 62 69 2c 20 58 23 23 67 6f 29 3b O(X##bi, X##go);
1fd0: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 \. XOReq128(
1fe0: 43 69 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a Cio, X##gio); \.
1ff0: 20 20 20 20 58 23 23 67 75 20 3d 20 58 4f 52 36 X##gu = XOR6
2000: 34 28 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 20 4(LOAD64(state[
2010: 39 5d 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 9]), LOAD64(inpu
2020: 74 5b 20 39 5d 29 29 3b 20 5c 0a 20 20 20 20 58 t[ 9])); \. X
2030: 23 23 62 6f 67 75 20 3d 20 47 45 54 36 34 4c 4f ##bogu = GET64LO
2040: 4c 4f 28 58 23 23 62 6f 2c 20 58 23 23 67 75 29 LO(X##bo, X##gu)
2050: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 ; \. XOReq64(
2060: 43 75 61 2c 20 58 23 23 67 75 29 3b 20 5c 0a 20 Cua, X##gu); \.
2070: 20 20 20 58 23 23 6b 61 65 20 3d 20 58 4f 52 31 X##kae = XOR1
2080: 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 28(LOAD128(state
2090: 5b 31 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 [10]), LOAD128u(
20a0: 69 6e 70 75 74 5b 31 30 5d 29 29 3b 20 5c 0a 20 input[10])); \.
20b0: 20 20 20 58 23 23 6b 61 20 3d 20 58 23 23 6b 61 X##ka = X##ka
20c0: 65 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 20 3d e; \. X##ke =
20d0: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 61 GET64HIHI(X##ka
20e0: 65 2c 20 58 23 23 6b 61 65 29 3b 20 5c 0a 20 20 e, X##kae); \.
20f0: 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 XOReq128(Cae,
2100: 58 23 23 6b 61 65 29 3b 20 5c 0a 20 20 20 20 58 X##kae); \. X
2110: 23 23 6b 69 6f 20 3d 20 58 4f 52 31 32 38 28 4c ##kio = XOR128(L
2120: 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 32 5d OAD128(state[12]
2130: 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b ), LOAD64(input[
2140: 31 32 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 12])); \. X##
2150: 6b 69 20 3d 20 58 23 23 6b 69 6f 3b 20 5c 0a 20 ki = X##kio; \.
2160: 20 20 20 58 23 23 6b 6f 20 3d 20 47 45 54 36 34 X##ko = GET64
2170: 48 49 48 49 28 58 23 23 6b 69 6f 2c 20 58 23 23 HIHI(X##kio, X##
2180: 6b 69 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 kio); \. XORe
2190: 71 31 32 38 28 43 69 6f 2c 20 58 23 23 6b 69 6f q128(Cio, X##kio
21a0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 6d 61 ); \. X##kuma
21b0: 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 = LOAD128(state
21c0: 5b 31 34 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 [14]); \. XOR
21d0: 65 71 36 34 28 43 75 61 2c 20 58 23 23 6b 75 6d eq64(Cua, X##kum
21e0: 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 65 20 a); \. X##me
21f0: 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 = LOAD64(state[1
2200: 36 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 6]); \. X##ka
2210: 6d 65 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 me = GET64LOLO(X
2220: 23 23 6b 61 2c 20 58 23 23 6d 65 29 3b 20 5c 0a ##ka, X##me); \.
2230: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 XOReq128(Cae
2240: 2c 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6b , GET64HIHI(X##k
2250: 75 6d 61 2c 20 58 23 23 6b 61 6d 65 29 29 3b 20 uma, X##kame));
2260: 5c 0a 20 20 20 20 58 23 23 6d 69 6f 20 3d 20 4c \. X##mio = L
2270: 4f 41 44 31 32 38 75 28 73 74 61 74 65 5b 31 37 OAD128u(state[17
2280: 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 69 20 ]); \. X##mi
2290: 3d 20 58 23 23 6d 69 6f 3b 20 5c 0a 20 20 20 20 = X##mio; \.
22a0: 58 23 23 6b 65 6d 69 20 3d 20 47 45 54 36 34 4c X##kemi = GET64L
22b0: 4f 4c 4f 28 58 23 23 6b 65 2c 20 58 23 23 6d 69 OLO(X##ke, X##mi
22c0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d ); \. X##mo =
22d0: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6d 69 GET64HIHI(X##mi
22e0: 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c 0a 20 20 o, X##mio); \.
22f0: 20 20 58 23 23 6b 69 6d 6f 20 3d 20 47 45 54 36 X##kimo = GET6
2300: 34 4c 4f 4c 4f 28 58 23 23 6b 69 2c 20 58 23 23 4LOLO(X##ki, X##
2310: 6d 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 mo); \. XOReq
2320: 31 32 38 28 43 69 6f 2c 20 58 23 23 6d 69 6f 29 128(Cio, X##mio)
2330: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75 20 3d 20 ; \. X##mu =
2340: 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 39 5d LOAD64(state[19]
2350: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 6d 75 ); \. X##komu
2360: 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 = GET64LOLO(X##
2370: 6b 6f 2c 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 ko, X##mu); \.
2380: 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58 XOReq64(Cua, X
2390: 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 ##mu); \. X##
23a0: 73 61 73 65 20 3d 20 4c 4f 41 44 31 32 38 28 73 sase = LOAD128(s
23b0: 74 61 74 65 5b 32 30 5d 29 3b 20 5c 0a 20 20 20 tate[20]); \.
23c0: 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 XOReq128(Cae, X
23d0: 23 23 73 61 73 65 29 3b 20 5c 0a 20 20 20 20 58 ##sase); \. X
23e0: 23 23 73 69 73 6f 20 3d 20 4c 4f 41 44 31 32 38 ##siso = LOAD128
23f0: 28 73 74 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 (state[22]); \.
2400: 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c XOReq128(Cio,
2410: 20 58 23 23 73 69 73 6f 29 3b 20 5c 0a 20 20 20 X##siso); \.
2420: 20 58 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 X##su = LOAD64(
2430: 73 74 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 state[24]); \.
2440: 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58 XOReq64(Cua, X
2450: 23 23 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e ##su); \..#defin
2460: 65 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 41 e copyFromStateA
2470: 6e 64 58 6f 72 31 30 32 34 62 69 74 73 28 58 2c ndXor1024bits(X,
2480: 20 73 74 61 74 65 2c 20 69 6e 70 75 74 29 20 5c state, input) \
2490: 0a 20 20 20 20 58 23 23 62 61 65 20 3d 20 58 4f . X##bae = XO
24a0: 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 R128(LOAD128(sta
24b0: 74 65 5b 20 30 5d 29 2c 20 4c 4f 41 44 31 32 38 te[ 0]), LOAD128
24c0: 75 28 69 6e 70 75 74 5b 20 30 5d 29 29 3b 20 5c u(input[ 0])); \
24d0: 0a 20 20 20 20 58 23 23 62 61 20 3d 20 58 23 23 . X##ba = X##
24e0: 62 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 bae; \. X##be
24f0: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 = GET64HIHI(X##
2500: 62 61 65 2c 20 58 23 23 62 61 65 29 3b 20 5c 0a bae, X##bae); \.
2510: 20 20 20 20 43 61 65 20 3d 20 58 23 23 62 61 65 Cae = X##bae
2520: 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 6f 20 3d ; \. X##bio =
2530: 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 XOR128(LOAD128(
2540: 73 74 61 74 65 5b 20 32 5d 29 2c 20 4c 4f 41 44 state[ 2]), LOAD
2550: 31 32 38 75 28 69 6e 70 75 74 5b 20 32 5d 29 29 128u(input[ 2]))
2560: 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 20 3d 20 ; \. X##bi =
2570: 58 23 23 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 X##bio; \. X#
2580: 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28 #bo = GET64HIHI(
2590: 58 23 23 62 69 6f 2c 20 58 23 23 62 69 6f 29 3b X##bio, X##bio);
25a0: 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 58 23 23 \. Cio = X##
25b0: 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 bio; \. X##bu
25c0: 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 = XOR64(LOAD64(
25d0: 73 74 61 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 44 state[ 4]), LOAD
25e0: 36 34 28 69 6e 70 75 74 5b 20 34 5d 29 29 3b 20 64(input[ 4]));
25f0: 5c 0a 20 20 20 20 43 75 61 20 3d 20 58 23 23 62 \. Cua = X##b
2600: 75 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 65 20 u; \. X##gae
2610: 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 = XOR128(LOAD128
2620: 75 28 73 74 61 74 65 5b 20 35 5d 29 2c 20 4c 4f u(state[ 5]), LO
2630: 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 35 5d AD128u(input[ 5]
2640: 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 20 )); \. X##ga
2650: 3d 20 58 23 23 67 61 65 3b 20 5c 0a 20 20 20 20 = X##gae; \.
2660: 58 23 23 62 75 67 61 20 3d 20 47 45 54 36 34 4c X##buga = GET64L
2670: 4f 4c 4f 28 58 23 23 62 75 2c 20 58 23 23 67 61 OLO(X##bu, X##ga
2680: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 65 20 3d ); \. X##ge =
2690: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 61 GET64HIHI(X##ga
26a0: 65 2c 20 58 23 23 67 61 65 29 3b 20 5c 0a 20 20 e, X##gae); \.
26b0: 20 20 58 23 23 62 61 67 65 20 3d 20 47 45 54 36 X##bage = GET6
26c0: 34 4c 4f 4c 4f 28 58 23 23 62 61 2c 20 58 23 23 4LOLO(X##ba, X##
26d0: 67 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 ge); \. XOReq
26e0: 31 32 38 28 43 61 65 2c 20 58 23 23 67 61 65 29 128(Cae, X##gae)
26f0: 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 6f 20 3d ; \. X##gio =
2700: 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 75 XOR128(LOAD128u
2710: 28 73 74 61 74 65 5b 20 37 5d 29 2c 20 4c 4f 41 (state[ 7]), LOA
2720: 44 31 32 38 75 28 69 6e 70 75 74 5b 20 37 5d 29 D128u(input[ 7])
2730: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 20 3d ); \. X##gi =
2740: 20 58 23 23 67 69 6f 3b 20 5c 0a 20 20 20 20 58 X##gio; \. X
2750: 23 23 62 65 67 69 20 3d 20 47 45 54 36 34 4c 4f ##begi = GET64LO
2760: 4c 4f 28 58 23 23 62 65 2c 20 58 23 23 67 69 29 LO(X##be, X##gi)
2770: 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f 20 3d 20 ; \. X##go =
2780: 47 45 54 36 34 48 49 48 49 28 58 23 23 67 69 6f GET64HIHI(X##gio
2790: 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a 20 20 20 , X##gio); \.
27a0: 20 58 23 23 62 69 67 6f 20 3d 20 47 45 54 36 34 X##bigo = GET64
27b0: 4c 4f 4c 4f 28 58 23 23 62 69 2c 20 58 23 23 67 LOLO(X##bi, X##g
27c0: 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 o); \. XOReq1
27d0: 32 38 28 43 69 6f 2c 20 58 23 23 67 69 6f 29 3b 28(Cio, X##gio);
27e0: 20 5c 0a 20 20 20 20 58 23 23 67 75 20 3d 20 58 \. X##gu = X
27f0: 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 74 OR64(LOAD64(stat
2800: 65 5b 20 39 5d 29 2c 20 4c 4f 41 44 36 34 28 69 e[ 9]), LOAD64(i
2810: 6e 70 75 74 5b 20 39 5d 29 29 3b 20 5c 0a 20 20 nput[ 9])); \.
2820: 20 20 58 23 23 62 6f 67 75 20 3d 20 47 45 54 36 X##bogu = GET6
2830: 34 4c 4f 4c 4f 28 58 23 23 62 6f 2c 20 58 23 23 4LOLO(X##bo, X##
2840: 67 75 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 gu); \. XOReq
2850: 36 34 28 43 75 61 2c 20 58 23 23 67 75 29 3b 20 64(Cua, X##gu);
2860: 5c 0a 20 20 20 20 58 23 23 6b 61 65 20 3d 20 58 \. X##kae = X
2870: 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 OR128(LOAD128(st
2880: 61 74 65 5b 31 30 5d 29 2c 20 4c 4f 41 44 31 32 ate[10]), LOAD12
2890: 38 75 28 69 6e 70 75 74 5b 31 30 5d 29 29 3b 20 8u(input[10]));
28a0: 5c 0a 20 20 20 20 58 23 23 6b 61 20 3d 20 58 23 \. X##ka = X#
28b0: 23 6b 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 6b #kae; \. X##k
28c0: 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 e = GET64HIHI(X#
28d0: 23 6b 61 65 2c 20 58 23 23 6b 61 65 29 3b 20 5c #kae, X##kae); \
28e0: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 . XOReq128(Ca
28f0: 65 2c 20 58 23 23 6b 61 65 29 3b 20 5c 0a 20 20 e, X##kae); \.
2900: 20 20 58 23 23 6b 69 6f 20 3d 20 58 4f 52 31 32 X##kio = XOR12
2910: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 8(LOAD128(state[
2920: 31 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 12]), LOAD128u(i
2930: 6e 70 75 74 5b 31 32 5d 29 29 3b 20 5c 0a 20 20 nput[12])); \.
2940: 20 20 58 23 23 6b 69 20 3d 20 58 23 23 6b 69 6f X##ki = X##kio
2950: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d 20 ; \. X##ko =
2960: 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 69 6f GET64HIHI(X##kio
2970: 2c 20 58 23 23 6b 69 6f 29 3b 20 5c 0a 20 20 20 , X##kio); \.
2980: 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 XOReq128(Cio, X
2990: 23 23 6b 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23 ##kio); \. X#
29a0: 23 6b 75 6d 61 20 3d 20 58 4f 52 31 32 38 28 4c #kuma = XOR128(L
29b0: 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 34 5d OAD128(state[14]
29c0: 29 2c 20 4c 4f 41 44 31 32 38 28 69 6e 70 75 74 ), LOAD128(input
29d0: 5b 31 34 5d 29 29 3b 20 5c 0a 20 20 20 20 58 4f [14])); \. XO
29e0: 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 6b 75 Req64(Cua, X##ku
29f0: 6d 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 65 ma); \. X##me
2a00: 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b = LOAD64(state[
2a10: 31 36 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 16]); \. X##k
2a20: 61 6d 65 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 ame = GET64LOLO(
2a30: 58 23 23 6b 61 2c 20 58 23 23 6d 65 29 3b 20 5c X##ka, X##me); \
2a40: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 . XOReq128(Ca
2a50: 65 2c 20 47 45 54 36 34 48 49 48 49 28 58 23 23 e, GET64HIHI(X##
2a60: 6b 75 6d 61 2c 20 58 23 23 6b 61 6d 65 29 29 3b kuma, X##kame));
2a70: 20 5c 0a 20 20 20 20 58 23 23 6d 69 6f 20 3d 20 \. X##mio =
2a80: 4c 4f 41 44 31 32 38 75 28 73 74 61 74 65 5b 31 LOAD128u(state[1
2a90: 37 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 69 7]); \. X##mi
2aa0: 20 3d 20 58 23 23 6d 69 6f 3b 20 5c 0a 20 20 20 = X##mio; \.
2ab0: 20 58 23 23 6b 65 6d 69 20 3d 20 47 45 54 36 34 X##kemi = GET64
2ac0: 4c 4f 4c 4f 28 58 23 23 6b 65 2c 20 58 23 23 6d LOLO(X##ke, X##m
2ad0: 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 6f 20 i); \. X##mo
2ae0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6d = GET64HIHI(X##m
2af0: 69 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c 0a 20 io, X##mio); \.
2b00: 20 20 20 58 23 23 6b 69 6d 6f 20 3d 20 47 45 54 X##kimo = GET
2b10: 36 34 4c 4f 4c 4f 28 58 23 23 6b 69 2c 20 58 23 64LOLO(X##ki, X#
2b20: 23 6d 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 #mo); \. XORe
2b30: 71 31 32 38 28 43 69 6f 2c 20 58 23 23 6d 69 6f q128(Cio, X##mio
2b40: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75 20 3d ); \. X##mu =
2b50: 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 39 LOAD64(state[19
2b60: 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 6d ]); \. X##kom
2b70: 75 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 u = GET64LOLO(X#
2b80: 23 6b 6f 2c 20 58 23 23 6d 75 29 3b 20 5c 0a 20 #ko, X##mu); \.
2b90: 20 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c 20 XOReq64(Cua,
2ba0: 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 23 X##mu); \. X#
2bb0: 23 73 61 73 65 20 3d 20 4c 4f 41 44 31 32 38 28 #sase = LOAD128(
2bc0: 73 74 61 74 65 5b 32 30 5d 29 3b 20 5c 0a 20 20 state[20]); \.
2bd0: 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 XOReq128(Cae,
2be0: 58 23 23 73 61 73 65 29 3b 20 5c 0a 20 20 20 20 X##sase); \.
2bf0: 58 23 23 73 69 73 6f 20 3d 20 4c 4f 41 44 31 32 X##siso = LOAD12
2c00: 38 28 73 74 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 8(state[22]); \.
2c10: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f XOReq128(Cio
2c20: 2c 20 58 23 23 73 69 73 6f 29 3b 20 5c 0a 20 20 , X##siso); \.
2c30: 20 20 58 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 X##su = LOAD64
2c40: 28 73 74 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 (state[24]); \.
2c50: 20 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c 20 XOReq64(Cua,
2c60: 58 23 23 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69 X##su); \..#defi
2c70: 6e 65 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 ne copyFromState
2c80: 41 6e 64 58 6f 72 31 30 38 38 62 69 74 73 28 58 AndXor1088bits(X
2c90: 2c 20 73 74 61 74 65 2c 20 69 6e 70 75 74 29 20 , state, input)
2ca0: 5c 0a 20 20 20 20 58 23 23 62 61 65 20 3d 20 58 \. X##bae = X
2cb0: 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 OR128(LOAD128(st
2cc0: 61 74 65 5b 20 30 5d 29 2c 20 4c 4f 41 44 31 32 ate[ 0]), LOAD12
2cd0: 38 75 28 69 6e 70 75 74 5b 20 30 5d 29 29 3b 20 8u(input[ 0]));
2ce0: 5c 0a 20 20 20 20 58 23 23 62 61 20 3d 20 58 23 \. X##ba = X#
2cf0: 23 62 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 62 #bae; \. X##b
2d00: 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 e = GET64HIHI(X#
2d10: 23 62 61 65 2c 20 58 23 23 62 61 65 29 3b 20 5c #bae, X##bae); \
2d20: 0a 20 20 20 20 43 61 65 20 3d 20 58 23 23 62 61 . Cae = X##ba
2d30: 65 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 6f 20 e; \. X##bio
2d40: 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 = XOR128(LOAD128
2d50: 28 73 74 61 74 65 5b 20 32 5d 29 2c 20 4c 4f 41 (state[ 2]), LOA
2d60: 44 31 32 38 75 28 69 6e 70 75 74 5b 20 32 5d 29 D128u(input[ 2])
2d70: 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 20 3d ); \. X##bi =
2d80: 20 58 23 23 62 69 6f 3b 20 5c 0a 20 20 20 20 58 X##bio; \. X
2d90: 23 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48 49 ##bo = GET64HIHI
2da0: 28 58 23 23 62 69 6f 2c 20 58 23 23 62 69 6f 29 (X##bio, X##bio)
2db0: 3b 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 58 23 ; \. Cio = X#
2dc0: 23 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 #bio; \. X##b
2dd0: 75 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 34 u = XOR64(LOAD64
2de0: 28 73 74 61 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 (state[ 4]), LOA
2df0: 44 36 34 28 69 6e 70 75 74 5b 20 34 5d 29 29 3b D64(input[ 4]));
2e00: 20 5c 0a 20 20 20 20 43 75 61 20 3d 20 58 23 23 \. Cua = X##
2e10: 62 75 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 65 bu; \. X##gae
2e20: 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 = XOR128(LOAD12
2e30: 38 75 28 73 74 61 74 65 5b 20 35 5d 29 2c 20 4c 8u(state[ 5]), L
2e40: 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 35 OAD128u(input[ 5
2e50: 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 ])); \. X##ga
2e60: 20 3d 20 58 23 23 67 61 65 3b 20 5c 0a 20 20 20 = X##gae; \.
2e70: 20 58 23 23 62 75 67 61 20 3d 20 47 45 54 36 34 X##buga = GET64
2e80: 4c 4f 4c 4f 28 58 23 23 62 75 2c 20 58 23 23 67 LOLO(X##bu, X##g
2e90: 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 65 20 a); \. X##ge
2ea0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 = GET64HIHI(X##g
2eb0: 61 65 2c 20 58 23 23 67 61 65 29 3b 20 5c 0a 20 ae, X##gae); \.
2ec0: 20 20 20 58 23 23 62 61 67 65 20 3d 20 47 45 54 X##bage = GET
2ed0: 36 34 4c 4f 4c 4f 28 58 23 23 62 61 2c 20 58 23 64LOLO(X##ba, X#
2ee0: 23 67 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 #ge); \. XORe
2ef0: 71 31 32 38 28 43 61 65 2c 20 58 23 23 67 61 65 q128(Cae, X##gae
2f00: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 6f 20 ); \. X##gio
2f10: 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 = XOR128(LOAD128
2f20: 75 28 73 74 61 74 65 5b 20 37 5d 29 2c 20 4c 4f u(state[ 7]), LO
2f30: 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 37 5d AD128u(input[ 7]
2f40: 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 20 )); \. X##gi
2f50: 3d 20 58 23 23 67 69 6f 3b 20 5c 0a 20 20 20 20 = X##gio; \.
2f60: 58 23 23 62 65 67 69 20 3d 20 47 45 54 36 34 4c X##begi = GET64L
2f70: 4f 4c 4f 28 58 23 23 62 65 2c 20 58 23 23 67 69 OLO(X##be, X##gi
2f80: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f 20 3d ); \. X##go =
2f90: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 69 GET64HIHI(X##gi
2fa0: 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a 20 20 o, X##gio); \.
2fb0: 20 20 58 23 23 62 69 67 6f 20 3d 20 47 45 54 36 X##bigo = GET6
2fc0: 34 4c 4f 4c 4f 28 58 23 23 62 69 2c 20 58 23 23 4LOLO(X##bi, X##
2fd0: 67 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 go); \. XOReq
2fe0: 31 32 38 28 43 69 6f 2c 20 58 23 23 67 69 6f 29 128(Cio, X##gio)
2ff0: 3b 20 5c 0a 20 20 20 20 58 23 23 67 75 20 3d 20 ; \. X##gu =
3000: 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 XOR64(LOAD64(sta
3010: 74 65 5b 20 39 5d 29 2c 20 4c 4f 41 44 36 34 28 te[ 9]), LOAD64(
3020: 69 6e 70 75 74 5b 20 39 5d 29 29 3b 20 5c 0a 20 input[ 9])); \.
3030: 20 20 20 58 23 23 62 6f 67 75 20 3d 20 47 45 54 X##bogu = GET
3040: 36 34 4c 4f 4c 4f 28 58 23 23 62 6f 2c 20 58 23 64LOLO(X##bo, X#
3050: 23 67 75 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 #gu); \. XORe
3060: 71 36 34 28 43 75 61 2c 20 58 23 23 67 75 29 3b q64(Cua, X##gu);
3070: 20 5c 0a 20 20 20 20 58 23 23 6b 61 65 20 3d 20 \. X##kae =
3080: 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 XOR128(LOAD128(s
3090: 74 61 74 65 5b 31 30 5d 29 2c 20 4c 4f 41 44 31 tate[10]), LOAD1
30a0: 32 38 75 28 69 6e 70 75 74 5b 31 30 5d 29 29 3b 28u(input[10]));
30b0: 20 5c 0a 20 20 20 20 58 23 23 6b 61 20 3d 20 58 \. X##ka = X
30c0: 23 23 6b 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 ##kae; \. X##
30d0: 6b 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 ke = GET64HIHI(X
30e0: 23 23 6b 61 65 2c 20 58 23 23 6b 61 65 29 3b 20 ##kae, X##kae);
30f0: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 \. XOReq128(C
3100: 61 65 2c 20 58 23 23 6b 61 65 29 3b 20 5c 0a 20 ae, X##kae); \.
3110: 20 20 20 58 23 23 6b 69 6f 20 3d 20 58 4f 52 31 X##kio = XOR1
3120: 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 28(LOAD128(state
3130: 5b 31 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 [12]), LOAD128u(
3140: 69 6e 70 75 74 5b 31 32 5d 29 29 3b 20 5c 0a 20 input[12])); \.
3150: 20 20 20 58 23 23 6b 69 20 3d 20 58 23 23 6b 69 X##ki = X##ki
3160: 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d o; \. X##ko =
3170: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 69 GET64HIHI(X##ki
3180: 6f 2c 20 58 23 23 6b 69 6f 29 3b 20 5c 0a 20 20 o, X##kio); \.
3190: 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 XOReq128(Cio,
31a0: 58 23 23 6b 69 6f 29 3b 20 5c 0a 20 20 20 20 58 X##kio); \. X
31b0: 23 23 6b 75 6d 61 20 3d 20 58 4f 52 31 32 38 28 ##kuma = XOR128(
31c0: 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 34 LOAD128(state[14
31d0: 5d 29 2c 20 4c 4f 41 44 31 32 38 28 69 6e 70 75 ]), LOAD128(inpu
31e0: 74 5b 31 34 5d 29 29 3b 20 5c 0a 20 20 20 20 58 t[14])); \. X
31f0: 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 6b OReq64(Cua, X##k
3200: 75 6d 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d uma); \. X##m
3210: 65 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 34 e = XOR64(LOAD64
3220: 28 73 74 61 74 65 5b 31 36 5d 29 2c 20 4c 4f 41 (state[16]), LOA
3230: 44 36 34 28 69 6e 70 75 74 5b 31 36 5d 29 29 3b D64(input[16]));
3240: 20 5c 0a 20 20 20 20 58 23 23 6b 61 6d 65 20 3d \. X##kame =
3250: 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 61 GET64LOLO(X##ka
3260: 2c 20 58 23 23 6d 65 29 3b 20 5c 0a 20 20 20 20 , X##me); \.
3270: 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 47 45 XOReq128(Cae, GE
3280: 54 36 34 48 49 48 49 28 58 23 23 6b 75 6d 61 2c T64HIHI(X##kuma,
3290: 20 58 23 23 6b 61 6d 65 29 29 3b 20 5c 0a 20 20 X##kame)); \.
32a0: 20 20 58 23 23 6d 69 6f 20 3d 20 4c 4f 41 44 31 X##mio = LOAD1
32b0: 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29 3b 20 28u(state[17]);
32c0: 5c 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 58 23 \. X##mi = X#
32d0: 23 6d 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6b #mio; \. X##k
32e0: 65 6d 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 emi = GET64LOLO(
32f0: 58 23 23 6b 65 2c 20 58 23 23 6d 69 29 3b 20 5c X##ke, X##mi); \
3300: 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 47 45 54 . X##mo = GET
3310: 36 34 48 49 48 49 28 58 23 23 6d 69 6f 2c 20 58 64HIHI(X##mio, X
3320: 23 23 6d 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23 ##mio); \. X#
3330: 23 6b 69 6d 6f 20 3d 20 47 45 54 36 34 4c 4f 4c #kimo = GET64LOL
3340: 4f 28 58 23 23 6b 69 2c 20 58 23 23 6d 6f 29 3b O(X##ki, X##mo);
3350: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 \. XOReq128(
3360: 43 69 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c 0a Cio, X##mio); \.
3370: 20 20 20 20 58 23 23 6d 75 20 3d 20 4c 4f 41 44 X##mu = LOAD
3380: 36 34 28 73 74 61 74 65 5b 31 39 5d 29 3b 20 5c 64(state[19]); \
3390: 0a 20 20 20 20 58 23 23 6b 6f 6d 75 20 3d 20 47 . X##komu = G
33a0: 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 6f 2c 20 ET64LOLO(X##ko,
33b0: 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 4f X##mu); \. XO
33c0: 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 6d 75 Req64(Cua, X##mu
33d0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 61 73 65 ); \. X##sase
33e0: 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 = LOAD128(state
33f0: 5b 32 30 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 [20]); \. XOR
3400: 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 73 61 eq128(Cae, X##sa
3410: 73 65 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 69 se); \. X##si
3420: 73 6f 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 so = LOAD128(sta
3430: 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 20 20 58 te[22]); \. X
3440: 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 OReq128(Cio, X##
3450: 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23 siso); \. X##
3460: 73 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 su = LOAD64(stat
3470: 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20 20 58 4f e[24]); \. XO
3480: 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 73 75 Req64(Cua, X##su
3490: 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63 6f ); \..#define co
34a0: 70 79 46 72 6f 6d 53 74 61 74 65 41 6e 64 58 6f pyFromStateAndXo
34b0: 72 31 31 35 32 62 69 74 73 28 58 2c 20 73 74 61 r1152bits(X, sta
34c0: 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20 20 te, input) \.
34d0: 20 58 23 23 62 61 65 20 3d 20 58 4f 52 31 32 38 X##bae = XOR128
34e0: 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 20 (LOAD128(state[
34f0: 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 0]), LOAD128u(in
3500: 70 75 74 5b 20 30 5d 29 29 3b 20 5c 0a 20 20 20 put[ 0])); \.
3510: 20 58 23 23 62 61 20 3d 20 58 23 23 62 61 65 3b X##ba = X##bae;
3520: 20 5c 0a 20 20 20 20 58 23 23 62 65 20 3d 20 47 \. X##be = G
3530: 45 54 36 34 48 49 48 49 28 58 23 23 62 61 65 2c ET64HIHI(X##bae,
3540: 20 58 23 23 62 61 65 29 3b 20 5c 0a 20 20 20 20 X##bae); \.
3550: 43 61 65 20 3d 20 58 23 23 62 61 65 3b 20 5c 0a Cae = X##bae; \.
3560: 20 20 20 20 58 23 23 62 69 6f 20 3d 20 58 4f 52 X##bio = XOR
3570: 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 128(LOAD128(stat
3580: 65 5b 20 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75 e[ 2]), LOAD128u
3590: 28 69 6e 70 75 74 5b 20 32 5d 29 29 3b 20 5c 0a (input[ 2])); \.
35a0: 20 20 20 20 58 23 23 62 69 20 3d 20 58 23 23 62 X##bi = X##b
35b0: 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 6f 20 io; \. X##bo
35c0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 62 = GET64HIHI(X##b
35d0: 69 6f 2c 20 58 23 23 62 69 6f 29 3b 20 5c 0a 20 io, X##bio); \.
35e0: 20 20 20 43 69 6f 20 3d 20 58 23 23 62 69 6f 3b Cio = X##bio;
35f0: 20 5c 0a 20 20 20 20 58 23 23 62 75 20 3d 20 58 \. X##bu = X
3600: 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 74 OR64(LOAD64(stat
3610: 65 5b 20 34 5d 29 2c 20 4c 4f 41 44 36 34 28 69 e[ 4]), LOAD64(i
3620: 6e 70 75 74 5b 20 34 5d 29 29 3b 20 5c 0a 20 20 nput[ 4])); \.
3630: 20 20 43 75 61 20 3d 20 58 23 23 62 75 3b 20 5c Cua = X##bu; \
3640: 0a 20 20 20 20 58 23 23 67 61 65 20 3d 20 58 4f . X##gae = XO
3650: 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74 R128(LOAD128u(st
3660: 61 74 65 5b 20 35 5d 29 2c 20 4c 4f 41 44 31 32 ate[ 5]), LOAD12
3670: 38 75 28 69 6e 70 75 74 5b 20 35 5d 29 29 3b 20 8u(input[ 5]));
3680: 5c 0a 20 20 20 20 58 23 23 67 61 20 3d 20 58 23 \. X##ga = X#
3690: 23 67 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 62 #gae; \. X##b
36a0: 75 67 61 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 uga = GET64LOLO(
36b0: 58 23 23 62 75 2c 20 58 23 23 67 61 29 3b 20 5c X##bu, X##ga); \
36c0: 0a 20 20 20 20 58 23 23 67 65 20 3d 20 47 45 54 . X##ge = GET
36d0: 36 34 48 49 48 49 28 58 23 23 67 61 65 2c 20 58 64HIHI(X##gae, X
36e0: 23 23 67 61 65 29 3b 20 5c 0a 20 20 20 20 58 23 ##gae); \. X#
36f0: 23 62 61 67 65 20 3d 20 47 45 54 36 34 4c 4f 4c #bage = GET64LOL
3700: 4f 28 58 23 23 62 61 2c 20 58 23 23 67 65 29 3b O(X##ba, X##ge);
3710: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 \. XOReq128(
3720: 43 61 65 2c 20 58 23 23 67 61 65 29 3b 20 5c 0a Cae, X##gae); \.
3730: 20 20 20 20 58 23 23 67 69 6f 20 3d 20 58 4f 52 X##gio = XOR
3740: 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74 61 128(LOAD128u(sta
3750: 74 65 5b 20 37 5d 29 2c 20 4c 4f 41 44 31 32 38 te[ 7]), LOAD128
3760: 75 28 69 6e 70 75 74 5b 20 37 5d 29 29 3b 20 5c u(input[ 7])); \
3770: 0a 20 20 20 20 58 23 23 67 69 20 3d 20 58 23 23 . X##gi = X##
3780: 67 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 gio; \. X##be
3790: 67 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 gi = GET64LOLO(X
37a0: 23 23 62 65 2c 20 58 23 23 67 69 29 3b 20 5c 0a ##be, X##gi); \.
37b0: 20 20 20 20 58 23 23 67 6f 20 3d 20 47 45 54 36 X##go = GET6
37c0: 34 48 49 48 49 28 58 23 23 67 69 6f 2c 20 58 23 4HIHI(X##gio, X#
37d0: 23 67 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23 #gio); \. X##
37e0: 62 69 67 6f 20 3d 20 47 45 54 36 34 4c 4f 4c 4f bigo = GET64LOLO
37f0: 28 58 23 23 62 69 2c 20 58 23 23 67 6f 29 3b 20 (X##bi, X##go);
3800: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 \. XOReq128(C
3810: 69 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a 20 io, X##gio); \.
3820: 20 20 20 58 23 23 67 75 20 3d 20 58 4f 52 36 34 X##gu = XOR64
3830: 28 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 20 39 (LOAD64(state[ 9
3840: 5d 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 ]), LOAD64(input
3850: 5b 20 39 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 [ 9])); \. X#
3860: 23 62 6f 67 75 20 3d 20 47 45 54 36 34 4c 4f 4c #bogu = GET64LOL
3870: 4f 28 58 23 23 62 6f 2c 20 58 23 23 67 75 29 3b O(X##bo, X##gu);
3880: 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 43 \. XOReq64(C
3890: 75 61 2c 20 58 23 23 67 75 29 3b 20 5c 0a 20 20 ua, X##gu); \.
38a0: 20 20 58 23 23 6b 61 65 20 3d 20 58 4f 52 31 32 X##kae = XOR12
38b0: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 8(LOAD128(state[
38c0: 31 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 10]), LOAD128u(i
38d0: 6e 70 75 74 5b 31 30 5d 29 29 3b 20 5c 0a 20 20 nput[10])); \.
38e0: 20 20 58 23 23 6b 61 20 3d 20 58 23 23 6b 61 65 X##ka = X##kae
38f0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 20 3d 20 ; \. X##ke =
3900: 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 61 65 GET64HIHI(X##kae
3910: 2c 20 58 23 23 6b 61 65 29 3b 20 5c 0a 20 20 20 , X##kae); \.
3920: 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 XOReq128(Cae, X
3930: 23 23 6b 61 65 29 3b 20 5c 0a 20 20 20 20 58 23 ##kae); \. X#
3940: 23 6b 69 6f 20 3d 20 58 4f 52 31 32 38 28 4c 4f #kio = XOR128(LO
3950: 41 44 31 32 38 28 73 74 61 74 65 5b 31 32 5d 29 AD128(state[12])
3960: 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 74 , LOAD128u(input
3970: 5b 31 32 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 [12])); \. X#
3980: 23 6b 69 20 3d 20 58 23 23 6b 69 6f 3b 20 5c 0a #ki = X##kio; \.
3990: 20 20 20 20 58 23 23 6b 6f 20 3d 20 47 45 54 36 X##ko = GET6
39a0: 34 48 49 48 49 28 58 23 23 6b 69 6f 2c 20 58 23 4HIHI(X##kio, X#
39b0: 23 6b 69 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 #kio); \. XOR
39c0: 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 6b 69 eq128(Cio, X##ki
39d0: 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 6d o); \. X##kum
39e0: 61 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 a = XOR128(LOAD1
39f0: 32 38 28 73 74 61 74 65 5b 31 34 5d 29 2c 20 4c 28(state[14]), L
3a00: 4f 41 44 31 32 38 28 69 6e 70 75 74 5b 31 34 5d OAD128(input[14]
3a10: 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 )); \. XOReq6
3a20: 34 28 43 75 61 2c 20 58 23 23 6b 75 6d 61 29 3b 4(Cua, X##kuma);
3a30: 20 5c 0a 20 20 20 20 58 23 23 6d 65 20 3d 20 58 \. X##me = X
3a40: 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 74 OR64(LOAD64(stat
3a50: 65 5b 31 36 5d 29 2c 20 4c 4f 41 44 36 34 28 69 e[16]), LOAD64(i
3a60: 6e 70 75 74 5b 31 36 5d 29 29 3b 20 5c 0a 20 20 nput[16])); \.
3a70: 20 20 58 23 23 6b 61 6d 65 20 3d 20 47 45 54 36 X##kame = GET6
3a80: 34 4c 4f 4c 4f 28 58 23 23 6b 61 2c 20 58 23 23 4LOLO(X##ka, X##
3a90: 6d 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 me); \. XOReq
3aa0: 31 32 38 28 43 61 65 2c 20 47 45 54 36 34 48 49 128(Cae, GET64HI
3ab0: 48 49 28 58 23 23 6b 75 6d 61 2c 20 58 23 23 6b HI(X##kuma, X##k
3ac0: 61 6d 65 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 ame)); \. X##
3ad0: 6d 69 6f 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 mio = XOR128(LOA
3ae0: 44 31 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29 D128u(state[17])
3af0: 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b 31 , LOAD64(input[1
3b00: 37 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 7])); \. X##m
3b10: 69 20 3d 20 58 23 23 6d 69 6f 3b 20 5c 0a 20 20 i = X##mio; \.
3b20: 20 20 58 23 23 6b 65 6d 69 20 3d 20 47 45 54 36 X##kemi = GET6
3b30: 34 4c 4f 4c 4f 28 58 23 23 6b 65 2c 20 58 23 23 4LOLO(X##ke, X##
3b40: 6d 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 6f mi); \. X##mo
3b50: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 = GET64HIHI(X##
3b60: 6d 69 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c 0a mio, X##mio); \.
3b70: 20 20 20 20 58 23 23 6b 69 6d 6f 20 3d 20 47 45 X##kimo = GE
3b80: 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 69 2c 20 58 T64LOLO(X##ki, X
3b90: 23 23 6d 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 ##mo); \. XOR
3ba0: 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 6d 69 eq128(Cio, X##mi
3bb0: 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75 20 o); \. X##mu
3bc0: 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 = LOAD64(state[1
3bd0: 39 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 9]); \. X##ko
3be0: 6d 75 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 mu = GET64LOLO(X
3bf0: 23 23 6b 6f 2c 20 58 23 23 6d 75 29 3b 20 5c 0a ##ko, X##mu); \.
3c00: 20 20 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c XOReq64(Cua,
3c10: 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 X##mu); \. X
3c20: 23 23 73 61 73 65 20 3d 20 4c 4f 41 44 31 32 38 ##sase = LOAD128
3c30: 28 73 74 61 74 65 5b 32 30 5d 29 3b 20 5c 0a 20 (state[20]); \.
3c40: 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c XOReq128(Cae,
3c50: 20 58 23 23 73 61 73 65 29 3b 20 5c 0a 20 20 20 X##sase); \.
3c60: 20 58 23 23 73 69 73 6f 20 3d 20 4c 4f 41 44 31 X##siso = LOAD1
3c70: 32 38 28 73 74 61 74 65 5b 32 32 5d 29 3b 20 5c 28(state[22]); \
3c80: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 . XOReq128(Ci
3c90: 6f 2c 20 58 23 23 73 69 73 6f 29 3b 20 5c 0a 20 o, X##siso); \.
3ca0: 20 20 20 58 23 23 73 75 20 3d 20 4c 4f 41 44 36 X##su = LOAD6
3cb0: 34 28 73 74 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 4(state[24]); \.
3cc0: 20 20 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c XOReq64(Cua,
3cd0: 20 58 23 23 73 75 29 3b 20 5c 0a 0a 23 64 65 66 X##su); \..#def
3ce0: 69 6e 65 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 ine copyFromStat
3cf0: 65 41 6e 64 58 6f 72 31 33 34 34 62 69 74 73 28 eAndXor1344bits(
3d00: 58 2c 20 73 74 61 74 65 2c 20 69 6e 70 75 74 29 X, state, input)
3d10: 20 5c 0a 20 20 20 20 58 23 23 62 61 65 20 3d 20 \. X##bae =
3d20: 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 XOR128(LOAD128(s
3d30: 74 61 74 65 5b 20 30 5d 29 2c 20 4c 4f 41 44 31 tate[ 0]), LOAD1
3d40: 32 38 75 28 69 6e 70 75 74 5b 20 30 5d 29 29 3b 28u(input[ 0]));
3d50: 20 5c 0a 20 20 20 20 58 23 23 62 61 20 3d 20 58 \. X##ba = X
3d60: 23 23 62 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 ##bae; \. X##
3d70: 62 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 be = GET64HIHI(X
3d80: 23 23 62 61 65 2c 20 58 23 23 62 61 65 29 3b 20 ##bae, X##bae);
3d90: 5c 0a 20 20 20 20 43 61 65 20 3d 20 58 23 23 62 \. Cae = X##b
3da0: 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 6f ae; \. X##bio
3db0: 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 = XOR128(LOAD12
3dc0: 38 28 73 74 61 74 65 5b 20 32 5d 29 2c 20 4c 4f 8(state[ 2]), LO
3dd0: 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 32 5d AD128u(input[ 2]
3de0: 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 20 )); \. X##bi
3df0: 3d 20 58 23 23 62 69 6f 3b 20 5c 0a 20 20 20 20 = X##bio; \.
3e00: 58 23 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48 X##bo = GET64HIH
3e10: 49 28 58 23 23 62 69 6f 2c 20 58 23 23 62 69 6f I(X##bio, X##bio
3e20: 29 3b 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 58 ); \. Cio = X
3e30: 23 23 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 ##bio; \. X##
3e40: 62 75 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 bu = XOR64(LOAD6
3e50: 34 28 73 74 61 74 65 5b 20 34 5d 29 2c 20 4c 4f 4(state[ 4]), LO
3e60: 41 44 36 34 28 69 6e 70 75 74 5b 20 34 5d 29 29 AD64(input[ 4]))
3e70: 3b 20 5c 0a 20 20 20 20 43 75 61 20 3d 20 58 23 ; \. Cua = X#
3e80: 23 62 75 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 #bu; \. X##ga
3e90: 65 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 e = XOR128(LOAD1
3ea0: 32 38 75 28 73 74 61 74 65 5b 20 35 5d 29 2c 20 28u(state[ 5]),
3eb0: 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 LOAD128u(input[
3ec0: 35 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 5])); \. X##g
3ed0: 61 20 3d 20 58 23 23 67 61 65 3b 20 5c 0a 20 20 a = X##gae; \.
3ee0: 20 20 58 23 23 62 75 67 61 20 3d 20 47 45 54 36 X##buga = GET6
3ef0: 34 4c 4f 4c 4f 28 58 23 23 62 75 2c 20 58 23 23 4LOLO(X##bu, X##
3f00: 67 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 65 ga); \. X##ge
3f10: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 = GET64HIHI(X##
3f20: 67 61 65 2c 20 58 23 23 67 61 65 29 3b 20 5c 0a gae, X##gae); \.
3f30: 20 20 20 20 58 23 23 62 61 67 65 20 3d 20 47 45 X##bage = GE
3f40: 54 36 34 4c 4f 4c 4f 28 58 23 23 62 61 2c 20 58 T64LOLO(X##ba, X
3f50: 23 23 67 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 ##ge); \. XOR
3f60: 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 67 61 eq128(Cae, X##ga
3f70: 65 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 6f e); \. X##gio
3f80: 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 = XOR128(LOAD12
3f90: 38 75 28 73 74 61 74 65 5b 20 37 5d 29 2c 20 4c 8u(state[ 7]), L
3fa0: 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 37 OAD128u(input[ 7
3fb0: 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 ])); \. X##gi
3fc0: 20 3d 20 58 23 23 67 69 6f 3b 20 5c 0a 20 20 20 = X##gio; \.
3fd0: 20 58 23 23 62 65 67 69 20 3d 20 47 45 54 36 34 X##begi = GET64
3fe0: 4c 4f 4c 4f 28 58 23 23 62 65 2c 20 58 23 23 67 LOLO(X##be, X##g
3ff0: 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f 20 i); \. X##go
4000: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 = GET64HIHI(X##g
4010: 69 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a 20 io, X##gio); \.
4020: 20 20 20 58 23 23 62 69 67 6f 20 3d 20 47 45 54 X##bigo = GET
4030: 36 34 4c 4f 4c 4f 28 58 23 23 62 69 2c 20 58 23 64LOLO(X##bi, X#
4040: 23 67 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 #go); \. XORe
4050: 71 31 32 38 28 43 69 6f 2c 20 58 23 23 67 69 6f q128(Cio, X##gio
4060: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 75 20 3d ); \. X##gu =
4070: 20 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 XOR64(LOAD64(st
4080: 61 74 65 5b 20 39 5d 29 2c 20 4c 4f 41 44 36 34 ate[ 9]), LOAD64
4090: 28 69 6e 70 75 74 5b 20 39 5d 29 29 3b 20 5c 0a (input[ 9])); \.
40a0: 20 20 20 20 58 23 23 62 6f 67 75 20 3d 20 47 45 X##bogu = GE
40b0: 54 36 34 4c 4f 4c 4f 28 58 23 23 62 6f 2c 20 58 T64LOLO(X##bo, X
40c0: 23 23 67 75 29 3b 20 5c 0a 20 20 20 20 58 4f 52 ##gu); \. XOR
40d0: 65 71 36 34 28 43 75 61 2c 20 58 23 23 67 75 29 eq64(Cua, X##gu)
40e0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 65 20 3d ; \. X##kae =
40f0: 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 XOR128(LOAD128(
4100: 73 74 61 74 65 5b 31 30 5d 29 2c 20 4c 4f 41 44 state[10]), LOAD
4110: 31 32 38 75 28 69 6e 70 75 74 5b 31 30 5d 29 29 128u(input[10]))
4120: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 20 3d 20 ; \. X##ka =
4130: 58 23 23 6b 61 65 3b 20 5c 0a 20 20 20 20 58 23 X##kae; \. X#
4140: 23 6b 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 #ke = GET64HIHI(
4150: 58 23 23 6b 61 65 2c 20 58 23 23 6b 61 65 29 3b X##kae, X##kae);
4160: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 \. XOReq128(
4170: 43 61 65 2c 20 58 23 23 6b 61 65 29 3b 20 5c 0a Cae, X##kae); \.
4180: 20 20 20 20 58 23 23 6b 69 6f 20 3d 20 58 4f 52 X##kio = XOR
4190: 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 128(LOAD128(stat
41a0: 65 5b 31 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75 e[12]), LOAD128u
41b0: 28 69 6e 70 75 74 5b 31 32 5d 29 29 3b 20 5c 0a (input[12])); \.
41c0: 20 20 20 20 58 23 23 6b 69 20 3d 20 58 23 23 6b X##ki = X##k
41d0: 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 20 io; \. X##ko
41e0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6b = GET64HIHI(X##k
41f0: 69 6f 2c 20 58 23 23 6b 69 6f 29 3b 20 5c 0a 20 io, X##kio); \.
4200: 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c XOReq128(Cio,
4210: 20 58 23 23 6b 69 6f 29 3b 20 5c 0a 20 20 20 20 X##kio); \.
4220: 58 23 23 6b 75 6d 61 20 3d 20 58 4f 52 31 32 38 X##kuma = XOR128
4230: 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 (LOAD128(state[1
4240: 34 5d 29 2c 20 4c 4f 41 44 31 32 38 28 69 6e 70 4]), LOAD128(inp
4250: 75 74 5b 31 34 5d 29 29 3b 20 5c 0a 20 20 20 20 ut[14])); \.
4260: 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 XOReq64(Cua, X##
4270: 6b 75 6d 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 kuma); \. X##
4280: 6d 65 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 me = XOR64(LOAD6
4290: 34 28 73 74 61 74 65 5b 31 36 5d 29 2c 20 4c 4f 4(state[16]), LO
42a0: 41 44 36 34 28 69 6e 70 75 74 5b 31 36 5d 29 29 AD64(input[16]))
42b0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 6d 65 20 ; \. X##kame
42c0: 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b = GET64LOLO(X##k
42d0: 61 2c 20 58 23 23 6d 65 29 3b 20 5c 0a 20 20 20 a, X##me); \.
42e0: 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 47 XOReq128(Cae, G
42f0: 45 54 36 34 48 49 48 49 28 58 23 23 6b 75 6d 61 ET64HIHI(X##kuma
4300: 2c 20 58 23 23 6b 61 6d 65 29 29 3b 20 5c 0a 20 , X##kame)); \.
4310: 20 20 20 58 23 23 6d 69 6f 20 3d 20 58 4f 52 31 X##mio = XOR1
4320: 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74 61 74 28(LOAD128u(stat
4330: 65 5b 31 37 5d 29 2c 20 4c 4f 41 44 31 32 38 75 e[17]), LOAD128u
4340: 28 69 6e 70 75 74 5b 31 37 5d 29 29 3b 20 5c 0a (input[17])); \.
4350: 20 20 20 20 58 23 23 6d 69 20 3d 20 58 23 23 6d X##mi = X##m
4360: 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 6d io; \. X##kem
4370: 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 i = GET64LOLO(X#
4380: 23 6b 65 2c 20 58 23 23 6d 69 29 3b 20 5c 0a 20 #ke, X##mi); \.
4390: 20 20 20 58 23 23 6d 6f 20 3d 20 47 45 54 36 34 X##mo = GET64
43a0: 48 49 48 49 28 58 23 23 6d 69 6f 2c 20 58 23 23 HIHI(X##mio, X##
43b0: 6d 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b mio); \. X##k
43c0: 69 6d 6f 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 imo = GET64LOLO(
43d0: 58 23 23 6b 69 2c 20 58 23 23 6d 6f 29 3b 20 5c X##ki, X##mo); \
43e0: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 . XOReq128(Ci
43f0: 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c 0a 20 20 o, X##mio); \.
4400: 20 20 58 23 23 6d 75 20 3d 20 58 4f 52 36 34 28 X##mu = XOR64(
4410: 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 39 5d LOAD64(state[19]
4420: 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b ), LOAD64(input[
4430: 31 39 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 19])); \. X##
4440: 6b 6f 6d 75 20 3d 20 47 45 54 36 34 4c 4f 4c 4f komu = GET64LOLO
4450: 28 58 23 23 6b 6f 2c 20 58 23 23 6d 75 29 3b 20 (X##ko, X##mu);
4460: 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 43 75 \. XOReq64(Cu
4470: 61 2c 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 a, X##mu); \.
4480: 20 58 23 23 73 61 73 65 20 3d 20 58 4f 52 31 32 X##sase = XOR12
4490: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 8(LOAD128(state[
44a0: 32 30 5d 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 20]), LOAD64(inp
44b0: 75 74 5b 32 30 5d 29 29 3b 20 5c 0a 20 20 20 20 ut[20])); \.
44c0: 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 23 XOReq128(Cae, X#
44d0: 23 73 61 73 65 29 3b 20 5c 0a 20 20 20 20 58 23 #sase); \. X#
44e0: 23 73 69 73 6f 20 3d 20 4c 4f 41 44 31 32 38 28 #siso = LOAD128(
44f0: 73 74 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 state[22]); \.
4500: 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 XOReq128(Cio,
4510: 58 23 23 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 X##siso); \.
4520: 58 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 73 X##su = LOAD64(s
4530: 74 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20 tate[24]); \.
4540: 20 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 XOReq64(Cua, X#
4550: 23 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 #su); \..#define
4560: 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 28 58 copyFromState(X
4570: 2c 20 73 74 61 74 65 29 20 5c 0a 20 20 20 20 58 , state) \. X
4580: 23 23 62 61 65 20 3d 20 4c 4f 41 44 31 32 38 28 ##bae = LOAD128(
4590: 73 74 61 74 65 5b 20 30 5d 29 3b 20 5c 0a 20 20 state[ 0]); \.
45a0: 20 20 58 23 23 62 61 20 3d 20 58 23 23 62 61 65 X##ba = X##bae
45b0: 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 20 3d 20 ; \. X##be =
45c0: 47 45 54 36 34 48 49 48 49 28 58 23 23 62 61 65 GET64HIHI(X##bae
45d0: 2c 20 58 23 23 62 61 65 29 3b 20 5c 0a 20 20 20 , X##bae); \.
45e0: 20 43 61 65 20 3d 20 58 23 23 62 61 65 3b 20 5c Cae = X##bae; \
45f0: 0a 20 20 20 20 58 23 23 62 69 6f 20 3d 20 4c 4f . X##bio = LO
4600: 41 44 31 32 38 28 73 74 61 74 65 5b 20 32 5d 29 AD128(state[ 2])
4610: 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 20 3d 20 ; \. X##bi =
4620: 58 23 23 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 X##bio; \. X#
4630: 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28 #bo = GET64HIHI(
4640: 58 23 23 62 69 6f 2c 20 58 23 23 62 69 6f 29 3b X##bio, X##bio);
4650: 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 58 23 23 \. Cio = X##
4660: 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 bio; \. X##bu
4670: 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b = LOAD64(state[
4680: 20 34 5d 29 3b 20 5c 0a 20 20 20 20 43 75 61 20 4]); \. Cua
4690: 3d 20 58 23 23 62 75 3b 20 5c 0a 20 20 20 20 58 = X##bu; \. X
46a0: 23 23 67 61 65 20 3d 20 4c 4f 41 44 31 32 38 75 ##gae = LOAD128u
46b0: 28 73 74 61 74 65 5b 20 35 5d 29 3b 20 5c 0a 20 (state[ 5]); \.
46c0: 20 20 20 58 23 23 67 61 20 3d 20 58 23 23 67 61 X##ga = X##ga
46d0: 65 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 67 61 e; \. X##buga
46e0: 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 = GET64LOLO(X##
46f0: 62 75 2c 20 58 23 23 67 61 29 3b 20 5c 0a 20 20 bu, X##ga); \.
4700: 20 20 58 23 23 67 65 20 3d 20 47 45 54 36 34 48 X##ge = GET64H
4710: 49 48 49 28 58 23 23 67 61 65 2c 20 58 23 23 67 IHI(X##gae, X##g
4720: 61 65 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 61 ae); \. X##ba
4730: 67 65 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 ge = GET64LOLO(X
4740: 23 23 62 61 2c 20 58 23 23 67 65 29 3b 20 5c 0a ##ba, X##ge); \.
4750: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 XOReq128(Cae
4760: 2c 20 58 23 23 67 61 65 29 3b 20 5c 0a 20 20 20 , X##gae); \.
4770: 20 58 23 23 67 69 6f 20 3d 20 4c 4f 41 44 31 32 X##gio = LOAD12
4780: 38 75 28 73 74 61 74 65 5b 20 37 5d 29 3b 20 5c 8u(state[ 7]); \
4790: 0a 20 20 20 20 58 23 23 67 69 20 3d 20 58 23 23 . X##gi = X##
47a0: 67 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 gio; \. X##be
47b0: 67 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 gi = GET64LOLO(X
47c0: 23 23 62 65 2c 20 58 23 23 67 69 29 3b 20 5c 0a ##be, X##gi); \.
47d0: 20 20 20 20 58 23 23 67 6f 20 3d 20 47 45 54 36 X##go = GET6
47e0: 34 48 49 48 49 28 58 23 23 67 69 6f 2c 20 58 23 4HIHI(X##gio, X#
47f0: 23 67 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23 #gio); \. X##
4800: 62 69 67 6f 20 3d 20 47 45 54 36 34 4c 4f 4c 4f bigo = GET64LOLO
4810: 28 58 23 23 62 69 2c 20 58 23 23 67 6f 29 3b 20 (X##bi, X##go);
4820: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 \. XOReq128(C
4830: 69 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a 20 io, X##gio); \.
4840: 20 20 20 58 23 23 67 75 20 3d 20 4c 4f 41 44 36 X##gu = LOAD6
4850: 34 28 73 74 61 74 65 5b 20 39 5d 29 3b 20 5c 0a 4(state[ 9]); \.
4860: 20 20 20 20 58 23 23 62 6f 67 75 20 3d 20 47 45 X##bogu = GE
4870: 54 36 34 4c 4f 4c 4f 28 58 23 23 62 6f 2c 20 58 T64LOLO(X##bo, X
4880: 23 23 67 75 29 3b 20 5c 0a 20 20 20 20 58 4f 52 ##gu); \. XOR
4890: 65 71 36 34 28 43 75 61 2c 20 58 23 23 67 75 29 eq64(Cua, X##gu)
48a0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 65 20 3d ; \. X##kae =
48b0: 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 LOAD128(state[1
48c0: 30 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 0]); \. X##ka
48d0: 20 3d 20 58 23 23 6b 61 65 3b 20 5c 0a 20 20 20 = X##kae; \.
48e0: 20 58 23 23 6b 65 20 3d 20 47 45 54 36 34 48 49 X##ke = GET64HI
48f0: 48 49 28 58 23 23 6b 61 65 2c 20 58 23 23 6b 61 HI(X##kae, X##ka
4900: 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 e); \. XOReq1
4910: 32 38 28 43 61 65 2c 20 58 23 23 6b 61 65 29 3b 28(Cae, X##kae);
4920: 20 5c 0a 20 20 20 20 58 23 23 6b 69 6f 20 3d 20 \. X##kio =
4930: 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 32 LOAD128(state[12
4940: 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 20 ]); \. X##ki
4950: 3d 20 58 23 23 6b 69 6f 3b 20 5c 0a 20 20 20 20 = X##kio; \.
4960: 58 23 23 6b 6f 20 3d 20 47 45 54 36 34 48 49 48 X##ko = GET64HIH
4970: 49 28 58 23 23 6b 69 6f 2c 20 58 23 23 6b 69 6f I(X##kio, X##kio
4980: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 ); \. XOReq12
4990: 38 28 43 69 6f 2c 20 58 23 23 6b 69 6f 29 3b 20 8(Cio, X##kio);
49a0: 5c 0a 20 20 20 20 58 23 23 6b 75 6d 61 20 3d 20 \. X##kuma =
49b0: 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 34 LOAD128(state[14
49c0: 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 ]); \. XOReq6
49d0: 34 28 43 75 61 2c 20 58 23 23 6b 75 6d 61 29 3b 4(Cua, X##kuma);
49e0: 20 5c 0a 20 20 20 20 58 23 23 6d 65 20 3d 20 4c \. X##me = L
49f0: 4f 41 44 36 34 28 73 74 61 74 65 5b 31 36 5d 29 OAD64(state[16])
4a00: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 6d 65 20 ; \. X##kame
4a10: 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b = GET64LOLO(X##k
4a20: 61 2c 20 58 23 23 6d 65 29 3b 20 5c 0a 20 20 20 a, X##me); \.
4a30: 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 47 XOReq128(Cae, G
4a40: 45 54 36 34 48 49 48 49 28 58 23 23 6b 75 6d 61 ET64HIHI(X##kuma
4a50: 2c 20 58 23 23 6b 61 6d 65 29 29 3b 20 5c 0a 20 , X##kame)); \.
4a60: 20 20 20 58 23 23 6d 69 6f 20 3d 20 4c 4f 41 44 X##mio = LOAD
4a70: 31 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29 3b 128u(state[17]);
4a80: 20 5c 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 58 \. X##mi = X
4a90: 23 23 6d 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 ##mio; \. X##
4aa0: 6b 65 6d 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f kemi = GET64LOLO
4ab0: 28 58 23 23 6b 65 2c 20 58 23 23 6d 69 29 3b 20 (X##ke, X##mi);
4ac0: 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 47 45 \. X##mo = GE
4ad0: 54 36 34 48 49 48 49 28 58 23 23 6d 69 6f 2c 20 T64HIHI(X##mio,
4ae0: 58 23 23 6d 69 6f 29 3b 20 5c 0a 20 20 20 20 58 X##mio); \. X
4af0: 23 23 6b 69 6d 6f 20 3d 20 47 45 54 36 34 4c 4f ##kimo = GET64LO
4b00: 4c 4f 28 58 23 23 6b 69 2c 20 58 23 23 6d 6f 29 LO(X##ki, X##mo)
4b10: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 ; \. XOReq128
4b20: 28 43 69 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c (Cio, X##mio); \
4b30: 0a 20 20 20 20 58 23 23 6d 75 20 3d 20 4c 4f 41 . X##mu = LOA
4b40: 44 36 34 28 73 74 61 74 65 5b 31 39 5d 29 3b 20 D64(state[19]);
4b50: 5c 0a 20 20 20 20 58 23 23 6b 6f 6d 75 20 3d 20 \. X##komu =
4b60: 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 6f 2c GET64LOLO(X##ko,
4b70: 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 X##mu); \. X
4b80: 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 6d OReq64(Cua, X##m
4b90: 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 61 73 u); \. X##sas
4ba0: 65 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 74 e = LOAD128(stat
4bb0: 65 5b 32 30 5d 29 3b 20 5c 0a 20 20 20 20 58 4f e[20]); \. XO
4bc0: 52 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 73 Req128(Cae, X##s
4bd0: 61 73 65 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 ase); \. X##s
4be0: 69 73 6f 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 iso = LOAD128(st
4bf0: 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 20 20 ate[22]); \.
4c00: 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 23 XOReq128(Cio, X#
4c10: 23 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 58 23 #siso); \. X#
4c20: 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 #su = LOAD64(sta
4c30: 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20 20 58 te[24]); \. X
4c40: 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 73 OReq64(Cua, X##s
4c50: 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63 u); \..#define c
4c60: 6f 70 79 54 6f 53 74 61 74 65 28 73 74 61 74 65 opyToState(state
4c70: 2c 20 58 29 20 5c 0a 20 20 20 20 53 54 4f 52 45 , X) \. STORE
4c80: 36 34 28 73 74 61 74 65 5b 20 30 5d 2c 20 58 23 64(state[ 0], X#
4c90: 23 62 61 67 65 29 3b 20 5c 0a 20 20 20 20 53 54 #bage); \. ST
4ca0: 4f 52 45 36 34 28 73 74 61 74 65 5b 20 31 5d 2c ORE64(state[ 1],
4cb0: 20 58 23 23 62 65 67 69 29 3b 20 5c 0a 20 20 20 X##begi); \.
4cc0: 20 53 54 4f 52 45 36 34 28 73 74 61 74 65 5b 20 STORE64(state[
4cd0: 32 5d 2c 20 58 23 23 62 69 67 6f 29 3b 20 5c 0a 2], X##bigo); \.
4ce0: 20 20 20 20 53 54 4f 52 45 36 34 28 73 74 61 74 STORE64(stat
4cf0: 65 5b 20 33 5d 2c 20 58 23 23 62 6f 67 75 29 3b e[ 3], X##bogu);
4d00: 20 5c 0a 20 20 20 20 53 54 4f 52 45 31 32 38 28 \. STORE128(
4d10: 73 74 61 74 65 5b 20 34 5d 2c 20 58 23 23 62 75 state[ 4], X##bu
4d20: 67 61 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 ga); \. STORE
4d30: 36 34 28 73 74 61 74 65 5b 20 36 5d 2c 20 43 4f 64(state[ 6], CO
4d40: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 62 61 67 PY64HI2LO(X##bag
4d50: 65 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 e)); \. STORE
4d60: 36 34 28 73 74 61 74 65 5b 20 37 5d 2c 20 43 4f 64(state[ 7], CO
4d70: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 62 65 67 PY64HI2LO(X##beg
4d80: 69 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 i)); \. STORE
4d90: 36 34 28 73 74 61 74 65 5b 20 38 5d 2c 20 43 4f 64(state[ 8], CO
4da0: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 62 69 67 PY64HI2LO(X##big
4db0: 6f 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 o)); \. STORE
4dc0: 36 34 28 73 74 61 74 65 5b 20 39 5d 2c 20 43 4f 64(state[ 9], CO
4dd0: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 62 6f 67 PY64HI2LO(X##bog
4de0: 75 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 u)); \. STORE
4df0: 36 34 28 73 74 61 74 65 5b 31 30 5d 2c 20 58 23 64(state[10], X#
4e00: 23 6b 61 6d 65 29 3b 20 5c 0a 20 20 20 20 53 54 #kame); \. ST
4e10: 4f 52 45 36 34 28 73 74 61 74 65 5b 31 31 5d 2c ORE64(state[11],
4e20: 20 58 23 23 6b 65 6d 69 29 3b 20 5c 0a 20 20 20 X##kemi); \.
4e30: 20 53 54 4f 52 45 36 34 28 73 74 61 74 65 5b 31 STORE64(state[1
4e40: 32 5d 2c 20 58 23 23 6b 69 6d 6f 29 3b 20 5c 0a 2], X##kimo); \.
4e50: 20 20 20 20 53 54 4f 52 45 36 34 28 73 74 61 74 STORE64(stat
4e60: 65 5b 31 33 5d 2c 20 58 23 23 6b 6f 6d 75 29 3b e[13], X##komu);
4e70: 20 5c 0a 20 20 20 20 53 54 4f 52 45 31 32 38 28 \. STORE128(
4e80: 73 74 61 74 65 5b 31 34 5d 2c 20 58 23 23 6b 75 state[14], X##ku
4e90: 6d 61 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 ma); \. STORE
4ea0: 36 34 28 73 74 61 74 65 5b 31 36 5d 2c 20 43 4f 64(state[16], CO
4eb0: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 6b 61 6d PY64HI2LO(X##kam
4ec0: 65 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 e)); \. STORE
4ed0: 36 34 28 73 74 61 74 65 5b 31 37 5d 2c 20 43 4f 64(state[17], CO
4ee0: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 6b 65 6d PY64HI2LO(X##kem
4ef0: 69 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 i)); \. STORE
4f00: 36 34 28 73 74 61 74 65 5b 31 38 5d 2c 20 43 4f 64(state[18], CO
4f10: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 6b 69 6d PY64HI2LO(X##kim
4f20: 6f 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 o)); \. STORE
4f30: 36 34 28 73 74 61 74 65 5b 31 39 5d 2c 20 43 4f 64(state[19], CO
4f40: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 6b 6f 6d PY64HI2LO(X##kom
4f50: 75 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45 u)); \. STORE
4f60: 31 32 38 28 73 74 61 74 65 5b 32 30 5d 2c 20 58 128(state[20], X
4f70: 23 23 73 61 73 65 29 3b 20 5c 0a 20 20 20 20 53 ##sase); \. S
4f80: 54 4f 52 45 31 32 38 28 73 74 61 74 65 5b 32 32 TORE128(state[22
4f90: 5d 2c 20 58 23 23 73 69 73 6f 29 3b 20 5c 0a 20 ], X##siso); \.
4fa0: 20 20 20 53 54 4f 52 45 36 34 28 73 74 61 74 65 STORE64(state
4fb0: 5b 32 34 5d 2c 20 58 23 23 73 75 29 3b 20 5c 0a [24], X##su); \.
4fc0: 0a 23 64 65 66 69 6e 65 20 63 6f 70 79 53 74 61 .#define copySta
4fd0: 74 65 56 61 72 69 61 62 6c 65 73 28 58 2c 20 59 teVariables(X, Y
4fe0: 29 20 5c 0a 20 20 20 20 58 23 23 62 61 67 65 20 ) \. X##bage
4ff0: 3d 20 59 23 23 62 61 67 65 3b 20 5c 0a 20 20 20 = Y##bage; \.
5000: 20 58 23 23 62 65 67 69 20 3d 20 59 23 23 62 65 X##begi = Y##be
5010: 67 69 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 67 gi; \. X##big
5020: 6f 20 3d 20 59 23 23 62 69 67 6f 3b 20 5c 0a 20 o = Y##bigo; \.
5030: 20 20 20 58 23 23 62 6f 67 75 20 3d 20 59 23 23 X##bogu = Y##
5040: 62 6f 67 75 3b 20 5c 0a 20 20 20 20 58 23 23 62 bogu; \. X##b
5050: 75 67 61 20 3d 20 59 23 23 62 75 67 61 3b 20 5c uga = Y##buga; \
5060: 0a 20 20 20 20 58 23 23 6b 61 6d 65 20 3d 20 59 . X##kame = Y
5070: 23 23 6b 61 6d 65 3b 20 5c 0a 20 20 20 20 58 23 ##kame; \. X#
5080: 23 6b 65 6d 69 20 3d 20 59 23 23 6b 65 6d 69 3b #kemi = Y##kemi;
5090: 20 5c 0a 20 20 20 20 58 23 23 6b 69 6d 6f 20 3d \. X##kimo =
50a0: 20 59 23 23 6b 69 6d 6f 3b 20 5c 0a 20 20 20 20 Y##kimo; \.
50b0: 58 23 23 6b 6f 6d 75 20 3d 20 59 23 23 6b 6f 6d X##komu = Y##kom
50c0: 75 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 6d 61 u; \. X##kuma
50d0: 20 3d 20 59 23 23 6b 75 6d 61 3b 20 5c 0a 20 20 = Y##kuma; \.
50e0: 20 20 58 23 23 73 61 73 65 20 3d 20 59 23 23 73 X##sase = Y##s
50f0: 61 73 65 3b 20 5c 0a 20 20 20 20 58 23 23 73 69 ase; \. X##si
5100: 73 6f 20 3d 20 59 23 23 73 69 73 6f 3b 20 5c 0a so = Y##siso; \.
5110: 20 20 20 20 58 23 23 73 75 20 3d 20 59 23 23 73 X##su = Y##s
5120: 75 3b 20 5c 0a 0a u; \..