[keccak-asm] removing rotate64 from asm build
This commit is contained in:
parent
e7925dc3d2
commit
ddc66bc054
|
@ -40,6 +40,156 @@ rho_pi_idx_table:
|
|||
.endr
|
||||
|
||||
.align 2
|
||||
|
||||
.global rotate64_1bit_left
|
||||
rotate64_1bit_left:
|
||||
bst r25, 7
|
||||
rol r18
|
||||
rol r19
|
||||
rol r20
|
||||
rol r21
|
||||
rol r22
|
||||
rol r23
|
||||
rol r24
|
||||
rol r25
|
||||
bld r18, 0
|
||||
ret
|
||||
|
||||
.global rotate64_1bit_right
|
||||
rotate64_1bit_right:
|
||||
bst r18, 0
|
||||
ror r25
|
||||
ror r24
|
||||
ror r23
|
||||
ror r22
|
||||
ror r21
|
||||
ror r20
|
||||
ror r19
|
||||
ror r18
|
||||
bld r25, 7
|
||||
ret
|
||||
|
||||
.global rotate64_nbit_autodir
|
||||
rotate64_nbit_autodir:
|
||||
lsr r16
|
||||
brcc rotate64_nbit_left
|
||||
.global rotate64_nbit_right
|
||||
rotate64_nbit_right:
|
||||
ldi r30, pm_lo8(rotate64_1bit_right)
|
||||
ldi r31, pm_hi8(rotate64_1bit_right)
|
||||
rjmp icall_r16_times
|
||||
.global rotate64_nbit_left
|
||||
rotate64_nbit_left:
|
||||
ldi r30, pm_lo8(rotate64_1bit_left)
|
||||
ldi r31, pm_hi8(rotate64_1bit_left)
|
||||
icall_r16_times:
|
||||
1: dec r16
|
||||
brmi 2f
|
||||
icall
|
||||
rjmp 1b
|
||||
2:
|
||||
ret
|
||||
|
||||
rotate64_1byte_left:
|
||||
mov r0, r25
|
||||
mov r25, r24
|
||||
mov r24, r23
|
||||
mov r23, r22
|
||||
mov r22, r21
|
||||
mov r21, r20
|
||||
mov r20, r19
|
||||
mov r19, r18
|
||||
mov r18, r0
|
||||
ret
|
||||
|
||||
rotate64_2byte_left:
|
||||
movw r0, r24
|
||||
movw r24, r22
|
||||
movw r22, r20
|
||||
movw r20, r18
|
||||
movw r18, r0
|
||||
ret
|
||||
|
||||
rotate64_3byte_left:
|
||||
mov r0, r25
|
||||
mov r25, r22
|
||||
mov r22, r19
|
||||
mov r19, r24
|
||||
mov r24, r21
|
||||
mov r21, r18
|
||||
mov r18, r23
|
||||
mov r23, r20
|
||||
mov r20, r0
|
||||
ret
|
||||
|
||||
rotate64_4byte_left:
|
||||
movw r0, r24
|
||||
movw r24, r20
|
||||
movw r20, r0
|
||||
movw r0, r22
|
||||
movw r22, r18
|
||||
movw r18, r0
|
||||
ret
|
||||
|
||||
rotate64_5byte_left:
|
||||
mov r0, r25
|
||||
mov r25, r20
|
||||
mov r20, r23
|
||||
mov r23, r18
|
||||
mov r18, r21
|
||||
mov r21, r24
|
||||
mov r24, r19
|
||||
mov r19, r22
|
||||
mov r22, r0
|
||||
ret
|
||||
|
||||
rotate64_6byte_left:
|
||||
movw r0, r18
|
||||
movw r18, r20
|
||||
movw r20, r22
|
||||
movw r22, r24
|
||||
movw r24, r0
|
||||
ret
|
||||
|
||||
rotate64_7byte_left:
|
||||
mov r0, r18
|
||||
mov r18, r19
|
||||
mov r19, r20
|
||||
mov r20, r21
|
||||
mov r21, r22
|
||||
mov r22, r23
|
||||
mov r23, r24
|
||||
mov r24, r25
|
||||
mov r25, r0
|
||||
ret
|
||||
|
||||
|
||||
byte_rot_jmp_table:
|
||||
ret
|
||||
rjmp rotate64_1byte_left
|
||||
rjmp rotate64_2byte_left
|
||||
rjmp rotate64_3byte_left
|
||||
rjmp rotate64_4byte_left
|
||||
rjmp rotate64_5byte_left
|
||||
rjmp rotate64_6byte_left
|
||||
rjmp rotate64_7byte_left
|
||||
|
||||
.global rotate64left_code
|
||||
rotate64left_code:
|
||||
ldi r30, pm_lo8(byte_rot_jmp_table)
|
||||
ldi r31, pm_hi8(byte_rot_jmp_table)
|
||||
mov r0, r16
|
||||
andi r16, 0x70
|
||||
swap r16
|
||||
add r30, r16
|
||||
adc r31, r1
|
||||
mov r16, r0
|
||||
andi r16, 0x0f
|
||||
icall
|
||||
clr r1
|
||||
rjmp rotate64_nbit_autodir
|
||||
|
||||
|
||||
/*
|
||||
void keccak_theta (uint64_t *a, uint64_t *b){
|
||||
// uint64_t b[5][5];
|
||||
|
@ -309,7 +459,7 @@ keccak_f1600:
|
|||
movw ZL, r2
|
||||
lpm r16, Z+
|
||||
movw r2, ZL
|
||||
call rotate64left_code
|
||||
rcall rotate64left_code
|
||||
movw ZL, r4
|
||||
lpm r16, Z+
|
||||
movw r4, ZL
|
||||
|
|
|
@ -62,22 +62,6 @@ void keccak_dump_ctx(keccak_ctx_t* ctx){
|
|||
|
||||
#endif
|
||||
|
||||
/*
|
||||
const uint64_t rc[] PROGMEM = {
|
||||
0x0000000000000001LL, 0x0000000000008082LL,
|
||||
0x800000000000808ALL, 0x8000000080008000LL,
|
||||
0x000000000000808BLL, 0x0000000080000001LL,
|
||||
0x8000000080008081LL, 0x8000000000008009LL,
|
||||
0x000000000000008ALL, 0x0000000000000088LL,
|
||||
0x0000000080008009LL, 0x000000008000000ALL,
|
||||
0x000000008000808BLL, 0x800000000000008BLL,
|
||||
0x8000000000008089LL, 0x8000000000008003LL,
|
||||
0x8000000000008002LL, 0x8000000000000080LL,
|
||||
0x000000000000800ALL, 0x800000008000000ALL,
|
||||
0x8000000080008081LL, 0x8000000000008080LL,
|
||||
0x0000000080000001LL, 0x8000000080008008LL
|
||||
};
|
||||
*/
|
||||
|
||||
const uint8_t keccak_rc_comp[] PROGMEM = {
|
||||
0x01, 0x92, 0xda, 0x70,
|
||||
|
@ -87,15 +71,7 @@ const uint8_t keccak_rc_comp[] PROGMEM = {
|
|||
0x52, 0xc0, 0x1a, 0x6a,
|
||||
0xf1, 0xd0, 0x21, 0x78,
|
||||
};
|
||||
/*
|
||||
const uint8_t keccak_rotate_codes[5][5] PROGMEM = {
|
||||
{ ROT_CODE( 0), ROT_CODE(36), ROT_CODE( 3), ROT_CODE(41), ROT_CODE(18) },
|
||||
{ ROT_CODE( 1), ROT_CODE(44), ROT_CODE(10), ROT_CODE(45), ROT_CODE( 2) },
|
||||
{ ROT_CODE(62), ROT_CODE( 6), ROT_CODE(43), ROT_CODE(15), ROT_CODE(61) },
|
||||
{ ROT_CODE(28), ROT_CODE(55), ROT_CODE(25), ROT_CODE(21), ROT_CODE(56) },
|
||||
{ ROT_CODE(27), ROT_CODE(20), ROT_CODE(39), ROT_CODE( 8), ROT_CODE(14) }
|
||||
};
|
||||
*/
|
||||
|
||||
const uint8_t keccak_rotate_codes[5][5] PROGMEM = {
|
||||
{ ROT_CODE( 0), ROT_CODE( 1), ROT_CODE(62), ROT_CODE(28), ROT_CODE(27) },
|
||||
{ ROT_CODE(36), ROT_CODE(44), ROT_CODE( 6), ROT_CODE(55), ROT_CODE(20) },
|
||||
|
|
|
@ -6,7 +6,7 @@ HASHES += $(ALGO_NAME)
|
|||
|
||||
$(ALGO_NAME)_DIR := keccak/
|
||||
$(ALGO_NAME)_INCDIR := memxor/ hfal/
|
||||
$(ALGO_NAME)_OBJ := keccak-stub.o keccak-asm.o memxor.o rotate64.o
|
||||
$(ALGO_NAME)_OBJ := keccak-stub.o keccak-asm.o memxor.o
|
||||
$(ALGO_NAME)_TESTBIN := main-keccak-test.o hfal_keccak.o $(CLI_STD) $(HFAL_STD)
|
||||
$(ALGO_NAME)_NESSIE_TEST := test nessie
|
||||
$(ALGO_NAME)_PERFORMANCE_TEST := performance
|
||||
|
|
Loading…
Reference in New Issue