65816-crypto/aes.macros
Stephen Heumann 75aac0daa9 Save a couple values on the stack rather than looking them up again.
This is cycle-neutral (assuming a page-aligned DP), but it reduces instruction bytes and therefore may give a speedup on accelerators with caches.
2017-06-26 21:13:25 -05:00

127 lines
1.6 KiB
Plaintext

macro
AddInitialRoundKey
lcla &i
.top
lda state1+&i
eor rk+&i
sta state1+&i
&i seta &i+2
aif &i<16,.top
mend
macro
NormalRound &round
aif &round/2*2=&round,.evenround
MixColumn 0,0,5,10,15,state1,state2
MixColumn 4,4,9,14,3,state1,state2
MixColumn 8,8,13,2,7,state1,state2
MixColumn 12,12,1,6,11,state1,state2
ago .done
.evenround
MixColumn 0,0,5,10,15,state2,state1
MixColumn 4,4,9,14,3,state2,state1
MixColumn 8,8,13,2,7,state2,state1
MixColumn 12,12,1,6,11,state2,state1
.done
mend
macro
MixColumn &i,&A,&B,&C,&D,&state,&out
ldy &state+&D
lda Sbox,Y
pha
ldx &state+&A
eor Xtime2Sbox,X
ldy &state+&B
eor Xtime3Sbox,Y
ldy &state+&C
eor Sbox,Y
eor rk+&round*16+&i
sta &out+&i
pla
eor Xtime3Sbox,Y
eor Sbox,X
ldy &state+&B
eor Xtime2Sbox,Y
eor rk+&round*16+&i+1
sta &out+&i+1
lda Sbox,Y
pha
ldy &state+&D
eor Xtime3Sbox,Y
eor Sbox,X
ldy &state+&C
eor Xtime2Sbox,Y
eor rk+&round*16+&i+2
sta &out+&i+2
pla
eor Sbox,Y
eor Xtime3Sbox,X
ldy &state+&D
eor Xtime2Sbox,Y
eor rk+&round*16+&i+3
sta &out+&i+3
mend
macro
FinalRound &round
FinalRoundStep 0,0
FinalRoundStep 4,4
FinalRoundStep 8,8
FinalRoundStep 12,12
FinalRoundStep 13,1
FinalRoundStep 1,5
FinalRoundStep 5,9
FinalRoundStep 9,13
FinalRoundStep 10,2
FinalRoundStep 2,10
FinalRoundStep 14,6
FinalRoundStep 6,14
FinalRoundStep 3,15
FinalRoundStep 15,11
FinalRoundStep 11,7
FinalRoundStep 7,3
mend
macro
FinalRoundStep &to,&from
ldy state2+&from
lda Sbox,Y
eor rk+&round*16+&to
sta state1+&to
mend
macro
ShortRegs
sep #$30
longa off
longi off
mend
macro
LongRegs
rep #$30
longa on
longi on
mend