pokeheartgold/asm/nitrocrypto.s
2023-06-06 14:51:52 +02:00

4844 lines
79 KiB
ArmAsm

.include "asm/macros.inc"
.include "nitrocrypto.inc"
.include "global.inc"
; rc4s-arm4cw.o
.text
arm_func_start CRYPTO_RC4Encrypt
CRYPTO_RC4Encrypt: ; 0x0223706C
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
ldrb r7, [r0]
ldrb r6, [r0, #1]
add r0, r0, #4
mov lr, #0x1000000
add r7, lr, r7, lsl #24
mov r6, r6, lsl #0x18
ldrb sb, [r0, r7, lsr #24]
subs r2, r2, #1
bmi _022370CC
_02237094:
add r6, r6, sb, lsl #24
subs r2, r2, #1
ldrb r8, [r0, r6, lsr #24]
ldrb r5, [r1], #1
strb r8, [r0, r7, lsr #24]
strb sb, [r0, r6, lsr #24]
add r4, sb, r8
and r4, r4, #0xff
add r7, r7, lr
ldrb r4, [r0, r4]
ldrb sb, [r0, r7, lsr #24]
eor r5, r5, r4
strb r5, [r3], #1
bge _02237094
_022370CC:
sub r7, r7, lr
mov r7, r7, lsr #0x18
mov r6, r6, lsr #0x18
strb r7, [r0, #-4]
strb r6, [r0, #-3]
ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
arm_func_end CRYPTO_RC4Encrypt
; sign.o
.rodata
TEMPNAME__$p16:
.byte 0x00, 0x08, 0x01, 0x01
.byte 0x01, 0x10, 0x01, 0x00
.byte 0x00, 0x00, 0x00, 0x00
TEMPNAME__$p2:
.byte 0x00, 0x08, 0x01, 0x01
.byte 0x01, 0x01, 0x01, 0x00
.byte 0x00, 0x00, 0x00, 0x00
TEMPNAME__$p4:
.byte 0x00, 0x08, 0x01, 0x01
.byte 0x01, 0x04, 0x01, 0x00
.byte 0x00, 0x00, 0x00, 0x00
bits$7808:
.byte 0x00, 0x01, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04
shift:
.byte 0x06, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00
.byte 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00
.byte 0x05, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00
.byte 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00
.byte 0x03, 0x00, 0x01, 0x00
.byte 0x02, 0x00
.byte 0x01
.byte 0x00
.data
shift_val:
.word shift + 0x3F
.word shift + 0x3E
.word shift + 0x3C
.word shift + 0x38
.word shift + 0x30
.word shift + 0x20
.word shift
.text
arm_func_start CRYPTO_VerifySignature
CRYPTO_VerifySignature: ; 0x022370E4
stmdb sp!, {r4, r5, lr}
sub sp, sp, #0x14
mov ip, r0
mov r4, r1
mov r5, r2
mov r2, r4
add r0, sp, #0
mov r1, ip
mov r4, r3
bl MATH_CalcSHA1
add r0, sp, #0
mov r1, r5
mov r2, r4
bl CRYPTO_VerifySignatureWithHash
add sp, sp, #0x14
ldmia sp!, {r4, r5, lr}
bx lr
arm_func_end CRYPTO_VerifySignature
arm_func_start CRYPTO_VerifySignatureWithHash
CRYPTO_VerifySignatureWithHash: ; 0x02237128
stmdb sp!, {r4, lr}
sub sp, sp, #0x120
mov r3, #0
str r3, [sp, #0x10]
str r3, [sp, #0x18]
str r2, [sp]
mov r3, #0x80
mov r4, r0
mov r2, r1
ldr ip, _02237224 ; =0x00010001
str r3, [sp, #4]
add r0, sp, #0x1c
mov r1, #0x100
str ip, [sp, #8]
bl CRYPTOi_RSA
mov r1, r0
add r0, sp, #0x1c
add r2, sp, #0xc
add r3, sp, #0x10
bl SkipPadding
cmp r0, #0
addeq sp, sp, #0x120
moveq r0, #0
ldmeqia sp!, {r4, lr}
bxeq lr
add r1, sp, #0x14
add r0, sp, #0x18
str r1, [sp]
str r0, [sp, #4]
mov r2, #0
ldr r0, [sp, #0xc]
ldr r1, [sp, #0x10]
mov r3, r2
bl ParseSignHash
cmp r0, #0
addeq sp, sp, #0x120
moveq r0, #0
ldmeqia sp!, {r4, lr}
bxeq lr
ldr r0, [sp, #0x18]
cmp r0, #0x14
addne sp, sp, #0x120
movne r0, #0
ldmneia sp!, {r4, lr}
bxne lr
ldr r2, [sp, #0x14]
mov r3, #0
_022371E4:
ldrb r1, [r2]
ldrb r0, [r4]
cmp r1, r0
addne sp, sp, #0x120
movne r0, #0
ldmneia sp!, {r4, lr}
bxne lr
add r3, r3, #1
cmp r3, #0x14
add r4, r4, #1
add r2, r2, #1
blt _022371E4
mov r0, #1
add sp, sp, #0x120
ldmia sp!, {r4, lr}
bx lr
.balign 4, 0
_02237224: .word 0x00010001
arm_func_end CRYPTO_VerifySignatureWithHash
arm_func_start ParseSignHash
ParseSignHash: ; 0x02237228
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
mov r5, r2
mov r4, r3
add r0, sp, #0x10
add r1, sp, #0x14
mov r2, #0x30
mov r3, #0
bl ASN1Skip
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, lr}
addeq sp, sp, #0x10
bxeq lr
add r0, sp, #0x10
add r1, sp, #0x14
mov r2, #0x30
mov r3, #0
bl ASN1Skip
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, lr}
addeq sp, sp, #0x10
bxeq lr
add r0, sp, #0x10
add r1, sp, #0x14
add r3, sp, #0
mov r2, #6
bl ASN1Skip
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, lr}
addeq sp, sp, #0x10
bxeq lr
cmp r5, #0
ldrne r0, [sp, #0x10]
strne r0, [r5]
cmp r4, #0
ldrne r0, [sp]
strne r0, [r4]
ldr r2, [sp]
ldr r0, [sp, #0x10]
ldr r1, [sp, #0x14]
add r0, r0, r2
str r0, [sp, #0x10]
cmp r1, r2
addlo sp, sp, #4
movlo r0, #0
ldmloia sp!, {r4, r5, lr}
addlo sp, sp, #0x10
bxlo lr
sub ip, r1, r2
add r0, sp, #0x10
add r1, sp, #0x14
add r3, sp, #0
mov r2, #5
str ip, [sp, #0x14]
bl ASN1Skip
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, lr}
addeq sp, sp, #0x10
bxeq lr
ldr r2, [sp]
ldr r0, [sp, #0x10]
ldr r1, [sp, #0x14]
add r0, r0, r2
str r0, [sp, #0x10]
cmp r1, r2
addlo sp, sp, #4
movlo r0, #0
ldmloia sp!, {r4, r5, lr}
addlo sp, sp, #0x10
bxlo lr
sub ip, r1, r2
add r0, sp, #0x10
add r1, sp, #0x14
add r3, sp, #0
mov r2, #4
str ip, [sp, #0x14]
bl ASN1Skip
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, lr}
addeq sp, sp, #0x10
bxeq lr
ldr r1, [sp, #0x20]
cmp r1, #0
ldrne r0, [sp, #0x10]
strne r0, [r1]
ldr r1, [sp, #0x24]
cmp r1, #0
ldrne r0, [sp]
strne r0, [r1]
mov r0, #1
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
add sp, sp, #0x10
bx lr
arm_func_end ParseSignHash
arm_func_start SkipPadding
SkipPadding: ; 0x022373CC
stmdb sp!, {lr}
sub sp, sp, #4
cmp r1, #0xa
addlo sp, sp, #4
movlo r0, #0
ldmloia sp!, {lr}
bxlo lr
ldrb ip, [r0]
add lr, r0, r1
cmp ip, #1
addne sp, sp, #4
movne r0, #0
ldmneia sp!, {lr}
bxne lr
add ip, r0, #1
mov r1, #0
_0223740C:
ldrb r0, [ip], #1
cmp r0, #0xff
addne sp, sp, #4
movne r0, #0
ldmneia sp!, {lr}
bxne lr
add r1, r1, #1
cmp r1, #8
blt _0223740C
cmp ip, lr
beq _02237450
_02237438:
ldrb r0, [ip]
cmp r0, #0xff
bne _02237450
add ip, ip, #1
cmp ip, lr
bne _02237438
_02237450:
cmp ip, lr
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {lr}
bxeq lr
ldrb r0, [ip]
cmp r0, #0
movne r0, #0
addeq r0, ip, #1
subeq r1, lr, r0
streq r1, [r3]
streq r0, [r2]
moveq r0, #1
add sp, sp, #4
ldmia sp!, {lr}
bx lr
arm_func_end SkipPadding
arm_func_start ASN1Skip
ASN1Skip: ; 0x02237490
stmdb sp!, {r4, r5, r6, lr}
ldr r5, [r0]
mov r6, #0
ldrb r4, [r5]
add r5, r5, #1
mov ip, r6
cmp r4, r2
ldr r2, [r1]
movne r0, r6
ldmneia sp!, {r4, r5, r6, lr}
bxne lr
cmp r2, #1
movlo r0, r6
ldmloia sp!, {r4, r5, r6, lr}
bxlo lr
ldrb lr, [r5]
sub r4, r2, #1
ands r2, lr, #0x80
beq _0223752C
and r2, lr, #0x7f
and lr, r2, #0xff
add r2, lr, #1
cmp r4, r2
movlo r0, r6
ldmloia sp!, {r4, r5, r6, lr}
bxlo lr
cmp r3, #0
sub r6, r4, lr
beq _02237524
ldrb r2, [r5, #1]
add r5, r5, #1
and r4, r2, #0x7f
_02237510:
sub r2, lr, #1
add ip, r4, ip, lsl #7
ands lr, r2, #0xff
bne _02237510
b _02237548
_02237524:
add r5, r5, lr
b _02237548
_0223752C:
add r5, r5, #1
cmp r4, #1
mov ip, lr
movlo r0, r6
ldmloia sp!, {r4, r5, r6, lr}
bxlo lr
sub r6, r4, #1
_02237548:
str r5, [r0]
str r6, [r1]
cmp r3, #0
strne ip, [r3]
mov r0, #1
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_end ASN1Skip
arm_func_start CRYPTOi_RSA
CRYPTOi_RSA: ; 0x02237564
stmdb sp!, {r4, r5, r6, r7, r8, lr}
sub sp, sp, #0x58
movs r6, r0
mov r5, r1
mov r8, r2
mov r7, r3
beq _02237594
cmp r8, #0
beq _02237594
ldr r0, [sp, #0x70]
cmp r0, #0
bne _022375A4
_02237594:
add sp, sp, #0x58
mvn r0, #2
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
_022375A4:
bl BN_CTX_new
mov r4, r0
add r0, sp, #4
bl BN_init
add r0, sp, #0x18
bl BN_init
add r0, sp, #0x2c
bl BN_init
add r0, sp, #0x40
bl BN_init
cmp r4, #0
mvneq r5, #1
beq _02237680
add r2, sp, #4
mov r0, r8
mov r1, r7
bl BN_bin2bn
cmp r0, #0
mvneq r5, #1
beq _02237680
ldr r1, [sp, #0x78]
add r0, sp, #0x2c
bl BN_set_word
cmp r0, #0
mvneq r5, #1
beq _02237680
ldr r0, [sp, #0x70]
ldr r1, [sp, #0x74]
add r2, sp, #0x40
bl BN_bin2bn
cmp r0, #0
mvneq r5, #1
beq _02237680
add r0, sp, #0x18
add r1, sp, #4
add r2, sp, #0x2c
add r3, sp, #0x40
str r4, [sp]
bl BN_mod_exp
cmp r0, #0
mvneq r5, #1
beq _02237680
add r0, sp, #0x18
bl BN_num_bits
add r1, r0, #7
mov r0, r1, asr #2
add r0, r1, r0, lsr #29
mov r0, r0, asr #3
cmp r0, r5
mvngt r5, #0
bgt _02237680
add r0, sp, #0x18
mov r1, r6
bl BN_bn2bin
mov r5, r0
_02237680:
add r0, sp, #4
bl BN_free
add r0, sp, #0x18
bl BN_free
add r0, sp, #0x2c
bl BN_free
add r0, sp, #0x40
bl BN_free
cmp r4, #0
beq _022376B0
mov r0, r4
bl BN_CTX_free
_022376B0:
mov r0, r5
add sp, sp, #0x58
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
arm_func_end CRYPTOi_RSA
arm_func_start BN_mod_exp_mont
BN_mod_exp_mont: ; 0x022376C0
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x7c
mov r4, #0
mov r5, r3
mov r3, r4
str r3, [sp, #0x34]
ldr r3, [r5]
str r0, [sp, #4]
mov r0, r4
ldr r3, [r3]
str r0, [sp, #0x1c]
str r0, [sp, #0x20]
ands r0, r3, #1
ldr r0, [sp, #0xa0]
str r4, [sp, #8]
str r0, [sp, #0xa0]
mov r7, r1
mov r6, r2
addeq sp, sp, #0x7c
moveq r0, r4
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bxeq lr
ldr r1, [r7, #4]
ldr r0, [r0]
cmp r1, #0
str r0, [sp, #0xc]
beq _02237744
cmp r1, #1
bne _02237760
ldr r0, [r7]
ldr r0, [r0]
cmp r0, #0
bne _02237760
_02237744:
ldr r0, [sp, #4]
mov r1, #0
bl BN_set_word
add sp, sp, #0x7c
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_02237760:
ldr r1, [r6, #4]
cmp r1, #0
beq _02237784
cmp r1, #1
bne _022377A0
ldr r0, [r6]
ldr r0, [r0]
cmp r0, #0
bne _022377A0
_02237784:
ldr r0, [sp, #4]
mov r1, #1
bl BN_set_word
add sp, sp, #0x7c
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_022377A0:
cmp r1, #1
bne _022377D4
ldr r0, [r6]
ldr r0, [r0]
cmp r0, #1
bne _022377D4
ldr r0, [sp, #4]
mov r1, r7
bl BN_copy
add sp, sp, #0x7c
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_022377D4:
ldr r0, [sp, #0xa4]
str r0, [sp, #0x18]
cmp r0, #0
bne _02237808
bl BN_MONT_CTX_new
str r0, [sp, #0x18]
cmp r0, #0
beq _02237E64
ldr r2, [sp, #0xa0]
mov r1, r5
bl BN_MONT_CTX_set_word
cmp r0, #0
beq _02237E64
_02237808:
ldr r3, [sp, #0xa0]
add r1, sp, #0x34
mov r4, r3
ldr r4, [r4, #0x10c]
mov r0, r6
mov r2, #0
str r4, [sp, #0x1c]
bl BN_gen_exp_bits
cmp r0, #0
beq _02237E64
ldr r0, [sp, #0xa0]
ldr r0, [r0]
add r1, r0, #1
ldr r0, [sp, #0xa0]
str r1, [r0]
ldr r0, [sp, #0x34]
ldrb r1, [r0, #2]
ldrb r0, [r0, #3]
str r0, [sp, #0x10]
add r0, r1, #0x3f
bl _s32_div_f
ldr r1, [sp, #0x34]
mov r4, r0
add r0, r1, #4
str r0, [sp, #0x34]
ldr r0, [sp, #0x18]
ldr r3, [r7, #4]
ldr sl, [r0, #0x24]
cmp r3, sl
bne _022378A0
ldr r1, [r7]
sub r2, sl, #1
ldr r0, [r5]
ldr r1, [r1, r2, lsl #2]
ldr r0, [r0, r2, lsl #2]
cmp r1, r0
strlo r7, [sp, #0x14]
blo _02237958
_022378A0:
cmp r3, sl
bge _02237914
ldr r0, [sp, #0xa0]
ldr r3, [r0]
add r1, r0, #4
add r2, r3, #1
str r2, [r0]
mov r0, #0x14
mla r0, r3, r0, r1
ldr r2, [r7, #4]
mov r1, r0
str r2, [r1, #4]
mov r1, sl
str r0, [sp, #0x14]
bl bn_zexpand
ldr r0, [r7, #4]
mov r2, #0
cmp r0, #0
ble _02237958
_022378EC:
ldr r1, [r7]
ldr r0, [sp, #0x14]
ldr r1, [r1, r2, lsl #2]
ldr r0, [r0]
str r1, [r0, r2, lsl #2]
ldr r0, [r7, #4]
add r2, r2, #1
cmp r2, r0
blt _022378EC
b _02237958
_02237914:
ldr r0, [sp, #0xa0]
mov r2, r5
ldr r3, [r0]
mov r1, r7
add r5, r3, #1
str r5, [r0]
add r5, r0, #4
mov r0, #0x14
mla r0, r3, r0, r5
ldr r3, [sp, #0xa0]
str r0, [sp, #0x14]
bl BN_mod
cmp r0, #0
beq _02237E64
ldr r0, [sp, #0x14]
mov r1, sl
bl bn_zexpand
_02237958:
ldr r0, [sp, #0xa0]
ldr r3, [r0]
ldr r0, [r6, #4]
add r1, r3, #1
mul r2, r0, r4
ldr r0, [sp, #0xa0]
mov r4, r2, lsl #1
str r1, [r0]
ldr r1, [r0]
add r4, r4, #7
add r2, r1, #1
str r2, [r0]
ldr r2, [sp, #0x10]
ldr r0, [r0]
mul r5, r2, sl
mov r2, r4, asr #1
add r2, r4, r2, lsr #30
add r5, r5, r2, asr #2
ldr r2, [sp, #0xa0]
mov r6, #0x14
add r2, r2, #4
mla r8, r1, r6, r2
mla r4, r3, r6, r2
ldr r1, [sp, #0xa0]
add r3, r0, #1
mla r7, r0, r6, r2
str r3, [r1]
mov r0, r1
ldr r0, [r0]
mla r6, r0, r6, r2
add r1, r0, #1
ldr r0, [sp, #0xa0]
str r1, [r0]
ldr r0, [sp, #4]
ldr r0, [r0, #8]
cmp sl, r0
ldrle r0, [sp, #4]
ble _022379FC
ldr r0, [sp, #4]
mov r1, sl
bl bn_expand2
_022379FC:
cmp r0, #0
beq _02237E64
ldr r0, [r8, #8]
mov r1, sl, lsl #2
cmp r1, r0
movle r0, r8
ble _02237A20
mov r0, r8
bl bn_expand2
_02237A20:
cmp r0, #0
beq _02237E64
ldr r1, [r7, #8]
mov r0, sl, lsl #1
str r0, [sp, #0x24]
cmp r0, r1
movle r0, r7
ble _02237A4C
ldr r1, [sp, #0x24]
mov r0, r7
bl bn_expand2
_02237A4C:
cmp r0, #0
beq _02237E64
ldr r0, [r4, #8]
cmp r5, r0
movle r0, r4
ble _02237A70
mov r1, r5
mov r0, r4
bl bn_expand2
_02237A70:
cmp r0, #0
beq _02237E64
ldr r1, [r6, #8]
ldr r0, [sp, #0x24]
cmp r0, r1
movle r0, r6
ble _02237A98
ldr r1, [sp, #0x24]
mov r0, r6
bl bn_expand2
_02237A98:
cmp r0, #0
beq _02237E64
ldr r0, [sp, #0x18]
ldr fp, [r8]
ldr r8, [r7]
ldr r6, [r6]
ldr r1, [r4]
ldr r7, [r0, #0x48]
ldr r5, [r0, #0x20]
ldr r3, [sp, #0x18]
str r1, [sp, #0x38]
str sl, [sp]
ldr r1, [sp, #0x14]
ldr r3, [r3, #0xc]
ldr r1, [r1]
mov r0, r6
mov r2, sl
bl bn_mul_normal
str r7, [sp]
ldr r0, [sp, #0x38]
mov r1, r6
mov r2, r5
mov r3, sl
bl bn_from_montgomery_words
ldr r0, [sp, #0x10]
cmp r0, #1
ble _02237BA0
ldr r1, [sp, #0x38]
mov r0, r6
mov r2, sl
mov r3, fp
bl bn_sqr_normal
mov r0, fp
mov r1, r6
mov r2, r5
mov r3, sl
str r7, [sp]
bl bn_from_montgomery_words
ldr r0, [sp, #0x10]
mov r4, #1
cmp r0, #1
ble _02237BA0
mov r0, sl, lsl #2
str r0, [sp, #0x28]
add sb, sp, #0x38
_02237B4C:
sub r3, r4, #1
ldr r2, [sb, r3, lsl #2]
ldr r1, [sp, #0x28]
mov r0, r6
add r1, r2, r1
str r1, [sb, r4, lsl #2]
str sl, [sp]
ldr r1, [sb, r3, lsl #2]
mov r2, sl
mov r3, fp
bl bn_mul_normal
str r7, [sp]
ldr r0, [sb, r4, lsl #2]
mov r1, r6
mov r2, r5
mov r3, sl
bl bn_from_montgomery_words
ldr r0, [sp, #0x10]
add r4, r4, #1
cmp r4, r0
blt _02237B4C
_02237BA0:
ldr r3, [sp, #0x34]
add r0, r3, #1
str r0, [sp, #0x34]
add r2, r0, #1
ldrb r1, [r3]
str r2, [sp, #0x34]
ldrb sb, [r3, #1]
cmp sb, #0xff
bne _02237C20
cmp r1, #0
bne _02237C20
add r0, r2, #1
str r0, [sp, #0x34]
ldrb r1, [r2]
b _02237BF0
_02237BDC:
add sb, sb, #0x100
ldr r1, [sp, #0x34]
add r1, r1, #2
str r1, [sp, #0x34]
ldrb r1, [r0, #1]
_02237BF0:
ldr r0, [sp, #0x34]
ldrb r2, [r0]
cmp r2, #0xff
bne _02237C08
cmp r1, #0
beq _02237BDC
_02237C08:
ldr r2, [sp, #0x34]
add r2, r2, #1
str r2, [sp, #0x34]
ldrb r0, [r0]
add r0, r0, #1
add sb, sb, r0
_02237C20:
mov r2, r1, asr #1
add r0, sp, #0x38
ldr r0, [r0, r2, lsl #2]
mov r1, r8
mov r2, sl, lsl #2
bl MI_CpuCopy8
cmp sb, #0
beq _02237DF8
mov r0, #0xff
str r0, [sp, #0x2c]
mov r0, #0
str r0, [sp, #0x30]
_02237C50:
ldr r0, [sp, #0x1c]
cmp r0, #0
beq _02237C84
mov r3, r0
ldr r1, [sp, #0x2c]
ldr r2, [sp, #0x20]
ldr r3, [r3]
blx r3
cmp r0, #0
ldr r0, [sp, #0x20]
add r0, r0, #1
str r0, [sp, #0x20]
bne _02237E64
_02237C84:
ldr r0, [sp, #0xa0]
ldr r0, [r0, #0x108]
ands r0, r0, #0x4000
bne _02237E64
cmp sb, #0
ldr r4, [sp, #0x30]
ble _02237CD8
_02237CA0:
mov r0, r6
mov r1, r8
mov r2, sl
mov r3, fp
bl bn_sqr_normal
str r7, [sp]
mov r0, r8
mov r1, r6
mov r2, r5
mov r3, sl
bl bn_from_montgomery_words
add r4, r4, #1
cmp r4, sb
blt _02237CA0
_02237CD8:
ldr r2, [sp, #0x34]
add r0, r2, #1
str r0, [sp, #0x34]
add r1, r0, #1
ldrb r0, [r2]
str r1, [sp, #0x34]
ldrb sb, [r2, #1]
cmp sb, #0xff
bne _02237D58
cmp r0, #0
bne _02237D58
add r0, r1, #1
str r0, [sp, #0x34]
ldrb r0, [r1]
b _02237D28
_02237D14:
add sb, sb, #0x100
ldr r0, [sp, #0x34]
add r0, r0, #2
str r0, [sp, #0x34]
ldrb r0, [r1, #1]
_02237D28:
ldr r1, [sp, #0x34]
ldrb r2, [r1]
cmp r2, #0xff
bne _02237D40
cmp r0, #0
beq _02237D14
_02237D40:
ldr r2, [sp, #0x34]
add r2, r2, #1
str r2, [sp, #0x34]
ldrb r1, [r1]
add r1, r1, #1
add sb, sb, r1
_02237D58:
cmp r0, #0
bne _02237D68
cmp sb, #0
beq _02237DF8
_02237D68:
cmp sb, #0
bne _02237D78
cmp r0, #1
beq _02237DB4
_02237D78:
mov r1, r0, asr #1
str sl, [sp]
add r0, sp, #0x38
ldr r3, [r0, r1, lsl #2]
mov r0, r6
mov r1, r8
mov r2, sl
bl bn_mul_normal
mov r0, r8
mov r1, r6
mov r2, r5
mov r3, sl
str r7, [sp]
bl bn_from_montgomery_words
b _02237DF0
_02237DB4:
ldr r0, [sp, #0x14]
str sl, [sp]
ldr r3, [r0]
mov r0, r6
mov r1, r8
mov r2, sl
bl bn_mul_normal
ldr r0, [sp, #4]
str r7, [sp]
ldr r0, [r0]
mov r1, r6
mov r2, r5
mov r3, sl
bl bn_from_montgomery_words
b _02237E3C
_02237DF0:
cmp sb, #0
bne _02237C50
_02237DF8:
ldr r0, [sp, #0x24]
mov r2, sl
cmp sl, r0
bge _02237E20
mov r1, #0
_02237E0C:
ldr r0, [sp, #0x24]
str r1, [r8, r2, lsl #2]
add r2, r2, #1
cmp r2, r0
blt _02237E0C
_02237E20:
ldr r0, [sp, #4]
str r7, [sp]
ldr r0, [r0]
mov r1, r8
mov r2, r5
mov r3, sl
bl bn_from_montgomery_words
_02237E3C:
ldr r0, [sp, #0xa0]
ldr r0, [r0, #0x108]
ands r0, r0, #0x4000
bne _02237E64
ldr r0, [sp, #4]
mov r1, r0
str sl, [r1, #4]
bl bn_fix_top
mov r0, #1
str r0, [sp, #8]
_02237E64:
ldr r0, [sp, #0x1c]
cmp r0, #0
beq _02237E8C
ldr r3, [r0]
mov r1, #0xff
mvn r2, #0
blx r3
cmp r0, #0
movne r0, #0
strne r0, [sp, #8]
_02237E8C:
ldr r0, [sp, #0xa4]
cmp r0, #0
bne _02237EA8
ldr r0, [sp, #0x18]
cmp r0, #0
beq _02237EA8
bl BN_MONT_CTX_free
_02237EA8:
ldr r2, [sp, #0xc]
ldr r1, [sp, #0xa0]
ldr r0, [sp, #8]
str r2, [r1]
add sp, sp, #0x7c
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
arm_func_end BN_mod_exp_mont
arm_func_start BN_mod_exp_recp
BN_mod_exp_recp: ; 0x02237EC4
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x18c
mov sl, r0
mov r0, #0
str r0, [sp, #8]
mov r5, r1
ldr r1, [sp, #8]
mov r0, r2
str r2, [sp, #4]
mov r4, r3
str r1, [sp, #0xc]
ldr sb, [sp, #0x1b0]
bl BN_num_bits
ldr r1, [r5, #4]
mov r8, r0
cmp r1, #0
beq _02237F20
cmp r1, #1
bne _02237F3C
ldr r0, [r5]
ldr r0, [r0]
cmp r0, #0
bne _02237F3C
_02237F20:
mov r0, sl
mov r1, #0
bl BN_set_word
add sp, sp, #0x18c
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_02237F3C:
ldr r0, [sp, #4]
ldr r1, [r0, #4]
cmp r1, #0
beq _02237F64
cmp r1, #1
bne _02237F80
ldr r0, [r0]
ldr r0, [r0]
cmp r0, #0
bne _02237F80
_02237F64:
mov r0, sl
mov r1, #1
bl BN_set_word
add sp, sp, #0x18c
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_02237F80:
cmp r1, #1
bne _02237FB8
ldr r0, [sp, #4]
ldr r0, [r0]
ldr r0, [r0]
cmp r0, #1
bne _02237FB8
mov r0, sl
mov r1, r5
bl BN_copy
add sp, sp, #0x18c
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_02237FB8:
add r0, sp, #0x18
bl BN_RECP_CTX_init
add r0, sp, #0x18
mov r1, r4
mov r2, sb
bl BN_RECP_CTX_set
cmp r0, #0
ble _02238204
add r0, sp, #0x4c
bl BN_init
ldr r2, [sb]
add r1, sb, #4
mov r0, #0x14
mla r6, r2, r0, r1
add r1, r2, #1
str r1, [sb]
mov r2, r4
mov r4, #1
add r0, sp, #0x4c
mov r1, r5
mov r3, sb
str r4, [sp, #0xc]
bl BN_mod
cmp r0, #0
beq _02238204
add r1, sp, #0x4c
add r3, sp, #0x18
mov r0, r6
mov r2, r1
str sb, [sp]
bl BN_mod_mul_reciprocal
cmp r0, #0
beq _02238204
cmp r8, #0x11
movle fp, r4
ble _02238060
cmp r8, #0x100
movge fp, #5
bge _02238060
cmp r8, #0x80
movge fp, #4
movlt fp, #3
_02238060:
sub r0, fp, #1
mov r4, #1
mov r7, r4, lsl r0
cmp r7, #1
ble _022380BC
add r5, sp, #0x60
_02238078:
mov r0, r5
bl BN_init
sub r3, r4, #1
mov r2, #0x14
add r1, sp, #0x4c
mla r1, r3, r2, r1
mov r0, r5
mov r2, r6
add r3, sp, #0x18
str sb, [sp]
bl BN_mod_mul_reciprocal
cmp r0, #0
beq _02238204
add r4, r4, #1
cmp r4, r7
add r5, r5, #0x14
blt _02238078
_022380BC:
mov r5, #1
mov r0, sl
mov r1, r5
str r4, [sp, #0xc]
sub r8, r8, #1
bl BN_set_word
cmp r0, #0
beq _02238204
mov r0, r5
str r0, [sp, #0x10]
mov r0, #0
str r0, [sp, #0x14]
_022380EC:
ldr r0, [sp, #4]
mov r1, r8
bl BN_is_bit_set
cmp r0, #0
bne _02238138
cmp r5, #0
bne _02238128
mov r0, sl
mov r1, sl
mov r2, sl
add r3, sp, #0x18
str sb, [sp]
bl BN_mod_mul_reciprocal
cmp r0, #0
beq _02238204
_02238128:
cmp r8, #0
beq _022381FC
sub r8, r8, #1
b _022380EC
_02238138:
ldr r6, [sp, #0x10]
ldr r7, [sp, #0x14]
cmp fp, #1
mov r4, r6
ble _0223817C
_0223814C:
subs r1, r8, r4
bmi _0223817C
ldr r0, [sp, #4]
bl BN_is_bit_set
cmp r0, #0
subne r0, r4, r7
movne r0, r6, lsl r0
movne r7, r4
add r4, r4, #1
orrne r6, r0, #1
cmp r4, fp
blt _0223814C
_0223817C:
cmp r5, #0
add r5, r7, #1
bne _022381C0
cmp r5, #0
ldr r4, [sp, #0x14]
ble _022381C0
_02238194:
mov r0, sl
mov r1, sl
mov r2, sl
add r3, sp, #0x18
str sb, [sp]
bl BN_mod_mul_reciprocal
cmp r0, #0
beq _02238204
add r4, r4, #1
cmp r4, r5
blt _02238194
_022381C0:
mov r3, r6, asr #1
mov r1, #0x14
add r0, sp, #0x4c
mla r2, r3, r1, r0
mov r0, sl
mov r1, sl
add r3, sp, #0x18
str sb, [sp]
bl BN_mod_mul_reciprocal
cmp r0, #0
beq _02238204
add r0, r7, #1
ldr r5, [sp, #0x14]
subs r8, r8, r0
bpl _022380EC
_022381FC:
mov r0, #1
str r0, [sp, #8]
_02238204:
ldr r0, [sp, #0xc]
ldr r1, [sb]
cmp r0, #0
sub r0, r1, #1
str r0, [sb]
mov r4, #0
ble _02238240
add r5, sp, #0x4c
_02238224:
mov r0, r5
bl BN_clear_free
ldr r0, [sp, #0xc]
add r4, r4, #1
cmp r4, r0
add r5, r5, #0x14
blt _02238224
_02238240:
add r0, sp, #0x18
bl BN_RECP_CTX_free
ldr r0, [sp, #8]
add sp, sp, #0x18c
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
arm_func_end BN_mod_exp_recp
arm_func_start bn_div_words
bn_div_words: ; 0x02238258
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #4
movs r8, r2
mov sl, r0
mov sb, r1
mov fp, #0
mov r5, #2
addeq sp, sp, #4
mvneq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bxeq lr
mov r0, r8
bl BN_num_bits_word
cmp r0, #0x20
beq _022382AC
mov r1, #1
cmp sl, r1, lsl r0
addhi sp, sp, #4
movhi r0, fp
ldmhiia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bxhi lr
_022382AC:
cmp sl, r8
rsb r2, r0, #0x20
subhs sl, sl, r8
cmp r2, #0
movne r1, sl, lsl r2
rsbne r0, r2, #0x20
orrne sl, r1, sb, lsr r0
movne r8, r8, lsl r2
ldr r4, _02238394 ; =0x0000FFFF
movne sb, sb, lsl r2
and r7, r4, r8, lsr #16
and r6, r8, r4
_022382DC:
mov r0, sl, lsr #0x10
cmp r0, r7
moveq r0, r4
beq _022382F8
mov r0, sl
mov r1, r7
bl _u32_div_f
_022382F8:
mul ip, r0, r7
mul r3, r0, r6
and r2, r4, sb, lsr #16
_02238304:
mov lr, #0x10000
sub r1, sl, ip
rsb lr, lr, #0
ands lr, r1, lr
bne _02238330
add r1, r2, r1, lsl #16
cmp r3, r1
subhi ip, ip, r7
subhi r3, r3, r6
subhi r0, r0, #1
bhi _02238304
_02238330:
mul r2, r0, r6
and r1, r2, r4
mul r3, r0, r7
mov r1, r1, lsl #0x10
cmp sb, r1
add r2, r3, r2, lsr #16
addlo r2, r2, #1
cmp sl, r2
addlo sl, sl, r8
sub sb, sb, r1
sublo r0, r0, #1
sub r1, sl, r2
subs r5, r5, #1
beq _02238384
and r2, r0, r4
mov r1, r1, lsl #0x10
and r0, sb, r4
orr sl, r1, sb, lsr #16
mov fp, r2, lsl #0x10
mov sb, r0, lsl #0x10
b _022382DC
_02238384:
orr r0, fp, r0
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.balign 4, 0
_02238394: .word 0x0000FFFF
arm_func_end bn_div_words
arm_func_start BN_reciprocal
BN_reciprocal: ; 0x02238398
stmdb sp!, {r4, r5, r6, r7, r8, lr}
sub sp, sp, #0x18
mov r8, r0
add r0, sp, #4
mov r7, r1
mov r6, r2
mov r5, r3
mvn r4, #0
bl BN_init
add r0, sp, #4
mov r1, #0
bl BN_set_word
add r0, sp, #4
mov r1, r6
bl BN_set_bit
cmp r0, #0
beq _022383FC
add r2, sp, #4
mov r0, r8
mov r3, r7
mov r1, #0
str r5, [sp]
bl BN_div
cmp r0, #0
movne r4, r6
_022383FC:
add r0, sp, #4
bl BN_free
mov r0, r4
add sp, sp, #0x18
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
arm_func_end BN_reciprocal
arm_func_start BN_div_recp
BN_div_recp: ; 0x02238414
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
ldr r6, [sp, #0x30]
mov sb, r1
ldr fp, [r6]
movs sl, r0
add r0, fp, #1
str r0, [r6]
ldr r7, [r6]
add r4, r6, #4
mov r0, #0x14
mla r5, fp, r0, r4
add ip, r7, #1
mov r1, #0
str r5, [sp, #4]
mla r5, r7, r0, r4
str ip, [r6]
str r1, [sp]
ldreq r1, [r6]
mov r8, r2
mlaeq sl, r1, r0, r4
addeq r0, r1, #1
streq r0, [r6]
mov r7, r3
cmp sb, #0
bne _02238494
ldr r2, [r6]
add r1, r6, #4
mov r0, #0x14
mla sb, r2, r0, r1
add r0, r2, #1
str r0, [r6]
_02238494:
mov r0, r8
mov r1, r7
bl BN_ucmp
cmp r0, #0
bge _022384D4
mov r0, sl
mov r1, #0
bl BN_set_word
mov r0, sb
mov r1, r8
bl BN_copy
add sp, sp, #0xc
str fp, [r6]
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_022384D4:
mov r0, r8
bl BN_num_bits
ldr r1, [r7, #0x28]
mov r2, r0
mov r0, r1, lsl #1
cmp r0, r2
movgt r2, r0
suble r0, r2, r0
movgt r4, #0
addle r0, r0, r0, lsr #31
movle r4, r0, asr #1
ldr r1, [r7, #0x2c]
add r0, r2, r2, lsr #31
mov r0, r0, asr #1
cmp r2, r1
str r0, [sp, #8]
beq _0223852C
mov r1, r7
mov r3, r6
add r0, r7, #0x14
bl BN_reciprocal
str r0, [r7, #0x2c]
_0223852C:
ldr r2, [sp, #8]
ldr r0, [sp, #4]
mov r1, r8
sub r2, r2, r4
bl BN_rshift
cmp r0, #0
beq _0223867C
ldr r1, [sp, #4]
mov r0, r5
mov r3, r6
add r2, r7, #0x14
bl BN_mul
cmp r0, #0
beq _0223867C
ldr r2, [sp, #8]
mov r0, sl
mov r1, r5
add r2, r2, r4
bl BN_rshift
cmp r0, #0
beq _0223867C
mov r4, #0
mov r0, r5
mov r1, r7
mov r2, sl
mov r3, r6
str r4, [sl, #0xc]
bl BN_mul
cmp r0, #0
beq _0223867C
mov r0, sb
mov r1, r8
mov r2, r5
bl BN_usub
cmp r0, #0
beq _0223867C
mov r5, r4
mov r0, sb
mov r1, r7
str r5, [sb, #0xc]
bl BN_ucmp
cmp r0, #0
blt _02238628
mov r4, #1
_022385DC:
cmp r5, #2
add r5, r5, #1
bgt _0223867C
mov r0, sb
mov r1, sb
mov r2, r7
bl BN_usub
cmp r0, #0
beq _0223867C
mov r0, sl
mov r1, r4
bl BN_add_word
cmp r0, #0
beq _0223867C
mov r0, sb
mov r1, r7
bl BN_ucmp
cmp r0, #0
bge _022385DC
_02238628:
ldr r0, [sb, #4]
mov r1, #1
cmp r0, #0
beq _02238654
cmp r0, #1
bne _02238650
ldr r0, [sb]
ldr r0, [r0]
cmp r0, #0
beq _02238654
_02238650:
mov r1, #0
_02238654:
cmp r1, #0
movne r0, #0
ldreq r0, [r8, #0xc]
str r0, [sb, #0xc]
mov r0, #1
ldr r2, [r8, #0xc]
ldr r1, [r7, #0xc]
str r0, [sp]
eor r0, r2, r1
str r0, [sl, #0xc]
_0223867C:
ldr r0, [sp]
str fp, [r6]
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
arm_func_end BN_div_recp
arm_func_start BN_mod_mul_reciprocal
BN_mod_mul_reciprocal: ; 0x02238690
stmdb sp!, {r4, r5, r6, r7, r8, lr}
sub sp, sp, #8
ldr r4, [sp, #0x20]
mov ip, #0x14
ldr r5, [r4]
add lr, r4, #4
mla r6, r5, ip, lr
add ip, r5, #1
mov r8, r0
mov r7, r3
str ip, [r4]
cmp r2, #0
mov r5, #0
beq _02238700
cmp r1, r2
bne _022386E8
mov r0, r6
mov r2, r4
bl BN_sqr
cmp r0, #0
bne _02238704
b _02238720
_022386E8:
mov r0, r6
mov r3, r4
bl BN_mul
cmp r0, #0
bne _02238704
b _02238720
_02238700:
mov r6, r1
_02238704:
mov r1, r8
mov r2, r6
mov r3, r7
mov r0, #0
str r4, [sp]
bl BN_div_recp
mov r5, #1
_02238720:
ldr r1, [r4]
mov r0, r5
sub r1, r1, #1
str r1, [r4]
add sp, sp, #8
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
arm_func_end BN_mod_mul_reciprocal
arm_func_start BN_RECP_CTX_set
BN_RECP_CTX_set: ; 0x0223873C
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
mov r5, r0
mov r4, r1
bl BN_copy
add r0, r5, #0x14
mov r1, #0
bl BN_set_word
mov r0, r4
bl BN_num_bits
str r0, [r5, #0x28]
mov r0, #0
str r0, [r5, #0x2c]
mov r0, #1
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
bx lr
arm_func_end BN_RECP_CTX_set
arm_func_start BN_RECP_CTX_free
BN_RECP_CTX_free: ; 0x02238780
stmdb sp!, {r4, lr}
mov r4, r0
bl BN_free
add r0, r4, #0x14
bl BN_free
ldr r0, [r4, #0x30]
ands r0, r0, #1
ldmeqia sp!, {r4, lr}
bxeq lr
mov r0, r4
bl CRYPTOi_MyFree
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_RECP_CTX_free
arm_func_start BN_RECP_CTX_init
BN_RECP_CTX_init: ; 0x022387B4
stmdb sp!, {r4, lr}
mov r4, r0
bl BN_init
add r0, r4, #0x14
bl BN_init
mov r0, #0
str r0, [r4, #0x28]
str r0, [r4, #0x30]
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_RECP_CTX_init
arm_func_start BN_MONT_CTX_free
BN_MONT_CTX_free: ; 0x022387DC
stmdb sp!, {r4, lr}
mov r4, r0
add r0, r4, #0xc
bl BN_free
add r0, r4, #0x20
bl BN_free
add r0, r4, #0x34
bl BN_free
ldr r0, [r4, #0x4c]
ands r0, r0, #1
ldmeqia sp!, {r4, lr}
bxeq lr
mov r0, r4
bl CRYPTOi_MyFree
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_MONT_CTX_free
arm_func_start BN_MONT_CTX_init
BN_MONT_CTX_init: ; 0x0223881C
stmdb sp!, {r4, lr}
mov r4, r0
mov r1, #0
str r1, [r4]
add r0, r4, #0xc
str r1, [r4, #8]
bl BN_init
add r0, r4, #0x20
bl BN_init
add r0, r4, #0x34
bl BN_init
mov r0, #0
str r0, [r4, #0x4c]
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_MONT_CTX_init
arm_func_start BN_MONT_CTX_new
BN_MONT_CTX_new: ; 0x02238858
stmdb sp!, {r4, lr}
mov r0, #0x50
bl CRYPTOi_MyAlloc
movs r4, r0
moveq r0, #0
ldmeqia sp!, {r4, lr}
bxeq lr
bl BN_MONT_CTX_init
mov r1, #1
mov r0, r4
str r1, [r4, #0x4c]
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_MONT_CTX_new
arm_func_start BN_MONT_CTX_set_word
BN_MONT_CTX_set_word: ; 0x0223888C
stmdb sp!, {r4, r5, r6, r7, lr}
sub sp, sp, #0x14
mov r6, r1
ldr r3, [r6, #4]
mov r7, r0
cmp r3, #0
mov r5, r2
addeq sp, sp, #0x14
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, lr}
bxeq lr
add r0, r7, #0x20
add r4, r7, #0xc
bl BN_copy
cmp r0, #0
addeq sp, sp, #0x14
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, lr}
bxeq lr
add r0, sp, #0
bl BN_init
mov r1, #1
mov r0, r6
str r1, [r7]
bl BN_num_bits
add r1, r0, #0x1f
mov r0, r1, asr #4
add r0, r1, r0, lsr #27
mov r2, r0, asr #5
mov r0, r4
mov r1, #0
str r2, [r7, #8]
bl BN_set_word
cmp r0, #0
addeq sp, sp, #0x14
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, lr}
bxeq lr
mov r0, r4
mov r1, #0x20
bl BN_set_bit
cmp r0, #0
beq _02238A30
ldr r0, [r6]
ldr r4, [r0]
mov r0, r4
bl BN_mod_inverse_word
mov r1, r0
add r0, sp, #0
bl BN_set_word
cmp r0, #0
beq _02238A30
add r0, sp, #0
mov r2, #0x20
mov r1, r0
bl BN_lshift
cmp r0, #0
beq _02238A30
ldr r0, [sp, #4]
cmp r0, #0
beq _022389A8
cmp r0, #1
bne _02238998
ldr r0, [sp]
ldr r0, [r0]
cmp r0, #0
beq _022389A8
_02238998:
add r0, sp, #0
mov r1, #1
bl BN_sub_word
b _022389BC
_022389A8:
add r0, sp, #0
mvn r1, #0
bl BN_set_word
cmp r0, #0
beq _02238A30
_022389BC:
ldr r2, [sp, #4]
cmp r2, #1
ldrge r0, [sp]
ldrge r1, [r0]
movlt r1, #0
cmp r2, #2
ldrge r0, [sp]
mov r2, r4
ldrge r0, [r0, #4]
movlt r0, #0
bl bn_div_words
str r0, [r7, #0x48]
add r0, r7, #0xc
mov r1, #0
bl BN_set_word
ldr r1, [r7, #8]
add r0, r7, #0xc
mov r1, r1, lsl #6
bl BN_set_bit
cmp r0, #0
beq _02238A30
add r0, r7, #0xc
mov r1, r0
mov r3, r5
add r2, r7, #0x20
bl BN_mod
ldr r1, [r7, #8]
add r0, r7, #0xc
bl bn_zexpand
_02238A30:
add r0, sp, #0
bl BN_free
mov r0, #1
add sp, sp, #0x14
ldmia sp!, {r4, r5, r6, r7, lr}
bx lr
arm_func_end BN_MONT_CTX_set_word
arm_func_start BN_gen_exp_string
BN_gen_exp_string: ; 0x02238A48
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
mov r4, r2
mov r7, r1
cmp r4, #6
mov r5, r0
movgt r4, #6
mov r1, #1
mov r2, r1, lsl r4
ldr r0, [r7, #4]
sub r2, r2, #1
add r0, r4, r0, lsl #5
ldr r3, _02238C1C ; =shift_val
str r2, [sp]
ldr r2, [r3, r4, lsl #2]
mov r1, r4
sub r0, r0, #1
str r2, [sp, #4]
mov r6, #0
bl _s32_div_f
mov ip, #0
mov r0, r0, lsl #1
add r0, r0, #2
mov r8, r6
add r1, r5, r0
strb r8, [r5, r0]
strb r8, [r1, #-1]
ldr r0, [r7]
ldr r2, [r7, #4]
ldr r7, [r0]
add lr, r0, #4
cmp r2, #1
sub sb, r1, #2
ldrgt r8, [lr], #4
mov sl, r7
mov r0, ip
str ip, [sp, #8]
mov r1, #0xff
mov fp, ip
_02238AE4:
ldr r3, [sp]
and r3, sl, r3
ldr sl, [sp, #4]
ldrb sl, [sl, r3]
cmp sl, #0
beq _02238B44
add ip, ip, sl
add r6, r6, sl
cmp r6, #0x20
blo _02238B2C
cmp r2, #1
ble _02238B44
sub r2, r2, #1
mov r7, r8
cmp r2, #1
movle r8, fp
ldrgt r8, [lr], #4
sub r6, r6, #0x20
_02238B2C:
cmp r6, #0
moveq sl, r7
movne sl, r7, lsr r6
rsbne r3, r6, #0x20
orrne sl, sl, r8, lsl r3
b _02238AE4
_02238B44:
cmp r3, #0
beq _02238BC8
strb ip, [sb]
strb r3, [sb, #-1]
cmp ip, #0x100
sub sb, sb, #2
blo _02238B80
cmp ip, #0x100
blo _02238B80
_02238B68:
strb r1, [sb]
sub ip, ip, #0x100
strb r0, [sb, #-1]
sub sb, sb, #2
cmp ip, #0x100
bhs _02238B68
_02238B80:
mov ip, r4
add r6, r6, r4
cmp r6, #0x20
blo _02238BB0
cmp r2, #1
ble _02238BC8
sub r2, r2, #1
mov r7, r8
cmp r2, #1
ldrle r8, [sp, #8]
sub r6, r6, #0x20
ldrgt r8, [lr], #4
_02238BB0:
cmp r6, #0
moveq sl, r7
movne sl, r7, lsr r6
rsbne r3, r6, #0x20
orrne sl, sl, r8, lsl r3
b _02238AE4
_02238BC8:
add sb, sb, #1
mov r0, #2
b _02238BEC
_02238BD4:
strb r2, [r5]
ldrb r1, [sb, #1]
add sb, sb, #2
add r0, r0, #2
strb r1, [r5, #1]
add r5, r5, #2
_02238BEC:
ldrb r2, [sb]
cmp r2, #0
bne _02238BD4
ldrb r1, [sb, #1]
cmp r1, #0
bne _02238BD4
mov r1, #0
strb r1, [r5]
strb r1, [r5, #1]
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.balign 4, 0
_02238C1C: .word shift_val
arm_func_end BN_gen_exp_string
arm_func_start BN_gen_exp_bits
BN_gen_exp_bits: ; 0x02238C20
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #4
ldr r5, [r3], #4
mov r2, #0x14
mla r4, r5, r2, r3
mov sb, r0
ldr r0, [sb, #4]
mov r8, r1
cmp r0, #0
mov r5, #0
mov r1, r0, lsl #5
addeq sp, sp, #4
moveq r0, r5
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxeq lr
cmp r0, #1
bne _02238CC0
cmp r0, #1
bne _02238C84
ldr r2, [sb]
ldr r1, _02238D84 ; =0x00010001
ldr r2, [r2]
cmp r2, r1
ldreq r5, _02238D88 ; =TEMPNAME__$p16
beq _02238CB0
_02238C84:
ldr r1, [sb]
ldr r1, [r1]
cmp r1, #0x11
bne _02238CA0
cmp r0, #1
ldreq r5, _02238D8C ; =TEMPNAME__$p4
beq _02238CB0
_02238CA0:
cmp r1, #3
bne _02238CB0
cmp r0, #1
ldreq r5, _02238D90 ; =TEMPNAME__$p2
_02238CB0:
mov r7, #1
mov r6, r7
mov r1, #0x20
b _02238CF0
_02238CC0:
cmp r1, #0x100
movge r7, #5
movge r6, #0x10
movge r1, #7
bge _02238CF0
cmp r1, #0x80
movge r6, #8
movge r1, r6
movge r7, #4
movlt r7, #3
movlt r6, #4
movlt r1, #0xb
_02238CF0:
mul r1, r0, r1
mov r0, r1, lsl #1
add r1, r0, #7
mov r0, r1, asr #1
add r0, r1, r0, lsr #30
cmp r5, #0
mov r1, r0, asr #2
bne _02238D6C
ldr r0, [r4, #8]
cmp r1, r0
movle r0, r4
ble _02238D28
mov r0, r4
bl bn_expand2
_02238D28:
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxeq lr
ldr r5, [r4]
mov r1, sb
mov r2, r7
add r0, r5, #4
bl BN_gen_exp_string
add r1, r0, #2
mov r0, r1, asr #8
strb r0, [r5]
strb r1, [r5, #1]
strb r7, [r5, #2]
strb r6, [r5, #3]
b _02238D70
_02238D6C:
mov r1, #8
_02238D70:
str r5, [r8]
add r0, r1, #2
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, sb, lr}
bx lr
.balign 4, 0
_02238D84: .word 0x00010001
_02238D88: .word TEMPNAME__$p16
_02238D8C: .word TEMPNAME__$p4
_02238D90: .word TEMPNAME__$p2
arm_func_end BN_gen_exp_bits
arm_func_start BN_mod_inverse_word
BN_mod_inverse_word: ; 0x02238D94
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
mov sl, r0
mov r1, sl
rsb r0, sl, #0
bl _u32_div_f
movs r8, r1
mov r7, sl
mov r5, #0
mov r6, #1
mvn r4, #0
beq _02238DFC
_02238DC0:
mov r0, r7
mov r1, r8
bl _u32_div_f
mov sb, r1
mov r0, r7
mov r1, r8
bl _u32_div_f
mla r1, r0, r6, r5
mov r5, r6
mov r7, r8
mov r6, r1
mov r8, sb
cmp sb, #0
rsb r4, r4, #0
bne _02238DC0
_02238DFC:
cmp r4, #0
sublt r5, sl, r5
cmp r7, #1
movne r1, #0
bne _02238E1C
mov r0, r5
mov r1, sl
bl _u32_div_f
_02238E1C:
mov r0, r1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
arm_func_end BN_mod_inverse_word
arm_func_start bn_from_montgomery_words
bn_from_montgomery_words: ; 0x02238E28
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
mov r7, r3
mov sb, r1
mov r6, #0
mov sl, r0
mov r8, r2
mov r4, r6
cmp r7, #0
add r5, sb, r7, lsl #2
ldr fp, [sp, #0x30]
ble _02238EB8
mov r0, #1
str r6, [sp, #4]
str r0, [sp]
_02238E64:
ldr r1, [sb]
mov r0, sb
mul r3, r1, fp
mov r1, r8
mov r2, r7
bl bn_mul_add_words
add r1, r0, r6
ldr r0, [r5]
cmp r1, r6
ldrlo r6, [sp]
add r0, r0, r1
str r0, [r5]
ldr r0, [r5]
ldrhs r6, [sp, #4]
cmp r0, r1
add r4, r4, #1
addlo r6, r6, #1
cmp r4, r7
add sb, sb, #4
add r5, r5, #4
blt _02238E64
_02238EB8:
cmp r6, #0
sub r2, r7, #1
bne _02238F0C
ldr r1, [sb, r2, lsl #2]
ldr r0, [r8, r2, lsl #2]
cmp r1, r0
bne _02238EF8
cmp r2, #0
ble _02238EF8
_02238EDC:
ldr r1, [sb, r2, lsl #2]
ldr r0, [r8, r2, lsl #2]
cmp r1, r0
bne _02238EF8
sub r2, r2, #1
cmp r2, #0
bgt _02238EDC
_02238EF8:
ldr r1, [sb, r2, lsl #2]
ldr r0, [r8, r2, lsl #2]
cmp r1, r0
movhs r6, #1
movlo r6, #0
_02238F0C:
cmp r6, #0
beq _02238F34
mov r0, sl
mov r1, sb
mov r2, r8
mov r3, r7
bl bn_sub_words
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_02238F34:
cmp r7, #0
addle sp, sp, #0xc
mov r1, #0
ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bxle lr
_02238F48:
ldr r0, [sb, r1, lsl #2]
str r0, [sl, r1, lsl #2]
add r1, r1, #1
cmp r1, r7
blt _02238F48
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
arm_func_end bn_from_montgomery_words
arm_func_start bn_sqr_normal
bn_sqr_normal: ; 0x02238F68
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #4
mov fp, r2
mov r6, fp, lsl #1
mov sl, r0
mov r7, fp
mov sb, r1
sub r7, r7, #1
sub r2, r6, #1
mov r0, #0
str r0, [sl, r2, lsl #2]
ldr r0, [sl, r2, lsl #2]
str r3, [sp]
mov r5, sb
str r0, [sl]
cmp r7, #0
add r4, sl, #4
ble _02238FD0
add r5, r5, #4
ldr r3, [sb]
mov r0, r4
mov r1, r5
mov r2, r7
bl bn_mul_words
str r0, [r4, r7, lsl #2]
add r4, r4, #8
_02238FD0:
sub r8, fp, #2
cmp r8, #0
ble _02239010
_02238FDC:
mov r0, r5
sub r7, r7, #1
add r5, r5, #4
ldr r3, [r0]
mov r0, r4
mov r1, r5
mov r2, r7
bl bn_mul_add_words
sub r8, r8, #1
str r0, [r4, r7, lsl #2]
cmp r8, #0
add r4, r4, #8
bgt _02238FDC
_02239010:
mov r0, sl
mov r1, sl
mov r2, sl
mov r3, r6
bl bn_add_words
ldr r0, [sp]
mov r1, sb
mov r2, fp
bl bn_sqr_words
ldr r2, [sp]
mov r0, sl
mov r1, sl
mov r3, r6
bl bn_add_words
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
arm_func_end bn_sqr_normal
arm_func_start BN_sqr
BN_sqr: ; 0x02239054
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #0x64
ldr r5, [r2]
mov sb, r0
mov r8, r1
cmp r8, sb
add r3, r2, #4
mov r2, #0x14
movne r7, sb
addeq r0, r5, #1
mla r4, r5, r2, r3
mlaeq r7, r0, r2, r3
ldr r5, [r8, #4]
cmp r5, #0
movle r0, #0
strle r0, [sb, #4]
addle sp, sp, #0x64
movle r0, #1
ldmleia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxle lr
ldr r0, [r7, #8]
mov r6, r5, lsl #1
cmp r6, r0
movle r0, r7
ble _022390C4
mov r0, r7
mov r1, r6
bl bn_expand2
_022390C4:
cmp r0, #0
addeq sp, sp, #0x64
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxeq lr
str r6, [r7, #4]
mov r0, #0
str r0, [r7, #0xc]
cmp r5, #4
bne _02239104
ldr r0, [r7]
ldr r1, [r8]
add r3, sp, #0
mov r2, #4
bl bn_sqr_normal
b _02239168
_02239104:
cmp r5, #8
bne _02239124
ldr r0, [r7]
ldr r1, [r8]
add r3, sp, #0x20
mov r2, #8
bl bn_sqr_normal
b _02239168
_02239124:
ldr r0, [r4, #8]
cmp r6, r0
movle r0, r4
ble _02239140
mov r0, r4
mov r1, r6
bl bn_expand2
_02239140:
cmp r0, #0
addeq sp, sp, #0x64
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxeq lr
ldr r0, [r7]
ldr r1, [r8]
ldr r3, [r4]
mov r2, r5
bl bn_sqr_normal
_02239168:
cmp r6, #0
ble _0223918C
ldr r1, [r7]
sub r0, r6, #1
ldr r0, [r1, r0, lsl #2]
cmp r0, #0
ldreq r0, [r7, #4]
subeq r0, r0, #1
streq r0, [r7, #4]
_0223918C:
cmp r7, sb
beq _022391A0
mov r0, sb
mov r1, r7
bl BN_copy
_022391A0:
mov r0, #1
add sp, sp, #0x64
ldmia sp!, {r4, r5, r6, r7, r8, sb, lr}
bx lr
arm_func_end BN_sqr
arm_func_start BN_mod_exp
BN_mod_exp: ; 0x022391B0
stmdb sp!, {lr}
sub sp, sp, #0xc
ldr ip, [r3, #4]
cmp ip, #0
ble _022391F4
ldr ip, [r3]
ldr ip, [ip]
ands ip, ip, #1
beq _022391F4
ldr lr, [sp, #0x10]
mov ip, #0
str lr, [sp]
str ip, [sp, #4]
bl BN_mod_exp_mont
add sp, sp, #0xc
ldmia sp!, {lr}
bx lr
_022391F4:
ldr ip, [sp, #0x10]
str ip, [sp]
bl BN_mod_exp_recp
add sp, sp, #0xc
ldmia sp!, {lr}
bx lr
arm_func_end BN_mod_exp
arm_func_start BN_mod
BN_mod: ; 0x0223920C
stmdb sp!, {lr}
sub sp, sp, #4
mov lr, r1
mov ip, r2
str r3, [sp]
mov r1, r0
mov r2, lr
mov r3, ip
mov r0, #0
bl BN_div
add sp, sp, #4
ldmia sp!, {lr}
bx lr
arm_func_end BN_mod
arm_func_start BN_div
BN_div: ; 0x02239240
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x4c
mov r6, r3
ldr r3, [r6, #4]
mov r8, r0
str r1, [sp]
str r2, [sp, #4]
cmp r3, #0
ldr r4, [sp, #0x70]
beq _02239280
cmp r3, #1
bne _02239290
ldr r0, [r6]
ldr r0, [r0]
cmp r0, #0
bne _02239290
_02239280:
add sp, sp, #0x4c
mov r0, #0
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_02239290:
ldr r0, [sp, #4]
mov r1, r6
bl BN_ucmp
cmp r0, #0
bge _022392F0
ldr r0, [sp]
cmp r0, #0
beq _022392CC
ldr r1, [sp, #4]
bl BN_copy
cmp r0, #0
addeq sp, sp, #0x4c
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bxeq lr
_022392CC:
cmp r8, #0
beq _022392E0
mov r0, r8
mov r1, #0
bl BN_set_word
_022392E0:
add sp, sp, #0x4c
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_022392F0:
ldr r3, [r4]
add r0, r4, #4
mov r2, #0x14
mla r1, r3, r2, r0
mov r3, #0
str r3, [r1, #0xc]
ldr r5, [r4]
str r1, [sp, #0x14]
add r4, r5, #1
mla r1, r4, r2, r0
add r3, r5, #2
str r1, [sp, #0x18]
mla r1, r3, r2, r0
cmp r8, #0
str r1, [sp, #0x1c]
addeq r1, r5, #3
mlaeq r8, r1, r2, r0
mov r0, r6
bl BN_num_bits
mov r1, r0, lsr #0x1f
rsb r0, r1, r0, lsl #27
add r0, r1, r0, ror #27
rsb r0, r0, #0x20
str r0, [sp, #8]
ldr r0, [sp, #0x1c]
ldr r2, [sp, #8]
mov r1, r6
bl BN_lshift
cmp r0, #0
addeq sp, sp, #0x4c
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bxeq lr
ldr r2, [sp, #8]
ldr r0, [sp, #0x18]
ldr r1, [sp, #4]
ldr r3, [sp, #0x1c]
mov r4, #0
add r2, r2, #0x20
str r4, [r3, #0xc]
bl BN_lshift
cmp r0, #0
addeq sp, sp, #0x4c
moveq r0, r4
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bxeq lr
ldr r0, [sp, #0x18]
mov r1, r4
str r1, [r0, #0xc]
ldr r0, [sp, #0x1c]
ldr r0, [r0, #4]
str r0, [sp, #0x28]
ldr r0, [sp, #0x18]
ldr r1, [sp, #0x28]
ldr r4, [r0, #4]
add r0, sp, #0x38
sub r1, r4, r1
str r1, [sp, #0x10]
bl BN_init
ldr r0, [sp, #0x18]
ldr r2, [r0]
ldr r0, [sp, #0x28]
sub r1, r0, #1
ldr r0, [sp, #0x10]
add r0, r2, r0, lsl #2
str r0, [sp, #0x38]
ldr r0, [sp, #0x28]
str r0, [sp, #0x3c]
ldr r0, [sp, #0x18]
ldr r2, [r0, #8]
ldr r0, [sp, #0x28]
cmp r0, #1
add r0, r2, #1
str r0, [sp, #0x40]
ldr r0, [sp, #0x1c]
moveq r5, #0
ldr r2, [r0]
ldr r0, [r2, r1, lsl #2]
str r0, [sp, #0x24]
ldrne r0, [sp, #0x28]
subne r0, r0, #2
ldrne r5, [r2, r0, lsl #2]
ldr r0, [sp, #0x18]
ldr r2, [r8, #8]
ldr r1, [r0]
sub r0, r4, #1
add r7, r1, r0, lsl #2
ldr r0, [sp, #0x10]
add r1, r0, #1
cmp r1, r2
movle r0, r8
ble _02239468
mov r0, r8
bl bn_expand2
_02239468:
cmp r0, #0
beq _022397CC
ldr r0, [sp, #4]
ldr r1, [r6, #0xc]
ldr r3, [r0, #0xc]
ldr r0, [sp, #0x10]
sub r2, r0, #1
eor r0, r3, r1
str r0, [r8, #0xc]
ldr r0, [sp, #0x10]
str r0, [r8, #4]
ldr r0, [sp, #0x28]
ldr r3, [r8]
add r1, r0, #1
add r0, r3, r2, lsl #2
str r0, [sp, #0x20]
ldr r0, [sp, #0x14]
ldr r0, [r0, #8]
cmp r1, r0
ldrle r0, [sp, #0x14]
ble _022394C4
ldr r0, [sp, #0x14]
bl bn_expand2
_022394C4:
cmp r0, #0
beq _022397CC
ldr r1, [sp, #0x1c]
add r0, sp, #0x38
bl BN_ucmp
cmp r0, #0
blt _02239518
add r0, sp, #0x38
ldr r2, [sp, #0x1c]
mov r1, r0
bl BN_usub
cmp r0, #0
beq _022397CC
ldr r0, [sp, #0x20]
mov r2, #1
str r2, [r0]
ldr r0, [r8, #4]
ldr r1, [r8]
sub r0, r0, #1
str r2, [r1, r0, lsl #2]
b _02239524
_02239518:
ldr r0, [r8, #4]
sub r0, r0, #1
str r0, [r8, #4]
_02239524:
ldr r0, [sp, #0x10]
sub r1, r0, #1
ldr r0, [sp, #0x20]
cmp r1, #0
sub r0, r0, #4
str r0, [sp, #0x20]
mov r0, #0
str r0, [sp, #0xc]
ble _02239774
ldr r8, _022397DC ; =0x0000FFFF
cmp r1, #0
and r0, r5, r8
str r0, [sp, #0x2c]
and r0, r8, r5, lsr #16
str r0, [sp, #0x30]
ldr r0, [sp, #0x24]
and r4, r0, r8
ble _02239774
and sb, r8, r0, lsr #16
mvn r0, #0
str r0, [sp, #0x34]
_02239578:
ldr r1, [sp, #0x38]
ldr r0, [sp, #0x3c]
sub r1, r1, #4
add r0, r0, #1
str r0, [sp, #0x3c]
str r1, [sp, #0x38]
ldr fp, [r7]
ldr r0, [sp, #0x24]
ldr r5, [r7, #-4]
cmp fp, r0
ldreq r6, [sp, #0x34]
beq _022395BC
ldr r2, [sp, #0x24]
mov r0, fp
mov r1, r5
bl bn_div_words
mov r6, r0
_022395BC:
ldr r0, [sp, #0x2c]
and r2, r6, r8
mul ip, r0, r2
ldr r0, [sp, #0x30]
and lr, r8, r6, lsr #16
ldr r1, [sp, #0x30]
mul r0, r2, r0
mul r3, r1, lr
ldr r1, [sp, #0x2c]
mul sl, sb, lr
mla r1, lr, r1, r0
cmp r1, r0
addlo r3, r3, #0x10000
and r0, r8, r1, lsr #16
add r3, r3, r0
and r0, r1, r8
add ip, ip, r0, lsl #16
cmp ip, r0, lsl #16
mul r0, r2, sb
mul r1, r4, r2
mla r2, lr, r4, r0
addlo r3, r3, #1
cmp r2, r0
addlo sl, sl, #0x10000
and r0, r8, r2, lsr #16
add sl, sl, r0
and r0, r2, r8
add r1, r1, r0, lsl #16
cmp r1, r0, lsl #16
addlo sl, sl, #1
sub r1, r5, r1
cmp r1, r5
addhi sl, sl, #1
subs r0, fp, sl
bne _0223966C
cmp r3, r1
blo _0223966C
cmp r3, r1
bne _02239664
ldr r0, [r7, #-8]
cmp ip, r0
bls _0223966C
_02239664:
sub r6, r6, #1
b _022395BC
_0223966C:
ldr r0, [sp, #0x14]
ldr r1, [sp, #0x1c]
ldr r0, [r0]
ldr r1, [r1]
ldr r2, [sp, #0x28]
mov r3, r6
bl bn_mul_words
ldr r1, [sp, #0x14]
ldr r2, [sp, #0x28]
ldr r3, [r1]
ldr r1, [sp, #0x28]
str r0, [r3, r2, lsl #2]
add r1, r1, #1
cmp r1, #0
ble _022396CC
ldr r0, [sp, #0x14]
ldr r2, [r0]
_022396B0:
sub r0, r1, #1
ldr r0, [r2, r0, lsl #2]
cmp r0, #0
bne _022396CC
sub r1, r1, #1
cmp r1, #0
bgt _022396B0
_022396CC:
ldr r0, [sp, #0x14]
ldr r2, [sp, #0x14]
str r1, [r0, #4]
add r0, sp, #0x38
mov r1, r0
ldr r5, [sp, #0x3c]
bl BN_sub
ldr r0, [sp, #0x18]
ldr r1, [r0, #4]
ldr r0, [sp, #0x3c]
add r0, r1, r0
sub r1, r0, r5
ldr r0, [sp, #0x18]
str r1, [r0, #4]
ldr r0, [sp, #0x44]
cmp r0, #0
beq _02239744
add r0, sp, #0x38
ldr r2, [sp, #0x1c]
mov r1, r0
sub r6, r6, #1
ldr r5, [sp, #0x3c]
bl BN_add
ldr r0, [sp, #0x18]
ldr r1, [r0, #4]
ldr r0, [sp, #0x3c]
sub r0, r0, r5
add r1, r1, r0
ldr r0, [sp, #0x18]
str r1, [r0, #4]
_02239744:
ldr r0, [sp, #0x20]
sub r7, r7, #4
str r6, [r0], #-4
str r0, [sp, #0x20]
ldr r0, [sp, #0xc]
add r0, r0, #1
str r0, [sp, #0xc]
ldr r0, [sp, #0x10]
sub r1, r0, #1
ldr r0, [sp, #0xc]
cmp r0, r1
blt _02239578
_02239774:
ldr r0, [sp, #0x18]
bl bn_fix_top
ldr r0, [sp]
cmp r0, #0
beq _022397BC
ldr r2, [sp, #8]
ldr r3, [sp, #4]
ldr r1, [sp, #0x18]
add r2, r2, #0x20
ldr r4, [r3, #0xc]
bl BN_rshift
cmp r0, #0
addeq sp, sp, #0x4c
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bxeq lr
ldr r0, [sp]
str r4, [r0, #0xc]
_022397BC:
add sp, sp, #0x4c
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_022397CC:
mov r0, #0
add sp, sp, #0x4c
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.balign 4, 0
_022397DC: .word 0x0000FFFF
arm_func_end BN_div
arm_func_start bn_mul_normal
bn_mul_normal: ; 0x022397E0
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #4
ldr r5, [sp, #0x20]
mov r7, r2
mov sb, r0
mov r8, r1
mov r6, r3
cmp r7, r5
bge _0223981C
mov r1, r7
mov r0, r8
mov r7, r5
mov r8, r6
mov r5, r1
mov r6, r0
_0223981C:
ldr r3, [r6]
mov r0, sb
mov r1, r8
mov r2, r7
add r4, sb, r7, lsl #2
bl bn_mul_words
str r0, [sb, r7, lsl #2]
_02239838:
sub r0, r5, #1
cmp r0, #0
addle sp, sp, #4
ldmleia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxle lr
ldr r3, [r6, #4]
mov r1, r8
mov r2, r7
add r0, sb, #4
bl bn_mul_add_words
sub r1, r5, #2
cmp r1, #0
addle sp, sp, #4
str r0, [r4, #4]
ldmleia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxle lr
ldr r3, [r6, #8]
mov r1, r8
mov r2, r7
add r0, sb, #8
bl bn_mul_add_words
sub r1, r5, #3
cmp r1, #0
addle sp, sp, #4
str r0, [r4, #8]
ldmleia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxle lr
ldr r3, [r6, #0xc]
mov r1, r8
mov r2, r7
add r0, sb, #0xc
bl bn_mul_add_words
sub r5, r5, #4
cmp r5, #0
addle sp, sp, #4
str r0, [r4, #0xc]
ldmleia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxle lr
ldr r3, [r6, #0x10]
mov r1, r8
mov r2, r7
add r0, sb, #0x10
bl bn_mul_add_words
str r0, [r4, #0x10]
add r4, r4, #0x10
add sb, sb, #0x10
add r6, r6, #0x10
b _02239838
_022398F8:
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, sb, lr}
bx lr
arm_func_end bn_mul_normal
arm_func_start BN_mul
BN_mul: ; 0x02239904
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #4
mov sb, r1
ldr r6, [sb, #4]
mov r8, r2
mov sl, r0
cmp r6, #0
ldr r5, [r8, #4]
beq _02239930
cmp r5, #0
bne _0223994C
_02239930:
mov r0, sl
mov r1, #0
bl BN_set_word
add sp, sp, #4
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
_0223994C:
ldr r1, [sb, #0xc]
ldr r0, [r8, #0xc]
cmp sl, sb
add r7, r6, r5
eor fp, r1, r0
beq _0223996C
cmp sl, r8
bne _02239984
_0223996C:
ldr r0, [r3]
add r2, r3, #4
add r1, r0, #1
mov r0, #0x14
mla r4, r1, r0, r2
b _02239988
_02239984:
mov r4, sl
_02239988:
ldr r0, [r4, #8]
cmp r7, r0
movle r0, r4
ble _022399A4
mov r0, r4
mov r1, r7
bl bn_expand2
_022399A4:
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bxeq lr
str r7, [r4, #4]
str r5, [sp]
ldr r0, [r4]
ldr r1, [sb]
ldr r3, [r8]
mov r2, r6
bl bn_mul_normal
mov r0, r4
str fp, [sl, #0xc]
bl bn_fix_top
cmp sl, r4
beq _022399F4
mov r0, sl
mov r1, r4
bl BN_copy
_022399F4:
mov r0, #1
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
arm_func_end BN_mul
arm_func_start BN_sub
BN_sub: ; 0x02239A04
stmdb sp!, {r4, r5, r6, r7, lr}
sub sp, sp, #4
mov r6, r1
ldr r1, [r6, #0xc]
mov r3, #0
mov r7, r0
mov r5, r2
mov r4, r3
cmp r1, #0
beq _02239A4C
ldr r0, [r5, #0xc]
cmp r0, #0
movne r0, r6
moveq r3, #1
movne r6, r5
movne r5, r0
moveq r4, r3
b _02239A58
_02239A4C:
ldr r0, [r5, #0xc]
cmp r0, #0
movne r3, #1
_02239A58:
cmp r3, #0
beq _02239A8C
mov r0, r7
mov r1, r6
mov r2, r5
bl BN_uadd
cmp r0, #0
moveq r0, #0
add sp, sp, #4
strne r4, [r7, #0xc]
movne r0, #1
ldmia sp!, {r4, r5, r6, r7, lr}
bx lr
_02239A8C:
ldr r0, [r5, #4]
ldr r1, [r6, #4]
cmp r1, r0
movle r1, r0
ldr r0, [r7, #8]
cmp r1, r0
movle r0, r7
ble _02239AB4
mov r0, r7
bl bn_expand2
_02239AB4:
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, lr}
bxeq lr
mov r0, r6
mov r1, r5
bl BN_ucmp
cmp r0, #0
bge _02239B0C
mov r0, r7
mov r1, r5
mov r2, r6
bl BN_usub
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, lr}
bxeq lr
mov r0, #1
str r0, [r7, #0xc]
b _02239B38
_02239B0C:
mov r0, r7
mov r1, r6
mov r2, r5
bl BN_usub
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, lr}
bxeq lr
mov r0, #0
str r0, [r7, #0xc]
_02239B38:
mov r0, #1
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, lr}
bx lr
arm_func_end BN_sub
arm_func_start BN_usub
BN_usub: ; 0x02239B48
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
mov r8, r1
mov r7, r2
ldr r5, [r7, #4]
ldr r6, [r8, #4]
mov r4, r0
cmp r6, r5
movlt r0, #0
ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bxlt lr
ldr r1, [r4, #8]
cmp r6, r1
ble _02239B84
mov r1, r6
bl bn_expand2
_02239B84:
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bxeq lr
mov r3, #0
mov r0, r3
cmp r5, #0
ldr r2, [r8]
ldr sb, [r7]
ldr r1, [r4]
ble _02239C04
mov ip, r3
mov r7, r3
mov lr, #1
_02239BBC:
cmp r3, #0
ldr sl, [r2], #4
ldr r8, [sb], #4
beq _02239BE4
cmp sl, r8
movls r3, lr
sub r8, sl, r8
movhi r3, ip
sub sl, r8, #1
b _02239BF4
_02239BE4:
cmp sl, r8
movlo r3, lr
movhs r3, r7
sub sl, sl, r8
_02239BF4:
add r0, r0, #1
cmp r0, r5
str sl, [r1], #4
blt _02239BBC
_02239C04:
cmp r3, #0
beq _02239C34
cmp r0, r6
bge _02239C34
_02239C14:
ldr r5, [r2], #4
add r0, r0, #1
sub r3, r5, #1
cmp r5, r3
str r3, [r1], #4
bhi _02239C34
cmp r0, r6
blt _02239C14
_02239C34:
cmp r1, r2
beq _02239C94
_02239C3C:
cmp r0, r6
bge _02239C94
ldr r5, [r2]
add r3, r0, #1
str r5, [r1]
cmp r3, r6
bge _02239C94
ldr r5, [r2, #4]
add r3, r0, #2
str r5, [r1, #4]
cmp r3, r6
bge _02239C94
ldr r5, [r2, #8]
add r3, r0, #3
str r5, [r1, #8]
cmp r3, r6
ldrlt r3, [r2, #0xc]
add r0, r0, #4
strlt r3, [r1, #0xc]
addlt r2, r2, #0x10
addlt r1, r1, #0x10
blt _02239C3C
_02239C94:
mov r0, r4
str r6, [r4, #4]
bl bn_fix_top
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
arm_func_end BN_usub
arm_func_start BN_uadd
BN_uadd: ; 0x02239CAC
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #4
mov r4, r1
mov r8, r2
ldr r2, [r4, #4]
ldr r1, [r8, #4]
mov sb, r0
cmp r2, r1
movlt r0, r4
movlt r4, r8
movlt r8, r0
ldr r6, [r4, #4]
ldr r0, [sb, #8]
add r1, r6, #1
cmp r1, r0
ldr r7, [r8, #4]
movle r0, sb
ble _02239CFC
mov r0, sb
bl bn_expand2
_02239CFC:
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxeq lr
str r6, [sb, #4]
ldr r5, [r4]
ldr r4, [sb]
ldr r2, [r8]
mov r0, r4
mov r1, r5
mov r3, r7
bl bn_add_words
cmp r0, #0
add r4, r4, r7, lsl #2
add r5, r5, r7, lsl #2
beq _02239D94
cmp r7, r6
bge _02239D74
_02239D48:
ldr r2, [r5], #4
mov r3, r4
add r1, r2, #1
str r1, [r4], #4
ldr r1, [r3]
add r7, r7, #1
cmp r1, r2
movhs r0, #0
bhs _02239D74
cmp r7, r6
blt _02239D48
_02239D74:
cmp r7, r6
blt _02239D94
cmp r0, #0
movne r0, #1
strne r0, [r4], #4
ldrne r0, [sb, #4]
addne r0, r0, #1
strne r0, [sb, #4]
_02239D94:
cmp r4, r5
beq _02239DB8
cmp r7, r6
bge _02239DB8
_02239DA4:
ldr r0, [r5], #4
add r7, r7, #1
cmp r7, r6
str r0, [r4], #4
blt _02239DA4
_02239DB8:
mov r0, #1
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, sb, lr}
bx lr
arm_func_end BN_uadd
arm_func_start BN_add
BN_add: ; 0x02239DC8
stmdb sp!, {r4, r5, r6, lr}
mov r5, r1
mov r4, r2
ldr r2, [r5, #0xc]
ldr r1, [r4, #0xc]
mov r6, r0
eors r0, r2, r1
beq _02239E6C
cmp r2, #0
movne r0, r5
movne r5, r4
movne r4, r0
mov r0, r5
mov r1, r4
bl BN_ucmp
cmp r0, #0
bge _02239E38
mov r0, r6
mov r1, r4
mov r2, r5
bl BN_usub
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, lr}
bxeq lr
mov r0, #1
str r0, [r6, #0xc]
b _02239E60
_02239E38:
mov r0, r6
mov r1, r5
mov r2, r4
bl BN_usub
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, lr}
bxeq lr
mov r0, #0
str r0, [r6, #0xc]
_02239E60:
mov r0, #1
ldmia sp!, {r4, r5, r6, lr}
bx lr
_02239E6C:
cmp r2, #0
movne r0, #1
strne r0, [r6, #0xc]
moveq r0, #0
streq r0, [r6, #0xc]
mov r0, r6
mov r1, r5
mov r2, r4
bl BN_uadd
cmp r0, #0
moveq r0, #0
movne r0, #1
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_end BN_add
arm_func_start BN_sub_word
BN_sub_word: ; 0x02239EA4
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
movs r4, r1
mov r5, r0
addeq sp, sp, #4
moveq r0, #1
ldmeqia sp!, {r4, r5, lr}
bxeq lr
ldr r2, [r5, #0xc]
cmp r2, #0
beq _02239EF0
mov r2, #0
str r2, [r5, #0xc]
bl BN_add_word
mov r1, #1
add sp, sp, #4
str r1, [r5, #0xc]
ldmia sp!, {r4, r5, lr}
bx lr
_02239EF0:
ldr r1, [r5, #4]
cmp r1, #1
bgt _02239F94
cmp r1, #0
bne _02239F4C
ldr r1, [r5, #8]
cmp r1, #1
bge _02239F18
mov r1, #1
bl bn_expand2
_02239F18:
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, lr}
bxeq lr
ldr r1, [r5]
mov r0, #1
str r4, [r1]
str r0, [r5, #0xc]
add sp, sp, #4
str r0, [r5, #4]
ldmia sp!, {r4, r5, lr}
bx lr
_02239F4C:
ldr r2, [r5]
ldr r1, [r2]
cmp r1, r4
moveq r0, #0
streq r0, [r5, #4]
beq _02239F84
cmp r1, r4
subhi r0, r1, r4
strhi r0, [r2]
movls r0, #1
strls r0, [r5, #0xc]
ldrls r0, [r5]
subls r1, r4, r1
strls r1, [r0]
_02239F84:
add sp, sp, #4
mov r0, #1
ldmia sp!, {r4, r5, lr}
bx lr
_02239F94:
mov r0, #0
mov r1, #1
_02239F9C:
ldr ip, [r5]
mov r3, r0, lsl #2
ldr r2, [ip, r0, lsl #2]
cmp r2, r4
ldrhs r1, [ip, r3]
subhs r1, r1, r4
strhs r1, [ip, r3]
bhs _02239FD4
ldr r2, [ip, r3]
add r0, r0, #1
sub r2, r2, r4
mov r4, r1
str r2, [ip, r3]
b _02239F9C
_02239FD4:
ldr r1, [r5]
ldr r1, [r1, r3]
cmp r1, #0
bne _02239FF4
ldr r1, [r5, #4]
sub r1, r1, #1
cmp r0, r1
streq r1, [r5, #4]
_02239FF4:
mov r0, #1
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
bx lr
arm_func_end BN_sub_word
arm_func_start BN_add_word
BN_add_word: ; 0x0223A004
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
movs r4, r1
mov r5, r0
addeq sp, sp, #4
moveq r0, #1
ldmeqia sp!, {r4, r5, lr}
bxeq lr
ldr r2, [r5, #0xc]
cmp r2, #0
beq _0223A0AC
ldr r2, [r5, #4]
cmp r2, #1
ble _0223A05C
mov r2, #0
str r2, [r5, #0xc]
bl BN_sub_word
mov r1, #1
add sp, sp, #4
str r1, [r5, #0xc]
ldmia sp!, {r4, r5, lr}
bx lr
_0223A05C:
ldr r2, [r5]
ldr r1, [r2]
cmp r1, r4
subhi r0, r1, r4
strhi r0, [r2]
bhi _0223A09C
cmp r1, r4
movhs r0, #0
strhs r0, [r5, #0xc]
strhs r0, [r5, #4]
bhs _0223A09C
mov r0, #0
str r0, [r5, #0xc]
ldr r0, [r5]
sub r1, r4, r1
str r1, [r0]
_0223A09C:
add sp, sp, #4
mov r0, #1
ldmia sp!, {r4, r5, lr}
bx lr
_0223A0AC:
ldr r1, [r5, #4]
ldr r2, [r5, #8]
add r1, r1, #1
cmp r1, r2
ble _0223A0C4
bl bn_expand2
_0223A0C4:
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, lr}
bxeq lr
ldr r1, [r5]
ldr r0, [r5, #4]
mov r3, #0
str r3, [r1, r0, lsl #2]
mov r0, #1
_0223A0EC:
ldr r2, [r5]
ldr r1, [r2, r3, lsl #2]
add r1, r4, r1
cmp r4, r1
str r1, [r2, r3, lsl #2]
movhi r4, r0
addhi r3, r3, #1
bhi _0223A0EC
ldr r0, [r5, #4]
cmp r3, r0
addge r0, r0, #1
strge r0, [r5, #4]
mov r0, #1
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
bx lr
arm_func_end BN_add_word
arm_func_start BN_rshift
BN_rshift: ; 0x0223A12C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r7, r1
mov r1, r2, asr #4
mov r3, r2, lsr #0x1f
add r1, r2, r1, lsr #27
rsb r2, r3, r2, lsl #27
add r4, r3, r2, ror #27
ldr r2, [r7, #4]
mov r6, r1, asr #5
mov r8, r0
cmp r6, r2
rsb r5, r4, #0x20
ble _0223A174
mov r1, #0
bl BN_set_word
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
_0223A174:
cmp r8, r7
beq _0223A1AC
sub r1, r2, r6
ldr r2, [r8, #8]
add r1, r1, #2
cmp r1, r2
ble _0223A194
bl bn_expand2
_0223A194:
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, lr}
bxeq lr
ldr r0, [r7, #0xc]
str r0, [r8, #0xc]
_0223A1AC:
ldr r0, [r7]
ldr r1, [r7, #4]
add r2, r0, r6, lsl #2
ldr r0, [r8]
sub r7, r1, r6
mov r6, r2
str r7, [r8, #4]
cmp r4, #0
bne _0223A1F4
add r2, r7, #1
cmp r2, #0
ble _0223A234
_0223A1DC:
ldr r1, [r6], #4
sub r2, r2, #1
cmp r2, #0
str r1, [r0], #4
bgt _0223A1DC
b _0223A234
_0223A1F4:
cmp r7, #1
add r6, r2, #4
ldr r3, [r2]
mov r2, #1
ble _0223A224
_0223A208:
mov r1, r3, lsr r4
ldr r3, [r6], #4
add r2, r2, #1
orr r1, r1, r3, lsl r5
cmp r2, r7
str r1, [r0], #4
blt _0223A208
_0223A224:
mov r1, r3, lsr r4
str r1, [r0]
mov r1, #0
str r1, [r0, #4]
_0223A234:
mov r0, r8
bl bn_fix_top
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
arm_func_end BN_rshift
arm_func_start BN_lshift
BN_lshift: ; 0x0223A248
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
mov r4, r1
mov r7, r2
mov r1, r7, asr #4
mov r5, r0
add r2, r7, r1, lsr #27
ldr r1, [r4, #4]
ldr r3, [r5, #8]
add r1, r1, r2, asr #5
add r1, r1, #1
cmp r1, r3
mov r6, r2, asr #5
ble _0223A280
bl bn_expand2
_0223A280:
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bxeq lr
ldr r0, [r4, #0xc]
mov r1, r7, lsr #0x1f
str r0, [r5, #0xc]
ldr r3, [r4, #4]
rsb r0, r1, r7, lsl #27
adds ip, r1, r0, ror #27
ldr r2, [r4]
ldr r0, [r5]
add r1, r3, r6
mov r3, #0
str r3, [r0, r1, lsl #2]
rsb r3, ip, #0x20
bne _0223A2E8
ldr r1, [r4, #4]
subs r7, r1, #1
bmi _0223A31C
_0223A2D0:
ldr r3, [r2, r7, lsl #2]
add r1, r6, r7
str r3, [r0, r1, lsl #2]
subs r7, r7, #1
bpl _0223A2D0
b _0223A31C
_0223A2E8:
ldr r1, [r4, #4]
subs r1, r1, #1
bmi _0223A31C
_0223A2F4:
add sb, r6, r1
add r8, sb, #1
ldr sl, [r2, r1, lsl #2]
ldr lr, [r0, r8, lsl #2]
mov r7, sl, lsl ip
orr lr, lr, sl, lsr r3
str lr, [r0, r8, lsl #2]
str r7, [r0, sb, lsl #2]
subs r1, r1, #1
bpl _0223A2F4
_0223A31C:
mov r2, r6, lsl #2
mov r1, #0
bl MI_CpuFill8
ldr r1, [r4, #4]
mov r0, r5
add r1, r1, r6
add r1, r1, #1
str r1, [r5, #4]
bl bn_fix_top
mov r0, #1
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
arm_func_end BN_lshift
arm_func_start bn_sub_words
bn_sub_words: ; 0x0223A34C
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
cmp r3, #0
movle r0, #0
ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bxle lr
mov r6, #0
mov r4, r6
mov lr, r6
mov ip, r6
mov r7, r6
mov r5, #1
_0223A378:
ldr sl, [r1]
ldr sb, [r2]
sub r8, sl, sb
sub r8, r8, r6
str r8, [r0]
cmp sl, sb
beq _0223A3A0
cmp sl, sb
movlo r6, r5
movhs r6, r4
_0223A3A0:
sub r8, r3, #1
cmp r8, #0
ble _0223A454
ldr sl, [r1, #4]
ldr sb, [r2, #4]
sub r8, sl, sb
sub r8, r8, r6
str r8, [r0, #4]
cmp sl, sb
beq _0223A3D4
cmp sl, sb
movlo r6, r5
movhs r6, lr
_0223A3D4:
sub r8, r3, #2
cmp r8, #0
ble _0223A454
ldr sl, [r1, #8]
ldr sb, [r2, #8]
sub r8, sl, sb
sub r8, r8, r6
str r8, [r0, #8]
cmp sl, sb
beq _0223A408
cmp sl, sb
movlo r6, r5
movhs r6, ip
_0223A408:
sub r8, r3, #3
cmp r8, #0
ble _0223A454
ldr sl, [r1, #0xc]
ldr sb, [r2, #0xc]
sub r8, sl, sb
sub r8, r8, r6
str r8, [r0, #0xc]
cmp sl, sb
beq _0223A43C
cmp sl, sb
movlo r6, r5
movhs r6, r7
_0223A43C:
sub r3, r3, #4
cmp r3, #0
addgt r1, r1, #0x10
addgt r2, r2, #0x10
addgt r0, r0, #0x10
bgt _0223A378
_0223A454:
mov r0, r6
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
arm_func_end bn_sub_words
arm_func_start bn_add_words
bn_add_words: ; 0x0223A460
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
cmp r3, #0
addle sp, sp, #0xc
movle r0, #0
ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bxle lr
mov ip, #0
mov r7, ip
mov r6, ip
mov r5, ip
mov r4, ip
mov lr, ip
mov fp, ip
str ip, [sp]
str ip, [sp, #4]
mov r8, #1
_0223A4A4:
ldr sb, [r1]
add sl, sb, ip
ldr sb, [r2]
cmp sl, ip
movlo ip, r8
add sb, sl, sb
movhs ip, r7
cmp sb, sl
movlo sl, r8
movhs sl, r6
str sb, [r0]
sub sb, r3, #1
add ip, ip, sl
cmp sb, #0
ble _0223A5A0
ldr sb, [r1, #4]
ldr sl, [r2, #4]
add sb, sb, ip
cmp sb, ip
movlo ip, r8
add sl, sb, sl
movhs ip, r5
cmp sl, sb
movlo sb, r8
movhs sb, r4
add ip, ip, sb
sub sb, r3, #2
str sl, [r0, #4]
cmp sb, #0
ble _0223A5A0
ldr sb, [r1, #8]
ldr sl, [r2, #8]
add sb, sb, ip
cmp sb, ip
movlo ip, r8
add sl, sb, sl
movhs ip, lr
cmp sl, sb
movlo sb, r8
movhs sb, fp
add ip, ip, sb
sub sb, r3, #3
str sl, [r0, #8]
cmp sb, #0
ble _0223A5A0
ldr sb, [r1, #0xc]
ldr sl, [r2, #0xc]
add sb, sb, ip
cmp sb, ip
movlo ip, r8
add sl, sb, sl
ldrhs ip, [sp]
cmp sl, sb
movlo sb, r8
ldrhs sb, [sp, #4]
sub r3, r3, #4
cmp r3, #0
str sl, [r0, #0xc]
add ip, ip, sb
addgt r1, r1, #0x10
addgt r2, r2, #0x10
addgt r0, r0, #0x10
bgt _0223A4A4
_0223A5A0:
mov r0, ip
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
arm_func_end bn_add_words
arm_func_start bn_sqr_words
bn_sqr_words: ; 0x0223A5B0
stmdb sp!, {r4, r5, r6, r7, r8, lr}
cmp r2, #0
ldmleia sp!, {r4, r5, r6, r7, r8, lr}
bxle lr
mov r3, #0x8000
ldr lr, _0223A700 ; =0x0000FFFF
rsb ip, r3, #0
_0223A5CC:
ldr r5, [r1]
mov r3, #0x8000
and r4, r5, lr
and r7, lr, r5, lsr #16
mul r6, r4, r7
mul r5, r4, r4
and r4, r6, lr
add r8, r5, r4, lsl #17
rsb r3, r3, #0
mul r5, r7, r7
and r3, r6, r3
add r3, r5, r3, lsr #15
cmp r8, r4, lsl #17
addlo r3, r3, #1
str r8, [r0]
str r3, [r0, #4]
subs r3, r2, #1
ldmeqia sp!, {r4, r5, r6, r7, r8, lr}
bxeq lr
ldr r4, [r1, #4]
and r7, lr, r4, lsr #16
and r3, r4, lr
mul r6, r3, r7
mul r4, r3, r3
and r3, r6, lr
add r8, r4, r3, lsl #17
mul r5, r7, r7
and r4, r6, ip
cmp r8, r3, lsl #17
add r3, r5, r4, lsr #15
addlo r3, r3, #1
str r8, [r0, #8]
str r3, [r0, #0xc]
subs r3, r2, #2
ldmeqia sp!, {r4, r5, r6, r7, r8, lr}
bxeq lr
ldr r5, [r1, #8]
mov r3, #0x8000
and r4, r5, lr
and r7, lr, r5, lsr #16
mul r6, r4, r7
mul r5, r4, r4
and r4, r6, lr
add r8, r5, r4, lsl #17
rsb r3, r3, #0
mul r5, r7, r7
and r3, r6, r3
add r3, r5, r3, lsr #15
cmp r8, r4, lsl #17
addlo r3, r3, #1
str r8, [r0, #0x10]
str r3, [r0, #0x14]
subs r3, r2, #3
ldmeqia sp!, {r4, r5, r6, r7, r8, lr}
bxeq lr
ldr r5, [r1, #0xc]
mov r3, #0x8000
and r4, r5, lr
and r7, lr, r5, lsr #16
mul r6, r4, r7
mul r5, r4, r4
and r4, r6, lr
add r8, r5, r4, lsl #17
rsb r3, r3, #0
mul r5, r7, r7
and r3, r6, r3
add r3, r5, r3, lsr #15
cmp r8, r4, lsl #17
addlo r3, r3, #1
str r8, [r0, #0x18]
subs r2, r2, #4
str r3, [r0, #0x1c]
addne r1, r1, #0x10
addne r0, r0, #0x20
bne _0223A5CC
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.balign 4, 0
_0223A700: .word 0x0000FFFF
arm_func_end bn_sqr_words
arm_func_start bn_mul_words
bn_mul_words: ; 0x0223A704
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #4
cmp r2, #0
mov r4, #0
addle sp, sp, #4
movle r0, r4
ldmleia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxle lr
ldr r5, _0223A8A0 ; =0x0000FFFF
and lr, r3, r5
and ip, r5, r3, lsr #16
_0223A730:
ldr r3, [r1]
and r7, r5, r3, lsr #16
mul r6, lr, r7
and r3, r3, r5
mla sb, ip, r3, r6
mul r8, r3, lr
mul r3, r7, ip
cmp sb, r6
and r6, sb, r5
addlo r3, r3, #0x10000
and r7, r5, sb, lsr #16
add r8, r8, r6, lsl #16
cmp r8, r6, lsl #16
add r3, r3, r7
add r6, r8, r4
addlo r3, r3, #1
cmp r6, r4
addlo r3, r3, #1
str r6, [r0]
mov r4, r3
subs r6, r2, #1
beq _0223A890
ldr r4, [r1, #4]
and r7, r5, r4, lsr #16
mul r6, lr, r7
and r4, r4, r5
mla sb, ip, r4, r6
mul r8, r4, lr
mul r4, r7, ip
cmp sb, r6
and r6, sb, r5
addlo r4, r4, #0x10000
and r7, r5, sb, lsr #16
add r8, r8, r6, lsl #16
cmp r8, r6, lsl #16
add r4, r4, r7
add r6, r8, r3
addlo r4, r4, #1
cmp r6, r3
addlo r4, r4, #1
str r6, [r0, #4]
subs r3, r2, #2
beq _0223A890
ldr r3, [r1, #8]
and r7, r5, r3, lsr #16
mul r6, lr, r7
and r3, r3, r5
mla sb, ip, r3, r6
mul r8, r3, lr
mul r3, r7, ip
cmp sb, r6
and r6, sb, r5
addlo r3, r3, #0x10000
and r7, r5, sb, lsr #16
add r8, r8, r6, lsl #16
cmp r8, r6, lsl #16
add r3, r3, r7
add r6, r8, r4
addlo r3, r3, #1
cmp r6, r4
addlo r3, r3, #1
str r6, [r0, #8]
mov r4, r3
subs r6, r2, #3
beq _0223A890
ldr r4, [r1, #0xc]
and r7, r5, r4, lsr #16
mul r6, lr, r7
and r4, r4, r5
mla sb, ip, r4, r6
mul r8, r4, lr
mul r4, r7, ip
cmp sb, r6
and r6, sb, r5
addlo r4, r4, #0x10000
and r7, r5, sb, lsr #16
add r8, r8, r6, lsl #16
cmp r8, r6, lsl #16
add r4, r4, r7
add r6, r8, r3
addlo r4, r4, #1
cmp r6, r3
addlo r4, r4, #1
subs r2, r2, #4
str r6, [r0, #0xc]
addne r1, r1, #0x10
addne r0, r0, #0x10
bne _0223A730
_0223A890:
mov r0, r4
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, sb, lr}
bx lr
.balign 4, 0
_0223A8A0: .word 0x0000FFFF
arm_func_end bn_mul_words
arm_func_start bn_mul_add_words
bn_mul_add_words: ; 0x0223A8A4
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #4
cmp r2, #0
mov ip, #0
addle sp, sp, #4
movle r0, ip
ldmleia sp!, {r4, r5, r6, r7, r8, sb, lr}
bxle lr
ldr r5, _0223AA80 ; =0x0000FFFF
and r4, r3, r5
and lr, r5, r3, lsr #16
_0223A8D0:
ldr r3, [r1]
and r7, r5, r3, lsr #16
mul r6, r4, r7
and r3, r3, r5
mla sb, lr, r3, r6
mul r8, r3, r4
mul r3, r7, lr
cmp sb, r6
and r6, sb, r5
addlo r3, r3, #0x10000
and r7, r5, sb, lsr #16
add r8, r8, r6, lsl #16
cmp r8, r6, lsl #16
add r3, r3, r7
ldr r6, [r0]
addlo r3, r3, #1
add r7, r8, ip
cmp r7, ip
add r7, r7, r6
addlo r3, r3, #1
cmp r7, r6
addlo r3, r3, #1
mov ip, r3
str r7, [r0]
subs r6, r2, #1
beq _0223AA70
ldr ip, [r1, #4]
and r7, r5, ip, lsr #16
mul r6, r4, r7
and ip, ip, r5
mla sb, lr, ip, r6
mul r8, ip, r4
mul ip, r7, lr
cmp sb, r6
and r6, sb, r5
addlo ip, ip, #0x10000
and r7, r5, sb, lsr #16
add r8, r8, r6, lsl #16
cmp r8, r6, lsl #16
add ip, ip, r7
add r6, r8, r3
addlo ip, ip, #1
cmp r6, r3
ldr r3, [r0, #4]
addlo ip, ip, #1
add r6, r6, r3
cmp r6, r3
addlo ip, ip, #1
str r6, [r0, #4]
subs r3, r2, #2
beq _0223AA70
ldr r3, [r1, #8]
and r7, r5, r3, lsr #16
mul r6, r4, r7
and r3, r3, r5
mla sb, lr, r3, r6
mul r8, r3, r4
mul r3, r7, lr
cmp sb, r6
and r6, sb, r5
addlo r3, r3, #0x10000
and r7, r5, sb, lsr #16
add r8, r8, r6, lsl #16
cmp r8, r6, lsl #16
add r3, r3, r7
ldr r6, [r0, #8]
addlo r3, r3, #1
add r7, r8, ip
cmp r7, ip
add r7, r7, r6
addlo r3, r3, #1
cmp r7, r6
addlo r3, r3, #1
mov ip, r3
str r7, [r0, #8]
subs r6, r2, #3
beq _0223AA70
ldr ip, [r1, #0xc]
and r7, r5, ip, lsr #16
mul r6, r4, r7
and ip, ip, r5
mla sb, lr, ip, r6
mul r8, ip, r4
mul ip, r7, lr
cmp sb, r6
and r6, sb, r5
addlo ip, ip, #0x10000
and r7, r5, sb, lsr #16
add r8, r8, r6, lsl #16
cmp r8, r6, lsl #16
add ip, ip, r7
add r6, r8, r3
addlo ip, ip, #1
cmp r6, r3
ldr r3, [r0, #0xc]
addlo ip, ip, #1
add r6, r6, r3
cmp r6, r3
addlo ip, ip, #1
subs r2, r2, #4
str r6, [r0, #0xc]
addne r1, r1, #0x10
addne r0, r0, #0x10
bne _0223A8D0
_0223AA70:
mov r0, ip
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, sb, lr}
bx lr
.balign 4, 0
_0223AA80: .word 0x0000FFFF
arm_func_end bn_mul_add_words
arm_func_start BN_is_bit_set
BN_is_bit_set: ; 0x0223AA84
stmdb sp!, {lr}
sub sp, sp, #4
cmp r1, #0
addlt sp, sp, #4
movlt r0, #0
ldmltia sp!, {lr}
bxlt lr
mov r2, r1, asr #4
add r2, r1, r2, lsr #27
mov r3, r1, lsr #0x1f
ldr ip, [r0, #4]
mov lr, r2, asr #5
cmp ip, lr
rsb r1, r3, r1, lsl #27
addle sp, sp, #4
add r2, r3, r1, ror #27
movle r0, #0
ldmleia sp!, {lr}
bxle lr
ldr r1, [r0]
mov r0, #1
mov r2, r0, lsl r2
ldr r1, [r1, lr, lsl #2]
ands r1, r2, r1
moveq r0, #0
add sp, sp, #4
ldmia sp!, {lr}
bx lr
arm_func_end BN_is_bit_set
arm_func_start BN_set_bit
BN_set_bit: ; 0x0223AAF4
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r2, r1, asr #4
add r2, r1, r2, lsr #27
mov r3, r1, lsr #0x1f
rsb r1, r3, r1, lsl #27
ldr r4, [r6, #4]
mov r5, r2, asr #5
cmp r4, r5
add r4, r3, r1, ror #27
bgt _0223AB74
ldr r2, [r6, #8]
add r1, r5, #1
cmp r1, r2
ble _0223AB34
bl bn_expand2
_0223AB34:
cmp r0, #0
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, lr}
bxeq lr
ldr r3, [r6, #4]
add r2, r5, #1
cmp r3, r2
bge _0223AB6C
mov r1, #0
_0223AB58:
ldr r0, [r6]
str r1, [r0, r3, lsl #2]
add r3, r3, #1
cmp r3, r2
blt _0223AB58
_0223AB6C:
add r0, r5, #1
str r0, [r6, #4]
_0223AB74:
ldr r2, [r6]
mov r0, #1
ldr r1, [r2, r5, lsl #2]
orr r1, r1, r0, lsl r4
str r1, [r2, r5, lsl #2]
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_end BN_set_bit
arm_func_start BN_ucmp
BN_ucmp: ; 0x0223AB90
ldr r3, [r0, #4]
ldr r2, [r1, #4]
subs r2, r3, r2
movne r0, r2
bxne lr
subs r2, r3, #1
ldr ip, [r0]
ldr r3, [r1]
bmi _0223ABDC
_0223ABB4:
ldr r1, [ip, r2, lsl #2]
ldr r0, [r3, r2, lsl #2]
cmp r1, r0
beq _0223ABD4
cmp r1, r0
movhi r0, #1
mvnls r0, #0
bx lr
_0223ABD4:
subs r2, r2, #1
bpl _0223ABB4
_0223ABDC:
mov r0, #0
bx lr
arm_func_end BN_ucmp
arm_func_start BN_bn2bin
BN_bn2bin: ; 0x0223ABE4
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
mov r5, r0
mov r4, r1
bl BN_num_bits
add r1, r0, #7
mov r0, r1, asr #2
add r0, r1, r0, lsr #29
mov r0, r0, asr #3
cmp r0, #0
addle sp, sp, #4
sub ip, r0, #1
ldmleia sp!, {r4, r5, lr}
bxle lr
_0223AC1C:
mov r3, ip, lsr #0x1f
mov r1, ip, asr #1
rsb r2, r3, ip, lsl #30
add r1, ip, r1, lsr #30
add r2, r3, r2, ror #30
ldr r3, [r5]
mov r1, r1, asr #2
ldr r3, [r3, r1, lsl #2]
mov r1, r2, lsl #3
mov r1, r3, lsr r1
cmp ip, #0
strb r1, [r4], #1
sub ip, ip, #1
bgt _0223AC1C
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
bx lr
arm_func_end BN_bn2bin
arm_func_start BN_bin2bn
BN_bin2bn: ; 0x0223AC60
stmdb sp!, {r4, r5, r6, r7, lr}
sub sp, sp, #4
movs r5, r2
mov r7, r0
mov r6, r1
bne _0223AC80
bl BN_new
mov r5, r0
_0223AC80:
cmp r5, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, lr}
bxeq lr
cmp r6, #0
mov r4, #0
addeq sp, sp, #4
moveq r0, r5
streq r4, [r5, #4]
ldmeqia sp!, {r4, r5, r6, r7, lr}
bxeq lr
add r0, r6, #2
mov r2, r0, lsl #3
add r1, r2, #0x1f
mov r0, r1, asr #4
add r0, r1, r0, lsr #27
ldr r1, [r5, #8]
mov r0, r0, asr #5
cmp r0, r1
movle r0, r5
ble _0223ACF0
mov r0, r2, asr #4
add r0, r2, r0, lsr #27
mov r1, r0, asr #5
mov r0, r5
add r1, r1, #1
bl bn_expand2
_0223ACF0:
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, r7, lr}
bxeq lr
sub r0, r6, #1
mov r1, r0, lsr #2
add ip, r1, #1
cmp r6, #0
str ip, [r5, #4]
and r3, r0, #3
sub r6, r6, #1
beq _0223AD5C
mov r1, #0
mov r0, #3
_0223AD2C:
ldrb r2, [r7], #1
cmp r3, #0
sub r3, r3, #1
orr r4, r2, r4, lsl #8
ldreq r2, [r5]
subeq ip, ip, #1
streq r4, [r2, ip, lsl #2]
moveq r4, r1
moveq r3, r0
cmp r6, #0
sub r6, r6, #1
bne _0223AD2C
_0223AD5C:
mov r0, r5
bl bn_fix_top
mov r0, r5
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, lr}
bx lr
arm_func_end BN_bin2bn
arm_func_start BN_set_word
BN_set_word: ; 0x0223AD74
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
mov r4, r0
ldr r2, [r4, #8]
mov r5, r1
cmp r2, #1
bge _0223AD98
mov r1, #2
bl bn_expand2
_0223AD98:
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, lr}
bxeq lr
mov r0, #0
str r0, [r4, #0xc]
str r0, [r4, #4]
ldr r0, [r4]
str r5, [r0]
ldr r0, [r4]
ldr r0, [r0]
cmp r0, #0
movne r0, #1
strne r0, [r4, #4]
mov r0, #1
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
bx lr
arm_func_end BN_set_word
arm_func_start BN_clear
BN_clear: ; 0x0223ADE4
stmdb sp!, {r4, lr}
mov r4, r0
ldr r0, [r4]
cmp r0, #0
beq _0223AE08
ldr r2, [r4, #8]
mov r1, #0
mov r2, r2, lsl #2
bl MI_CpuFill8
_0223AE08:
mov r0, #0
str r0, [r4, #4]
str r0, [r4, #0xc]
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_clear
arm_func_start BN_copy
BN_copy: ; 0x0223AE1C
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
mov r5, r0
mov r4, r1
cmp r5, r4
addeq sp, sp, #4
ldmeqia sp!, {r4, r5, lr}
bxeq lr
ldr r1, [r4, #4]
ldr r2, [r5, #8]
cmp r1, r2
ble _0223AE50
bl bn_expand2
_0223AE50:
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {r4, r5, lr}
bxeq lr
ldr r2, [r4, #4]
ldr r0, [r4]
ldr r1, [r5]
mov r2, r2, lsl #2
bl MI_CpuCopy8
ldr r0, [r4, #4]
str r0, [r5, #4]
ldr r0, [r5, #4]
cmp r0, #0
bne _0223AE9C
ldr r1, [r5]
cmp r1, #0
movne r0, #0
strne r0, [r1]
_0223AE9C:
ldr r1, [r4, #0xc]
mov r0, r5
str r1, [r5, #0xc]
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
bx lr
arm_func_end BN_copy
arm_func_start bn_expand2
bn_expand2: ; 0x0223AEB4
stmdb sp!, {r4, r5, r6, lr}
mov r5, r0
ldr r0, [r5, #8]
mov r4, r1
cmp r4, r0
ble _0223AF28
ldr r0, [r5, #0x10]
ands r0, r0, #2
movne r0, #0
ldmneia sp!, {r4, r5, r6, lr}
bxne lr
add r0, r4, #1
mov r0, r0, lsl #2
bl CRYPTOi_MyAlloc
movs r6, r0
moveq r0, #0
ldmeqia sp!, {r4, r5, r6, lr}
bxeq lr
ldr r0, [r5]
cmp r0, #0
beq _0223AF20
ldr r2, [r5, #4]
mov r1, r6
mov r2, r2, lsl #2
bl MI_CpuCopy8
ldr r0, [r5]
bl CRYPTOi_MyFree
_0223AF20:
str r6, [r5]
str r4, [r5, #8]
_0223AF28:
mov r0, r5
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_end bn_expand2
arm_func_start BN_CTX_free
BN_CTX_free: ; 0x0223AF34
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
add r4, r6, #4
mov r5, #0
_0223AF44:
mov r0, r4
bl BN_clear_free
add r5, r5, #1
cmp r5, #0xc
add r4, r4, #0x14
blt _0223AF44
ldr r0, [r6, #0x108]
ands r0, r0, #1
ldmeqia sp!, {r4, r5, r6, lr}
bxeq lr
mov r0, r6
bl CRYPTOi_MyFree
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_end BN_CTX_free
arm_func_start BN_CTX_init
BN_CTX_init: ; 0x0223AF7C
stmdb sp!, {r4, lr}
mov r1, #0
mov r2, #0x110
mov r4, r0
bl MI_CpuFill8
mov r0, #0
str r0, [r4]
str r0, [r4, #0x108]
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_CTX_init
arm_func_start BN_CTX_new
BN_CTX_new: ; 0x0223AFA4
stmdb sp!, {r4, lr}
mov r0, #0x110
bl CRYPTOi_MyAlloc
movs r4, r0
moveq r0, #0
ldmeqia sp!, {r4, lr}
bxeq lr
bl BN_CTX_init
mov r1, #1
mov r0, r4
str r1, [r4, #0x108]
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_CTX_new
arm_func_start BN_new
BN_new: ; 0x0223AFD8
stmdb sp!, {lr}
sub sp, sp, #4
mov r0, #0x14
bl CRYPTOi_MyAlloc
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
ldmeqia sp!, {lr}
bxeq lr
mov r1, #1
str r1, [r0, #0x10]
mov r1, #0
str r1, [r0, #4]
str r1, [r0, #0xc]
str r1, [r0, #8]
str r1, [r0]
add sp, sp, #4
ldmia sp!, {lr}
bx lr
arm_func_end BN_new
arm_func_start BN_init
BN_init: ; 0x0223B024
ldr ip, _0223B034 ; =MI_CpuFill8
mov r1, #0
mov r2, #0x14
bx ip
.balign 4, 0
_0223B034: .word MI_CpuFill8
arm_func_end BN_init
arm_func_start bn_fix_top
bn_fix_top: ; 0x0223B038
ldr r3, [r0, #4]
cmp r3, #0
bxle lr
ldr r2, [r0]
sub r1, r3, #1
cmp r3, #0
add r3, r2, r1, lsl #2
bxle lr
add r2, r0, #4
_0223B05C:
ldr r1, [r3], #-4
cmp r1, #0
bxne lr
ldr r1, [r2]
sub r1, r1, #1
str r1, [r2]
ldr r1, [r0, #4]
cmp r1, #0
bgt _0223B05C
bx lr
arm_func_end bn_fix_top
arm_func_start bn_zexpand
bn_zexpand: ; 0x0223B084
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
mov r5, r0
ldr r2, [r5, #4]
mov r4, r1
cmp r2, r4
addge sp, sp, #4
ldmgeia sp!, {r4, r5, lr}
bxge lr
ldr r2, [r5, #8]
cmp r4, r2
ble _0223B0B8
bl bn_expand2
_0223B0B8:
ldr r0, [r5]
cmp r0, #0
addeq sp, sp, #4
ldmeqia sp!, {r4, r5, lr}
bxeq lr
ldr r2, [r5, #4]
cmp r2, r4
addge sp, sp, #4
ldmgeia sp!, {r4, r5, lr}
bxge lr
mov r1, #0
_0223B0E4:
ldr r0, [r5]
str r1, [r0, r2, lsl #2]
add r2, r2, #1
cmp r2, r4
blt _0223B0E4
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
bx lr
arm_func_end bn_zexpand
arm_func_start BN_free
BN_free: ; 0x0223B104
stmdb sp!, {r4, lr}
movs r4, r0
ldmeqia sp!, {r4, lr}
bxeq lr
ldr r0, [r4]
cmp r0, #0
beq _0223B130
ldr r1, [r4, #0x10]
ands r1, r1, #2
bne _0223B130
bl CRYPTOi_MyFree
_0223B130:
ldr r0, [r4, #0x10]
orr r0, r0, #0x8000
str r0, [r4, #0x10]
ldr r0, [r4, #0x10]
ands r0, r0, #1
ldmeqia sp!, {r4, lr}
bxeq lr
mov r0, r4
bl CRYPTOi_MyFree
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_free
arm_func_start BN_clear_free
BN_clear_free: ; 0x0223B15C
stmdb sp!, {r4, lr}
movs r4, r0
ldmeqia sp!, {r4, lr}
bxeq lr
bl BN_clear
mov r0, r4
bl BN_free
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_clear_free
arm_func_start BN_num_bits
BN_num_bits: ; 0x0223B180
stmdb sp!, {r4, lr}
ldr r1, [r0, #4]
cmp r1, #0
moveq r0, #0
ldmeqia sp!, {r4, lr}
bxeq lr
ldr r0, [r0]
sub r4, r1, #1
ldr r0, [r0, r4, lsl #2]
bl BN_num_bits_word
add r0, r0, r4, lsl #5
ldmia sp!, {r4, lr}
bx lr
arm_func_end BN_num_bits
arm_func_start BN_num_bits_word
BN_num_bits_word: ; 0x0223B1B4
mov r1, #0x10000
rsb r1, r1, #0
ands r1, r0, r1
beq _0223B1D4
ands r1, r0, #0xff000000
movne r2, #0x18
moveq r2, #0x10
b _0223B1E0
_0223B1D4:
ands r1, r0, #0xff00
movne r2, #8
moveq r2, #0
_0223B1E0:
mov r1, r0, lsr r2
ands r0, r1, #0xf0
ldreq r0, _0223B210 ; =bits$7808
ldreqsb r0, [r0, r1]
addeq r0, r0, r2
bxeq lr
ldr r0, _0223B210 ; =bits$7808
mov r1, r1, lsr #4
ldrsb r0, [r0, r1]
add r0, r0, r2
add r0, r0, #4
bx lr
.balign 4, 0
_0223B210: .word bits$7808
arm_func_end BN_num_bits_word
; util.o
.text
arm_func_start CRYPTO_SetAllocator
CRYPTO_SetAllocator: ; 0x0223B214
ldr r3, _0223B228 ; =CRYPTOi_MyAllocFunc
ldr r2, _0223B22C ; =CRYPTOi_MyFreeFunc
str r0, [r3]
str r1, [r2]
bx lr
.balign 4, 0
_0223B228: .word CRYPTOi_MyAllocFunc
_0223B22C: .word CRYPTOi_MyFreeFunc
arm_func_end CRYPTO_SetAllocator
arm_func_start CRYPTOi_MyFree
CRYPTOi_MyFree: ; 0x0223B230
stmdb sp!, {lr}
sub sp, sp, #4
ldr r1, _0223B274 ; =CRYPTOi_MyFreeFunc
mov r2, r0
ldr r1, [r1]
cmp r1, #0
beq _0223B25C
blx r1
add sp, sp, #4
ldmia sp!, {lr}
bx lr
_0223B25C:
mov r0, #0
mvn r1, #0
bl OS_FreeToHeap
add sp, sp, #4
ldmia sp!, {lr}
bx lr
.balign 4, 0
_0223B274: .word CRYPTOi_MyFreeFunc
arm_func_end CRYPTOi_MyFree
arm_func_start CRYPTOi_MyAlloc
CRYPTOi_MyAlloc: ; 0x0223B278
stmdb sp!, {lr}
sub sp, sp, #4
ldr r1, _0223B2BC ; =CRYPTOi_MyAllocFunc
mov r2, r0
ldr r1, [r1]
cmp r1, #0
beq _0223B2A4
blx r1
add sp, sp, #4
ldmia sp!, {lr}
bx lr
_0223B2A4:
mov r0, #0
mvn r1, #0
bl OS_AllocFromHeap
add sp, sp, #4
ldmia sp!, {lr}
bx lr
.balign 4, 0
_0223B2BC: .word CRYPTOi_MyAllocFunc
arm_func_end CRYPTOi_MyAlloc
.bss
CRYPTOi_MyAllocFunc:
.space 0x4
CRYPTOi_MyFreeFunc:
.space 0x4