|
|
1.1.1.10 root 1: /*
1.1.1.12 root 2: Legal Notice: Some portions of the source code contained in this file were
3: derived from the source code of Encryption for the Masses 2.02a, which is
4: Copyright (c) 1998-2000 Paul Le Roux and which is governed by the 'License
5: Agreement for Encryption for the Masses'. Modifications and additions to
6: the original source code (contained in this file) and all other portions of
1.1.1.15 root 7: this file are Copyright (c) 2003-2009 TrueCrypt Foundation and are governed
1.1.1.17! root 8: by the TrueCrypt License 2.8 the full text of which is contained in the
1.1.1.12 root 9: file License.txt included in TrueCrypt binary and source code distribution
1.1.1.10 root 10: packages. */
1.1 root 11:
1.1.1.13 root 12: #ifndef TC_HEADER_Common_Volumes
13: #define TC_HEADER_Common_Volumes
1.1.1.12 root 14:
15: #ifdef __cplusplus
16: extern "C" {
17: #endif
18:
1.1.1.13 root 19: // Volume header version
20: #define VOLUME_HEADER_VERSION 0x0004
21:
22: // Version number written to volume header during format;
23: // specifies the minimum program version required to mount the volume
24: #define TC_VOLUME_MIN_REQUIRED_PROGRAM_VERSION 0x0600
25:
26: // Version number written (encrypted) to the key data area of an encrypted system partition/drive;
27: // specifies the minimum program version required to decrypt the system partition/drive
28: #define TC_SYSENC_KEYSCOPE_MIN_REQ_PROG_VERSION 0x0500
29:
30: // Current volume format version (created by TrueCrypt 6.0+)
31: #define TC_VOLUME_FORMAT_VERSION 2
32:
33: // Version number of volume format created by TrueCrypt 1.0-5.1a
34: #define TC_VOLUME_FORMAT_VERSION_PRE_6_0 1
35:
36: // Volume header sizes
37: #define TC_VOLUME_HEADER_SIZE (64 * 1024L)
38: #define TC_VOLUME_HEADER_EFFECTIVE_SIZE 512
39: #define TC_BOOT_ENCRYPTION_VOLUME_HEADER_SIZE 512
40: #define TC_VOLUME_HEADER_SIZE_LEGACY 512
41:
42: #define TC_VOLUME_HEADER_GROUP_SIZE (2 * TC_VOLUME_HEADER_SIZE)
43: #define TC_TOTAL_VOLUME_HEADERS_SIZE (4 * TC_VOLUME_HEADER_SIZE)
44:
45: // Volume offsets
46: #define TC_VOLUME_HEADER_OFFSET 0
47: #define TC_HIDDEN_VOLUME_HEADER_OFFSET TC_VOLUME_HEADER_SIZE
48:
49: #define TC_MAX_VOLUME_SECTOR_SIZE (2 * TC_VOLUME_HEADER_SIZE)
50:
51: #define TC_VOLUME_SMALL_SIZE_THRESHOLD (2 * BYTES_PER_MB) // Volume sizes below this threshold are considered small
52:
53: #define TC_HIDDEN_VOLUME_HOST_FS_RESERVED_END_AREA_SIZE SECTOR_SIZE_GEN2_STANDARD // FAT file system fills the last sector with zeroes (marked as free; observed when quick format was performed using the OS format tool).
54: #define TC_HIDDEN_VOLUME_HOST_FS_RESERVED_END_AREA_SIZE_HIGH TC_MAX_VOLUME_SECTOR_SIZE // Reserved area size used for hidden volumes larger than TC_VOLUME_SMALL_SIZE_THRESHOLD
55:
56: #define TC_VOLUME_DATA_OFFSET TC_VOLUME_HEADER_GROUP_SIZE
57:
58: /* The offset, in bytes, of the hidden volume header position from the end of the file (a positive value).
59: The extra offset (SECTOR_SIZE * 2) was added because FAT file system fills the last sector with zeroes
60: (marked as free; observed when quick format was performed using the OS format tool). One extra sector was
61: added to the offset for future expandability (should the header size increase, or should header backup be
62: introduced). */
63: #define TC_HIDDEN_VOLUME_HEADER_OFFSET_LEGACY (TC_VOLUME_HEADER_SIZE_LEGACY + SECTOR_SIZE * 2)
64:
65: #define TC_MAX_128BIT_BLOCK_VOLUME_SIZE BYTES_PER_PB // Security bound (128-bit block XTS mode)
66:
67: // Filesystem size limits
68: #define TC_MIN_FAT_FS_SIZE (37 * SECTOR_SIZE)
69: #define TC_MAX_FAT_FS_SIZE 0x20000000000LL
70: #define TC_MIN_NTFS_FS_SIZE 2634752
71: #define TC_MAX_NTFS_FS_SIZE (128LL * BYTES_PER_TB) // NTFS volume can theoretically be up to 16 exabytes, but Windows XP and 2003 limit the size to that addressable with 32-bit clusters, i.e. max size is 128 TB (if 64-KB clusters are used).
72:
73: // Volume size limits
74: #define TC_MIN_VOLUME_SIZE (TC_TOTAL_VOLUME_HEADERS_SIZE + TC_MIN_FAT_FS_SIZE)
75: #define TC_MIN_VOLUME_SIZE_LEGACY TC_MIN_FAT_FS_SIZE
76: #define TC_MAX_VOLUME_SIZE_GENERAL 0x7fffFFFFffffFFFFLL // Signed 64-bit integer file offset values
77: #define TC_MAX_VOLUME_SIZE TC_MAX_128BIT_BLOCK_VOLUME_SIZE
78:
79: #define TC_MIN_HIDDEN_VOLUME_SIZE (TC_MIN_FAT_FS_SIZE + TC_HIDDEN_VOLUME_HOST_FS_RESERVED_END_AREA_SIZE)
80:
81: #define TC_MIN_HIDDEN_VOLUME_HOST_SIZE (TC_MIN_VOLUME_SIZE + TC_MIN_HIDDEN_VOLUME_SIZE + 2 * SECTOR_SIZE_GEN2_STANDARD)
82: #define TC_MAX_HIDDEN_VOLUME_HOST_SIZE (TC_MAX_NTFS_FS_SIZE - TC_TOTAL_VOLUME_HEADERS_SIZE)
83:
84: #ifndef TC_NO_COMPILER_INT64
85: # if TC_MAX_VOLUME_SIZE > TC_MAX_VOLUME_SIZE_GENERAL
86: # error TC_MAX_VOLUME_SIZE > TC_MAX_VOLUME_SIZE_GENERAL
87: # endif
88: #endif
89:
90: #define HEADER_ENCRYPTED_DATA_SIZE (TC_VOLUME_HEADER_EFFECTIVE_SIZE - HEADER_ENCRYPTED_DATA_OFFSET)
91:
92: // Volume header field offsets
93: #define HEADER_SALT_OFFSET 0
94: #define HEADER_ENCRYPTED_DATA_OFFSET PKCS5_SALT_SIZE
95: #define HEADER_MASTER_KEYDATA_OFFSET 256
96:
1.1.1.12 root 97: #define TC_HEADER_OFFSET_MAGIC 64
98: #define TC_HEADER_OFFSET_VERSION 68
99: #define TC_HEADER_OFFSET_REQUIRED_VERSION 70
100: #define TC_HEADER_OFFSET_KEY_AREA_CRC 72
101: #define TC_HEADER_OFFSET_VOLUME_CREATION_TIME 76
102: #define TC_HEADER_OFFSET_MODIFICATION_TIME 84
103: #define TC_HEADER_OFFSET_HIDDEN_VOLUME_SIZE 92
104: #define TC_HEADER_OFFSET_VOLUME_SIZE 100
105: #define TC_HEADER_OFFSET_ENCRYPTED_AREA_START 108
106: #define TC_HEADER_OFFSET_ENCRYPTED_AREA_LENGTH 116
1.1.1.13 root 107: #define TC_HEADER_OFFSET_FLAGS 124
108: #define TC_HEADER_OFFSET_HEADER_CRC 252
109:
110: // Volume header flags
111: #define TC_HEADER_FLAG_ENCRYPTED_SYSTEM 0x1
1.1.1.14 root 112: #define TC_HEADER_FLAG_NONSYS_INPLACE_ENC 0x2 // The volume has been created using non-system in-place encryption
1.1.1.13 root 113:
114:
115: #ifndef TC_HEADER_Volume_VolumeHeader
116:
117: #include "Password.h"
1.1.1.12 root 118:
1.1.1.14 root 119: extern BOOL ReadVolumeHeaderRecoveryMode;
120:
121: uint16 GetHeaderField16 (byte *header, int offset);
122: uint32 GetHeaderField32 (byte *header, int offset);
123: UINT64_STRUCT GetHeaderField64 (byte *header, int offset);
124: int ReadVolumeHeader (BOOL bBoot, char *encryptedHeader, Password *password, PCRYPTO_INFO *retInfo, CRYPTO_INFO *retHeaderCryptoInfo);
1.1.1.12 root 125: #ifndef TC_WINDOWS_BOOT
1.1.1.14 root 126: int CreateVolumeHeaderInMemory (BOOL bBoot, char *encryptedHeader, int ea, int mode, Password *password, int pkcs5_prf, char *masterKeydata, PCRYPTO_INFO *retInfo, unsigned __int64 volumeSize, unsigned __int64 hiddenVolumeSize, unsigned __int64 encryptedAreaStart, unsigned __int64 encryptedAreaLength, uint16 requiredProgramVersion, uint32 headerFlags, BOOL bWipeMode);
127: int WriteRandomDataToReservedHeaderAreas (HANDLE dev, CRYPTO_INFO *cryptoInfo, uint64 dataAreaSize, BOOL bPrimaryOnly, BOOL bBackupOnly);
1.1.1.12 root 128: #endif
129:
1.1.1.13 root 130: #endif // !TC_HEADER_Volume_VolumeHeader
131:
1.1.1.12 root 132: #ifdef __cplusplus
133: }
134: #endif
135:
1.1.1.13 root 136: #endif // TC_HEADER_Common_Volumes
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.