Difference between revisions of "FSPXI:ReadFileSHA256"

From 3dbrew
Jump to navigation Jump to search
(Created page with "=Request= {| class="wikitable" border="1" |- ! Index Word ! Description |- | 0 | Header code [0x004D01C4] |- | 1 | File handle lower word |- | 2 | File handle upper word |- | 3...")
 
(Unknown value -> Alignment size)
 
(5 intermediate revisions by 3 users not shown)
Line 21: Line 21:
 
|-
 
|-
 
| 5
 
| 5
| Size of second memory block
+
| Size of read buffer
 
|-
 
|-
 
| 6
 
| 6
| Unknown (always 0x00001000)
+
| Alignment size (always 0x00001000)
 
|-
 
|-
 
| 7
 
| 7
| Size of first memory block
+
| Size of hashtable
 
|-
 
|-
 
| 8
 
| 8
| (size of first mem block << 8)  <nowiki>|</nowiki> 4
+
| (size of hashtable << 8)  <nowiki>|</nowiki> 6
 
|-
 
|-
 
| 9
 
| 9
| Pointer to first memory block
+
| Pointer to hashtable
 
|-
 
|-
 
| 10
 
| 10
| (size of second mem block << 8)  <nowiki>|</nowiki> 0x14
+
| (size of read buffer << 8)  <nowiki>|</nowiki> 0x14
 
|-
 
|-
 
| 11
 
| 11
| Pointer to second memory block
+
| Pointer to read buffer
 
|}
 
|}
  
Line 61: Line 61:
 
|}
 
|}
  
The data read are stored in the second memory block. The first memory block is filled with hashes, in an unknown manner.
+
The data read are stored in the read buffer. For each 0x1000-byte block read, a SHA256 hash of the block is stored in the hashtable.
 +
 
 +
It is unknown how hashing behaves if the read offset/size are not aligned to a 0x1000-byte boundary.

Latest revision as of 20:59, 5 June 2022

Request[edit]

Index Word Description
0 Header code [0x004D01C4]
1 File handle lower word
2 File handle upper word
3 Offset lower word
4 Offset upper word
5 Size of read buffer
6 Alignment size (always 0x00001000)
7 Size of hashtable
8 (size of hashtable << 8) | 6
9 Pointer to hashtable
10 (size of read buffer << 8) | 0x14
11 Pointer to read buffer

Response[edit]

Index Word Description
0 Header code
1 Result code
2 Size read
3 4

The data read are stored in the read buffer. For each 0x1000-byte block read, a SHA256 hash of the block is stored in the hashtable.

It is unknown how hashing behaves if the read offset/size are not aligned to a 0x1000-byte boundary.