Annotation of truecrypt/common/volumes.h, revision 1.1.1.19

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.