|
|
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
1.1.1.18 root 6: the original source code (contained in this file) and all other portions
1.1.1.19! root 7: of this file are Copyright (c) 2003-2010 TrueCrypt Developers Association
! 8: and are governed by the TrueCrypt License 3.0 the full text of which is
1.1.1.18 root 9: contained in the file License.txt included in TrueCrypt binary and source
10: code distribution 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
1.1.1.19! root 20: #define VOLUME_HEADER_VERSION 0x0005
1.1.1.13 root 21:
22: // Version number written to volume header during format;
23: // specifies the minimum program version required to mount the volume
1.1.1.19! root 24: #define TC_VOLUME_MIN_REQUIRED_PROGRAM_VERSION 0x0700
1.1.1.13 root 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
1.1.1.19! root 28: #define TC_SYSENC_KEYSCOPE_MIN_REQ_PROG_VERSION 0x0700
1.1.1.13 root 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:
1.1.1.19! root 49: // Sector sizes
! 50: #define TC_MIN_VOLUME_SECTOR_SIZE 512
! 51: #define TC_MAX_VOLUME_SECTOR_SIZE 4096
! 52: #define TC_SECTOR_SIZE_FILE_HOSTED_VOLUME 512
! 53: #define TC_SECTOR_SIZE_LEGACY 512
! 54:
! 55: // Sector size which can be safely assumed to be supported by all BIOSes
! 56: #define TC_SECTOR_SIZE_BIOS 512
1.1.1.13 root 57:
58: #define TC_VOLUME_SMALL_SIZE_THRESHOLD (2 * BYTES_PER_MB) // Volume sizes below this threshold are considered small
59:
1.1.1.19! root 60: #define TC_HIDDEN_VOLUME_HOST_FS_RESERVED_END_AREA_SIZE TC_MAX_VOLUME_SECTOR_SIZE // FAT file system fills the last sector with zeroes (marked as free; observed when quick format was performed using the OS format tool).
! 61: #define TC_HIDDEN_VOLUME_HOST_FS_RESERVED_END_AREA_SIZE_HIGH TC_VOLUME_HEADER_GROUP_SIZE // Reserved area size used for hidden volumes larger than TC_VOLUME_SMALL_SIZE_THRESHOLD
1.1.1.13 root 62:
63: #define TC_VOLUME_DATA_OFFSET TC_VOLUME_HEADER_GROUP_SIZE
64:
1.1.1.19! root 65: // The offset, in bytes, of the legacy hidden volume header position from the end of the file (a positive value).
! 66: #define TC_HIDDEN_VOLUME_HEADER_OFFSET_LEGACY (TC_VOLUME_HEADER_SIZE_LEGACY + TC_SECTOR_SIZE_LEGACY * 2)
1.1.1.13 root 67:
68: #define TC_MAX_128BIT_BLOCK_VOLUME_SIZE BYTES_PER_PB // Security bound (128-bit block XTS mode)
69:
70: // Filesystem size limits
1.1.1.19! root 71: #define TC_MIN_FAT_FS_SIZE (9 * TC_MAX_VOLUME_SECTOR_SIZE)
! 72: #define TC_MAX_FAT_SECTOR_COUNT 0x100000000ULL
! 73: #define TC_MIN_NTFS_FS_SIZE (884 * TC_MAX_VOLUME_SECTOR_SIZE)
1.1.1.13 root 74: #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).
1.1.1.19! root 75: #define TC_MAX_FAT_CLUSTER_SIZE (256 * BYTES_PER_KB) // Windows XP/Vista may crash when writing to a filesystem using clusters larger than 256 KB
1.1.1.13 root 76:
77: // Volume size limits
78: #define TC_MIN_VOLUME_SIZE (TC_TOTAL_VOLUME_HEADERS_SIZE + TC_MIN_FAT_FS_SIZE)
1.1.1.19! root 79: #define TC_MIN_VOLUME_SIZE_LEGACY (37 * TC_SECTOR_SIZE_LEGACY)
1.1.1.13 root 80: #define TC_MAX_VOLUME_SIZE_GENERAL 0x7fffFFFFffffFFFFLL // Signed 64-bit integer file offset values
81: #define TC_MAX_VOLUME_SIZE TC_MAX_128BIT_BLOCK_VOLUME_SIZE
82:
83: #define TC_MIN_HIDDEN_VOLUME_SIZE (TC_MIN_FAT_FS_SIZE + TC_HIDDEN_VOLUME_HOST_FS_RESERVED_END_AREA_SIZE)
84:
1.1.1.19! root 85: #define TC_MIN_HIDDEN_VOLUME_HOST_SIZE (TC_MIN_VOLUME_SIZE + TC_MIN_HIDDEN_VOLUME_SIZE + 2 * TC_MAX_VOLUME_SECTOR_SIZE)
1.1.1.13 root 86: #define TC_MAX_HIDDEN_VOLUME_HOST_SIZE (TC_MAX_NTFS_FS_SIZE - TC_TOTAL_VOLUME_HEADERS_SIZE)
87:
88: #ifndef TC_NO_COMPILER_INT64
89: # if TC_MAX_VOLUME_SIZE > TC_MAX_VOLUME_SIZE_GENERAL
90: # error TC_MAX_VOLUME_SIZE > TC_MAX_VOLUME_SIZE_GENERAL
91: # endif
92: #endif
93:
94: #define HEADER_ENCRYPTED_DATA_SIZE (TC_VOLUME_HEADER_EFFECTIVE_SIZE - HEADER_ENCRYPTED_DATA_OFFSET)
95:
96: // Volume header field offsets
97: #define HEADER_SALT_OFFSET 0
98: #define HEADER_ENCRYPTED_DATA_OFFSET PKCS5_SALT_SIZE
99: #define HEADER_MASTER_KEYDATA_OFFSET 256
100:
1.1.1.12 root 101: #define TC_HEADER_OFFSET_MAGIC 64
102: #define TC_HEADER_OFFSET_VERSION 68
103: #define TC_HEADER_OFFSET_REQUIRED_VERSION 70
104: #define TC_HEADER_OFFSET_KEY_AREA_CRC 72
105: #define TC_HEADER_OFFSET_VOLUME_CREATION_TIME 76
106: #define TC_HEADER_OFFSET_MODIFICATION_TIME 84
107: #define TC_HEADER_OFFSET_HIDDEN_VOLUME_SIZE 92
108: #define TC_HEADER_OFFSET_VOLUME_SIZE 100
109: #define TC_HEADER_OFFSET_ENCRYPTED_AREA_START 108
110: #define TC_HEADER_OFFSET_ENCRYPTED_AREA_LENGTH 116
1.1.1.13 root 111: #define TC_HEADER_OFFSET_FLAGS 124
1.1.1.19! root 112: #define TC_HEADER_OFFSET_SECTOR_SIZE 128
1.1.1.13 root 113: #define TC_HEADER_OFFSET_HEADER_CRC 252
114:
115: // Volume header flags
116: #define TC_HEADER_FLAG_ENCRYPTED_SYSTEM 0x1
1.1.1.14 root 117: #define TC_HEADER_FLAG_NONSYS_INPLACE_ENC 0x2 // The volume has been created using non-system in-place encryption
1.1.1.13 root 118:
119:
120: #ifndef TC_HEADER_Volume_VolumeHeader
121:
122: #include "Password.h"
1.1.1.12 root 123:
1.1.1.14 root 124: extern BOOL ReadVolumeHeaderRecoveryMode;
125:
126: uint16 GetHeaderField16 (byte *header, int offset);
127: uint32 GetHeaderField32 (byte *header, int offset);
128: UINT64_STRUCT GetHeaderField64 (byte *header, int offset);
129: int ReadVolumeHeader (BOOL bBoot, char *encryptedHeader, Password *password, PCRYPTO_INFO *retInfo, CRYPTO_INFO *retHeaderCryptoInfo);
1.1.1.19! root 130:
! 131: #if !defined (DEVICE_DRIVER) && !defined (TC_WINDOWS_BOOT)
! 132: 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, uint32 sectorSize, BOOL bWipeMode);
! 133: BOOL ReadEffectiveVolumeHeader (BOOL device, HANDLE fileHandle, byte *header, DWORD *bytesRead);
! 134: BOOL WriteEffectiveVolumeHeader (BOOL device, HANDLE fileHandle, byte *header);
1.1.1.14 root 135: int WriteRandomDataToReservedHeaderAreas (HANDLE dev, CRYPTO_INFO *cryptoInfo, uint64 dataAreaSize, BOOL bPrimaryOnly, BOOL bBackupOnly);
1.1.1.12 root 136: #endif
137:
1.1.1.13 root 138: #endif // !TC_HEADER_Volume_VolumeHeader
139:
1.1.1.12 root 140: #ifdef __cplusplus
141: }
142: #endif
143:
1.1.1.13 root 144: #endif // TC_HEADER_Common_Volumes
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.