.include "macros.inc" .section .text, "ax" # 0x80006980 - 0x803E1E60 .global keyrand keyrand: /* 8035C4F4 00358154 94 21 FF F0 */ stwu r1, -0x10(r1) /* 8035C4F8 00358158 2C 04 00 00 */ cmpwi r4, 0 /* 8035C4FC 0035815C 93 E1 00 0C */ stw r31, 0xc(r1) /* 8035C500 00358160 40 82 00 0C */ bne lbl_8035C50C /* 8035C504 00358164 38 60 00 00 */ li r3, 0 /* 8035C508 00358168 48 00 00 88 */ b lbl_8035C590 lbl_8035C50C: /* 8035C50C 0035816C 39 80 00 00 */ li r12, 0 /* 8035C510 00358170 3B E0 00 01 */ li r31, 1 /* 8035C514 00358174 48 00 00 0C */ b lbl_8035C520 lbl_8035C518: /* 8035C518 00358178 57 E9 08 3C */ slwi r9, r31, 1 /* 8035C51C 0035817C 3B E9 00 01 */ addi r31, r9, 1 lbl_8035C520: /* 8035C520 00358180 7C 1F 20 40 */ cmplw r31, r4 /* 8035C524 00358184 41 80 FF F4 */ blt lbl_8035C518 /* 8035C528 00358188 39 20 00 00 */ li r9, 0 lbl_8035C52C: /* 8035C52C 0035818C 81 48 00 00 */ lwz r10, 0(r8) /* 8035C530 00358190 89 67 00 00 */ lbz r11, 0(r7) /* 8035C534 00358194 7C 05 50 AE */ lbzx r0, r5, r10 /* 8035C538 00358198 39 4A 00 01 */ addi r10, r10, 1 /* 8035C53C 0035819C 7D 63 58 AE */ lbzx r11, r3, r11 /* 8035C540 003581A0 7C 0A 30 40 */ cmplw r10, r6 /* 8035C544 003581A4 7C 0B 02 14 */ add r0, r11, r0 /* 8035C548 003581A8 98 07 00 00 */ stb r0, 0(r7) /* 8035C54C 003581AC 91 48 00 00 */ stw r10, 0(r8) /* 8035C550 003581B0 41 80 00 14 */ blt lbl_8035C564 /* 8035C554 003581B4 91 28 00 00 */ stw r9, 0(r8) /* 8035C558 003581B8 88 07 00 00 */ lbz r0, 0(r7) /* 8035C55C 003581BC 7C 00 32 14 */ add r0, r0, r6 /* 8035C560 003581C0 98 07 00 00 */ stb r0, 0(r7) lbl_8035C564: /* 8035C564 003581C4 39 8C 00 01 */ addi r12, r12, 1 /* 8035C568 003581C8 88 07 00 00 */ lbz r0, 0(r7) /* 8035C56C 003581CC 28 0C 00 0B */ cmplwi r12, 0xb /* 8035C570 003581D0 7F EA 00 38 */ and r10, r31, r0 /* 8035C574 003581D4 40 81 00 10 */ ble lbl_8035C584 /* 8035C578 003581D8 7C 0A 23 96 */ divwu r0, r10, r4 /* 8035C57C 003581DC 7C 00 21 D6 */ mullw r0, r0, r4 /* 8035C580 003581E0 7D 40 50 50 */ subf r10, r0, r10 lbl_8035C584: /* 8035C584 003581E4 7C 0A 20 40 */ cmplw r10, r4 /* 8035C588 003581E8 41 81 FF A4 */ bgt lbl_8035C52C /* 8035C58C 003581EC 55 43 06 3E */ clrlwi r3, r10, 0x18 lbl_8035C590: /* 8035C590 003581F0 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8035C594 003581F4 38 21 00 10 */ addi r1, r1, 0x10 /* 8035C598 003581F8 4E 80 00 20 */ blr .global GOACryptInit GOACryptInit: /* 8035C59C 003581FC 94 21 FF D0 */ stwu r1, -0x30(r1) /* 8035C5A0 00358200 7C 08 02 A6 */ mflr r0 /* 8035C5A4 00358204 90 01 00 34 */ stw r0, 0x34(r1) /* 8035C5A8 00358208 39 61 00 30 */ addi r11, r1, 0x30 /* 8035C5AC 0035820C 4B E6 AB 7D */ bl _savegpr_27 /* 8035C5B0 00358210 28 05 00 01 */ cmplwi r5, 1 /* 8035C5B4 00358214 7C 7D 1B 78 */ mr r29, r3 /* 8035C5B8 00358218 7C 9E 23 78 */ mr r30, r4 /* 8035C5BC 0035821C 7C BF 2B 78 */ mr r31, r5 /* 8035C5C0 00358220 40 80 00 D4 */ bge lbl_8035C694 /* 8035C5C4 00358224 39 00 00 01 */ li r8, 1 /* 8035C5C8 00358228 38 E0 00 03 */ li r7, 3 /* 8035C5CC 0035822C 38 C0 00 05 */ li r6, 5 /* 8035C5D0 00358230 38 A0 00 07 */ li r5, 7 /* 8035C5D4 00358234 38 80 00 0B */ li r4, 0xb /* 8035C5D8 00358238 38 00 00 10 */ li r0, 0x10 /* 8035C5DC 0035823C 99 03 01 00 */ stb r8, 0x100(r3) /* 8035C5E0 00358240 39 60 00 00 */ li r11, 0 /* 8035C5E4 00358244 39 40 00 FF */ li r10, 0xff /* 8035C5E8 00358248 98 E3 01 01 */ stb r7, 0x101(r3) /* 8035C5EC 0035824C 98 C3 01 02 */ stb r6, 0x102(r3) /* 8035C5F0 00358250 98 A3 01 03 */ stb r5, 0x103(r3) /* 8035C5F4 00358254 98 83 01 04 */ stb r4, 0x104(r3) /* 8035C5F8 00358258 7C 09 03 A6 */ mtctr r0 lbl_8035C5FC: /* 8035C5FC 0035825C 7D 43 59 AE */ stbx r10, r3, r11 /* 8035C600 00358260 7D 83 5A 14 */ add r12, r3, r11 /* 8035C604 00358264 39 2A FF FF */ addi r9, r10, -1 /* 8035C608 00358268 39 0A FF FE */ addi r8, r10, -2 /* 8035C60C 0035826C 99 2C 00 01 */ stb r9, 1(r12) /* 8035C610 00358270 38 EA FF FD */ addi r7, r10, -3 /* 8035C614 00358274 38 CA FF FC */ addi r6, r10, -4 /* 8035C618 00358278 38 AA FF FB */ addi r5, r10, -5 /* 8035C61C 0035827C 99 0C 00 02 */ stb r8, 2(r12) /* 8035C620 00358280 38 8A FF FA */ addi r4, r10, -6 /* 8035C624 00358284 38 0A FF F9 */ addi r0, r10, -7 /* 8035C628 00358288 39 2A FF F7 */ addi r9, r10, -9 /* 8035C62C 0035828C 98 EC 00 03 */ stb r7, 3(r12) /* 8035C630 00358290 39 0A FF F6 */ addi r8, r10, -10 /* 8035C634 00358294 38 EA FF F5 */ addi r7, r10, -11 /* 8035C638 00358298 39 6B 00 08 */ addi r11, r11, 8 /* 8035C63C 0035829C 98 CC 00 04 */ stb r6, 4(r12) /* 8035C640 003582A0 38 CA FF F4 */ addi r6, r10, -12 /* 8035C644 003582A4 98 AC 00 05 */ stb r5, 5(r12) /* 8035C648 003582A8 38 AA FF F3 */ addi r5, r10, -13 /* 8035C64C 003582AC 98 8C 00 06 */ stb r4, 6(r12) /* 8035C650 003582B0 38 8A FF F2 */ addi r4, r10, -14 /* 8035C654 003582B4 98 0C 00 07 */ stb r0, 7(r12) /* 8035C658 003582B8 38 0A FF F1 */ addi r0, r10, -15 /* 8035C65C 003582BC 39 4A FF F8 */ addi r10, r10, -8 /* 8035C660 003582C0 7D 83 5A 14 */ add r12, r3, r11 /* 8035C664 003582C4 7D 43 59 AE */ stbx r10, r3, r11 /* 8035C668 003582C8 39 6B 00 08 */ addi r11, r11, 8 /* 8035C66C 003582CC 39 4A FF F8 */ addi r10, r10, -8 /* 8035C670 003582D0 99 2C 00 01 */ stb r9, 1(r12) /* 8035C674 003582D4 99 0C 00 02 */ stb r8, 2(r12) /* 8035C678 003582D8 98 EC 00 03 */ stb r7, 3(r12) /* 8035C67C 003582DC 98 CC 00 04 */ stb r6, 4(r12) /* 8035C680 003582E0 98 AC 00 05 */ stb r5, 5(r12) /* 8035C684 003582E4 98 8C 00 06 */ stb r4, 6(r12) /* 8035C688 003582E8 98 0C 00 07 */ stb r0, 7(r12) /* 8035C68C 003582EC 42 00 FF 70 */ bdnz lbl_8035C5FC /* 8035C690 003582F0 48 00 01 A0 */ b lbl_8035C830 lbl_8035C694: /* 8035C694 003582F4 38 00 00 08 */ li r0, 8 /* 8035C698 003582F8 39 60 00 00 */ li r11, 0 /* 8035C69C 003582FC 7C 09 03 A6 */ mtctr r0 lbl_8035C6A0: /* 8035C6A0 00358300 7D 63 59 AE */ stbx r11, r3, r11 /* 8035C6A4 00358304 7D 43 5A 14 */ add r10, r3, r11 /* 8035C6A8 00358308 39 2B 00 01 */ addi r9, r11, 1 /* 8035C6AC 0035830C 39 0B 00 02 */ addi r8, r11, 2 /* 8035C6B0 00358310 99 2A 00 01 */ stb r9, 1(r10) /* 8035C6B4 00358314 38 EB 00 03 */ addi r7, r11, 3 /* 8035C6B8 00358318 38 CB 00 04 */ addi r6, r11, 4 /* 8035C6BC 0035831C 38 AB 00 05 */ addi r5, r11, 5 /* 8035C6C0 00358320 99 0A 00 02 */ stb r8, 2(r10) /* 8035C6C4 00358324 38 8B 00 06 */ addi r4, r11, 6 /* 8035C6C8 00358328 38 0B 00 07 */ addi r0, r11, 7 /* 8035C6CC 0035832C 39 2B 00 09 */ addi r9, r11, 9 /* 8035C6D0 00358330 98 EA 00 03 */ stb r7, 3(r10) /* 8035C6D4 00358334 39 0B 00 0A */ addi r8, r11, 0xa /* 8035C6D8 00358338 38 EB 00 0B */ addi r7, r11, 0xb /* 8035C6DC 0035833C 98 CA 00 04 */ stb r6, 4(r10) /* 8035C6E0 00358340 38 CB 00 0C */ addi r6, r11, 0xc /* 8035C6E4 00358344 98 AA 00 05 */ stb r5, 5(r10) /* 8035C6E8 00358348 38 AB 00 0D */ addi r5, r11, 0xd /* 8035C6EC 0035834C 98 8A 00 06 */ stb r4, 6(r10) /* 8035C6F0 00358350 38 8B 00 0E */ addi r4, r11, 0xe /* 8035C6F4 00358354 39 6B 00 08 */ addi r11, r11, 8 /* 8035C6F8 00358358 98 0A 00 07 */ stb r0, 7(r10) /* 8035C6FC 0035835C 7D 43 5A 14 */ add r10, r3, r11 /* 8035C700 00358360 38 0B 00 07 */ addi r0, r11, 7 /* 8035C704 00358364 7D 63 59 AE */ stbx r11, r3, r11 /* 8035C708 00358368 99 2A 00 01 */ stb r9, 1(r10) /* 8035C70C 0035836C 39 2B 00 09 */ addi r9, r11, 9 /* 8035C710 00358370 99 0A 00 02 */ stb r8, 2(r10) /* 8035C714 00358374 39 0B 00 0A */ addi r8, r11, 0xa /* 8035C718 00358378 98 EA 00 03 */ stb r7, 3(r10) /* 8035C71C 0035837C 38 EB 00 0B */ addi r7, r11, 0xb /* 8035C720 00358380 98 CA 00 04 */ stb r6, 4(r10) /* 8035C724 00358384 38 CB 00 0C */ addi r6, r11, 0xc /* 8035C728 00358388 98 AA 00 05 */ stb r5, 5(r10) /* 8035C72C 0035838C 38 AB 00 0D */ addi r5, r11, 0xd /* 8035C730 00358390 98 8A 00 06 */ stb r4, 6(r10) /* 8035C734 00358394 38 8B 00 0E */ addi r4, r11, 0xe /* 8035C738 00358398 39 6B 00 08 */ addi r11, r11, 8 /* 8035C73C 0035839C 98 0A 00 07 */ stb r0, 7(r10) /* 8035C740 003583A0 7D 43 5A 14 */ add r10, r3, r11 /* 8035C744 003583A4 38 0B 00 07 */ addi r0, r11, 7 /* 8035C748 003583A8 7D 63 59 AE */ stbx r11, r3, r11 /* 8035C74C 003583AC 99 2A 00 01 */ stb r9, 1(r10) /* 8035C750 003583B0 39 2B 00 09 */ addi r9, r11, 9 /* 8035C754 003583B4 99 0A 00 02 */ stb r8, 2(r10) /* 8035C758 003583B8 39 0B 00 0A */ addi r8, r11, 0xa /* 8035C75C 003583BC 98 EA 00 03 */ stb r7, 3(r10) /* 8035C760 003583C0 38 EB 00 0B */ addi r7, r11, 0xb /* 8035C764 003583C4 98 CA 00 04 */ stb r6, 4(r10) /* 8035C768 003583C8 38 CB 00 0C */ addi r6, r11, 0xc /* 8035C76C 003583CC 98 AA 00 05 */ stb r5, 5(r10) /* 8035C770 003583D0 38 AB 00 0D */ addi r5, r11, 0xd /* 8035C774 003583D4 98 8A 00 06 */ stb r4, 6(r10) /* 8035C778 003583D8 38 8B 00 0E */ addi r4, r11, 0xe /* 8035C77C 003583DC 39 6B 00 08 */ addi r11, r11, 8 /* 8035C780 003583E0 98 0A 00 07 */ stb r0, 7(r10) /* 8035C784 003583E4 7D 43 5A 14 */ add r10, r3, r11 /* 8035C788 003583E8 38 0B 00 07 */ addi r0, r11, 7 /* 8035C78C 003583EC 7D 63 59 AE */ stbx r11, r3, r11 /* 8035C790 003583F0 39 6B 00 08 */ addi r11, r11, 8 /* 8035C794 003583F4 99 2A 00 01 */ stb r9, 1(r10) /* 8035C798 003583F8 99 0A 00 02 */ stb r8, 2(r10) /* 8035C79C 003583FC 98 EA 00 03 */ stb r7, 3(r10) /* 8035C7A0 00358400 98 CA 00 04 */ stb r6, 4(r10) /* 8035C7A4 00358404 98 AA 00 05 */ stb r5, 5(r10) /* 8035C7A8 00358408 98 8A 00 06 */ stb r4, 6(r10) /* 8035C7AC 0035840C 98 0A 00 07 */ stb r0, 7(r10) /* 8035C7B0 00358410 42 00 FE F0 */ bdnz lbl_8035C6A0 /* 8035C7B4 00358414 38 00 00 00 */ li r0, 0 /* 8035C7B8 00358418 3B 83 00 FF */ addi r28, r3, 0xff /* 8035C7BC 0035841C 90 01 00 0C */ stw r0, 0xc(r1) /* 8035C7C0 00358420 3B 60 00 FF */ li r27, 0xff /* 8035C7C4 00358424 98 01 00 08 */ stb r0, 8(r1) lbl_8035C7C8: /* 8035C7C8 00358428 7F A3 EB 78 */ mr r3, r29 /* 8035C7CC 0035842C 7F 64 DB 78 */ mr r4, r27 /* 8035C7D0 00358430 7F C5 F3 78 */ mr r5, r30 /* 8035C7D4 00358434 7F E6 FB 78 */ mr r6, r31 /* 8035C7D8 00358438 38 E1 00 08 */ addi r7, r1, 8 /* 8035C7DC 0035843C 39 01 00 0C */ addi r8, r1, 0xc /* 8035C7E0 00358440 4B FF FD 15 */ bl keyrand /* 8035C7E4 00358444 54 63 06 3E */ clrlwi r3, r3, 0x18 /* 8035C7E8 00358448 88 9C 00 00 */ lbz r4, 0(r28) /* 8035C7EC 0035844C 7C 1D 18 AE */ lbzx r0, r29, r3 /* 8035C7F0 00358450 37 7B FF FF */ addic. r27, r27, -1 /* 8035C7F4 00358454 98 1C 00 00 */ stb r0, 0(r28) /* 8035C7F8 00358458 3B 9C FF FF */ addi r28, r28, -1 /* 8035C7FC 0035845C 7C 9D 19 AE */ stbx r4, r29, r3 /* 8035C800 00358460 40 80 FF C8 */ bge lbl_8035C7C8 /* 8035C804 00358464 88 BD 00 01 */ lbz r5, 1(r29) /* 8035C808 00358468 88 9D 00 03 */ lbz r4, 3(r29) /* 8035C80C 0035846C 88 7D 00 05 */ lbz r3, 5(r29) /* 8035C810 00358470 88 1D 00 07 */ lbz r0, 7(r29) /* 8035C814 00358474 98 BD 01 00 */ stb r5, 0x100(r29) /* 8035C818 00358478 98 9D 01 01 */ stb r4, 0x101(r29) /* 8035C81C 0035847C 98 7D 01 02 */ stb r3, 0x102(r29) /* 8035C820 00358480 98 1D 01 03 */ stb r0, 0x103(r29) /* 8035C824 00358484 88 01 00 08 */ lbz r0, 8(r1) /* 8035C828 00358488 7C 1D 00 AE */ lbzx r0, r29, r0 /* 8035C82C 0035848C 98 1D 01 04 */ stb r0, 0x104(r29) lbl_8035C830: /* 8035C830 00358490 39 61 00 30 */ addi r11, r1, 0x30 /* 8035C834 00358494 4B E6 A9 41 */ bl _restgpr_27 /* 8035C838 00358498 80 01 00 34 */ lwz r0, 0x34(r1) /* 8035C83C 0035849C 7C 08 03 A6 */ mtlr r0 /* 8035C840 003584A0 38 21 00 30 */ addi r1, r1, 0x30 /* 8035C844 003584A4 4E 80 00 20 */ blr .global GOADecrypt GOADecrypt: /* 8035C848 003584A8 7C A9 03 A6 */ mtctr r5 /* 8035C84C 003584AC 2C 05 00 00 */ cmpwi r5, 0 /* 8035C850 003584B0 4C 81 00 20 */ blelr lbl_8035C854: /* 8035C854 003584B4 88 C3 01 00 */ lbz r6, 0x100(r3) /* 8035C858 003584B8 89 03 01 01 */ lbz r8, 0x101(r3) /* 8035C85C 003584BC 7C A3 30 AE */ lbzx r5, r3, r6 /* 8035C860 003584C0 38 E6 00 01 */ addi r7, r6, 1 /* 8035C864 003584C4 88 04 00 00 */ lbz r0, 0(r4) /* 8035C868 003584C8 7C A8 2A 14 */ add r5, r8, r5 /* 8035C86C 003584CC 88 C3 01 04 */ lbz r6, 0x104(r3) /* 8035C870 003584D0 98 A3 01 01 */ stb r5, 0x101(r3) /* 8035C874 003584D4 54 A5 06 3E */ clrlwi r5, r5, 0x18 /* 8035C878 003584D8 98 E3 01 00 */ stb r7, 0x100(r3) /* 8035C87C 003584DC 7C E3 30 AE */ lbzx r7, r3, r6 /* 8035C880 003584E0 7C A3 28 AE */ lbzx r5, r3, r5 /* 8035C884 003584E4 7C A3 31 AE */ stbx r5, r3, r6 /* 8035C888 003584E8 88 C3 01 03 */ lbz r6, 0x103(r3) /* 8035C88C 003584EC 88 A3 01 01 */ lbz r5, 0x101(r3) /* 8035C890 003584F0 7C C3 30 AE */ lbzx r6, r3, r6 /* 8035C894 003584F4 7C C3 29 AE */ stbx r6, r3, r5 /* 8035C898 003584F8 88 C3 01 00 */ lbz r6, 0x100(r3) /* 8035C89C 003584FC 88 A3 01 03 */ lbz r5, 0x103(r3) /* 8035C8A0 00358500 7C C3 30 AE */ lbzx r6, r3, r6 /* 8035C8A4 00358504 7C C3 29 AE */ stbx r6, r3, r5 /* 8035C8A8 00358508 88 A3 01 00 */ lbz r5, 0x100(r3) /* 8035C8AC 0035850C 7C E3 29 AE */ stbx r7, r3, r5 /* 8035C8B0 00358510 7C A3 38 AE */ lbzx r5, r3, r7 /* 8035C8B4 00358514 88 C3 01 02 */ lbz r6, 0x102(r3) /* 8035C8B8 00358518 88 E3 01 01 */ lbz r7, 0x101(r3) /* 8035C8BC 0035851C 7C A6 2A 14 */ add r5, r6, r5 /* 8035C8C0 00358520 88 C3 01 03 */ lbz r6, 0x103(r3) /* 8035C8C4 00358524 98 A3 01 02 */ stb r5, 0x102(r3) /* 8035C8C8 00358528 54 AA 06 3E */ clrlwi r10, r5, 0x18 /* 8035C8CC 0035852C 88 A3 01 04 */ lbz r5, 0x104(r3) /* 8035C8D0 00358530 7D 03 38 AE */ lbzx r8, r3, r7 /* 8035C8D4 00358534 7C E3 30 AE */ lbzx r7, r3, r6 /* 8035C8D8 00358538 7C C3 28 AE */ lbzx r6, r3, r5 /* 8035C8DC 0035853C 7C A8 3A 14 */ add r5, r8, r7 /* 8035C8E0 00358540 89 23 01 00 */ lbz r9, 0x100(r3) /* 8035C8E4 00358544 7C A6 2A 14 */ add r5, r6, r5 /* 8035C8E8 00358548 7D 03 50 AE */ lbzx r8, r3, r10 /* 8035C8EC 0035854C 7C E3 48 AE */ lbzx r7, r3, r9 /* 8035C8F0 00358550 54 A5 06 3E */ clrlwi r5, r5, 0x18 /* 8035C8F4 00358554 7C A3 28 AE */ lbzx r5, r3, r5 /* 8035C8F8 00358558 7C C8 3A 14 */ add r6, r8, r7 /* 8035C8FC 0035855C 54 C6 06 3E */ clrlwi r6, r6, 0x18 /* 8035C900 00358560 7C A3 28 AE */ lbzx r5, r3, r5 /* 8035C904 00358564 7C C3 30 AE */ lbzx r6, r3, r6 /* 8035C908 00358568 7C 06 32 78 */ xor r6, r0, r6 /* 8035C90C 0035856C 98 03 01 04 */ stb r0, 0x104(r3) /* 8035C910 00358570 7C C5 2A 78 */ xor r5, r6, r5 /* 8035C914 00358574 98 A3 01 03 */ stb r5, 0x103(r3) /* 8035C918 00358578 98 A4 00 00 */ stb r5, 0(r4) /* 8035C91C 0035857C 38 84 00 01 */ addi r4, r4, 1 /* 8035C920 00358580 42 00 FF 34 */ bdnz lbl_8035C854 /* 8035C924 00358584 4E 80 00 20 */ blr