VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/doc/html/Source Code.html
blob: 2942a9340bcf5e79ba960b20b0b20957cf402cca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>VeraCrypt - Free Open source disk encryption with strong security for the Paranoid</title>
<meta name="description" content="VeraCrypt is free open-source disk encryption software for Windows, Mac OS X and Linux. In case an attacker forces you to reveal the password, VeraCrypt provides plausible deniability. In contrast to file encryption, data encryption performed by VeraCrypt is real-time (on-the-fly), automatic, transparent, needs very little memory, and does not involve temporary unencrypted files."/>
<meta name="keywords" content="encryption, security"/>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>
<body>

<div>                      
<a href="https://www.veracrypt.fr/en/Home.html"><img src="VeraCrypt128x128.png" alt="VeraCrypt"/></a>
</div>

<div id="menu">
	<ul>
	  <li><a href="Home.html">Home</a></li>
	  <li><a href="/code/">Source Code</a></li>
	  <li><a href="Downloads.html">Downloads</a></li>
	  <li><a class="active" href="Documentation.html">Documentation</a></li>
	  <li><a href="Donation.html">Donate</a></li>
	  <li><a href="https://sourceforge.net/p/veracrypt/discussion/" target="_blank">Forums</a></li>
	</ul>
</div>

<div>
<p>
<a href="Documentation.html">Documentation</a>           
<img src="arrow_right.gif" alt=">>" style="margin-top: 5px">
<a href="Technical%20Details.html">Technical Details</a>
<img src="arrow_right.gif" alt=">>" style="margin-top: 5px">
<a href="Source%20Code.html">Source Code</a>
</p></div>

