2017-06-27 06:36:56 +00:00
|
|
|
* This makes a function wrapper that is callable from C,
|
|
|
|
* taking a pointer to the state structure as its argument.
|
|
|
|
macro
|
|
|
|
CFunction &fn
|
|
|
|
phb
|
|
|
|
plx
|
|
|
|
ply
|
|
|
|
tdc
|
|
|
|
pld
|
|
|
|
plb
|
|
|
|
plb
|
|
|
|
phy
|
|
|
|
phx
|
|
|
|
plb
|
|
|
|
pha
|
|
|
|
jsl &fn
|
|
|
|
pld
|
|
|
|
rtl
|
|
|
|
mend
|
|
|
|
|
|
|
|
|
|
|
|
macro
|
|
|
|
ExpandKeyCore &xorback,&rconoffset
|
|
|
|
|
|
|
|
ShortRegs
|
|
|
|
|
|
|
|
ldy rk-3,x
|
|
|
|
lda Sbox,y
|
|
|
|
eor Rcon-&xorback+&rconoffset,x
|
|
|
|
eor rk-&xorback,x
|
|
|
|
sta rk,x
|
|
|
|
|
|
|
|
ldy rk-2,x
|
|
|
|
lda Sbox,y
|
|
|
|
eor rk+1-&xorback,x
|
|
|
|
sta rk+1,x
|
|
|
|
|
|
|
|
ldy rk-1,x
|
|
|
|
lda Sbox,y
|
|
|
|
eor rk+2-&xorback,x
|
|
|
|
sta rk+2,x
|
|
|
|
|
|
|
|
ldy rk-4,x
|
|
|
|
lda Sbox,y
|
|
|
|
eor rk+3-&xorback,x
|
|
|
|
sta rk+3,x
|
|
|
|
|
|
|
|
LongRegs
|
|
|
|
|
|
|
|
mend
|
|
|
|
|
|
|
|
* Secondary substitution step used when expanding AES-256 keys
|
|
|
|
macro
|
|
|
|
ExpandKeySubst &xorback,&rconoffset
|
|
|
|
|
|
|
|
ShortRegs
|
|
|
|
|
|
|
|
ldy rk-4,x
|
|
|
|
lda Sbox,y
|
|
|
|
eor rk-&xorback,x
|
|
|
|
sta rk,x
|
|
|
|
|
|
|
|
ldy rk+1-4,x
|
|
|
|
lda Sbox,y
|
|
|
|
eor rk+1-&xorback,x
|
|
|
|
sta rk+1,x
|
|
|
|
|
|
|
|
ldy rk+2-4,x
|
|
|
|
lda Sbox,y
|
|
|
|
eor rk+2-&xorback,x
|
|
|
|
sta rk+2,x
|
|
|
|
|
|
|
|
ldy rk+3-4,x
|
|
|
|
lda Sbox,y
|
|
|
|
eor rk+3-&xorback,x
|
|
|
|
sta rk+3,x
|
|
|
|
|
|
|
|
LongRegs
|
|
|
|
|
|
|
|
mend
|
|
|
|
|
|
|
|
|
|
|
|
macro
|
|
|
|
ExpandKeyIter &xorback,&nwords
|
|
|
|
lcla &i
|
|
|
|
lda rk,x
|
|
|
|
.loop1
|
|
|
|
eor rk+&i+4-&xorback,x
|
|
|
|
sta rk+&i+4,x
|
|
|
|
&i seta &i+4
|
|
|
|
aif &i/4<&nwords,.loop1
|
|
|
|
|
|
|
|
&i seta 2
|
|
|
|
lda rk+2,x
|
|
|
|
.loop2
|
|
|
|
eor rk+&i+4-&xorback,x
|
|
|
|
sta rk+&i+4,x
|
|
|
|
&i seta &i+4
|
|
|
|
aif &i/4<&nwords,.loop2
|
|
|
|
mend
|
|
|
|
|
|
|
|
|
2017-06-27 01:41:44 +00:00
|
|
|
macro
|
|
|
|
AddInitialRoundKey
|
|
|
|
lcla &i
|
|
|
|
.top
|
|
|
|
lda state1+&i
|
|
|
|
eor rk+&i
|
|
|
|
sta state1+&i
|
|
|
|
&i seta &i+2
|
|
|
|
aif &i<16,.top
|
|
|
|
mend
|
|
|
|
|
|
|
|
|
|
|
|
macro
|
2017-06-27 06:36:56 +00:00
|
|
|
&lbl NormalRound &round
|
|
|
|
&lbl anop
|
2017-06-27 01:41:44 +00:00
|
|
|
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
|
2017-06-27 02:11:19 +00:00
|
|
|
|
2017-06-27 02:49:16 +00:00
|
|
|
aif (&i=0).AND.(&round<>1),.skip
|
2017-06-27 02:11:19 +00:00
|
|
|
ldy &state+&D
|
2017-06-27 02:49:16 +00:00
|
|
|
.skip
|
2017-06-27 02:11:19 +00:00
|
|
|
lda Sbox,Y
|
|
|
|
pha
|
2017-06-27 01:53:17 +00:00
|
|
|
ldx &state+&A
|
2017-06-27 02:11:19 +00:00
|
|
|
eor Xtime2Sbox,X
|
2017-06-27 01:41:44 +00:00
|
|
|
ldy &state+&B
|
|
|
|
eor Xtime3Sbox,Y
|
2017-06-27 01:53:17 +00:00
|
|
|
ldy &state+&C
|
|
|
|
eor Sbox,Y
|
2017-06-27 01:41:44 +00:00
|
|
|
eor rk+&round*16+&i
|
|
|
|
sta &out+&i
|
2017-06-27 01:53:17 +00:00
|
|
|
|
2017-06-27 02:11:19 +00:00
|
|
|
pla
|
|
|
|
eor Xtime3Sbox,Y
|
2017-06-27 01:53:17 +00:00
|
|
|
eor Sbox,X
|
2017-06-27 01:41:44 +00:00
|
|
|
ldy &state+&B
|
|
|
|
eor Xtime2Sbox,Y
|
|
|
|
eor rk+&round*16+&i+1
|
|
|
|
sta &out+&i+1
|
2017-06-27 01:53:17 +00:00
|
|
|
|
2017-06-27 02:11:19 +00:00
|
|
|
lda Sbox,Y
|
|
|
|
pha
|
|
|
|
ldy &state+&D
|
|
|
|
eor Xtime3Sbox,Y
|
2017-06-27 01:53:17 +00:00
|
|
|
eor Sbox,X
|
2017-06-27 01:41:44 +00:00
|
|
|
ldy &state+&C
|
|
|
|
eor Xtime2Sbox,Y
|
|
|
|
eor rk+&round*16+&i+2
|
|
|
|
sta &out+&i+2
|
2017-06-27 01:53:17 +00:00
|
|
|
|
2017-06-27 02:11:19 +00:00
|
|
|
pla
|
2017-06-27 01:41:44 +00:00
|
|
|
eor Sbox,Y
|
2017-06-27 02:11:19 +00:00
|
|
|
eor Xtime3Sbox,X
|
2017-06-27 01:41:44 +00:00
|
|
|
ldy &state+&D
|
|
|
|
eor Xtime2Sbox,Y
|
2017-06-27 06:36:56 +00:00
|
|
|
aif (rk+&round*16+&i+3)>255,.bigindex
|
2017-06-27 01:41:44 +00:00
|
|
|
eor rk+&round*16+&i+3
|
2017-06-27 06:36:56 +00:00
|
|
|
ago .cont
|
|
|
|
.bigindex
|
|
|
|
ldx #&round*16+&i+3
|
|
|
|
eor rk,X
|
|
|
|
.cont
|
2017-06-27 01:41:44 +00:00
|
|
|
sta &out+&i+3
|
2017-06-27 02:49:16 +00:00
|
|
|
aif &i<>12,.skip2
|
|
|
|
tay
|
|
|
|
.skip2
|
2017-06-27 01:41:44 +00:00
|
|
|
mend
|
|
|
|
|
|
|
|
|
|
|
|
macro
|
|
|
|
FinalRound &round
|
2017-06-27 02:49:16 +00:00
|
|
|
|
|
|
|
FinalRoundStep 3,15,1
|
|
|
|
FinalRoundStep 15,11
|
|
|
|
FinalRoundStep 11,7
|
|
|
|
FinalRoundStep 7,3
|
|
|
|
|
2017-06-27 01:41:44 +00:00
|
|
|
FinalRoundStep 0,0
|
|
|
|
FinalRoundStep 4,4
|
|
|
|
FinalRoundStep 8,8
|
|
|
|
FinalRoundStep 12,12
|
2017-06-27 02:49:16 +00:00
|
|
|
|
2017-06-27 01:41:44 +00:00
|
|
|
FinalRoundStep 13,1
|
|
|
|
FinalRoundStep 1,5
|
|
|
|
FinalRoundStep 5,9
|
|
|
|
FinalRoundStep 9,13
|
2017-06-27 02:49:16 +00:00
|
|
|
|
2017-06-27 01:41:44 +00:00
|
|
|
FinalRoundStep 10,2
|
|
|
|
FinalRoundStep 2,10
|
|
|
|
FinalRoundStep 14,6
|
|
|
|
FinalRoundStep 6,14
|
|
|
|
|
|
|
|
mend
|
|
|
|
|
|
|
|
|
|
|
|
macro
|
2017-06-27 02:49:16 +00:00
|
|
|
FinalRoundStep &to,&from,&skipldy
|
2017-06-27 01:41:44 +00:00
|
|
|
|
2017-06-27 02:49:16 +00:00
|
|
|
aif C:&skipldy,.skip
|
2017-06-27 01:41:44 +00:00
|
|
|
ldy state2+&from
|
2017-06-27 02:49:16 +00:00
|
|
|
.skip
|
2017-06-27 01:41:44 +00:00
|
|
|
lda Sbox,Y
|
2017-06-27 06:36:56 +00:00
|
|
|
aif (rk+&round*16+&to)>255,.bigindex
|
2017-06-27 01:41:44 +00:00
|
|
|
eor rk+&round*16+&to
|
2017-06-27 06:36:56 +00:00
|
|
|
ago .cont
|
|
|
|
.bigindex
|
|
|
|
ldx #&round*16+&to
|
|
|
|
eor rk,X
|
|
|
|
.cont
|
2017-06-27 01:41:44 +00:00
|
|
|
sta state1+&to
|
|
|
|
|
|
|
|
mend
|
|
|
|
|
|
|
|
|
|
|
|
macro
|
|
|
|
ShortRegs
|
|
|
|
sep #$30
|
|
|
|
longa off
|
|
|
|
longi off
|
|
|
|
mend
|
|
|
|
|
|
|
|
|
|
|
|
macro
|
|
|
|
LongRegs
|
|
|
|
rep #$30
|
|
|
|
longa on
|
|
|
|
longi on
|
|
|
|
mend
|
|
|
|
|