.include "asm/macros.inc" .include "global.inc" .section .data .global Unk_02106A00 Unk_02106A00: ; 0x02106A00 .word DGTi_hash2_arm4_small .global Unk_02106A04 Unk_02106A04: ; 0x02106A04 .byte 0x14, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .text arm_func_start DGT_Hash2CalcHmac DGT_Hash2CalcHmac: ; 0x020D2D78 stmdb sp!, {r4-r8,lr} sub sp, sp, #0xa0 ldr lr, _020D2E00 ; =Unk_02106A04 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 ; = Unk_02106A04 _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 ; =Unk_02106A00 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 ; =Unk_02106A00 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 ; = Unk_02106A00 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 ; =Unk_02106A00 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 ; =Unk_02106A00 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 ; =Unk_02106A00 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 ; = Unk_02106A00 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