QA Flags: Difference between revisions

From PS5 Developer wiki
Jump to navigation Jump to search
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= TOKEN STRUCTURE =
= QA Token SELF Structure =
 
== QA Token Header ==


{| class="wikitable"
{| class="wikitable"
Line 6: Line 8:
| 0 || 4 || Magic || 54 14 F5 EE
| 0 || 4 || Magic || 54 14 F5 EE
|-
|-
| 0x4 || 4 || Unknown || Always 10 01 01 32
| 0x4 || 4 || Unknown ?Version? || Always 10 01 01 32
|-
|-
| 0x8 || 1 || Category || 06 on QA Token SELF
| 0x8 || 1 || Category || 06 on QA Token SELF
Line 22: Line 24:
| 0x18 || 2 || Number of Segments || 1 for Token
| 0x18 || 2 || Number of Segments || 1 for Token
|-
|-
| 0x1A || 2 || Unknown || Always 0x32
| 0x1A || 2 || Unknown ?Algorithm? || Always 0x32
|-
|-
| 0x1C || 4 || Padding ||  
| 0x1C || 4 || Padding ||  
|}
|}


= TOKEN SEGMENT STRUCTURE (1 SEGMENT EXAMPLE) =
== QA Token Segment (1 segment example) ==
 
{| class="wikitable"
! Offset !! Size !! Description !! Notes
|-
| 0x20 || 0x8 || Flags || 0x6 for token (encrypted and signed)
|-
| 0x28 || 0x8 || Offset || 0x2A0 for token (also header size + metadata size)
|-
| 0x30 || 0x8 || ENCRYPTED_COMPRESSED_SIZE || 0x60 for token
|-
| 0x38 || 0x8 || DECRYPTED_DECOMPRESSED_SIZE || 0x60 for token
|-
|}
 
== QA Token Additional Information ==
 
{| class="wikitable"
! Offset !! Size !! Description !! Notes
|-
| 0x40 || 0x10 || Padding? ||
|-
| 0x50 || 0x20 || SHA256 of body? || ex: 13 18 98 62 FC FE C7 13 A6 0A 82 5B 70 4C 92 41 C5 39 27 F6 8F 41 B6 56 C8 9F 8B 17 59 58 B4 2F
|-
| 0x70 || 0x40 || QAF Name || ex: QAF_SYS_DEV_I. Some PS5 QAF names are similar with PS Vita and PS4 ones.
|-
| 0xB0 || 0x8 || Start Date || ex: 20191010
|-
| 0xB8 || 0x8 || End Date || ex: 20210410
|-
|}
 
== QA Token Metadata (1 segment example) ==
 
{| class="wikitable"
! Offset !! Size !! Description !! Notes
|-
| 0xC0 || 0x10 || AES-CBC-CTS Key || Key used to Decrypt Body
|-
| 0xD0 || 0x10 || AES-CBC-CTS IV || IV used to Decrypt Body
|-
| 0xE0 || 0x20 || HMAC DIGEST || HMAC-SHA256 Digest of Segment
|-
| 0x100 || 0x20 || HMAC KEY || HMAC-SHA256 Key of Segment
|-
| 0x120 || 0x180 || RSA 3096 SIGNATURE || RSA Signature used to validate the self
|-
|}
 
== QA Token Body ==
 
As the only known QA Token dump is in encrypted form, what follows is guessed from the structure of decrypted QA Tokens of previous PlayStation consoles (PS Vita, PS3).


{| class="wikitable"
{| class="wikitable"
! Offset !! Size !! Description !! Notes
! Offset !! Size !! Description !! Notes
|-
|-
| 0x0 || 0x8 || FLAGS || 0x6 for TOKEN
| 0 || 0x10 || OpenPSID || OPEN PSID of the system
|-
|-
| 0x8 || 0x8 || OFFSET || 0x2A0 for token (also header size + meta size)
| 0x10 || 0x10 || QA FLAGS || QA FLAGS of the system.
|-
|-
| 0x10 || 0x8 || ENCRYPTED_COMPRESSED_SIZE || 0x60 for token
| 0x20 || 0x20 || PADDING ||
|-
|-
| 0x18 || 0x8 || DECRYPTED_DECOMPRESSED_SIZE || 0x60 for token
| 0x40 || 0x20 || SHA256HMAC || Hash of previous in SHA256HMAC Format (deduced from ps4 code)
|-
|-
|}
|}


