mirror of
https://github.com/sheumann/65816-crypto.git
synced 2024-11-22 07:31:58 +00:00
Add basic decryption implementation for AES-128 and AES-192.
This commit is contained in:
parent
9d9f62444d
commit
0e3e511ba8
33
aes.asm
33
aes.asm
@ -335,3 +335,36 @@ finish_aes128 anop
|
||||
LongRegs
|
||||
rtl
|
||||
end
|
||||
|
||||
|
||||
aes128_decrypt start
|
||||
CFunction AES128_DECRYPT
|
||||
end
|
||||
|
||||
aes192_decrypt start
|
||||
CFunction AES192_DECRYPT
|
||||
end
|
||||
|
||||
AES192_DECRYPT start
|
||||
using tables
|
||||
|
||||
InvFinalRound 12
|
||||
InvNormalRound 11
|
||||
InvNormalRound 10
|
||||
jmp cont
|
||||
|
||||
AES128_DECRYPT entry
|
||||
InvFinalRound 10
|
||||
cont anop
|
||||
InvNormalRound 9
|
||||
InvNormalRound 8
|
||||
InvNormalRound 7
|
||||
InvNormalRound 6
|
||||
InvNormalRound 5
|
||||
InvNormalRound 4
|
||||
InvNormalRound 3
|
||||
InvNormalRound 2
|
||||
InvNormalRound 1
|
||||
InvNormalRound 0
|
||||
rtl
|
||||
end
|
||||
|
3
aes.h
3
aes.h
@ -11,3 +11,6 @@ void aes_expandkey192(struct aes_state *state);
|
||||
void aes_expandkey256(struct aes_state *state);
|
||||
|
||||
void aes_encrypt(struct aes_state *state);
|
||||
|
||||
void aes128_decrypt(struct aes_state *state);
|
||||
void aes192_decrypt(struct aes_state *state);
|
||||
|
126
aes.macros
126
aes.macros
@ -229,6 +229,132 @@
|
||||
mend
|
||||
|
||||
|
||||
macro
|
||||
InvNormalRound &round,&state
|
||||
lcla &i
|
||||
lclc &state
|
||||
lclc &out
|
||||
|
||||
aif &round/2*2=&round,.evenround
|
||||
&state setc state2
|
||||
&out setc state1
|
||||
ago .cont
|
||||
.evenround
|
||||
&state setc state1
|
||||
&out setc state2
|
||||
.cont
|
||||
|
||||
.loop
|
||||
lda &state+&i
|
||||
eor rk+&round*16+&i
|
||||
sta &state+&i
|
||||
&i seta &i+2
|
||||
aif &i<16,.loop
|
||||
|
||||
aif &round=0,.skip
|
||||
ShortRegs
|
||||
InvMixColumn 0,5,10,15,0
|
||||
InvMixColumn 4,9,14,3,4
|
||||
InvMixColumn 8,13,2,7,8
|
||||
InvMixColumn 12,1,6,11,12
|
||||
LongRegs
|
||||
.skip
|
||||
mend
|
||||
|
||||
|
||||
macro
|
||||
InvMixColumn &A,&B,&C,&D,&i
|
||||
|
||||
ldy &state+&i+0
|
||||
lda XtimeE,Y
|
||||
ldy &state+&i+1
|
||||
eor XtimeB,Y
|
||||
ldy &state+&i+2
|
||||
eor XtimeD,Y
|
||||
ldy &state+&i+3
|
||||
eor Xtime9,Y
|
||||
tay
|
||||
lda InvSbox,Y
|
||||
sta &out+&A
|
||||
|
||||
ldy &state+&i+0
|
||||
lda Xtime9,Y
|
||||
ldy &state+&i+1
|
||||
eor XtimeE,Y
|
||||
ldy &state+&i+2
|
||||
eor XtimeB,Y
|
||||
ldy &state+&i+3
|
||||
eor XtimeD,Y
|
||||
tay
|
||||
lda InvSbox,Y
|
||||
sta &out+&B
|
||||
|
||||
ldy &state+&i+0
|
||||
lda XtimeD,Y
|
||||
ldy &state+&i+1
|
||||
eor Xtime9,Y
|
||||
ldy &state+&i+2
|
||||
eor XtimeE,Y
|
||||
ldy &state+&i+3
|
||||
eor XtimeB,Y
|
||||
tay
|
||||
lda InvSbox,Y
|
||||
sta &out+&C
|
||||
|
||||
ldy &state+&i+0
|
||||
lda XtimeB,Y
|
||||
ldy &state+&i+1
|
||||
eor XtimeD,Y
|
||||
ldy &state+&i+2
|
||||
eor Xtime9,Y
|
||||
ldy &state+&i+3
|
||||
eor XtimeE,Y
|
||||
tay
|
||||
lda InvSbox,Y
|
||||
sta &out+&D
|
||||
mend
|
||||
|
||||
|
||||
macro
|
||||
InvFinalRoundStep &to,&from
|
||||
|
||||
lda state1+&from
|
||||
eor rk+&round*16+&from
|
||||
tay
|
||||
lda InvSbox,Y
|
||||
sta state2+&to
|
||||
|
||||
mend
|
||||
|
||||
|
||||
macro
|
||||
InvFinalRound &round
|
||||
|
||||
ShortRegs
|
||||
InvFinalRoundStep 0,0
|
||||
InvFinalRoundStep 4,4
|
||||
InvFinalRoundStep 8,8
|
||||
InvFinalRoundStep 12,12
|
||||
|
||||
InvFinalRoundStep 1,13
|
||||
InvFinalRoundStep 13,9
|
||||
InvFinalRoundStep 9,5
|
||||
InvFinalRoundStep 5,1
|
||||
|
||||
InvFinalRoundStep 10,2
|
||||
InvFinalRoundStep 2,10
|
||||
InvFinalRoundStep 14,6
|
||||
InvFinalRoundStep 6,14
|
||||
|
||||
InvFinalRoundStep 15,3
|
||||
InvFinalRoundStep 3,7
|
||||
InvFinalRoundStep 7,11
|
||||
InvFinalRoundStep 11,15
|
||||
LongRegs
|
||||
|
||||
mend
|
||||
|
||||
|
||||
macro
|
||||
ShortRegs
|
||||
sep #$30
|
||||
|
@ -38,6 +38,10 @@ void aes128_test(void) {
|
||||
aes_encrypt(&aes_state);
|
||||
|
||||
print_hexbytes("Output: ", aes_state.data, 16);
|
||||
|
||||
aes128_decrypt(&aes_state);
|
||||
|
||||
print_hexbytes("Decrypted: ", aes_state.data, 16);
|
||||
}
|
||||
|
||||
void aes192_test(void) {
|
||||
@ -64,6 +68,10 @@ void aes192_test(void) {
|
||||
aes_encrypt(&aes_state);
|
||||
|
||||
print_hexbytes("Output: ", aes_state.data, 16);
|
||||
|
||||
aes192_decrypt(&aes_state);
|
||||
|
||||
print_hexbytes("Decrypted: ", aes_state.data, 16);
|
||||
}
|
||||
|
||||
void aes256_test(void) {
|
||||
|
Loading…
Reference in New Issue
Block a user