Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
242fdbc056 | ||
|
|
b60030a3cf | ||
|
|
5b364099e1 | ||
|
|
76649073ea | ||
|
|
5f691297c0 | ||
|
|
e57ef0229b | ||
|
|
8dd58ddf6d | ||
|
|
da77d7e2c4 | ||
|
|
1732ee57d0 | ||
|
|
849a2eae81 | ||
|
|
46ace708b6 | ||
|
|
e2c0d1cf36 | ||
|
|
806c86bd19 | ||
|
|
ca31073eae | ||
|
|
f11368a4ee | ||
|
|
c30396bea9 | ||
|
|
0b2bad77ac | ||
|
|
7d1a3e4f4e | ||
|
|
5a63585f7e | ||
|
|
c9deed4686 | ||
|
|
7df9724e20 | ||
|
|
da69304dc8 | ||
|
|
c43f2abaa6 | ||
|
|
caf2fff60e | ||
|
|
f38c4cfee8 | ||
|
|
b206988531 | ||
|
|
e412c0458b | ||
|
|
6ebc83bbed | ||
|
|
4c0c4577df | ||
|
|
a6e76e714c | ||
|
|
b81b1d3bff | ||
|
|
f7a56b8f29 | ||
|
|
e29ecee6bc | ||
|
|
c24105feac | ||
|
|
fd693b3a0c | ||
|
|
f278df95e9 | ||
|
|
eafac3be5c | ||
|
|
cd7a01c34f | ||
|
|
49a8e52139 | ||
|
|
f4bea28fe4 | ||
|
|
d20df7c990 | ||
|
|
6c69cbfd29 | ||
|
|
7ee9e21525 | ||
|
|
cfe9218655 | ||
|
|
2c961dc1a6 | ||
|
|
5e3d756806 | ||
|
|
c215c5d0b2 | ||
|
|
232e27c979 | ||
|
|
d17c5a0d89 | ||
|
|
d907627f7e | ||
|
|
bac2ad29b6 | ||
|
|
59ebfd2683 | ||
|
|
cd59d5364f | ||
|
|
5065116e56 | ||
|
|
95d682a60f | ||
|
|
21ef234989 | ||
|
|
1c78303d94 | ||
|
|
61454c3df7 | ||
|
|
b076fb09d7 | ||
|
|
fbd0b47ff0 | ||
|
|
ea94096df7 | ||
|
|
2a60a5728e | ||
|
|
58287614e6 | ||
|
|
26bf85575d | ||
|
|
394bc1a4dd | ||
|
|
81cc646107 | ||
|
|
dc4d3923f2 | ||
|
|
270df0103a | ||
|
|
80d53604cf | ||
|
|
e1646365b0 | ||
|
|
9b09b47055 | ||
|
|
c2a3a00516 | ||
|
|
d03b06a40f | ||
|
|
857d0f16c0 | ||
|
|
2ef3c3a482 | ||
|
|
f3d5ed570f | ||
|
|
700b54aee9 | ||
|
|
d6f03627dd | ||
|
|
b4ed8de5d5 | ||
|
|
fb403ab552 | ||
|
|
668d5e3cad | ||
|
|
ee6da31fb6 | ||
|
|
c5e48c56c9 | ||
|
|
49f9516c9e | ||
|
|
f53eb8e260 | ||
|
|
685fad2d5d | ||
|
|
7dfca3573b | ||
|
|
743f1ff329 | ||
|
|
d4d1fba035 | ||
|
|
7ed41b3fde | ||
|
|
e9519da49e | ||
|
|
3c52c07dbc | ||
|
|
d74d568e6d | ||
|
|
5800d245e5 | ||
|
|
de4a0393df | ||
|
|
f6b14ee300 | ||
|
|
5b46b82e6d | ||
|
|
6575ce3e9e | ||
|
|
dca51c6393 | ||
|
|
0137f63d81 | ||
|
|
ed7a17e47f | ||
|
|
2fde7f0b47 | ||
|
|
21fc5a8750 | ||
|
|
53adfd5a1d | ||
|
|
7158e2b097 | ||
|
|
8288fecc0a | ||
|
|
7a94a05974 | ||
|
|
076c64dc8e | ||
|
|
6409f9c8e5 | ||
|
|
03f45d842d | ||
|
|
aaa9a08bd4 | ||
|
|
72b7147021 | ||
|
|
c29ee8331a | ||
|
|
7e892b7b24 | ||
|
|
6f371c0973 | ||
|
|
3d3a3900c6 | ||
|
|
dd72cf9068 | ||
|
|
3dfd4a5332 | ||
|
|
7cc2a3527d | ||
|
|
1812449906 | ||
|
|
6bb0440d4a | ||
|
|
ff871511af | ||
|
|
0fb2befe3a | ||
|
|
1ab09916f6 | ||
|
|
ad8e8509f4 | ||
|
|
6e78cb1ab5 | ||
|
|
853adda540 | ||
|
|
a27c314613 | ||
|
|
fb317ebc48 | ||
|
|
6d6aafe58d | ||
|
|
ac77142949 | ||
|
|
5a9409a3af | ||
|
|
7f2981f257 | ||
|
|
3021745f67 | ||
|
|
fe26ed8a5d | ||
|
|
d78a3d0273 | ||
|
|
3bdb9a32d7 | ||
|
|
b37d732408 | ||
|
|
86a78d55ed | ||
|
|
12e0a594fb | ||
|
|
6674fb4401 | ||
|
|
f45dba14be | ||
|
|
295d5affbb |
@@ -700,7 +700,7 @@ Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
|
||||
Jean-loup Gailly Mark Adler
|
||||
jloup@gzip.org madler@alumni.caltech.edu
|
||||
____________________________________________________________
|
||||
Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
|
||||
Copyright (C) 1999-2017 Dieter Baron and Thomas Klausner
|
||||
|
||||
The authors can be contacted at <libzip@nih.at>
|
||||
|
||||
@@ -742,3 +742,31 @@ version 3.0 (LGPL-3.0).
|
||||
|
||||
The full text of the license may be found at https://opensource.org/licenses/LGPL-3.0
|
||||
____________________________________________________________
|
||||
Copyright (c) 1999-2016 Jack Lloyd.
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
____________________________________________________________
|
||||
|
||||
@@ -241,18 +241,18 @@ Copyright Information
|
||||
---------------------
|
||||
|
||||
This software as a whole:
|
||||
Copyright (c) 2013-2017 IDRIX. All rights reserved.
|
||||
Copyright (c) 2013-2018 IDRIX. All rights reserved.
|
||||
|
||||
Portions of this software:
|
||||
Copyright (c) 2013-2017 IDRIX. All rights reserved.
|
||||
Copyright (c) 2013-2018 IDRIX. All rights reserved.
|
||||
Copyright (c) 2003-2012 TrueCrypt Developers Association. All rights reserved.
|
||||
Copyright (c) 1998-2000 Paul Le Roux. All rights reserved.
|
||||
Copyright (c) 1998-2008 Brian Gladman, Worcester, UK. All rights reserved.
|
||||
Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler.
|
||||
Copyright (c) 2016 Disk Cryptography Services for EFI (DCS), Alex Kolotnikov
|
||||
Copyright (c) Dieter Baron and Thomas Klausner.
|
||||
Copyright (C) 1999-2017 Dieter Baron and Thomas Klausner.
|
||||
Copyright (c) 2013, Alexey Degtyarev. All rights reserved.
|
||||
Copyright (c) 1999-2013,2014,2015,2016 Jack Lloyd. All rights reserved.
|
||||
Copyright (c) 1999-2016 Jack Lloyd. All rights reserved.
|
||||
|
||||
For more information, please see the legal notices attached to parts of the
|
||||
source code.
|
||||
|
||||
@@ -17,6 +17,8 @@ arrow_right.gif
|
||||
Authenticity and Integrity.html
|
||||
Authors.html
|
||||
bank_30x30.png
|
||||
BC_Logo_30x30.png
|
||||
BCH_Logo_48x30.png
|
||||
Beginner's Tutorial.html
|
||||
Beginner's Tutorial_Image_001.jpg
|
||||
Beginner's Tutorial_Image_002.jpg
|
||||
@@ -65,7 +67,10 @@ Donation_donate_Dollars.gif
|
||||
Donation_donate_Euros.gif
|
||||
Donation_donate_GBP.gif
|
||||
Donation_donate_YEN.gif
|
||||
Donation_VeraCrypt_Bitcoin.png
|
||||
Donation_VeraCrypt_Bitcoin_small.png
|
||||
Donation_VeraCrypt_BitcoinCash.png
|
||||
Donation_VeraCrypt_Litecoin.png
|
||||
Donation_VeraCrypt_Monero.png
|
||||
Encryption Algorithms.html
|
||||
Encryption Scheme.html
|
||||
FAQ.html
|
||||
@@ -80,7 +85,6 @@ Hidden Operating System.html
|
||||
Hidden Volume.html
|
||||
Home_facebook_veracrypt.png
|
||||
Home_reddit.png
|
||||
Home_tibitDonateButton.png
|
||||
Home_utilities-file-archiver-3.png
|
||||
Home_VeraCrypt_Default_Mount_Parameters.png
|
||||
Home_VeraCrypt_menu_Default_Mount_Parameters.png
|
||||
@@ -96,16 +100,20 @@ Keyfiles.html
|
||||
Kuznyechik.html
|
||||
Language Packs.html
|
||||
Legal Information.html
|
||||
liberapay_donate.svg
|
||||
LTC_Logo_30x30.png
|
||||
Main Program Window.html
|
||||
Malware.html
|
||||
Memory Dump Files.html
|
||||
Miscellaneous.html
|
||||
Modes of Operation.html
|
||||
Monero_Logo_30x30.png
|
||||
Mounting VeraCrypt Volumes.html
|
||||
Multi-User Environment.html
|
||||
Notation.html
|
||||
Paging File.html
|
||||
Parallelization.html
|
||||
paypal_30x30.png
|
||||
Personal Iterations Multiplier (PIM).html
|
||||
Personal Iterations Multiplier (PIM)_VeraCrypt_ChangePIM_Step1.png
|
||||
Personal Iterations Multiplier (PIM)_VeraCrypt_ChangePIM_Step2.png
|
||||
|
||||
@@ -7,7 +7,7 @@ copy ..\html\* .
|
||||
|
||||
hhc VeraCrypt.hhp
|
||||
|
||||
del /F /Q *.html *.css *.jpg *.gif *.png
|
||||
del /F /Q *.html *.css *.jpg *.gif *.png *.svg
|
||||
|
||||
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
@@ -47,6 +47,31 @@
|
||||
<em>Modes of Operation</em></a>). Each 128-bit block is first encrypted with Serpent (256-bit key) in XTS mode, then with Twofish (256-bit key) in XTS mode, and finally with AES (256-bit key) in XTS mode. Each of the cascaded ciphers uses its own key. All encryption
|
||||
keys are mutually independent (note that header keys are independent too, even though they are derived from a single password – see the section
|
||||
<a href="Header Key Derivation.html"><em>Header Key Derivation, Salt, and Iteration Count</em></a>). See above for information on the individual cascaded ciphers.</p>
|
||||
<h2>Camellia-Kuznyechik</h2>
|
||||
<p>Two ciphers in a cascade [15, 16] operating in XTS mode (see the section <a href="Modes%20of%20Operation.html">
|
||||
<em>Modes of Operation</em></a>). Each 128-bit block is first encrypted with Kuznyechik (256-bit key) in XTS mode and then with Camellia (256-bit key) in XTS mode. Each of the cascaded ciphers uses its own key. All encryption keys are mutually independent (note that
|
||||
header keys are independent too, even though they are derived from a single password – see the section
|
||||
<a href="Header Key Derivation.html"><em>Header Key Derivation, Salt, and Iteration Count</em></a>). See above for information on the individual cascaded ciphers.</p>
|
||||
<h2>Camellia-Serpent</h2>
|
||||
<p>Two ciphers in a cascade [15, 16] operating in XTS mode (see the section <a href="Modes%20of%20Operation.html">
|
||||
<em>Modes of Operation</em></a>). Each 128-bit block is first encrypted with Serpent (256-bit key) in XTS mode and then with Camellia (256-bit key) in XTS mode. Each of the cascaded ciphers uses its own key. All encryption keys are mutually independent (note that
|
||||
header keys are independent too, even though they are derived from a single password – see the section
|
||||
<a href="Header Key Derivation.html"><em>Header Key Derivation, Salt, and Iteration Count</em></a>). See above for information on the individual cascaded ciphers.</p>
|
||||
<h2>Kuznyechik-AES</h2>
|
||||
<p>Two ciphers in a cascade [15, 16] operating in XTS mode (see the section <a href="Modes%20of%20Operation.html">
|
||||
<em>Modes of Operation</em></a>). Each 128-bit block is first encrypted with AES (256-bit key) in XTS mode and then with Kuznyechik (256-bit key) in XTS mode. Each of the cascaded ciphers uses its own key. All encryption keys are mutually independent (note that
|
||||
header keys are independent too, even though they are derived from a single password – see the section
|
||||
<a href="Header Key Derivation.html"><em>Header Key Derivation, Salt, and Iteration Count</em></a>). See above for information on the individual cascaded ciphers.</p>
|
||||
<h2>Kuznyechik-Serpent-Camellia</h2>
|
||||
<p>Three ciphers in a cascade [15, 16] operating in XTS mode (see the section <a href="Modes%20of%20Operation.html">
|
||||
<em>Modes of Operation</em></a>). Each 128-bit block is first encrypted with Camellia (256-bit key) in XTS mode, then with Serpent (256- bit key) in XTS mode, and finally with Kuznyechik (256-bit key) in XTS mode. Each of the cascaded ciphers uses its own key. All
|
||||
encryption keys are mutually independent (note that header keys are independent too, even though they are derived from a single password – see the section
|
||||
<a href="Header Key Derivation.html"><em>Header Key Derivation, Salt, and Iteration Count</em></a>). See above for information on the individual cascaded ciphers.</p>
|
||||
<h2>Kuznyechik-Twofish</h2>
|
||||
<p>Two ciphers in a cascade [15, 16] operating in XTS mode (see the section <a href="Modes%20of%20Operation.html">
|
||||
<em>Modes of Operation</em></a>). Each 128-bit block is first encrypted with Twofish (256-bit key) in XTS mode and then with Kuznyechik (256-bit key) in XTS mode. Each of the cascaded ciphers uses its own key. All encryption keys are mutually independent (note that
|
||||
header keys are independent too, even though they are derived from a single password – see the section
|
||||
<a href="Header Key Derivation.html"><em>Header Key Derivation, Salt, and Iteration Count</em></a>). See above for information on the individual cascaded ciphers.</p>
|
||||
<h2>Serpent-AES</h2>
|
||||
<p>Two ciphers in a cascade [15, 16] operating in XTS mode (see the section <a href="Modes%20of%20Operation.html">
|
||||
<em>Modes of Operation</em></a>). Each 128-bit block is first encrypted with AES (256-bit key) in XTS mode and then with Serpent (256-bit key) in XTS mode. Each of the cascaded ciphers uses its own key. All encryption keys are mutually independent (note that
|
||||
|
||||
@@ -37,8 +37,11 @@
|
||||
<div class="wikidoc">
|
||||
<h2>Data Leaks</h2>
|
||||
<p>When a VeraCrypt volume is mounted, the operating system and third-party applications may write to unencrypted volumes (typically, to the unencrypted system volume) unencrypted information about the data stored in the VeraCrypt volume (e.g. filenames and
|
||||
locations of recently accessed files, databases created by file indexing tools, etc.), or the data itself in an unencrypted form (temporary files, etc.), or unencrypted information about the filesystem residing in the VeraCrypt volume. Note that Windows automatically
|
||||
records large amounts of potentially sensitive data, such as the names and locations of files you open, applications you run, etc.</p>
|
||||
locations of recently accessed files, databases created by file indexing tools, etc.), or the data itself in an unencrypted form (temporary files, etc.), or unencrypted information about the filesystem residing in the VeraCrypt volume.</p>
|
||||
<p>Note that Windows automatically records large amounts of potentially sensitive data, such as the names and locations of files you open, applications you run, etc. For example, Windows uses a set of Registry keys known as “shellbags” to store the name, size, view, icon, and position of a folder when using Explorer.
|
||||
Each time you open a folder, this information is updated including the time and date of access. Windows Shellbags may be found in a few locations, depending on operating system version and user profile.
|
||||
On a Windows XP system, shellbags may be found under <strong>"HKEY_USERS\{USERID}\Software\Microsoft\Windows\Shell\"</strong> and <strong>"HKEY_USERS\{USERID}\Software\Microsoft\Windows\ShellNoRoam\"</strong>.
|
||||
On a Windows 7 system, shellbags may be found under <strong>"HEKY_USERS\{USERID}\Local Settings\Software\Microsoft\Windows\Shell\"</strong>. More information available at <a href="https://www.sans.org/reading-room/whitepapers/forensics/windows-shellbag-forensics-in-depth-34545" target="_blank">https://www.sans.org/reading-room/whitepapers/forensics/windows-shellbag-forensics-in-depth-34545</a>.
|
||||
<p>Also, starting from Windows 8, every time a VeraCrypt volume that is formatted using NTFS is mounted, an Event 98 is written for the system Events Log and it will contain the device name (\\device\VeraCryptVolumeXX) of the volume. This event log "feature"
|
||||
was introduced in Windows 8 as part of newly introduced NTFS health checks as explained
|
||||
<a href="https://blogs.msdn.microsoft.com/b8/2012/05/09/redesigning-chkdsk-and-the-new-ntfs-health-model/" target="_blank">
|
||||
|
||||
@@ -27,78 +27,75 @@
|
||||
|
||||
<div class="wikidoc">
|
||||
<h1>Donation to VeraCrypt</h1>
|
||||
<p>You can support VeraCrypt development through donations using PayPal, Bitcoins, bank transfers. It is also possible to donate using Flattr and Tibit.</p>
|
||||
<table border="1" width="645" style="height:427px">
|
||||
<p>You can support VeraCrypt development through donations using PayPal, bank transfers and cryptocurrencies (<a href="#Bitcoin">Bitcoin</a>, <a href="#BitcoinCash">Bitcoin Cash</a>, <a href="#Litecoin">Litecoin</a> and <a href="#Monero">Monero</a>). It is also possible to donate using Liberapay and Flattr.</p>
|
||||
|
||||
<hr>
|
||||
<h3><img src="paypal_30x30.png" style="vertical-align: middle; margin-right: 5px">PayPal</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>
|
||||
<h4>PayPal</h4>
|
||||
</th>
|
||||
<th>
|
||||
<h4>Bitcoins</h4>
|
||||
</th>
|
||||
<th>
|
||||
<h4 style="text-align:center">Others</h4>
|
||||
</th>
|
||||
<td align="center"><a title="Donate to VeraCrypt in Euros" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=H25GJLUDHBMB6" target="_blank"><img src="Donation_donate_Euros.gif" alt="" width="92" height="26"></a></td>
|
||||
<td align="center"><a title="VeraCrypt Donation in USD" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=B8PU86SHE2ZVA" target="_blank"><img src="Donation_donate_Dollars.gif" alt="" width="92" height="26"></a></td>
|
||||
<td align="center"><a title="VeraCrypt Donation in GBP" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MFAZACXK9NXT8" target="_blank"><img src="Donation_donate_GBP.gif" alt="" width="92" height="26"></a></td>
|
||||
<td align="center"><a title="VeraCrypt Donation in Canadian Dollar" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QAN6T5E5F7F5J" target="_blank"><img src="Donation_donate_Dollars.gif" alt="" width="92" height="26"></a></td>
|
||||
<td align="center"><a title="VeraCrypt Donation in Swiss Francs" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=98RJHVLY5NJ5U" target="_blank"><img src="Donation_donate_CHF.gif" alt="" width="92" height="26"></a></td>
|
||||
<td align="center"><a title="VeraCrypt Donation in Japanese Yen" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=M9DXZ83WD7S8Y" target="_blank"><img src="Donation_donate_YEN.gif" alt="" width="92" height="26"></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table border="1">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>Euro</strong></td>
|
||||
<td>
|
||||
<h3><a title="Donate to VeraCrypt in Euros" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=H25GJLUDHBMB6" target="_blank"><img src="Donation_donate_Euros.gif" alt="" width="92" height="26"></a></h3>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>US Dollar</strong></td>
|
||||
<td>
|
||||
<h3><a title="VeraCrypt Donation in USD" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=B8PU86SHE2ZVA" target="_blank"><img src="Donation_donate_Dollars.gif" alt="" width="92" height="26"></a></h3>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Pound Sterling</strong></td>
|
||||
<td>
|
||||
<h3><a title="VeraCrypt Donation in GBP" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MFAZACXK9NXT8" target="_blank"><img src="Donation_donate_GBP.gif" alt="" width="92" height="26"></a></h3>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Canadian Dollar</strong></td>
|
||||
<td>
|
||||
<h3><a title="VeraCrypt Donation in Canadian Dollar" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QAN6T5E5F7F5J" target="_blank"><img src="Donation_donate_Dollars.gif" alt="" width="92" height="26"></a></h3>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Swiss Franc</strong></td>
|
||||
<td>
|
||||
<h3><a title="VeraCrypt Donation in Swiss Francs" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=98RJHVLY5NJ5U" target="_blank"><img src="Donation_donate_CHF.gif" alt="" width="92" height="26"></a></h3>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Japanese Yen</strong></td>
|
||||
<td>
|
||||
<h3><a title="VeraCrypt Donation in Japanese Yen" href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=M9DXZ83WD7S8Y" target="_blank"><img src="Donation_donate_YEN.gif" alt="" width="92" height="26"></a></h3>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
<td style="text-align:center; vertical-align:middle">
|
||||
<p><img src="Donation_VeraCrypt_Bitcoin.png" alt="VeraCrypt Bitcoin Address" width="250" height="250"></p>
|
||||
<p><strong>1NRoPQsm8by5iWyMMmHQy3P5takur3kYgG</strong></p>
|
||||
</td>
|
||||
<td style="text-align:left; vertical-align:top">
|
||||
<p><strong>Tibit:<br>
|
||||
<a title="Donate a tib to VeraCrypt" href="https://tib.me/1NRoPQsm8by5iWyMMmHQy3P5takur3kYgG/VeraCrypt/?TIB=https://veracrypt.codeplex.com" target="_blank"><img src="Home_tibitDonateButton.png" alt="Donate using Tibit" width="120" height="40"></a></strong></p>
|
||||
<p> </p>
|
||||
<p><strong>Flattr:</strong><br>
|
||||
<a title="Donate using Flattr" href="https://flattr.com/submit/auto?user_id=idrix&url=https://veracrypt.codeplex.com&title=VeraCrypt" target="_blank"><img title="Flattr VeraCrypt" src="flattr-badge-large.png" alt="Flattr VeraCrypt" width="93" height="20" border="0"></a></p>
|
||||
</td>
|
||||
<td align="center">Euro</td>
|
||||
<td align="center">US Dollar</td>
|
||||
<td align="center">Pound Sterling</td>
|
||||
<td align="center">Canadian Dollar</td>
|
||||
<td align="center">Swiss Franc</td>
|
||||
<td align="center">Japanese Yen</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr>
|
||||
<p><img src="bank_30x30.png" style="margin-right: 5px"><strong>Donate using bank transfer:</strong> <a href="Contact.html" target="_blank.html">contact us</a> for bank account details (based in France).</p>
|
||||
|
||||
<hr>
|
||||
<h3>Donation Platforms:</h3>
|
||||
<ul>
|
||||
<li><strong>Liberapay: <a href="https://liberapay.com/VeraCrypt/donate" target="_blank"><img alt="Donate using Liberapay" src="liberapay_donate.svg" style="vertical-align: middle; margin-bottom: 5px"></a></strong></li>
|
||||
<li><strong>Flattr: <a title="Donate using Flattr" href="https://flattr.com/submit/auto?user_id=idrix&url=https://www.veracrypt.fr&title=VeraCrypt" target="_blank"><img title="Flattr VeraCrypt" src="flattr-badge-large.png" alt="Flattr VeraCrypt" width="93" height="20" border="0" style="vertical-align: middle; margin-bottom: 5px"></a></strong></li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
<h3 id="Bitcoin"><img src="BC_Logo_30x30.png" style="vertical-align: middle; margin-right: 5px">Bitcoin</h3>
|
||||
<p><img src="Donation_VeraCrypt_Bitcoin_small.png" alt="VeraCrypt Bitcoin Address" width="150" height="150"></p>
|
||||
<p><strong>1NRoPQsm8by5iWyMMmHQy3P5takur3kYgG</strong></p>
|
||||
|
||||
<hr>
|
||||
<h3 id="BitcoinCash"><img src="BCH_Logo_48x30.png" style="vertical-align: middle; margin-right: 5px">Bitcoin Cash</h3>
|
||||
<p><img src="Donation_VeraCrypt_BitcoinCash.png" alt="VeraCrypt Bitcoin Cash Address" width="150" height="150"></p>
|
||||
<p><strong>1AYu65KkZvriz2DUd6FJJZp73NYqEdHzxa</strong></p>
|
||||
|
||||
<hr>
|
||||
<h3 id="Litecoin"><img src="LTC_Logo_30x30.png" style="vertical-align: middle; margin-right: 5px">Litecoin</h3>
|
||||
<p><img src="Donation_VeraCrypt_Litecoin.png" alt="VeraCrypt Litecoin Address" width="150" height="150"></p>
|
||||
<p><strong>LZkkfkMs4qHmWaP9DAvS1Ep1fAxaf8A2T7</strong></p>
|
||||
|
||||
<hr>
|
||||
<h3 id="Monero"><img src="Monero_Logo_30x30.png" style="vertical-align: middle; margin-right: 5px">Monero</h3>
|
||||
<p><img src="Donation_VeraCrypt_Monero.png" alt="VeraCrypt Monero Address" width="150" height="150"></p>
|
||||
<p><strong>464GGAau9CE5XiER4PSZ6SMbK4wxPCgdm2r36uqnL8NoS6zDjxUYXnyQymbUsK1QipDMY2fsSgDyZ3tMaLfpWvSr2EE8wMw</strong></p>
|
||||
|
||||
|
||||
<hr>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
</div><div class="ClearBoth"></div></body></html>
|
||||
|
Before Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
@@ -154,6 +154,66 @@ XTS</td>
|
||||
</tr>
|
||||
<tr style="text-align:left">
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
<a href="Cascades.html" style="color:#0080c0; text-decoration:none.html">Camellia-Kuznyechik</a></td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
256; 256</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
128</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
XTS</td>
|
||||
</tr>
|
||||
<tr style="text-align:left">
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
<a href="Cascades.html" style="color:#0080c0; text-decoration:none.html">Camellia-Serpent</a></td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
256; 256</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
128</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
XTS</td>
|
||||
</tr>
|
||||
<tr style="text-align:left">
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
<a href="Cascades.html" style="color:#0080c0; text-decoration:none.html">Kuznyechik-AES</a></td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
256; 256</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
128</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
XTS</td>
|
||||
</tr>
|
||||
<tr style="text-align:left">
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
<a href="Cascades.html" style="color:#0080c0; text-decoration:none.html">Kuznyechik-Serpent-Camellia</a></td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
256; 256; 256</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
128</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
XTS</td>
|
||||
</tr>
|
||||
<tr style="text-align:left">
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
<a href="Cascades.html" style="color:#0080c0; text-decoration:none.html">Kuznyechik-Twofish</a></td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
256; 256</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
128</td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
XTS</td>
|
||||
</tr>
|
||||
<tr style="text-align:left">
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
<a href="Cascades.html" style="color:#0080c0; text-decoration:none.html">Serpent-AES</a></td>
|
||||
<td style="color:#000000; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; text-align:center; vertical-align:middle; border-width:0px 1px 0px 0px; border-style:none solid solid none; padding:5px; border-color:white #000000 #ffffff white">
|
||||
</td>
|
||||
|
||||
|
Before Width: | Height: | Size: 627 B |
|
After Width: | Height: | Size: 1.8 KiB |
@@ -43,10 +43,10 @@ can be found here</a>.</p>
|
||||
<h3>Copyright Information</h3>
|
||||
<p>This software as a whole:<br>
|
||||
<br>
|
||||
Copyright © 2013-2016 IDRIX. All rights reserved.<br>
|
||||
Copyright © 2013-2018 IDRIX. All rights reserved.<br>
|
||||
<br>
|
||||
Portions of this software:</p>
|
||||
<p>Copyright © 2013-2016 IDRIX. All rights reserved.<br>
|
||||
<p>Copyright © 2013-2018 IDRIX. All rights reserved.<br>
|
||||
<br>
|
||||
Copyright © 2003-2012 TrueCrypt Developers Association. All rights reserved.</p>
|
||||
<p>Copyright © 1998-2000 Paul Le Roux. All rights reserved.<br>
|
||||
@@ -54,9 +54,9 @@ Copyright © 2003-2012 TrueCrypt Developers Association. All rights reserved
|
||||
Copyright © 1998-2008 Brian Gladman, Worcester, UK. All rights reserved.</p>
|
||||
<p>Copyright © 1995-2017 Jean-loup Gailly and Mark Adler.</p>
|
||||
<p>Copyright © 2016 Disk Cryptography Services for EFI (DCS), Alex Kolotnikov</p>
|
||||
<p>Copyright © 1999-2014 Dieter Baron and Thomas Klausner.</p>
|
||||
<p>Copyright © 1999-2017 Dieter Baron and Thomas Klausner.</p>
|
||||
<p>Copyright © 2013, Alexey Degtyarev. All rights reserved.</p>
|
||||
<p>Copyright © 1999-2013,2014,2015,2016 Jack Lloyd. All rights reserved.<br>
|
||||
<p>Copyright © 1999-2016 Jack Lloyd. All rights reserved.<br>
|
||||
<br>
|
||||
For more information, please see the legal notices attached to parts of the source code.</p>
|
||||
<h3>Trademark Information</h3>
|
||||
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -34,6 +34,146 @@
|
||||
|
||||
<div class="wikidoc">
|
||||
<h1>Release Notes</h1>
|
||||
|
||||
<p><strong style="text-align:left">1.22 </strong>(March 30<sup>th</sup>, 2018):</p>
|
||||
<ul>
|
||||
<li><strong>All OSs:</strong>
|
||||
<ul>
|
||||
<li>SIMD speed optimization for Kuznyechik cipher implementation (up to 2x speedup).</li>
|
||||
<li>Add 5 new cascades of cipher algorithms: Camellia-Kuznyechik, Camellia-Serpent, Kuznyechik-AES, Kuznyechik-Serpent-Camellia and Kuznyechik-Twofish.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Windows:</strong>
|
||||
<ul>
|
||||
<li>MBR Bootloader: Fix failure to boot hidden OS on some machines.</li>
|
||||
<li>MBR Bootloader: Reduce CPU usage during password prompt.</li>
|
||||
<li>Security enhancement: Add option to block TRIM command for system encryption on SSD drives.</li>
|
||||
<li>Implement TRIM support for non-system SSD drives and add option to enable it (TRIM is disabled by default for non-system volumes).</li>
|
||||
<li>Better fix for "Parameter Incorrect" issues during EFI system encryption in some machines.</li>
|
||||
<li>Driver: remove unnecessary dependency to wcsstr which can cause issues on some machines.</li>
|
||||
<li>Driver: Fix "Incorrect Parameter" error when mounting volumes on some machines.</li>
|
||||
<li>Fix failure to mount system favorites during boot on some machines.</li>
|
||||
<li>Fix current application losing focus when VeraCrypt is run in command line with /quit /silent switches.</li>
|
||||
<li>Fix some cases of external applications freezing during mount/dismount.</li>
|
||||
<li>Fix rare cases of secure desktop for password dialog not visible which caused UI to block.</li>
|
||||
<li>Update libzip to version 1.5.0 that include fixes for some security issues.</li>
|
||||
<li>Extend Secure Desktop feature to smart card PIN entry dialog.</li>
|
||||
<li>Fix truncated license text in installer wizard.</li>
|
||||
<li>Add portable package that allows extracting binaries without asking for admin privileges.</li>
|
||||
<li>Simplify format of language XML files.</li>
|
||||
<li>Workaround for cases where password dialog doesn't get keyboard focus if Secure Desktop is not enabled.</li>
|
||||
</ul>
|
||||
<li><strong>Linux:</strong>
|
||||
<ul>
|
||||
<li>Fix failure to install GUI version under recent versions of KDE.</li>
|
||||
<li>Fix wxWidgets assertion failed when backing up/restoring volume header.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>MacOSX:</strong>
|
||||
<ul>
|
||||
<li>Fix issue preventing some local help files from opening in the browser.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p><strong style="text-align:left">1.21 </strong>(July 9<sup>th</sup>, 2017):</p>
|
||||
<ul>
|
||||
<li><strong>All OSs:</strong>
|
||||
<ul>
|
||||
<li>Fix 1.20 regression crash when running on CPU not supporting extended features.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Windows:</strong>
|
||||
<ul>
|
||||
<li>Fix 1.20 regression that caused PIM value stored in favorites to be ignored during mount.</li>
|
||||
<li>Fix 1.20 regression that causes system favorites not to mount in some cases.</li>
|
||||
<li>Fix some cases of "Parameter Incorrect" error during EFI system encryption wizard.</li>
|
||||
<li>Install PDF documents related to EFI system encryption configuration for advanced users:
|
||||
<ul>
|
||||
<li>disk_encryption_v1_2.pdf related to EFI hidden OS and full fisk encryption</li>
|
||||
<li>dcs_tpm_owner_02.pdf related to TPM configuration for EFI system encryption.</li>
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>FreeBSD:</strong>
|
||||
<ul>
|
||||
<li>Add support for building on FreeBSD.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p><strong style="text-align:left">1.20 </strong>(June 29<sup>th</sup>, 2017):</p>
|
||||
<ul>
|
||||
<li><strong>All OSs:</strong>
|
||||
<ul>
|
||||
<li>Use 64-bit optimized assembly implementation of Twofish and Camellia by Jussi Kivilinna.
|
||||
<ul>
|
||||
<li>Camellia 2.5 faster when AES-NI supported by CPU. 30% faster without it.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Use optimized implementation for SHA-512/SHA256.
|
||||
<ul>
|
||||
<li>33% speedup on 64-bit systems.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Deploy local HTML documentation instead of User Guide PDF.</li>
|
||||
<li>Change links in UI from ones on Codeplex to ones hosted at veracrypt.fr </li>
|
||||
<li>Security: build binaries with support for Address Space Layout Randomization (ASLR).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Windows:</strong>
|
||||
<ul>
|
||||
<li>Several fixes and modifications for EFI System Encryption:
|
||||
<ul>
|
||||
<li>Fix bug in EFI system decryption using EFI Rescue Disk</li>
|
||||
<li>Add support for TPM 1.2 and TPM 2.0 (experimental) through DCS low level configuration.
|
||||
<ul>
|
||||
<li><a href="https://dc5.sourceforge.io/docs/dcs_tpm_owner_02.pdf" target="_blank">https://dc5.sourceforge.io/docs/dcs_tpm_owner_02.pdf</a>
|
||||
</li>
|
||||
</ul>
|
||||
<li>Add Support for EFI full disk encryption and hidden OS using manual procedure (not exposed in UI).
|
||||
<ul>
|
||||
<li><a href="https://dc5.sourceforge.io/docs/disk_encryption_v1_2.pdf" target="_blank">https://dc5.sourceforge.io/docs/disk_encryption_v1_2.pdf</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>Enable using Secure Desktop for password entry. Add preferences option and command line switch (/secureDesktop) to activate it.</li>
|
||||
<li>Use default mount parameters when mounting multiple favorites with password caching.</li>
|
||||
<li>Enable specifying PRF and TrueCryptMode for favorites.</li>
|
||||
<li>Preliminary driver changes to support EFI hidden OS functionality.</li>
|
||||
<li>Fix Streebog not recognized by /hash command line.</li>
|
||||
<li>Add support for ReFS filesystem on Windows 10 when creating normal volumes</li>
|
||||
<li>Fix high CPU usage when favorite configured to mount with VolumeID on arrival.</li>
|
||||
<li>Use CHM file for User Guide instead of PDF.</li>
|
||||
<li>Fix false warning in case of EFI system encryption about Windows not installed on boot drive.</li>
|
||||
<li>Enhancements to driver handling of various disk IOCTL.</li>
|
||||
<li>Enhancements to EFI bootloader. Add possibility to manually edit EFI configuration file.</li>
|
||||
<li>Driver Security: Use enhanced protection of NX pool under Windows 8 and later.</li>
|
||||
<li>Reduce performance impact of internal check for disconnected network drives.</li>
|
||||
<li>Minor fixes.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>MacOSX:</strong>
|
||||
<ul>
|
||||
<li>OSX 10.7 or newer is required to run VeraCrypt.</li>
|
||||
<li>Make VeraCrypt default handler of .hc & .tc files.</li>
|
||||
<li>Add custom VeraCrypt icon to .hc and .tc files in Finder.</li>
|
||||
<li>Check TrueCryptMode in password dialog when opening container file with .tc extension.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Linux:</strong>
|
||||
<ul>
|
||||
<li>Check TrueCryptMode in password dialog when opening container file with .tc extension.</li>
|
||||
<li>Fix executable stack in resulting binary which was caused by crypto assembly files missing the GNU-stack note.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p><strong style="text-align:left">1.19 </strong>(October 17<sup>th</sup>, 2016):</p>
|
||||
<ul>
|
||||
<li><strong>All OSs:</strong>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<h2>Volume Mounted as Removable Medium</h2>
|
||||
<p>This section applies to VeraCrypt volumes mounted when one of the following options is enabled (as applicable):</p>
|
||||
<ul>
|
||||
<li><em>Tools</em> > <em>Preferences</em> > <em>Mount volumes as removable media</em>
|
||||
<li><em>Settings</em> > <em>Preferences</em> > <em>Mount volumes as removable media</em>
|
||||
</li><li><em>Mount Options</em> > <em>Mount volume as removable medium</em> </li><li><em>Favorites</em> > <em>Organize Favorite Volumes</em> > <em>Mount selected volume as removable medium</em>
|
||||
</li><li><em>Favorites</em> > <em>Organize System Favorite Volumes</em> > <em>Mount selected volume as removable medium</em>
|
||||
</li></ul>
|
||||
|
||||
@@ -44,14 +44,15 @@ Windows Server 2012 </li><li style="text-align:left; margin-top:0px; margin-bott
|
||||
Windows Server 2008 R2 (64-bit) </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Windows Server 2008 </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Windows Server 2003 </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Mac OS X 10.13 High Sierra </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Mac OS X 10.12 Sierra </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Mac OS X 10.11 El Capitan </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Mac OS X 10.10 Yosemite </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Mac OS X 10.9 Mavericks </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Mac OS X 10.8 Mountain Lion </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Mac OS X 10.7 Lion </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Mac OS X 10.6 Snow Leopard </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
Linux x86 (32-bit and 64-bit versions, kernel 2.6 or compatible) </li></ul>
|
||||
Linux x86 (32-bit and 64-bit versions, kernel 2.6 or compatible) </li><li style="text-align:left; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px">
|
||||
FreeBSD x86 (32-bit and 64-bit versions, starting from version 11) </li></ul>
|
||||
<div style="text-align:left; margin-top:19px; margin-bottom:19px; padding-top:0px; padding-bottom:0px">
|
||||
<br style="text-align:left">
|
||||
<span style="text-align:left; font-size:10px; line-height:12px">Note: The following operating systems (among others) are not supported: Windows RT, Windows 2003 IA-64, Windows 2008 IA-64, Windows XP IA-64, and the Embedded/Tablet versions of Windows.</span></div>
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="83" height="30"><rect id="back" fill="#f6c915" x="1" y=".5" width="82" height="29" rx="4"/><svg viewBox="0 0 80 80" height="16" width="16" x="7" y="7"><g transform="translate(-78.37-208.06)" fill="#1a171b"><path d="m104.28 271.1c-3.571 0-6.373-.466-8.41-1.396-2.037-.93-3.495-2.199-4.375-3.809-.88-1.609-1.308-3.457-1.282-5.544.025-2.086.313-4.311.868-6.675l9.579-40.05 11.69-1.81-10.484 43.44c-.202.905-.314 1.735-.339 2.489-.026.754.113 1.421.415 1.999.302.579.817 1.044 1.546 1.395.729.353 1.747.579 3.055.679l-2.263 9.278"/><path d="m146.52 246.14c0 3.671-.604 7.03-1.811 10.07-1.207 3.043-2.879 5.669-5.01 7.881-2.138 2.213-4.702 3.935-7.693 5.167-2.992 1.231-6.248 1.848-9.767 1.848-1.71 0-3.42-.151-5.129-.453l-3.394 13.651h-11.162l12.52-52.19c2.01-.603 4.311-1.143 6.901-1.622 2.589-.477 5.393-.716 8.41-.716 2.815 0 5.242.428 7.278 1.282 2.037.855 3.708 2.024 5.02 3.507 1.307 1.484 2.274 3.219 2.904 5.205.627 1.987.942 4.11.942 6.373m-27.378 15.461c.854.202 1.91.302 3.167.302 1.961 0 3.746-.364 5.355-1.094 1.609-.728 2.979-1.747 4.111-3.055 1.131-1.307 2.01-2.877 2.64-4.714.628-1.835.943-3.858.943-6.071 0-2.161-.479-3.998-1.433-5.506-.956-1.508-2.615-2.263-4.978-2.263-1.61 0-3.118.151-4.525.453l-5.28 21.948"/></g></svg><text fill="#1a171b" text-anchor="middle" font-family="Helvetica Neue,Helvetica,Arial,sans-serif"
|
||||
font-weight="700" font-size="14" x="50" y="20">Donate</text></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
@@ -17,7 +17,7 @@
|
||||
#include "BootDefs.h"
|
||||
|
||||
// The user will be advised to upgrade the rescue disk if upgrading from the following or any previous version
|
||||
#define TC_RESCUE_DISK_UPGRADE_NOTICE_MAX_VERSION 0x0120
|
||||
#define TC_RESCUE_DISK_UPGRADE_NOTICE_MAX_VERSION 0x0121
|
||||
|
||||
#define TC_BOOT_LOADER_AREA_SIZE (TC_BOOT_LOADER_AREA_SECTOR_COUNT * TC_SECTOR_SIZE_BIOS)
|
||||
|
||||
|
||||
@@ -19,17 +19,19 @@
|
||||
|
||||
static int ScreenOutputDisabled = 0;
|
||||
|
||||
#if defined(TC_TRACE_INT13) || !defined(TC_WINDOWS_BOOT_RESCUE_DISK_MODE)
|
||||
void DisableScreenOutput ()
|
||||
{
|
||||
++ScreenOutputDisabled;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef TC_TRACE_INT13
|
||||
void EnableScreenOutput ()
|
||||
{
|
||||
--ScreenOutputDisabled;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void PrintChar (char c)
|
||||
{
|
||||
@@ -236,11 +238,32 @@ byte GetKeyboardChar ()
|
||||
return GetKeyboardChar (nullptr);
|
||||
}
|
||||
|
||||
/*
|
||||
inline void Sleep ()
|
||||
{
|
||||
__asm
|
||||
{
|
||||
mov al, 0
|
||||
mov ah, 0x86
|
||||
// Sleep for 250 milliseconds = 250 000 microseconds = 0x0003D090
|
||||
mov cx, 0x0003
|
||||
mov dx, 0xD090
|
||||
int 0x15
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
byte GetKeyboardChar (byte *scanCode)
|
||||
{
|
||||
// Work around potential BIOS bugs (Windows boot manager polls the keystroke buffer)
|
||||
while (!IsKeyboardCharAvailable());
|
||||
while (!IsKeyboardCharAvailable())
|
||||
{
|
||||
// reduce CPU usage by halting CPU until the next external interrupt is fired
|
||||
__asm
|
||||
{
|
||||
hlt
|
||||
}
|
||||
}
|
||||
|
||||
byte asciiCode;
|
||||
byte scan;
|
||||
|
||||
@@ -157,6 +157,7 @@ BiosResult ReadWriteSectors (bool write, uint16 bufferSegment, uint16 bufferOffs
|
||||
return result;
|
||||
}
|
||||
|
||||
#ifdef TC_WINDOWS_BOOT_RESCUE_DISK_MODE
|
||||
|
||||
BiosResult ReadWriteSectors (bool write, byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
||||
{
|
||||
@@ -165,18 +166,19 @@ BiosResult ReadWriteSectors (bool write, byte *buffer, byte drive, const ChsAddr
|
||||
return ReadWriteSectors (write, codeSeg, (uint16) buffer, drive, chs, sectorCount, silent);
|
||||
}
|
||||
|
||||
|
||||
BiosResult ReadSectors (byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
||||
{
|
||||
return ReadWriteSectors (false, buffer, drive, chs, sectorCount, silent);
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
BiosResult WriteSectors (byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
||||
{
|
||||
return ReadWriteSectors (true, buffer, drive, chs, sectorCount, silent);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
static BiosResult ReadWriteSectors (bool write, BiosLbaPacket &dapPacket, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
||||
{
|
||||
|
||||
@@ -197,9 +197,9 @@ $(LIBS)
|
||||
del $(PROJ).crf $(PROJ).crf2
|
||||
|
||||
# Compress the Rescue Disk botloader for Cascades and Serpent since it is too big (size > 31232 bytes)
|
||||
!if DEFINED(RESCUE_DISK) && (!DEFINED (SINGLE_CIPHER) || ("$(SINGLE_CIPHER)" == "SERPENT") || ("$(SINGLE_CIPHER)" == "CAMELLIA"))
|
||||
#!if DEFINED(RESCUE_DISK) && (!DEFINED (SINGLE_CIPHER) || ("$(SINGLE_CIPHER)" == "SERPENT") || ("$(SINGLE_CIPHER)" == "CAMELLIA"))
|
||||
upx $(PROJ).$(TARGETEXT)
|
||||
!endif
|
||||
#!endif
|
||||
gzip.exe -c -n --best $(PROJ).$(TARGETEXT) >$(PROJ).$(TARGETEXT).gz
|
||||
-dd.exe conv=notrunc,sync bs=512 seek=5 if=$(PROJ).$(TARGETEXT).gz of=$(PROJ).flp 2>NUL:
|
||||
cd ..
|
||||
|
||||
@@ -137,6 +137,8 @@ bool operator<= (const uint64 &a, const uint64 &b)
|
||||
return a < b || a == b;
|
||||
}
|
||||
|
||||
#ifdef TC_BOOT_DEBUG_ENABLED
|
||||
|
||||
bool TestInt64 ()
|
||||
{
|
||||
uint64 a, b, c;
|
||||
@@ -161,6 +163,7 @@ bool TestInt64 ()
|
||||
return c.HighPart == 0x22446755UL && c.LowPart == 0x78024600UL;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void CopyMemory (void *source, uint16 destSegment, uint16 destOffset, uint16 blockSize)
|
||||
{
|
||||
|
||||
@@ -110,7 +110,9 @@ void CopyMemory (uint16 sourceSegment, uint16 sourceOffset, void *destination, u
|
||||
extern "C" void EraseMemory (void *memory, int size);
|
||||
uint32 GetLinearAddress (uint16 segment, uint16 offset);
|
||||
bool RegionsIntersect (const uint64 &start1, uint32 length1, const uint64 &start2, const uint64 &end2);
|
||||
#ifdef TC_BOOT_DEBUG_ENABLED
|
||||
bool TestInt64 ();
|
||||
#endif
|
||||
extern "C" void ThrowFatalException (int line);
|
||||
|
||||
#endif // TC_HEADER_Boot_Platform
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<string>TRUE</string>
|
||||
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.21.5</string>
|
||||
<string>1.22.9</string>
|
||||
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>_VERSION_</string>
|
||||
|
||||
@@ -22,7 +22,7 @@ if [ "$(id -u)" != "0" ]; then
|
||||
fi
|
||||
|
||||
# the sources of wxWidgets 3.0.3 must be extracted to the parent directory
|
||||
export WX_ROOT=$PARENTDIR/wxWidgets-3.0.3
|
||||
export WX_ROOT=$PARENTDIR/wxWidgets-3.0.4
|
||||
echo "Using wxWidgets sources in $WX_ROOT"
|
||||
|
||||
cd $SOURCEPATH
|
||||
|
||||
@@ -21,7 +21,7 @@ if [ "$(id -u)" != "0" ]; then
|
||||
fi
|
||||
|
||||
# the sources of wxWidgets 3.0.3 must be extracted to the parent directory
|
||||
export WX_ROOT=$PARENTDIR/wxWidgets-3.0.3
|
||||
export WX_ROOT=$PARENTDIR/wxWidgets-3.0.4
|
||||
echo "Using wxWidgets sources in $WX_ROOT"
|
||||
|
||||
cd $SOURCEPATH
|
||||
|
||||
@@ -13,7 +13,7 @@ SOURCEPATH=$(cd "$(dirname "$SCRIPTPATH/../.")"; pwd)
|
||||
PARENTDIR=$(cd "$(dirname "$SCRIPTPATH/../../../.")"; pwd)
|
||||
|
||||
# the sources of wxWidgets 3.0.3 must be extracted to the parent directory
|
||||
export WX_ROOT=$PARENTDIR/wxWidgets-3.0.3
|
||||
export WX_ROOT=$PARENTDIR/wxWidgets-3.0.4
|
||||
echo "Using wxWidgets sources in $WX_ROOT"
|
||||
|
||||
# this will be the temporary wxWidgets directory
|
||||
|
||||
@@ -410,5 +410,7 @@ typedef struct
|
||||
#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
|
||||
#define VC_DRIVER_CONFIG_ALLOW_NONSYS_TRIM 0x80
|
||||
#define VC_DRIVER_CONFIG_BLOCK_SYS_TRIM 0x100
|
||||
|
||||
#endif /* _WIN32 */
|
||||
|
||||
@@ -474,12 +474,12 @@ namespace VeraCrypt
|
||||
|
||||
#endif // SETUP
|
||||
|
||||
File::File (wstring path, bool readOnly, bool create, bool useNormalAttributes) : Elevated (false), FileOpen (false), ReadOnly (readOnly), LastError(0)
|
||||
File::File (wstring path, bool readOnly, bool create) : Elevated (false), FileOpen (false), ReadOnly (readOnly), LastError(0)
|
||||
{
|
||||
Handle = CreateFile (path.c_str(),
|
||||
readOnly ? GENERIC_READ : GENERIC_READ | GENERIC_WRITE,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, create ? CREATE_ALWAYS : OPEN_EXISTING,
|
||||
useNormalAttributes? FILE_ATTRIBUTE_NORMAL : (FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_WRITE_THROUGH), NULL);
|
||||
FILE_FLAG_RANDOM_ACCESS | FILE_FLAG_WRITE_THROUGH, NULL);
|
||||
|
||||
if (Handle != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
@@ -530,7 +530,45 @@ namespace VeraCrypt
|
||||
return bytesRead;
|
||||
}
|
||||
|
||||
throw_sys_if (!ReadFile (Handle, buffer, size, &bytesRead, NULL));
|
||||
if (!ReadFile (Handle, buffer, size, &bytesRead, NULL))
|
||||
{
|
||||
DWORD dwLastError = GetLastError();
|
||||
if ((dwLastError == ERROR_INVALID_PARAMETER) && IsDevice && (size % 4096))
|
||||
{
|
||||
DWORD remainingSize = (size % 4096);
|
||||
DWORD alignedSize = size - remainingSize;
|
||||
LARGE_INTEGER offset;
|
||||
|
||||
if (alignedSize)
|
||||
{
|
||||
if (ReadFile (Handle, buffer, alignedSize, &bytesRead, NULL))
|
||||
{
|
||||
if (bytesRead < alignedSize)
|
||||
return bytesRead;
|
||||
|
||||
buffer += alignedSize;
|
||||
size -= alignedSize;
|
||||
}
|
||||
else
|
||||
throw SystemException (SRC_POS);
|
||||
}
|
||||
|
||||
|
||||
if (ReadFile (Handle, ReadBuffer, 4096, &bytesRead, NULL))
|
||||
{
|
||||
DWORD effectiveSize = min (bytesRead, remainingSize);
|
||||
memcpy (buffer, ReadBuffer, effectiveSize);
|
||||
offset.QuadPart = - ((LONGLONG) bytesRead) + (LONGLONG) effectiveSize;
|
||||
SetFilePointerEx (Handle, offset, NULL, FILE_CURRENT);
|
||||
return alignedSize + effectiveSize;
|
||||
}
|
||||
else
|
||||
throw SystemException (SRC_POS);
|
||||
}
|
||||
else
|
||||
throw SystemException (SRC_POS);
|
||||
}
|
||||
|
||||
return bytesRead;
|
||||
}
|
||||
|
||||
@@ -600,7 +638,63 @@ namespace VeraCrypt
|
||||
}
|
||||
else
|
||||
{
|
||||
throw_sys_if (!WriteFile (Handle, buffer, size, &bytesWritten, NULL) || bytesWritten != size);
|
||||
if (!WriteFile (Handle, buffer, size, &bytesWritten, NULL))
|
||||
{
|
||||
DWORD dwLastError = GetLastError ();
|
||||
if ((ERROR_INVALID_PARAMETER == dwLastError) && IsDevice && !ReadOnly && (size % 4096))
|
||||
{
|
||||
bool bSuccess = false;
|
||||
DWORD remainingSize = (size % 4096);
|
||||
DWORD alignedSize = size - remainingSize;
|
||||
DWORD bytesRead = 0;
|
||||
bytesWritten = 0;
|
||||
if (alignedSize)
|
||||
{
|
||||
if (WriteFile (Handle, buffer, alignedSize, &bytesWritten, NULL))
|
||||
{
|
||||
throw_sys_if (bytesWritten != alignedSize);
|
||||
buffer += alignedSize;
|
||||
size -= alignedSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
bytesWritten = 0;
|
||||
dwLastError = GetLastError ();
|
||||
}
|
||||
}
|
||||
|
||||
if (!alignedSize || (alignedSize && bytesWritten))
|
||||
{
|
||||
LARGE_INTEGER offset;
|
||||
|
||||
throw_sys_if (!ReadFile (Handle, ReadBuffer, 4096, &bytesRead, NULL) || (bytesRead != 4096));
|
||||
offset.QuadPart = -4096;
|
||||
throw_sys_if (!SetFilePointerEx (Handle, offset, NULL, FILE_CURRENT));
|
||||
|
||||
memcpy (ReadBuffer, buffer, remainingSize);
|
||||
|
||||
if (WriteFile (Handle, ReadBuffer, 4096, &bytesWritten, NULL))
|
||||
{
|
||||
throw_sys_if (bytesWritten != 4096);
|
||||
bSuccess = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
dwLastError = GetLastError ();
|
||||
}
|
||||
}
|
||||
|
||||
if (!bSuccess)
|
||||
{
|
||||
SetLastError (dwLastError);
|
||||
throw SystemException (SRC_POS);
|
||||
}
|
||||
}
|
||||
else
|
||||
throw SystemException (SRC_POS);
|
||||
}
|
||||
else
|
||||
throw_sys_if (bytesWritten != size);
|
||||
}
|
||||
}
|
||||
catch (SystemException &e)
|
||||
@@ -1845,7 +1939,7 @@ namespace VeraCrypt
|
||||
NtQuerySystemInformationFn NtQuerySystemInformationPtr = NULL;
|
||||
|
||||
EfiBootConf::EfiBootConf() : passwordType (0),
|
||||
passwordMsg ("Enter Password: "),
|
||||
passwordMsg ("Password: "),
|
||||
passwordPicture ("login.bmp"),
|
||||
hashMsg ("(0) TEST ALL (1) SHA512 (2) WHIRLPOOL (3) SHA256 (4) RIPEMD160 (5) STREEBOG\nHash: "),
|
||||
hashAlgo (0),
|
||||
@@ -1962,7 +2056,7 @@ namespace VeraCrypt
|
||||
char buffer[1024];
|
||||
|
||||
passwordType = ReadConfigInteger (configContent, "PasswordType", 0);
|
||||
passwordMsg = ReadConfigString (configContent, "PasswordMsg", "Enter password: ", buffer, sizeof (buffer));
|
||||
passwordMsg = ReadConfigString (configContent, "PasswordMsg", "Password: ", buffer, sizeof (buffer));
|
||||
passwordPicture = ReadConfigString (configContent, "PasswordPicture", "\\EFI\\VeraCrypt\\login.bmp", buffer, sizeof (buffer));
|
||||
//hashMsg = ReadConfigString (configContent, "HashMsg", "(0) TEST ALL (1) SHA512 (2) WHIRLPOOL (3) SHA256 (4) RIPEMD160 (5) STREEBOG\nHash: ", buffer, sizeof (buffer));
|
||||
hashAlgo = ReadConfigInteger (configContent, "Hash", 0);
|
||||
@@ -2134,21 +2228,10 @@ namespace VeraCrypt
|
||||
memcpy (fileContent.data(), "\xEF\xBB\xBF", 3);
|
||||
memcpy (&fileContent[dwOffset], pbData, dwDataLen);
|
||||
|
||||
try
|
||||
{
|
||||
File f(pathESP + szFilePath, false, true);
|
||||
f.Write(fileContent.data(), dwSize);
|
||||
f.Close();
|
||||
}
|
||||
catch (SystemException &e)
|
||||
{
|
||||
if (e.ErrorCode != ERROR_INVALID_PARAMETER)
|
||||
throw;
|
||||
// try again with normal attributes
|
||||
File f(pathESP + szFilePath, false, true, true);
|
||||
f.Write(fileContent.data(), dwSize);
|
||||
f.Close();
|
||||
}
|
||||
File f(pathESP + szFilePath, false, true);
|
||||
f.Write(fileContent.data(), dwSize);
|
||||
f.Close();
|
||||
|
||||
}
|
||||
|
||||
EfiBoot::EfiBoot() {
|
||||
@@ -2436,22 +2519,11 @@ namespace VeraCrypt
|
||||
void EfiBoot::SaveFile(const wchar_t* name, byte* data, DWORD size) {
|
||||
wstring path = EfiBootPartPath;
|
||||
path += name;
|
||||
try
|
||||
{
|
||||
File f(path, false, true);
|
||||
f.Write(data, size);
|
||||
f.Close();
|
||||
}
|
||||
catch (SystemException &e)
|
||||
{
|
||||
if (e.ErrorCode != ERROR_INVALID_PARAMETER)
|
||||
throw;
|
||||
|
||||
// try again with normal attributes
|
||||
File f(path, false, true, true);
|
||||
f.Write(data, size);
|
||||
f.Close();
|
||||
}
|
||||
File f(path, false, true);
|
||||
f.Write(data, size);
|
||||
f.Close();
|
||||
|
||||
}
|
||||
|
||||
void EfiBoot::GetFileSize(const wchar_t* name, unsigned __int64& size) {
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace VeraCrypt
|
||||
{
|
||||
public:
|
||||
File () : Elevated (false), FileOpen (false), ReadOnly (false), FilePointerPosition(0), Handle(INVALID_HANDLE_VALUE), IsDevice(false), LastError(0) { }
|
||||
File (wstring path,bool readOnly = false, bool create = false, bool useNormalAttributes = false);
|
||||
File (wstring path,bool readOnly = false, bool create = false);
|
||||
virtual ~File () { Close(); }
|
||||
|
||||
void CheckOpened (const char* srcPos) { if (!FileOpen) { SetLastError (LastError); throw SystemException (srcPos);} }
|
||||
@@ -58,6 +58,7 @@ namespace VeraCrypt
|
||||
bool IsDevice;
|
||||
wstring Path;
|
||||
DWORD LastError;
|
||||
BYTE ReadBuffer[4096];
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
|
||||
#define VOLUME_ID_SIZE SHA256_DIGESTSIZE
|
||||
|
||||
#define ALIGN_VALUE(value, alignment) (((alignment) == 0)? (value) : (((value) + ((alignment) - 1)) & ~((alignment) - 1)))
|
||||
|
||||
typedef enum
|
||||
{
|
||||
// IMPORTANT: If you add a new item here, update IsOSVersionAtLeast().
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
#include "winres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
@@ -121,6 +121,7 @@ unsigned __int32 GetCrc32 (unsigned char *data, int length)
|
||||
return r ^ 0xFFFFFFFFUL;
|
||||
}
|
||||
|
||||
#if 0
|
||||
BOOL crc32_selftests ()
|
||||
{
|
||||
unsigned __int8 testData[32];
|
||||
@@ -131,5 +132,6 @@ BOOL crc32_selftests ()
|
||||
|
||||
return GetCrc32 (testData, sizeof (testData)) == 0x91267E8AUL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // TC_MINIMIZE_CODE_SIZE
|
||||
|
||||
@@ -87,6 +87,11 @@ static EncryptionAlgorithm EncryptionAlgorithms[] =
|
||||
{ { AES, SERPENT, 0 }, { XTS, 0 }, 1, 1 },
|
||||
{ { AES, TWOFISH, SERPENT, 0 }, { XTS, 0 }, 1, 1 },
|
||||
{ { SERPENT, TWOFISH, 0 }, { XTS, 0 }, 1, 1 },
|
||||
{ { KUZNYECHIK, CAMELLIA, 0 }, { XTS, 0 }, 0, 1 },
|
||||
{ { TWOFISH, KUZNYECHIK, 0 }, { XTS, 0 }, 0, 1 },
|
||||
{ { SERPENT, CAMELLIA, 0 }, { XTS, 0 }, 0, 1 },
|
||||
{ { AES, KUZNYECHIK, 0 }, { XTS, 0 }, 0, 1 },
|
||||
{ { CAMELLIA, SERPENT, KUZNYECHIK, 0 }, { XTS, 0 }, 0, 1 },
|
||||
{ { 0, 0 }, { 0, 0}, 0, 0 } // Must be all-zero
|
||||
|
||||
#else // TC_WINDOWS_BOOT
|
||||
@@ -254,6 +259,20 @@ void EncipherBlocks (int cipher, void *dataPtr, void *ks, size_t blockCount)
|
||||
else if (cipher == CAMELLIA) {
|
||||
camellia_encrypt_blocks(ks, data, data, (uint32) blockCount);
|
||||
}
|
||||
#endif
|
||||
#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE && !defined (_UEFI)
|
||||
else if (cipher == KUZNYECHIK
|
||||
&& HasSSE2()
|
||||
#if defined (TC_WINDOWS_DRIVER) && !defined (_WIN64)
|
||||
&& (blockCount >= 4) && NT_SUCCESS (KeSaveFloatingPointState (&floatingPointState))
|
||||
#endif
|
||||
)
|
||||
{
|
||||
kuznyechik_encrypt_blocks (data, data, blockCount, ks);
|
||||
#if defined (TC_WINDOWS_DRIVER) && !defined (_WIN64)
|
||||
KeRestoreFloatingPointState (&floatingPointState);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
else if (cipher == GOST89) {
|
||||
gost_encrypt(data, data, ks, (int)blockCount);
|
||||
@@ -357,6 +376,20 @@ void DecipherBlocks (int cipher, void *dataPtr, void *ks, size_t blockCount)
|
||||
else if (cipher == CAMELLIA) {
|
||||
camellia_decrypt_blocks(ks, data, data, (uint32) blockCount);
|
||||
}
|
||||
#endif
|
||||
#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE && !defined (_UEFI)
|
||||
else if (cipher == KUZNYECHIK
|
||||
&& HasSSE2()
|
||||
#if defined (TC_WINDOWS_DRIVER) && !defined (_WIN64)
|
||||
&& (blockCount >= 4) && NT_SUCCESS (KeSaveFloatingPointState (&floatingPointState))
|
||||
#endif
|
||||
)
|
||||
{
|
||||
kuznyechik_decrypt_blocks (data, data, blockCount, ks);
|
||||
#if defined (TC_WINDOWS_DRIVER) && !defined (_WIN64)
|
||||
KeRestoreFloatingPointState (&floatingPointState);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
else if (cipher == GOST89) {
|
||||
gost_decrypt(data, data, ks, (int)blockCount);
|
||||
@@ -393,17 +426,13 @@ const wchar_t *CipherGetName (int cipherId)
|
||||
Cipher* pCipher = CipherGet (cipherId);
|
||||
return pCipher? pCipher -> Name : L"";
|
||||
}
|
||||
#endif
|
||||
|
||||
int CipherGetBlockSize (int cipherId)
|
||||
{
|
||||
#ifdef TC_WINDOWS_BOOT
|
||||
return CipherGet (cipherId) -> BlockSize;
|
||||
#else
|
||||
Cipher* pCipher = CipherGet (cipherId);
|
||||
return pCipher? pCipher -> BlockSize : 0;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
int CipherGetKeySize (int cipherId)
|
||||
{
|
||||
@@ -433,6 +462,7 @@ BOOL CipherSupportsIntraDataUnitParallelization (int cipher)
|
||||
|| (cipher == GOST89)
|
||||
#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE && !defined (_UEFI)
|
||||
|| (cipher == SERPENT && HasSSE2())
|
||||
|| (cipher == KUZNYECHIK && HasSSE2())
|
||||
#endif
|
||||
#if CRYPTOPP_BOOL_X64
|
||||
|| (cipher == TWOFISH)
|
||||
@@ -451,6 +481,7 @@ int EAGetFirst ()
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifndef TC_WINDOWS_BOOT
|
||||
// Returns number of EAs
|
||||
int EAGetCount (void)
|
||||
{
|
||||
@@ -462,6 +493,7 @@ int EAGetCount (void)
|
||||
}
|
||||
return count;
|
||||
}
|
||||
#endif
|
||||
|
||||
int EAGetNext (int previousEA)
|
||||
{
|
||||
@@ -593,6 +625,8 @@ int EAGetKeySize (int ea)
|
||||
}
|
||||
|
||||
|
||||
#ifndef TC_WINDOWS_BOOT
|
||||
|
||||
// Returns the first mode of operation of EA
|
||||
int EAGetFirstMode (int ea)
|
||||
{
|
||||
@@ -612,9 +646,6 @@ int EAGetNextMode (int ea, int previousModeId)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifndef TC_WINDOWS_BOOT
|
||||
|
||||
// Returns the name of the mode of operation of the whole EA
|
||||
wchar_t *EAGetModeName (int ea, int mode, BOOL capitalLetters)
|
||||
{
|
||||
@@ -645,38 +676,7 @@ int EAGetKeyScheduleSize (int ea)
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
// Returns the largest key size needed by an EA for the specified mode of operation
|
||||
int EAGetLargestKeyForMode (int mode)
|
||||
{
|
||||
int ea, key = 0;
|
||||
|
||||
for (ea = EAGetFirst (); ea != 0; ea = EAGetNext (ea))
|
||||
{
|
||||
if (!EAIsModeSupported (ea, mode))
|
||||
continue;
|
||||
|
||||
if (EAGetKeySize (ea) >= key)
|
||||
key = EAGetKeySize (ea);
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
|
||||
// Returns the largest key needed by any EA for any mode
|
||||
int EAGetLargestKey ()
|
||||
{
|
||||
int ea, key = 0;
|
||||
|
||||
for (ea = EAGetFirst (); ea != 0; ea = EAGetNext (ea))
|
||||
{
|
||||
if (EAGetKeySize (ea) >= key)
|
||||
key = EAGetKeySize (ea);
|
||||
}
|
||||
|
||||
return key;
|
||||
}
|
||||
|
||||
#ifndef TC_WINDOWS_BOOT
|
||||
|
||||
// Returns number of ciphers in EA
|
||||
int EAGetCipherCount (int ea)
|
||||
@@ -687,6 +687,7 @@ int EAGetCipherCount (int ea)
|
||||
return i - 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int EAGetFirstCipher (int ea)
|
||||
{
|
||||
@@ -732,18 +733,16 @@ int EAGetPreviousCipher (int ea, int previousCipherId)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifndef TC_WINDOWS_BOOT
|
||||
int EAIsFormatEnabled (int ea)
|
||||
{
|
||||
return EncryptionAlgorithms[ea].FormatEnabled;
|
||||
}
|
||||
|
||||
#ifndef TC_WINDOWS_BOOT
|
||||
int EAIsMbrSysEncEnabled (int ea)
|
||||
{
|
||||
return EncryptionAlgorithms[ea].MbrSysEncEnabled;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Returns TRUE if the mode of operation is supported for the encryption algorithm
|
||||
BOOL EAIsModeSupported (int ea, int testedMode)
|
||||
@@ -758,7 +757,6 @@ BOOL EAIsModeSupported (int ea, int testedMode)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#ifndef TC_WINDOWS_BOOT
|
||||
Hash *HashGet (int id)
|
||||
{
|
||||
int i;
|
||||
@@ -810,6 +808,22 @@ BOOL HashForSystemEncryption (int hashId)
|
||||
|
||||
}
|
||||
|
||||
// Returns the largest key size needed by an EA for the specified mode of operation
|
||||
int EAGetLargestKeyForMode (int mode)
|
||||
{
|
||||
int ea, key = 0;
|
||||
|
||||
for (ea = EAGetFirst (); ea != 0; ea = EAGetNext (ea))
|
||||
{
|
||||
if (!EAIsModeSupported (ea, mode))
|
||||
continue;
|
||||
|
||||
if (EAGetKeySize (ea) >= key)
|
||||
key = EAGetKeySize (ea);
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
// Returns the maximum number of bytes necessary to be generated by the PBKDF2 (PKCS #5)
|
||||
int GetMaxPkcs5OutSize (void)
|
||||
{
|
||||
|
||||
@@ -173,7 +173,7 @@ typedef struct
|
||||
#ifdef TC_WINDOWS_BOOT
|
||||
#define MAX_EXPANDED_KEY VC_MAX((AES_KS + SERPENT_KS + TWOFISH_KS), CAMELLIA_KS)
|
||||
#else
|
||||
#define MAX_EXPANDED_KEY VC_MAX(VC_MAX(VC_MAX((AES_KS + SERPENT_KS + TWOFISH_KS), GOST_KS), CAMELLIA_KS), KUZNYECHIK_KS)
|
||||
#define MAX_EXPANDED_KEY VC_MAX(VC_MAX(VC_MAX(VC_MAX((AES_KS + SERPENT_KS + TWOFISH_KS), GOST_KS), CAMELLIA_KS + KUZNYECHIK_KS + SERPENT_KS), KUZNYECHIK_KS + TWOFISH_KS), AES_KS + KUZNYECHIK_KS)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -354,8 +354,8 @@ int EAGetFirstCipher (int ea);
|
||||
int EAGetLastCipher (int ea);
|
||||
int EAGetNextCipher (int ea, int previousCipherId);
|
||||
int EAGetPreviousCipher (int ea, int previousCipherId);
|
||||
int EAIsFormatEnabled (int ea);
|
||||
#ifndef TC_WINDOWS_BOOT
|
||||
int EAIsFormatEnabled (int ea);
|
||||
int EAIsMbrSysEncEnabled (int ea);
|
||||
#endif
|
||||
BOOL EAIsModeSupported (int ea, int testedMode);
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <time.h>
|
||||
#include <tchar.h>
|
||||
#include <Richedit.h>
|
||||
#ifdef TCMOUNT
|
||||
#if defined (TCMOUNT) || defined (VOLFORMAT)
|
||||
#include <Shlwapi.h>
|
||||
#include <process.h>
|
||||
#include <Tlhelp32.h>
|
||||
@@ -1267,18 +1267,18 @@ BOOL CALLBACK AboutDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
|
||||
L"Based on TrueCrypt 7.1a, freely available at http://www.truecrypt.org/ .\r\n\r\n"
|
||||
|
||||
L"Portions of this software:\r\n"
|
||||
L"Copyright \xA9 2013-2017 IDRIX. All rights reserved.\r\n"
|
||||
L"Copyright \xA9 2013-2018 IDRIX. All rights reserved.\r\n"
|
||||
L"Copyright \xA9 2003-2012 TrueCrypt Developers Association. All Rights Reserved.\r\n"
|
||||
L"Copyright \xA9 1998-2000 Paul Le Roux. All Rights Reserved.\r\n"
|
||||
L"Copyright \xA9 1998-2008 Brian Gladman. All Rights Reserved.\r\n"
|
||||
L"Copyright \xA9 1995-2017 Jean-loup Gailly and Mark Adler.\r\n"
|
||||
L"Copyright \xA9 2016 Disk Cryptography Services for EFI (DCS), Alex Kolotnikov.\r\n"
|
||||
L"Copyright \xA9 Dieter Baron and Thomas Klausner.\r\n"
|
||||
L"Copyright \xA9 1999-2017 Dieter Baron and Thomas Klausner.\r\n"
|
||||
L"Copyright \xA9 2013, Alexey Degtyarev. All rights reserved.\r\n"
|
||||
L"Copyright \xA9 1999-2013,2014,2015,2016 Jack Lloyd. All rights reserved.\r\n\r\n"
|
||||
L"Copyright \xA9 1999-2016 Jack Lloyd. All rights reserved.\r\n\r\n"
|
||||
|
||||
L"This software as a whole:\r\n"
|
||||
L"Copyright \xA9 2013-2017 IDRIX. All rights reserved.\r\n\r\n"
|
||||
L"Copyright \xA9 2013-2018 IDRIX. All rights reserved.\r\n\r\n"
|
||||
|
||||
L"An IDRIX Release");
|
||||
|
||||
@@ -1790,13 +1790,13 @@ static int g_waitCursorCounter = 0;
|
||||
void
|
||||
WaitCursor ()
|
||||
{
|
||||
static HCURSOR hcWait;
|
||||
static HCURSOR hcWait = NULL;
|
||||
if (hcWait == NULL)
|
||||
hcWait = LoadCursor (NULL, IDC_WAIT);
|
||||
|
||||
if ((g_waitCursorCounter == 0) || (hCursor != hcWait))
|
||||
{
|
||||
SetCursor (hcWait);
|
||||
if (!Silent) SetCursor (hcWait);
|
||||
hCursor = hcWait;
|
||||
}
|
||||
g_waitCursorCounter++;
|
||||
@@ -1805,14 +1805,14 @@ WaitCursor ()
|
||||
void
|
||||
NormalCursor ()
|
||||
{
|
||||
static HCURSOR hcArrow;
|
||||
static HCURSOR hcArrow = NULL;
|
||||
if (hcArrow == NULL)
|
||||
hcArrow = LoadCursor (NULL, IDC_ARROW);
|
||||
if (g_waitCursorCounter > 0)
|
||||
g_waitCursorCounter--;
|
||||
if (g_waitCursorCounter == 0)
|
||||
{
|
||||
SetCursor (hcArrow);
|
||||
if (!Silent) SetCursor (hcArrow);
|
||||
hCursor = NULL;
|
||||
}
|
||||
}
|
||||
@@ -1820,12 +1820,12 @@ NormalCursor ()
|
||||
void
|
||||
ArrowWaitCursor ()
|
||||
{
|
||||
static HCURSOR hcArrowWait;
|
||||
static HCURSOR hcArrowWait = NULL;
|
||||
if (hcArrowWait == NULL)
|
||||
hcArrowWait = LoadCursor (NULL, IDC_APPSTARTING);
|
||||
if ((g_waitCursorCounter == 0) || (hCursor != hcArrowWait))
|
||||
{
|
||||
SetCursor (hcArrowWait);
|
||||
if (!Silent) SetCursor (hcArrowWait);
|
||||
hCursor = hcArrowWait;
|
||||
}
|
||||
g_waitCursorCounter++;
|
||||
@@ -1833,7 +1833,7 @@ ArrowWaitCursor ()
|
||||
|
||||
void HandCursor ()
|
||||
{
|
||||
static HCURSOR hcHand;
|
||||
static HCURSOR hcHand = NULL;
|
||||
if (hcHand == NULL)
|
||||
hcHand = LoadCursor (NULL, IDC_HAND);
|
||||
SetCursor (hcHand);
|
||||
@@ -2534,6 +2534,7 @@ void SavePostInstallTasksSettings (int command)
|
||||
case TC_POST_INSTALL_CFG_REMOVE_ALL:
|
||||
_wremove (GetConfigPath (TC_APPD_FILENAME_POST_INSTALL_TASK_TUTORIAL));
|
||||
_wremove (GetConfigPath (TC_APPD_FILENAME_POST_INSTALL_TASK_RELEASE_NOTES));
|
||||
_wremove (GetConfigPath (TC_APPD_FILENAME_POST_INSTALL_TASK_RESCUE_DISK));
|
||||
break;
|
||||
|
||||
case TC_POST_INSTALL_CFG_TUTORIAL:
|
||||
@@ -2544,6 +2545,10 @@ void SavePostInstallTasksSettings (int command)
|
||||
f = _wfopen (GetConfigPath (TC_APPD_FILENAME_POST_INSTALL_TASK_RELEASE_NOTES), L"w");
|
||||
break;
|
||||
|
||||
case TC_POST_INSTALL_CFG_RESCUE_DISK:
|
||||
f = _wfopen (GetConfigPath (TC_APPD_FILENAME_POST_INSTALL_TASK_RESCUE_DISK), L"w");
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@@ -2584,6 +2589,14 @@ void DoPostInstallTasks (HWND hwndDlg)
|
||||
bDone = TRUE;
|
||||
}
|
||||
|
||||
if (FileExists (GetConfigPath (TC_APPD_FILENAME_POST_INSTALL_TASK_RESCUE_DISK)))
|
||||
{
|
||||
if (AskYesNo ("AFTER_UPGRADE_RESCUE_DISK", hwndDlg) == IDYES)
|
||||
PostMessage (hwndDlg, VC_APPMSG_CREATE_RESCUE_DISK, 0, 0);
|
||||
|
||||
bDone = TRUE;
|
||||
}
|
||||
|
||||
if (bDone)
|
||||
SavePostInstallTasksSettings (TC_POST_INSTALL_CFG_REMOVE_ALL);
|
||||
}
|
||||
@@ -7564,33 +7577,42 @@ BOOL CALLBACK WaitDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
|
||||
|
||||
void BringToForeground(HWND hWnd)
|
||||
// Based on source: https://www.codeproject.com/Tips/76427/How-to-bring-window-to-top-with-SetForegroundWindo?msg=5285754#xx5285754xx
|
||||
void BringToForeground (HWND hWnd)
|
||||
{
|
||||
if(!::IsWindow(hWnd)) return;
|
||||
|
||||
DWORD lockTimeOut = 0;
|
||||
HWND hCurrWnd = ::GetForegroundWindow();
|
||||
DWORD dwThisTID = ::GetCurrentThreadId(),
|
||||
dwCurrTID = ::GetWindowThreadProcessId(hCurrWnd,0);
|
||||
|
||||
// This structure will be used to create the keyboard
|
||||
// input event.
|
||||
INPUT ip;
|
||||
|
||||
if (hCurrWnd != hWnd)
|
||||
{
|
||||
if(dwThisTID != dwCurrTID)
|
||||
{
|
||||
::AttachThreadInput(dwThisTID, dwCurrTID, TRUE);
|
||||
|
||||
::SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT,0,&lockTimeOut,0);
|
||||
::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,0,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
|
||||
|
||||
::AllowSetForegroundWindow(ASFW_ANY);
|
||||
// Set up a generic keyboard event.
|
||||
ip.type = INPUT_KEYBOARD;
|
||||
ip.ki.wScan = 0; // hardware scan code for key
|
||||
ip.ki.time = 0;
|
||||
ip.ki.dwExtraInfo = 0;
|
||||
|
||||
// Press the "A" key
|
||||
ip.ki.wVk = VK_MENU; // virtual-key code for the "a" key
|
||||
ip.ki.dwFlags = 0; // 0 for key press
|
||||
SendInput(1, &ip, sizeof(INPUT));
|
||||
|
||||
::Sleep(250); //Sometimes SetForegroundWindow will fail and the window will flash instead of it being show. Sleeping for a bit seems to help.
|
||||
}
|
||||
|
||||
|
||||
::SetForegroundWindow(hWnd);
|
||||
|
||||
|
||||
if(dwThisTID != dwCurrTID)
|
||||
{
|
||||
::SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,(PVOID)lockTimeOut,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
|
||||
::AttachThreadInput(dwThisTID, dwCurrTID, FALSE);
|
||||
// Release the "A" key
|
||||
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
|
||||
SendInput(1, &ip, sizeof(INPUT));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7603,9 +7625,14 @@ void BringToForeground(HWND hWnd)
|
||||
#endif
|
||||
}
|
||||
|
||||
static LRESULT CALLBACK ShowWaitDialogParentWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
return DefWindowProcW (hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
void ShowWaitDialog(HWND hwnd, BOOL bUseHwndAsParent, WaitThreadProc callback, void* pArg)
|
||||
{
|
||||
HWND hParent = (hwnd && bUseHwndAsParent)? hwnd : GetDesktopWindow();
|
||||
BOOL bEffectiveHideWaitingDialog = bCmdHideWaitingDialogValid? bCmdHideWaitingDialog : bHideWaitingDialog;
|
||||
WaitThreadParam threadParam;
|
||||
threadParam.callback = callback;
|
||||
@@ -7619,9 +7646,12 @@ void ShowWaitDialog(HWND hwnd, BOOL bUseHwndAsParent, WaitThreadProc callback, v
|
||||
}
|
||||
else
|
||||
{
|
||||
const wchar_t *className = L"VeraCryptShowWaitDialogParent";
|
||||
BOOL bIsForeground = FALSE;
|
||||
HWND creatorWnd = hwnd? hwnd : MainDlg;
|
||||
WaitDialogDisplaying = TRUE;
|
||||
HWND hParent = NULL;
|
||||
|
||||
if (creatorWnd)
|
||||
{
|
||||
if (GetForegroundWindow () == creatorWnd)
|
||||
@@ -7629,6 +7659,28 @@ void ShowWaitDialog(HWND hwnd, BOOL bUseHwndAsParent, WaitThreadProc callback, v
|
||||
EnableWindow (creatorWnd, FALSE);
|
||||
}
|
||||
|
||||
if (hwnd && bUseHwndAsParent)
|
||||
hParent = hwnd;
|
||||
else
|
||||
{
|
||||
/* create invisible window and use it as parent */
|
||||
WNDCLASSEXW winClass;
|
||||
|
||||
memset (&winClass, 0, sizeof (winClass));
|
||||
winClass.cbSize = sizeof (WNDCLASSEX);
|
||||
winClass.lpfnWndProc = (WNDPROC) ShowWaitDialogParentWndProc;
|
||||
winClass.hInstance = hInst;
|
||||
winClass.lpszClassName = className;
|
||||
RegisterClassExW (&winClass);
|
||||
|
||||
hParent = CreateWindowExW (WS_EX_TOOLWINDOW | WS_EX_LAYERED, className, L"VeraCrypt ShowWaitDialog Parent", 0, 0, 0, 1, 1, NULL, NULL, hInst, NULL);
|
||||
if (hParent)
|
||||
{
|
||||
SetLayeredWindowAttributes (hParent, 0, 1, LWA_ALPHA);
|
||||
ShowWindow (hParent, SW_SHOWNORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
finally_do_arg2 (HWND, creatorWnd, BOOL, bIsForeground, { if (finally_arg) { EnableWindow(finally_arg, TRUE); if (finally_arg2) BringToForeground (finally_arg);}});
|
||||
|
||||
DialogBoxParamW (hInst,
|
||||
@@ -7636,6 +7688,13 @@ void ShowWaitDialog(HWND hwnd, BOOL bUseHwndAsParent, WaitThreadProc callback, v
|
||||
(DLGPROC) WaitDlgProc, (LPARAM) &threadParam);
|
||||
|
||||
WaitDialogDisplaying = FALSE;
|
||||
|
||||
if (!(hwnd && bUseHwndAsParent))
|
||||
{
|
||||
if (hParent)
|
||||
DestroyWindow (hParent);
|
||||
UnregisterClassW (className, hInst);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7646,7 +7705,7 @@ static BOOL PerformMountIoctl (MOUNT_STRUCT* pmount, LPDWORD pdwResult, BOOL use
|
||||
{
|
||||
if (useVolumeID)
|
||||
{
|
||||
wstring devicePath = FindDeviceByVolumeID (volumeID);
|
||||
wstring devicePath = FindDeviceByVolumeID (volumeID, FALSE);
|
||||
if (devicePath == L"")
|
||||
{
|
||||
if (pdwResult)
|
||||
@@ -8492,11 +8551,14 @@ BOOL GetPhysicalDriveGeometry (int driveNumber, PDISK_GEOMETRY_EX diskGeometry)
|
||||
DWORD bytesRead = 0;
|
||||
|
||||
ZeroMemory (diskGeometry, sizeof (DISK_GEOMETRY_EX));
|
||||
BYTE dgBuffer[256];
|
||||
|
||||
if ( DeviceIoControl (hDev, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, diskGeometry, sizeof (DISK_GEOMETRY_EX), &bytesRead, NULL)
|
||||
&& (bytesRead == sizeof (DISK_GEOMETRY_EX))
|
||||
&& diskGeometry->Geometry.BytesPerSector)
|
||||
if ( DeviceIoControl (hDev, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, dgBuffer, sizeof (dgBuffer), &bytesRead, NULL)
|
||||
&& (bytesRead >= (sizeof (DISK_GEOMETRY) + sizeof (LARGE_INTEGER)))
|
||||
&& ((PDISK_GEOMETRY_EX) dgBuffer)->Geometry.BytesPerSector)
|
||||
{
|
||||
memcpy (&diskGeometry->Geometry, &((PDISK_GEOMETRY_EX) dgBuffer)->Geometry, sizeof (DISK_GEOMETRY));
|
||||
diskGeometry->DiskSize.QuadPart = ((PDISK_GEOMETRY_EX) dgBuffer)->DiskSize.QuadPart;
|
||||
bResult = TRUE;
|
||||
}
|
||||
|
||||
@@ -10897,15 +10959,15 @@ int OpenVolume (OpenVolumeContext *context, const wchar_t *volumePath, Password
|
||||
}
|
||||
else
|
||||
{
|
||||
DISK_GEOMETRY_EX driveInfo;
|
||||
BYTE dgBuffer[256];
|
||||
|
||||
if (!DeviceIoControl (context->HostFileHandle, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, &driveInfo, sizeof (driveInfo), &dwResult, NULL))
|
||||
if (!DeviceIoControl (context->HostFileHandle, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, dgBuffer, sizeof (dgBuffer), &dwResult, NULL))
|
||||
{
|
||||
status = ERR_OS_ERROR;
|
||||
goto error;
|
||||
}
|
||||
|
||||
context->HostSize = driveInfo.DiskSize.QuadPart;
|
||||
context->HostSize = ((PDISK_GEOMETRY_EX) dgBuffer)->DiskSize.QuadPart;
|
||||
}
|
||||
|
||||
if (context->HostSize == 0)
|
||||
@@ -11093,10 +11155,10 @@ BOOL IsPagingFileActive (BOOL checkNonWindowsPartitionsOnly)
|
||||
if (handle == INVALID_HANDLE_VALUE)
|
||||
continue;
|
||||
|
||||
DISK_GEOMETRY_EX driveInfo;
|
||||
BYTE dgBuffer[256];
|
||||
DWORD dwResult;
|
||||
|
||||
if (!DeviceIoControl (handle, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, &driveInfo, sizeof (driveInfo), &dwResult, NULL))
|
||||
if (!DeviceIoControl (handle, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, dgBuffer, sizeof (dgBuffer), &dwResult, NULL))
|
||||
{
|
||||
CloseHandle (handle);
|
||||
continue;
|
||||
@@ -11652,7 +11714,7 @@ BOOL InitSecurityTokenLibrary (HWND hwndDlg)
|
||||
HWND hParent = IsWindow (m_hwnd)? m_hwnd : GetActiveWindow();
|
||||
if (!hParent)
|
||||
hParent = GetForegroundWindow ();
|
||||
if (DialogBoxParamW (hInst, MAKEINTRESOURCEW (IDD_TOKEN_PASSWORD), hParent, (DLGPROC) SecurityTokenPasswordDlgProc, (LPARAM) &str) == IDCANCEL)
|
||||
if (SecureDesktopDialogBoxParam (hInst, MAKEINTRESOURCEW (IDD_TOKEN_PASSWORD), hParent, (DLGPROC) SecurityTokenPasswordDlgProc, (LPARAM) &str) == IDCANCEL)
|
||||
throw UserAbort (SRC_POS);
|
||||
}
|
||||
if (hCursor != NULL)
|
||||
@@ -12155,10 +12217,8 @@ void UpdateMountableHostDeviceList ()
|
||||
}
|
||||
}
|
||||
|
||||
wstring FindDeviceByVolumeID (const BYTE volumeID [VOLUME_ID_SIZE])
|
||||
wstring FindDeviceByVolumeID (const BYTE volumeID [VOLUME_ID_SIZE], BOOL bFromService)
|
||||
{
|
||||
static std::vector<HostDevice> volumeIdCandidates;
|
||||
|
||||
/* if it is already mounted, get the real path name used for mounting */
|
||||
MOUNT_LIST_STRUCT mlist;
|
||||
DWORD dwResult;
|
||||
@@ -12189,77 +12249,108 @@ wstring FindDeviceByVolumeID (const BYTE volumeID [VOLUME_ID_SIZE])
|
||||
|
||||
/* not mounted. Look for it in the local drives*/
|
||||
|
||||
EnterCriticalSection (&csMountableDevices);
|
||||
std::vector<HostDevice> newDevices = mountableDevices;
|
||||
LeaveCriticalSection (&csMountableDevices);
|
||||
|
||||
EnterCriticalSection (&csVolumeIdCandidates);
|
||||
finally_do ({ LeaveCriticalSection (&csVolumeIdCandidates); });
|
||||
|
||||
/* remove any devices that don't exist anymore */
|
||||
for (std::vector<HostDevice>::iterator It = volumeIdCandidates.begin();
|
||||
It != volumeIdCandidates.end();)
|
||||
if (bFromService)
|
||||
{
|
||||
bool bFound = false;
|
||||
for (int devNumber = 0; devNumber < MAX_HOST_DRIVE_NUMBER; devNumber++)
|
||||
{
|
||||
for (int partNumber = 0; partNumber < MAX_HOST_PARTITION_NUMBER; partNumber++)
|
||||
{
|
||||
wstringstream strm;
|
||||
strm << L"\\Device\\Harddisk" << devNumber << L"\\Partition" << partNumber;
|
||||
wstring devPathStr (strm.str());
|
||||
const wchar_t *devPath = devPathStr.c_str();
|
||||
|
||||
OPEN_TEST_STRUCT openTest = {0};
|
||||
if (OpenDevice (devPath, &openTest, TRUE, TRUE)
|
||||
&& (openTest.VolumeIDComputed[TC_VOLUME_TYPE_NORMAL] && openTest.VolumeIDComputed[TC_VOLUME_TYPE_HIDDEN])
|
||||
)
|
||||
{
|
||||
if ( (0 == memcmp (volumeID, openTest.volumeIDs[TC_VOLUME_TYPE_NORMAL], VOLUME_ID_SIZE))
|
||||
|| (0 == memcmp (volumeID, openTest.volumeIDs[TC_VOLUME_TYPE_HIDDEN], VOLUME_ID_SIZE))
|
||||
)
|
||||
{
|
||||
return devPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
static std::vector<HostDevice> volumeIdCandidates;
|
||||
|
||||
EnterCriticalSection (&csMountableDevices);
|
||||
std::vector<HostDevice> newDevices = mountableDevices;
|
||||
LeaveCriticalSection (&csMountableDevices);
|
||||
|
||||
EnterCriticalSection (&csVolumeIdCandidates);
|
||||
finally_do ({ LeaveCriticalSection (&csVolumeIdCandidates); });
|
||||
|
||||
/* remove any devices that don't exist anymore */
|
||||
for (std::vector<HostDevice>::iterator It = volumeIdCandidates.begin();
|
||||
It != volumeIdCandidates.end();)
|
||||
{
|
||||
bool bFound = false;
|
||||
for (std::vector<HostDevice>::iterator newIt = newDevices.begin();
|
||||
newIt != newDevices.end(); newIt++)
|
||||
{
|
||||
if (It->Path == newIt->Path)
|
||||
{
|
||||
bFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (bFound)
|
||||
It++;
|
||||
else
|
||||
It = volumeIdCandidates.erase (It);
|
||||
}
|
||||
|
||||
/* Add newly inserted devices and compute their VolumeID */
|
||||
for (std::vector<HostDevice>::iterator newIt = newDevices.begin();
|
||||
newIt != newDevices.end(); newIt++)
|
||||
{
|
||||
if (It->Path == newIt->Path)
|
||||
bool bFound = false;
|
||||
|
||||
for (std::vector<HostDevice>::iterator It = volumeIdCandidates.begin();
|
||||
It != volumeIdCandidates.end(); It++)
|
||||
{
|
||||
bFound = true;
|
||||
break;
|
||||
if (It->Path == newIt->Path)
|
||||
{
|
||||
bFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!bFound)
|
||||
{
|
||||
/* new device/partition. Compute its Volume IDs */
|
||||
OPEN_TEST_STRUCT openTest = {0};
|
||||
if (OpenDevice (newIt->Path.c_str(), &openTest, TRUE, TRUE)
|
||||
&& (openTest.VolumeIDComputed[TC_VOLUME_TYPE_NORMAL] && openTest.VolumeIDComputed[TC_VOLUME_TYPE_HIDDEN])
|
||||
)
|
||||
{
|
||||
memcpy (newIt->VolumeIDs, openTest.volumeIDs, sizeof (newIt->VolumeIDs));
|
||||
newIt->HasVolumeIDs = true;
|
||||
}
|
||||
else
|
||||
newIt->HasVolumeIDs = false;
|
||||
volumeIdCandidates.push_back (*newIt);
|
||||
}
|
||||
}
|
||||
|
||||
if (bFound)
|
||||
It++;
|
||||
else
|
||||
It = volumeIdCandidates.erase (It);
|
||||
}
|
||||
|
||||
/* Add newly inserted devices and compute their VolumeID */
|
||||
for (std::vector<HostDevice>::iterator newIt = newDevices.begin();
|
||||
newIt != newDevices.end(); newIt++)
|
||||
{
|
||||
bool bFound = false;
|
||||
|
||||
for (std::vector<HostDevice>::iterator It = volumeIdCandidates.begin();
|
||||
It != volumeIdCandidates.end(); It++)
|
||||
{
|
||||
if (It->Path == newIt->Path)
|
||||
{
|
||||
bFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!bFound)
|
||||
{
|
||||
/* new device/partition. Compute its Volume IDs */
|
||||
OPEN_TEST_STRUCT openTest = {0};
|
||||
if (OpenDevice (newIt->Path.c_str(), &openTest, TRUE, TRUE)
|
||||
&& (openTest.VolumeIDComputed[TC_VOLUME_TYPE_NORMAL] && openTest.VolumeIDComputed[TC_VOLUME_TYPE_HIDDEN])
|
||||
if ( It->HasVolumeIDs &&
|
||||
( (0 == memcmp (volumeID, It->VolumeIDs[TC_VOLUME_TYPE_NORMAL], VOLUME_ID_SIZE))
|
||||
|| (0 == memcmp (volumeID, It->VolumeIDs[TC_VOLUME_TYPE_HIDDEN], VOLUME_ID_SIZE))
|
||||
)
|
||||
)
|
||||
{
|
||||
memcpy (newIt->VolumeIDs, openTest.volumeIDs, sizeof (newIt->VolumeIDs));
|
||||
newIt->HasVolumeIDs = true;
|
||||
return It->Path;
|
||||
}
|
||||
else
|
||||
newIt->HasVolumeIDs = false;
|
||||
volumeIdCandidates.push_back (*newIt);
|
||||
}
|
||||
}
|
||||
|
||||
for (std::vector<HostDevice>::iterator It = volumeIdCandidates.begin();
|
||||
It != volumeIdCandidates.end(); It++)
|
||||
{
|
||||
if ( It->HasVolumeIDs &&
|
||||
( (0 == memcmp (volumeID, It->VolumeIDs[TC_VOLUME_TYPE_NORMAL], VOLUME_ID_SIZE))
|
||||
|| (0 == memcmp (volumeID, It->VolumeIDs[TC_VOLUME_TYPE_HIDDEN], VOLUME_ID_SIZE))
|
||||
)
|
||||
)
|
||||
{
|
||||
return It->Path;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12889,7 +12980,7 @@ BOOL TranslateVolumeID (HWND hwndDlg, wchar_t* pathValue, size_t cchPathValue)
|
||||
&& (arr.size() == VOLUME_ID_SIZE)
|
||||
)
|
||||
{
|
||||
std::wstring devicePath = FindDeviceByVolumeID (&arr[0]);
|
||||
std::wstring devicePath = FindDeviceByVolumeID (&arr[0], FALSE);
|
||||
if (devicePath.length() > 0)
|
||||
StringCchCopyW (pathValue, cchPathValue, devicePath.c_str());
|
||||
else
|
||||
@@ -13011,7 +13102,7 @@ BOOL DeleteDirectory (const wchar_t* szDirName)
|
||||
return bStatus;
|
||||
}
|
||||
|
||||
#ifdef TCMOUNT
|
||||
#if defined (TCMOUNT) || defined (VOLFORMAT)
|
||||
/*********************************************************************/
|
||||
|
||||
static BOOL GenerateRandomString (HWND hwndDlg, LPTSTR szName, DWORD maxCharsCount)
|
||||
@@ -13049,6 +13140,7 @@ static BOOL GenerateRandomString (HWND hwndDlg, LPTSTR szName, DWORD maxCharsCou
|
||||
typedef struct
|
||||
{
|
||||
HDESK hDesk;
|
||||
LPCWSTR szDesktopName;
|
||||
HINSTANCE hInstance;
|
||||
LPCWSTR lpTemplateName;
|
||||
DLGPROC lpDialogFunc;
|
||||
@@ -13056,16 +13148,113 @@ typedef struct
|
||||
INT_PTR retValue;
|
||||
} SecureDesktopThreadParam;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
LPCWSTR szVCDesktopName;
|
||||
HDESK hVcDesktop;
|
||||
volatile BOOL* pbStopMonitoring;
|
||||
} SecureDesktopMonitoringThreadParam;
|
||||
|
||||
#define SECUREDESKTOP_MONOTIR_PERIOD 500
|
||||
|
||||
// This thread checks if VeraCrypt secure desktop is the one that has user input
|
||||
// and if it is not then it will call SwitchDesktop to make it the input desktop
|
||||
static unsigned int __stdcall SecureDesktopMonitoringThread( LPVOID lpThreadParameter )
|
||||
{
|
||||
SecureDesktopMonitoringThreadParam* pMonitorParam = (SecureDesktopMonitoringThreadParam*) lpThreadParameter;
|
||||
if (pMonitorParam)
|
||||
{
|
||||
volatile BOOL* pbStopMonitoring = pMonitorParam->pbStopMonitoring;
|
||||
LPCWSTR szVCDesktopName = pMonitorParam->szVCDesktopName;
|
||||
HDESK hVcDesktop = pMonitorParam->hVcDesktop;
|
||||
|
||||
while (!*pbStopMonitoring)
|
||||
{
|
||||
// check that our secure desktop is still the input desktop
|
||||
// otherwise, switch to it
|
||||
BOOL bPerformSwitch = FALSE;
|
||||
HDESK currentDesk = OpenInputDesktop (0, FALSE, GENERIC_READ);
|
||||
if (currentDesk)
|
||||
{
|
||||
LPWSTR szName = NULL;
|
||||
DWORD dwLen = 0;
|
||||
if (!GetUserObjectInformation (currentDesk, UOI_NAME, NULL, 0, &dwLen))
|
||||
{
|
||||
szName = (LPWSTR) malloc (dwLen);
|
||||
if (szName)
|
||||
{
|
||||
if (GetUserObjectInformation (currentDesk, UOI_NAME, szName, dwLen, &dwLen))
|
||||
{
|
||||
if (0 != _wcsicmp (szName, szVCDesktopName))
|
||||
bPerformSwitch = TRUE;
|
||||
}
|
||||
free (szName);
|
||||
}
|
||||
}
|
||||
CloseDesktop (currentDesk);
|
||||
}
|
||||
|
||||
if (bPerformSwitch)
|
||||
SwitchDesktop (hVcDesktop);
|
||||
|
||||
Sleep (SECUREDESKTOP_MONOTIR_PERIOD);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DWORD WINAPI SecureDesktopThread(LPVOID lpThreadParameter)
|
||||
{
|
||||
volatile BOOL bStopMonitoring = FALSE;
|
||||
HANDLE hMonitoringThread = NULL;
|
||||
unsigned int monitoringThreadID = 0;
|
||||
SecureDesktopThreadParam* pParam = (SecureDesktopThreadParam*) lpThreadParameter;
|
||||
SecureDesktopMonitoringThreadParam monitorParam;
|
||||
HDESK hOriginalDesk = GetThreadDesktop (GetCurrentThreadId ());
|
||||
BOOL bNewDesktopSet = FALSE;
|
||||
int counter = 0;
|
||||
|
||||
SetThreadDesktop (pParam->hDesk);
|
||||
SwitchDesktop (pParam->hDesk);
|
||||
// wait for SwitchDesktop to succeed before using it for current thread
|
||||
// we wait a maximum of 5 seconds
|
||||
for (counter = 0; counter < 10; counter++)
|
||||
{
|
||||
if (SwitchDesktop (pParam->hDesk))
|
||||
{
|
||||
bNewDesktopSet = TRUE;
|
||||
break;
|
||||
}
|
||||
Sleep (SECUREDESKTOP_MONOTIR_PERIOD);
|
||||
}
|
||||
|
||||
if (bNewDesktopSet)
|
||||
{
|
||||
SetThreadDesktop (pParam->hDesk);
|
||||
|
||||
// create the thread that will ensure that VeraCrypt secure desktop has always user input
|
||||
monitorParam.szVCDesktopName = pParam->szDesktopName;
|
||||
monitorParam.hVcDesktop = pParam->hDesk;
|
||||
monitorParam.pbStopMonitoring = &bStopMonitoring;
|
||||
hMonitoringThread = (HANDLE) _beginthreadex (NULL, 0, SecureDesktopMonitoringThread, (LPVOID) &monitorParam, 0, &monitoringThreadID);
|
||||
}
|
||||
|
||||
pParam->retValue = DialogBoxParamW (pParam->hInstance, pParam->lpTemplateName,
|
||||
NULL, pParam->lpDialogFunc, pParam->dwInitParam);
|
||||
|
||||
if (hMonitoringThread)
|
||||
{
|
||||
bStopMonitoring = TRUE;
|
||||
|
||||
WaitForSingleObject (hMonitoringThread, INFINITE);
|
||||
CloseHandle (hMonitoringThread);
|
||||
}
|
||||
|
||||
if (bNewDesktopSet)
|
||||
{
|
||||
SetThreadDesktop (hOriginalDesk);
|
||||
SwitchDesktop (hOriginalDesk);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -13124,10 +13313,10 @@ INT_PTR SecureDesktopDialogBoxParam(
|
||||
hSecureDesk = CreateDesktop (szDesktopName, NULL, NULL, 0, desktopAccess, NULL);
|
||||
if (hSecureDesk)
|
||||
{
|
||||
HDESK hOriginalDesk = GetThreadDesktop (GetCurrentThreadId ());
|
||||
SecureDesktopThreadParam param;
|
||||
|
||||
param.hDesk = hSecureDesk;
|
||||
param.szDesktopName = szDesktopName;
|
||||
param.hInstance = hInstance;
|
||||
param.lpTemplateName = lpTemplateName;
|
||||
param.lpDialogFunc = lpDialogFunc;
|
||||
@@ -13140,9 +13329,6 @@ INT_PTR SecureDesktopDialogBoxParam(
|
||||
WaitForSingleObject (hThread, INFINITE);
|
||||
CloseHandle (hThread);
|
||||
|
||||
SwitchDesktop (hOriginalDesk);
|
||||
SetThreadDesktop (hOriginalDesk);
|
||||
|
||||
retValue = param.retValue;
|
||||
bSuccess = TRUE;
|
||||
}
|
||||
|
||||
@@ -79,6 +79,7 @@ enum
|
||||
#define TC_APPD_FILENAME_NONSYS_INPLACE_ENC_WIPE L"In-Place Encryption Wipe Algo"
|
||||
#define TC_APPD_FILENAME_POST_INSTALL_TASK_TUTORIAL L"Post-Install Task - Tutorial"
|
||||
#define TC_APPD_FILENAME_POST_INSTALL_TASK_RELEASE_NOTES L"Post-Install Task - Release Notes"
|
||||
#define TC_APPD_FILENAME_POST_INSTALL_TASK_RESCUE_DISK L"Post-Install Task - Rescue Disk"
|
||||
|
||||
#define VC_FILENAME_RENAMED_SUFFIX L"_old"
|
||||
|
||||
@@ -94,7 +95,8 @@ enum
|
||||
{
|
||||
TC_POST_INSTALL_CFG_REMOVE_ALL = 0,
|
||||
TC_POST_INSTALL_CFG_TUTORIAL,
|
||||
TC_POST_INSTALL_CFG_RELEASE_NOTES
|
||||
TC_POST_INSTALL_CFG_RELEASE_NOTES,
|
||||
TC_POST_INSTALL_CFG_RESCUE_DISK,
|
||||
};
|
||||
|
||||
extern char *LastDialogId;
|
||||
@@ -178,6 +180,7 @@ enum tc_app_msg_ids
|
||||
TC_APPMSG_MOUNT_ENABLE_DISABLE_CONTROLS = WM_APP + 201,
|
||||
TC_APPMSG_MOUNT_SHOW_WINDOW = WM_APP + 202,
|
||||
TC_APPMSG_PREBOOT_PASSWORD_MODE = WM_APP + 203,
|
||||
VC_APPMSG_CREATE_RESCUE_DISK = WM_APP + 204,
|
||||
// Format
|
||||
TC_APPMSG_VOL_TRANSFORM_THREAD_ENDED = WM_APP + 301,
|
||||
TC_APPMSG_FORMAT_FINISHED = WM_APP + 302,
|
||||
@@ -618,7 +621,7 @@ std::wstring GetUserFriendlyVersionString (int version);
|
||||
std::wstring IntToWideString (int val);
|
||||
std::wstring ArrayToHexWideString (const unsigned char* pbData, int cbData);
|
||||
bool HexWideStringToArray (const wchar_t* hexStr, std::vector<byte>& arr);
|
||||
std::wstring FindDeviceByVolumeID (const BYTE volumeID [VOLUME_ID_SIZE]);
|
||||
std::wstring FindDeviceByVolumeID (const BYTE volumeID [VOLUME_ID_SIZE], BOOL bFromService);
|
||||
void RegisterDriverInf (bool registerFilter, const std::string& filter, const std::string& filterReg, HWND ParentWindow, HKEY regKey);
|
||||
std::wstring GetTempPathString ();
|
||||
void CorrectFileName (std::wstring& fileName);
|
||||
|
||||
@@ -43,17 +43,3 @@ uint64 MirrorBytes64 (uint64 x)
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
LongReverse (unsigned __int32 *buffer, unsigned byteCount)
|
||||
{
|
||||
unsigned __int32 value;
|
||||
|
||||
byteCount /= sizeof (unsigned __int32);
|
||||
while (byteCount--)
|
||||
{
|
||||
value = *buffer;
|
||||
value = ((value & 0xFF00FF00L) >> 8) | \
|
||||
((value & 0x00FF00FFL) << 8);
|
||||
*buffer++ = (value << 16) | (value >> 16);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,8 +139,7 @@ unsigned __int16 MirrorBytes16 (unsigned __int16 x);
|
||||
unsigned __int32 MirrorBytes32 (unsigned __int32 x);
|
||||
#ifndef TC_NO_COMPILER_INT64
|
||||
uint64 MirrorBytes64 (uint64 x);
|
||||
#endif
|
||||
void LongReverse ( unsigned __int32 *buffer , unsigned byteCount );
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
|
||||