summaryrefslogtreecommitdiff
path: root/asm/SDK/DWC/gamespy/gt2Auth.s
blob: 1fa1d3c3f6b4c729509adb10b69ccbf2f9d9c111 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global gti2GetChallenge
gti2GetChallenge:
/* 80348534 00344194  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 80348538 00344198  7C 08 02 A6 */	mflr r0
/* 8034853C 0034419C  90 01 00 24 */	stw r0, 0x24(r1)
/* 80348540 003441A0  39 61 00 20 */	addi r11, r1, 0x20
/* 80348544 003441A4  4B E7 EB E5 */	bl _savegpr_27
/* 80348548 003441A8  7C 7B 1B 78 */	mr r27, r3
/* 8034854C 003441AC  4B FF 0A 8D */	bl current_time
/* 80348550 003441B0  4B E8 48 0D */	bl srand
/* 80348554 003441B4  4B E8 47 E9 */	bl rand
/* 80348558 003441B8  3C 80 2C 0B */	lis r4, 0x2C0B02C1@ha
/* 8034855C 003441BC  3B 80 00 00 */	li r28, 0
/* 80348560 003441C0  3B E4 02 C1 */	addi r31, r4, 0x2C0B02C1@l
/* 80348564 003441C4  3B A0 00 01 */	li r29, 1
/* 80348568 003441C8  7C 1F 18 96 */	mulhw r0, r31, r3
/* 8034856C 003441CC  7C 00 26 70 */	srawi r0, r0, 4
/* 80348570 003441D0  54 04 0F FE */	srwi r4, r0, 0x1f
/* 80348574 003441D4  7C 00 22 14 */	add r0, r0, r4
/* 80348578 003441D8  1C 00 00 5D */	mulli r0, r0, 0x5d
/* 8034857C 003441DC  7C 60 18 50 */	subf r3, r0, r3
/* 80348580 003441E0  38 03 00 21 */	addi r0, r3, 0x21
/* 80348584 003441E4  98 1B 00 00 */	stb r0, 0(r27)
lbl_80348588:
/* 80348588 003441E8  7F DB EA 14 */	add r30, r27, r29
/* 8034858C 003441EC  88 BB 00 00 */	lbz r5, 0(r27)
/* 80348590 003441F0  88 DE FF FF */	lbz r6, -1(r30)
/* 80348594 003441F4  54 A4 07 FE */	clrlwi r4, r5, 0x1f
/* 80348598 003441F8  38 05 FF B1 */	addi r0, r5, -79
/* 8034859C 003441FC  7F A3 32 78 */	xor r3, r29, r6
/* 803485A0 00344200  7C A5 30 50 */	subf r5, r5, r6
/* 803485A4 00344204  7C 84 E2 78 */	xor r4, r4, r28
/* 803485A8 00344208  54 00 0F FE */	srwi r0, r0, 0x1f
/* 803485AC 0034420C  54 63 07 FE */	clrlwi r3, r3, 0x1f
/* 803485B0 00344210  54 A5 0F FE */	srwi r5, r5, 0x1f
/* 803485B4 00344214  7C 83 1A 78 */	xor r3, r4, r3
/* 803485B8 00344218  7C 60 02 78 */	xor r0, r3, r0
/* 803485BC 0034421C  7C 1C 2A 78 */	xor r28, r0, r5
/* 803485C0 00344220  4B E8 47 7D */	bl rand
/* 803485C4 00344224  7C 1F 18 96 */	mulhw r0, r31, r3
/* 803485C8 00344228  2C 1C 00 00 */	cmpwi r28, 0
/* 803485CC 0034422C  7C 00 26 70 */	srawi r0, r0, 4
/* 803485D0 00344230  54 04 0F FE */	srwi r4, r0, 0x1f
/* 803485D4 00344234  7C 00 22 14 */	add r0, r0, r4
/* 803485D8 00344238  1C 00 00 5D */	mulli r0, r0, 0x5d
/* 803485DC 0034423C  7C 60 18 50 */	subf r3, r0, r3
/* 803485E0 00344240  38 03 00 21 */	addi r0, r3, 0x21
/* 803485E4 00344244  98 1E 00 00 */	stb r0, 0(r30)
/* 803485E8 00344248  41 82 00 10 */	beq lbl_803485F8
/* 803485EC 0034424C  88 1E 00 00 */	lbz r0, 0(r30)
/* 803485F0 00344250  54 00 07 FF */	clrlwi. r0, r0, 0x1f
/* 803485F4 00344254  41 82 00 1C */	beq lbl_80348610
lbl_803485F8:
/* 803485F8 00344258  2C 1C 00 00 */	cmpwi r28, 0
/* 803485FC 0034425C  40 82 00 20 */	bne lbl_8034861C
/* 80348600 00344260  88 1E 00 00 */	lbz r0, 0(r30)
/* 80348604 00344264  54 00 07 FE */	clrlwi r0, r0, 0x1f
/* 80348608 00344268  2C 00 00 01 */	cmpwi r0, 1
/* 8034860C 0034426C  40 82 00 10 */	bne lbl_8034861C
lbl_80348610:
/* 80348610 00344270  88 7E 00 00 */	lbz r3, 0(r30)
/* 80348614 00344274  38 03 00 01 */	addi r0, r3, 1
/* 80348618 00344278  98 1E 00 00 */	stb r0, 0(r30)
lbl_8034861C:
/* 8034861C 0034427C  3B BD 00 01 */	addi r29, r29, 1
/* 80348620 00344280  2C 1D 00 20 */	cmpwi r29, 0x20
/* 80348624 00344284  41 80 FF 64 */	blt lbl_80348588
/* 80348628 00344288  39 61 00 20 */	addi r11, r1, 0x20
/* 8034862C 0034428C  7F 63 DB 78 */	mr r3, r27
/* 80348630 00344290  4B E7 EB 45 */	bl _restgpr_27
/* 80348634 00344294  80 01 00 24 */	lwz r0, 0x24(r1)
/* 80348638 00344298  7C 08 03 A6 */	mtlr r0
/* 8034863C 0034429C  38 21 00 20 */	addi r1, r1, 0x20
/* 80348640 003442A0  4E 80 00 20 */	blr

