mirror of
https://github.com/sheumann/65816-crypto.git
synced 2024-11-29 06:50:17 +00:00
Optimize AES CBC operations a bit.
This commit is contained in:
parent
6532a3abc4
commit
924789510b
207
aescbc.c
207
aescbc.c
@ -23,12 +23,10 @@ void aes_cbc_encrypt(struct aes_context *context,
|
|||||||
|
|
||||||
while (nblocks-- > 0) {
|
while (nblocks-- > 0) {
|
||||||
asm {
|
asm {
|
||||||
ldy #0
|
lda [in]
|
||||||
lda [in],y
|
eor [context]
|
||||||
eor [context],y
|
sta [context]
|
||||||
sta [context],y
|
ldy #2
|
||||||
iny
|
|
||||||
iny
|
|
||||||
lda [in],y
|
lda [in],y
|
||||||
eor [context],y
|
eor [context],y
|
||||||
sta [context],y
|
sta [context],y
|
||||||
@ -67,9 +65,38 @@ void aes_cbc_encrypt(struct aes_context *context,
|
|||||||
lda context
|
lda context
|
||||||
tcd
|
tcd
|
||||||
jsl AES_ENCRYPT
|
jsl AES_ENCRYPT
|
||||||
|
lda 0
|
||||||
pld
|
pld
|
||||||
|
|
||||||
|
sta [out]
|
||||||
|
ldy #2
|
||||||
|
lda [context],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
sta [out],y
|
||||||
}
|
}
|
||||||
memcpy(out, context->data, 16);
|
|
||||||
in += 16;
|
in += 16;
|
||||||
out += 16;
|
out += 16;
|
||||||
}
|
}
|
||||||
@ -90,8 +117,37 @@ void aes_cbc_decrypt(struct aes_context *context,
|
|||||||
if (nblocks-- == 0)
|
if (nblocks-- == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
memcpy(context->data, in, 16);
|
|
||||||
asm {
|
asm {
|
||||||
|
lda [in]
|
||||||
|
sta [context]
|
||||||
|
ldy #2
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
|
||||||
phd
|
phd
|
||||||
lda context
|
lda context
|
||||||
tcd
|
tcd
|
||||||
@ -138,59 +194,90 @@ void aes_cbc_decrypt(struct aes_context *context,
|
|||||||
eor [iv],y
|
eor [iv],y
|
||||||
sta [out],y
|
sta [out],y
|
||||||
}
|
}
|
||||||
//in += 16;
|
|
||||||
out += 16;
|
|
||||||
|
|
||||||
while (nblocks-- > 0) {
|
|
||||||
memcpy(context->data, in+16, 16);
|
|
||||||
asm {
|
|
||||||
phd
|
|
||||||
lda context
|
|
||||||
tcd
|
|
||||||
jsl AES_DECRYPT
|
|
||||||
pld
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
lda [context],y
|
|
||||||
eor [in],y
|
|
||||||
sta [out],y
|
|
||||||
iny
|
|
||||||
iny
|
|
||||||
lda [context],y
|
|
||||||
eor [in],y
|
|
||||||
sta [out],y
|
|
||||||
iny
|
|
||||||
iny
|
|
||||||
lda [context],y
|
|
||||||
eor [in],y
|
|
||||||
sta [out],y
|
|
||||||
iny
|
|
||||||
iny
|
|
||||||
lda [context],y
|
|
||||||
eor [in],y
|
|
||||||
sta [out],y
|
|
||||||
iny
|
|
||||||
iny
|
|
||||||
lda [context],y
|
|
||||||
eor [in],y
|
|
||||||
sta [out],y
|
|
||||||
iny
|
|
||||||
iny
|
|
||||||
lda [context],y
|
|
||||||
eor [in],y
|
|
||||||
sta [out],y
|
|
||||||
iny
|
|
||||||
iny
|
|
||||||
lda [context],y
|
|
||||||
eor [in],y
|
|
||||||
sta [out],y
|
|
||||||
iny
|
|
||||||
iny
|
|
||||||
lda [context],y
|
|
||||||
eor [in],y
|
|
||||||
sta [out],y
|
|
||||||
}
|
|
||||||
in += 16;
|
in += 16;
|
||||||
out += 16;
|
out += 16;
|
||||||
|
|
||||||
|
while (nblocks-- > 0) {
|
||||||
|
asm {
|
||||||
|
lda [in]
|
||||||
|
sta [context]
|
||||||
|
ldy #2
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [in],y
|
||||||
|
sta [context],y
|
||||||
|
|
||||||
|
phd
|
||||||
|
lda context
|
||||||
|
tcd
|
||||||
|
jsl AES_DECRYPT
|
||||||
|
pld
|
||||||
|
}
|
||||||
|
in -= 16;
|
||||||
|
asm {
|
||||||
|
ldy #0
|
||||||
|
lda [context],y
|
||||||
|
eor [in],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
eor [in],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
eor [in],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
eor [in],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
eor [in],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
eor [in],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
eor [in],y
|
||||||
|
sta [out],y
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
lda [context],y
|
||||||
|
eor [in],y
|
||||||
|
sta [out],y
|
||||||
|
}
|
||||||
|
in += 32;
|
||||||
|
out += 16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user