| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | AA | AB | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | ||||||||||||||||||||||||||||
2 | Protocol signature | Protocol version | Checksum | Data type | Data length | Data | ||||||||||||||||||||||
3 | 1 byte | 1 byte | 4 bytes | 1 byte | Variable length quantity | Length based on data length field | ||||||||||||||||||||||
4 | ASCII letter "D" | Currently 0 (zero) | CRC-32 calculated on decoded data field | 1st bit: Compression 0: Encryption wrapper 1: Text 2: File | Variable length quantity representing length of the data field in bytes Needed to allow decoding of multiple concatenated messages | Depends on data type | ||||||||||||||||||||||
5 | ||||||||||||||||||||||||||||
6 | ︁︁︁ | Text | ||||||||||||||||||||||||||
7 | Text | |||||||||||||||||||||||||||
8 | Remaining length | |||||||||||||||||||||||||||
9 | UTF-8 encoded | |||||||||||||||||||||||||||
10 | ||||||||||||||||||||||||||||
11 | File | |||||||||||||||||||||||||||
12 | MIME type | File name | File | |||||||||||||||||||||||||
13 | Variable length (null terminated) | Variable length (null terminated) | Remaining length | |||||||||||||||||||||||||
14 | Is best-effort on the part of the transmitting client | May contain characters illegal on some platforms In the event that a receiving client cannot save the file to disk as named, the client must transform illegal characters | Binary blob | |||||||||||||||||||||||||
15 | ||||||||||||||||||||||||||||
16 | Encryption wrapper | Assume AES-GCM 128-bit, PBKDF2 | ||||||||||||||||||||||||||
17 | Options length | Options | Salt | Ciphertext | ||||||||||||||||||||||||
18 | Variable length quantity | Length based on options length field | 16 bytes | Remaining length | ||||||||||||||||||||||||
19 | Can be 0 (zero) | Used for storing IVs, nonces, etc. | Generated using a cryptographically secure PRNG | Binary blob | ||||||||||||||||||||||||
20 | ||||||||||||||||||||||||||||
21 | Ciphertext | |||||||||||||||||||||||||||
22 | Data type | Padding length | Data | |||||||||||||||||||||||||
23 | 1 byte | 1 byte | Remaining length | |||||||||||||||||||||||||
24 | 1st bit: Compression 1: Text 2: File | Only present when block cipher is used | Depends on data type | |||||||||||||||||||||||||
25 | ||||||||||||||||||||||||||||
26 | Decimal | Hex | Binary | Character | Description | |||||||||||||||||||||||
27 | 0 | 0 | 0000 | U+200C | zero-width non-joiner | |||||||||||||||||||||||
28 | 1 | 1 | 0001 | U+200D | zero-width joiner | |||||||||||||||||||||||
29 | 2 | 2 | 0010 | U+2060 | word joiner | |||||||||||||||||||||||
30 | 3 | 3 | 0011 | U+2061 | function application | |||||||||||||||||||||||
31 | 4 | 4 | 0100 | U+2062 | invisible times | |||||||||||||||||||||||
32 | 5 | 5 | 0101 | U+2063 | invisible separator | |||||||||||||||||||||||
33 | 6 | 6 | 0110 | U+2064 | invisible plus | |||||||||||||||||||||||
34 | 7 | 7 | 0111 | U+206A | inhibit symmetric swapping | |||||||||||||||||||||||
35 | 8 | 8 | 1000 | U+206B | activate symmetric swapping | |||||||||||||||||||||||
36 | 9 | 9 | 1001 | U+206C | inhibit Arabic form shaping | |||||||||||||||||||||||
37 | 10 | A | 1010 | U+206D | activate Arabic form shaping | |||||||||||||||||||||||
38 | 11 | B | 1011 | U+206E | national digit shapes | |||||||||||||||||||||||
39 | 12 | C | 1100 | U+206F | nominal digit shapes | |||||||||||||||||||||||
40 | 13 | D | 1101 | U+FE00 | variation selector-1 | |||||||||||||||||||||||
41 | 14 | E | 1110 | U+FE01 | variation selector-2 | |||||||||||||||||||||||
42 | 15 | F | 1111 | U+FEFF | zero-width non-breaking space | |||||||||||||||||||||||
43 | https://invisible-characters.com/ | |||||||||||||||||||||||||||
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 |