Hex Artifact Content
Not logged in

Artifact ec77462465c6df3e8e93530d8911abffa9aa9585:


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..  @..