= TEMPLATES =
= Example =
 
== QAF Names ==


<pre>
<pre>
QAF_SYS_DEV_I (for the only known sample in existance)
QAF_SYS_DEV_I (for the only known sample in existence)
</pre>
</pre>


= VALIDITY =
== Validity Period ==


<pre>
<pre>
10 Oct 2019 - 10 April 2021 (for the only known sample in existance)
10 Oct 2019 - 4 October 2021 (for the only known sample in existence)
</pre>
</pre>


= TOKEN SIZE =
* 725 Days = 365 Days + 360 Days
* US Date Format in ASCII
 
== Token Size ==


<pre>
<pre>
0x60 bytes -> for the only known sample in existance
0x60 bytes -> for the only known sample in existence
</pre>
</pre>

Latest revision as of 21:33, 6 February 2025

QA Token SELF Structure[edit | edit source]

QA Token Header[edit | edit source]

Offset Size Description Notes
0 4 Magic 54 14 F5 EE
0x4 4 Unknown ?Version? Always 10 01 01 32
0x8 1 Category 06 on QA Token SELF
0x9 1 Program Type 00 for Token
0xA 2 Padding
0xC 2 Header Size 0xC0 for Token
0xE 2 Metadata Size 0x1E0 for Token
0x10 8 File Size Size of SELF (0x300 for Token)
0x18 2 Number of Segments 1 for Token
0x1A 2 Unknown ?Algorithm? Always 0x32
0x1C 4 Padding

QA Token Segment (1 segment example)[edit | edit source]

Offset Size Description Notes
0x20 0x8 Flags 0x6 for token (encrypted and signed)
0x28 0x8 Offset 0x2A0 for token (also header size + metadata size)
0x30 0x8 ENCRYPTED_COMPRESSED_SIZE 0x60 for token
0x38 0x8 DECRYPTED_DECOMPRESSED_SIZE 0x60 for token

QA Token Additional Information[edit | edit source]

Offset Size Description Notes
0x40 0x10 Padding?
0x50 0x20 SHA256 of body? ex: 13 18 98 62 FC FE C7 13 A6 0A 82 5B 70 4C 92 41 C5 39 27 F6 8F 41 B6 56 C8 9F 8B 17 59 58 B4 2F
0x70 0x40 QAF Name ex: QAF_SYS_DEV_I. Some PS5 QAF names are similar with PS Vita and PS4 ones.
0xB0 0x8 Start Date ex: 20191010
0xB8 0x8 End Date ex: 20210410

QA Token Metadata (1 segment example)[edit | edit source]

Offset Size Description Notes
0xC0 0x10 AES-CBC-CTS Key Key used to Decrypt Body
0xD0 0x10 AES-CBC-CTS IV IV used to Decrypt Body
0xE0 0x20 HMAC DIGEST HMAC-SHA256 Digest of Segment
0x100 0x20 HMAC KEY HMAC-SHA256 Key of Segment
0x120 0x180 RSA 3096 SIGNATURE RSA Signature used to validate the self

QA Token Body[edit | edit source]

As the only known QA Token dump is in encrypted form, what follows is guessed from the structure of decrypted QA Tokens of previous PlayStation consoles (PS Vita, PS3).

Offset Size Description Notes
0 0x10 OpenPSID OPEN PSID of the system
0x10 0x10 QA FLAGS QA FLAGS of the system.
0x20 0x20 PADDING
0x40 0x20 SHA256HMAC Hash of previous in SHA256HMAC Format (deduced from ps4 code)

Example[edit | edit source]

QAF Names[edit | edit source]

QAF_SYS_DEV_I (for the only known sample in existence)

Validity Period[edit | edit source]

10 Oct 2019 - 4 October 2021 (for the only known sample in existence)
  • 725 Days = 365 Days + 360 Days
  • US Date Format in ASCII

Token Size[edit | edit source]

0x60 bytes -> for the only known sample in existence