.global gti2GetResponse
gti2GetResponse:
/* 80348644 003442A4  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 80348648 003442A8  7C 08 02 A6 */	mflr r0
/* 8034864C 003442AC  90 01 00 34 */	stw r0, 0x34(r1)
/* 80348650 003442B0  39 61 00 30 */	addi r11, r1, 0x30
/* 80348654 003442B4  4B E7 EA C5 */	bl _savegpr_23
/* 80348658 003442B8  3C A0 80 45 */	lis r5, lbl_8044B5E0@ha
/* 8034865C 003442BC  7C 79 1B 78 */	mr r25, r3
/* 80348660 003442C0  7C 9A 23 78 */	mr r26, r4
/* 80348664 003442C4  38 65 B5 E0 */	addi r3, r5, lbl_8044B5E0@l
/* 80348668 003442C8  4B E7 E4 FD */	bl strlen
/* 8034866C 003442CC  38 00 00 1F */	li r0, 0x1f
/* 80348670 003442D0  7C 7E 1B 78 */	mr r30, r3
/* 80348674 003442D4  38 E0 00 00 */	li r7, 0
/* 80348678 003442D8  38 C0 00 01 */	li r6, 1
/* 8034867C 003442DC  7C 09 03 A6 */	mtctr r0
lbl_80348680:
/* 80348680 003442E0  7D 1A 32 14 */	add r8, r26, r6
/* 80348684 003442E4  88 BA 00 00 */	lbz r5, 0(r26)
/* 80348688 003442E8  89 28 FF FF */	lbz r9, -1(r8)
/* 8034868C 003442EC  54 A4 07 FE */	clrlwi r4, r5, 0x1f
/* 80348690 003442F0  38 05 FF B1 */	addi r0, r5, -79
/* 80348694 003442F4  7C C3 4A 78 */	xor r3, r6, r9
/* 80348698 003442F8  7C A5 48 50 */	subf r5, r5, r9
/* 8034869C 003442FC  7C 84 3A 78 */	xor r4, r4, r7
/* 803486A0 00344300  54 00 0F FE */	srwi r0, r0, 0x1f
/* 803486A4 00344304  54 63 07 FE */	clrlwi r3, r3, 0x1f
/* 803486A8 00344308  54 A5 0F FE */	srwi r5, r5, 0x1f
/* 803486AC 0034430C  7C 83 1A 78 */	xor r3, r4, r3
/* 803486B0 00344310  7C 60 02 78 */	xor r0, r3, r0
/* 803486B4 00344314  7C 07 2A 79 */	xor. r7, r0, r5
/* 803486B8 00344318  41 82 00 10 */	beq lbl_803486C8
/* 803486BC 0034431C  88 08 00 00 */	lbz r0, 0(r8)
/* 803486C0 00344320  54 00 07 FF */	clrlwi. r0, r0, 0x1f
/* 803486C4 00344324  41 82 00 1C */	beq lbl_803486E0
lbl_803486C8:
/* 803486C8 00344328  2C 07 00 00 */	cmpwi r7, 0
/* 803486CC 0034432C  40 82 00 1C */	bne lbl_803486E8
/* 803486D0 00344330  88 08 00 00 */	lbz r0, 0(r8)
/* 803486D4 00344334  54 00 07 FE */	clrlwi r0, r0, 0x1f
/* 803486D8 00344338  2C 00 00 01 */	cmpwi r0, 1
/* 803486DC 0034433C  40 82 00 0C */	bne lbl_803486E8
lbl_803486E0:
/* 803486E0 00344340  3B A0 00 00 */	li r29, 0
/* 803486E4 00344344  48 00 00 10 */	b lbl_803486F4
lbl_803486E8:
/* 803486E8 00344348  38 C6 00 01 */	addi r6, r6, 1
/* 803486EC 0034434C  42 00 FF 94 */	bdnz lbl_80348680
/* 803486F0 00344350  3B A0 00 01 */	li r29, 1
lbl_803486F4:
/* 803486F4 00344354  3F E0 80 45 */	lis r31, lbl_8044B5E0@ha
/* 803486F8 00344358  7F 38 CB 78 */	mr r24, r25
/* 803486FC 0034435C  3B FF B5 E0 */	addi r31, r31, lbl_8044B5E0@l
/* 80348700 00344360  3B 60 00 00 */	li r27, 0
/* 80348704 00344364  3B 80 00 00 */	li r28, 0
/* 80348708 00344368  3E E0 2C 0B */	lis r23, 0x2c0b
lbl_8034870C:
/* 8034870C 0034436C  2C 1D 00 00 */	cmpwi r29, 0
/* 80348710 00344370  41 82 00 14 */	beq lbl_80348724
/* 80348714 00344374  2C 1B 00 00 */	cmpwi r27, 0
/* 80348718 00344378  41 82 00 0C */	beq lbl_80348724
/* 8034871C 0034437C  2C 1B 00 0D */	cmpwi r27, 0xd
/* 80348720 00344380  40 82 00 30 */	bne lbl_80348750
lbl_80348724:
/* 80348724 00344384  4B E8 46 19 */	bl rand
/* 80348728 00344388  38 17 02 C1 */	addi r0, r23, 0x2c1
/* 8034872C 0034438C  7C 00 18 96 */	mulhw r0, r0, r3
/* 80348730 00344390  7C 00 26 70 */	srawi r0, r0, 4
/* 80348734 00344394  54 04 0F FE */	srwi r4, r0, 0x1f
/* 80348738 00344398  7C 00 22 14 */	add r0, r0, r4
/* 8034873C 0034439C  1C 00 00 5D */	mulli r0, r0, 0x5d
/* 80348740 003443A0  7C 60 18 50 */	subf r3, r0, r3
/* 80348744 003443A4  38 03 00 21 */	addi r0, r3, 0x21
/* 80348748 003443A8  98 18 00 00 */	stb r0, 0(r24)
/* 8034874C 003443AC  48 00 00 B8 */	b lbl_80348804
lbl_80348750:
/* 80348750 003443B0  2C 1B 00 01 */	cmpwi r27, 1
/* 80348754 003443B4  41 82 00 0C */	beq lbl_80348760
/* 80348758 003443B8  2C 1B 00 0E */	cmpwi r27, 0xe
/* 8034875C 003443BC  40 82 00 14 */	bne lbl_80348770
lbl_80348760:
/* 80348760 003443C0  7C 1A D8 AE */	lbzx r0, r26, r27
/* 80348764 003443C4  7C 7A DA 14 */	add r3, r26, r27
/* 80348768 003443C8  7C 00 07 74 */	extsb r0, r0
/* 8034876C 003443CC  48 00 00 10 */	b lbl_8034877C
lbl_80348770:
/* 80348770 003443D0  7C 7A DA 14 */	add r3, r26, r27
/* 80348774 003443D4  88 03 FF FF */	lbz r0, -1(r3)
/* 80348778 003443D8  7C 00 07 74 */	extsb r0, r0
lbl_8034877C:
/* 8034877C 003443DC  88 E3 00 00 */	lbz r7, 0(r3)
/* 80348780 003443E0  7C 80 E1 D6 */	mullw r4, r0, r28
/* 80348784 003443E4  38 17 02 C1 */	addi r0, r23, 0x2c1
/* 80348788 003443E8  7C DB 3A 14 */	add r6, r27, r7
/* 8034878C 003443EC  7C A6 F3 D6 */	divw r5, r6, r30
/* 80348790 003443F0  7C 64 F3 D6 */	divw r3, r4, r30
/* 80348794 003443F4  7C A5 F1 D6 */	mullw r5, r5, r30
/* 80348798 003443F8  7C A5 30 50 */	subf r5, r5, r6
/* 8034879C 003443FC  7C BF 28 AE */	lbzx r5, r31, r5
/* 803487A0 00344400  7C 63 F1 D6 */	mullw r3, r3, r30
/* 803487A4 00344404  7C A6 07 74 */	extsb r6, r5
/* 803487A8 00344408  7C BB 39 D6 */	mullw r5, r27, r7
/* 803487AC 0034440C  7C 63 20 50 */	subf r3, r3, r4
/* 803487B0 00344410  7C 7F 18 AE */	lbzx r3, r31, r3
/* 803487B4 00344414  7C 63 07 74 */	extsb r3, r3
/* 803487B8 00344418  7C A6 2A 14 */	add r5, r6, r5
/* 803487BC 0034441C  54 A4 D8 08 */	slwi r4, r5, 0x1b
/* 803487C0 00344420  54 A5 0F FE */	srwi r5, r5, 0x1f
/* 803487C4 00344424  7C 85 20 50 */	subf r4, r5, r4
/* 803487C8 00344428  54 84 28 3E */	rotlwi r4, r4, 5
/* 803487CC 0034442C  7C 84 2A 14 */	add r4, r4, r5
/* 803487D0 00344430  7C 9A 20 AE */	lbzx r4, r26, r4
/* 803487D4 00344434  7C 84 1A 78 */	xor r4, r4, r3
/* 803487D8 00344438  7C 83 FE 70 */	srawi r3, r4, 0x1f
/* 803487DC 0034443C  7C 64 22 78 */	xor r4, r3, r4
/* 803487E0 00344440  7C 83 20 50 */	subf r4, r3, r4
/* 803487E4 00344444  7C 00 20 96 */	mulhw r0, r0, r4
/* 803487E8 00344448  7C 00 26 70 */	srawi r0, r0, 4
/* 803487EC 0034444C  54 03 0F FE */	srwi r3, r0, 0x1f
/* 803487F0 00344450  7C 00 1A 14 */	add r0, r0, r3
/* 803487F4 00344454  1C 00 00 5D */	mulli r0, r0, 0x5d
/* 803487F8 00344458  7C 60 20 50 */	subf r3, r0, r4
/* 803487FC 0034445C  38 03 00 21 */	addi r0, r3, 0x21
/* 80348800 00344460  98 18 00 00 */	stb r0, 0(r24)
lbl_80348804:
/* 80348804 00344464  3B 7B 00 01 */	addi r27, r27, 1
/* 80348808 00344468  3B 18 00 01 */	addi r24, r24, 1
/* 8034880C 0034446C  2C 1B 00 20 */	cmpwi r27, 0x20
/* 80348810 00344470  3B 9C 46 47 */	addi r28, r28, 0x4647
/* 80348814 00344474  41 80 FE F8 */	blt lbl_8034870C
/* 80348818 00344478  39 61 00 30 */	addi r11, r1, 0x30
/* 8034881C 0034447C  7F 23 CB 78 */	mr r3, r25
/* 80348820 00344480  4B E7 E9 45 */	bl _restgpr_23
/* 80348824 00344484  80 01 00 34 */	lwz r0, 0x34(r1)
/* 80348828 00344488  7C 08 03 A6 */	mtlr r0
/* 8034882C 0034448C  38 21 00 30 */	addi r1, r1, 0x30
/* 80348830 00344490  4E 80 00 20 */	blr

