QUOTE
SataCdRomDecryptHostChallengeResponseTable:
.set var_1A0, -0x1A0
.set var_180, -0x180
.set var_120, -0x120
.set var_10, -0x10
.set var_8, -8
mflr %r12 # Move from link register
stw %r12, var_8(%sp) # Store Word
std %r31, var_10(%sp) # Store Double Word
stwu %sp, -0x1F0(%sp) # Store Word with Update
mr %r31, %r3 # Move Register
addi %r3, %sp, 0x1F0+var_180 # Add Immediate
bl XeCryptShaInit # Branch
li %r5, 0x2C # Load Immediate
addi %r4, %r31, 0x4A3 # Add Immediate
addi %r3, %sp, 0x1F0+var_180 # Add Immediate
bl XeCryptShaUpdate # Branch
li %r5, 0x14 # Load Immediate
addi %r4, %sp, 0x1F0+var_1A0 # Add Immediate
addi %r3, %sp, 0x1F0+var_180 # Add Immediate
bl XeCryptShaFinal # Branch
li %r5, 7 # Load Immediate
addi %r4, %sp, 0x1F0+var_1A0 # Add Immediate
addi %r3, %sp, 0x1F0+var_120 # Add Immediate
bl XeCryptRc4Key # Branch
li %r5, 0xFD # Load Immediate
addi %r4, %r31, 0x306 # Add Immediate
addi %r3, %sp, 0x1F0+var_120 # Add Immediate
bl XeCryptRc4Ecb # Branch
addi %sp, %sp, 0x1F0 # Add Immediate
lwz %r12, var_8(%sp) # Load Word and Zero
mtlr %r12 # Move to link register
ld %r31, var_10(%sp) # Load Double Word
blr # Branch unconditionally
# End of function SataCdRomDecryptHostChallengeResponseTable
XeCryptShaInit:
lis %r10, 0x6745 # 0x67452301 # Load Immediate Shifted
lis %r9, 0xEFCD # 0xEFCDAB89 # Load Immediate Shifted
lis %r8, 0x98BA # 0x98BADCFE # Load Immediate Shifted
lis %r7, 0x1032 # 0x10325476 # Load Immediate Shifted
lis %r6, 0xC3D2 # 0xC3D2E1F0 # Load Immediate Shifted
li %r11, 0 # Load Immediate
ori %r10, %r10, 0x2301 # 0x67452301 # OR Immediate
ori %r9, %r9, 0xAB89 # 0xEFCDAB89 # OR Immediate
ori %r8, %r8, 0xDCFE # 0x98BADCFE # OR Immediate
ori %r7, %r7, 0x5476 # 0x10325476 # OR Immediate
ori %r6, %r6, 0xE1F0 # 0xC3D2E1F0 # OR Immediate
stw %r11, 0(%r3) # Store Word
stw %r10, 4(%r3) # Store Word
stw %r9, 8(%r3) # Store Word
stw %r8, 0xC(%r3) # Store Word
stw %r7, 0x10(%r3) # Store Word
stw %r6, 0x14(%r3) # Store Word
blr # Branch unconditionally
# End of function XeCryptShaInit
XeCryptShaUpdate:
mflr %r12 # Move from link register
bl __savegprlr_25 # Branch
stwu %sp, -0x90(%sp) # Store Word with Update
mr %r29, %r3 # Move Register
mr %r31, %r5 # Move Register
mr %r30, %r4 # Move Register
lwz %r11, 0(%r29) # Load Word and Zero
clrlwi. %r28, %r11, 26 # Clear Left Immediate
add %r11, %r11, %r31 # Add
stw %r11, 0(%r29) # Store Word
beq loc_800F7E2C # Branch if equal
add %r27, %r28, %r31 # Add
cmplwi cr6, %r27, 0x40 # Compare Logical Word Immediate
blt cr6, loc_800F7E2C # Branch if less than
add %r11, %r28, %r29 # Add
subfic %r5, %r28, 0x40 # Subtract from Immediate Carrying
addi %r3, %r11, 0x18 # Add Immediate
bl memcpy # Branch
subf %r11, %r28, %r30 # Subtract from
addi %r4, %r29, 0x18 # Add Immediate
addi %r3, %r29, 4 # Add Immediate
addi %r30, %r11, 0x40 # Add Immediate
subi %r31, %r27, 0x40 # Subtract Immediate
bl XeCryptShaTransform # Branch
li %r28, 0 # Load Immediate
loc_800F7E2C:
clrlwi. %r11, %r30, 30 # Clear Left Immediate
cmplwi cr6, %r31, 0x40 # Compare Logical Word Immediate
blt cr6, loc_800F7E98 # Branch if less than
srwi %r27, %r31, 6 # Shift Right Immediate
beq loc_800F7E78 # Branch if equal
addi %r26, %r29, 0x18 # Add Immediate
addi %r25, %r29, 4 # Add Immediate
loc_800F7E48:
li %r5, 0x40 # Load Immediate
mr %r4, %r30 # Move Register
mr %r3, %r26 # Move Register
bl memcpy # Branch
mr %r4, %r26 # Move Register
mr %r3, %r25 # Move Register
bl XeCryptShaTransform # Branch
subic. %r27, %r27, 1 # Subtract Immediate Carrying
addi %r30, %r30, 0x40 # Add Immediate
subi %r31, %r31, 0x40 # Subtract Immediate
bne loc_800F7E48 # Branch if not equal
b loc_800F7E98 # Branch
# ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
loc_800F7E78:
addi %r26, %r29, 4 # Add Immediate
loc_800F7E7C:
mr %r4, %r30 # Move Register
mr %r3, %r26 # Move Register
bl XeCryptShaTransform # Branch
subic. %r27, %r27, 1 # Subtract Immediate Carrying
addi %r30, %r30, 0x40 # Add Immediate
subi %r31, %r31, 0x40 # Subtract Immediate
bne loc_800F7E7C # Branch if not equal
loc_800F7E98:
# XeCryptShaUpdate+ACj
cmplwi cr6, %r31, 0 # Compare Logical Word Immediate
beq cr6, loc_800F7EB4 # Branch if equal
add %r11, %r28, %r29 # Add
mr %r5, %r31 # Move Register
mr %r4, %r30 # Move Register
addi %r3, %r11, 0x18 # Add Immediate
bl memcpy # Branch
loc_800F7EB4:
addi %sp, %sp, 0x90 # Add Immediate
b __restgprlr_25 # Branch
# End of function XeCryptShaUpdate
XeCryptShaFinal:
.set var_50, -0x50
mflr %r12 # Move from link register
bl __savegprlr_25 # Branch
stwu %sp, -0xA0(%sp) # Store Word with Update
mr %r31, %r3 # Move Register
mr %r25, %r4 # Move Register
addi %r30, %r31, 0x18 # Add Immediate
mr %r26, %r5 # Move Register
li %r4, 0 # Load Immediate
lwz %r11, 0(%r31) # Load Word and Zero
clrlwi %r29, %r11, 26 # Clear Left Immediate
subfic %r28, %r29, 0x40 # Subtract from Immediate Carrying
add %r27, %r29, %r30 # Add
stw %r11, 0xA0+var_50(%sp) # Store Word
mr %r5, %r28 # Move Register
mr %r3, %r27 # Move Register
bl memset # Branch
li %r11, 0x80 # Load Immediate
cmplwi cr6, %r28, 9 # Compare Logical Word Immediate
stb %r11, 0(%r27) # Store Byte
bge cr6, loc_800F7F2C # Branch if greater than or equal
mr %r4, %r30 # Move Register
addi %r3, %r31, 4 # Add Immediate
bl XeCryptShaTransform # Branch
addi %r5, %r29, 1 # Add Immediate
li %r4, 0 # Load Immediate
mr %r3, %r30 # Move Register
bl memset # Branch
loc_800F7F2C:
lwz %r11, 0xA0+var_50(%sp) # Load Word and Zero
li %r5, 4 # Load Immediate
addi %r4, %sp, 0xA0+var_50 # Add Immediate
slwi %r11, %r11, 3 # Shift Left Immediate
addi %r3, %r30, 0x3C # Add Immediate
stw %r11, 0xA0+var_50(%sp) # Store Word
bl memcpy # Branch
addi %r31, %r31, 4 # Add Immediate
mr %r4, %r30 # Move Register
mr %r3, %r31 # Move Register
bl XeCryptShaTransform # Branch
cmplwi cr6, %r26, 0 # Compare Logical Word Immediate
beq cr6, loc_800F7F7C # Branch if equal
cmplwi cr6, %r26, 0x14 # Compare Logical Word Immediate
mr %r5, %r26 # Move Register
blt cr6, loc_800F7F70 # Branch if less than
li %r5, 0x14 # Load Immediate
loc_800F7F70:
mr %r4, %r31 # Move Register
mr %r3, %r25 # Move Register
bl memcpy # Branch
loc_800F7F7C:
addi %sp, %sp, 0xA0 # Add Immediate
b __restgprlr_25 # Branch
# End of function XeCryptShaFinal
XeCryptRc4Key:
lis %r6, 1 # 0x10203 # Load Immediate Shifted
lis %r7, 0x808 # 0x8080808 # Load Immediate Shifted
ori %r6, %r6, 0x203 # 0x10203 # OR Immediate
ori %r7, %r7, 0x808 # 0x8080808 # OR Immediate
rldicr %r6, %r6, 32,31 # Rotate Left Double Word Immediate then Clear Right
rldimi %r7, %r7, 32,0 # Rotate Left Double Word Immediate then Mask Insert
oris %r6, %r6, 0x405 # OR Immediate Shifted
li %r8, 8 # Load Immediate
ori %r6, %r6, 0x607 # OR Immediate
mtctr %r8 # Move to count register
loc_800F8378:
std %r6, 0(%r3) # Store Double Word
add %r6, %r6, %r7 # Add
std %r6, 8(%r3) # Store Double Word
add %r6, %r6, %r7 # Add
std %r6, 0x10(%r3) # Store Double Word
add %r6, %r6, %r7 # Add
std %r6, 0x18(%r3) # Store Double Word
add %r6, %r6, %r7 # Add
addi %r3, %r3, 0x20 # Add Immediate
bc 25, lt, loc_800F8378 # Branch Conditional
li %r8, 0 # Load Immediate
sth %r8, 0(%r3) # Store Half Word
subi %r3, %r3, 0x100 # Subtract Immediate
li %r9, 0 # Load Immediate
li %r10, 0 # Load Immediate
li %r0, 0x100 # Load Immediate
mtctr %r0 # Move to count register
loc_800F83BC:
lbzx %r11, %r3, %r8 # Load Byte and Zero Indexed
lbzx %r7, %r4, %r10 # Load Byte and Zero Indexed
add %r9, %r9, %r11 # Add
add %r9, %r9, %r7 # Add
clrlwi %r9, %r9, 24 # Clear Left Immediate
lbzx %r6, %r3, %r9 # Load Byte and Zero Indexed
addi %r10, %r10, 1 # Add Immediate
stbx %r6, %r3, %r8 # Store Byte Indexed
addi %r8, %r8, 1 # Add Immediate
stbx %r11, %r3, %r9 # Store Byte Indexed
cmplw %r10, %r5 # Compare Logical Word
bc 7, eq, loc_800F83F0 # Branch Conditional
li %r10, 0 # Load Immediate
loc_800F83F0:
bc 25, lt, loc_800F83BC # Branch Conditional
blr # Branch unconditionally
# End of function XeCryptRc4Key
XeCryptBnDw_Copy:
cmplwi %r5, 0 # Compare Logical Word Immediate
cmplw cr6, %r3, %r4 # Compare Logical Word
subf %r4, %r3, %r4 # Subtract from
mtctr %r5 # Move to count register
bclr 14, eq # Branch Conditional to Link Register
bclr 14, 4*cr6+eq # Branch Conditional to Link Register
loc_800F4E88:
lwz %r6, 0(%r3) # Load Word and Zero
stwx %r6, %r3, %r4 # Store Word Indexed
addi %r3, %r3, 4 # Add Immediate
bc 25, lt, loc_800F4E88 # Branch Conditional
blr # Branch unconditionally
# End of function XeCryptBnDw_Copy
XeCryptRc4Ecb:
cmplwi %r5, 0 # Compare Logical Word Immediate
bclr 14, eq # Branch Conditional to Link Register
mtctr %r5 # Move to count register
lbz %r6, 0x100(%r3) # Load Byte and Zero
lbz %r7, 0x101(%r3) # Load Byte and Zero
loc_800F840C:
addi %r6, %r6, 1 # Add Immediate
clrlwi %r6, %r6, 24 # Clear Left Immediate
lbzx %r8, %r3, %r6 # Load Byte and Zero Indexed
add %r7, %r7, %r8 # Add
clrlwi %r7, %r7, 24 # Clear Left Immediate
lbzx %r9, %r3, %r7 # Load Byte and Zero Indexed
stbx %r9, %r3, %r6 # Store Byte Indexed
stbx %r8, %r3, %r7 # Store Byte Indexed
add %r8, %r8, %r9 # Add
clrlwi %r8, %r8, 24 # Clear Left Immediate
lbzx %r8, %r3, %r8 # Load Byte and Zero Indexed
lbz %r9, 0(%r4) # Load Byte and Zero
xor %r8, %r8, %r9 # XOR
stb %r8, 0(%r4) # Store Byte
addi %r4, %r4, 1 # Add Immediate
bc 25, lt, loc_800F840C # Branch Conditional
stb %r6, 0x100(%r3) # Store Byte
stb %r7, 0x101(%r3) # Store Byte
blr # Branch unconditionally
# End of function XeCryptRc4Ecb
XeCryptShaTransform:
.set var_190, -0x190
.set var_188, -0x188
mflr %r12 # Move from link register
bl __savegprlr_24 # Branch
stwu %sp, -0x1E0(%sp) # Store Word with Update
mr %r24, %r3 # Move Register
mr %r3, %r4 # Move Register
li %r5, 0x10 # Load Immediate
addi %r4, %sp, 0x1E0+var_190 # Add Immediate
addi %r31, %sp, 0x1E0+var_190 # Add Immediate
lwz %r26, 0(%r24) # Load Word and Zero
lwz %r27, 4(%r24) # Load Word and Zero
lwz %r28, 8(%r24) # Load Word and Zero
lwz %r29, 0xC(%r24) # Load Word and Zero
lwz %r30, 0x10(%r24) # Load Word and Zero
bl XeCryptBnDw_Copy # Branch
addi %r11, %sp, 0x1E0+var_188 # Add Immediate
li %r10, 0x40 # Load Immediate
loc_800F79E8:
lwz %r8, 0x18(%r11) # Load Word and Zero
subic. %r10, %r10, 1 # Subtract Immediate Carrying
lwz %r9, 0x2C(%r11) # Load Word and Zero
lwz %r7, -8(%r11) # Load Word and Zero
xor %r9, %r9, %r8 # XOR
lwz %r8, 0(%r11) # Load Word and Zero
xor %r9, %r9, %r7 # XOR
xor %r9, %r9, %r8 # XOR
rotlwi %r9, %r9, 1 # Rotate Left Immediate
stw %r9, 0x38(%r11) # Store Word
addi %r11, %r11, 4 # Add Immediate
bne loc_800F79E8 # Branch if not equal
lis %r11, 0x5A82 # 0x5A827999 # Load Immediate Shifted
li %r7, 4 # Load Immediate
ori %r11, %r11, 0x7999 # 0x5A827999 # OR Immediate
loc_800F7A24:
xor %r10, %r29, %r28 # XOR
lwz %r8, 0(%r31) # Load Word and Zero
rotlwi %r9, %r26, 5 # Rotate Left Immediate
lwz %r25, 4(%r31) # Load Word and Zero
and %r6, %r10, %r27 # AND
lwz %r3, 8(%r31) # Load Word and Zero
rotrwi %r10, %r27, 2 # Rotate Right Immediate
lwz %r5, 0xC(%r31) # Load Word and Zero
xor %r6, %r6, %r29 # XOR
lwz %r4, 0x10(%r31) # Load Word and Zero
subic. %r7, %r7, 1 # Subtract Immediate Carrying
add %r9, %r6, %r9 # Add
xor %r6, %r28, %r10 # XOR
add %r9, %r9, %r30 # Add
and %r6, %r6, %r26 # AND
add %r9, %r9, %r8 # Add
xor %r6, %r6, %r28 # XOR
add %r8, %r9, %r11 # Add
rotrwi %r9, %r26, 2 # Rotate Right Immediate
add %r27, %r6, %r25 # Add
xor %r30, %r10, %r9 # XOR
rotlwi %r6, %r8, 5 # Rotate Left Immediate
and %r26, %r30, %r8 # AND
rotrwi %r30, %r8, 2 # Rotate Right Immediate
xor %r8, %r26, %r10 # XOR
addi %r31, %r31, 0x14 # Add Immediate
add %r3, %r8, %r3 # Add
add %r8, %r27, %r6 # Add
add %r8, %r8, %r29 # Add
xor %r29, %r30, %r9 # XOR
add %r8, %r8, %r11 # Add
and %r27, %r29, %r8 # AND
rotlwi %r6, %r8, 5 # Rotate Left Immediate
rotrwi %r29, %r8, 2 # Rotate Right Immediate
xor %r8, %r27, %r9 # XOR
add %r5, %r8, %r5 # Add
add %r8, %r3, %r6 # Add
xor %r3, %r30, %r29 # XOR
add %r8, %r8, %r28 # Add
add %r8, %r8, %r11 # Add
rotlwi %r6, %r8, 5 # Rotate Left Immediate
and %r3, %r3, %r8 # AND
add %r6, %r5, %r6 # Add
rotrwi %r28, %r8, 2 # Rotate Right Immediate
add %r10, %r6, %r10 # Add
xor %r8, %r3, %r30 # XOR
add %r27, %r10, %r11 # Add
add %r8, %r8, %r4 # Add
rotlwi %r10, %r27, 5 # Rotate Left Immediate
add %r10, %r8, %r10 # Add
add %r10, %r10, %r9 # Add
add %r26, %r10, %r11 # Add
bne loc_800F7A24 # Branch if not equal
lis %r11, 0x6ED9 # 0x6ED9EBA1 # Load Immediate Shifted
li %r7, 4 # Load Immediate
ori %r11, %r11, 0xEBA1 # 0x6ED9EBA1 # OR Immediate
loc_800F7B04:
xor %r10, %r29, %r28 # XOR
lwz %r8, 0(%r31) # Load Word and Zero
rotlwi %r9, %r26, 5 # Rotate Left Immediate
lwz %r25, 4(%r31) # Load Word and Zero
xor %r6, %r10, %r27 # XOR
lwz %r4, 8(%r31) # Load Word and Zero
rotrwi %r10, %r27, 2 # Rotate Right Immediate
lwz %r5, 0xC(%r31) # Load Word and Zero
add %r9, %r6, %r9 # Add
lwz %r3, 0x10(%r31) # Load Word and Zero
subic. %r7, %r7, 1 # Subtract Immediate Carrying
add %r9, %r9, %r30 # Add
addi %r31, %r31, 0x14 # Add Immediate
add %r9, %r9, %r8 # Add
xor %r8, %r28, %r10 # XOR
add %r9, %r9, %r11 # Add
xor %r6, %r8, %r26 # XOR
rotrwi %r8, %r26, 2 # Rotate Right Immediate
xor %r26, %r9, %r10 # XOR
add %r27, %r6, %r25 # Add
rotrwi %r30, %r9, 2 # Rotate Right Immediate
rotlwi %r6, %r9, 5 # Rotate Left Immediate
xor %r9, %r26, %r8 # XOR
add %r4, %r9, %r4 # Add
add %r9, %r27, %r6 # Add
add %r9, %r9, %r29 # Add
add %r9, %r9, %r11 # Add
xor %r27, %r30, %r9 # XOR
rotlwi %r6, %r9, 5 # Rotate Left Immediate
rotrwi %r29, %r9, 2 # Rotate Right Immediate
xor %r9, %r27, %r8 # XOR
add %r5, %r9, %r5 # Add
add %r9, %r4, %r6 # Add
xor %r4, %r30, %r29 # XOR
add %r9, %r9, %r28 # Add
add %r9, %r9, %r11 # Add
rotlwi %r6, %r9, 5 # Rotate Left Immediate
xor %r4, %r4, %r9 # XOR
add %r6, %r5, %r6 # Add
rotrwi %r28, %r9, 2 # Rotate Right Immediate
add %r10, %r6, %r10 # Add
add %r9, %r4, %r3 # Add
add %r27, %r10, %r11 # Add
rotlwi %r10, %r27, 5 # Rotate Left Immediate
add %r10, %r9, %r10 # Add
add %r10, %r10, %r8 # Add
add %r26, %r10, %r11 # Add
bne loc_800F7B04 # Branch if not equal
lis %r11, 0x70E4 # 0x70E44324 # Load Immediate Shifted
li %r7, 4 # Load Immediate
ori %r11, %r11, 0x4324 # 0x70E44324 # OR Immediate
loc_800F7BD0:
or %r10, %r28, %r27 # OR
lwz %r8, 0(%r31) # Load Word and Zero
and %r6, %r28, %r27 # AND
lwz %r25, 4(%r31) # Load Word and Zero
and %r10, %r10, %r29 # AND
lwz %r3, 8(%r31) # Load Word and Zero
rotlwi %r9, %r26, 5 # Rotate Left Immediate
lwz %r5, 0xC(%r31) # Load Word and Zero
or %r6, %r10, %r6 # OR
lwz %r4, 0x10(%r31) # Load Word and Zero
rotrwi %r10, %r27, 2 # Rotate Right Immediate
add %r9, %r6, %r9 # Add
subic. %r7, %r7, 1 # Subtract Immediate Carrying
add %r9, %r9, %r30 # Add
and %r30, %r10, %r26 # AND
add %r9, %r9, %r8 # Add
or %r8, %r10, %r26 # OR
subf %r9, %r11, %r9 # Subtract from
and %r6, %r8, %r28 # AND
rotrwi %r8, %r26, 2 # Rotate Right Immediate
or %r6, %r6, %r30 # OR
or %r30, %r9, %r8 # OR
add %r27, %r6, %r25 # Add
and %r26, %r9, %r8 # AND
and %r25, %r30, %r10 # AND
rotrwi %r30, %r9, 2 # Rotate Right Immediate
rotlwi %r6, %r9, 5 # Rotate Left Immediate
or %r9, %r25, %r26 # OR
addi %r31, %r31, 0x14 # Add Immediate
add %r3, %r9, %r3 # Add
add %r9, %r27, %r6 # Add
add %r9, %r9, %r29 # Add
subf %r9, %r11, %r9 # Subtract from
or %r29, %r30, %r9 # OR
and %r27, %r30, %r9 # AND
and %r26, %r29, %r8 # AND
rotrwi %r29, %r9, 2 # Rotate Right Immediate
rotlwi %r6, %r9, 5 # Rotate Left Immediate
or %r9, %r26, %r27 # OR
add %r5, %r9, %r5 # Add
add %r9, %r3, %r6 # Add
add %r9, %r9, %r28 # Add
subf %r9, %r11, %r9 # Subtract from
rotlwi %r6, %r9, 5 # Rotate Left Immediate
or %r3, %r29, %r9 # OR
add %r6, %r5, %r6 # Add
and %r27, %r29, %r9 # AND
and %r3, %r3, %r30 # AND
add %r10, %r6, %r10 # Add
rotrwi %r28, %r9, 2 # Rotate Right Immediate
or %r9, %r3, %r27 # OR
subf %r27, %r11, %r10 # Subtract from
add %r9, %r9, %r4 # Add
rotlwi %r10, %r27, 5 # Rotate Left Immediate
add %r10, %r9, %r10 # Add
add %r10, %r10, %r8 # Add
subf %r26, %r11, %r10 # Subtract from
bne loc_800F7BD0 # Branch if not equal
lis %r11, 0x359D # 0x359D3E2A # Load Immediate Shifted
li %r7, 4 # Load Immediate
ori %r11, %r11, 0x3E2A # 0x359D3E2A # OR Immediate
loc_800F7CC4:
xor %r10, %r29, %r28 # XOR
lwz %r8, 0(%r31) # Load Word and Zero
rotlwi %r9, %r26, 5 # Rotate Left Immediate
lwz %r25, 4(%r31) # Load Word and Zero
xor %r6, %r10, %r27 # XOR
lwz %r4, 8(%r31) # Load Word and Zero
rotrwi %r10, %r27, 2 # Rotate Right Immediate
lwz %r5, 0xC(%r31) # Load Word and Zero
add %r9, %r6, %r9 # Add
lwz %r3, 0x10(%r31) # Load Word and Zero
subic. %r7, %r7, 1 # Subtract Immediate Carrying
add %r9, %r9, %r30 # Add
addi %r31, %r31, 0x14 # Add Immediate
add %r9, %r9, %r8 # Add
xor %r8, %r28, %r10 # XOR
subf %r9, %r11, %r9 # Subtract from
xor %r6, %r8, %r26 # XOR
rotrwi %r8, %r26, 2 # Rotate Right Immediate
xor %r26, %r9, %r10 # XOR
add %r27, %r6, %r25 # Add
rotrwi %r30, %r9, 2 # Rotate Right Immediate
rotlwi %r6, %r9, 5 # Rotate Left Immediate
xor %r9, %r26, %r8 # XOR
add %r4, %r9, %r4 # Add
add %r9, %r27, %r6 # Add
add %r9, %r9, %r29 # Add
subf %r9, %r11, %r9 # Subtract from
xor %r27, %r30, %r9 # XOR
rotlwi %r6, %r9, 5 # Rotate Left Immediate
rotrwi %r29, %r9, 2 # Rotate Right Immediate
xor %r9, %r27, %r8 # XOR
add %r5, %r9, %r5 # Add
add %r9, %r4, %r6 # Add
xor %r4, %r30, %r29 # XOR
add %r9, %r9, %r28 # Add
subf %r9, %r11, %r9 # Subtract from
rotlwi %r6, %r9, 5 # Rotate Left Immediate
xor %r4, %r4, %r9 # XOR
add %r6, %r5, %r6 # Add
rotrwi %r28, %r9, 2 # Rotate Right Immediate
add %r10, %r6, %r10 # Add
add %r9, %r4, %r3 # Add
subf %r27, %r11, %r10 # Subtract from
rotlwi %r10, %r27, 5 # Rotate Left Immediate
add %r10, %r9, %r10 # Add
add %r10, %r10, %r8 # Add
subf %r26, %r11, %r10 # Subtract from
bne loc_800F7CC4 # Branch if not equal
lwz %r10, 0(%r24) # Load Word and Zero
lwz %r11, 4(%r24) # Load Word and Zero
add %r8, %r10, %r26 # Add
lwz %r9, 8(%r24) # Load Word and Zero
add %r7, %r11, %r27 # Add
lwz %r10, 0xC(%r24) # Load Word and Zero
lwz %r11, 0x10(%r24) # Load Word and Zero
add %r9, %r9, %r28 # Add
add %r10, %r29, %r10 # Add
add %r11, %r11, %r30 # Add
stw %r8, 0(%r24) # Store Word
stw %r7, 4(%r24) # Store Word
stw %r9, 8(%r24) # Store Word
stw %r10, 0xC(%r24) # Store Word
stw %r11, 0x10(%r24) # Store Word
addi %sp, %sp, 0x1E0 # Add Immediate
b __restgprlr_24 # Branch
# End of function XeCryptShaTransform
this is from commodore4eva post:
These are the routines pulled from the Xbox360 kernel for the decrypt of the Console Challenge Response Table. Hope you find this interesting and worthwhile.
The RSAkey appears not to come from the normal 360 keyvault, but is hard coded, so should be able to write our own CCRT decrypt routine.
I am very busy finishing the V5 extreme for Samsung, and then back on to the 0078 hitachi. Merry Christmas!
Xbox 360 Security Sectors & the Consoles C/R Table Key