summaryrefslogtreecommitdiff
path: root/arm9/asm/DGT_hash2.s
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2020-05-10 21:00:12 +0100
committerred031000 <rubenru09@aol.com>2020-05-10 21:00:12 +0100
commitacf8ef5974007ffeb1139e521d27e5bf50a9dc9c (patch)
tree242958215185b1ac800e42636b90646febb3960c /arm9/asm/DGT_hash2.s
parente1c517d34810fe83865e896a23e46a2ea089261f (diff)
split libdgt
Diffstat (limited to 'arm9/asm/DGT_hash2.s')
-rw-r--r--arm9/asm/DGT_hash2.s443
1 files changed, 443 insertions, 0 deletions
diff --git a/arm9/asm/DGT_hash2.s b/arm9/asm/DGT_hash2.s
new file mode 100644
index 00000000..614d700d
--- /dev/null
+++ b/arm9/asm/DGT_hash2.s
@@ -0,0 +1,443 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start DGT_Hash2CalcHmac
+DGT_Hash2CalcHmac: ; 0x020D2D78
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0xa0
+ ldr lr, _020D2E00 ; =0x02106A04
+ add r12, sp, #0x1c
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ mov r4, r12
+ ldmia lr!, {r0-r3}
+ stmia r12!, {r0-r3}
+ ldmia lr, {r0-r2}
+ stmia r12, {r0-r2}
+ add lr, sp, #0x38
+ add r12, sp, #0x8
+ str lr, [sp, #0x24]
+ ldr lr, _020D2E04 ; =DGT_Hash2Reset
+ str r12, [sp, #0x28]
+ ldr ip, _020D2E08 ; =DGT_Hash2SetSource
+ str lr, [sp, #0x2c]
+ ldr lr, _020D2E0C ; =DGT_Hash2GetDigest
+ str r12, [sp, #0x30]
+ ldr r12, [sp, #0xb8]
+ str lr, [sp, #0x34]
+ str r12, [sp, #0x0]
+ mov r3, r5
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ str r4, [sp, #0x4]
+ bl DGTi_Hash2CalcHmac
+ add sp, sp, #0xa0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020D2E00: .word Unk_02106A04 ; = 0x02106A04
+_020D2E04: .word DGT_Hash2Reset
+_020D2E08: .word DGT_Hash2SetSource
+_020D2E0C: .word DGT_Hash2GetDigest
+
+ arm_func_start DGT_Hash2GetDigest
+DGT_Hash2GetDigest: ; 0x020D2E10
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4-r6,lr}
+ ldr r0, [sp, #0x10]
+ mov r6, r1
+ ldr r3, [r0, #0x1c]
+ add r5, r0, #0x20
+ ands r1, r3, #0x3
+ mov r0, r3, asr #0x2
+ moveq r1, #0x0
+ streq r1, [r5, r0, lsl #0x2]
+ ldr r2, [sp, #0x10]
+ mov r1, #0x80
+ add r4, r2, #0x20
+ strb r1, [r4, r3]
+ add r3, r3, #0x1
+ ands r1, r3, #0x3
+ beq _020D2E68
+ mov r2, #0x0
+_020D2E58:
+ strb r2, [r4, r3]
+ add r3, r3, #0x1
+ ands r1, r3, #0x3
+ bne _020D2E58
+_020D2E68:
+ ldr r1, [sp, #0x10]
+ add r0, r0, #0x1
+ ldr r1, [r1, #0x1c]
+ cmp r1, #0x38
+ blt _020D2EB4
+ cmp r0, #0x10
+ bge _020D2E98
+ mov r1, #0x0
+_020D2E88:
+ str r1, [r5, r0, lsl #0x2]
+ add r0, r0, #0x1
+ cmp r0, #0x10
+ blt _020D2E88
+_020D2E98:
+ ldr r1, _020D3008 ; =0x02106A00
+ ldr r0, [sp, #0x10]
+ ldr r3, [r1, #0x0]
+ mov r1, r5
+ mov r2, #0x40
+ blx r3
+ mov r0, #0x0
+_020D2EB4:
+ cmp r0, #0xe
+ bge _020D2ED0
+ mov r1, #0x0
+_020D2EC0:
+ str r1, [r5, r0, lsl #0x2]
+ add r0, r0, #0x1
+ cmp r0, #0xe
+ blt _020D2EC0
+_020D2ED0:
+ ldr r0, [sp, #0x10]
+ mov r1, r5
+ ldr r2, [r0, #0x14]
+ ldr r3, _020D3008 ; =0x02106A00
+ strb r2, [r4, #0x3f]
+ mov r0, r2, lsr #0x8
+ strb r0, [r4, #0x3e]
+ mov r0, r2, lsr #0x10
+ strb r0, [r4, #0x3d]
+ mov r0, r2, lsr #0x18
+ strb r0, [r4, #0x3c]
+ ldr r0, [sp, #0x10]
+ mov r2, #0x40
+ ldr r5, [r0, #0x18]
+ strb r5, [r4, #0x3b]
+ mov r0, r5, lsr #0x8
+ strb r0, [r4, #0x3a]
+ mov r0, r5, lsr #0x10
+ strb r0, [r4, #0x39]
+ mov r0, r5, lsr #0x18
+ strb r0, [r4, #0x38]
+ ldr r0, [sp, #0x10]
+ ldr r3, [r3, #0x0]
+ blx r3
+ ldr r0, [sp, #0x10]
+ add r1, sp, #0x10
+ ldr r3, [r0, #0x0]
+ mov r0, #0x0
+ mov r2, r3, lsr #0x18
+ strb r2, [r6, #0x0]
+ mov r2, r3, lsr #0x10
+ strb r2, [r6, #0x1]
+ mov r2, r3, lsr #0x8
+ strb r2, [r6, #0x2]
+ strb r3, [r6, #0x3]
+ ldr r3, [sp, #0x10]
+ mov r2, #0x4
+ ldr r4, [r3, #0x4]
+ mov r3, r4, lsr #0x18
+ strb r3, [r6, #0x4]
+ mov r3, r4, lsr #0x10
+ strb r3, [r6, #0x5]
+ mov r3, r4, lsr #0x8
+ strb r3, [r6, #0x6]
+ strb r4, [r6, #0x7]
+ ldr r3, [sp, #0x10]
+ ldr r4, [r3, #0x8]
+ mov r3, r4, lsr #0x18
+ strb r3, [r6, #0x8]
+ mov r3, r4, lsr #0x10
+ strb r3, [r6, #0x9]
+ mov r3, r4, lsr #0x8
+ strb r3, [r6, #0xa]
+ strb r4, [r6, #0xb]
+ ldr r3, [sp, #0x10]
+ ldr r4, [r3, #0xc]
+ mov r3, r4, lsr #0x18
+ strb r3, [r6, #0xc]
+ mov r3, r4, lsr #0x10
+ strb r3, [r6, #0xd]
+ mov r3, r4, lsr #0x8
+ strb r3, [r6, #0xe]
+ strb r4, [r6, #0xf]
+ ldr r3, [sp, #0x10]
+ ldr r4, [r3, #0x10]
+ mov r3, r4, lsr #0x18
+ strb r3, [r6, #0x10]
+ mov r3, r4, lsr #0x10
+ strb r3, [r6, #0x11]
+ mov r3, r4, lsr #0x8
+ strb r3, [r6, #0x12]
+ strb r4, [r6, #0x13]
+ ldr r3, [sp, #0x10]
+ str r0, [r3, #0x1c]
+ bl MIi_CpuClear32
+ ldmia sp!, {r4-r6,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020D3008: .word Unk_02106A00 ; = 0x02106A00
+
+ arm_func_start DGT_Hash2SetSource
+DGT_Hash2SetSource: ; 0x020D300C
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ movs r6, r2
+ mov r7, r1
+ add r5, r8, #0x20
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r0, [r8, #0x14]
+ add r1, r0, r6, lsl #0x3
+ cmp r1, r0
+ ldrcc r0, [r8, #0x18]
+ addcc r0, r0, #0x1
+ strcc r0, [r8, #0x18]
+ ldr r0, [r8, #0x18]
+ add r0, r0, r6, lsr #0x1d
+ str r0, [r8, #0x18]
+ str r1, [r8, #0x14]
+ ldr r1, [r8, #0x1c]
+ cmp r1, #0x0
+ beq _020D30CC
+ add r0, r1, r6
+ cmp r0, #0x40
+ blo _020D30A8
+ rsb r4, r1, #0x40
+ mov r0, r7
+ mov r2, r4
+ add r1, r5, r1
+ bl MI_CpuCopy8
+ ldr r1, _020D3164 ; =0x02106A00
+ mov r0, r8
+ ldr r3, [r1, #0x0]
+ mov r1, r5
+ mov r2, #0x40
+ sub r6, r6, r4
+ add r7, r7, r4
+ blx r3
+ mov r0, #0x0
+ str r0, [r8, #0x1c]
+ b _020D30CC
+_020D30A8:
+ mov r0, r7
+ mov r2, r6
+ add r1, r5, r1
+ bl MI_CpuCopy8
+ ldr r0, [r8, #0x1c]
+ add r0, r0, r6
+ str r0, [r8, #0x1c]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_020D30CC:
+ cmp r6, #0x40
+ blo _020D313C
+ bic r4, r6, #0x3f
+ sub r6, r6, r4
+ ands r0, r7, #0x3
+ bne _020D3104
+ ldr r1, _020D3164 ; =0x02106A00
+ mov r0, r8
+ ldr r3, [r1, #0x0]
+ mov r1, r7
+ mov r2, r4
+ blx r3
+ add r7, r7, r4
+ b _020D313C
+_020D3104:
+ mov r0, r7
+ mov r1, r5
+ mov r2, #0x40
+ bl MI_CpuCopy8
+ ldr r1, _020D3164 ; =0x02106A00
+ mov r0, r8
+ ldr r3, [r1, #0x0]
+ mov r1, r5
+ mov r2, #0x40
+ add r7, r7, #0x40
+ blx r3
+ sub r4, r4, #0x40
+ cmp r4, #0x0
+ bgt _020D3104
+_020D313C:
+ str r6, [r8, #0x1c]
+ cmp r6, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r0, r7
+ mov r1, r5
+ mov r2, r6
+ bl MI_CpuCopy8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_020D3164: .word Unk_02106A00 ; = 0x02106A00
+
+ arm_func_start DGT_Hash2Reset
+DGT_Hash2Reset: ; 0x020D3168
+ ldr r1, _020D31A4 ; =0x67452301
+ ldr r2, _020D31A8 ; =0xEFCDAB89
+ str r1, [r0, #0x0]
+ ldr r1, _020D31AC ; =0x98BADCFE
+ str r2, [r0, #0x4]
+ ldr r2, _020D31B0 ; =0x10325476
+ str r1, [r0, #0x8]
+ ldr r1, _020D31B4 ; =0xC3D2E1F0
+ str r2, [r0, #0xc]
+ str r1, [r0, #0x10]
+ mov r1, #0x0
+ str r1, [r0, #0x14]
+ str r1, [r0, #0x18]
+ str r1, [r0, #0x1c]
+ bx lr
+ .balign 4
+_020D31A4: .word 0x67452301
+_020D31A8: .word 0xEFCDAB89
+_020D31AC: .word 0x98BADCFE
+_020D31B0: .word 0x10325476
+_020D31B4: .word 0xC3D2E1F0
+
+ arm_func_start DGTi_Hash2CalcHmac
+DGTi_Hash2CalcHmac: ; 0x020D31B8
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0xc4
+ ldr r5, [sp, #0xe0]
+ ldr r4, [sp, #0xe4]
+ movs r9, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r8, #0x0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r7, #0x0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r6, #0x0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r5, #0x0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ cmp r4, #0x0
+ addeq sp, sp, #0xc4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r0, [r4, #0x4]
+ cmp r5, r0
+ ble _020D3278
+ ldr r0, [r4, #0x8]
+ ldr r1, [r4, #0x10]
+ blx r1
+ ldr r0, [r4, #0x8]
+ ldr r3, [r4, #0x14]
+ mov r1, r6
+ mov r2, r5
+ blx r3
+ ldr r0, [r4, #0x8]
+ ldr r2, [r4, #0x18]
+ add r1, sp, #0x0
+ blx r2
+ ldr r5, [r4, #0x0]
+ add r6, sp, #0x0
+_020D3278:
+ cmp r5, #0x0
+ mov r0, #0x0
+ ble _020D32A0
+ add r2, sp, #0x40
+_020D3288:
+ ldrb r1, [r6, r0]
+ add r0, r0, #0x1
+ cmp r0, r5
+ eor r1, r1, #0x36
+ strb r1, [r2], #0x1
+ blt _020D3288
+_020D32A0:
+ ldr r1, [r4, #0x4]
+ cmp r0, r1
+ bge _020D32CC
+ add r1, sp, #0x40
+ add r3, r1, r0
+ mov r2, #0x36
+_020D32B8:
+ strb r2, [r3], #0x1
+ ldr r1, [r4, #0x4]
+ add r0, r0, #0x1
+ cmp r0, r1
+ blt _020D32B8
+_020D32CC:
+ ldr r0, [r4, #0x8]
+ ldr r1, [r4, #0x10]
+ blx r1
+ ldr r0, [r4, #0x8]
+ ldr r2, [r4, #0x4]
+ ldr r3, [r4, #0x14]
+ add r1, sp, #0x40
+ blx r3
+ ldr r0, [r4, #0x8]
+ ldr r3, [r4, #0x14]
+ mov r1, r8
+ mov r2, r7
+ blx r3
+ ldr r0, [r4, #0x8]
+ ldr r1, [r4, #0xc]
+ ldr r2, [r4, #0x18]
+ blx r2
+ cmp r5, #0x0
+ mov r2, #0x0
+ ble _020D3338
+ add r1, sp, #0x80
+_020D3320:
+ ldrb r0, [r6, r2]
+ add r2, r2, #0x1
+ cmp r2, r5
+ eor r0, r0, #0x5c
+ strb r0, [r1], #0x1
+ blt _020D3320
+_020D3338:
+ ldr r0, [r4, #0x4]
+ cmp r2, r0
+ bge _020D3364
+ add r0, sp, #0x80
+ add r3, r0, r2
+ mov r1, #0x5c
+_020D3350:
+ strb r1, [r3], #0x1
+ ldr r0, [r4, #0x4]
+ add r2, r2, #0x1
+ cmp r2, r0
+ blt _020D3350
+_020D3364:
+ ldr r0, [r4, #0x8]
+ ldr r1, [r4, #0x10]
+ blx r1
+ ldr r0, [r4, #0x8]
+ ldr r2, [r4, #0x4]
+ ldr r3, [r4, #0x14]
+ add r1, sp, #0x80
+ blx r3
+ ldr r0, [r4, #0x8]
+ ldr r1, [r4, #0xc]
+ ldr r2, [r4, #0x0]
+ ldr r3, [r4, #0x14]
+ blx r3
+ ldr r0, [r4, #0x8]
+ ldr r2, [r4, #0x18]
+ mov r1, r9
+ blx r2
+ add sp, sp, #0xc4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4