Skip to content

Encoding Table

PFPX Navdata files use a custom XOR-based encoding system. The navigation data is encoded using a character mapping table that transforms readable ASCII text into binary data.

Character Mapping

Through reverse engineering, we've determined the following encoding relationships:

Hex CodeCharacterHex CodeCharacter
A5Space ()B50
A4!B41
A7"B72
A6#B63
A1$B14
A0%B05
A3&B36
A2'B27
AD(BD8
AC)BC9
AF*BF:
AE+BE;
A9,B9<
A8B8=
AB.BB>
AA/BA?
Hex CodeCharacterHex CodeCharacter
C5@D5P
C4AD4Q
C7BD7R
C6CD6S
C1DD1T
C0ED0U
C3FD3V
C2GD2W
CDHDDX
CCIDCY
CFJDFZ
CEKDE[
C9LD9\
C8MD8]
CBNDB^
CAODA_
Hex CodeCharacterHex CodeCharacter
E5`F5p
E4aF4q
E7bF7r
E6cF6s
E1dF1t
E0eF0u
E3fF3v
E2gF2w
EDhFDx
ECiFCy
EFjFFz
EEkFE{
E9lF9|
E8mF8}
EBnFB~
EAoFADEL

Encoding Method

The encoding process works as follows:

  1. XOR Operation: Each byte is XORed with the key 0x85
  2. Character Mapping: The result maps to the above character table
  3. Header Preservation: File headers remain in plaintext
  4. Line Structure: Each line represents one navigation data entry

Key Properties

  • XOR Key: 0x85 (decimal 133)
  • Reversible: The same operation decodes the data
  • ASCII Compatible: Maps to standard ASCII character set
  • Binary Safe: Preserves data integrity

Usage Notes

Important

  • Only the navigation data content is encoded
  • File headers and metadata remain in plaintext
  • Newline characters (CR/LF) are preserved during encoding
  • The encoding is case-sensitive and position-dependent

Example Transformation

Here's a simple example of how a character gets encoded:

Original character: 'A' (ASCII 65, hex 0x41)
XOR with 0x85: 0x41 ^ 0x85 = 0xC4
Lookup in table: 0xC4 = 'A'

For the reverse (decoding):

Encoded byte: 0xC4
XOR with 0x85: 0xC4 ^ 0x85 = 0x41
ASCII result: 0x41 = 'A'

Next Steps

Released under the MIT License.