<div class="wikidoc">
<h1>Source Code</h1>
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
<p>VeraCrypt is open-source and free software. The complete source code of VeraCrypt (written in C, C&#43;&#43;, and assembly) is freely available for peer review at the following Git repositories:</p>
<p>
<ul>
  <li><a href="https://www.veracrypt.fr/code/" target="_blank">https://www.veracrypt.fr/code/</li>
  <li><a href="https://sourceforge.net/p/veracrypt/code/ci/master/tree/" target="_blank">https://sourceforge.net/p/veracrypt/code/ci/master/tree/</li>
  <li><a href="https://github.com/veracrypt/VeraCrypt" target="_blank">https://github.com/veracrypt/VeraCrypt</li>
  <li><a href="https://bitbucket.org/veracrypt/veracrypt/src" target="_blank">https://bitbucket.org/veracrypt/veracrypt/src</a></li>
</ul>
</p>
<p>The source code of each release can be downloaded from the same location as the release binaries.</p>
<p>&nbsp;</p>
</div>
</div><div class="ClearBoth"></div></body></html>
IVE_GEOMETRY TC_IOCTL (15) #define TC_IOCTL_PROBE_REAL_DRIVE_SIZE TC_IOCTL (16) #define TC_IOCTL_GET_RESOLVED_SYMLINK TC_IOCTL (17) #define TC_IOCTL_GET_BOOT_ENCRYPTION_STATUS TC_IOCTL (18) #define TC_IOCTL_BOOT_ENCRYPTION_SETUP TC_IOCTL (19) #define TC_IOCTL_ABORT_BOOT_ENCRYPTION_SETUP TC_IOCTL (20) #define TC_IOCTL_GET_BOOT_ENCRYPTION_SETUP_RESULT TC_IOCTL (21) #define TC_IOCTL_GET_BOOT_DRIVE_VOLUME_PROPERTIES TC_IOCTL (22) #define TC_IOCTL_REOPEN_BOOT_VOLUME_HEADER TC_IOCTL (23) #define TC_IOCTL_GET_BOOT_ENCRYPTION_ALGORITHM_NAME TC_IOCTL (24) #define TC_IOCTL_GET_PORTABLE_MODE_STATUS TC_IOCTL (25) #define TC_IOCTL_SET_PORTABLE_MODE_STATUS TC_IOCTL (26) #define TC_IOCTL_IS_HIDDEN_SYSTEM_RUNNING TC_IOCTL (27) #define TC_IOCTL_GET_SYSTEM_DRIVE_CONFIG TC_IOCTL (28) #define TC_IOCTL_DISK_IS_WRITABLE TC_IOCTL (29) #define TC_IOCTL_START_DECOY_SYSTEM_WIPE TC_IOCTL (30) #define TC_IOCTL_ABORT_DECOY_SYSTEM_WIPE TC_IOCTL (31) #define TC_IOCTL_GET_DECOY_SYSTEM_WIPE_STATUS TC_IOCTL (32) #define TC_IOCTL_GET_DECOY_SYSTEM_WIPE_RESULT TC_IOCTL (33) #define TC_IOCTL_WRITE_BOOT_DRIVE_SECTOR TC_IOCTL (34) #define TC_IOCTL_GET_WARNING_FLAGS TC_IOCTL (35) #define TC_IOCTL_SET_SYSTEM_FAVORITE_VOLUME_DIRTY TC_IOCTL (36) #define TC_IOCTL_REREAD_DRIVER_CONFIG TC_IOCTL (37) #define TC_IOCTL_GET_SYSTEM_DRIVE_DUMP_CONFIG TC_IOCTL (38) #define VC_IOCTL_GET_BOOT_LOADER_FINGERPRINT TC_IOCTL (39) // Legacy IOCTLs used before version 5.0 #define TC_IOCTL_LEGACY_GET_DRIVER_VERSION 466968 #define TC_IOCTL_LEGACY_GET_MOUNTED_VOLUMES 466948 /* Start of driver interface structures, the size of these structures may change between versions; so make sure you first send DRIVER_VERSION to check that it's the correct device driver */ #pragma pack (push) #pragma pack(1) typedef struct { int nReturnCode; /* Return code back from driver */ BOOL FilesystemDirty; BOOL VolumeMountedReadOnlyAfterAccessDenied; BOOL VolumeMountedReadOnlyAfterDeviceWriteProtected; wchar_t wszVolume[TC_MAX_PATH]; /* Volume to be mounted */ Password VolumePassword; /* User password */ BOOL bCache; /* Cache passwords in driver */ int nDosDriveNo; /* Drive number to mount */ uint32 BytesPerSector; BOOL bMountReadOnly; /* Mount volume in read-only mode */ BOOL bMountRemovable; /* Mount volume as removable media */ BOOL bExclusiveAccess; /* Open host file/device in exclusive access mode */ BOOL bMountManager; /* Announce volume to mount manager */ BOOL bPreserveTimestamp; /* Preserve file container timestamp */ BOOL bPartitionInInactiveSysEncScope; /* If TRUE, we are to attempt to mount a partition located on an encrypted system drive without pre-boot authentication. */ int nPartitionInInactiveSysEncScopeDriveNo; /* If bPartitionInInactiveSysEncScope is TRUE, this contains the drive number of the system drive on which the partition is located. */ BOOL SystemFavorite; // Hidden volume protection BOOL bProtectHiddenVolume; /* TRUE if the user wants the hidden volume within this volume to be protected against being overwritten (damaged) */ Password ProtectedHidVolPassword; /* Password to the hidden volume to be protected against overwriting */ BOOL UseBackupHeader; BOOL RecoveryMode; int pkcs5_prf; int ProtectedHidVolPkcs5Prf; BOOL bTrueCryptMode; uint32 BytesPerPhysicalSector; int VolumePim; int ProtectedHidVolPim; wchar_t wszLabel[33]; // maximum label length is 32 for NTFS and 11 for FAT32 BOOL bIsNTFS; // output only BOOL bDriverSetLabel; BOOL bCachePim; } MOUNT_STRUCT; typedef struct { int nDosDriveNo; /* Drive letter to unmount */ BOOL ignoreOpenFiles; BOOL HiddenVolumeProtectionTriggered; int nReturnCode; /* Return code back from driver */ } UNMOUNT_STRUCT; typedef struct { unsigned __int32 ulMountedDrives; /* Bitfield of all mounted drive letters */ wchar_t wszVolume[26][TC_MAX_PATH]; /* Volume names of mounted volumes */ wchar_t wszLabel[26][33]; /* Labels of mounted volumes */ unsigned __int64 diskLength[26]; int ea[26]; int volumeType[26]; /* Volume type (e.g. PROP_VOL_TYPE_OUTER, PROP_VOL_TYPE_OUTER_VOL_WRITE_PREVENTED, etc.) */ BOOL truecryptMode[26]; } MOUNT_LIST_STRUCT; typedef struct { int driveNo; int uniqueId; wchar_t wszVolume[TC_MAX_PATH]; unsigned __int64 diskLength; int ea; int mode; int pkcs5; int pkcs5Iterations; BOOL hiddenVolume; BOOL readOnly; BOOL removable; BOOL partitionInInactiveSysEncScope; uint32 volumeHeaderFlags; unsigned __int64 totalBytesRead; unsigned __int64 totalBytesWritten; int hiddenVolProtection; /* Hidden volume protection status (e.g. HIDVOL_PROT_STATUS_NONE, HIDVOL_PROT_STATUS_ACTIVE, etc.) */ int volFormatVersion; int volumePim; wchar_t wszLabel[33]; BOOL bDriverSetLabel; } VOLUME_PROPERTIES_STRUCT; typedef struct { WCHAR symLinkName[TC_MAX_PATH]; WCHAR targetName[TC_MAX_PATH]; } RESOLVE_SYMLINK_STRUCT; typedef struct { WCHAR deviceName[TC_MAX_PATH]; PARTITION_INFORMATION partInfo; BOOL IsGPT; BOOL IsDynamic; } DISK_PARTITION_INFO_STRUCT; typedef struct { WCHAR deviceName[TC_MAX_PATH]; DISK_GEOMETRY diskGeometry; } DISK_GEOMETRY_STRUCT; typedef struct { WCHAR DeviceName[TC_MAX_PATH]; LARGE_INTEGER RealDriveSize; BOOL TimeOut; } ProbeRealDriveSizeRequest; typedef struct { wchar_t wszFileName[TC_MAX_PATH]; // Volume to be "open tested" BOOL bDetectTCBootLoader; // Whether the driver is to determine if the first sector contains a portion of the TrueCrypt Boot Loader BOOL TCBootLoaderDetected; BOOL DetectFilesystem; BOOL FilesystemDetected; } OPEN_TEST_STRUCT; typedef enum { SetupNone = 0, SetupEncryption, SetupDecryption } BootEncryptionSetupMode; typedef struct { // New fields must be added at the end of the structure to maintain compatibility with previous versions BOOL DeviceFilterActive; uint16 BootLoaderVersion; BOOL DriveMounted; BOOL VolumeHeaderPresent; BOOL DriveEncrypted; LARGE_INTEGER BootDriveLength; int64 ConfiguredEncryptedAreaStart; int64 ConfiguredEncryptedAreaEnd; int64 EncryptedAreaStart; int64 EncryptedAreaEnd; uint32 VolumeHeaderSaltCrc32; BOOL SetupInProgress; BootEncryptionSetupMode SetupMode; BOOL TransformWaitingForIdle; uint32 HibernationPreventionCount; BOOL HiddenSystem; int64 HiddenSystemPartitionStart; // Number of times the filter driver answered that an unencrypted volume // is read-only (or mounted an outer/normal TrueCrypt volume as read only) uint32 HiddenSysLeakProtectionCount; } BootEncryptionStatus; typedef struct { BootEncryptionSetupMode SetupMode; WipeAlgorithmId WipeAlgorithm; BOOL ZeroUnreadableSectors; BOOL DiscardUnreadableEncryptedSectors; } BootEncryptionSetupRequest; typedef struct { Password VolumePassword; int pkcs5_prf; int pim; } ReopenBootVolumeHeaderRequest; typedef struct { char BootEncryptionAlgorithmName[256]; char BootPrfAlgorithmName[256]; } GetBootEncryptionAlgorithmNameRequest; typedef struct { byte Fingerprint[WHIRLPOOL_DIGESTSIZE + SHA512_DIGESTSIZE]; } BootLoaderFingerprintRequest; typedef struct { wchar_t DevicePath[TC_MAX_PATH]; byte Configuration; BOOL DriveIsDynamic; uint16 BootLoaderVersion; byte UserConfiguration; char CustomUserMessage[TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH + 1]; } GetSystemDriveConfigurationRequest; typedef struct { WipeAlgorithmId WipeAlgorithm; byte WipeKey[MASTER_KEYDATA_SIZE]; } WipeDecoySystemRequest; typedef struct { BOOL WipeInProgress; WipeAlgorithmId WipeAlgorithm; int64 WipedAreaEnd; } DecoySystemWipeStatus; typedef struct { LARGE_INTEGER Offset; byte Data[TC_SECTOR_SIZE_BIOS]; } WriteBootDriveSectorRequest; typedef struct { BOOL PagingFileCreationPrevented; BOOL SystemFavoriteVolumeDirty; } GetWarningFlagsRequest; typedef struct { struct _DriveFilterExtension *BootDriveFilterExtension; BOOL HwEncryptionEnabled; } GetSystemDriveDumpConfigRequest; #pragma pack (pop) #define DRIVER_STR WIDE #define TC_UNIQUE_ID_PREFIX "VeraCryptVolume" #define TC_MOUNT_PREFIX L"\\Device\\VeraCryptVolume" #define NT_MOUNT_PREFIX DRIVER_STR("\\Device\\VeraCryptVolume") #define NT_ROOT_PREFIX DRIVER_STR("\\Device\\VeraCrypt") #define DOS_MOUNT_PREFIX_DEFAULT DRIVER_STR("\\DosDevices\\") #define DOS_MOUNT_PREFIX_GLOBAL DRIVER_STR("\\GLOBAL??\\") // Use Global MS-DOS device names for sanity checks on drive letters #define DOS_ROOT_PREFIX DRIVER_STR("\\DosDevices\\VeraCrypt") #define WIN32_ROOT_PREFIX DRIVER_STR("\\\\.\\VeraCrypt") #define TC_DRIVER_CONFIG_REG_VALUE_NAME DRIVER_STR("VeraCryptConfig") #define TC_ENCRYPTION_FREE_CPU_COUNT_REG_VALUE_NAME DRIVER_STR("VeraCryptEncryptionFreeCpuCount") // WARNING: Modifying the following values can introduce incompatibility with previous versions. #define TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD 0x1 #define TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD_FOR_SYS_FAVORITES 0x2 #define TC_DRIVER_CONFIG_DISABLE_NONADMIN_SYS_FAVORITES_ACCESS 0x4 #define TC_DRIVER_CONFIG_DISABLE_HARDWARE_ENCRYPTION 0x8 #define TC_DRIVER_CONFIG_ENABLE_EXTENDED_IOCTL 0x10 #define TC_DRIVER_CONFIG_DISABLE_EVIL_MAID_ATTACK_DETECTION 0x20 #define TC_DRIVER_CONFIG_CACHE_BOOT_PIM 0x40 #endif /* _WIN32 */