|
|
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
7: this file are Copyright (c) 2003-2008 TrueCrypt Foundation and are governed
1.1.1.13! root 8: by the TrueCrypt License 2.5 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
! 112:
! 113:
! 114: #ifndef TC_HEADER_Volume_VolumeHeader
! 115:
! 116: #include "Password.h"
1.1.1.12 root 117:
118: uint16 GetHeaderField16 (byte *header, size_t offset);
119: uint32 GetHeaderField32 (byte *header, size_t offset);
120: UINT64_STRUCT GetHeaderField64 (byte *header, size_t offset);
121: int VolumeReadHeader (BOOL bBoot, char *encryptedHeader, Password *password, PCRYPTO_INFO *retInfo, CRYPTO_INFO *retHeaderCryptoInfo);
122: #ifndef TC_WINDOWS_BOOT
1.1.1.13! root 123: int VolumeWriteHeader (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);
1.1.1.12 root 124: #endif
125:
1.1.1.13! root 126: #endif // !TC_HEADER_Volume_VolumeHeader
! 127:
1.1.1.12 root 128: #ifdef __cplusplus
129: }
130: #endif
131:
1.1.1.13! root 132: #endif // TC_HEADER_Common_Volumes
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.