summaryrefslogtreecommitdiff
path: root/arm9/asm/SSL_md5.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/SSL_md5.s')
-rw-r--r--arm9/asm/SSL_md5.s454
1 files changed, 454 insertions, 0 deletions
diff --git a/arm9/asm/SSL_md5.s b/arm9/asm/SSL_md5.s
new file mode 100644
index 00000000..16b6aeb4
--- /dev/null
+++ b/arm9/asm/SSL_md5.s
@@ -0,0 +1,454 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global itab
+itab: ; 0x021062AC
+ .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+ .byte 0x01, 0x06, 0x0B, 0x00, 0x05, 0x0A, 0x0F, 0x04, 0x09, 0x0E, 0x03, 0x08, 0x0D, 0x02, 0x07, 0x0C
+ .byte 0x05, 0x08, 0x0B, 0x0E, 0x01, 0x04, 0x07, 0x0A, 0x0D, 0x00, 0x03, 0x06, 0x09, 0x0C, 0x0F, 0x02
+ .byte 0x00, 0x07, 0x0E, 0x05, 0x0C, 0x03, 0x0A, 0x01, 0x08, 0x0F, 0x06, 0x0D, 0x04, 0x0B, 0x02, 0x09
+
+ .global padding
+padding: ; 0x021062EC
+ .byte 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global ktab
+ktab: ; 0x0210632C
+ .byte 0x78, 0xA4, 0x6A, 0xD7, 0x56, 0xB7, 0xC7, 0xE8, 0xDB, 0x70, 0x20, 0x24, 0xEE, 0xCE, 0xBD, 0xC1
+ .byte 0xAF, 0x0F, 0x7C, 0xF5, 0x2A, 0xC6, 0x87, 0x47, 0x13, 0x46, 0x30, 0xA8, 0x01, 0x95, 0x46, 0xFD
+ .byte 0xD8, 0x98, 0x80, 0x69, 0xAF, 0xF7, 0x44, 0x8B, 0xB1, 0x5B, 0xFF, 0xFF, 0xBE, 0xD7, 0x5C, 0x89
+ .byte 0x22, 0x11, 0x90, 0x6B, 0x93, 0x71, 0x98, 0xFD, 0x8E, 0x43, 0x79, 0xA6, 0x21, 0x08, 0xB4, 0x49
+ .byte 0x62, 0x25, 0x1E, 0xF6, 0x40, 0xB3, 0x40, 0xC0, 0x51, 0x5A, 0x5E, 0x26, 0xAA, 0xC7, 0xB6, 0xE9
+ .byte 0x5D, 0x10, 0x2F, 0xD6, 0x53, 0x14, 0x44, 0x02, 0x81, 0xE6, 0xA1, 0xD8, 0xC8, 0xFB, 0xD3, 0xE7
+ .byte 0xE6, 0xCD, 0xE1, 0x21, 0xD6, 0x07, 0x37, 0xC3, 0x87, 0x0D, 0xD5, 0xF4, 0xED, 0x14, 0x5A, 0x45
+ .byte 0x05, 0xE9, 0xE3, 0xA9, 0xF8, 0xA3, 0xEF, 0xFC, 0xD9, 0x02, 0x6F, 0x67, 0x8A, 0x4C, 0x2A, 0x8D
+ .byte 0x42, 0x39, 0xFA, 0xFF, 0x81, 0xF6, 0x71, 0x87, 0x22, 0x61, 0x9D, 0x6D, 0x0C, 0x38, 0xE5, 0xFD
+ .byte 0x44, 0xEA, 0xBE, 0xA4, 0xA9, 0xCF, 0xDE, 0x4B, 0x60, 0x4B, 0xBB, 0xF6, 0x70, 0xBC, 0xBF, 0xBE
+ .byte 0xC6, 0x7E, 0x9B, 0x28, 0xFA, 0x27, 0xA1, 0xEA, 0x85, 0x30, 0xEF, 0xD4, 0x05, 0x1D, 0x88, 0x04
+ .byte 0x39, 0xD0, 0xD4, 0xD9, 0xE5, 0x99, 0xDB, 0xE6, 0xF8, 0x7C, 0xA2, 0x1F, 0x65, 0x56, 0xAC, 0xC4
+ .byte 0x44, 0x22, 0x29, 0xF4, 0x97, 0xFF, 0x2A, 0x43, 0xA7, 0x23, 0x94, 0xAB, 0x39, 0xA0, 0x93, 0xFC
+ .byte 0xC3, 0x59, 0x5B, 0x65, 0x92, 0xCC, 0x0C, 0x8F, 0x7D, 0xF4, 0xEF, 0xFF, 0xD1, 0x5D, 0x84, 0x85
+ .byte 0x4F, 0x7E, 0xA8, 0x6F, 0xE0, 0xE6, 0x2C, 0xFE, 0x14, 0x43, 0x01, 0xA3, 0xA1, 0x11, 0x08, 0x4E
+ .byte 0x82, 0x7E, 0x53, 0xF7, 0x35, 0xF2, 0x3A, 0xBD, 0xBB, 0xD2, 0xD7, 0x2A, 0x91, 0xD3, 0x86, 0xEB
+
+ .section .text
+
+ arm_func_start CPSi_md5_result
+CPSi_md5_result: ; 0x020A3A58
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r0, r4
+ add r1, r5, #0x10
+ mov r2, #0x8
+ bl char_from_long
+ ldr r0, [r5, #0x10]
+ ldr r1, _020A3AC8 ; =padding
+ mov r0, r0, lsr #0x3
+ and r0, r0, #0x3f
+ cmp r0, #0x38
+ rsblt r2, r0, #0x38
+ rsbge r2, r0, #0x78
+ mov r0, r5
+ bl CPSi_md5_calc
+ mov r0, r5
+ mov r1, r4
+ mov r2, #0x8
+ bl CPSi_md5_calc
+ mov r0, r4
+ mov r1, r5
+ mov r2, #0x10
+ bl char_from_long
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020A3AC8: .word padding
+
+ arm_func_start CPSi_md5_calc
+CPSi_md5_calc:
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ ldr r3, [r8, #0x10]
+ mov r6, r2
+ add r0, r3, r6, lsl #0x3
+ str r0, [r8, #0x10]
+ ldr r0, [r8, #0x10]
+ mov r2, r3, lsr #0x3
+ cmp r0, r6, lsl #0x3
+ ldrcc r0, [r8, #0x14]
+ and r4, r2, #0x3f
+ addcc r0, r0, #0x1
+ strcc r0, [r8, #0x14]
+ ldr r0, [r8, #0x14]
+ rsb r5, r4, #0x40
+ add r0, r0, r6, lsr #0x1d
+ mov r7, r1
+ str r0, [r8, #0x14]
+ cmp r6, r5
+ blo _020A3B6C
+ add r1, r8, #0x18
+ mov r0, r7
+ mov r2, r5
+ add r1, r1, r4
+ bl MI_CpuCopy8
+ mov r0, r8
+ add r1, r8, #0x18
+ mov r4, #0x0
+ bl CPSi_md5_block
+ add r0, r5, #0x3f
+ cmp r0, r6
+ bhs _020A3B70
+_020A3B4C:
+ mov r0, r8
+ add r1, r7, r5
+ bl CPSi_md5_block
+ add r5, r5, #0x40
+ add r0, r5, #0x3f
+ cmp r0, r6
+ blo _020A3B4C
+ b _020A3B70
+_020A3B6C:
+ mov r5, #0x0
+_020A3B70:
+ add r1, r8, #0x18
+ add r0, r7, r5
+ add r1, r1, r4
+ sub r2, r6, r5
+ bl MI_CpuCopy8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start CPSi_md5_init
+CPSi_md5_init: ; 0x020A3B8C
+ stmdb sp!, {r4,lr}
+ mov r1, #0x0
+ mov r2, #0x58
+ mov r4, r0
+ bl MI_CpuFill8
+ ldr r1, _020A3BC8 ; =0x67452301
+ ldr r0, _020A3BCC ; =0xEFCDAB89
+ str r1, [r4, #0x0]
+ ldr r1, _020A3BD0 ; =0x98BADCFE
+ str r0, [r4, #0x4]
+ ldr r0, _020A3BD4 ; =0x10325476
+ str r1, [r4, #0x8]
+ str r0, [r4, #0xc]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020A3BC8: .word 0x67452301
+_020A3BCC: .word 0xEFCDAB89
+_020A3BD0: .word 0x98BADCFE
+_020A3BD4: .word 0x10325476
+
+ arm_func_start CPSi_md5_block
+CPSi_md5_block: ; 0x020A3BD8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x44
+ str r0, [sp, #0x0]
+ ldr r3, [sp, #0x0]
+ add r0, sp, #0x4
+ mov r2, #0x40
+ ldr r7, [r3, #0x0]
+ ldr r6, [r3, #0x4]
+ ldr r5, [r3, #0x8]
+ ldr r4, [r3, #0xc]
+ bl long_from_char
+ ldr r2, _020A4024 ; =itab
+ mov r3, #0x0
+ ldr r1, _020A4028 ; =ktab
+ mov r11, r3
+ add r0, sp, #0x4
+ mov r10, r2
+_020A3C1C:
+ ldrb r9, [r2, #0x0]
+ add r8, r3, #0x1
+ eor r12, r5, r4
+ and r12, r6, r12
+ eor r12, r4, r12
+ ldr r9, [r0, r9, lsl #0x2]
+ ldr lr, [r1, r3, lsl #0x2]
+ add r9, r12, r9
+ add r9, lr, r9
+ add r9, r7, r9
+ mov r7, r9, lsl #0x7
+ orr r7, r7, r9, lsr #0x19
+ ldrb r9, [r10, r8]
+ add r7, r6, r7
+ ldr r8, [r1, r8, lsl #0x2]
+ ldr r9, [r0, r9, lsl #0x2]
+ eor r12, r6, r5
+ and r12, r7, r12
+ eor r12, r5, r12
+ add r9, r12, r9
+ add r9, r8, r9
+ add r8, r3, #0x2
+ add r9, r4, r9
+ mov r4, r9, lsl #0xc
+ orr r4, r4, r9, lsr #0x14
+ add r4, r7, r4
+ ldr r9, [r1, r8, lsl #0x2]
+ ldrb r12, [r10, r8]
+ eor r8, r7, r6
+ and r8, r4, r8
+ eor r8, r6, r8
+ ldr lr, [r0, r12, lsl #0x2]
+ add r12, r3, #0x3
+ add r8, r8, lr
+ add r8, r9, r8
+ add r8, r5, r8
+ mov r5, r8, lsl #0x11
+ orr r5, r5, r8, lsr #0xf
+ add r5, r4, r5
+ ldr r9, [r1, r12, lsl #0x2]
+ ldrb r12, [r10, r12]
+ eor r8, r4, r7
+ and r8, r5, r8
+ eor r8, r7, r8
+ ldr r12, [r0, r12, lsl #0x2]
+ add r2, r2, #0x4
+ add r8, r8, r12
+ add r8, r9, r8
+ add r8, r6, r8
+ mov r6, r8, lsl #0x16
+ orr r6, r6, r8, lsr #0xa
+ add r6, r5, r6
+ add r3, r3, #0x4
+ add r11, r11, #0x1
+ cmp r11, #0x4
+ blt _020A3C1C
+ add r8, r10, r3
+ mov r2, #0x0
+ ldr r1, _020A4028 ; =ktab
+ add r0, sp, #0x4
+ ldr lr, _020A4024 ; =itab
+_020A3D10:
+ ldrb r10, [r8, #0x0]
+ add r9, r3, #0x1
+ eor r11, r6, r5
+ and r11, r4, r11
+ eor r11, r5, r11
+ ldr r10, [r0, r10, lsl #0x2]
+ ldr r12, [r1, r3, lsl #0x2]
+ add r10, r11, r10
+ add r10, r12, r10
+ add r10, r7, r10
+ mov r7, r10, lsl #0x5
+ orr r7, r7, r10, lsr #0x1b
+ ldrb r10, [lr, r9]
+ add r7, r6, r7
+ ldr r9, [r1, r9, lsl #0x2]
+ ldr r10, [r0, r10, lsl #0x2]
+ eor r11, r7, r6
+ and r11, r5, r11
+ eor r11, r6, r11
+ add r10, r11, r10
+ add r10, r9, r10
+ add r9, r3, #0x2
+ add r10, r4, r10
+ mov r4, r10, lsl #0x9
+ orr r4, r4, r10, lsr #0x17
+ add r4, r7, r4
+ ldr r12, [r1, r9, lsl #0x2]
+ ldrb r9, [lr, r9]
+ eor r10, r4, r7
+ and r10, r6, r10
+ eor r11, r7, r10
+ ldr r10, [r0, r9, lsl #0x2]
+ add r9, r3, #0x3
+ add r10, r11, r10
+ add r10, r12, r10
+ add r10, r5, r10
+ mov r5, r10, lsl #0xe
+ orr r5, r5, r10, lsr #0x12
+ add r5, r4, r5
+ ldr r10, [r1, r9, lsl #0x2]
+ ldrb r11, [lr, r9]
+ eor r9, r5, r4
+ and r9, r7, r9
+ eor r9, r4, r9
+ ldr r11, [r0, r11, lsl #0x2]
+ add r8, r8, #0x4
+ add r9, r9, r11
+ add r9, r10, r9
+ add r9, r6, r9
+ mov r6, r9, lsl #0x14
+ orr r6, r6, r9, lsr #0xc
+ add r6, r5, r6
+ add r3, r3, #0x4
+ add r2, r2, #0x1
+ cmp r2, #0x4
+ blt _020A3D10
+ add r8, lr, r3
+ mov lr, #0x0
+ ldr r2, _020A4028 ; =ktab
+ add r0, sp, #0x4
+_020A3E00:
+ ldrb r1, [r8, #0x0]
+ eor r12, r6, r5
+ add lr, lr, #0x1
+ ldr r11, [r0, r1, lsl #0x2]
+ eor r12, r4, r12
+ ldr r1, [r2, r3, lsl #0x2]
+ add r11, r12, r11
+ add r1, r1, r11
+ add r7, r7, r1
+ mov r1, r7, lsl #0x4
+ orr r1, r1, r7, lsr #0x1c
+ add r7, r6, r1
+ add r10, r3, #0x1
+ ldr r1, _020A4024 ; =itab
+ ldr r12, [r2, r10, lsl #0x2]
+ ldrb r1, [r1, r10]
+ eor r10, r7, r6
+ eor r11, r5, r10
+ ldr r10, [r0, r1, lsl #0x2]
+ add r9, r3, #0x2
+ add r10, r11, r10
+ add r10, r12, r10
+ add r4, r4, r10
+ ldr sl, _020A4024 ; =itab
+ ldr r1, [r2, r9, lsl #0x2]
+ ldrb r9, [r10, r9]
+ mov r10, r4, lsl #0xb
+ orr r4, r10, r4, lsr #0x15
+ add r4, r7, r4
+ eor r10, r4, r7
+ ldr r9, [r0, r9, lsl #0x2]
+ eor r10, r6, r10
+ add r9, r10, r9
+ add r1, r1, r9
+ add r5, r5, r1
+ add r10, r3, #0x3
+ ldr sb, _020A4024 ; =itab
+ mov r1, r5, lsl #0x10
+ ldrb r9, [r9, r10]
+ orr r1, r1, r5, lsr #0x10
+ add r5, r4, r1
+ ldr r1, [r2, r10, lsl #0x2]
+ eor r10, r5, r4
+ ldr r9, [r0, r9, lsl #0x2]
+ eor r10, r7, r10
+ add r9, r10, r9
+ add r1, r1, r9
+ add r6, r6, r1
+ mov r1, r6, lsl #0x17
+ orr r1, r1, r6, lsr #0x9
+ add r8, r8, #0x4
+ add r6, r5, r1
+ add r3, r3, #0x4
+ cmp lr, #0x4
+ blt _020A3E00
+ ldr r0, _020A4024 ; =itab
+ ldr r1, _020A4028 ; =ktab
+ add r8, r0, r3
+ ldr lr, _020A4024 ; =itab
+ mov r2, #0x0
+ add r0, sp, #0x4
+_020A3EF4:
+ ldrb r10, [r8, #0x0]
+ add r9, r3, #0x1
+ mvn r11, r4
+ orr r11, r6, r11
+ eor r11, r5, r11
+ ldr r10, [r0, r10, lsl #0x2]
+ ldr r12, [r1, r3, lsl #0x2]
+ add r10, r11, r10
+ add r10, r12, r10
+ add r10, r7, r10
+ mov r7, r10, lsl #0x6
+ orr r7, r7, r10, lsr #0x1a
+ ldrb r10, [lr, r9]
+ add r7, r6, r7
+ ldr r9, [r1, r9, lsl #0x2]
+ ldr r10, [r0, r10, lsl #0x2]
+ mvn r11, r5
+ orr r11, r7, r11
+ eor r11, r6, r11
+ add r10, r11, r10
+ add r10, r9, r10
+ add r9, r3, #0x2
+ add r10, r4, r10
+ mov r4, r10, lsl #0xa
+ orr r4, r4, r10, lsr #0x16
+ add r4, r7, r4
+ ldr r12, [r1, r9, lsl #0x2]
+ ldrb r9, [lr, r9]
+ mvn r10, r6
+ orr r10, r4, r10
+ eor r11, r7, r10
+ ldr r10, [r0, r9, lsl #0x2]
+ add r9, r3, #0x3
+ add r10, r11, r10
+ add r10, r12, r10
+ add r10, r5, r10
+ mov r5, r10, lsl #0xf
+ orr r5, r5, r10, lsr #0x11
+ add r5, r4, r5
+ ldr r10, [r1, r9, lsl #0x2]
+ ldrb r11, [lr, r9]
+ mvn r9, r7
+ orr r9, r5, r9
+ eor r9, r4, r9
+ ldr r11, [r0, r11, lsl #0x2]
+ add r8, r8, #0x4
+ add r9, r9, r11
+ add r9, r10, r9
+ add r9, r6, r9
+ mov r6, r9, lsl #0x15
+ orr r6, r6, r9, lsr #0xb
+ add r6, r5, r6
+ add r3, r3, #0x4
+ add r2, r2, #0x1
+ cmp r2, #0x4
+ blt _020A3EF4
+ ldr r0, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ add r1, r0, r7
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x0]
+ ldr r0, [r0, #0x4]
+ add r1, r0, r6
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x4]
+ ldr r0, [r0, #0x8]
+ add r1, r0, r5
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x8]
+ ldr r0, [r0, #0xc]
+ add r1, r0, r4
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0xc]
+ add sp, sp, #0x44
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020A4024: .word itab
+_020A4028: .word ktab
+
+ arm_func_start long_from_char
+long_from_char: ; 0x020A402C
+ ldr ip, _020A4040 ; =MI_CpuCopy8
+ mov r3, r0
+ mov r0, r1
+ mov r1, r3
+ bx r12
+ .balign 4
+_020A4040: .word MI_CpuCopy8
+
+ arm_func_start char_from_long
+char_from_long: ; 0x020A4044
+ ldr ip, _020A4058 ; =MI_CpuCopy8
+ mov r3, r0
+ mov r0, r1
+ mov r1, r3
+ bx r12
+ .balign 4
+_020A4058: .word MI_CpuCopy8