1 // rar5 constants
2 
3 // RAR5 Header flag bits (we do not care about 8, 0x10, 0x20, 0x40, spanning bits, we simply do not handle)
4 #define HFL_EXTRA         1
5 #define HFL_DATA          2
6 #define HFL_SKIPIFUNKNOWN 4
7 
8 #define CRYPT_VERSION     0
9 #define CHFL_CRYPT_PSWCHECK     1
10 #define CRYPT5_KDF_LG2_COUNT 15
11 #define CRYPT5_KDF_LG2_COUNT_MAX 24
12 #define SIZE_SALT50 16
13 #define SIZE_PSWCHECK 8
14 #define SIZE_PSWCHECK_CSUM 4
15 #define SIZE_INITV 16
16 
17 
18 // RAR 5.0 header types.
19 #define HEAD_MARK    0x00
20 #define HEAD_MAIN    0x01
21 #define HEAD_FILE    0x02
22 #define HEAD_SERVICE 0x03
23 #define HEAD_CRYPT   0x04
24 #define HEAD_ENDARC  0x05
25 #define HEAD_UNKNOWN 0xff
26 
27 // RAR 5.0 main archive header specific flags.
28 #define MHFL_VOLUME     0x0001
29 #define MHFL_VOLNUMBER  0x0002
30 #define MHFL_SOLID      0x0004
31 #define MHFL_PROTECT    0x0008
32 #define MHFL_LOCK       0x0010
33 
34 // RAR 5.0 file header specific flags.
35 #define FHFL_DIRECTORY    0x0001
36 #define FHFL_UTIME        0x0002
37 #define FHFL_CRC32        0x0004
38 #define FHFL_UNPUNKNOWN   0x0008
39 
40 // File and service header extra field values.
41 #define FHEXTRA_CRYPT    0x01
42 #define FHEXTRA_HASH     0x02
43 #define FHEXTRA_HTIME    0x03
44 #define FHEXTRA_VERSION  0x04
45 #define FHEXTRA_REDIR    0x05
46 #define FHEXTRA_UOWNER   0x06
47 #define FHEXTRA_SUBDATA  0x07
48 
49 // Flags for FHEXTRA_CRYPT.
50 #define FHEXTRA_CRYPT_PSWCHECK 0x01
51 #define FHEXTRA_CRYPT_HASHMAC  0x02
52