.global gti2CheckResponse
gti2CheckResponse:
/* 80348834 00344494  38 00 00 08 */	li r0, 8
/* 80348838 00344498  38 C0 00 00 */	li r6, 0
/* 8034883C 0034449C  7C 09 03 A6 */	mtctr r0
lbl_80348840:
/* 80348840 003444A0  2C 06 00 00 */	cmpwi r6, 0
/* 80348844 003444A4  41 82 00 24 */	beq lbl_80348868
/* 80348848 003444A8  2C 06 00 0D */	cmpwi r6, 0xd
/* 8034884C 003444AC  41 82 00 1C */	beq lbl_80348868
/* 80348850 003444B0  88 A3 00 00 */	lbz r5, 0(r3)
/* 80348854 003444B4  88 04 00 00 */	lbz r0, 0(r4)
/* 80348858 003444B8  7C 05 00 40 */	cmplw r5, r0
/* 8034885C 003444BC  41 82 00 0C */	beq lbl_80348868
/* 80348860 003444C0  38 60 00 00 */	li r3, 0
/* 80348864 003444C4  4E 80 00 20 */	blr
lbl_80348868:
/* 80348868 003444C8  34 C6 00 01 */	addic. r6, r6, 1
/* 8034886C 003444CC  41 82 00 24 */	beq lbl_80348890
/* 80348870 003444D0  2C 06 00 0D */	cmpwi r6, 0xd
/* 80348874 003444D4  41 82 00 1C */	beq lbl_80348890
/* 80348878 003444D8  88 A3 00 01 */	lbz r5, 1(r3)
/* 8034887C 003444DC  88 04 00 01 */	lbz r0, 1(r4)
/* 80348880 003444E0  7C 05 00 40 */	cmplw r5, r0
/* 80348884 003444E4  41 82 00 0C */	beq lbl_80348890
/* 80348888 003444E8  38 60 00 00 */	li r3, 0
/* 8034888C 003444EC  4E 80 00 20 */	blr
lbl_80348890:
/* 80348890 003444F0  34 C6 00 01 */	addic. r6, r6, 1
/* 80348894 003444F4  41 82 00 24 */	beq lbl_803488B8
/* 80348898 003444F8  2C 06 00 0D */	cmpwi r6, 0xd
/* 8034889C 003444FC  41 82 00 1C */	beq lbl_803488B8
/* 803488A0 00344500  88 A3 00 02 */	lbz r5, 2(r3)
/* 803488A4 00344504  88 04 00 02 */	lbz r0, 2(r4)
/* 803488A8 00344508  7C 05 00 40 */	cmplw r5, r0
/* 803488AC 0034450C  41 82 00 0C */	beq lbl_803488B8
/* 803488B0 00344510  38 60 00 00 */	li r3, 0
/* 803488B4 00344514  4E 80 00 20 */	blr
lbl_803488B8:
/* 803488B8 00344518  34 C6 00 01 */	addic. r6, r6, 1
/* 803488BC 0034451C  41 82 00 24 */	beq lbl_803488E0
/* 803488C0 00344520  2C 06 00 0D */	cmpwi r6, 0xd
/* 803488C4 00344524  41 82 00 1C */	beq lbl_803488E0
/* 803488C8 00344528  88 A3 00 03 */	lbz r5, 3(r3)
/* 803488CC 0034452C  88 04 00 03 */	lbz r0, 3(r4)
/* 803488D0 00344530  7C 05 00 40 */	cmplw r5, r0
/* 803488D4 00344534  41 82 00 0C */	beq lbl_803488E0
/* 803488D8 00344538  38 60 00 00 */	li r3, 0
/* 803488DC 0034453C  4E 80 00 20 */	blr
lbl_803488E0:
/* 803488E0 00344540  38 C6 00 01 */	addi r6, r6, 1
/* 803488E4 00344544  38 84 00 04 */	addi r4, r4, 4
/* 803488E8 00344548  38 63 00 04 */	addi r3, r3, 4
/* 803488EC 0034454C  42 00 FF 54 */	bdnz lbl_80348840
/* 803488F0 00344550  38 60 00 01 */	li r3, 1
/* 803488F4 00344554  4E 80 00 20 */	blr