mirror of
https://github.com/Luzifer/cloudkeys-go.git
synced 2024-11-13 08:22:43 +00:00
Knut Ahlers
a1df72edc5
commitf0db1ff1f8
Author: Knut Ahlers <knut@ahlers.me> Date: Sun Dec 24 12:19:56 2017 +0100 Mark option as deprecated Signed-off-by: Knut Ahlers <knut@ahlers.me> commit9891df2a16
Author: Knut Ahlers <knut@ahlers.me> Date: Sun Dec 24 12:11:56 2017 +0100 Fix: Typo Signed-off-by: Knut Ahlers <knut@ahlers.me> commit836006de64
Author: Knut Ahlers <knut@ahlers.me> Date: Sun Dec 24 12:04:20 2017 +0100 Add new dependencies Signed-off-by: Knut Ahlers <knut@ahlers.me> commitd64fee60c8
Author: Knut Ahlers <knut@ahlers.me> Date: Sun Dec 24 11:55:52 2017 +0100 Replace insecure password hashing Prior this commit passwords were hashed with a static salt and using the SHA1 hashing function. This could lead to passwords being attackable in case someone gets access to the raw data stored inside the database. This commit introduces password hashing using bcrypt hashing function which addresses this issue. Old passwords are not automatically re-hashed as they are unknown. Replacing the old password scheme is not that easy and needs #10 to be solved. Therefore the old hashing scheme is kept for compatibility reason. Signed-off-by: Knut Ahlers <knut@ahlers.me> Signed-off-by: Knut Ahlers <knut@ahlers.me> closes #14 closes #15
390 lines
14 KiB
ArmAsm
390 lines
14 KiB
ArmAsm
// Copyright 2015 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build amd64,!appengine,!gccgo
|
|
|
|
// This code was translated into a form compatible with 6a from the public
|
|
// domain sources at https://github.com/gvanas/KeccakCodePackage
|
|
|
|
// Offsets in state
|
|
#define _ba (0*8)
|
|
#define _be (1*8)
|
|
#define _bi (2*8)
|
|
#define _bo (3*8)
|
|
#define _bu (4*8)
|
|
#define _ga (5*8)
|
|
#define _ge (6*8)
|
|
#define _gi (7*8)
|
|
#define _go (8*8)
|
|
#define _gu (9*8)
|
|
#define _ka (10*8)
|
|
#define _ke (11*8)
|
|
#define _ki (12*8)
|
|
#define _ko (13*8)
|
|
#define _ku (14*8)
|
|
#define _ma (15*8)
|
|
#define _me (16*8)
|
|
#define _mi (17*8)
|
|
#define _mo (18*8)
|
|
#define _mu (19*8)
|
|
#define _sa (20*8)
|
|
#define _se (21*8)
|
|
#define _si (22*8)
|
|
#define _so (23*8)
|
|
#define _su (24*8)
|
|
|
|
// Temporary registers
|
|
#define rT1 AX
|
|
|
|
// Round vars
|
|
#define rpState DI
|
|
#define rpStack SP
|
|
|
|
#define rDa BX
|
|
#define rDe CX
|
|
#define rDi DX
|
|
#define rDo R8
|
|
#define rDu R9
|
|
|
|
#define rBa R10
|
|
#define rBe R11
|
|
#define rBi R12
|
|
#define rBo R13
|
|
#define rBu R14
|
|
|
|
#define rCa SI
|
|
#define rCe BP
|
|
#define rCi rBi
|
|
#define rCo rBo
|
|
#define rCu R15
|
|
|
|
#define MOVQ_RBI_RCE MOVQ rBi, rCe
|
|
#define XORQ_RT1_RCA XORQ rT1, rCa
|
|
#define XORQ_RT1_RCE XORQ rT1, rCe
|
|
#define XORQ_RBA_RCU XORQ rBa, rCu
|
|
#define XORQ_RBE_RCU XORQ rBe, rCu
|
|
#define XORQ_RDU_RCU XORQ rDu, rCu
|
|
#define XORQ_RDA_RCA XORQ rDa, rCa
|
|
#define XORQ_RDE_RCE XORQ rDe, rCe
|
|
|
|
#define mKeccakRound(iState, oState, rc, B_RBI_RCE, G_RT1_RCA, G_RT1_RCE, G_RBA_RCU, K_RT1_RCA, K_RT1_RCE, K_RBA_RCU, M_RT1_RCA, M_RT1_RCE, M_RBE_RCU, S_RDU_RCU, S_RDA_RCA, S_RDE_RCE) \
|
|
/* Prepare round */ \
|
|
MOVQ rCe, rDa; \
|
|
ROLQ $1, rDa; \
|
|
\
|
|
MOVQ _bi(iState), rCi; \
|
|
XORQ _gi(iState), rDi; \
|
|
XORQ rCu, rDa; \
|
|
XORQ _ki(iState), rCi; \
|
|
XORQ _mi(iState), rDi; \
|
|
XORQ rDi, rCi; \
|
|
\
|
|
MOVQ rCi, rDe; \
|
|
ROLQ $1, rDe; \
|
|
\
|
|
MOVQ _bo(iState), rCo; \
|
|
XORQ _go(iState), rDo; \
|
|
XORQ rCa, rDe; \
|
|
XORQ _ko(iState), rCo; \
|
|
XORQ _mo(iState), rDo; \
|
|
XORQ rDo, rCo; \
|
|
\
|
|
MOVQ rCo, rDi; \
|
|
ROLQ $1, rDi; \
|
|
\
|
|
MOVQ rCu, rDo; \
|
|
XORQ rCe, rDi; \
|
|
ROLQ $1, rDo; \
|
|
\
|
|
MOVQ rCa, rDu; \
|
|
XORQ rCi, rDo; \
|
|
ROLQ $1, rDu; \
|
|
\
|
|
/* Result b */ \
|
|
MOVQ _ba(iState), rBa; \
|
|
MOVQ _ge(iState), rBe; \
|
|
XORQ rCo, rDu; \
|
|
MOVQ _ki(iState), rBi; \
|
|
MOVQ _mo(iState), rBo; \
|
|
MOVQ _su(iState), rBu; \
|
|
XORQ rDe, rBe; \
|
|
ROLQ $44, rBe; \
|
|
XORQ rDi, rBi; \
|
|
XORQ rDa, rBa; \
|
|
ROLQ $43, rBi; \
|
|
\
|
|
MOVQ rBe, rCa; \
|
|
MOVQ rc, rT1; \
|
|
ORQ rBi, rCa; \
|
|
XORQ rBa, rT1; \
|
|
XORQ rT1, rCa; \
|
|
MOVQ rCa, _ba(oState); \
|
|
\
|
|
XORQ rDu, rBu; \
|
|
ROLQ $14, rBu; \
|
|
MOVQ rBa, rCu; \
|
|
ANDQ rBe, rCu; \
|
|
XORQ rBu, rCu; \
|
|
MOVQ rCu, _bu(oState); \
|
|
\
|
|
XORQ rDo, rBo; \
|
|
ROLQ $21, rBo; \
|
|
MOVQ rBo, rT1; \
|
|
ANDQ rBu, rT1; \
|
|
XORQ rBi, rT1; \
|
|
MOVQ rT1, _bi(oState); \
|
|
\
|
|
NOTQ rBi; \
|
|
ORQ rBa, rBu; \
|
|
ORQ rBo, rBi; \
|
|
XORQ rBo, rBu; \
|
|
XORQ rBe, rBi; \
|
|
MOVQ rBu, _bo(oState); \
|
|
MOVQ rBi, _be(oState); \
|
|
B_RBI_RCE; \
|
|
\
|
|
/* Result g */ \
|
|
MOVQ _gu(iState), rBe; \
|
|
XORQ rDu, rBe; \
|
|
MOVQ _ka(iState), rBi; \
|
|
ROLQ $20, rBe; \
|
|
XORQ rDa, rBi; \
|
|
ROLQ $3, rBi; \
|
|
MOVQ _bo(iState), rBa; \
|
|
MOVQ rBe, rT1; \
|
|
ORQ rBi, rT1; \
|
|
XORQ rDo, rBa; \
|
|
MOVQ _me(iState), rBo; \
|
|
MOVQ _si(iState), rBu; \
|
|
ROLQ $28, rBa; \
|
|
XORQ rBa, rT1; \
|
|
MOVQ rT1, _ga(oState); \
|
|
G_RT1_RCA; \
|
|
\
|
|
XORQ rDe, rBo; \
|
|
ROLQ $45, rBo; \
|
|
MOVQ rBi, rT1; \
|
|
ANDQ rBo, rT1; \
|
|
XORQ rBe, rT1; \
|
|
MOVQ rT1, _ge(oState); \
|
|
G_RT1_RCE; \
|
|
\
|
|
XORQ rDi, rBu; \
|
|
ROLQ $61, rBu; \
|
|
MOVQ rBu, rT1; \
|
|
ORQ rBa, rT1; \
|
|
XORQ rBo, rT1; \
|
|
MOVQ rT1, _go(oState); \
|
|
\
|
|
ANDQ rBe, rBa; \
|
|
XORQ rBu, rBa; \
|
|
MOVQ rBa, _gu(oState); \
|
|
NOTQ rBu; \
|
|
G_RBA_RCU; \
|
|
\
|
|
ORQ rBu, rBo; \
|
|
XORQ rBi, rBo; \
|
|
MOVQ rBo, _gi(oState); \
|
|
\
|
|
/* Result k */ \
|
|
MOVQ _be(iState), rBa; \
|
|
MOVQ _gi(iState), rBe; \
|
|
MOVQ _ko(iState), rBi; \
|
|
MOVQ _mu(iState), rBo; \
|
|
MOVQ _sa(iState), rBu; \
|
|
XORQ rDi, rBe; \
|
|
ROLQ $6, rBe; \
|
|
XORQ rDo, rBi; \
|
|
ROLQ $25, rBi; \
|
|
MOVQ rBe, rT1; \
|
|
ORQ rBi, rT1; \
|
|
XORQ rDe, rBa; \
|
|
ROLQ $1, rBa; \
|
|
XORQ rBa, rT1; \
|
|
MOVQ rT1, _ka(oState); \
|
|
K_RT1_RCA; \
|
|
\
|
|
XORQ rDu, rBo; \
|
|
ROLQ $8, rBo; \
|
|
MOVQ rBi, rT1; \
|
|
ANDQ rBo, rT1; \
|
|
XORQ rBe, rT1; \
|
|
MOVQ rT1, _ke(oState); \
|
|
K_RT1_RCE; \
|
|
\
|
|
XORQ rDa, rBu; \
|
|
ROLQ $18, rBu; \
|
|
NOTQ rBo; \
|
|
MOVQ rBo, rT1; \
|
|
ANDQ rBu, rT1; \
|
|
XORQ rBi, rT1; \
|
|
MOVQ rT1, _ki(oState); \
|
|
\
|
|
MOVQ rBu, rT1; \
|
|
ORQ rBa, rT1; \
|
|
XORQ rBo, rT1; \
|
|
MOVQ rT1, _ko(oState); \
|
|
\
|
|
ANDQ rBe, rBa; \
|
|
XORQ rBu, rBa; \
|
|
MOVQ rBa, _ku(oState); \
|
|
K_RBA_RCU; \
|
|
\
|
|
/* Result m */ \
|
|
MOVQ _ga(iState), rBe; \
|
|
XORQ rDa, rBe; \
|
|
MOVQ _ke(iState), rBi; \
|
|
ROLQ $36, rBe; \
|
|
XORQ rDe, rBi; \
|
|
MOVQ _bu(iState), rBa; \
|
|
ROLQ $10, rBi; \
|
|
MOVQ rBe, rT1; \
|
|
MOVQ _mi(iState), rBo; \
|
|
ANDQ rBi, rT1; \
|
|
XORQ rDu, rBa; \
|
|
MOVQ _so(iState), rBu; \
|
|
ROLQ $27, rBa; \
|
|
XORQ rBa, rT1; \
|
|
MOVQ rT1, _ma(oState); \
|
|
M_RT1_RCA; \
|
|
\
|
|
XORQ rDi, rBo; \
|
|
ROLQ $15, rBo; \
|
|
MOVQ rBi, rT1; \
|
|
ORQ rBo, rT1; \
|
|
XORQ rBe, rT1; \
|
|
MOVQ rT1, _me(oState); \
|
|
M_RT1_RCE; \
|
|
\
|
|
XORQ rDo, rBu; \
|
|
ROLQ $56, rBu; \
|
|
NOTQ rBo; \
|
|
MOVQ rBo, rT1; \
|
|
ORQ rBu, rT1; \
|
|
XORQ rBi, rT1; \
|
|
MOVQ rT1, _mi(oState); \
|
|
\
|
|
ORQ rBa, rBe; \
|
|
XORQ rBu, rBe; \
|
|
MOVQ rBe, _mu(oState); \
|
|
\
|
|
ANDQ rBa, rBu; \
|
|
XORQ rBo, rBu; \
|
|
MOVQ rBu, _mo(oState); \
|
|
M_RBE_RCU; \
|
|
\
|
|
/* Result s */ \
|
|
MOVQ _bi(iState), rBa; \
|
|
MOVQ _go(iState), rBe; \
|
|
MOVQ _ku(iState), rBi; \
|
|
XORQ rDi, rBa; \
|
|
MOVQ _ma(iState), rBo; \
|
|
ROLQ $62, rBa; \
|
|
XORQ rDo, rBe; \
|
|
MOVQ _se(iState), rBu; \
|
|
ROLQ $55, rBe; \
|
|
\
|
|
XORQ rDu, rBi; \
|
|
MOVQ rBa, rDu; \
|
|
XORQ rDe, rBu; \
|
|
ROLQ $2, rBu; \
|
|
ANDQ rBe, rDu; \
|
|
XORQ rBu, rDu; \
|
|
MOVQ rDu, _su(oState); \
|
|
\
|
|
ROLQ $39, rBi; \
|
|
S_RDU_RCU; \
|
|
NOTQ rBe; \
|
|
XORQ rDa, rBo; \
|
|
MOVQ rBe, rDa; \
|
|
ANDQ rBi, rDa; \
|
|
XORQ rBa, rDa; \
|
|
MOVQ rDa, _sa(oState); \
|
|
S_RDA_RCA; \
|
|
\
|
|
ROLQ $41, rBo; \
|
|
MOVQ rBi, rDe; \
|
|
ORQ rBo, rDe; \
|
|
XORQ rBe, rDe; \
|
|
MOVQ rDe, _se(oState); \
|
|
S_RDE_RCE; \
|
|
\
|
|
MOVQ rBo, rDi; \
|
|
MOVQ rBu, rDo; \
|
|
ANDQ rBu, rDi; \
|
|
ORQ rBa, rDo; \
|
|
XORQ rBi, rDi; \
|
|
XORQ rBo, rDo; \
|
|
MOVQ rDi, _si(oState); \
|
|
MOVQ rDo, _so(oState) \
|
|
|
|
// func keccakF1600(state *[25]uint64)
|
|
TEXT ·keccakF1600(SB), 0, $200-8
|
|
MOVQ state+0(FP), rpState
|
|
|
|
// Convert the user state into an internal state
|
|
NOTQ _be(rpState)
|
|
NOTQ _bi(rpState)
|
|
NOTQ _go(rpState)
|
|
NOTQ _ki(rpState)
|
|
NOTQ _mi(rpState)
|
|
NOTQ _sa(rpState)
|
|
|
|
// Execute the KeccakF permutation
|
|
MOVQ _ba(rpState), rCa
|
|
MOVQ _be(rpState), rCe
|
|
MOVQ _bu(rpState), rCu
|
|
|
|
XORQ _ga(rpState), rCa
|
|
XORQ _ge(rpState), rCe
|
|
XORQ _gu(rpState), rCu
|
|
|
|
XORQ _ka(rpState), rCa
|
|
XORQ _ke(rpState), rCe
|
|
XORQ _ku(rpState), rCu
|
|
|
|
XORQ _ma(rpState), rCa
|
|
XORQ _me(rpState), rCe
|
|
XORQ _mu(rpState), rCu
|
|
|
|
XORQ _sa(rpState), rCa
|
|
XORQ _se(rpState), rCe
|
|
MOVQ _si(rpState), rDi
|
|
MOVQ _so(rpState), rDo
|
|
XORQ _su(rpState), rCu
|
|
|
|
mKeccakRound(rpState, rpStack, $0x0000000000000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x0000000000008082, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x800000000000808a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x8000000080008000, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x000000000000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x8000000000008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x000000000000008a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x0000000000000088, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x0000000080008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x000000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x000000008000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x800000000000008b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x8000000000008089, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x8000000000008003, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x8000000000008002, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x8000000000000080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x000000000000800a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x800000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x8000000000008080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpState, rpStack, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE)
|
|
mKeccakRound(rpStack, rpState, $0x8000000080008008, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP)
|
|
|
|
// Revert the internal state to the user state
|
|
NOTQ _be(rpState)
|
|
NOTQ _bi(rpState)
|
|
NOTQ _go(rpState)
|
|
NOTQ _ki(rpState)
|
|
NOTQ _mi(rpState)
|
|
NOTQ _sa(rpState)
|
|
|
|
RET
|