0000: 40 20 54 68 65 20 4b 65 63 63 61 6b 20 73 70 6f @ The Keccak spo
0010: 6e 67 65 20 66 75 6e 63 74 69 6f 6e 2c 20 64 65 nge function, de
0020: 73 69 67 6e 65 64 20 62 79 20 47 75 69 64 6f 20 signed by Guido
0030: 42 65 72 74 6f 6e 69 2c 20 4a 6f 61 6e 20 44 61 Bertoni, Joan Da
0040: 65 6d 65 6e 2c 0a 40 20 4d 69 63 68 61 c3 ab 6c emen,.@ Michaël
0050: 20 50 65 65 74 65 72 73 20 61 6e 64 20 47 69 6c Peeters and Gil
0060: 6c 65 73 20 56 61 6e 20 41 73 73 63 68 65 2e 20 les Van Assche.
0070: 46 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 For more informa
0080: 74 69 6f 6e 2c 20 66 65 65 64 62 61 63 6b 20 6f tion, feedback o
0090: 72 0a 40 20 71 75 65 73 74 69 6f 6e 73 2c 20 70 r.@ questions, p
00a0: 6c 65 61 73 65 20 72 65 66 65 72 20 74 6f 20 6f lease refer to o
00b0: 75 72 20 77 65 62 73 69 74 65 3a 20 68 74 74 70 ur website: http
00c0: 3a 2f 2f 6b 65 63 63 61 6b 2e 6e 6f 65 6b 65 6f ://keccak.noekeo
00d0: 6e 2e 6f 72 67 2f 0a 40 0a 40 20 49 6d 70 6c 65 n.org/.@.@ Imple
00e0: 6d 65 6e 74 61 74 69 6f 6e 20 62 79 20 52 6f 6e mentation by Ron
00f0: 6e 79 20 56 61 6e 20 4b 65 65 72 2c 20 68 65 72 ny Van Keer, her
0100: 65 62 79 20 64 65 6e 6f 74 65 64 20 61 73 20 22 eby denoted as "
0110: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 65 72 22 the implementer"
0120: 2e 0a 40 0a 40 20 54 6f 20 74 68 65 20 65 78 74 ..@.@ To the ext
0130: 65 6e 74 20 70 6f 73 73 69 62 6c 65 20 75 6e 64 ent possible und
0140: 65 72 20 6c 61 77 2c 20 74 68 65 20 69 6d 70 6c er law, the impl
0150: 65 6d 65 6e 74 65 72 20 68 61 73 20 77 61 69 76 ementer has waiv
0160: 65 64 20 61 6c 6c 20 63 6f 70 79 72 69 67 68 74 ed all copyright
0170: 0a 40 20 61 6e 64 20 72 65 6c 61 74 65 64 20 6f .@ and related o
0180: 72 20 6e 65 69 67 68 62 6f 72 69 6e 67 20 72 69 r neighboring ri
0190: 67 68 74 73 20 74 6f 20 74 68 65 20 73 6f 75 72 ghts to the sour
01a0: 63 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73 20 ce code in this
01b0: 66 69 6c 65 2e 0a 40 20 68 74 74 70 3a 2f 2f 63 file..@ http://c
01c0: 72 65 61 74 69 76 65 63 6f 6d 6d 6f 6e 73 2e 6f reativecommons.o
01d0: 72 67 2f 70 75 62 6c 69 63 64 6f 6d 61 69 6e 2f rg/publicdomain/
01e0: 7a 65 72 6f 2f 31 2e 30 2f 0a 0a 40 20 54 68 69 zero/1.0/..@ Thi
01f0: 73 20 66 69 6c 65 20 77 61 73 20 63 72 65 61 74 s file was creat
0200: 65 64 20 66 72 6f 6d 20 61 20 2e 61 73 6d 20 66 ed from a .asm f
0210: 69 6c 65 0a 40 20 20 75 73 69 6e 67 20 74 68 65 ile.@ using the
0220: 20 61 64 73 32 67 61 73 2e 70 6c 20 73 63 72 69 ads2gas.pl scri
0230: 70 74 2e 0a 2e 65 71 75 20 44 4f 31 53 54 52 4f pt...equ DO1STRO
0240: 55 4e 44 49 4e 47 2c 20 30 0a 0a 20 20 40 20 50 UNDING, 0.. @ P
0250: 52 45 53 45 52 56 45 38 0a 2e 74 65 78 74 0a 0a RESERVE8..text..
0260: 40 2f 2f 20 20 2d 2d 2d 20 6f 66 66 73 65 74 73 @// --- offsets
0270: 20 69 6e 20 73 74 61 74 65 0a 2e 65 71 75 20 41 in state..equ A
0280: 62 61 2c 20 30 2a 38 0a 2e 65 71 75 20 41 67 61 ba, 0*8..equ Aga
0290: 2c 20 31 2a 38 0a 2e 65 71 75 20 41 6b 61 2c 20 , 1*8..equ Aka,
02a0: 32 2a 38 0a 2e 65 71 75 20 41 6d 61 2c 20 33 2a 2*8..equ Ama, 3*
02b0: 38 0a 2e 65 71 75 20 41 73 61 2c 20 34 2a 38 0a 8..equ Asa, 4*8.
02c0: 0a 40 2f 2f 20 2d 2d 2d 20 6d 61 63 72 6f 73 0a .@// --- macros.
02d0: 0a 2e 6d 61 63 72 6f 20 20 20 20 4b 65 63 63 61 ..macro Kecca
02e0: 6b 54 68 65 74 61 52 68 6f 50 69 43 68 69 49 6f kThetaRhoPiChiIo
02f0: 74 61 20 61 72 67 41 31 2c 20 61 72 67 41 32 2c ta argA1, argA2,
0300: 20 61 72 67 41 33 2c 20 61 72 67 41 34 2c 20 61 argA3, argA4, a
0310: 72 67 41 35 0a 0a 20 20 20 20 40 50 72 65 70 61 rgA5.. @Prepa
0320: 72 65 20 54 68 65 74 61 0a 20 20 20 20 40 43 61 re Theta. @Ca
0330: 20 3d 20 41 62 61 5e 41 67 61 5e 41 6b 61 5e 41 = Aba^Aga^Aka^A
0340: 6d 61 5e 41 73 61 40 0a 20 20 20 20 40 43 65 20 ma^Asa@. @Ce
0350: 3d 20 41 62 65 5e 41 67 65 5e 41 6b 65 5e 41 6d = Abe^Age^Ake^Am
0360: 65 5e 41 73 65 40 0a 20 20 20 20 40 43 69 20 3d e^Ase@. @Ci =
0370: 20 41 62 69 5e 41 67 69 5e 41 6b 69 5e 41 6d 69 Abi^Agi^Aki^Ami
0380: 5e 41 73 69 40 0a 20 20 20 20 40 43 6f 20 3d 20 ^Asi@. @Co =
0390: 41 62 6f 5e 41 67 6f 5e 41 6b 6f 5e 41 6d 6f 5e Abo^Ago^Ako^Amo^
03a0: 41 73 6f 40 0a 20 20 20 20 40 43 75 20 3d 20 41 Aso@. @Cu = A
03b0: 62 75 5e 41 67 75 5e 41 6b 75 5e 41 6d 75 5e 41 bu^Agu^Aku^Amu^A
03c0: 73 75 40 0a 20 20 20 20 40 44 65 20 3d 20 43 61 su@. @De = Ca
03d0: 5e 52 4f 4c 36 34 28 43 69 2c 20 31 29 40 0a 20 ^ROL64(Ci, 1)@.
03e0: 20 20 20 40 44 69 20 3d 20 43 65 5e 52 4f 4c 36 @Di = Ce^ROL6
03f0: 34 28 43 6f 2c 20 31 29 40 0a 20 20 20 20 40 44 4(Co, 1)@. @D
0400: 6f 20 3d 20 43 69 5e 52 4f 4c 36 34 28 43 75 2c o = Ci^ROL64(Cu,
0410: 20 31 29 40 0a 20 20 20 20 40 44 75 20 3d 20 43 1)@. @Du = C
0420: 6f 5e 52 4f 4c 36 34 28 43 61 2c 20 31 29 40 0a o^ROL64(Ca, 1)@.
0430: 20 20 20 20 40 44 61 20 3d 20 43 75 5e 52 4f 4c @Da = Cu^ROL
0440: 36 34 28 43 65 2c 20 31 29 40 0a 0a 20 20 20 20 64(Ce, 1)@..
0450: 76 65 6f 72 2e 36 34 20 71 34 2c 20 71 36 2c 20 veor.64 q4, q6,
0460: 71 37 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 71 q7. veor.64 q
0470: 35 2c 20 71 39 2c 20 71 31 30 0a 20 20 20 20 76 5, q9, q10. v
0480: 65 6f 72 2e 36 34 20 64 38 2c 20 20 64 38 2c 20 eor.64 d8, d8,
0490: 20 20 64 39 0a 20 20 20 20 76 65 6f 72 2e 36 34 d9. veor.64
04a0: 20 64 31 30 2c 20 20 64 31 30 2c 20 20 20 64 31 d10, d10, d1
04b0: 31 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 64 31 1. veor.64 d1
04c0: 2c 20 20 64 38 2c 20 20 20 64 31 36 0a 20 20 20 , d8, d16.
04d0: 20 76 65 6f 72 2e 36 34 20 64 32 2c 20 20 64 31 veor.64 d2, d1
04e0: 30 2c 20 20 20 64 31 37 0a 0a 20 20 20 20 76 65 0, d17.. ve
04f0: 6f 72 2e 36 34 20 71 34 2c 20 71 31 31 2c 20 71 or.64 q4, q11, q
0500: 31 32 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 71 12. veor.64 q
0510: 35 2c 20 71 31 34 2c 20 71 31 35 0a 20 20 20 20 5, q14, q15.
0520: 76 65 6f 72 2e 36 34 20 64 38 2c 20 20 64 38 2c veor.64 d8, d8,
0530: 20 20 20 64 39 0a 20 20 20 20 76 65 6f 72 2e 36 d9. veor.6
0540: 34 20 64 31 30 2c 20 20 64 31 30 2c 20 20 20 64 4 d10, d10, d
0550: 31 31 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 64 11. veor.64 d
0560: 33 2c 20 20 64 38 2c 20 20 20 64 32 36 0a 0a 20 3, d8, d26..
0570: 20 20 20 76 61 64 64 2e 75 36 34 20 71 34 2c 20 vadd.u64 q4,
0580: 71 31 2c 20 71 31 0a 20 20 20 20 76 65 6f 72 2e q1, q1. veor.
0590: 36 34 20 64 34 2c 20 20 64 31 30 2c 20 20 20 64 64 d4, d10, d
05a0: 32 37 0a 20 20 20 20 76 6d 6f 76 2e 36 34 20 20 27. vmov.64
05b0: 64 30 2c 20 64 35 0a 20 20 20 20 76 73 72 69 2e d0, d5. vsri.
05c0: 36 34 20 71 34 2c 20 71 31 2c 20 23 36 33 0a 0a 64 q4, q1, #63..
05d0: 20 20 20 20 76 61 64 64 2e 75 36 34 20 71 35 2c vadd.u64 q5,
05e0: 20 71 32 2c 20 71 32 0a 20 20 20 20 76 65 6f 72 q2, q2. veor
05f0: 2e 36 34 20 71 34 2c 20 71 34 2c 20 71 30 0a 20 .64 q4, q4, q0.
0600: 20 20 20 76 73 72 69 2e 36 34 20 71 35 2c 20 71 vsri.64 q5, q
0610: 32 2c 20 23 36 33 0a 20 20 20 20 76 61 64 64 2e 2, #63. vadd.
0620: 75 36 34 20 64 37 2c 20 64 31 2c 20 64 31 0a 20 u64 d7, d1, d1.
0630: 20 20 20 76 65 6f 72 2e 36 34 20 5c 61 72 67 41 veor.64 \argA
0640: 32 2c 20 5c 61 72 67 41 32 2c 20 64 38 0a 20 20 2, \argA2, d8.
0650: 20 20 76 65 6f 72 2e 36 34 20 71 35 2c 20 71 35 veor.64 q5, q5
0660: 2c 20 71 31 0a 0a 20 20 20 20 76 73 72 69 2e 36 , q1.. vsri.6
0670: 34 20 64 37 2c 20 64 31 2c 20 23 36 33 0a 20 20 4 d7, d1, #63.
0680: 20 20 76 73 68 6c 2e 75 36 34 20 64 31 2c 20 5c vshl.u64 d1, \
0690: 61 72 67 41 32 2c 20 23 34 34 0a 20 20 20 20 76 argA2, #44. v
06a0: 65 6f 72 2e 36 34 20 5c 61 72 67 41 33 2c 20 5c eor.64 \argA3, \
06b0: 61 72 67 41 33 2c 20 64 39 0a 20 20 20 20 76 65 argA3, d9. ve
06c0: 6f 72 2e 36 34 20 64 37 2c 20 64 37 2c 20 64 34 or.64 d7, d7, d4
06d0: 0a 0a 20 20 20 20 40 42 61 20 3d 20 61 72 67 41 .. @Ba = argA
06e0: 31 5e 44 61 40 0a 20 20 20 20 40 42 65 20 3d 20 1^Da@. @Be =
06f0: 52 4f 4c 36 34 28 28 61 72 67 41 32 5e 44 65 29 ROL64((argA2^De)
0700: 2c 20 34 34 29 40 0a 20 20 20 20 40 42 69 20 3d , 44)@. @Bi =
0710: 20 52 4f 4c 36 34 28 28 61 72 67 41 33 5e 44 69 ROL64((argA3^Di
0720: 29 2c 20 34 33 29 40 0a 20 20 20 20 40 42 6f 20 ), 43)@. @Bo
0730: 3d 20 52 4f 4c 36 34 28 28 61 72 67 41 34 5e 44 = ROL64((argA4^D
0740: 6f 29 2c 20 32 31 29 40 0a 20 20 20 20 40 42 75 o), 21)@. @Bu
0750: 20 3d 20 52 4f 4c 36 34 28 28 61 72 67 41 35 5e = ROL64((argA5^
0760: 44 75 29 2c 20 31 34 29 40 0a 20 20 20 20 40 61 Du), 14)@. @a
0770: 72 67 41 32 20 3d 20 20 20 42 65 20 5e 28 28 7e rgA2 = Be ^((~
0780: 42 69 29 26 20 42 6f 20 29 40 0a 20 20 20 20 40 Bi)& Bo )@. @
0790: 61 72 67 41 33 20 3d 20 20 20 42 69 20 5e 28 28 argA3 = Bi ^((
07a0: 7e 42 6f 29 26 20 42 75 20 29 40 0a 20 20 20 20 ~Bo)& Bu )@.
07b0: 40 61 72 67 41 34 20 3d 20 20 20 42 6f 20 5e 28 @argA4 = Bo ^(
07c0: 28 7e 42 75 29 26 20 42 61 20 29 40 0a 20 20 20 (~Bu)& Ba )@.
07d0: 20 40 61 72 67 41 35 20 3d 20 20 20 42 75 20 5e @argA5 = Bu ^
07e0: 28 28 7e 42 61 29 26 20 42 65 20 29 40 20 0a 20 ((~Ba)& Be )@ .
07f0: 20 20 20 40 61 72 67 41 31 20 3d 20 20 20 42 61 @argA1 = Ba
0800: 20 5e 28 28 7e 42 65 29 26 20 42 69 20 29 40 20 ^((~Be)& Bi )@
0810: 61 72 67 41 31 20 5e 3d 20 4b 65 63 63 61 6b 46 argA1 ^= KeccakF
0820: 31 36 30 30 52 6f 75 6e 64 43 6f 6e 73 74 61 6e 1600RoundConstan
0830: 74 73 5b 69 2b 72 6f 75 6e 64 5d 40 0a 20 20 20 ts[i+round]@.
0840: 20 76 73 72 69 2e 36 34 20 64 31 2c 20 5c 61 72 vsri.64 d1, \ar
0850: 67 41 32 2c 20 23 36 34 2d 34 34 0a 20 20 20 20 gA2, #64-44.
0860: 76 73 68 6c 2e 75 36 34 20 64 32 2c 20 5c 61 72 vshl.u64 d2, \ar
0870: 67 41 33 2c 20 23 34 33 0a 20 20 20 20 76 6c 64 gA3, #43. vld
0880: 72 2e 36 34 20 64 30 2c 20 5b 73 70 2c 20 23 5c r.64 d0, [sp, #\
0890: 61 72 67 41 31 5d 0a 20 20 20 20 76 65 6f 72 2e argA1]. veor.
08a0: 36 34 20 5c 61 72 67 41 34 2c 20 5c 61 72 67 41 64 \argA4, \argA
08b0: 34 2c 20 64 31 30 0a 20 20 20 20 76 73 72 69 2e 4, d10. vsri.
08c0: 36 34 20 64 32 2c 20 5c 61 72 67 41 33 2c 20 23 64 d2, \argA3, #
08d0: 36 34 2d 34 33 0a 20 20 20 20 76 73 68 6c 2e 75 64-43. vshl.u
08e0: 36 34 20 64 33 2c 20 5c 61 72 67 41 34 2c 20 23 64 d3, \argA4, #
08f0: 32 31 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 5c 21. veor.64 \
0900: 61 72 67 41 35 2c 20 5c 61 72 67 41 35 2c 20 64 argA5, \argA5, d
0910: 31 31 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 64 11. veor.64 d
0920: 30 2c 20 64 30 2c 20 64 37 0a 20 20 20 20 76 73 0, d0, d7. vs
0930: 72 69 2e 36 34 20 64 33 2c 20 5c 61 72 67 41 34 ri.64 d3, \argA4
0940: 2c 20 23 36 34 2d 32 31 0a 20 20 20 20 76 62 69 , #64-21. vbi
0950: 63 2e 36 34 20 20 20 64 35 2c 20 64 32 2c 20 64 c.64 d5, d2, d
0960: 31 0a 20 20 20 20 76 73 68 6c 2e 75 36 34 20 64 1. vshl.u64 d
0970: 34 2c 20 5c 61 72 67 41 35 2c 20 23 31 34 0a 20 4, \argA5, #14.
0980: 20 20 20 76 62 69 63 2e 36 34 20 20 20 5c 61 72 vbic.64 \ar
0990: 67 41 32 2c 20 64 33 2c 20 64 32 0a 20 20 20 20 gA2, d3, d2.
09a0: 76 6c 64 31 2e 36 34 20 20 20 64 36 2c 20 5b 72 vld1.64 d6, [r
09b0: 33 5d 21 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 3]!. veor.64
09c0: 20 20 64 35 2c 20 64 30 0a 20 20 20 20 76 73 72 d5, d0. vsr
09d0: 69 2e 36 34 20 64 34 2c 20 5c 61 72 67 41 35 2c i.64 d4, \argA5,
09e0: 20 23 36 34 2d 31 34 0a 20 20 20 20 76 65 6f 72 #64-14. veor
09f0: 2e 36 34 20 20 20 64 35 2c 20 64 36 0a 20 20 20 .64 d5, d6.
0a00: 20 76 62 69 63 2e 36 34 20 20 20 5c 61 72 67 41 vbic.64 \argA
0a10: 35 2c 20 64 31 2c 20 64 30 0a 20 20 20 20 76 62 5, d1, d0. vb
0a20: 69 63 2e 36 34 20 20 20 5c 61 72 67 41 33 2c 20 ic.64 \argA3,
0a30: 64 34 2c 20 64 33 0a 20 20 20 20 76 62 69 63 2e d4, d3. vbic.
0a40: 36 34 20 20 20 5c 61 72 67 41 34 2c 20 64 30 2c 64 \argA4, d0,
0a50: 20 64 34 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 d4. veor.64
0a60: 20 20 5c 61 72 67 41 32 2c 20 64 31 0a 20 20 20 \argA2, d1.
0a70: 20 76 73 74 72 2e 36 34 20 20 20 64 35 2c 20 5b vstr.64 d5, [
0a80: 73 70 2c 20 23 5c 61 72 67 41 31 5d 0a 20 20 20 sp, #\argA1].
0a90: 20 76 65 6f 72 2e 36 34 20 20 20 5c 61 72 67 41 veor.64 \argA
0aa0: 33 2c 20 64 32 20 20 20 20 0a 20 20 20 20 76 65 3, d2 . ve
0ab0: 6f 72 2e 36 34 20 20 20 5c 61 72 67 41 34 2c 20 or.64 \argA4,
0ac0: 64 33 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 20 d3. veor.64
0ad0: 20 5c 61 72 67 41 35 2c 20 64 34 0a 0a 20 20 20 \argA5, d4..
0ae0: 20 2e 65 6e 64 6d 0a 0a 2e 6d 61 63 72 6f 20 20 .endm...macro
0af0: 20 20 4b 65 63 63 61 6b 54 68 65 74 61 52 68 6f KeccakThetaRho
0b00: 50 69 43 68 69 31 20 20 20 61 72 67 41 31 2c 20 PiChi1 argA1,
0b10: 61 72 67 41 32 2c 20 61 72 67 41 33 2c 20 61 72 argA2, argA3, ar
0b20: 67 41 34 2c 20 61 72 67 41 35 0a 0a 20 20 20 20 gA4, argA5..
0b30: 40 64 32 20 3d 20 52 4f 4c 36 34 28 28 61 72 67 @d2 = ROL64((arg
0b40: 41 31 5e 44 61 29 2c 20 33 29 40 0a 20 20 20 20 A1^Da), 3)@.
0b50: 40 64 33 20 3d 20 52 4f 4c 36 34 28 28 61 72 67 @d3 = ROL64((arg
0b60: 41 32 5e 44 65 29 2c 20 34 35 29 40 0a 20 20 20 A2^De), 45)@.
0b70: 20 40 64 34 20 3d 20 52 4f 4c 36 34 28 28 61 72 @d4 = ROL64((ar
0b80: 67 41 33 5e 44 69 29 2c 20 36 31 29 40 0a 20 20 gA3^Di), 61)@.
0b90: 20 20 40 64 30 20 3d 20 52 4f 4c 36 34 28 28 61 @d0 = ROL64((a
0ba0: 72 67 41 34 5e 44 6f 29 2c 20 32 38 29 40 0a 20 rgA4^Do), 28)@.
0bb0: 20 20 20 40 64 31 20 3d 20 52 4f 4c 36 34 28 28 @d1 = ROL64((
0bc0: 61 72 67 41 35 5e 44 75 29 2c 20 32 30 29 40 0a argA5^Du), 20)@.
0bd0: 20 20 20 20 40 61 72 67 41 31 20 3d 20 20 20 42 @argA1 = B
0be0: 61 20 5e 28 28 7e 42 65 29 26 20 20 42 69 20 29 a ^((~Be)& Bi )
0bf0: 40 20 43 61 20 5e 3d 20 61 72 67 41 31 40 0a 20 @ Ca ^= argA1@.
0c00: 20 20 20 40 61 72 67 41 32 20 3d 20 20 20 42 65 @argA2 = Be
0c10: 20 5e 28 28 7e 42 69 29 26 20 20 42 6f 20 29 40 ^((~Bi)& Bo )@
0c20: 0a 20 20 20 20 40 61 72 67 41 33 20 3d 20 20 20 . @argA3 =
0c30: 42 69 20 5e 28 28 7e 42 6f 29 26 20 20 42 75 20 Bi ^((~Bo)& Bu
0c40: 29 40 0a 20 20 20 20 40 61 72 67 41 34 20 3d 20 )@. @argA4 =
0c50: 20 20 42 6f 20 5e 28 28 7e 42 75 29 26 20 20 42 Bo ^((~Bu)& B
0c60: 61 20 29 40 0a 20 20 20 20 40 61 72 67 41 35 20 a )@. @argA5
0c70: 3d 20 20 20 42 75 20 5e 28 28 7e 42 61 29 26 20 = Bu ^((~Ba)&
0c80: 20 42 65 20 29 40 0a 0a 20 20 20 20 76 65 6f 72 Be )@.. veor
0c90: 2e 36 34 20 5c 61 72 67 41 32 2c 20 5c 61 72 67 .64 \argA2, \arg
0ca0: 41 32 2c 20 64 38 0a 20 20 20 20 76 65 6f 72 2e A2, d8. veor.
0cb0: 36 34 20 5c 61 72 67 41 33 2c 20 5c 61 72 67 41 64 \argA3, \argA
0cc0: 33 2c 20 64 39 0a 20 20 20 20 76 73 68 6c 2e 75 3, d9. vshl.u
0cd0: 36 34 20 20 64 33 2c 20 5c 61 72 67 41 32 2c 20 64 d3, \argA2,
0ce0: 23 34 35 0a 20 20 20 20 76 6c 64 72 2e 36 34 20 #45. vldr.64
0cf0: 64 36 2c 20 5b 73 70 2c 20 23 5c 61 72 67 41 31 d6, [sp, #\argA1
0d00: 5d 0a 20 20 20 20 76 73 68 6c 2e 75 36 34 20 20 ]. vshl.u64
0d10: 64 34 2c 20 5c 61 72 67 41 33 2c 20 23 36 31 0a d4, \argA3, #61.
0d20: 20 20 20 20 76 65 6f 72 2e 36 34 20 5c 61 72 67 veor.64 \arg
0d30: 41 34 2c 20 5c 61 72 67 41 34 2c 20 64 31 30 0a A4, \argA4, d10.
0d40: 20 20 20 20 76 73 72 69 2e 36 34 20 20 64 33 2c vsri.64 d3,
0d50: 20 5c 61 72 67 41 32 2c 20 23 36 34 2d 34 35 0a \argA2, #64-45.
0d60: 20 20 20 20 76 65 6f 72 2e 36 34 20 5c 61 72 67 veor.64 \arg
0d70: 41 35 2c 20 5c 61 72 67 41 35 2c 20 64 31 31 0a A5, \argA5, d11.
0d80: 20 20 20 20 76 73 72 69 2e 36 34 20 20 64 34 2c vsri.64 d4,
0d90: 20 5c 61 72 67 41 33 2c 20 23 36 34 2d 36 31 0a \argA3, #64-61.
0da0: 20 20 20 20 76 73 68 6c 2e 75 36 34 20 20 64 30 vshl.u64 d0
0db0: 2c 20 5c 61 72 67 41 34 2c 20 23 32 38 0a 20 20 , \argA4, #28.
0dc0: 20 20 76 65 6f 72 2e 36 34 20 64 36 2c 20 64 36 veor.64 d6, d6
0dd0: 2c 20 64 37 0a 20 20 20 20 76 73 68 6c 2e 75 36 , d7. vshl.u6
0de0: 34 20 20 64 31 2c 20 5c 61 72 67 41 35 2c 20 23 4 d1, \argA5, #
0df0: 32 30 0a 20 20 20 20 76 62 69 63 2e 36 34 20 20 20. vbic.64
0e00: 20 5c 61 72 67 41 33 2c 20 64 34 2c 20 64 33 0a \argA3, d4, d3.
0e10: 20 20 20 20 76 73 72 69 2e 36 34 20 20 64 30 2c vsri.64 d0,
0e20: 20 5c 61 72 67 41 34 2c 20 23 36 34 2d 32 38 0a \argA4, #64-28.
0e30: 20 20 20 20 76 62 69 63 2e 36 34 20 20 20 5c 61 vbic.64 \a
0e40: 72 67 41 34 2c 20 64 30 2c 20 64 34 0a 20 20 20 rgA4, d0, d4.
0e50: 20 76 73 68 6c 2e 75 36 34 20 20 64 32 2c 20 64 vshl.u64 d2, d
0e60: 36 2c 20 23 33 0a 20 20 20 20 76 73 72 69 2e 36 6, #3. vsri.6
0e70: 34 20 20 64 31 2c 20 5c 61 72 67 41 35 2c 20 23 4 d1, \argA5, #
0e80: 36 34 2d 32 30 0a 20 20 20 20 76 65 6f 72 2e 36 64-20. veor.6
0e90: 34 20 20 20 5c 61 72 67 41 34 2c 20 64 33 0a 20 4 \argA4, d3.
0ea0: 20 20 20 76 73 72 69 2e 36 34 20 20 64 32 2c 20 vsri.64 d2,
0eb0: 64 36 2c 20 23 36 34 2d 33 0a 20 20 20 20 76 62 d6, #64-3. vb
0ec0: 69 63 2e 36 34 20 20 20 5c 61 72 67 41 35 2c 20 ic.64 \argA5,
0ed0: 64 31 2c 20 64 30 0a 20 20 20 20 76 62 69 63 2e d1, d0. vbic.
0ee0: 36 34 20 20 20 64 36 2c 20 64 32 2c 20 64 31 0a 64 d6, d2, d1.
0ef0: 20 20 20 20 76 62 69 63 2e 36 34 20 20 20 5c 61 vbic.64 \a
0f00: 72 67 41 32 2c 20 64 33 2c 20 64 32 0a 20 20 20 rgA2, d3, d2.
0f10: 20 76 65 6f 72 2e 36 34 20 20 20 64 36 2c 20 64 veor.64 d6, d
0f20: 30 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 20 20 0. veor.64
0f30: 5c 61 72 67 41 32 2c 20 64 31 0a 20 20 20 20 76 \argA2, d1. v
0f40: 73 74 72 2e 36 34 20 20 20 64 36 2c 20 5b 73 70 str.64 d6, [sp
0f50: 2c 20 23 5c 61 72 67 41 31 5d 0a 20 20 20 20 76 , #\argA1]. v
0f60: 65 6f 72 2e 36 34 20 20 20 5c 61 72 67 41 33 2c eor.64 \argA3,
0f70: 20 64 32 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 d2. veor.64
0f80: 20 64 35 2c 20 64 36 0a 20 20 20 20 76 65 6f 72 d5, d6. veor
0f90: 2e 36 34 20 20 20 5c 61 72 67 41 35 2c 20 64 34 .64 \argA5, d4
0fa0: 0a 0a 20 20 20 20 2e 65 6e 64 6d 0a 0a 2e 6d 61 .. .endm...ma
0fb0: 63 72 6f 20 20 20 20 4b 65 63 63 61 6b 54 68 65 cro KeccakThe
0fc0: 74 61 52 68 6f 50 69 43 68 69 32 20 61 72 67 41 taRhoPiChi2 argA
0fd0: 31 2c 20 61 72 67 41 32 2c 20 61 72 67 41 33 2c 1, argA2, argA3,
0fe0: 20 61 72 67 41 34 2c 20 61 72 67 41 35 0a 0a 20 argA4, argA5..
0ff0: 20 20 20 40 64 34 20 3d 20 52 4f 4c 36 34 28 28 @d4 = ROL64((
1000: 61 72 67 41 31 5e 44 61 29 2c 20 31 38 29 40 0a argA1^Da), 18)@.
1010: 20 20 20 20 40 64 30 20 3d 20 52 4f 4c 36 34 28 @d0 = ROL64(
1020: 28 61 72 67 41 32 5e 44 65 29 2c 20 31 29 40 0a (argA2^De), 1)@.
1030: 20 20 20 20 40 64 31 20 3d 20 52 4f 4c 36 34 28 @d1 = ROL64(
1040: 28 61 72 67 41 33 5e 44 69 29 2c 20 36 29 40 0a (argA3^Di), 6)@.
1050: 20 20 20 20 40 64 32 20 3d 20 52 4f 4c 36 34 28 @d2 = ROL64(
1060: 28 61 72 67 41 34 5e 44 6f 29 2c 20 32 35 29 40 (argA4^Do), 25)@
1070: 0a 20 20 20 20 40 64 33 20 3d 20 52 4f 4c 36 34 . @d3 = ROL64
1080: 28 28 61 72 67 41 35 5e 44 75 29 2c 20 38 29 40 ((argA5^Du), 8)@
1090: 0a 20 20 20 20 40 61 72 67 41 31 20 3d 20 20 20 . @argA1 =
10a0: 42 61 20 5e 28 28 7e 42 65 29 26 20 20 42 69 20 Ba ^((~Be)& Bi
10b0: 29 40 20 43 61 20 5e 3d 20 61 72 67 41 31 40 0a )@ Ca ^= argA1@.
10c0: 20 20 20 20 40 61 72 67 41 32 20 3d 20 20 20 42 @argA2 = B
10d0: 65 20 5e 28 28 7e 42 69 29 26 20 20 42 6f 20 29 e ^((~Bi)& Bo )
10e0: 40 0a 20 20 20 20 40 61 72 67 41 33 20 3d 20 20 @. @argA3 =
10f0: 20 42 69 20 5e 28 28 7e 42 6f 29 26 20 20 42 75 Bi ^((~Bo)& Bu
1100: 20 29 40 0a 20 20 20 20 40 61 72 67 41 34 20 3d )@. @argA4 =
1110: 20 20 20 42 6f 20 5e 28 28 7e 42 75 29 26 20 20 Bo ^((~Bu)&
1120: 42 61 20 29 40 0a 20 20 20 20 40 61 72 67 41 35 Ba )@. @argA5
1130: 20 3d 20 20 20 42 75 20 5e 28 28 7e 42 61 29 26 = Bu ^((~Ba)&
1140: 20 20 42 65 20 29 40 0a 0a 20 20 20 20 76 65 6f Be )@.. veo
1150: 72 2e 36 34 20 5c 61 72 67 41 33 2c 20 5c 61 72 r.64 \argA3, \ar
1160: 67 41 33 2c 20 64 39 0a 20 20 20 20 76 65 6f 72 gA3, d9. veor
1170: 2e 36 34 20 5c 61 72 67 41 34 2c 20 5c 61 72 67 .64 \argA4, \arg
1180: 41 34 2c 20 64 31 30 0a 20 20 20 20 76 73 68 6c A4, d10. vshl
1190: 2e 75 36 34 20 20 64 31 2c 20 5c 61 72 67 41 33 .u64 d1, \argA3
11a0: 2c 20 23 36 0a 20 20 20 20 76 6c 64 72 2e 36 34 , #6. vldr.64
11b0: 20 64 36 2c 20 5b 73 70 2c 20 23 5c 61 72 67 41 d6, [sp, #\argA
11c0: 31 5d 0a 20 20 20 20 76 73 68 6c 2e 75 36 34 20 1]. vshl.u64
11d0: 20 64 32 2c 20 5c 61 72 67 41 34 2c 20 23 32 35 d2, \argA4, #25
11e0: 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 5c 61 72 . veor.64 \ar
11f0: 67 41 35 2c 20 5c 61 72 67 41 35 2c 20 64 31 31 gA5, \argA5, d11
1200: 0a 20 20 20 20 76 73 72 69 2e 36 34 20 20 64 31 . vsri.64 d1
1210: 2c 20 5c 61 72 67 41 33 2c 20 23 36 34 2d 36 0a , \argA3, #64-6.
1220: 20 20 20 20 76 65 6f 72 2e 36 34 20 5c 61 72 67 veor.64 \arg
1230: 41 32 2c 20 5c 61 72 67 41 32 2c 20 64 38 0a 20 A2, \argA2, d8.
1240: 20 20 20 76 73 72 69 2e 36 34 20 20 64 32 2c 20 vsri.64 d2,
1250: 5c 61 72 67 41 34 2c 20 23 36 34 2d 32 35 0a 20 \argA4, #64-25.
1260: 20 20 20 76 65 78 74 2e 38 20 20 64 33 2c 20 5c vext.8 d3, \
1270: 61 72 67 41 35 2c 20 5c 61 72 67 41 35 2c 20 23 argA5, \argA5, #
1280: 37 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 64 36 7. veor.64 d6
1290: 2c 20 64 36 2c 20 64 37 0a 20 20 20 20 76 62 69 , d6, d7. vbi
12a0: 63 2e 36 34 20 20 5c 61 72 67 41 33 2c 20 64 32 c.64 \argA3, d2
12b0: 2c 20 64 31 0a 20 20 20 20 76 61 64 64 2e 75 36 , d1. vadd.u6
12c0: 34 20 20 64 30 2c 20 5c 61 72 67 41 32 2c 20 5c 4 d0, \argA2, \
12d0: 61 72 67 41 32 0a 20 20 20 20 76 62 69 63 2e 36 argA2. vbic.6
12e0: 34 20 20 20 5c 61 72 67 41 34 2c 20 64 33 2c 20 4 \argA4, d3,
12f0: 64 32 0a 20 20 20 20 76 73 72 69 2e 36 34 20 20 d2. vsri.64
1300: 64 30 2c 20 5c 61 72 67 41 32 2c 20 23 36 34 2d d0, \argA2, #64-
1310: 31 0a 20 20 20 20 76 73 68 6c 2e 75 36 34 20 20 1. vshl.u64
1320: 64 34 2c 20 64 36 2c 20 23 31 38 0a 20 20 20 20 d4, d6, #18.
1330: 76 65 6f 72 2e 36 34 20 20 5c 61 72 67 41 32 2c veor.64 \argA2,
1340: 20 64 31 2c 20 5c 61 72 67 41 34 0a 20 20 20 20 d1, \argA4.
1350: 76 65 6f 72 2e 36 34 20 20 5c 61 72 67 41 33 2c veor.64 \argA3,
1360: 20 64 30 0a 20 20 20 20 76 73 72 69 2e 36 34 20 d0. vsri.64
1370: 20 64 34 2c 20 64 36 2c 20 23 36 34 2d 31 38 0a d4, d6, #64-18.
1380: 20 20 20 20 76 73 74 72 2e 36 34 20 20 20 5c 61 vstr.64 \a
1390: 72 67 41 33 2c 20 5b 73 70 2c 20 23 5c 61 72 67 rgA3, [sp, #\arg
13a0: 41 31 5d 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 A1]. veor.64
13b0: 20 64 35 2c 20 5c 61 72 67 41 33 0a 20 20 20 20 d5, \argA3.
13c0: 76 62 69 63 2e 36 34 20 20 20 5c 61 72 67 41 35 vbic.64 \argA5
13d0: 2c 20 64 31 2c 20 64 30 0a 20 20 20 20 76 62 69 , d1, d0. vbi
13e0: 63 2e 36 34 20 20 20 5c 61 72 67 41 33 2c 20 64 c.64 \argA3, d
13f0: 34 2c 20 64 33 0a 20 20 20 20 76 62 69 63 2e 36 4, d3. vbic.6
1400: 34 20 20 20 5c 61 72 67 41 34 2c 20 64 30 2c 20 4 \argA4, d0,
1410: 64 34 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 20 d4. veor.64
1420: 20 5c 61 72 67 41 33 2c 20 64 32 0a 20 20 20 20 \argA3, d2.
1430: 76 65 6f 72 2e 36 34 20 20 20 5c 61 72 67 41 34 veor.64 \argA4
1440: 2c 20 64 33 0a 20 20 20 20 76 65 6f 72 2e 36 34 , d3. veor.64
1450: 20 20 20 5c 61 72 67 41 35 2c 20 64 34 0a 0a 20 \argA5, d4..
1460: 20 20 20 2e 65 6e 64 6d 0a 0a 2e 6d 61 63 72 6f .endm...macro
1470: 20 20 20 20 4b 65 63 63 61 6b 54 68 65 74 61 52 KeccakThetaR
1480: 68 6f 50 69 43 68 69 33 20 61 72 67 41 31 2c 20 hoPiChi3 argA1,
1490: 61 72 67 41 32 2c 20 61 72 67 41 33 2c 20 61 72 argA2, argA3, ar
14a0: 67 41 34 2c 20 61 72 67 41 35 0a 0a 20 20 20 20 gA4, argA5..
14b0: 40 64 31 20 3d 20 52 4f 4c 36 34 28 28 61 72 67 @d1 = ROL64((arg
14c0: 41 31 5e 44 61 29 2c 20 33 36 29 40 0a 20 20 20 A1^Da), 36)@.
14d0: 20 40 64 32 20 3d 20 52 4f 4c 36 34 28 28 61 72 @d2 = ROL64((ar
14e0: 67 41 32 5e 44 65 29 2c 20 31 30 29 40 0a 20 20 gA2^De), 10)@.
14f0: 20 20 40 64 33 20 3d 20 52 4f 4c 36 34 28 28 61 @d3 = ROL64((a
1500: 72 67 41 33 5e 44 69 29 2c 20 31 35 29 40 0a 20 rgA3^Di), 15)@.
1510: 20 20 20 40 64 34 20 3d 20 52 4f 4c 36 34 28 28 @d4 = ROL64((
1520: 61 72 67 41 34 5e 44 6f 29 2c 20 35 36 29 40 0a argA4^Do), 56)@.
1530: 20 20 20 20 40 64 30 20 3d 20 52 4f 4c 36 34 28 @d0 = ROL64(
1540: 28 61 72 67 41 35 5e 44 75 29 2c 20 32 37 29 40 (argA5^Du), 27)@
1550: 0a 20 20 20 20 40 61 72 67 41 31 20 3d 20 20 20 . @argA1 =
1560: 42 61 20 5e 28 28 7e 42 65 29 26 20 20 42 69 20 Ba ^((~Be)& Bi
1570: 29 40 20 43 61 20 5e 3d 20 61 72 67 41 31 40 0a )@ Ca ^= argA1@.
1580: 20 20 20 20 40 61 72 67 41 32 20 3d 20 20 20 42 @argA2 = B
1590: 65 20 5e 28 28 7e 42 69 29 26 20 20 42 6f 20 29 e ^((~Bi)& Bo )
15a0: 40 0a 20 20 20 20 40 61 72 67 41 33 20 3d 20 20 @. @argA3 =
15b0: 20 42 69 20 5e 28 28 7e 42 6f 29 26 20 20 42 75 Bi ^((~Bo)& Bu
15c0: 20 29 40 0a 20 20 20 20 40 61 72 67 41 34 20 3d )@. @argA4 =
15d0: 20 20 20 42 6f 20 5e 28 28 7e 42 75 29 26 20 20 Bo ^((~Bu)&
15e0: 42 61 20 29 40 0a 20 20 20 20 40 61 72 67 41 35 Ba )@. @argA5
15f0: 20 3d 20 20 20 42 75 20 5e 28 28 7e 42 61 29 26 = Bu ^((~Ba)&
1600: 20 20 42 65 20 29 40 0a 0a 20 20 20 20 76 65 6f Be )@.. veo
1610: 72 2e 36 34 20 5c 61 72 67 41 32 2c 20 5c 61 72 r.64 \argA2, \ar
1620: 67 41 32 2c 20 64 38 0a 20 20 20 20 76 65 6f 72 gA2, d8. veor
1630: 2e 36 34 20 5c 61 72 67 41 33 2c 20 5c 61 72 67 .64 \argA3, \arg
1640: 41 33 2c 20 64 39 0a 20 20 20 20 76 73 68 6c 2e A3, d9. vshl.
1650: 75 36 34 20 20 64 32 2c 20 5c 61 72 67 41 32 2c u64 d2, \argA2,
1660: 20 23 31 30 0a 20 20 20 20 76 6c 64 72 2e 36 34 #10. vldr.64
1670: 20 64 36 2c 20 5b 73 70 2c 20 23 5c 61 72 67 41 d6, [sp, #\argA
1680: 31 5d 0a 20 20 20 20 76 73 68 6c 2e 75 36 34 20 1]. vshl.u64
1690: 20 64 33 2c 20 5c 61 72 67 41 33 2c 20 23 31 35 d3, \argA3, #15
16a0: 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 5c 61 72 . veor.64 \ar
16b0: 67 41 34 2c 20 5c 61 72 67 41 34 2c 20 64 31 30 gA4, \argA4, d10
16c0: 0a 20 20 20 20 76 73 72 69 2e 36 34 20 20 64 32 . vsri.64 d2
16d0: 2c 20 5c 61 72 67 41 32 2c 20 23 36 34 2d 31 30 , \argA2, #64-10
16e0: 0a 20 20 20 20 76 73 72 69 2e 36 34 20 20 64 33 . vsri.64 d3
16f0: 2c 20 5c 61 72 67 41 33 2c 20 23 36 34 2d 31 35 , \argA3, #64-15
1700: 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 5c 61 72 . veor.64 \ar
1710: 67 41 35 2c 20 5c 61 72 67 41 35 2c 20 64 31 31 gA5, \argA5, d11
1720: 0a 20 20 20 20 76 65 78 74 2e 38 20 20 64 34 2c . vext.8 d4,
1730: 20 5c 61 72 67 41 34 2c 20 5c 61 72 67 41 34 2c \argA4, \argA4,
1740: 20 23 31 0a 20 20 20 20 76 62 69 63 2e 36 34 20 #1. vbic.64
1750: 20 20 5c 61 72 67 41 32 2c 20 64 33 2c 20 64 32 \argA2, d3, d2
1760: 0a 20 20 20 20 76 73 68 6c 2e 75 36 34 20 20 64 . vshl.u64 d
1770: 30 2c 20 5c 61 72 67 41 35 2c 20 23 32 37 0a 20 0, \argA5, #27.
1780: 20 20 20 76 65 6f 72 2e 36 34 20 64 36 2c 20 64 veor.64 d6, d
1790: 36 2c 20 64 37 0a 20 20 20 20 76 62 69 63 2e 36 6, d7. vbic.6
17a0: 34 20 20 20 5c 61 72 67 41 33 2c 20 64 34 2c 20 4 \argA3, d4,
17b0: 64 33 0a 20 20 20 20 76 73 72 69 2e 36 34 20 20 d3. vsri.64
17c0: 64 30 2c 20 5c 61 72 67 41 35 2c 20 23 36 34 2d d0, \argA5, #64-
17d0: 32 37 0a 20 20 20 20 76 73 68 6c 2e 75 36 34 20 27. vshl.u64
17e0: 20 64 31 2c 20 64 36 2c 20 23 33 36 0a 20 20 20 d1, d6, #36.
17f0: 20 76 65 6f 72 2e 36 34 20 20 20 5c 61 72 67 41 veor.64 \argA
1800: 33 2c 20 64 32 0a 20 20 20 20 76 62 69 63 2e 36 3, d2. vbic.6
1810: 34 20 20 20 5c 61 72 67 41 34 2c 20 64 30 2c 20 4 \argA4, d0,
1820: 64 34 0a 20 20 20 20 76 73 72 69 2e 36 34 20 20 d4. vsri.64
1830: 64 31 2c 20 64 36 2c 20 23 36 34 2d 33 36 0a 20 d1, d6, #64-36.
1840: 20 20 20 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 . veor.64
1850: 20 20 5c 61 72 67 41 34 2c 20 64 33 0a 20 20 20 \argA4, d3.
1860: 20 76 62 69 63 2e 36 34 20 20 20 64 36 2c 20 64 vbic.64 d6, d
1870: 32 2c 20 64 31 0a 20 20 20 20 76 62 69 63 2e 36 2, d1. vbic.6
1880: 34 20 20 20 5c 61 72 67 41 35 2c 20 64 31 2c 20 4 \argA5, d1,
1890: 64 30 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 20 d0. veor.64
18a0: 20 64 36 2c 20 64 30 0a 20 20 20 20 76 65 6f 72 d6, d0. veor
18b0: 2e 36 34 20 20 20 5c 61 72 67 41 32 2c 20 64 31 .64 \argA2, d1
18c0: 0a 20 20 20 20 76 73 74 72 2e 36 34 20 20 20 64 . vstr.64 d
18d0: 36 2c 20 5b 73 70 2c 20 23 5c 61 72 67 41 31 5d 6, [sp, #\argA1]
18e0: 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 20 64 35 . veor.64 d5
18f0: 2c 20 64 36 0a 20 20 20 20 76 65 6f 72 2e 36 34 , d6. veor.64
1900: 20 20 20 5c 61 72 67 41 35 2c 20 64 34 0a 0a 20 \argA5, d4..
1910: 20 20 20 2e 65 6e 64 6d 0a 0a 2e 6d 61 63 72 6f .endm...macro
1920: 20 20 20 20 4b 65 63 63 61 6b 54 68 65 74 61 52 KeccakThetaR
1930: 68 6f 50 69 43 68 69 34 20 61 72 67 41 31 2c 20 hoPiChi4 argA1,
1940: 61 72 67 41 32 2c 20 61 72 67 41 33 2c 20 61 72 argA2, argA3, ar
1950: 67 41 34 2c 20 61 72 67 41 35 0a 0a 20 20 20 20 gA4, argA5..
1960: 40 64 33 20 3d 20 52 4f 4c 36 34 28 28 61 72 67 @d3 = ROL64((arg
1970: 41 31 5e 44 61 29 2c 20 34 31 29 40 0a 20 20 20 A1^Da), 41)@.
1980: 20 40 64 34 20 3d 20 52 4f 4c 36 34 28 28 61 72 @d4 = ROL64((ar
1990: 67 41 32 5e 44 65 29 2c 20 32 29 40 0a 20 20 20 gA2^De), 2)@.
19a0: 20 40 64 30 20 3d 20 52 4f 4c 36 34 28 28 61 72 @d0 = ROL64((ar
19b0: 67 41 33 5e 44 69 29 2c 20 36 32 29 40 0a 20 20 gA3^Di), 62)@.
19c0: 20 20 40 64 31 20 3d 20 52 4f 4c 36 34 28 28 61 @d1 = ROL64((a
19d0: 72 67 41 34 5e 44 6f 29 2c 20 35 35 29 40 0a 20 rgA4^Do), 55)@.
19e0: 20 20 20 40 64 32 20 3d 20 52 4f 4c 36 34 28 28 @d2 = ROL64((
19f0: 61 72 67 41 35 5e 44 75 29 2c 20 33 39 29 40 0a argA5^Du), 39)@.
1a00: 20 20 20 20 40 61 72 67 41 31 20 3d 20 20 20 42 @argA1 = B
1a10: 61 20 5e 28 28 7e 42 65 29 26 20 20 42 69 20 29 a ^((~Be)& Bi )
1a20: 40 20 43 61 20 5e 3d 20 61 72 67 41 31 40 0a 20 @ Ca ^= argA1@.
1a30: 20 20 20 40 61 72 67 41 32 20 3d 20 20 20 42 65 @argA2 = Be
1a40: 20 5e 28 28 7e 42 69 29 26 20 20 42 6f 20 29 40 ^((~Bi)& Bo )@
1a50: 0a 20 20 20 20 40 61 72 67 41 33 20 3d 20 20 20 . @argA3 =
1a60: 42 69 20 5e 28 28 7e 42 6f 29 26 20 20 42 75 20 Bi ^((~Bo)& Bu
1a70: 29 40 0a 20 20 20 20 40 61 72 67 41 34 20 3d 20 )@. @argA4 =
1a80: 20 20 42 6f 20 5e 28 28 7e 42 75 29 26 20 20 42 Bo ^((~Bu)& B
1a90: 61 20 29 40 0a 20 20 20 20 40 61 72 67 41 35 20 a )@. @argA5
1aa0: 3d 20 20 20 42 75 20 5e 28 28 7e 42 61 29 26 20 = Bu ^((~Ba)&
1ab0: 20 42 65 20 29 40 0a 0a 20 20 20 20 76 65 6f 72 Be )@.. veor
1ac0: 2e 36 34 20 5c 61 72 67 41 32 2c 20 5c 61 72 67 .64 \argA2, \arg
1ad0: 41 32 2c 20 64 38 0a 20 20 20 20 76 65 6f 72 2e A2, d8. veor.
1ae0: 36 34 20 5c 61 72 67 41 33 2c 20 5c 61 72 67 41 64 \argA3, \argA
1af0: 33 2c 20 64 39 0a 20 20 20 20 76 73 68 6c 2e 75 3, d9. vshl.u
1b00: 36 34 20 20 64 34 2c 20 5c 61 72 67 41 32 2c 20 64 d4, \argA2,
1b10: 23 32 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 5c #2. veor.64 \
1b20: 61 72 67 41 35 2c 20 5c 61 72 67 41 35 2c 20 64 argA5, \argA5, d
1b30: 31 31 0a 20 20 20 20 76 73 68 6c 2e 75 36 34 20 11. vshl.u64
1b40: 20 64 30 2c 20 5c 61 72 67 41 33 2c 20 23 36 32 d0, \argA3, #62
1b50: 0a 20 20 20 20 76 6c 64 72 2e 36 34 20 64 36 2c . vldr.64 d6,
1b60: 20 5b 73 70 2c 20 23 5c 61 72 67 41 31 5d 0a 20 [sp, #\argA1].
1b70: 20 20 20 76 73 72 69 2e 36 34 20 20 64 34 2c 20 vsri.64 d4,
1b80: 5c 61 72 67 41 32 2c 20 23 36 34 2d 32 0a 20 20 \argA2, #64-2.
1b90: 20 20 76 65 6f 72 2e 36 34 20 5c 61 72 67 41 34 veor.64 \argA4
1ba0: 2c 20 5c 61 72 67 41 34 2c 20 64 31 30 0a 20 20 , \argA4, d10.
1bb0: 20 20 76 73 72 69 2e 36 34 20 20 64 30 2c 20 5c vsri.64 d0, \
1bc0: 61 72 67 41 33 2c 20 23 36 34 2d 36 32 0a 0a 20 argA3, #64-62..
1bd0: 20 20 20 76 73 68 6c 2e 75 36 34 20 20 64 31 2c vshl.u64 d1,
1be0: 20 5c 61 72 67 41 34 2c 20 23 35 35 0a 20 20 20 \argA4, #55.
1bf0: 20 76 65 6f 72 2e 36 34 20 64 36 2c 20 64 36 2c veor.64 d6, d6,
1c00: 20 64 37 0a 20 20 20 20 76 73 68 6c 2e 75 36 34 d7. vshl.u64
1c10: 20 20 64 32 2c 20 5c 61 72 67 41 35 2c 20 23 33 d2, \argA5, #3
1c20: 39 0a 20 20 20 20 76 73 72 69 2e 36 34 20 20 64 9. vsri.64 d
1c30: 31 2c 20 5c 61 72 67 41 34 2c 20 23 36 34 2d 35 1, \argA4, #64-5
1c40: 35 0a 20 20 20 20 76 62 69 63 2e 36 34 20 20 5c 5. vbic.64 \
1c50: 61 72 67 41 34 2c 20 64 30 2c 20 64 34 0a 20 20 argA4, d0, d4.
1c60: 20 20 76 73 72 69 2e 36 34 20 20 64 32 2c 20 5c vsri.64 d2, \
1c70: 61 72 67 41 35 2c 20 23 36 34 2d 33 39 0a 20 20 argA5, #64-39.
1c80: 20 20 76 62 69 63 2e 36 34 20 20 5c 61 72 67 41 vbic.64 \argA
1c90: 32 2c 20 64 31 2c 20 64 30 0a 20 20 20 20 76 73 2, d1, d0. vs
1ca0: 68 6c 2e 75 36 34 20 20 64 33 2c 20 64 36 2c 20 hl.u64 d3, d6,
1cb0: 23 34 31 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 #41. veor.64
1cc0: 20 5c 61 72 67 41 35 2c 20 64 34 2c 20 5c 61 72 \argA5, d4, \ar
1cd0: 67 41 32 0a 20 20 20 20 76 62 69 63 2e 36 34 20 gA2. vbic.64
1ce0: 20 5c 61 72 67 41 32 2c 20 64 32 2c 20 64 31 0a \argA2, d2, d1.
1cf0: 20 20 20 20 76 73 72 69 2e 36 34 20 20 64 33 2c vsri.64 d3,
1d00: 20 64 36 2c 20 23 36 34 2d 34 31 0a 20 20 20 20 d6, #64-41.
1d10: 76 65 6f 72 2e 36 34 20 20 64 36 2c 20 64 30 2c veor.64 d6, d0,
1d20: 20 5c 61 72 67 41 32 0a 20 20 20 20 0a 20 20 20 \argA2. .
1d30: 20 76 62 69 63 2e 36 34 20 5c 61 72 67 41 32 2c vbic.64 \argA2,
1d40: 20 64 33 2c 20 64 32 0a 20 20 20 20 76 62 69 63 d3, d2. vbic
1d50: 2e 36 34 20 5c 61 72 67 41 33 2c 20 64 34 2c 20 .64 \argA3, d4,
1d60: 64 33 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 5c d3. veor.64 \
1d70: 61 72 67 41 32 2c 20 64 31 0a 20 20 20 20 76 73 argA2, d1. vs
1d80: 74 72 2e 36 34 20 64 36 2c 20 5b 73 70 2c 20 23 tr.64 d6, [sp, #
1d90: 5c 61 72 67 41 31 5d 0a 20 20 20 20 76 65 6f 72 \argA1]. veor
1da0: 2e 36 34 20 64 35 2c 20 64 36 0a 20 20 20 20 76 .64 d5, d6. v
1db0: 65 6f 72 2e 36 34 20 5c 61 72 67 41 33 2c 20 64 eor.64 \argA3, d
1dc0: 32 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 5c 61 2. veor.64 \a
1dd0: 72 67 41 34 2c 20 64 33 0a 0a 20 20 20 20 2e 65 rgA4, d3.. .e
1de0: 6e 64 6d 0a 0a 40 2f 2f 20 2d 2d 2d 20 63 6f 6e ndm..@// --- con
1df0: 73 74 61 6e 74 73 0a 0a 0a 20 20 2e 61 6c 69 67 stants... .alig
1e00: 6e 20 38 0a 20 20 20 20 2e 6c 74 6f 72 67 0a 4b n 8. .ltorg.K
1e10: 65 63 63 61 6b 46 31 36 30 30 52 6f 75 6e 64 43 eccakF1600RoundC
1e20: 6f 6e 73 74 61 6e 74 73 57 69 74 68 54 65 72 6d onstantsWithTerm
1e30: 69 6e 61 74 6f 72 3a 0a 20 20 20 20 2e 71 75 61 inator:. .qua
1e40: 64 20 20 30 78 30 30 30 30 30 30 30 30 30 30 30 d 0x00000000000
1e50: 30 30 30 30 31 0a 20 20 20 20 2e 71 75 61 64 20 00001. .quad
1e60: 20 30 78 30 30 30 30 30 30 30 30 30 30 30 30 38 0x0000000000008
1e70: 30 38 32 0a 20 20 20 20 2e 71 75 61 64 20 20 30 082. .quad 0
1e80: 78 38 30 30 30 30 30 30 30 30 30 30 30 38 30 38 x800000000000808
1e90: 61 0a 20 20 20 20 2e 71 75 61 64 20 20 30 78 38 a. .quad 0x8
1ea0: 30 30 30 30 30 30 30 38 30 30 30 38 30 30 30 0a 000000080008000.
1eb0: 20 20 20 20 2e 71 75 61 64 20 20 30 78 30 30 30 .quad 0x000
1ec0: 30 30 30 30 30 30 30 30 30 38 30 38 62 0a 20 20 000000000808b.
1ed0: 20 20 2e 71 75 61 64 20 20 30 78 30 30 30 30 30 .quad 0x00000
1ee0: 30 30 30 38 30 30 30 30 30 30 31 0a 20 20 20 20 00080000001.
1ef0: 2e 71 75 61 64 20 20 30 78 38 30 30 30 30 30 30 .quad 0x8000000
1f00: 30 38 30 30 30 38 30 38 31 0a 20 20 20 20 2e 71 080008081. .q
1f10: 75 61 64 20 20 30 78 38 30 30 30 30 30 30 30 30 uad 0x800000000
1f20: 30 30 30 38 30 30 39 0a 20 20 20 20 2e 71 75 61 0008009. .qua
1f30: 64 20 20 30 78 30 30 30 30 30 30 30 30 30 30 30 d 0x00000000000
1f40: 30 30 30 38 61 0a 20 20 20 20 2e 71 75 61 64 20 0008a. .quad
1f50: 20 30 78 30 30 30 30 30 30 30 30 30 30 30 30 30 0x0000000000000
1f60: 30 38 38 0a 20 20 20 20 2e 71 75 61 64 20 20 30 088. .quad 0
1f70: 78 30 30 30 30 30 30 30 30 38 30 30 30 38 30 30 x000000008000800
1f80: 39 0a 20 20 20 20 2e 71 75 61 64 20 20 30 78 30 9. .quad 0x0
1f90: 30 30 30 30 30 30 30 38 30 30 30 30 30 30 61 0a 00000008000000a.
1fa0: 20 20 20 20 2e 71 75 61 64 20 20 30 78 30 30 30 .quad 0x000
1fb0: 30 30 30 30 30 38 30 30 30 38 30 38 62 0a 20 20 000008000808b.
1fc0: 20 20 2e 71 75 61 64 20 20 30 78 38 30 30 30 30 .quad 0x80000
1fd0: 30 30 30 30 30 30 30 30 30 38 62 0a 20 20 20 20 0000000008b.
1fe0: 2e 71 75 61 64 20 20 30 78 38 30 30 30 30 30 30 .quad 0x8000000
1ff0: 30 30 30 30 30 38 30 38 39 0a 20 20 20 20 2e 71 000008089. .q
2000: 75 61 64 20 20 30 78 38 30 30 30 30 30 30 30 30 uad 0x800000000
2010: 30 30 30 38 30 30 33 0a 20 20 20 20 2e 71 75 61 0008003. .qua
2020: 64 20 20 30 78 38 30 30 30 30 30 30 30 30 30 30 d 0x80000000000
2030: 30 38 30 30 32 0a 20 20 20 20 2e 71 75 61 64 20 08002. .quad
2040: 20 30 78 38 30 30 30 30 30 30 30 30 30 30 30 30 0x8000000000000
2050: 30 38 30 0a 20 20 20 20 2e 71 75 61 64 20 20 30 080. .quad 0
2060: 78 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 x000000000000800
2070: 61 0a 20 20 20 20 2e 71 75 61 64 20 20 30 78 38 a. .quad 0x8
2080: 30 30 30 30 30 30 30 38 30 30 30 30 30 30 61 0a 00000008000000a.
2090: 20 20 20 20 2e 71 75 61 64 20 20 30 78 38 30 30 .quad 0x800
20a0: 30 30 30 30 30 38 30 30 30 38 30 38 31 0a 20 20 0000080008081.
20b0: 20 20 2e 71 75 61 64 20 20 30 78 38 30 30 30 30 .quad 0x80000
20c0: 30 30 30 30 30 30 30 38 30 38 30 0a 20 20 20 20 00000008080.
20d0: 2e 71 75 61 64 20 20 30 78 30 30 30 30 30 30 30 .quad 0x0000000
20e0: 30 38 30 30 30 30 30 30 31 0a 20 20 20 20 2e 71 080000001. .q
20f0: 75 61 64 20 20 30 78 38 30 30 30 30 30 30 30 38 uad 0x800000008
2100: 30 30 30 38 30 30 38 0a 20 20 20 20 2e 71 75 61 0008008. .qua
2110: 64 20 20 20 30 78 46 46 46 46 46 46 46 46 46 46 d 0xFFFFFFFFFF
2120: 46 46 46 46 46 46 20 20 40 2f 2f 74 65 72 6d 69 FFFFFF @//termi
2130: 6e 61 74 6f 72 0a 0a 20 20 2e 61 6c 69 67 6e 20 nator.. .align
2140: 38 0a 0a 40 2f 2f 20 2d 2d 2d 20 63 6f 64 65 20 8..@// --- code
2150: 0a 0a 40 6e 6f 74 20 63 61 6c 6c 61 62 6c 65 20 ..@not callable
2160: 66 72 6f 6d 20 43 21 0a 2e 67 6c 6f 62 61 6c 20 from C!..global
2170: 20 20 4b 65 63 63 61 6b 46 5f 61 72 6d 76 37 61 KeccakF_armv7a
2180: 5f 6e 65 6f 6e 5f 61 73 6d 0a 4b 65 63 63 61 6b _neon_asm.Keccak
2190: 46 5f 61 72 6d 76 37 61 5f 6e 65 6f 6e 5f 61 73 F_armv7a_neon_as
21a0: 6d 3a 20 20 40 0a 0a 20 20 20 20 20 20 61 64 72 m: @.. adr
21b0: 20 20 72 33 2c 20 4b 65 63 63 61 6b 46 31 36 30 r3, KeccakF160
21c0: 30 52 6f 75 6e 64 43 6f 6e 73 74 61 6e 74 73 57 0RoundConstantsW
21d0: 69 74 68 54 65 72 6d 69 6e 61 74 6f 72 0a 72 6f ithTerminator.ro
21e0: 75 6e 64 4c 6f 6f 70 3a 0a 0a 20 20 20 20 4b 65 undLoop:.. Ke
21f0: 63 63 61 6b 54 68 65 74 61 52 68 6f 50 69 43 68 ccakThetaRhoPiCh
2200: 69 49 6f 74 61 20 20 41 62 61 2c 20 64 31 33 2c iIota Aba, d13,
2210: 20 64 31 39 2c 20 64 32 35 2c 20 64 33 31 0a 20 d19, d25, d31.
2220: 20 20 20 4b 65 63 63 61 6b 54 68 65 74 61 52 68 KeccakThetaRh
2230: 6f 50 69 43 68 69 31 20 20 20 20 41 6b 61 2c 20 oPiChi1 Aka,
2240: 64 31 35 2c 20 64 32 31 2c 20 64 32 32 2c 20 64 d15, d21, d22, d
2250: 32 38 0a 20 20 20 20 4b 65 63 63 61 6b 54 68 65 28. KeccakThe
2260: 74 61 52 68 6f 50 69 43 68 69 32 20 20 20 20 41 taRhoPiChi2 A
2270: 73 61 2c 20 64 31 32 2c 20 64 31 38 2c 20 64 32 sa, d12, d18, d2
2280: 34 2c 20 64 33 30 0a 20 20 20 20 4b 65 63 63 61 4, d30. Kecca
2290: 6b 54 68 65 74 61 52 68 6f 50 69 43 68 69 33 20 kThetaRhoPiChi3
22a0: 20 20 20 41 67 61 2c 20 64 31 34 2c 20 64 32 30 Aga, d14, d20
22b0: 2c 20 64 32 36 2c 20 64 32 37 0a 20 20 20 20 4b , d26, d27. K
22c0: 65 63 63 61 6b 54 68 65 74 61 52 68 6f 50 69 43 eccakThetaRhoPiC
22d0: 68 69 34 20 20 20 20 41 6d 61 2c 20 64 31 36 2c hi4 Ama, d16,
22e0: 20 64 31 37 2c 20 64 32 33 2c 20 64 32 39 0a 0a d17, d23, d29..
22f0: 20 20 20 20 4b 65 63 63 61 6b 54 68 65 74 61 52 KeccakThetaR
2300: 68 6f 50 69 43 68 69 49 6f 74 61 20 20 41 62 61 hoPiChiIota Aba
2310: 2c 20 64 31 35 2c 20 64 31 38 2c 20 64 32 36 2c , d15, d18, d26,
2320: 20 64 32 39 0a 20 20 20 20 4b 65 63 63 61 6b 54 d29. KeccakT
2330: 68 65 74 61 52 68 6f 50 69 43 68 69 31 20 20 20 hetaRhoPiChi1
2340: 20 41 73 61 2c 20 64 31 34 2c 20 64 31 37 2c 20 Asa, d14, d17,
2350: 64 32 35 2c 20 64 32 38 0a 20 20 20 20 4b 65 63 d25, d28. Kec
2360: 63 61 6b 54 68 65 74 61 52 68 6f 50 69 43 68 69 cakThetaRhoPiChi
2370: 32 20 20 20 20 41 6d 61 2c 20 64 31 33 2c 20 64 2 Ama, d13, d
2380: 32 31 2c 20 64 32 34 2c 20 64 32 37 0a 20 20 20 21, d24, d27.
2390: 20 4b 65 63 63 61 6b 54 68 65 74 61 52 68 6f 50 KeccakThetaRhoP
23a0: 69 43 68 69 33 20 20 20 20 41 6b 61 2c 20 64 31 iChi3 Aka, d1
23b0: 32 2c 20 64 32 30 2c 20 64 32 33 2c 20 64 33 31 2, d20, d23, d31
23c0: 0a 20 20 20 20 4b 65 63 63 61 6b 54 68 65 74 61 . KeccakTheta
23d0: 52 68 6f 50 69 43 68 69 34 20 20 20 20 41 67 61 RhoPiChi4 Aga
23e0: 2c 20 64 31 36 2c 20 64 31 39 2c 20 64 32 32 2c , d16, d19, d22,
23f0: 20 64 33 30 0a 0a 20 20 20 20 4b 65 63 63 61 6b d30.. Keccak
2400: 54 68 65 74 61 52 68 6f 50 69 43 68 69 49 6f 74 ThetaRhoPiChiIot
2410: 61 20 41 62 61 2c 20 64 31 34 2c 20 64 32 31 2c a Aba, d14, d21,
2420: 20 64 32 33 2c 20 64 33 30 0a 20 20 20 20 4b 65 d23, d30. Ke
2430: 63 63 61 6b 54 68 65 74 61 52 68 6f 50 69 43 68 ccakThetaRhoPiCh
2440: 69 31 20 20 20 20 41 6d 61 2c 20 64 31 32 2c 20 i1 Ama, d12,
2450: 64 31 39 2c 20 64 32 36 2c 20 64 32 38 0a 20 20 d19, d26, d28.
2460: 20 20 4b 65 63 63 61 6b 54 68 65 74 61 52 68 6f KeccakThetaRho
2470: 50 69 43 68 69 32 20 20 20 20 41 67 61 2c 20 64 PiChi2 Aga, d
2480: 31 35 2c 20 64 31 37 2c 20 64 32 34 2c 20 64 33 15, d17, d24, d3
2490: 31 0a 20 20 20 20 4b 65 63 63 61 6b 54 68 65 74 1. KeccakThet
24a0: 61 52 68 6f 50 69 43 68 69 33 20 20 20 20 41 73 aRhoPiChi3 As
24b0: 61 2c 20 64 31 33 2c 20 64 32 30 2c 20 64 32 32 a, d13, d20, d22
24c0: 2c 20 64 32 39 0a 20 20 20 20 4b 65 63 63 61 6b , d29. Keccak
24d0: 54 68 65 74 61 52 68 6f 50 69 43 68 69 34 20 20 ThetaRhoPiChi4
24e0: 20 20 41 6b 61 2c 20 64 31 36 2c 20 64 31 38 2c Aka, d16, d18,
24f0: 20 64 32 35 2c 20 64 32 37 0a 0a 20 20 20 20 4b d25, d27.. K
2500: 65 63 63 61 6b 54 68 65 74 61 52 68 6f 50 69 43 eccakThetaRhoPiC
2510: 68 69 49 6f 74 61 20 41 62 61 2c 20 64 31 32 2c hiIota Aba, d12,
2520: 20 64 31 37 2c 20 64 32 32 2c 20 64 32 37 0a 20 d17, d22, d27.
2530: 20 20 20 4b 65 63 63 61 6b 54 68 65 74 61 52 68 KeccakThetaRh
2540: 6f 50 69 43 68 69 31 20 20 20 20 41 67 61 2c 20 oPiChi1 Aga,
2550: 64 31 33 2c 20 64 31 38 2c 20 64 32 33 2c 20 64 d13, d18, d23, d
2560: 32 38 0a 20 20 20 20 4b 65 63 63 61 6b 54 68 65 28. KeccakThe
2570: 74 61 52 68 6f 50 69 43 68 69 32 20 20 20 20 41 taRhoPiChi2 A
2580: 6b 61 2c 20 64 31 34 2c 20 64 31 39 2c 20 64 32 ka, d14, d19, d2
2590: 34 2c 20 64 32 39 0a 20 20 20 20 6c 64 72 20 20 4, d29. ldr
25a0: 20 20 72 30 2c 20 5b 72 33 5d 0a 20 20 20 20 4b r0, [r3]. K
25b0: 65 63 63 61 6b 54 68 65 74 61 52 68 6f 50 69 43 eccakThetaRhoPiC
25c0: 68 69 33 20 20 20 20 41 6d 61 2c 20 64 31 35 2c hi3 Ama, d15,
25d0: 20 64 32 30 2c 20 64 32 35 2c 20 64 33 30 0a 20 d20, d25, d30.
25e0: 20 20 20 63 6d 70 20 20 20 20 72 30 2c 20 23 30 cmp r0, #0
25f0: 78 46 46 46 46 46 46 46 46 0a 20 20 20 20 4b 65 xFFFFFFFF. Ke
2600: 63 63 61 6b 54 68 65 74 61 52 68 6f 50 69 43 68 ccakThetaRhoPiCh
2610: 69 34 20 20 20 20 41 73 61 2c 20 64 31 36 2c 20 i4 Asa, d16,
2620: 64 32 31 2c 20 64 32 36 2c 20 64 33 31 0a 0a 20 d21, d26, d31..
2630: 20 20 20 62 6e 65 20 20 20 20 72 6f 75 6e 64 4c bne roundL
2640: 6f 6f 70 0a 20 20 20 20 62 78 20 20 20 20 6c 72 oop. bx lr
2650: 0a 0a 20 20 40 0a 20 20 2e 61 6c 69 67 6e 20 38 .. @. .align 8
2660: 0a 0a 40 2f 2f 76 6f 69 64 20 4b 65 63 63 61 6b ..@//void Keccak
2670: 46 5f 61 72 6d 76 37 61 28 20 74 4b 65 63 63 61 F_armv7a( tKecca
2680: 6b 4c 61 6e 65 20 2a 20 73 74 61 74 65 2c 20 69 kLane * state, i
2690: 6e 74 20 72 6f 75 6e 64 20 29 20 20 63 61 6c 6c nt round ) call
26a0: 61 62 6c 65 20 66 72 6f 6d 20 43 0a 2e 67 6c 6f able from C..glo
26b0: 62 61 6c 20 20 20 4b 65 63 63 61 6b 46 5f 61 72 bal KeccakF_ar
26c0: 6d 76 37 61 5f 6e 65 6f 6e 0a 4b 65 63 63 61 6b mv7a_neon.Keccak
26d0: 46 5f 61 72 6d 76 37 61 5f 6e 65 6f 6e 3a 20 20 F_armv7a_neon:
26e0: 40 0a 0a 20 20 20 20 76 70 75 73 68 20 20 7b 71 @.. vpush {q
26f0: 34 2d 71 37 7d 0a 20 20 20 20 73 75 62 20 20 20 4-q7}. sub
2700: 20 73 70 2c 73 70 2c 20 23 35 2a 38 0a 0a 20 20 sp,sp, #5*8..
2710: 20 20 76 6c 64 72 2e 36 34 20 20 64 30 2c 20 20 vldr.64 d0,
2720: 5b 72 30 2c 20 23 30 2a 38 5d 0a 20 20 20 20 76 [r0, #0*8]. v
2730: 6c 64 72 2e 36 34 20 20 64 31 32 2c 20 5b 72 30 ldr.64 d12, [r0
2740: 2c 20 23 31 2a 38 5d 0a 20 20 20 20 76 6c 64 72 , #1*8]. vldr
2750: 2e 36 34 20 20 64 31 37 2c 20 5b 72 30 2c 20 23 .64 d17, [r0, #
2760: 32 2a 38 5d 0a 20 20 20 20 76 6c 64 72 2e 36 34 2*8]. vldr.64
2770: 20 20 64 32 32 2c 20 5b 72 30 2c 20 23 33 2a 38 d22, [r0, #3*8
2780: 5d 0a 20 20 20 20 76 6c 64 72 2e 36 34 20 20 64 ]. vldr.64 d
2790: 32 37 2c 20 5b 72 30 2c 20 23 34 2a 38 5d 0a 0a 27, [r0, #4*8]..
27a0: 20 20 20 20 76 6c 64 72 2e 36 34 20 20 64 31 2c vldr.64 d1,
27b0: 20 20 5b 72 30 2c 20 23 35 2a 38 5d 0a 20 20 20 [r0, #5*8].
27c0: 20 76 6c 64 72 2e 36 34 20 20 64 31 33 2c 20 5b vldr.64 d13, [
27d0: 72 30 2c 20 23 36 2a 38 5d 0a 20 20 20 20 76 6c r0, #6*8]. vl
27e0: 64 72 2e 36 34 20 20 64 31 38 2c 20 5b 72 30 2c dr.64 d18, [r0,
27f0: 20 23 37 2a 38 5d 0a 20 20 20 20 76 6c 64 72 2e #7*8]. vldr.
2800: 36 34 20 20 64 32 33 2c 20 5b 72 30 2c 20 23 38 64 d23, [r0, #8
2810: 2a 38 5d 0a 20 20 20 20 76 6c 64 72 2e 36 34 20 *8]. vldr.64
2820: 20 64 32 38 2c 20 5b 72 30 2c 20 23 39 2a 38 5d d28, [r0, #9*8]
2830: 0a 0a 20 20 20 20 76 6c 64 72 2e 36 34 20 20 64 .. vldr.64 d
2840: 32 2c 20 20 5b 72 30 2c 20 23 31 30 2a 38 5d 0a 2, [r0, #10*8].
2850: 20 20 20 20 76 6c 64 72 2e 36 34 20 20 64 31 34 vldr.64 d14
2860: 2c 20 5b 72 30 2c 20 23 31 31 2a 38 5d 0a 20 20 , [r0, #11*8].
2870: 20 20 76 6c 64 72 2e 36 34 20 20 64 31 39 2c 20 vldr.64 d19,
2880: 5b 72 30 2c 20 23 31 32 2a 38 5d 0a 20 20 20 20 [r0, #12*8].
2890: 76 6c 64 72 2e 36 34 20 20 64 32 34 2c 20 5b 72 vldr.64 d24, [r
28a0: 30 2c 20 23 31 33 2a 38 5d 0a 20 20 20 20 76 6c 0, #13*8]. vl
28b0: 64 72 2e 36 34 20 20 64 32 39 2c 20 5b 72 30 2c dr.64 d29, [r0,
28c0: 20 23 31 34 2a 38 5d 0a 0a 20 20 20 20 76 6c 64 #14*8].. vld
28d0: 72 2e 36 34 20 20 64 33 2c 20 20 5b 72 30 2c 20 r.64 d3, [r0,
28e0: 23 31 35 2a 38 5d 0a 20 20 20 20 76 6c 64 72 2e #15*8]. vldr.
28f0: 36 34 20 20 64 31 35 2c 20 5b 72 30 2c 20 23 31 64 d15, [r0, #1
2900: 36 2a 38 5d 0a 20 20 20 20 76 6c 64 72 2e 36 34 6*8]. vldr.64
2910: 20 20 64 32 30 2c 20 5b 72 30 2c 20 23 31 37 2a d20, [r0, #17*
2920: 38 5d 0a 20 20 20 20 76 6c 64 72 2e 36 34 20 20 8]. vldr.64
2930: 64 32 35 2c 20 5b 72 30 2c 20 23 31 38 2a 38 5d d25, [r0, #18*8]
2940: 0a 20 20 20 20 76 6c 64 72 2e 36 34 20 20 64 33 . vldr.64 d3
2950: 30 2c 20 5b 72 30 2c 20 23 31 39 2a 38 5d 0a 0a 0, [r0, #19*8]..
2960: 20 20 20 20 76 6c 64 72 2e 36 34 20 20 64 34 2c vldr.64 d4,
2970: 20 20 5b 72 30 2c 20 23 32 30 2a 38 5d 0a 20 20 [r0, #20*8].
2980: 20 20 76 6c 64 72 2e 36 34 20 20 64 31 36 2c 20 vldr.64 d16,
2990: 5b 72 30 2c 20 23 32 31 2a 38 5d 0a 20 20 20 20 [r0, #21*8].
29a0: 76 6c 64 72 2e 36 34 20 20 64 32 31 2c 20 5b 72 vldr.64 d21, [r
29b0: 30 2c 20 23 32 32 2a 38 5d 0a 20 20 20 20 76 6c 0, #22*8]. vl
29c0: 64 72 2e 36 34 20 20 64 32 36 2c 20 5b 72 30 2c dr.64 d26, [r0,
29d0: 20 23 32 33 2a 38 5d 0a 20 20 20 20 76 6c 64 72 #23*8]. vldr
29e0: 2e 36 34 20 20 64 33 31 2c 20 5b 72 30 2c 20 23 .64 d31, [r0, #
29f0: 32 34 2a 38 5d 0a 0a 20 20 20 20 76 73 74 72 2e 24*8].. vstr.
2a00: 36 34 20 20 64 30 2c 20 5b 73 70 2c 20 23 41 62 64 d0, [sp, #Ab
2a10: 61 5d 0a 20 20 20 20 6d 6f 76 20 20 20 20 20 20 a]. mov
2a20: 72 32 2c 20 6c 72 0a 20 20 20 20 76 73 74 72 2e r2, lr. vstr.
2a30: 36 34 20 20 64 31 2c 20 5b 73 70 2c 20 23 41 67 64 d1, [sp, #Ag
2a40: 61 5d 0a 20 20 20 20 76 65 6f 72 2e 36 34 20 71 a]. veor.64 q
2a50: 30 2c 20 71 30 2c 20 71 31 0a 20 20 20 20 76 73 0, q0, q1. vs
2a60: 74 72 2e 36 34 20 20 64 32 2c 20 5b 73 70 2c 20 tr.64 d2, [sp,
2a70: 23 41 6b 61 5d 0a 20 20 20 20 76 65 6f 72 2e 36 #Aka]. veor.6
2a80: 34 20 64 35 2c 20 64 30 2c 20 20 64 31 0a 20 20 4 d5, d0, d1.
2a90: 20 20 76 73 74 72 2e 36 34 20 20 64 33 2c 20 5b vstr.64 d3, [
2aa0: 73 70 2c 20 23 41 6d 61 5d 0a 20 20 20 20 6d 6f sp, #Ama]. mo
2ab0: 76 20 20 20 20 20 20 72 31 2c 20 72 30 0a 20 20 v r1, r0.
2ac0: 20 20 76 73 74 72 2e 36 34 20 20 64 34 2c 20 5b vstr.64 d4, [
2ad0: 73 70 2c 20 23 41 73 61 5d 0a 20 20 20 20 76 65 sp, #Asa]. ve
2ae0: 6f 72 2e 36 34 20 64 35 2c 20 64 35 2c 20 20 64 or.64 d5, d5, d
2af0: 34 0a 0a 20 20 20 20 62 6c 20 20 20 20 20 20 4b 4.. bl K
2b00: 65 63 63 61 6b 46 5f 61 72 6d 76 37 61 5f 6e 65 eccakF_armv7a_ne
2b10: 6f 6e 5f 61 73 6d 0a 0a 20 20 20 20 76 70 6f 70 on_asm.. vpop
2b20: 2e 36 34 20 20 7b 20 64 30 2d 20 64 34 20 7d 0a .64 { d0- d4 }.
2b30: 0a 20 20 20 20 76 73 74 72 2e 36 34 20 20 64 30 . vstr.64 d0
2b40: 2c 20 20 5b 72 31 2c 20 23 30 2a 38 5d 0a 20 20 , [r1, #0*8].
2b50: 20 20 76 73 74 72 2e 36 34 20 20 64 31 32 2c 20 vstr.64 d12,
2b60: 5b 72 31 2c 20 23 31 2a 38 5d 0a 20 20 20 20 76 [r1, #1*8]. v
2b70: 73 74 72 2e 36 34 20 20 64 31 37 2c 20 5b 72 31 str.64 d17, [r1
2b80: 2c 20 23 32 2a 38 5d 0a 20 20 20 20 76 73 74 72 , #2*8]. vstr
2b90: 2e 36 34 20 20 64 32 32 2c 20 5b 72 31 2c 20 23 .64 d22, [r1, #
2ba0: 33 2a 38 5d 0a 20 20 20 20 76 73 74 72 2e 36 34 3*8]. vstr.64
2bb0: 20 20 64 32 37 2c 20 5b 72 31 2c 20 23 34 2a 38 d27, [r1, #4*8
2bc0: 5d 0a 0a 20 20 20 20 76 73 74 72 2e 36 34 20 20 ].. vstr.64
2bd0: 64 31 2c 20 20 5b 72 31 2c 20 23 35 2a 38 5d 0a d1, [r1, #5*8].
2be0: 20 20 20 20 76 73 74 72 2e 36 34 20 20 64 31 33 vstr.64 d13
2bf0: 2c 20 5b 72 31 2c 20 23 36 2a 38 5d 0a 20 20 20 , [r1, #6*8].
2c00: 20 76 73 74 72 2e 36 34 20 20 64 31 38 2c 20 5b vstr.64 d18, [
2c10: 72 31 2c 20 23 37 2a 38 5d 0a 20 20 20 20 76 73 r1, #7*8]. vs
2c20: 74 72 2e 36 34 20 20 64 32 33 2c 20 5b 72 31 2c tr.64 d23, [r1,
2c30: 20 23 38 2a 38 5d 0a 20 20 20 20 76 73 74 72 2e #8*8]. vstr.
2c40: 36 34 20 20 64 32 38 2c 20 5b 72 31 2c 20 23 39 64 d28, [r1, #9
2c50: 2a 38 5d 0a 0a 20 20 20 20 76 73 74 72 2e 36 34 *8].. vstr.64
2c60: 20 20 64 32 2c 20 20 5b 72 31 2c 20 23 31 30 2a d2, [r1, #10*
2c70: 38 5d 0a 20 20 20 20 76 73 74 72 2e 36 34 20 20 8]. vstr.64
2c80: 64 31 34 2c 20 5b 72 31 2c 20 23 31 31 2a 38 5d d14, [r1, #11*8]
2c90: 0a 20 20 20 20 76 73 74 72 2e 36 34 20 20 64 31 . vstr.64 d1
2ca0: 39 2c 20 5b 72 31 2c 20 23 31 32 2a 38 5d 0a 20 9, [r1, #12*8].
2cb0: 20 20 20 76 73 74 72 2e 36 34 20 20 64 32 34 2c vstr.64 d24,
2cc0: 20 5b 72 31 2c 20 23 31 33 2a 38 5d 0a 20 20 20 [r1, #13*8].
2cd0: 20 76 73 74 72 2e 36 34 20 20 64 32 39 2c 20 5b vstr.64 d29, [
2ce0: 72 31 2c 20 23 31 34 2a 38 5d 0a 0a 20 20 20 20 r1, #14*8]..
2cf0: 76 73 74 72 2e 36 34 20 20 64 33 2c 20 20 5b 72 vstr.64 d3, [r
2d00: 31 2c 20 23 31 35 2a 38 5d 0a 20 20 20 20 76 73 1, #15*8]. vs
2d10: 74 72 2e 36 34 20 20 64 31 35 2c 20 5b 72 31 2c tr.64 d15, [r1,
2d20: 20 23 31 36 2a 38 5d 0a 20 20 20 20 76 73 74 72 #16*8]. vstr
2d30: 2e 36 34 20 20 64 32 30 2c 20 5b 72 31 2c 20 23 .64 d20, [r1, #
2d40: 31 37 2a 38 5d 0a 20 20 20 20 76 73 74 72 2e 36 17*8]. vstr.6
2d50: 34 20 20 64 32 35 2c 20 5b 72 31 2c 20 23 31 38 4 d25, [r1, #18
2d60: 2a 38 5d 0a 20 20 20 20 76 73 74 72 2e 36 34 20 *8]. vstr.64
2d70: 20 64 33 30 2c 20 5b 72 31 2c 20 23 31 39 2a 38 d30, [r1, #19*8
2d80: 5d 0a 0a 20 20 20 20 76 73 74 72 2e 36 34 20 20 ].. vstr.64
2d90: 64 34 2c 20 20 5b 72 31 2c 20 23 32 30 2a 38 5d d4, [r1, #20*8]
2da0: 0a 20 20 20 20 76 73 74 72 2e 36 34 20 20 64 31 . vstr.64 d1
2db0: 36 2c 20 5b 72 31 2c 20 23 32 31 2a 38 5d 0a 20 6, [r1, #21*8].
2dc0: 20 20 20 76 73 74 72 2e 36 34 20 20 64 32 31 2c vstr.64 d21,
2dd0: 20 5b 72 31 2c 20 23 32 32 2a 38 5d 0a 20 20 20 [r1, #22*8].
2de0: 20 76 73 74 72 2e 36 34 20 20 64 32 36 2c 20 5b vstr.64 d26, [
2df0: 72 31 2c 20 23 32 33 2a 38 5d 0a 20 20 20 20 76 r1, #23*8]. v
2e00: 73 74 72 2e 36 34 20 20 64 33 31 2c 20 5b 72 31 str.64 d31, [r1
2e10: 2c 20 23 32 34 2a 38 5d 0a 0a 20 20 20 20 76 70 , #24*8].. vp
2e20: 6f 70 20 20 7b 71 34 2d 71 37 7d 0a 20 20 20 20 op {q4-q7}.
2e30: 62 78 20 20 20 20 72 32 0a 0a 20 20 40 0a 0a bx r2.. @..