mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2026-08-30 04:37:07 +00:00
Compare commits
528
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7ad75a81ca | ||
|
|
f84dc7b78f | ||
|
|
882525b879 | ||
|
|
24e233ea2e | ||
|
|
c6d5b30704 | ||
|
|
0dc3cb7cd1 | ||
|
|
d4192bf863 | ||
|
|
8c963356cb | ||
|
|
20c723e242 | ||
|
|
3ddb499280 | ||
|
|
b56e8c5c4b | ||
|
|
d8a7de8ffb | ||
|
|
7695b8ada0 | ||
|
|
a72c7bcd6a | ||
|
|
2780ac962e | ||
|
|
e47f94cb43 | ||
|
|
625259d226 | ||
|
|
2fef14ff76 | ||
|
|
ce76957a10 | ||
|
|
1bf219b0dc | ||
|
|
a7056a6ac3 | ||
|
|
bba8a5be32 | ||
|
|
1e429d1fbf | ||
|
|
5d5a645083 | ||
|
|
1506916487 | ||
|
|
2db742f465 | ||
|
|
8bc8f7c66e | ||
|
|
99d5145c24 | ||
|
|
24560eae1d | ||
|
|
67031da928 | ||
|
|
87ee61bcb1 | ||
|
|
83885c1ebb | ||
|
|
2d72e42c6c | ||
|
|
71a38563ae | ||
|
|
4cf9db9f95 | ||
|
|
c4d4ade9d0 | ||
|
|
d127393897 | ||
|
|
b51d8f5386 | ||
|
|
b146e235f8 | ||
|
|
07ee8c1069 | ||
|
|
246233c402 | ||
|
|
58cff70724 | ||
|
|
e90e24b30b | ||
|
|
0b2c8b09c6 | ||
|
|
460f552a41 | ||
|
|
9bfe4780d4 | ||
|
|
f26ce59fb5 | ||
|
|
f32f65d4f7 | ||
|
|
5b381ce7d7 | ||
|
|
3fb2eedab8 | ||
|
|
fe31cf5b83 | ||
|
|
2389561406 | ||
|
|
a7f1ba05b4 | ||
|
|
3aaf5c7045 | ||
|
|
73703095b2 | ||
|
|
0fca588275 | ||
|
|
2dbf366184 | ||
|
|
ed81267291 | ||
|
|
1a8ce8a611 | ||
|
|
c5b766969a | ||
|
|
00eb49443a | ||
|
|
45617a3285 | ||
|
|
85cab3b85f | ||
|
|
e4efd6820a | ||
|
|
2faa1290c0 | ||
|
|
bdc5782f16 | ||
|
|
42373efcfd | ||
|
|
6ae982cccf | ||
|
|
842dce0e1b | ||
|
|
27b53c6ff4 | ||
|
|
aeb4e8a13a | ||
|
|
c7756befee | ||
|
|
21d567f731 | ||
|
|
d4e95293d9 | ||
|
|
76d3bc631e | ||
|
|
99c4031d89 | ||
|
|
a0d8b8a3b7 | ||
|
|
3f806010d2 | ||
|
|
94fdcdf18b | ||
|
|
2bb419f92c | ||
|
|
635c3b7af7 | ||
|
|
6954b7c3ef | ||
|
|
2bb0cbe16e | ||
|
|
cdaeef20ce | ||
|
|
ec4a0af41c | ||
|
|
37d7c75db8 | ||
|
|
1ad1c293a3 | ||
|
|
085ab96abd | ||
|
|
438753522e | ||
|
|
fc69e2541e | ||
|
|
942cf1635a | ||
|
|
bf47711ee7 | ||
|
|
723768137b | ||
|
|
268ef2d8e9 | ||
|
|
5f47d8b6f1 | ||
|
|
11716ed2da | ||
|
|
1910751558 | ||
|
|
fc37cc4a02 | ||
|
|
98b04198c6 | ||
|
|
6d61f06a53 | ||
|
|
53aabf3f14 | ||
|
|
fb9a49cb1a | ||
|
|
fede2cfa18 | ||
|
|
fc89bf6e2c | ||
|
|
b261177b8f | ||
|
|
0b914c8f5d | ||
|
|
650d913f51 | ||
|
|
faea63cb3c | ||
|
|
0c51cfa5f6 | ||
|
|
570645a845 | ||
|
|
275ac8622a | ||
|
|
99de8a6dcd | ||
|
|
91e3843732 | ||
|
|
32b42cff14 | ||
|
|
0163dfdcab | ||
|
|
1396269d57 | ||
|
|
bd9105794b | ||
|
|
e51aafb499 | ||
|
|
133afdc9e6 | ||
|
|
f5606a44a6 | ||
|
|
60575d9a49 | ||
|
|
409c0f79be | ||
|
|
09b22c175b | ||
|
|
af327b49aa | ||
|
|
7d7c09e718 | ||
|
|
39eae0e4c3 | ||
|
|
dc1593d60f | ||
|
|
1e204da223 | ||
|
|
ece26c7481 | ||
|
|
6738cba617 | ||
|
|
1290e7836f | ||
|
|
646679da4d | ||
|
|
fd26f49958 | ||
|
|
8bfc7f1caa | ||
|
|
8580464e51 | ||
|
|
fffb3bde7a | ||
|
|
facfda73eb | ||
|
|
50f85b4512 | ||
|
|
e175adcd46 | ||
|
|
0c0ea60b77 | ||
|
|
87df2fd2fc | ||
|
|
faf00ca1e0 | ||
|
|
b331668c06 | ||
|
|
8e8e273e11 | ||
|
|
6452fb3693 | ||
|
|
348a45132b | ||
|
|
3c87c095c3 | ||
|
|
2724d7880d | ||
|
|
26e2d22d62 | ||
|
|
a144e2167d | ||
|
|
2b4003cc81 | ||
|
|
1f87e64127 | ||
|
|
d7d4c98775 | ||
|
|
89d238bb32 | ||
|
|
7fee9a04c4 | ||
|
|
39fb2edc25 | ||
|
|
0863924483 | ||
|
|
8e2793085e | ||
|
|
8518d55834 | ||
|
|
ae7ec4802a | ||
|
|
229bd668f4 | ||
|
|
13a0473cf9 | ||
|
|
49d61632f9 | ||
|
|
4a7a9f4dd2 | ||
|
|
ce8a9becdf | ||
|
|
5aec655b8b | ||
|
|
2c0776e987 | ||
|
|
203c7aa015 | ||
|
|
fe234e08ee | ||
|
|
77885de85e | ||
|
|
b407512248 | ||
|
|
dde3dcf14d | ||
|
|
926721d54e | ||
|
|
24b2dfc0d5 | ||
|
|
ef0906bc83 | ||
|
|
90def2ee5a | ||
|
|
1ca60754b2 | ||
|
|
f63e34e0f9 | ||
|
|
dcb8390bb2 | ||
|
|
9f5b5445d7 | ||
|
|
d53b48bdf0 | ||
|
|
84ee7076d9 | ||
|
|
5a555deb74 | ||
|
|
b8a2e808c6 | ||
|
|
e9d3ba0b11 | ||
|
|
c86697f51b | ||
|
|
5a09d17c45 | ||
|
|
c95940cfc6 | ||
|
|
b12e8b6943 | ||
|
|
cd65f78a62 | ||
|
|
bda7a1d0bd | ||
|
|
43f5fae2ee | ||
|
|
f9fa0191ec | ||
|
|
8a2d9c4120 | ||
|
|
90957cd9d9 | ||
|
|
3cda204626 | ||
|
|
59afc2c4d9 | ||
|
|
dd1e62ebcd | ||
|
|
a6c6c3dc4a | ||
|
|
66a5671e3b | ||
|
|
e858d93a8e | ||
|
|
e40774f546 | ||
|
|
fe38d6f52c | ||
|
|
8586c51016 | ||
|
|
fb430c403b | ||
|
|
5597a1e390 | ||
|
|
3b1eebbfad | ||
|
|
80ba722497 | ||
|
|
52d9838978 | ||
|
|
7a15ff2083 | ||
|
|
0600ae7d1c | ||
|
|
29d46b749d | ||
|
|
ea8e8e517e | ||
|
|
723fcfa64d | ||
|
|
6e1f5cfe4b | ||
|
|
5872be28a2 | ||
|
|
6cb1eefc49 | ||
|
|
4181283f29 | ||
|
|
bb66dac8e6 | ||
|
|
0c2c0a846d | ||
|
|
d462806ea9 | ||
|
|
859c111d01 | ||
|
|
82f372ef4f | ||
|
|
5a2c8af7ec | ||
|
|
2e9c630ab1 | ||
|
|
2fd699cc66 | ||
|
|
fcfcd1a2c4 | ||
|
|
8f6c08330a | ||
|
|
7832d712fd | ||
|
|
3610d2c2ec | ||
|
|
9a39164ed5 | ||
|
|
4f17e0cfe9 | ||
|
|
c1f1c643ff | ||
|
|
8e56e138cc | ||
|
|
1cf826dbad | ||
|
|
13c6f2948e | ||
|
|
533b7e1eb8 | ||
|
|
3a9db8d98c | ||
|
|
613ea66c95 | ||
|
|
efa436974d | ||
|
|
cfadb231d2 | ||
|
|
2d4781be24 | ||
|
|
e0408eee74 | ||
|
|
96d8c65ab4 | ||
|
|
9666dda282 | ||
|
|
2408edb239 | ||
|
|
10d77be0d2 | ||
|
|
59611b8b37 | ||
|
|
90bd57fe40 | ||
|
|
ec7d96fcb7 | ||
|
|
c53fd7ef0c | ||
|
|
d40eedeaaf | ||
|
|
1c55894e1d | ||
|
|
7322ebbc83 | ||
|
|
c69bd27f78 | ||
|
|
6691cc0c06 | ||
|
|
3eb383d4a5 | ||
|
|
14eaa9006c | ||
|
|
4a09511372 | ||
|
|
ebbbde8964 | ||
|
|
62de77e2c8 | ||
|
|
c863f3769e | ||
|
|
1d844c4557 | ||
|
|
908fa17e0f | ||
|
|
01fda292e6 | ||
|
|
4ff727d702 | ||
|
|
97701eb2e9 | ||
|
|
0a69062c6b | ||
|
|
d5e7426181 | ||
|
|
41819270bb | ||
|
|
8342d0d616 | ||
|
|
19483d2097 | ||
|
|
225acf4a22 | ||
|
|
fb67b54787 | ||
|
|
23b69537a5 | ||
|
|
ee3fa19ed9 | ||
|
|
f274f5bdc5 | ||
|
|
5a8eee91c3 | ||
|
|
647a7e047a | ||
|
|
dadfebc6c3 | ||
|
|
8748013f7d | ||
|
|
63091cd29c | ||
|
|
9a6fc789eb | ||
|
|
f3c91cb05c | ||
|
|
13058fd638 | ||
|
|
c94f8c9b63 | ||
|
|
ea451c7241 | ||
|
|
4682f9b235 | ||
|
|
185e421114 | ||
|
|
a3437067ac | ||
|
|
f07121f830 | ||
|
|
f41be7399b | ||
|
|
307568f631 | ||
|
|
9b24da3398 | ||
|
|
b7f9df6e4f | ||
|
|
fda4d3f820 | ||
|
|
0eec3bc349 | ||
|
|
d98367f53b | ||
|
|
03de885b13 | ||
|
|
6b3a26bc40 | ||
|
|
e8ea23e719 | ||
|
|
c447b45d45 | ||
|
|
d904c2758f | ||
|
|
9e1e128b14 | ||
|
|
52c7445a79 | ||
|
|
db80c02342 | ||
|
|
4d7dc3ba25 | ||
|
|
85c1bc34e3 | ||
|
|
24f3b5230c | ||
|
|
7e73208e62 | ||
|
|
22152878f8 | ||
|
|
89a7fad16d | ||
|
|
fe6ea62363 | ||
|
|
957ff20f37 | ||
|
|
ec7b5cd7e6 | ||
|
|
c55e08b31e | ||
|
|
09db742c3e | ||
|
|
a36cf1f01e | ||
|
|
a9882a6689 | ||
|
|
0bd265cbde | ||
|
|
9fc98b5ea3 | ||
|
|
13bfb2db59 | ||
|
|
e445863ae4 | ||
|
|
42a7a17cb9 | ||
|
|
adc3274395 | ||
|
|
249d747a53 | ||
|
|
f2b40ba5b5 | ||
|
|
4470d11c39 | ||
|
|
9582d8fbcb | ||
|
|
90f9194558 | ||
|
|
dc6c279339 | ||
|
|
2f2cb6b7ae | ||
|
|
8dc1dd2fb4 | ||
|
|
86dc27dcb8 | ||
|
|
cfb591a9e9 | ||
|
|
8c0fadc068 | ||
|
|
ad3b8eca69 | ||
|
|
20cb199e55 | ||
|
|
ef94506c34 | ||
|
|
55a267a171 | ||
|
|
ba9af46662 | ||
|
|
fa66a059d9 | ||
|
|
1d36a1cd05 | ||
|
|
5db8cdb98f | ||
|
|
0cf2885e84 | ||
|
|
f9c3bcd384 | ||
|
|
96520e22bd | ||
|
|
ff0ab2da93 | ||
|
|
174f7f498a | ||
|
|
041024fbb9 | ||
|
|
a23943694b | ||
|
|
e760d69bfd | ||
|
|
c2d0d5e344 | ||
|
|
a06c41c5c9 | ||
|
|
ee511e95b2 | ||
|
|
8454c23fcc | ||
|
|
2aa558d6f4 | ||
|
|
0eeff69332 | ||
|
|
1a897f8714 | ||
|
|
d94304f419 | ||
|
|
4535aee30f | ||
|
|
6ca598f841 | ||
|
|
69a8ad5bba | ||
|
|
78aa7de9bc | ||
|
|
94ccaf1ab4 | ||
|
|
4fcf5c921c | ||
|
|
5158953428 | ||
|
|
63818bcaa4 | ||
|
|
88ef238593 | ||
|
|
046513b7c9 | ||
|
|
7d6cd0c92d | ||
|
|
103018b367 | ||
|
|
52146825de | ||
|
|
a43a5ebb21 | ||
|
|
8fc08b1e46 | ||
|
|
b23cbf384f | ||
|
|
2d0d4b06b1 | ||
|
|
944b6aa53f | ||
|
|
6ef41abdd2 | ||
|
|
7a01453f00 | ||
|
|
b809cf62ae | ||
|
|
0ddd19d4ab | ||
|
|
6a78f7eae2 | ||
|
|
724043be0b | ||
|
|
c3b77fba25 | ||
|
|
218f63b4b6 | ||
|
|
b4b51bd909 | ||
|
|
bef713de1a | ||
|
|
8f4b970dc1 | ||
|
|
439e0a9588 | ||
|
|
da8aec4292 | ||
|
|
d73df9bbd4 | ||
|
|
d734ce4635 | ||
|
|
2cd39b37c2 | ||
|
|
ea27cace41 | ||
|
|
9913af3a8e | ||
|
|
f927ce9b58 | ||
|
|
5d9d49e989 | ||
|
|
d31466ae7a | ||
|
|
7d55b028f2 | ||
|
|
44234a0ccc | ||
|
|
6be12f4889 | ||
|
|
b7eadfd310 | ||
|
|
a7a8d57bca | ||
|
|
00cd134720 | ||
|
|
c3c1bdd29d | ||
|
|
550e2bcf3b | ||
|
|
57343ce04c | ||
|
|
fdc2143bfa | ||
|
|
5867250820 | ||
|
|
70215e3682 | ||
|
|
8ebf5ac605 | ||
|
|
85e5e383f9 | ||
|
|
a8651ac014 | ||
|
|
1c08ea01f1 | ||
|
|
0d23312886 | ||
|
|
c44c1ac9ce | ||
|
|
32ba1ebcff | ||
|
|
138d22a254 | ||
|
|
330bed0c42 | ||
|
|
f72125ea71 | ||
|
|
4695920b41 | ||
|
|
e95c075f0c | ||
|
|
4a5154e750 | ||
|
|
b3646b3237 | ||
|
|
061292130d | ||
|
|
d1c1aa369c | ||
|
|
7d52dda67c | ||
|
|
0f2d32f011 | ||
|
|
a1f1e34789 | ||
|
|
eac440ae9e | ||
|
|
dc3bc64b86 | ||
|
|
9ccb8a97af | ||
|
|
bf8e07966b | ||
|
|
093fada00b | ||
|
|
4890a65106 | ||
|
|
2ec75c5f8e | ||
|
|
29501638d1 | ||
|
|
856395962b | ||
|
|
bb2149aac8 | ||
|
|
8e4a68af3b | ||
|
|
4a8040735b | ||
|
|
ae28d51016 | ||
|
|
32f11001c0 | ||
|
|
a0ebc22d1f | ||
|
|
9159a0777d | ||
|
|
0718a4ec20 | ||
|
|
f2cda804dc | ||
|
|
b68fec97ea | ||
|
|
eefaefccc0 | ||
|
|
2784652ab8 | ||
|
|
a284922ce4 | ||
|
|
c4d30b34ba | ||
|
|
a5203dd006 | ||
|
|
474505d704 | ||
|
|
d3db2548b5 | ||
|
|
f397f70fbe | ||
|
|
ae5867f8b1 | ||
|
|
ec4be21492 | ||
|
|
ed604cf0f3 | ||
|
|
ef196b5ca5 | ||
|
|
279c99fdf8 | ||
|
|
f80f7d47d5 | ||
|
|
8e6707cc22 | ||
|
|
f09f8e3a31 | ||
|
|
21be04cb6e | ||
|
|
ba1e9c8f4d | ||
|
|
6e73a8a393 | ||
|
|
176bec1bb2 | ||
|
|
31b238872e | ||
|
|
b730e965c5 | ||
|
|
a916135f3c | ||
|
|
b2020c9fb7 | ||
|
|
188b459d28 | ||
|
|
39bf211ebe | ||
|
|
06af5ce7fd | ||
|
|
7fb5af6ada | ||
|
|
cb9859fa0e | ||
|
|
717ffadf93 | ||
|
|
419586d4a2 | ||
|
|
450cde5fac | ||
|
|
b2d119f781 | ||
|
|
7818c0e0e3 | ||
|
|
86529dadde | ||
|
|
544c55debc | ||
|
|
2b826843de | ||
|
|
b920bb2a6a | ||
|
|
5012e0941a | ||
|
|
1eb8aec9fa | ||
|
|
2b8aa2df16 | ||
|
|
5f252f2c50 | ||
|
|
d5f34ad49d | ||
|
|
608e86c7bc | ||
|
|
516da2229d | ||
|
|
28a9eaf0e3 | ||
|
|
de0c30dded | ||
|
|
1ab00f3e3c | ||
|
|
651bea29b4 | ||
|
|
4e03adc2e7 | ||
|
|
d1a3316e44 | ||
|
|
2c96d17748 | ||
|
|
ad4af09d88 | ||
|
|
96b39a5973 | ||
|
|
b16cfa959d | ||
|
|
f98a691933 | ||
|
|
35497f87a7 | ||
|
|
d01fa11983 | ||
|
|
3d8d088b06 | ||
|
|
89a9763b11 | ||
|
|
1efb782666 | ||
|
|
38f3fc816a | ||
|
|
3794df4f31 | ||
|
|
3502681f77 | ||
|
|
8252cc3ec7 | ||
|
|
6a254778e2 | ||
|
|
41607d126a | ||
|
|
f53554a46a | ||
|
|
03e64e842a | ||
|
|
2894bade88 | ||
|
|
cc02c78a8c | ||
|
|
4f56a0a53d | ||
|
|
cbc28bd4fe | ||
|
|
9a31c23881 | ||
|
|
55b3400afa | ||
|
|
8f5fd67ff3 | ||
|
|
ad9b40d599 | ||
|
|
271d39d942 | ||
|
|
696166c9d4 |
@@ -0,0 +1,50 @@
|
|||||||
|
# Set the default behavior, in case people don't have core.autocrlf set.
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# Explicitly declare text files that could be normalized and converted
|
||||||
|
# to native line endings on checkout. However, as per the policy they're
|
||||||
|
# supposed to have LF endings on all platforms.
|
||||||
|
*.[ch] text diff=cpp eol=lf
|
||||||
|
*.[ch]pp text diff=cpp eol=lf
|
||||||
|
*.asm text eol=lf
|
||||||
|
Makefile text eol=lf
|
||||||
|
*.make text eol=lf
|
||||||
|
*.mk text eol=lf
|
||||||
|
*.inc text eol=lf
|
||||||
|
*.md text eol=lf
|
||||||
|
*.xml text eol=lf
|
||||||
|
*.xpm text -diff -merge eol=lf
|
||||||
|
*.pem text -diff -merge eol=lf
|
||||||
|
*.cer text -diff -merge eol=lf
|
||||||
|
*.manifest text eol=lf
|
||||||
|
*.sh text eol=lf
|
||||||
|
*.txt text eol=lf
|
||||||
|
*.html text diff=html eol=lf
|
||||||
|
*.idl text eol=lf
|
||||||
|
*.fbp text eol=lf
|
||||||
|
*.rgs text eol=lf
|
||||||
|
*.pkgproj text eol=lf
|
||||||
|
Sources text eol=lf
|
||||||
|
|
||||||
|
# Declare files that will always have LF line endings on checkout.
|
||||||
|
*.desktop text eol=lf
|
||||||
|
|
||||||
|
# Declare files that will always have CRLF line endings on checkout.
|
||||||
|
*.sln text eol=crlf
|
||||||
|
*.vcproj text eol=crlf
|
||||||
|
*.rc text eol=crlf
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.cmd text eol=crlf
|
||||||
|
|
||||||
|
# Denote all files that are truly binary and should not be modified.
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.pdf binary
|
||||||
|
*.bmp binary
|
||||||
|
*.ico binary
|
||||||
|
*.od[fgpst] binary
|
||||||
|
*.hc binary
|
||||||
|
*.icns binary
|
||||||
|
*.rtf binary
|
||||||
|
*.bz2 binary
|
||||||
|
*.pfx binary
|
||||||
+503
-503
File diff suppressed because it is too large
Load Diff
@@ -18,15 +18,15 @@ Contents
|
|||||||
========
|
========
|
||||||
|
|
||||||
I. Windows
|
I. Windows
|
||||||
Requirements for Building VeraCrypt for Windows
|
Requirements for Building VeraCrypt for Windows
|
||||||
Instructions for Building VeraCrypt for Windows
|
Instructions for Building VeraCrypt for Windows
|
||||||
Instructions for Signing and Packaging VeraCrypt for Windows
|
Instructions for Signing and Packaging VeraCrypt for Windows
|
||||||
|
|
||||||
II. Linux and Mac OS X
|
II. Linux and Mac OS X
|
||||||
Requirements for Building VeraCrypt for Linux and Mac OS X
|
Requirements for Building VeraCrypt for Linux and Mac OS X
|
||||||
Instructions for Building VeraCrypt for Linux and Mac OS X
|
Instructions for Building VeraCrypt for Linux and Mac OS X
|
||||||
Mac OS X specifics
|
Mac OS X specifics
|
||||||
|
|
||||||
III. FreeBSD and OpenSolaris
|
III. FreeBSD and OpenSolaris
|
||||||
|
|
||||||
IV. Third-Party Developers (Contributors)
|
IV. Third-Party Developers (Contributors)
|
||||||
@@ -43,14 +43,16 @@ I. Windows
|
|||||||
Requirements for Building VeraCrypt for Windows:
|
Requirements for Building VeraCrypt for Windows:
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
- Microsoft Visual C++ 2008 SP1 (Professional Edition or compatible)
|
- Microsoft Visual C++ 2010 SP1 (Professional Edition or compatible)
|
||||||
- Microsoft Visual C++ 1.52 (available from MSDN Subscriber Downloads)
|
- Microsoft Visual C++ 1.52 (available from MSDN Subscriber Downloads)
|
||||||
- Microsoft Windows SDK for Windows 7 (configured for Visual C++)
|
- Microsoft Windows SDK for Windows 7.1 (configured for Visual C++ 2010)
|
||||||
|
- Microsoft Windows SDK for Windows 8.1 (needed for SHA-256 code signing)
|
||||||
- Microsoft Windows Driver Kit 7.1.0 (build 7600.16385.1)
|
- Microsoft Windows Driver Kit 7.1.0 (build 7600.16385.1)
|
||||||
- RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki) 2.20
|
- RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki) 2.20
|
||||||
header files (available at ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20)
|
header files (available at ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20)
|
||||||
- NASM assembler 2.08 or compatible
|
- NASM assembler 2.08 or compatible
|
||||||
- gzip compressor
|
- gzip compressor
|
||||||
|
- upx packer (available at http://upx.sourceforge.net/)
|
||||||
|
|
||||||
IMPORTANT:
|
IMPORTANT:
|
||||||
|
|
||||||
@@ -59,11 +61,12 @@ some cases (e.g. playback of HD DVD content) also the 32-bit editions, do not
|
|||||||
allow the VeraCrypt driver to run without an appropriate digital signature.
|
allow the VeraCrypt driver to run without an appropriate digital signature.
|
||||||
Therefore, all .sys files in official VeraCrypt binary packages are digitally
|
Therefore, all .sys files in official VeraCrypt binary packages are digitally
|
||||||
signed with the digital certificate of the IDRIX, which was
|
signed with the digital certificate of the IDRIX, which was
|
||||||
issued by Thawt certification authority. At the end of each official .exe and
|
issued by Thawte certification authority. At the end of each official .exe and
|
||||||
.sys file, there are embedded digital signatures and all related certificates
|
.sys file, there are embedded digital signatures and all related certificates
|
||||||
(i.e. all certificates in the relevant certification chain, such as the
|
(i.e. all certificates in the relevant certification chain, such as the
|
||||||
certification authority certificates, CA-MS cross-certificate, and the
|
certification authority certificates, CA-MS cross-certificate, and the
|
||||||
IDRIX certificate). Keep this in mind if you compile VeraCrypt
|
IDRIX certificate).
|
||||||
|
Keep this in mind if you compile VeraCrypt
|
||||||
and compare your binaries with the official binaries. If your binaries are
|
and compare your binaries with the official binaries. If your binaries are
|
||||||
unsigned, the sizes of the official binaries will usually be approximately
|
unsigned, the sizes of the official binaries will usually be approximately
|
||||||
10 KB greater than sizes of your binaries (there may be further differences
|
10 KB greater than sizes of your binaries (there may be further differences
|
||||||
@@ -91,7 +94,7 @@ Instructions for Building VeraCrypt for Windows:
|
|||||||
environment variable 'PKCS11_INC' pointing to the directory where
|
environment variable 'PKCS11_INC' pointing to the directory where
|
||||||
the PKCS #11 header files are installed.
|
the PKCS #11 header files are installed.
|
||||||
|
|
||||||
4) Open the solution file 'VeraCrypt.sln' in Microsoft Visual Studio 2008.
|
4) Open the solution file 'VeraCrypt.sln' in Microsoft Visual Studio 2010.
|
||||||
|
|
||||||
5) Select 'All' as the active solution configuration.
|
5) Select 'All' as the active solution configuration.
|
||||||
|
|
||||||
@@ -100,17 +103,27 @@ Instructions for Building VeraCrypt for Windows:
|
|||||||
7) If successful, there should be newly built VeraCrypt binaries in the
|
7) If successful, there should be newly built VeraCrypt binaries in the
|
||||||
'Release' folder.
|
'Release' folder.
|
||||||
|
|
||||||
Instructions for Signing VeraCrypt for Windows:
|
Instructions for Signing and Packaging VeraCrypt for Windows:
|
||||||
------------------------------------------------
|
-------------------------------------------------------------
|
||||||
|
|
||||||
The folder "Signing" contains a batch file (sign.bat) that will sign all
|
First, create an environment variable 'WSDK81' pointing to the Windows SDK
|
||||||
VeraCrypt components using a code signing certificate present on the
|
for Windows 8.1 installation directory.
|
||||||
|
The folder "Signing" contains a batch file (sign.bat) that will sign all
|
||||||
|
VeraCrypt components using a code signing certificate present on the
|
||||||
certificate store and also build the final installation setup.
|
certificate store and also build the final installation setup.
|
||||||
The batch file suppose that the code signing certificate is issued by Thawt.
|
The batch file suppose that the code signing certificate is issued by Thawt.
|
||||||
This is the case for IDRIX's certificate. If yours is issued by another CA,
|
This is the case for IDRIX's certificate. If yours is issued by another CA,
|
||||||
then you should put the Root and Intermediate certificates in the "Signing"
|
then you should put the Root and Intermediate certificates in the "Signing"
|
||||||
folder and then modify sign.bat accordingly.
|
folder and then modify sign.bat accordingly.
|
||||||
|
|
||||||
|
VeraCrypt EFI Boot Loader:
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
VeraCrypt source code contains pre-built EFI binaries under src\Boot\EFI.
|
||||||
|
The source code of VeraCrypt EFI Boot Loader is licensed under LGPL and
|
||||||
|
it is available at https://github.com/veracrypt/VeraCrypt-DCS.
|
||||||
|
For build instructions, please refer to the file src\Boot\EFI\Readme.txt.
|
||||||
|
|
||||||
|
|
||||||
II. Linux and Mac OS X
|
II. Linux and Mac OS X
|
||||||
======================
|
======================
|
||||||
@@ -123,14 +136,15 @@ Requirements for Building VeraCrypt for Linux and Mac OS X:
|
|||||||
- Apple Xcode (Mac OS X only)
|
- Apple Xcode (Mac OS X only)
|
||||||
- NASM assembler 2.08 or compatible (x86/x64 architecture only)
|
- NASM assembler 2.08 or compatible (x86/x64 architecture only)
|
||||||
- pkg-config
|
- pkg-config
|
||||||
|
- makeself (Linux only)
|
||||||
- wxWidgets 3.0 shared library and header files installed or
|
- wxWidgets 3.0 shared library and header files installed or
|
||||||
wxWidgets 3.0 library source code (available at http://www.wxwidgets.org)
|
wxWidgets 3.0 library source code (available at http://www.wxwidgets.org)
|
||||||
- FUSE library and header files (available at http://fuse.sourceforge.net
|
- FUSE library and header files (available at https://github.com/libfuse/libfuse
|
||||||
and https://osxfuse.github.io/)
|
and https://osxfuse.github.io/)
|
||||||
- RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki) 2.20
|
- RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki) 2.20
|
||||||
header files (available at ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20).
|
header files (available at ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20).
|
||||||
They are already included in the source tree under the directory PKCS11 but
|
They are already included in the source tree under the directory PKCS11 but
|
||||||
it is possible to override it using the environment variable 'PKCS11_INC'.
|
it is possible to override it using the environment variable 'PKCS11_INC'.
|
||||||
|
|
||||||
|
|
||||||
Instructions for Building VeraCrypt for Linux and Mac OS X:
|
Instructions for Building VeraCrypt for Linux and Mac OS X:
|
||||||
@@ -140,7 +154,7 @@ Instructions for Building VeraCrypt for Linux and Mac OS X:
|
|||||||
|
|
||||||
2) If you have no wxWidgets shared library installed, run the following
|
2) If you have no wxWidgets shared library installed, run the following
|
||||||
command to configure the wxWidgets static library for VeraCrypt and to
|
command to configure the wxWidgets static library for VeraCrypt and to
|
||||||
build it:
|
build it:
|
||||||
|
|
||||||
$ make WXSTATIC=1 WX_ROOT=/usr/src/wxWidgets wxbuild
|
$ make WXSTATIC=1 WX_ROOT=/usr/src/wxWidgets wxbuild
|
||||||
|
|
||||||
@@ -153,32 +167,34 @@ Instructions for Building VeraCrypt for Linux and Mac OS X:
|
|||||||
$ make
|
$ make
|
||||||
|
|
||||||
or if you have no wxWidgets shared library installed:
|
or if you have no wxWidgets shared library installed:
|
||||||
|
|
||||||
$ make WXSTATIC=1
|
$ make WXSTATIC=1
|
||||||
|
|
||||||
4) If successful, the VeraCrypt executable should be located in the directory
|
4) If successful, the VeraCrypt executable should be located in the directory
|
||||||
'Main'.
|
'Main'.
|
||||||
|
|
||||||
By default, a universal executable supporting both graphical and text user
|
By default, a universal executable supporting both graphical and text user
|
||||||
interface is built. To build a console-only executable, which requires no GUI
|
interface (through the switch --text) is built.
|
||||||
library, use the 'NOGUI' parameter:
|
On Linux, a console-only executable, which requires no GUI library, can be
|
||||||
|
built using the 'NOGUI' parameter:
|
||||||
|
|
||||||
$ make NOGUI=1 WXSTATIC=1 WX_ROOT=/usr/src/wxWidgets wxbuild
|
$ make NOGUI=1 WXSTATIC=1 WX_ROOT=/usr/src/wxWidgets wxbuild
|
||||||
$ make NOGUI=1 WXSTATIC=1
|
$ make NOGUI=1 WXSTATIC=1
|
||||||
|
|
||||||
|
On MacOSX, building a console-only executable is not supported.
|
||||||
|
|
||||||
Mac OS X specifics:
|
Mac OS X specifics:
|
||||||
-----------------------------------------------------------
|
-----------------------------------------------------------
|
||||||
|
|
||||||
Under MacOSX, the SDK for OSX 10.7 is used by default. To use another version
|
Under MacOSX, the SDK for OSX 10.7 is used by default. To use another version
|
||||||
of the SDK (e.i. 10.6), you can export the environment variable VC_OSX_TARGET :
|
of the SDK (i.e. 10.6), you can export the environment variable VC_OSX_TARGET:
|
||||||
|
|
||||||
$ export VC_OSX_TARGET=10.6
|
$ export VC_OSX_TARGET=10.6
|
||||||
|
|
||||||
|
|
||||||
Before building under MacOSX, pkg-config must be installed if not yet available.
|
Before building under MacOSX, pkg-config must be installed if not yet available.
|
||||||
Get it from http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz and
|
Get it from http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz and
|
||||||
compile using the following commands :
|
compile using the following commands :
|
||||||
|
|
||||||
$ ./configure --with-internal-glib
|
$ ./configure --with-internal-glib
|
||||||
$ make
|
$ make
|
||||||
@@ -187,11 +203,11 @@ compile using the following commands :
|
|||||||
After making sure pkg-config is available, download and install OSXFuse from
|
After making sure pkg-config is available, download and install OSXFuse from
|
||||||
https://osxfuse.github.io/ (MacFUSE compatibility layer must selected)
|
https://osxfuse.github.io/ (MacFUSE compatibility layer must selected)
|
||||||
|
|
||||||
The script build_veracrypt_macosx.sh available under "src/Build" performs the
|
The script build_veracrypt_macosx.sh available under "src/Build" performs the
|
||||||
full build of VeraCrypt including the creation of the installer pkg. It expects
|
full build of VeraCrypt including the creation of the installer pkg. It expects
|
||||||
to find the wxWidgets 3.0.2 sources at the same level as where you put
|
to find the wxWidgets 3.0.2 sources at the same level as where you put
|
||||||
VeraCrypt sources (e.i. if "src" path is "/Users/joe/Projects/VeraCrypt/src"
|
VeraCrypt sources (i.e. if "src" path is "/Users/joe/Projects/VeraCrypt/src"
|
||||||
then wxWidgets should be at "/Users/joe/Projects/wxWidgets-wxWidgets-3.0.2")
|
then wxWidgets should be at "/Users/joe/Projects/wxWidgets-3.0.2")
|
||||||
|
|
||||||
The build process uses Code Signing certificates whose ID is specified in
|
The build process uses Code Signing certificates whose ID is specified in
|
||||||
src/Main/Main.make (lines 167 & 169). You'll have to modify these lines to put
|
src/Main/Main.make (lines 167 & 169). You'll have to modify these lines to put
|
||||||
@@ -232,20 +248,25 @@ Copyright Information
|
|||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
This software as a whole:
|
This software as a whole:
|
||||||
Copyright (c) 2013-2014 IDRIX. All rights reserved.
|
Copyright (c) 2013-2016 IDRIX. All rights reserved.
|
||||||
|
|
||||||
Portions of this software:
|
Portions of this software:
|
||||||
|
Copyright (c) 2013-2016 IDRIX. All rights reserved.
|
||||||
Copyright (c) 2003-2012 TrueCrypt Developers Association. 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-2000 Paul Le Roux. All rights reserved.
|
||||||
Copyright (c) 1998-2008 Brian Gladman, Worcester, UK. All rights reserved.
|
Copyright (c) 1998-2008 Brian Gladman, Worcester, UK. All rights reserved.
|
||||||
Copyright (c) 2002-2004 Mark Adler. All rights reserved.
|
Copyright (c) 2002-2004 Mark Adler. All rights reserved.
|
||||||
|
Copyright (c) 2016 Disk Cryptography Services for EFI (DCS), Alex Kolotnikov
|
||||||
|
Copyright (c) 1990-2002 Info-ZIP. All rights reserved.
|
||||||
|
Copyright (c) 2013, Alexey Degtyarev. All rights reserved.
|
||||||
|
|
||||||
For more information, please see the legal notices attached to parts of the
|
For more information, please see the legal notices attached to parts of the
|
||||||
source code.
|
source code.
|
||||||
|
|
||||||
Trademark Information
|
Trademark Information
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
Any trademarks contained in the source code, binaries, and/or in the
|
Any trademarks contained in the source code, binaries, and/or in the
|
||||||
documentation, are the sole property of their respective owners.
|
documentation, are the sole property of their respective owners.
|
||||||
|
|
||||||
|
|
||||||
@@ -254,4 +275,3 @@ VI. Further Information
|
|||||||
=======================
|
=======================
|
||||||
|
|
||||||
http://www.veracrypt.fr
|
http://www.veracrypt.fr
|
||||||
|
|
||||||
|
|||||||
+321
@@ -0,0 +1,321 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
setlocal
|
||||||
|
|
||||||
|
call :freedrive mydriveletter && goto :cont
|
||||||
|
echo ERROR: No free drive letter found.
|
||||||
|
goto :exit
|
||||||
|
:cont
|
||||||
|
|
||||||
|
echo Using drive letter %mydriveletter%: for our tests
|
||||||
|
echo.
|
||||||
|
|
||||||
|
IF NOT EXIST test.sha512.hc GOTO :whirlpool
|
||||||
|
|
||||||
|
rem Get start time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Mount SHA-512 container (Normal)
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha512.hc /hash sha512 /l %mydriveletter% /password test /q /silent /m ro
|
||||||
|
|
||||||
|
rem Get end time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Get elapsed time:
|
||||||
|
set /A elapsed=end-start
|
||||||
|
|
||||||
|
rem Show elapsed time:
|
||||||
|
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
|
||||||
|
if %hh% lss 10 set hh=0%hh%
|
||||||
|
if %mm% lss 10 set mm=0%mm%
|
||||||
|
if %ss% lss 10 set ss=0%ss%
|
||||||
|
if %cc% lss 10 set cc=0%cc%
|
||||||
|
echo SHA-512 (Normal) = %hh%:%mm%:%ss%,%cc%
|
||||||
|
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
|
||||||
|
|
||||||
|
rem Get start time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Mount SHA-512 container (Hidden)
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha512.hc /hash sha512 /l %mydriveletter% /password testhidden /q /silent /m ro
|
||||||
|
|
||||||
|
rem Get end time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Get elapsed time:
|
||||||
|
set /A elapsed=end-start
|
||||||
|
|
||||||
|
rem Show elapsed time:
|
||||||
|
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
|
||||||
|
if %hh% lss 10 set hh=0%hh%
|
||||||
|
if %mm% lss 10 set mm=0%mm%
|
||||||
|
if %ss% lss 10 set ss=0%ss%
|
||||||
|
if %cc% lss 10 set cc=0%cc%
|
||||||
|
echo SHA-512 (Hidden) = %hh%:%mm%:%ss%,%cc%
|
||||||
|
echo.
|
||||||
|
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
|
||||||
|
|
||||||
|
:whirlpool
|
||||||
|
|
||||||
|
IF NOT EXIST test.whirlpool.hc GOTO :sha256
|
||||||
|
|
||||||
|
rem Get start time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Mount Whirlpool container (Normal).
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.whirlpool.hc /hash whirlpool /l %mydriveletter% /password test /q /silent /m ro
|
||||||
|
|
||||||
|
rem Get end time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Get elapsed time:
|
||||||
|
set /A elapsed=end-start
|
||||||
|
|
||||||
|
rem Show elapsed time:
|
||||||
|
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
|
||||||
|
if %hh% lss 10 set hh=0%hh%
|
||||||
|
if %mm% lss 10 set mm=0%mm%
|
||||||
|
if %ss% lss 10 set ss=0%ss%
|
||||||
|
if %cc% lss 10 set cc=0%cc%
|
||||||
|
echo Whirlpool (Normal) = %hh%:%mm%:%ss%,%cc%
|
||||||
|
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
|
||||||
|
|
||||||
|
rem Get start time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Mount Whirlpool container (Hidden).
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.whirlpool.hc /hash whirlpool /l %mydriveletter% /password testhidden /q /silent /m ro
|
||||||
|
|
||||||
|
rem Get end time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Get elapsed time:
|
||||||
|
set /A elapsed=end-start
|
||||||
|
|
||||||
|
rem Show elapsed time:
|
||||||
|
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
|
||||||
|
if %hh% lss 10 set hh=0%hh%
|
||||||
|
if %mm% lss 10 set mm=0%mm%
|
||||||
|
if %ss% lss 10 set ss=0%ss%
|
||||||
|
if %cc% lss 10 set cc=0%cc%
|
||||||
|
echo Whirlpool (Hidden) = %hh%:%mm%:%ss%,%cc%
|
||||||
|
echo.
|
||||||
|
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
|
||||||
|
|
||||||
|
:sha256
|
||||||
|
|
||||||
|
IF NOT EXIST test.sha256.hc GOTO :ripemd160
|
||||||
|
|
||||||
|
rem Get start time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Mount SHA-256 container (Normal)
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha256.hc /hash sha256 /l %mydriveletter% /password test /q /silent /m ro
|
||||||
|
|
||||||
|
rem Get end time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Get elapsed time:
|
||||||
|
set /A elapsed=end-start
|
||||||
|
|
||||||
|
rem Show elapsed time:
|
||||||
|
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
|
||||||
|
if %hh% lss 10 set hh=0%hh%
|
||||||
|
if %mm% lss 10 set mm=0%mm%
|
||||||
|
if %ss% lss 10 set ss=0%ss%
|
||||||
|
if %cc% lss 10 set cc=0%cc%
|
||||||
|
echo SHA-256 (Normal) = %hh%:%mm%:%ss%,%cc%
|
||||||
|
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
|
||||||
|
|
||||||
|
rem Get start time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Mount SHA-256 container (Hidden)
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha256.hc /hash sha256 /l %mydriveletter% /password testhidden /q /silent /m ro
|
||||||
|
|
||||||
|
rem Get end time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Get elapsed time:
|
||||||
|
set /A elapsed=end-start
|
||||||
|
|
||||||
|
rem Show elapsed time:
|
||||||
|
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
|
||||||
|
if %hh% lss 10 set hh=0%hh%
|
||||||
|
if %mm% lss 10 set mm=0%mm%
|
||||||
|
if %ss% lss 10 set ss=0%ss%
|
||||||
|
if %cc% lss 10 set cc=0%cc%
|
||||||
|
echo SHA-256 (Hidden) = %hh%:%mm%:%ss%,%cc%
|
||||||
|
echo.
|
||||||
|
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
|
||||||
|
|
||||||
|
:ripemd160
|
||||||
|
|
||||||
|
IF NOT EXIST test.ripemd160.hc GOTO :autodetect
|
||||||
|
|
||||||
|
rem Get start time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Mount RIPEMD-160 container (Normal)
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.ripemd160.hc /hash ripemd160 /l %mydriveletter% /password test /q /silent /m ro
|
||||||
|
|
||||||
|
rem Get end time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Get elapsed time:
|
||||||
|
set /A elapsed=end-start
|
||||||
|
|
||||||
|
rem Show elapsed time:
|
||||||
|
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
|
||||||
|
if %hh% lss 10 set hh=0%hh%
|
||||||
|
if %mm% lss 10 set mm=0%mm%
|
||||||
|
if %ss% lss 10 set ss=0%ss%
|
||||||
|
if %cc% lss 10 set cc=0%cc%
|
||||||
|
echo RIPEMD-160 (Normal) = %hh%:%mm%:%ss%,%cc%
|
||||||
|
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
|
||||||
|
|
||||||
|
rem Get start time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Mount RIPEMD-160 container (Hidden)
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.ripemd160.hc /hash ripemd160 /l %mydriveletter% /password testhidden /q /silent /m ro
|
||||||
|
|
||||||
|
rem Get end time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Get elapsed time:
|
||||||
|
set /A elapsed=end-start
|
||||||
|
|
||||||
|
rem Show elapsed time:
|
||||||
|
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
|
||||||
|
if %hh% lss 10 set hh=0%hh%
|
||||||
|
if %mm% lss 10 set mm=0%mm%
|
||||||
|
if %ss% lss 10 set ss=0%ss%
|
||||||
|
if %cc% lss 10 set cc=0%cc%
|
||||||
|
echo RIPEMD-160 (Hidden) = %hh%:%mm%:%ss%,%cc%
|
||||||
|
echo.
|
||||||
|
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
|
||||||
|
|
||||||
|
:autodetect
|
||||||
|
|
||||||
|
call :availablevolume testvolume && goto :contautodetect
|
||||||
|
goto :exit
|
||||||
|
:contautodetect
|
||||||
|
|
||||||
|
rem Get start time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Try to mount with a wrong password and PRF autodetection
|
||||||
|
"c:\Program Files\VeraCrypt\veracrypt.exe" /volume %testvolume% /l %mydriveletter% /password wrongpassword /q /silent /m ro
|
||||||
|
|
||||||
|
rem Get end time:
|
||||||
|
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
|
||||||
|
set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Get elapsed time:
|
||||||
|
set /A elapsed=end-start
|
||||||
|
|
||||||
|
rem Show elapsed time:
|
||||||
|
set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
|
||||||
|
if %hh% lss 10 set hh=0%hh%
|
||||||
|
if %mm% lss 10 set mm=0%mm%
|
||||||
|
if %ss% lss 10 set ss=0%ss%
|
||||||
|
if %cc% lss 10 set cc=0%cc%
|
||||||
|
echo Wrong Password (PRF Auto-detection)= %hh%:%mm%:%ss%,%cc%
|
||||||
|
echo.
|
||||||
|
|
||||||
|
|
||||||
|
goto :exit
|
||||||
|
|
||||||
|
rem Finds a free drive letter.
|
||||||
|
rem
|
||||||
|
rem Parameters:
|
||||||
|
rem %1 = Output variable name.
|
||||||
|
rem
|
||||||
|
rem Example:
|
||||||
|
rem call :freedrive mydriveletter && goto :cont
|
||||||
|
rem echo ERROR: No free drive letter found.
|
||||||
|
rem goto :EOF
|
||||||
|
rem :cont
|
||||||
|
rem echo Found drive letter: %mydriveletter%
|
||||||
|
:freedrive
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
set exitcode=0
|
||||||
|
set "output_var=%~1"
|
||||||
|
for %%i in (C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
|
||||||
|
set "drive=%%i:"
|
||||||
|
rem If 'subst' fails, the drive letter is already in use.
|
||||||
|
rem This way we can even detect optical drives that have a drive
|
||||||
|
rem letter but no media in them, a case that goes undetected when
|
||||||
|
rem using 'if exist'.
|
||||||
|
subst !drive! %SystemDrive%\ >nul
|
||||||
|
if !errorlevel! == 0 (
|
||||||
|
subst !drive! /d >nul
|
||||||
|
set "drive=%%i"
|
||||||
|
goto :freedrive0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
set exitcode=1
|
||||||
|
set drive=
|
||||||
|
:freedrive0
|
||||||
|
endlocal & set "%output_var%=%drive%" & exit /b %exitcode%
|
||||||
|
|
||||||
|
:availablevolume
|
||||||
|
setlocal EnableDelayedExpansion
|
||||||
|
set exitcode=0
|
||||||
|
set "output_var=%~1"
|
||||||
|
for %%i in (test.sha512.hc,test.sha256.hc,test.whirlpool.hc,test.ripemd160.hc) do (
|
||||||
|
if exist %%i (
|
||||||
|
set "volume=%%i"
|
||||||
|
goto :availablevolume0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
set exitcode=1
|
||||||
|
set volume=
|
||||||
|
:availablevolume0
|
||||||
|
endlocal & set "%output_var%=%volume%" & exit /b %exitcode%
|
||||||
|
|
||||||
|
:exit
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1470
-1359
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1470
-1359
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1470
-1362
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1472
-1362
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1470
-1360
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
+1469
-1359
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,35 @@
|
|||||||
|
The source code for VeraCrypt EFI bootloader files is available at: https://github.com/veracrypt/VeraCrypt-DCS
|
||||||
|
Use tag "VeraCrypt_1.18" to extract the sources that were used when building VeraCrypt 1.18.
|
||||||
|
|
||||||
|
VeraCrypt-DCS uses EDK II as its UEFI development environement.
|
||||||
|
|
||||||
|
VeraCrypt-DCS is licensed under LGPL: https://github.com/veracrypt/VeraCrypt-DCS/blob/master/LICENSE
|
||||||
|
|
||||||
|
Here the steps to build VeraCrypt-DCS (Visual Studio 2010 SP1 should be installed)
|
||||||
|
* Clone EDK: git clone https://github.com/tianocore/tianocore.github.io.git edk2
|
||||||
|
* Switch to UDK2015 branche: git checkout UDK2015
|
||||||
|
* Clone VeraCrypt-DCS as DcsPkg inside edk2 folder: git clone https://github.com/veracrypt/VeraCrypt-DCS.git DcsPkg
|
||||||
|
* Switch to VeraCrypt_1.18 branche: git checkout VeraCrypt_1.18
|
||||||
|
* Setup EDK by typing edksetup.bat at the root of folder edk2
|
||||||
|
* change directoty to DcsPkg and then type setenv.bat.
|
||||||
|
* change directory to DcsPkg\Library\VeraCryptLib and then type mklinks_src.bat: you will be asked to provide the path to VeraCrypt src folder.
|
||||||
|
* change directory to DcsPkg and then type dcs_bld.bat X64Rel
|
||||||
|
* After the build is finished, EFI bootloader files will be present at edk2\Build\DcsPkg\RELEASE_VS2010x86\X64
|
||||||
|
|
||||||
|
Secure Boot:
|
||||||
|
In order to allow VeraCrypt EFI bootloader to run when EFI Secure Boot is enabled, VeraCrypt EFI bootloader files are signed
|
||||||
|
using a custom key whose public part can be loader into Secure Boot to allow the verification of VeraCrypt EFI files.
|
||||||
|
|
||||||
|
below are instruction to update Secure Boot configuration:
|
||||||
|
1. Enter BIOS configuration
|
||||||
|
2. Switch Secure boot to setup mode (or custom mode). It deletes PK (platform certificate) and allows to load DCS platform key.
|
||||||
|
3. Boot Windows
|
||||||
|
4. execute from admin command prompt
|
||||||
|
powershell -File sb_set_siglists.ps1
|
||||||
|
It sets in PK (platform key) - DCS_platform
|
||||||
|
It sets in KEK (key exchange key) - DCS_key_exchange
|
||||||
|
It sets in db - DCS_sign MicWinProPCA2011_2011-10-19 MicCorUEFCA2011_2011-06-27
|
||||||
|
|
||||||
|
All DCS modules are protected by DCS_sign.
|
||||||
|
All Windows modules are protected by MicWinProPCA2011_2011-10-19
|
||||||
|
All SHIM(linux) modules are protected by MicCorUEFCA2011_2011-06-27
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
|
|||||||
|
Apart from DCS certificates, there are two public DB entries - one for Windows and one for the UEFI Certificate Authority (CA).
|
||||||
|
Windows DB: http://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt
|
||||||
|
UEFI DB: http://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
Set-ExecutionPolicy Bypass -Force
|
||||||
|
Import-Module secureboot
|
||||||
|
|
||||||
|
Set-SecureBootUEFI -Name PK -Time 2015-09-11 -Content $null
|
||||||
|
Set-SecureBootUEFI -Name KEK -Time 2015-09-11 -Content $null
|
||||||
|
Set-SecureBootUEFI -Name db -Time 2015-09-11 -Content $null
|
||||||
|
Set-SecureBootUEFI -Name dbx -Time 2015-09-11 -Content $null
|
||||||
|
|
||||||
|
Write-Host "Setting self-signed PK..."
|
||||||
|
Set-SecureBootUEFI -Time 2016-08-08T00:00:00Z -ContentFilePath siglists\DCS_platform_SigList.bin -SignedFilePath siglists\DCS_platform_SigList_Serialization.bin.p7 -Name PK
|
||||||
|
|
||||||
|
Write-Host "Setting PK-signed KEK..."
|
||||||
|
Set-SecureBootUEFI -Time 2016-08-08T00:00:00Z -ContentFilePath siglists\DCS_key_exchange_SigList.bin -SignedFilePath siglists\DCS_key_exchange_SigList_Serialization.bin.p7 -Name KEK
|
||||||
|
|
||||||
|
Write-Host "Setting KEK-signed DCS cert in db..."
|
||||||
|
Set-SecureBootUEFI -Time 2016-08-08T00:00:00Z -ContentFilePath siglists\DCS_sign_SigList.bin -SignedFilePath siglists\DCS_sign_SigList_Serialization.bin.p7 -Name db
|
||||||
|
|
||||||
|
Write-Host "Setting KEK-signed MS cert in db..."
|
||||||
|
Set-SecureBootUEFI -Time 2016-08-08T00:00:00Z -ContentFilePath siglists\MicWinProPCA2011_2011-10-19_SigList.bin -SignedFilePath siglists\MicWinProPCA2011_2011-10-19_SigList_Serialization.bin.p7 -Name db -AppendWrite:$true
|
||||||
|
|
||||||
|
Write-Host "Setting KEK-signed MS UEFI cert in db..."
|
||||||
|
Set-SecureBootUEFI -Time 2016-08-08T00:00:00Z -ContentFilePath siglists\MicCorUEFCA2011_2011-06-27_SigList.bin -SignedFilePath siglists\MicCorUEFCA2011_2011-06-27_SigList_Serialization.bin.p7 -Name db -AppendWrite:$true
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+32
-28
@@ -1,28 +1,32 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#ifndef TC_HEADER_Boot_Bios
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#define TC_HEADER_Boot_Bios
|
code distribution packages.
|
||||||
|
*/
|
||||||
#include "Platform.h"
|
|
||||||
|
#ifndef TC_HEADER_Boot_Bios
|
||||||
#define TC_LB_SIZE_BIT_SHIFT_DIVISOR 9
|
#define TC_HEADER_Boot_Bios
|
||||||
|
|
||||||
#define TC_FIRST_BIOS_DRIVE 0x80
|
#include "Platform.h"
|
||||||
#define TC_LAST_BIOS_DRIVE 0x8f
|
|
||||||
#define TC_INVALID_BIOS_DRIVE (TC_FIRST_BIOS_DRIVE - 1)
|
#define TC_LB_SIZE_BIT_SHIFT_DIVISOR 9
|
||||||
|
|
||||||
enum
|
#define TC_FIRST_BIOS_DRIVE 0x80
|
||||||
{
|
#define TC_LAST_BIOS_DRIVE 0x8f
|
||||||
BiosResultSuccess = 0x00,
|
#define TC_INVALID_BIOS_DRIVE (TC_FIRST_BIOS_DRIVE - 1)
|
||||||
BiosResultInvalidFunction = 0x01
|
|
||||||
};
|
enum
|
||||||
|
{
|
||||||
typedef byte BiosResult;
|
BiosResultSuccess = 0x00,
|
||||||
|
BiosResultInvalidFunction = 0x01
|
||||||
#endif // TC_HEADER_Boot_Bios
|
};
|
||||||
|
|
||||||
|
typedef byte BiosResult;
|
||||||
|
|
||||||
|
#endif // TC_HEADER_Boot_Bios
|
||||||
|
|||||||
+250
-246
@@ -1,246 +1,250 @@
|
|||||||
<?xml version="1.0" encoding="Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="9.00"
|
Version="9.00"
|
||||||
Name="Boot"
|
Name="Boot"
|
||||||
ProjectGUID="{8B7F059F-E4C7-4E11-88F5-EE8B8433072E}"
|
ProjectGUID="{8B7F059F-E4C7-4E11-88F5-EE8B8433072E}"
|
||||||
RootNamespace="Boot"
|
RootNamespace="Boot"
|
||||||
Keyword="MakeFileProj"
|
Keyword="MakeFileProj"
|
||||||
TargetFrameworkVersion="131072"
|
TargetFrameworkVersion="131072"
|
||||||
>
|
>
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform
|
<Platform
|
||||||
Name="Win32"
|
Name="Win32"
|
||||||
/>
|
/>
|
||||||
</Platforms>
|
</Platforms>
|
||||||
<ToolFiles>
|
<ToolFiles>
|
||||||
</ToolFiles>
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release|Win32"
|
Name="Release|Win32"
|
||||||
OutputDirectory="$(ConfigurationName)"
|
OutputDirectory="$(ConfigurationName)"
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
ConfigurationType="0"
|
ConfigurationType="0"
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCNMakeTool"
|
Name="VCNMakeTool"
|
||||||
BuildCommandLine="md Release 2>NUL:
nmake.exe /nologo RELEASE=1

md Release_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_PRF=SHA2

md Release_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES

md Release_AES_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES SINGLE_PRF=SHA2

md Release_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT

md Release_Serpent_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT SINGLE_PRF=SHA2

md Release_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH

md Release_Twofish_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH SINGLE_PRF=SHA2

md Rescue 2>NUL:
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1

md Rescue_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1 SINGLE_PRF=SHA2

md Rescue_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1

md Rescue_AES_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1 SINGLE_PRF=SHA2

md Rescue_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1

md Rescue_Serpent_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1 SINGLE_PRF=SHA2

md Rescue_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1

md Rescue_Twofish_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1 SINGLE_PRF=SHA2"
|
BuildCommandLine="md Release 2>NUL:
nmake.exe /nologo RELEASE=1

md Release_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_PRF=SHA2

md Release_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES

md Release_AES_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES SINGLE_PRF=SHA2

md Release_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT

md Release_Serpent_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT SINGLE_PRF=SHA2

md Release_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH

md Release_Twofish_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH SINGLE_PRF=SHA2

md Release_Camellia 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA

md Release_Camellia_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA SINGLE_PRF=SHA2

md Rescue 2>NUL:
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1

md Rescue_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1 SINGLE_PRF=SHA2

md Rescue_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1

md Rescue_AES_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1 SINGLE_PRF=SHA2

md Rescue_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1

md Rescue_Serpent_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1 SINGLE_PRF=SHA2

md Rescue_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1

md Rescue_Twofish_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1 SINGLE_PRF=SHA2

md Rescue_Camellia 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1

md Rescue_Camellia_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1 SINGLE_PRF=SHA2"
|
||||||
ReBuildCommandLine="del /q /s Release >NUL:
md Release 2>NUL:
nmake.exe /nologo RELEASE=1

del /q /s Release_SHA2 >NUL:
md Release_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_PRF=SHA2

del /q /s Release_AES >NUL:
md Release_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES

del /q /s Release_AES_SHA2 >NUL:
md Release_AES_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES SINGLE_PRF=SHA2

del /q /s Release_Serpent >NUL:
md Release_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT

del /q /s Release_Serpent_SHA2 >NUL:
md Release_Serpent_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT SINGLE_PRF=SHA2

del /q /s Release_Twofish >NUL:
md Release_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH

del /q /s Release_Twofish_SHA2 >NUL:
md Release_Twofish_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH SINGLE_PRF=SHA2

del /q /s Rescue >NUL:
md Rescue 2>NUL:
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1

del /q /s Rescue_SHA2 >NUL:
md Rescue_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1 SINGLE_PRF=SHA2

del /q /s Rescue_AES >NUL:
md Rescue_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1

del /q /s Rescue_AES_SHA2 >NUL:
md Rescue_AES_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1 SINGLE_PRF=SHA2

del /q /s Rescue_Serpent >NUL:
md Rescue_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1

del /q /s Rescue_Serpent_SHA2 >NUL:
md Rescue_Serpent_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1 SINGLE_PRF=SHA2

del /q /s Rescue_Twofish >NUL:
md Rescue_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1

del /q /s Rescue_Twofish_SHA2 >NUL:
md Rescue_Twofish_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1 SINGLE_PRF=SHA2"
|
ReBuildCommandLine="del /q /s Release >NUL:
md Release 2>NUL:
nmake.exe /nologo RELEASE=1

del /q /s Release_SHA2 >NUL:
md Release_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_PRF=SHA2

del /q /s Release_AES >NUL:
md Release_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES

del /q /s Release_AES_SHA2 >NUL:
md Release_AES_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES SINGLE_PRF=SHA2

del /q /s Release_Serpent >NUL:
md Release_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT

del /q /s Release_Serpent_SHA2 >NUL:
md Release_Serpent_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT SINGLE_PRF=SHA2

del /q /s Release_Twofish >NUL:
md Release_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH

del /q /s Release_Twofish_SHA2 >NUL:
md Release_Twofish_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH SINGLE_PRF=SHA2

del /q /s Release_Camellia >NUL:
md Release_Camellia 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA

del /q /s Release_Camellia_SHA2 >NUL:
md Release_Camellia_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA SINGLE_PRF=SHA2

del /q /s Rescue >NUL:
md Rescue 2>NUL:
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1

del /q /s Rescue_SHA2 >NUL:
md Rescue_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1 SINGLE_PRF=SHA2

del /q /s Rescue_AES >NUL:
md Rescue_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1

del /q /s Rescue_AES_SHA2 >NUL:
md Rescue_AES_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1 SINGLE_PRF=SHA2

del /q /s Rescue_Serpent >NUL:
md Rescue_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1

del /q /s Rescue_Serpent_SHA2 >NUL:
md Rescue_Serpent_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1 SINGLE_PRF=SHA2

del /q /s Rescue_Twofish >NUL:
md Rescue_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1

del /q /s Rescue_Twofish_SHA2 >NUL:
md Rescue_Twofish_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1 SINGLE_PRF=SHA2

del /q /s Rescue_Camellia >NUL:
md Rescue_Camellia 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1

del /q /s Rescue_Camellia_SHA2 >NUL:
md Rescue_Camellia_SHA2 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1 SINGLE_PRF=SHA2"
|
||||||
CleanCommandLine="del /q /s Release Release_AES Release_Serpent Release_Twofish Rescue Rescue_AES Rescue_Serpent Rescue_Twofish >NUL:
del /q /s Release_SHA2 Release_AES_SHA2 Release_Serpent_SHA2 Release_Twofish_SHA2 Rescue_SHA2 Rescue_AES_SHA2 Rescue_Serpent_SHA2 Rescue_Twofish_SHA2 >NUL:
"
|
CleanCommandLine="del /q /s Release Release_AES Release_Serpent Release_Twofish Release_Camellia Rescue Rescue_AES Rescue_Serpent Rescue_Twofish Rescue_Camellia >NUL:
del /q /s Release_SHA2 Release_AES_SHA2 Release_Serpent_SHA2 Release_Twofish_SHA2 Release_Camellia_SHA2 Rescue_SHA2 Rescue_AES_SHA2 Rescue_Serpent_SHA2 Rescue_Twofish_SHA2 Rescue_Camellia_SHA2 >NUL:
"
|
||||||
Output="Release\BootLoader.com"
|
Output="Release\BootLoader.com"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG"
|
PreprocessorDefinitions="WIN32;NDEBUG"
|
||||||
IncludeSearchPath=""$(SolutionDir)";"$(SolutionDir)\Common";"$(SolutionDir)\Crypto";"$(MSVC16_ROOT)\Include""
|
IncludeSearchPath=""$(SolutionDir)";"$(SolutionDir)\Common";"$(SolutionDir)\Crypto";"$(MSVC16_ROOT)\Include""
|
||||||
ForcedIncludes=""
|
ForcedIncludes=""
|
||||||
AssemblySearchPath=""
|
AssemblySearchPath=""
|
||||||
ForcedUsingAssemblies=""
|
ForcedUsingAssemblies=""
|
||||||
CompileAsManaged=""
|
CompileAsManaged=""
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
<Configuration
|
<Configuration
|
||||||
Name="Release Loader|Win32"
|
Name="Release Loader|Win32"
|
||||||
OutputDirectory="$(ConfigurationName)"
|
OutputDirectory="$(ConfigurationName)"
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
IntermediateDirectory="$(ConfigurationName)"
|
||||||
ConfigurationType="0"
|
ConfigurationType="0"
|
||||||
>
|
>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCNMakeTool"
|
Name="VCNMakeTool"
|
||||||
BuildCommandLine="md Release 2>NUL:
nmake.exe /nologo RELEASE=1

md Release_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES

md Release_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT

md Release_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH"
|
BuildCommandLine="md Release 2>NUL:
nmake.exe /nologo RELEASE=1

md Release_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES

md Release_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT

md Release_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH"
|
||||||
ReBuildCommandLine="del /q /s Release >NUL:
md Release 2>NUL:
nmake.exe /nologo RELEASE=1

del /q /s Release_AES >NUL:
md Release_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES

del /q /s Release_Serpent >NUL:
md Release_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT

del /q /s Release_Twofish >NUL:
md Release_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH"
|
ReBuildCommandLine="del /q /s Release >NUL:
md Release 2>NUL:
nmake.exe /nologo RELEASE=1

del /q /s Release_AES >NUL:
md Release_AES 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES

del /q /s Release_Serpent >NUL:
md Release_Serpent 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT

del /q /s Release_Twofish >NUL:
md Release_Twofish 2>NUL:
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH"
|
||||||
CleanCommandLine="del /q /s Release Release_AES Release_Serpent Release_Twofish >NUL:"
|
CleanCommandLine="del /q /s Release Release_AES Release_Serpent Release_Twofish >NUL:"
|
||||||
Output="Release\BootLoader.com"
|
Output="Release\BootLoader.com"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG"
|
PreprocessorDefinitions="WIN32;NDEBUG"
|
||||||
IncludeSearchPath=""$(SolutionDir)";"$(SolutionDir)\Common";"$(SolutionDir)\Crypto";"$(MSVC16_ROOT)\Include""
|
IncludeSearchPath=""$(SolutionDir)";"$(SolutionDir)\Common";"$(SolutionDir)\Crypto";"$(MSVC16_ROOT)\Include""
|
||||||
ForcedIncludes=""
|
ForcedIncludes=""
|
||||||
AssemblySearchPath=""
|
AssemblySearchPath=""
|
||||||
ForcedUsingAssemblies=""
|
ForcedUsingAssemblies=""
|
||||||
CompileAsManaged=""
|
CompileAsManaged=""
|
||||||
/>
|
/>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
</Configurations>
|
</Configurations>
|
||||||
<References>
|
<References>
|
||||||
</References>
|
</References>
|
||||||
<Files>
|
<Files>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Source Files"
|
Name="Source Files"
|
||||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootConfig.cpp"
|
RelativePath=".\BootConfig.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootConsoleIo.cpp"
|
RelativePath=".\BootConsoleIo.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootCrt.asm"
|
RelativePath=".\BootCrt.asm"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootDebug.cpp"
|
RelativePath=".\BootDebug.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootDiskIo.cpp"
|
RelativePath=".\BootDiskIo.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootEncryptedIo.cpp"
|
RelativePath=".\BootEncryptedIo.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootMain.cpp"
|
RelativePath=".\BootMain.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootMemory.cpp"
|
RelativePath=".\BootMemory.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootSector.asm"
|
RelativePath=".\BootSector.asm"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\Decompressor.c"
|
RelativePath=".\Decompressor.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\IntFilter.cpp"
|
RelativePath=".\IntFilter.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\Platform.cpp"
|
RelativePath=".\Platform.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Common"
|
Name="Common"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Common\Crc.c"
|
RelativePath="..\..\Common\Crc.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Common\Crypto.c"
|
RelativePath="..\..\Common\Crypto.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Common\Endian.c"
|
RelativePath="..\..\Common\Endian.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Common\Pkcs5.c"
|
RelativePath="..\..\Common\Pkcs5.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Common\Volumes.c"
|
RelativePath="..\..\Common\Volumes.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Common\Xts.c"
|
RelativePath="..\..\Common\Xts.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="Crypto"
|
Name="Crypto"
|
||||||
>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Crypto\Aes_hw_cpu.asm"
|
RelativePath="..\..\Crypto\Aes_hw_cpu.asm"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Crypto\AesSmall.c"
|
RelativePath="..\..\Crypto\AesSmall.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Crypto\AesSmall_x86.asm"
|
RelativePath="..\..\Crypto\AesSmall_x86.asm"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Crypto\Rmd160.c"
|
RelativePath="..\..\Crypto\CamelliaSmall.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Crypto\Serpent.c"
|
RelativePath="..\..\Crypto\Rmd160.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Crypto\Sha2Small.c"
|
RelativePath="..\..\Crypto\Serpent.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Crypto\Twofish.c"
|
RelativePath="..\..\Crypto\Sha2Small.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
<File
|
||||||
</Filter>
|
RelativePath="..\..\Crypto\Twofish.c"
|
||||||
<Filter
|
>
|
||||||
Name="Header Files"
|
</File>
|
||||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
</Filter>
|
||||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
</Filter>
|
||||||
>
|
<Filter
|
||||||
<File
|
Name="Header Files"
|
||||||
RelativePath=".\Bios.h"
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
>
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||||
</File>
|
>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootCommon.h"
|
RelativePath=".\Bios.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootConfig.h"
|
RelativePath=".\BootCommon.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootConsoleIo.h"
|
RelativePath=".\BootConfig.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootDebug.h"
|
RelativePath=".\BootConsoleIo.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootDefs.h"
|
RelativePath=".\BootDebug.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootDiskIo.h"
|
RelativePath=".\BootDefs.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootEncryptedIo.h"
|
RelativePath=".\BootDiskIo.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootMain.h"
|
RelativePath=".\BootEncryptedIo.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootMemory.h"
|
RelativePath=".\BootMain.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\BootStrings.h"
|
RelativePath=".\BootMemory.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\IntFilter.h"
|
RelativePath=".\BootStrings.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\Platform.h"
|
RelativePath=".\IntFilter.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
<File
|
||||||
<Filter
|
RelativePath=".\Platform.h"
|
||||||
Name="Build Files"
|
>
|
||||||
>
|
</File>
|
||||||
<File
|
</Filter>
|
||||||
RelativePath=".\Makefile"
|
<Filter
|
||||||
>
|
Name="Build Files"
|
||||||
</File>
|
>
|
||||||
</Filter>
|
<File
|
||||||
</Files>
|
RelativePath=".\Makefile"
|
||||||
<Globals>
|
>
|
||||||
</Globals>
|
</File>
|
||||||
</VisualStudioProject>
|
</Filter>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
||||||
|
|||||||
@@ -0,0 +1,273 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Release Loader|Win32">
|
||||||
|
<Configuration>Release Loader</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{8B7F059F-E4C7-4E11-88F5-EE8B8433072E}</ProjectGuid>
|
||||||
|
<RootNamespace>Boot</RootNamespace>
|
||||||
|
<Keyword>MakeFileProj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Makefile</ConfigurationType>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Makefile</ConfigurationType>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
|
||||||
|
<NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">md Release 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1
|
||||||
|
|
||||||
|
md Release_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
md Release_AES 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES
|
||||||
|
|
||||||
|
md Release_AES_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
md Release_Serpent 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT
|
||||||
|
|
||||||
|
md Release_Serpent_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
md Release_Twofish 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH
|
||||||
|
|
||||||
|
md Release_Twofish_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
md Release_Camellia 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA
|
||||||
|
|
||||||
|
md Release_Camellia_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
md Rescue 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1
|
||||||
|
|
||||||
|
md Rescue_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1 SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
md Rescue_AES 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1
|
||||||
|
|
||||||
|
md Rescue_AES_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1 SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
md Rescue_Serpent 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1
|
||||||
|
|
||||||
|
md Rescue_Serpent_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1 SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
md Rescue_Twofish 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1
|
||||||
|
|
||||||
|
md Rescue_Twofish_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1 SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
md Rescue_Camellia 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1
|
||||||
|
|
||||||
|
md Rescue_Camellia_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1 SINGLE_PRF=SHA2</NMakeBuildCommandLine>
|
||||||
|
<NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">del /q /s Release >NUL:
|
||||||
|
md Release 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1
|
||||||
|
|
||||||
|
del /q /s Release_SHA2 >NUL:
|
||||||
|
md Release_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
del /q /s Release_AES >NUL:
|
||||||
|
md Release_AES 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES
|
||||||
|
|
||||||
|
del /q /s Release_AES_SHA2 >NUL:
|
||||||
|
md Release_AES_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
del /q /s Release_Serpent >NUL:
|
||||||
|
md Release_Serpent 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT
|
||||||
|
|
||||||
|
del /q /s Release_Serpent_SHA2 >NUL:
|
||||||
|
md Release_Serpent_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
del /q /s Release_Twofish >NUL:
|
||||||
|
md Release_Twofish 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH
|
||||||
|
|
||||||
|
del /q /s Release_Twofish_SHA2 >NUL:
|
||||||
|
md Release_Twofish_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
del /q /s Release_Camellia >NUL:
|
||||||
|
md Release_Camellia 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA
|
||||||
|
|
||||||
|
del /q /s Release_Camellia_SHA2 >NUL:
|
||||||
|
md Release_Camellia_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
del /q /s Rescue >NUL:
|
||||||
|
md Rescue 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1
|
||||||
|
|
||||||
|
del /q /s Rescue_SHA2 >NUL:
|
||||||
|
md Rescue_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 RESCUE_DISK=1 SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
del /q /s Rescue_AES >NUL:
|
||||||
|
md Rescue_AES 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1
|
||||||
|
|
||||||
|
del /q /s Rescue_AES_SHA2 >NUL:
|
||||||
|
md Rescue_AES_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1 SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
del /q /s Rescue_Serpent >NUL:
|
||||||
|
md Rescue_Serpent 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1
|
||||||
|
|
||||||
|
del /q /s Rescue_Serpent_SHA2 >NUL:
|
||||||
|
md Rescue_Serpent_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1 SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
del /q /s Rescue_Twofish >NUL:
|
||||||
|
md Rescue_Twofish 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1
|
||||||
|
|
||||||
|
del /q /s Rescue_Twofish_SHA2 >NUL:
|
||||||
|
md Rescue_Twofish_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1 SINGLE_PRF=SHA2
|
||||||
|
|
||||||
|
del /q /s Rescue_Camellia >NUL:
|
||||||
|
md Rescue_Camellia 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1
|
||||||
|
|
||||||
|
del /q /s Rescue_Camellia_SHA2 >NUL:
|
||||||
|
md Rescue_Camellia_SHA2 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1 SINGLE_PRF=SHA2</NMakeReBuildCommandLine>
|
||||||
|
<NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">del /q /s Release Release_AES Release_Serpent Release_Twofish Release_Camellia Rescue Rescue_AES Rescue_Serpent Rescue_Twofish Rescue_Camellia >NUL:
|
||||||
|
del /q /s Release_SHA2 Release_AES_SHA2 Release_Serpent_SHA2 Release_Twofish_SHA2 Release_Camellia_SHA2 Rescue_SHA2 Rescue_AES_SHA2 Rescue_Serpent_SHA2 Rescue_Twofish_SHA2 Rescue_Camellia_SHA2 >NUL:
|
||||||
|
</NMakeCleanCommandLine>
|
||||||
|
<NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\BootLoader.com</NMakeOutput>
|
||||||
|
<NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
|
||||||
|
<NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir);$(SolutionDir)\Common;$(SolutionDir)\Crypto;$(MSVC16_ROOT)\Include;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
|
||||||
|
<NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
|
||||||
|
<NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
|
||||||
|
<NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">$(Configuration)\</OutDir>
|
||||||
|
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">$(Configuration)\</IntDir>
|
||||||
|
<NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">md Release 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1
|
||||||
|
|
||||||
|
md Release_AES 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES
|
||||||
|
|
||||||
|
md Release_Serpent 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT
|
||||||
|
|
||||||
|
md Release_Twofish 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH</NMakeBuildCommandLine>
|
||||||
|
<NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">del /q /s Release >NUL:
|
||||||
|
md Release 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1
|
||||||
|
|
||||||
|
del /q /s Release_AES >NUL:
|
||||||
|
md Release_AES 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES
|
||||||
|
|
||||||
|
del /q /s Release_Serpent >NUL:
|
||||||
|
md Release_Serpent 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT
|
||||||
|
|
||||||
|
del /q /s Release_Twofish >NUL:
|
||||||
|
md Release_Twofish 2>NUL:
|
||||||
|
nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH</NMakeReBuildCommandLine>
|
||||||
|
<NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">del /q /s Release Release_AES Release_Serpent Release_Twofish >NUL:</NMakeCleanCommandLine>
|
||||||
|
<NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">Release\BootLoader.com</NMakeOutput>
|
||||||
|
<NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
|
||||||
|
<NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">$(SolutionDir);$(SolutionDir)\Common;$(SolutionDir)\Crypto;$(MSVC16_ROOT)\Include;$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
|
||||||
|
<NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
|
||||||
|
<NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
|
||||||
|
<NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Loader|Win32'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="BootConfig.cpp" />
|
||||||
|
<ClCompile Include="BootConsoleIo.cpp" />
|
||||||
|
<ClCompile Include="BootDebug.cpp" />
|
||||||
|
<ClCompile Include="BootDiskIo.cpp" />
|
||||||
|
<ClCompile Include="BootEncryptedIo.cpp" />
|
||||||
|
<ClCompile Include="BootMain.cpp" />
|
||||||
|
<ClCompile Include="BootMemory.cpp" />
|
||||||
|
<ClCompile Include="Decompressor.c" />
|
||||||
|
<ClCompile Include="IntFilter.cpp" />
|
||||||
|
<ClCompile Include="Platform.cpp" />
|
||||||
|
<ClCompile Include="..\..\Common\Crc.c" />
|
||||||
|
<ClCompile Include="..\..\Common\Crypto.c" />
|
||||||
|
<ClCompile Include="..\..\Common\Endian.c" />
|
||||||
|
<ClCompile Include="..\..\Common\Pkcs5.c" />
|
||||||
|
<ClCompile Include="..\..\Common\Volumes.c" />
|
||||||
|
<ClCompile Include="..\..\Common\Xts.c" />
|
||||||
|
<ClCompile Include="..\..\Crypto\AesSmall.c" />
|
||||||
|
<ClCompile Include="..\..\Crypto\CamelliaSmall.c" />
|
||||||
|
<ClCompile Include="..\..\Crypto\Rmd160.c" />
|
||||||
|
<ClCompile Include="..\..\Crypto\Serpent.c" />
|
||||||
|
<ClCompile Include="..\..\Crypto\Sha2Small.c" />
|
||||||
|
<ClCompile Include="..\..\Crypto\Twofish.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="BootCrt.asm" />
|
||||||
|
<None Include="BootSector.asm" />
|
||||||
|
<None Include="..\..\Crypto\Aes_hw_cpu.asm" />
|
||||||
|
<None Include="..\..\Crypto\AesSmall_x86.asm" />
|
||||||
|
<None Include="Makefile" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="Bios.h" />
|
||||||
|
<ClInclude Include="BootCommon.h" />
|
||||||
|
<ClInclude Include="BootConfig.h" />
|
||||||
|
<ClInclude Include="BootConsoleIo.h" />
|
||||||
|
<ClInclude Include="BootDebug.h" />
|
||||||
|
<ClInclude Include="BootDefs.h" />
|
||||||
|
<ClInclude Include="BootDiskIo.h" />
|
||||||
|
<ClInclude Include="BootEncryptedIo.h" />
|
||||||
|
<ClInclude Include="BootMain.h" />
|
||||||
|
<ClInclude Include="BootMemory.h" />
|
||||||
|
<ClInclude Include="BootStrings.h" />
|
||||||
|
<ClInclude Include="IntFilter.h" />
|
||||||
|
<ClInclude Include="Platform.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source Files\Common">
|
||||||
|
<UniqueIdentifier>{851ac58e-36e0-4dfa-a208-6da2330f5959}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source Files\Crypto">
|
||||||
|
<UniqueIdentifier>{76da5bdb-fe11-430a-8667-2fe7f9ac3667}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Build Files">
|
||||||
|
<UniqueIdentifier>{732efef1-4474-4845-aa74-17b852cc0f2e}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="BootConfig.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="BootConsoleIo.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="BootDebug.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="BootDiskIo.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="BootEncryptedIo.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="BootMain.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="BootMemory.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="Decompressor.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="IntFilter.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="Platform.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Common\Crc.c">
|
||||||
|
<Filter>Source Files\Common</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Common\Crypto.c">
|
||||||
|
<Filter>Source Files\Common</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Common\Endian.c">
|
||||||
|
<Filter>Source Files\Common</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Common\Pkcs5.c">
|
||||||
|
<Filter>Source Files\Common</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Common\Volumes.c">
|
||||||
|
<Filter>Source Files\Common</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Common\Xts.c">
|
||||||
|
<Filter>Source Files\Common</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Crypto\AesSmall.c">
|
||||||
|
<Filter>Source Files\Crypto</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Crypto\CamelliaSmall.c">
|
||||||
|
<Filter>Source Files\Crypto</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Crypto\Rmd160.c">
|
||||||
|
<Filter>Source Files\Crypto</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Crypto\Serpent.c">
|
||||||
|
<Filter>Source Files\Crypto</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Crypto\Sha2Small.c">
|
||||||
|
<Filter>Source Files\Crypto</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Crypto\Twofish.c">
|
||||||
|
<Filter>Source Files\Crypto</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="BootCrt.asm">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="BootSector.asm">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\Crypto\Aes_hw_cpu.asm">
|
||||||
|
<Filter>Source Files\Crypto</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\Crypto\AesSmall_x86.asm">
|
||||||
|
<Filter>Source Files\Crypto</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="Makefile">
|
||||||
|
<Filter>Build Files</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="Bios.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="BootCommon.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="BootConfig.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="BootConsoleIo.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="BootDebug.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="BootDefs.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="BootDiskIo.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="BootEncryptedIo.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="BootMain.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="BootMemory.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="BootStrings.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="IntFilter.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="Platform.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
</Project>
|
||||||
+214
-78
@@ -1,78 +1,214 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#ifndef TC_HEADER_Boot_BootCommon
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#define TC_HEADER_Boot_BootCommon
|
code distribution packages.
|
||||||
|
*/
|
||||||
#include "Common/Password.h"
|
|
||||||
#include "BootDefs.h"
|
#ifndef TC_HEADER_Boot_BootCommon
|
||||||
|
#define TC_HEADER_Boot_BootCommon
|
||||||
// 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 0x010e
|
#include "Common/Password.h"
|
||||||
|
#include "BootDefs.h"
|
||||||
#define TC_BOOT_LOADER_AREA_SIZE (TC_BOOT_LOADER_AREA_SECTOR_COUNT * TC_SECTOR_SIZE_BIOS)
|
|
||||||
|
// The user will be advised to upgrade the rescue disk if upgrading from the following or any previous version
|
||||||
#define TC_BOOT_VOLUME_HEADER_SECTOR (TC_BOOT_LOADER_AREA_SECTOR_COUNT - 1)
|
#define TC_RESCUE_DISK_UPGRADE_NOTICE_MAX_VERSION 0x0117
|
||||||
#define TC_BOOT_VOLUME_HEADER_SECTOR_OFFSET (TC_BOOT_VOLUME_HEADER_SECTOR * TC_SECTOR_SIZE_BIOS)
|
|
||||||
|
#define TC_BOOT_LOADER_AREA_SIZE (TC_BOOT_LOADER_AREA_SECTOR_COUNT * TC_SECTOR_SIZE_BIOS)
|
||||||
#define TC_CD_BOOTSECTOR_OFFSET 0xd000
|
|
||||||
#define TC_CD_BOOT_LOADER_SECTOR 26
|
#define TC_BOOT_VOLUME_HEADER_SECTOR (TC_BOOT_LOADER_AREA_SECTOR_COUNT - 1)
|
||||||
|
#define TC_BOOT_VOLUME_HEADER_SECTOR_OFFSET (TC_BOOT_VOLUME_HEADER_SECTOR * TC_SECTOR_SIZE_BIOS)
|
||||||
#define TC_ORIG_BOOT_LOADER_BACKUP_SECTOR TC_BOOT_LOADER_AREA_SECTOR_COUNT
|
|
||||||
#define TC_ORIG_BOOT_LOADER_BACKUP_SECTOR_OFFSET (TC_ORIG_BOOT_LOADER_BACKUP_SECTOR * TC_SECTOR_SIZE_BIOS)
|
#define TC_CD_BOOTSECTOR_OFFSET 0xd000
|
||||||
|
#define TC_CD_BOOT_LOADER_SECTOR 26
|
||||||
#define TC_BOOT_LOADER_BACKUP_RESCUE_DISK_SECTOR (TC_ORIG_BOOT_LOADER_BACKUP_SECTOR + TC_BOOT_LOADER_AREA_SECTOR_COUNT)
|
|
||||||
#define TC_BOOT_LOADER_BACKUP_RESCUE_DISK_SECTOR_OFFSET (TC_BOOT_LOADER_BACKUP_RESCUE_DISK_SECTOR * TC_SECTOR_SIZE_BIOS)
|
#define TC_ORIG_BOOT_LOADER_BACKUP_SECTOR TC_BOOT_LOADER_AREA_SECTOR_COUNT
|
||||||
|
#define TC_ORIG_BOOT_LOADER_BACKUP_SECTOR_OFFSET (TC_ORIG_BOOT_LOADER_BACKUP_SECTOR * TC_SECTOR_SIZE_BIOS)
|
||||||
#define TC_MBR_SECTOR 0
|
|
||||||
#define TC_MAX_MBR_BOOT_CODE_SIZE 440
|
#define TC_BOOT_LOADER_BACKUP_RESCUE_DISK_SECTOR (TC_ORIG_BOOT_LOADER_BACKUP_SECTOR + TC_BOOT_LOADER_AREA_SECTOR_COUNT)
|
||||||
|
#define TC_BOOT_LOADER_BACKUP_RESCUE_DISK_SECTOR_OFFSET (TC_BOOT_LOADER_BACKUP_RESCUE_DISK_SECTOR * TC_SECTOR_SIZE_BIOS)
|
||||||
#define TC_MAX_EXTRA_BOOT_PARTITION_SIZE (512UL * 1024UL * 1024UL)
|
|
||||||
|
#define TC_MBR_SECTOR 0
|
||||||
|
#define TC_MAX_MBR_BOOT_CODE_SIZE 440
|
||||||
#pragma pack (1)
|
|
||||||
|
#define TC_MAX_EXTRA_BOOT_PARTITION_SIZE (512UL * 1024UL * 1024UL)
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
byte Flags;
|
#pragma pack (1)
|
||||||
} BootSectorConfiguration;
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
// Modifying this value can introduce incompatibility with previous versions
|
byte Flags;
|
||||||
#define TC_BOOT_LOADER_ARGS_OFFSET 0x10
|
} BootSectorConfiguration;
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
// Modifying this value can introduce incompatibility with previous versions
|
||||||
// Modifying this structure can introduce incompatibility with previous versions
|
#define TC_BOOT_LOADER_ARGS_OFFSET 0x10
|
||||||
char Signature[8];
|
|
||||||
uint16 BootLoaderVersion;
|
typedef struct
|
||||||
uint16 CryptoInfoOffset;
|
{
|
||||||
uint16 CryptoInfoLength;
|
// Modifying this structure can introduce incompatibility with previous versions
|
||||||
uint32 HeaderSaltCrc32;
|
char Signature[8];
|
||||||
Password BootPassword;
|
uint16 BootLoaderVersion;
|
||||||
uint64 HiddenSystemPartitionStart;
|
uint16 CryptoInfoOffset;
|
||||||
uint64 DecoySystemPartitionStart;
|
uint16 CryptoInfoLength;
|
||||||
uint32 Flags;
|
uint32 HeaderSaltCrc32;
|
||||||
uint32 BootDriveSignature;
|
Password BootPassword;
|
||||||
|
uint64 HiddenSystemPartitionStart;
|
||||||
uint32 BootArgumentsCrc32;
|
uint64 DecoySystemPartitionStart;
|
||||||
|
uint32 Flags;
|
||||||
} BootArguments;
|
uint32 BootDriveSignature;
|
||||||
|
|
||||||
// Modifying these values can introduce incompatibility with previous versions
|
uint32 BootArgumentsCrc32;
|
||||||
#define TC_BOOT_ARGS_FLAG_EXTRA_BOOT_PARTITION 0x1
|
|
||||||
|
} BootArguments;
|
||||||
#pragma pack ()
|
|
||||||
|
// Modifying these values can introduce incompatibility with previous versions
|
||||||
// Boot arguments signature should not be defined as a static string
|
#define TC_BOOT_ARGS_FLAG_EXTRA_BOOT_PARTITION 0x1
|
||||||
// Modifying these values can introduce incompatibility with previous versions
|
|
||||||
#define TC_SET_BOOT_ARGUMENTS_SIGNATURE(SG) do { SG[0] = 'T'; SG[1] = 'R'; SG[2] = 'U'; SG[3] = 'E'; SG[4] = 0x11; SG[5] = 0x23; SG[6] = 0x45; SG[7] = 0x66; } while (FALSE)
|
#pragma pack ()
|
||||||
#define TC_IS_BOOT_ARGUMENTS_SIGNATURE(SG) (SG[0] == 'T' && SG[1] == 'R' && SG[2] == 'U' && SG[3] == 'E' && SG[4] == 0x11 && SG[5] == 0x23 && SG[6] == 0x45 && SG[7] == 0x66)
|
|
||||||
|
// Boot arguments signature should not be defined as a static string
|
||||||
|
// Modifying these values can introduce incompatibility with previous versions
|
||||||
#endif // TC_HEADER_Boot_BootCommon
|
#define TC_SET_BOOT_ARGUMENTS_SIGNATURE(SG) do { SG[0] = 'T'; SG[1] = 'R'; SG[2] = 'U'; SG[3] = 'E'; SG[4] = 0x11; SG[5] = 0x23; SG[6] = 0x45; SG[7] = 0x66; } while (FALSE)
|
||||||
|
#define TC_IS_BOOT_ARGUMENTS_SIGNATURE(SG) (SG[0] == 'T' && SG[1] == 'R' && SG[2] == 'U' && SG[3] == 'E' && SG[4] == 0x11 && SG[5] == 0x23 && SG[6] == 0x45 && SG[7] == 0x66)
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && !defined(TC_WINDOWS_BOOT)
|
||||||
|
|
||||||
|
#define DCS_DISK_ENTRY_LIST_HEADER_SIGN SIGNATURE_64 ('D','C','S','D','E','L','S','T')
|
||||||
|
|
||||||
|
#define DE_IDX_CRYPTOHEADER 0
|
||||||
|
#define DE_IDX_LIST 1
|
||||||
|
#define DE_IDX_DISKID 2
|
||||||
|
#define DE_IDX_MAINGPTHDR 3
|
||||||
|
#define DE_IDX_MAINGPTENTRYS 4
|
||||||
|
#define DE_IDX_ALTGPTHDR 5
|
||||||
|
#define DE_IDX_ALTGPTENTRYS 6
|
||||||
|
#define DE_IDX_EXEC 7
|
||||||
|
#define DE_IDX_PWDCACHE 8
|
||||||
|
#define DE_IDX_RND 9
|
||||||
|
#define DE_IDX_TOTAL 10
|
||||||
|
static_assert(DE_IDX_TOTAL <= 15, "DE_IDX_TOTAL too big");
|
||||||
|
|
||||||
|
enum DcsDiskEntryTypes {
|
||||||
|
DE_Unused = 0,
|
||||||
|
DE_Sectors,
|
||||||
|
DE_List,
|
||||||
|
DE_DISKID,
|
||||||
|
DE_ExecParams,
|
||||||
|
DE_PwdCache,
|
||||||
|
DE_Rnd
|
||||||
|
};
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct _SECREGION_BOOT_PARAMS {
|
||||||
|
uint64 Ptr;
|
||||||
|
uint32 Size;
|
||||||
|
uint32 Crc;
|
||||||
|
} SECREGION_BOOT_PARAMS;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32 Data1;
|
||||||
|
uint16 Data2;
|
||||||
|
uint16 Data3;
|
||||||
|
byte Data4[8];
|
||||||
|
} DCS_GUID;
|
||||||
|
|
||||||
|
// DE types
|
||||||
|
typedef struct _DCS_DISK_ENTRY_SECTORS {
|
||||||
|
uint32 Type;
|
||||||
|
uint32 Offset; // Offset in memory
|
||||||
|
uint64 Reserved;
|
||||||
|
uint64 Start; // Start on disk (byte)
|
||||||
|
uint64 Length; // length on disk (byte)
|
||||||
|
} DCS_DISK_ENTRY_SECTORS;
|
||||||
|
static_assert(sizeof(DCS_DISK_ENTRY_SECTORS) == 32, "Wrong size DCS_DISK_ENTRY_SECTORS");
|
||||||
|
|
||||||
|
typedef struct _DCS_DISK_ENTRY_PARAMS {
|
||||||
|
uint32 Type;
|
||||||
|
uint32 Offset;
|
||||||
|
uint64 Reserved[2];
|
||||||
|
uint64 Length; // size of data
|
||||||
|
} DCS_DISK_ENTRY_PARAMS;
|
||||||
|
static_assert(sizeof(DCS_DISK_ENTRY_PARAMS) == 32, "Wrong size DCS_DISK_ENTRY_PARAMS");
|
||||||
|
|
||||||
|
typedef struct _DCS_DISK_ENTRY_DISKID {
|
||||||
|
uint32 Type;
|
||||||
|
uint32 MbrID;
|
||||||
|
uint64 ReservedDiskId;
|
||||||
|
DCS_GUID GptID;
|
||||||
|
} DCS_DISK_ENTRY_DISKID;
|
||||||
|
static_assert(sizeof(DCS_DISK_ENTRY_DISKID) == 32, "Wrong size DCS_DISK_ENTRY_DISKID");
|
||||||
|
|
||||||
|
#pragma warning(disable:4201)
|
||||||
|
typedef struct _DCS_DISK_ENTRY {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
uint32 Type;
|
||||||
|
uint32 Offset;
|
||||||
|
byte reserved[16];
|
||||||
|
uint64 Length; // size of structure at Offset
|
||||||
|
};
|
||||||
|
DCS_DISK_ENTRY_SECTORS Sectors;
|
||||||
|
DCS_DISK_ENTRY_DISKID DiskId;
|
||||||
|
DCS_DISK_ENTRY_PARAMS Prm;
|
||||||
|
};
|
||||||
|
} DCS_DISK_ENTRY;
|
||||||
|
#pragma warning(default:4201)
|
||||||
|
static_assert(sizeof(DCS_DISK_ENTRY) == 32, "Wrong size DCS_DISK_ENTRY");
|
||||||
|
|
||||||
|
// Static compile time checks field offsets
|
||||||
|
#ifndef FIELD_OFFSET
|
||||||
|
#define FIELD_OFFSET(t, f) ((UINTN)(&((t*)0)->f))
|
||||||
|
#endif
|
||||||
|
static_assert(FIELD_OFFSET(DCS_DISK_ENTRY, Type) == FIELD_OFFSET(DCS_DISK_ENTRY_SECTORS, Type), "Wrong Type offset");
|
||||||
|
static_assert(FIELD_OFFSET(DCS_DISK_ENTRY, Type) == FIELD_OFFSET(DCS_DISK_ENTRY_DISKID, Type), "Wrong Type offset");
|
||||||
|
static_assert(FIELD_OFFSET(DCS_DISK_ENTRY, Type) == FIELD_OFFSET(DCS_DISK_ENTRY_PARAMS, Type), "Wrong Type offset");
|
||||||
|
static_assert(FIELD_OFFSET(DCS_DISK_ENTRY, Length) == FIELD_OFFSET(DCS_DISK_ENTRY_SECTORS, Length), "Wrong Length offset");
|
||||||
|
static_assert(FIELD_OFFSET(DCS_DISK_ENTRY, Length) == FIELD_OFFSET(DCS_DISK_ENTRY_PARAMS, Length), "Wrong Length offset");
|
||||||
|
static_assert(FIELD_OFFSET(DCS_DISK_ENTRY, Offset) == FIELD_OFFSET(DCS_DISK_ENTRY_SECTORS, Offset), "Wrong Offset offset");
|
||||||
|
static_assert(FIELD_OFFSET(DCS_DISK_ENTRY, Offset) == FIELD_OFFSET(DCS_DISK_ENTRY_PARAMS, Offset), "Wrong Offset offset");
|
||||||
|
|
||||||
|
// DE type specific data
|
||||||
|
// DE List
|
||||||
|
typedef struct _DCS_DISK_ENTRY_LIST {
|
||||||
|
// EFI_TABLE_HEADER
|
||||||
|
uint64 Signature;
|
||||||
|
uint32 Revision;
|
||||||
|
uint32 HeaderSize; //< The size, in bytes, of the entire table including the EFI_TABLE_HEADER.
|
||||||
|
uint32 CRC32; //< The 32-bit CRC for the entire table. This value is computed by setting this field to 0, and computing the 32-bit CRC for HeaderSize bytes.
|
||||||
|
uint32 Reserved; //< Reserved field that must be set to 0.
|
||||||
|
//
|
||||||
|
uint32 Count;
|
||||||
|
uint32 DataSize;
|
||||||
|
//
|
||||||
|
DCS_DISK_ENTRY DE[15];
|
||||||
|
} DCS_DISK_ENTRY_LIST;
|
||||||
|
static_assert(sizeof(DCS_DISK_ENTRY_LIST) == 512, "Wrong size DCS_DISK_ENTRY_LIST");
|
||||||
|
|
||||||
|
typedef struct _DCS_DEP_EXEC {
|
||||||
|
DCS_GUID ExecPartGuid;
|
||||||
|
uint16 ExecCmd[248];
|
||||||
|
} DCS_DEP_EXEC;
|
||||||
|
static_assert(sizeof(DCS_DEP_EXEC) == 512, "Wrong size DCS_DEP_EXEC");
|
||||||
|
|
||||||
|
#define DCS_DEP_PWD_CACHE_SIGN SIGNATURE_64 ('P','W','D','C','A','C','H','E')
|
||||||
|
typedef struct _DCS_DEP_PWD_CACHE {
|
||||||
|
uint64 Sign;
|
||||||
|
uint32 CRC;
|
||||||
|
uint32 Count;
|
||||||
|
Password Pwd[4];
|
||||||
|
int32 Pim[4];
|
||||||
|
byte pad[512 - 8 - 4 - 4 - (sizeof(Password) + 4) * 4];
|
||||||
|
} DCS_DEP_PWD_CACHE;
|
||||||
|
static_assert(sizeof(DCS_DEP_PWD_CACHE) == 512, "Wrong size DCS_DEP_PWD_CACHE");
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
#endif // #if !defined(TC_WINDOWS_BOOT)
|
||||||
|
|
||||||
|
#endif // TC_HEADER_Boot_BootCommon
|
||||||
|
|||||||
+102
-90
@@ -1,90 +1,102 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-2012 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#include "BootConfig.h"
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
|
code distribution packages.
|
||||||
byte BootSectorFlags;
|
*/
|
||||||
|
|
||||||
byte BootLoaderDrive;
|
#include "BootConfig.h"
|
||||||
byte BootDrive;
|
|
||||||
bool BootDriveGeometryValid = false;
|
byte BootSectorFlags;
|
||||||
bool PreventNormalSystemBoot = false;
|
|
||||||
bool PreventBootMenu = false;
|
byte BootLoaderDrive;
|
||||||
char CustomUserMessage[TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH + 1];
|
byte BootDrive;
|
||||||
uint32 OuterVolumeBackupHeaderCrc;
|
bool BootDriveGeometryValid = false;
|
||||||
|
bool PreventNormalSystemBoot = false;
|
||||||
bool BootStarted = false;
|
bool PreventBootMenu = false;
|
||||||
|
char CustomUserMessage[TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH + 1];
|
||||||
DriveGeometry BootDriveGeometry;
|
uint32 OuterVolumeBackupHeaderCrc;
|
||||||
|
|
||||||
CRYPTO_INFO *BootCryptoInfo;
|
bool BootStarted = false;
|
||||||
Partition EncryptedVirtualPartition;
|
|
||||||
|
DriveGeometry BootDriveGeometry;
|
||||||
Partition ActivePartition;
|
|
||||||
Partition PartitionFollowingActive;
|
CRYPTO_INFO *BootCryptoInfo;
|
||||||
bool ExtraBootPartitionPresent = false;
|
Partition EncryptedVirtualPartition;
|
||||||
uint64 HiddenVolumeStartUnitNo;
|
|
||||||
uint64 HiddenVolumeStartSector;
|
Partition ActivePartition;
|
||||||
|
Partition PartitionFollowingActive;
|
||||||
#ifndef TC_WINDOWS_BOOT_RESCUE_DISK_MODE
|
bool ExtraBootPartitionPresent = false;
|
||||||
|
uint64 PimValueOrHiddenVolumeStartUnitNo; // reuse this variable for stored PIM value to reduce memory usage
|
||||||
void ReadBootSectorUserConfiguration ()
|
uint64 HiddenVolumeStartSector;
|
||||||
{
|
|
||||||
byte userConfig;
|
#ifndef TC_WINDOWS_BOOT_RESCUE_DISK_MODE
|
||||||
|
|
||||||
AcquireSectorBuffer();
|
void ReadBootSectorUserConfiguration ()
|
||||||
|
{
|
||||||
if (ReadWriteMBR (false, BootLoaderDrive, true) != BiosResultSuccess)
|
byte userConfig;
|
||||||
goto ret;
|
|
||||||
|
AcquireSectorBuffer();
|
||||||
userConfig = SectorBuffer[TC_BOOT_SECTOR_USER_CONFIG_OFFSET];
|
|
||||||
|
if (ReadWriteMBR (false, BootLoaderDrive, true) != BiosResultSuccess)
|
||||||
#ifdef TC_WINDOWS_BOOT_AES
|
goto ret;
|
||||||
EnableHwEncryption (!(userConfig & TC_BOOT_USER_CFG_FLAG_DISABLE_HW_ENCRYPTION));
|
|
||||||
#endif
|
userConfig = SectorBuffer[TC_BOOT_SECTOR_USER_CONFIG_OFFSET];
|
||||||
|
|
||||||
PreventBootMenu = (userConfig & TC_BOOT_USER_CFG_FLAG_DISABLE_ESC);
|
#ifdef TC_WINDOWS_BOOT_AES
|
||||||
|
EnableHwEncryption (!(userConfig & TC_BOOT_USER_CFG_FLAG_DISABLE_HW_ENCRYPTION));
|
||||||
memcpy (CustomUserMessage, SectorBuffer + TC_BOOT_SECTOR_USER_MESSAGE_OFFSET, TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH);
|
#endif
|
||||||
CustomUserMessage[TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH] = 0;
|
|
||||||
|
PreventBootMenu = (userConfig & TC_BOOT_USER_CFG_FLAG_DISABLE_ESC);
|
||||||
if (userConfig & TC_BOOT_USER_CFG_FLAG_SILENT_MODE)
|
|
||||||
{
|
memcpy (CustomUserMessage, SectorBuffer + TC_BOOT_SECTOR_USER_MESSAGE_OFFSET, TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH);
|
||||||
if (CustomUserMessage[0])
|
CustomUserMessage[TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH] = 0;
|
||||||
{
|
|
||||||
InitVideoMode();
|
if (userConfig & TC_BOOT_USER_CFG_FLAG_SILENT_MODE)
|
||||||
Print (CustomUserMessage);
|
{
|
||||||
}
|
if (CustomUserMessage[0])
|
||||||
|
{
|
||||||
DisableScreenOutput();
|
InitVideoMode();
|
||||||
}
|
Print (CustomUserMessage);
|
||||||
|
}
|
||||||
OuterVolumeBackupHeaderCrc = *(uint32 *) (SectorBuffer + TC_BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_OFFSET);
|
|
||||||
|
DisableScreenOutput();
|
||||||
ret:
|
}
|
||||||
ReleaseSectorBuffer();
|
|
||||||
}
|
if (userConfig & TC_BOOT_USER_CFG_FLAG_DISABLE_PIM)
|
||||||
|
{
|
||||||
|
PimValueOrHiddenVolumeStartUnitNo.LowPart = 0;
|
||||||
BiosResult UpdateBootSectorConfiguration (byte drive)
|
memcpy (&PimValueOrHiddenVolumeStartUnitNo.LowPart, SectorBuffer + TC_BOOT_SECTOR_PIM_VALUE_OFFSET, TC_BOOT_SECTOR_PIM_VALUE_SIZE);
|
||||||
{
|
}
|
||||||
AcquireSectorBuffer();
|
else
|
||||||
|
PimValueOrHiddenVolumeStartUnitNo.LowPart = -1;
|
||||||
BiosResult result = ReadWriteMBR (false, drive);
|
|
||||||
if (result != BiosResultSuccess)
|
OuterVolumeBackupHeaderCrc = *(uint32 *) (SectorBuffer + TC_BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_OFFSET);
|
||||||
goto ret;
|
|
||||||
|
ret:
|
||||||
SectorBuffer[TC_BOOT_SECTOR_CONFIG_OFFSET] = BootSectorFlags;
|
ReleaseSectorBuffer();
|
||||||
result = ReadWriteMBR (true, drive);
|
}
|
||||||
|
|
||||||
ret:
|
|
||||||
ReleaseSectorBuffer();
|
BiosResult UpdateBootSectorConfiguration (byte drive)
|
||||||
return result;
|
{
|
||||||
}
|
AcquireSectorBuffer();
|
||||||
|
|
||||||
#endif // !TC_WINDOWS_BOOT_RESCUE_DISK_MODE
|
BiosResult result = ReadWriteMBR (false, drive);
|
||||||
|
if (result != BiosResultSuccess)
|
||||||
|
goto ret;
|
||||||
|
|
||||||
|
SectorBuffer[TC_BOOT_SECTOR_CONFIG_OFFSET] = BootSectorFlags;
|
||||||
|
result = ReadWriteMBR (true, drive);
|
||||||
|
|
||||||
|
ret:
|
||||||
|
ReleaseSectorBuffer();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // !TC_WINDOWS_BOOT_RESCUE_DISK_MODE
|
||||||
|
|||||||
@@ -1,42 +1,46 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#ifndef TC_HEADER_Boot_BootConfig
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#define TC_HEADER_Boot_BootConfig
|
code distribution packages.
|
||||||
|
*/
|
||||||
#include "Crypto.h"
|
|
||||||
#include "Platform.h"
|
#ifndef TC_HEADER_Boot_BootConfig
|
||||||
#include "BootDiskIo.h"
|
#define TC_HEADER_Boot_BootConfig
|
||||||
|
|
||||||
extern byte BootSectorFlags;
|
#include "Crypto.h"
|
||||||
|
#include "Platform.h"
|
||||||
extern byte BootLoaderDrive;
|
#include "BootDiskIo.h"
|
||||||
extern byte BootDrive;
|
|
||||||
extern bool BootDriveGeometryValid;
|
extern byte BootSectorFlags;
|
||||||
extern DriveGeometry BootDriveGeometry;
|
|
||||||
extern bool PreventNormalSystemBoot;
|
extern byte BootLoaderDrive;
|
||||||
extern bool PreventBootMenu;
|
extern byte BootDrive;
|
||||||
extern char CustomUserMessage[TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH + 1];
|
extern bool BootDriveGeometryValid;
|
||||||
extern uint32 OuterVolumeBackupHeaderCrc;
|
extern DriveGeometry BootDriveGeometry;
|
||||||
|
extern bool PreventNormalSystemBoot;
|
||||||
extern bool BootStarted;
|
extern bool PreventBootMenu;
|
||||||
|
extern char CustomUserMessage[TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH + 1];
|
||||||
extern CRYPTO_INFO *BootCryptoInfo;
|
extern uint32 OuterVolumeBackupHeaderCrc;
|
||||||
extern Partition EncryptedVirtualPartition;
|
|
||||||
|
extern bool BootStarted;
|
||||||
extern Partition ActivePartition;
|
|
||||||
extern Partition PartitionFollowingActive;
|
extern CRYPTO_INFO *BootCryptoInfo;
|
||||||
extern bool ExtraBootPartitionPresent;
|
extern Partition EncryptedVirtualPartition;
|
||||||
extern uint64 HiddenVolumeStartUnitNo;
|
|
||||||
extern uint64 HiddenVolumeStartSector;
|
extern Partition ActivePartition;
|
||||||
|
extern Partition PartitionFollowingActive;
|
||||||
|
extern bool ExtraBootPartitionPresent;
|
||||||
void ReadBootSectorUserConfiguration ();
|
extern uint64 PimValueOrHiddenVolumeStartUnitNo; // reuse this variable for stored PIM value to reduce memory usage
|
||||||
BiosResult UpdateBootSectorConfiguration (byte drive);
|
extern uint64 HiddenVolumeStartSector;
|
||||||
|
|
||||||
#endif // TC_HEADER_Boot_BootConfig
|
|
||||||
|
void ReadBootSectorUserConfiguration ();
|
||||||
|
BiosResult UpdateBootSectorConfiguration (byte drive);
|
||||||
|
|
||||||
|
#endif // TC_HEADER_Boot_BootConfig
|
||||||
|
|||||||
+339
-330
@@ -1,330 +1,339 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#include "Platform.h"
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#include "Bios.h"
|
code distribution packages.
|
||||||
#include "BootConsoleIo.h"
|
*/
|
||||||
#include "BootDebug.h"
|
|
||||||
#include "BootStrings.h"
|
#include "Platform.h"
|
||||||
|
#include "Bios.h"
|
||||||
|
#include "BootConsoleIo.h"
|
||||||
static int ScreenOutputDisabled = 0;
|
#include "BootDebug.h"
|
||||||
|
#include "BootStrings.h"
|
||||||
void DisableScreenOutput ()
|
|
||||||
{
|
|
||||||
++ScreenOutputDisabled;
|
static int ScreenOutputDisabled = 0;
|
||||||
}
|
|
||||||
|
void DisableScreenOutput ()
|
||||||
|
{
|
||||||
void EnableScreenOutput ()
|
++ScreenOutputDisabled;
|
||||||
{
|
}
|
||||||
--ScreenOutputDisabled;
|
|
||||||
}
|
|
||||||
|
void EnableScreenOutput ()
|
||||||
|
{
|
||||||
void PrintChar (char c)
|
--ScreenOutputDisabled;
|
||||||
{
|
}
|
||||||
#ifdef TC_BOOT_TRACING_ENABLED
|
|
||||||
WriteDebugPort (c);
|
|
||||||
#endif
|
void PrintChar (char c)
|
||||||
|
{
|
||||||
if (ScreenOutputDisabled)
|
#ifdef TC_BOOT_TRACING_ENABLED
|
||||||
return;
|
WriteDebugPort (c);
|
||||||
|
#endif
|
||||||
__asm
|
|
||||||
{
|
if (ScreenOutputDisabled)
|
||||||
mov bx, 7
|
return;
|
||||||
mov al, c
|
|
||||||
mov ah, 0xe
|
__asm
|
||||||
int 0x10
|
{
|
||||||
}
|
mov bx, 7
|
||||||
}
|
mov al, c
|
||||||
|
mov ah, 0xe
|
||||||
|
int 0x10
|
||||||
void PrintCharAtCursor (char c)
|
}
|
||||||
{
|
}
|
||||||
if (ScreenOutputDisabled)
|
|
||||||
return;
|
|
||||||
|
void PrintCharAtCursor (char c)
|
||||||
__asm
|
{
|
||||||
{
|
if (ScreenOutputDisabled)
|
||||||
mov bx, 7
|
return;
|
||||||
mov al, c
|
|
||||||
mov cx, 1
|
__asm
|
||||||
mov ah, 0xa
|
{
|
||||||
int 0x10
|
mov bx, 7
|
||||||
}
|
mov al, c
|
||||||
}
|
mov cx, 1
|
||||||
|
mov ah, 0xa
|
||||||
|
int 0x10
|
||||||
void Print (const char *str)
|
}
|
||||||
{
|
}
|
||||||
char c;
|
|
||||||
while (c = *str++)
|
|
||||||
PrintChar (c);
|
void Print (const char *str)
|
||||||
}
|
{
|
||||||
|
char c;
|
||||||
|
while (c = *str++)
|
||||||
void Print (uint32 number)
|
PrintChar (c);
|
||||||
{
|
}
|
||||||
char str[12];
|
|
||||||
int pos = 0;
|
|
||||||
while (number >= 10)
|
void Print (uint32 number)
|
||||||
{
|
{
|
||||||
str[pos++] = (char) (number % 10) + '0';
|
char str[12];
|
||||||
number /= 10;
|
int pos = 0;
|
||||||
}
|
while (number >= 10)
|
||||||
str[pos] = (char) (number % 10) + '0';
|
{
|
||||||
|
str[pos++] = (char) (number % 10) + '0';
|
||||||
while (pos >= 0)
|
number /= 10;
|
||||||
PrintChar (str[pos--]);
|
}
|
||||||
}
|
str[pos] = (char) (number % 10) + '0';
|
||||||
|
|
||||||
|
while (pos >= 0)
|
||||||
void Print (const uint64 &number)
|
PrintChar (str[pos--]);
|
||||||
{
|
}
|
||||||
if (number.HighPart == 0)
|
|
||||||
Print (number.LowPart);
|
|
||||||
else
|
void Print (const uint64 &number)
|
||||||
PrintHex (number);
|
{
|
||||||
}
|
if (number.HighPart == 0)
|
||||||
|
Print (number.LowPart);
|
||||||
|
else
|
||||||
void PrintHex (byte b)
|
PrintHex (number);
|
||||||
{
|
}
|
||||||
PrintChar (((b >> 4) >= 0xA ? 'A' - 0xA : '0') + (b >> 4));
|
|
||||||
PrintChar (((b & 0xF) >= 0xA ? 'A' - 0xA : '0') + (b & 0xF));
|
|
||||||
}
|
void PrintHex (byte b)
|
||||||
|
{
|
||||||
|
PrintChar (((b >> 4) >= 0xA ? 'A' - 0xA : '0') + (b >> 4));
|
||||||
void PrintHex (uint16 data)
|
PrintChar (((b & 0xF) >= 0xA ? 'A' - 0xA : '0') + (b & 0xF));
|
||||||
{
|
}
|
||||||
PrintHex (byte (data >> 8));
|
|
||||||
PrintHex (byte (data));
|
|
||||||
}
|
void PrintHex (uint16 data)
|
||||||
|
{
|
||||||
|
PrintHex (byte (data >> 8));
|
||||||
void PrintHex (uint32 data)
|
PrintHex (byte (data));
|
||||||
{
|
}
|
||||||
PrintHex (uint16 (data >> 16));
|
|
||||||
PrintHex (uint16 (data));
|
|
||||||
}
|
void PrintHex (uint32 data)
|
||||||
|
{
|
||||||
|
PrintHex (uint16 (data >> 16));
|
||||||
void PrintHex (const uint64 &data)
|
PrintHex (uint16 (data));
|
||||||
{
|
}
|
||||||
PrintHex (data.HighPart);
|
|
||||||
PrintHex (data.LowPart);
|
|
||||||
}
|
void PrintHex (const uint64 &data)
|
||||||
|
{
|
||||||
void PrintRepeatedChar (char c, int n)
|
PrintHex (data.HighPart);
|
||||||
{
|
PrintHex (data.LowPart);
|
||||||
while (n-- > 0)
|
}
|
||||||
PrintChar (c);
|
|
||||||
}
|
void PrintRepeatedChar (char c, int n)
|
||||||
|
{
|
||||||
|
while (n-- > 0)
|
||||||
void PrintEndl ()
|
PrintChar (c);
|
||||||
{
|
}
|
||||||
Print ("\r\n");
|
|
||||||
}
|
|
||||||
|
void PrintEndl ()
|
||||||
|
{
|
||||||
void PrintEndl (int cnt)
|
Print ("\r\n");
|
||||||
{
|
}
|
||||||
while (cnt-- > 0)
|
|
||||||
PrintEndl ();
|
|
||||||
}
|
void PrintEndl (int cnt)
|
||||||
|
{
|
||||||
|
while (cnt-- > 0)
|
||||||
void Beep ()
|
PrintEndl ();
|
||||||
{
|
}
|
||||||
PrintChar (7);
|
|
||||||
}
|
|
||||||
|
void Beep ()
|
||||||
|
{
|
||||||
void InitVideoMode ()
|
PrintChar (7);
|
||||||
{
|
}
|
||||||
if (ScreenOutputDisabled)
|
|
||||||
return;
|
|
||||||
|
void InitVideoMode ()
|
||||||
__asm
|
{
|
||||||
{
|
if (ScreenOutputDisabled)
|
||||||
// Text mode 80x25
|
return;
|
||||||
mov ax, 3
|
|
||||||
int 0x10
|
__asm
|
||||||
|
{
|
||||||
// Page 0
|
// Text mode 80x25
|
||||||
mov ax, 0x500
|
mov ax, 3
|
||||||
int 0x10
|
int 0x10
|
||||||
}
|
|
||||||
}
|
// Page 0
|
||||||
|
mov ax, 0x500
|
||||||
|
int 0x10
|
||||||
void ClearScreen ()
|
}
|
||||||
{
|
}
|
||||||
if (ScreenOutputDisabled)
|
|
||||||
return;
|
|
||||||
|
void ClearScreen ()
|
||||||
__asm
|
{
|
||||||
{
|
if (ScreenOutputDisabled)
|
||||||
// White text on black
|
return;
|
||||||
mov bh, 7
|
|
||||||
xor cx, cx
|
__asm
|
||||||
mov dx, 0x184f
|
{
|
||||||
mov ax, 0x600
|
// White text on black
|
||||||
int 0x10
|
mov bh, 7
|
||||||
|
xor cx, cx
|
||||||
// Cursor at 0,0
|
mov dx, 0x184f
|
||||||
xor bh, bh
|
mov ax, 0x600
|
||||||
xor dx, dx
|
int 0x10
|
||||||
mov ah, 2
|
|
||||||
int 0x10
|
// Cursor at 0,0
|
||||||
}
|
xor bh, bh
|
||||||
}
|
xor dx, dx
|
||||||
|
mov ah, 2
|
||||||
|
int 0x10
|
||||||
void PrintBackspace ()
|
}
|
||||||
{
|
}
|
||||||
PrintChar (TC_BIOS_CHAR_BACKSPACE);
|
|
||||||
PrintCharAtCursor (' ');
|
|
||||||
}
|
void PrintBackspace ()
|
||||||
|
{
|
||||||
|
PrintChar (TC_BIOS_CHAR_BACKSPACE);
|
||||||
void PrintError (const char *message)
|
PrintCharAtCursor (' ');
|
||||||
{
|
}
|
||||||
Print (TC_BOOT_STR_ERROR);
|
|
||||||
Print (message);
|
|
||||||
PrintEndl();
|
void PrintError (const char *message)
|
||||||
Beep();
|
{
|
||||||
}
|
Print (TC_BOOT_STR_ERROR);
|
||||||
|
Print (message);
|
||||||
|
PrintEndl();
|
||||||
void PrintErrorNoEndl (const char *message)
|
Beep();
|
||||||
{
|
}
|
||||||
Print (TC_BOOT_STR_ERROR);
|
|
||||||
Print (message);
|
|
||||||
Beep();
|
void PrintErrorNoEndl (const char *message)
|
||||||
}
|
{
|
||||||
|
Print (TC_BOOT_STR_ERROR);
|
||||||
|
Print (message);
|
||||||
byte GetShiftFlags ()
|
Beep();
|
||||||
{
|
}
|
||||||
byte flags;
|
|
||||||
__asm
|
|
||||||
{
|
byte GetShiftFlags ()
|
||||||
mov ah, 2
|
{
|
||||||
int 0x16
|
byte flags;
|
||||||
mov flags, al
|
__asm
|
||||||
}
|
{
|
||||||
|
mov ah, 2
|
||||||
return flags;
|
int 0x16
|
||||||
}
|
mov flags, al
|
||||||
|
}
|
||||||
|
|
||||||
byte GetKeyboardChar ()
|
return flags;
|
||||||
{
|
}
|
||||||
return GetKeyboardChar (nullptr);
|
|
||||||
}
|
|
||||||
|
byte GetKeyboardChar ()
|
||||||
|
{
|
||||||
byte GetKeyboardChar (byte *scanCode)
|
return GetKeyboardChar (nullptr);
|
||||||
{
|
}
|
||||||
// Work around potential BIOS bugs (Windows boot manager polls the keystroke buffer)
|
|
||||||
while (!IsKeyboardCharAvailable());
|
|
||||||
|
byte GetKeyboardChar (byte *scanCode)
|
||||||
byte asciiCode;
|
{
|
||||||
byte scan;
|
// Work around potential BIOS bugs (Windows boot manager polls the keystroke buffer)
|
||||||
__asm
|
while (!IsKeyboardCharAvailable());
|
||||||
{
|
|
||||||
mov ah, 0
|
byte asciiCode;
|
||||||
int 0x16
|
byte scan;
|
||||||
mov asciiCode, al
|
__asm
|
||||||
mov scan, ah
|
{
|
||||||
}
|
mov ah, 0
|
||||||
|
int 0x16
|
||||||
if (scanCode)
|
mov asciiCode, al
|
||||||
*scanCode = scan;
|
mov scan, ah
|
||||||
|
}
|
||||||
return asciiCode;
|
|
||||||
}
|
if (scanCode)
|
||||||
|
*scanCode = scan;
|
||||||
|
|
||||||
bool IsKeyboardCharAvailable ()
|
return asciiCode;
|
||||||
{
|
}
|
||||||
bool available = false;
|
|
||||||
__asm
|
|
||||||
{
|
bool IsKeyboardCharAvailable ()
|
||||||
mov ah, 1
|
{
|
||||||
int 0x16
|
bool available = false;
|
||||||
jz not_avail
|
__asm
|
||||||
mov available, true
|
{
|
||||||
not_avail:
|
mov ah, 1
|
||||||
}
|
int 0x16
|
||||||
|
jz not_avail
|
||||||
return available;
|
mov available, true
|
||||||
}
|
not_avail:
|
||||||
|
}
|
||||||
|
|
||||||
bool EscKeyPressed ()
|
return available;
|
||||||
{
|
}
|
||||||
if (IsKeyboardCharAvailable ())
|
|
||||||
{
|
|
||||||
byte keyScanCode;
|
bool EscKeyPressed ()
|
||||||
GetKeyboardChar (&keyScanCode);
|
{
|
||||||
return keyScanCode == TC_BIOS_KEY_ESC;
|
if (IsKeyboardCharAvailable ())
|
||||||
}
|
{
|
||||||
|
byte keyScanCode;
|
||||||
return false;
|
GetKeyboardChar (&keyScanCode);
|
||||||
}
|
return keyScanCode == TC_BIOS_KEY_ESC;
|
||||||
|
}
|
||||||
|
|
||||||
void ClearBiosKeystrokeBuffer ()
|
return false;
|
||||||
{
|
}
|
||||||
__asm
|
|
||||||
{
|
|
||||||
push es
|
void ClearBiosKeystrokeBuffer ()
|
||||||
xor ax, ax
|
{
|
||||||
mov es, ax
|
__asm
|
||||||
mov di, 0x41e
|
{
|
||||||
mov cx, 32
|
push es
|
||||||
cld
|
xor ax, ax
|
||||||
rep stosb
|
mov es, ax
|
||||||
pop es
|
mov di, 0x41e
|
||||||
}
|
mov cx, 32
|
||||||
}
|
cld
|
||||||
|
rep stosb
|
||||||
|
pop es
|
||||||
bool IsPrintable (char c)
|
}
|
||||||
{
|
}
|
||||||
return c >= ' ' && c <= '~';
|
|
||||||
}
|
|
||||||
|
bool IsPrintable (char c)
|
||||||
|
{
|
||||||
int GetString (char *buffer, size_t bufferSize)
|
return c >= ' ' && c <= '~';
|
||||||
{
|
}
|
||||||
byte c;
|
|
||||||
byte scanCode;
|
bool IsDigit (char c)
|
||||||
size_t pos = 0;
|
{
|
||||||
|
return c >= '0' && c <= '9';
|
||||||
while (pos < bufferSize)
|
}
|
||||||
{
|
|
||||||
c = GetKeyboardChar (&scanCode);
|
|
||||||
|
int GetString (char *buffer, size_t bufferSize)
|
||||||
if (scanCode == TC_BIOS_KEY_ENTER)
|
{
|
||||||
break;
|
byte c;
|
||||||
|
byte scanCode;
|
||||||
if (scanCode == TC_BIOS_KEY_ESC)
|
size_t pos = 0;
|
||||||
return 0;
|
|
||||||
|
while (pos < bufferSize)
|
||||||
buffer[pos++] = c;
|
{
|
||||||
PrintChar (IsPrintable (c) ? c : ' ');
|
c = GetKeyboardChar (&scanCode);
|
||||||
}
|
|
||||||
|
if (scanCode == TC_BIOS_KEY_ENTER)
|
||||||
return pos;
|
break;
|
||||||
}
|
|
||||||
|
if (scanCode == TC_BIOS_KEY_ESC)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
buffer[pos++] = c;
|
||||||
|
PrintChar (IsPrintable (c) ? c : ' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,67 +1,72 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#ifndef TC_HEADER_Boot_BootConsoleIo
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#define TC_HEADER_Boot_BootConsoleIo
|
code distribution packages.
|
||||||
|
*/
|
||||||
#include "Platform.h"
|
|
||||||
|
#ifndef TC_HEADER_Boot_BootConsoleIo
|
||||||
#define TC_DEBUG_PORT 0
|
#define TC_HEADER_Boot_BootConsoleIo
|
||||||
|
|
||||||
#define TC_BIOS_KEY_ESC 1
|
#include "Platform.h"
|
||||||
#define TC_BIOS_KEY_BACKSPACE 14
|
|
||||||
#define TC_BIOS_KEY_ENTER 28
|
#define TC_DEBUG_PORT 0
|
||||||
#define TC_BIOS_KEY_F1 0x3b
|
|
||||||
#define TC_BIOS_KEY_F2 0x3c
|
#define TC_BIOS_KEY_ESC 1
|
||||||
#define TC_BIOS_KEY_F3 0x3d
|
#define TC_BIOS_KEY_BACKSPACE 14
|
||||||
#define TC_BIOS_KEY_F4 0x3e
|
#define TC_BIOS_KEY_ENTER 28
|
||||||
#define TC_BIOS_KEY_F5 0x3f
|
#define TC_BIOS_KEY_F1 0x3b
|
||||||
#define TC_BIOS_KEY_F6 0x40
|
#define TC_BIOS_KEY_F2 0x3c
|
||||||
#define TC_BIOS_KEY_F7 0x41
|
#define TC_BIOS_KEY_F3 0x3d
|
||||||
#define TC_BIOS_KEY_F8 0x42
|
#define TC_BIOS_KEY_F4 0x3e
|
||||||
#define TC_BIOS_KEY_F9 0x43
|
#define TC_BIOS_KEY_F5 0x3f
|
||||||
#define TC_BIOS_KEY_F10 0x44
|
#define TC_BIOS_KEY_F6 0x40
|
||||||
|
#define TC_BIOS_KEY_F7 0x41
|
||||||
#define TC_BIOS_SHIFTMASK_CAPSLOCK (1 << 6)
|
#define TC_BIOS_KEY_F8 0x42
|
||||||
#define TC_BIOS_SHIFTMASK_LSHIFT (1 << 1)
|
#define TC_BIOS_KEY_F9 0x43
|
||||||
#define TC_BIOS_SHIFTMASK_RSHIFT (1 << 0)
|
#define TC_BIOS_KEY_F10 0x44
|
||||||
|
|
||||||
#define TC_BIOS_CHAR_BACKSPACE 8
|
#define TC_BIOS_SHIFTMASK_CAPSLOCK (1 << 6)
|
||||||
|
#define TC_BIOS_SHIFTMASK_LSHIFT (1 << 1)
|
||||||
#define TC_BIOS_MAX_CHARS_PER_LINE 80
|
#define TC_BIOS_SHIFTMASK_RSHIFT (1 << 0)
|
||||||
|
|
||||||
void Beep ();
|
#define TC_BIOS_CHAR_BACKSPACE 8
|
||||||
void ClearBiosKeystrokeBuffer ();
|
|
||||||
void ClearScreen ();
|
#define TC_BIOS_MAX_CHARS_PER_LINE 80
|
||||||
void DisableScreenOutput ();
|
|
||||||
void EnableScreenOutput ();
|
void Beep ();
|
||||||
bool EscKeyPressed ();
|
void ClearBiosKeystrokeBuffer ();
|
||||||
byte GetKeyboardChar ();
|
void ClearScreen ();
|
||||||
byte GetKeyboardChar (byte *scanCode);
|
void DisableScreenOutput ();
|
||||||
byte GetShiftFlags ();
|
void EnableScreenOutput ();
|
||||||
int GetString (char *buffer, size_t bufferSize);
|
bool EscKeyPressed ();
|
||||||
void InitVideoMode ();
|
byte GetKeyboardChar ();
|
||||||
bool IsKeyboardCharAvailable ();
|
byte GetKeyboardChar (byte *scanCode);
|
||||||
bool IsPrintable (char c);
|
byte GetShiftFlags ();
|
||||||
void Print (const char *str);
|
int GetString (char *buffer, size_t bufferSize);
|
||||||
void Print (uint32 number);
|
void InitVideoMode ();
|
||||||
void Print (const uint64 &number);
|
bool IsKeyboardCharAvailable ();
|
||||||
void PrintBackspace ();
|
bool IsPrintable (char c);
|
||||||
void PrintChar (char c);
|
bool IsDigit (char c);
|
||||||
void PrintCharAtCursor (char c);
|
void Print (const char *str);
|
||||||
void PrintEndl ();
|
void Print (uint32 number);
|
||||||
void PrintEndl (int cnt);
|
void Print (const uint64 &number);
|
||||||
void PrintRepeatedChar (char c, int n);
|
void PrintBackspace ();
|
||||||
void PrintError (const char *message);
|
void PrintChar (char c);
|
||||||
void PrintErrorNoEndl (const char *message);
|
void PrintCharAtCursor (char c);
|
||||||
void PrintHex (byte b);
|
void PrintEndl ();
|
||||||
void PrintHex (uint16 data);
|
void PrintEndl (int cnt);
|
||||||
void PrintHex (uint32 data);
|
void PrintRepeatedChar (char c, int n);
|
||||||
void PrintHex (const uint64 &data);
|
void PrintError (const char *message);
|
||||||
|
void PrintErrorNoEndl (const char *message);
|
||||||
#endif // TC_HEADER_Boot_BootConsoleIo
|
void PrintHex (byte b);
|
||||||
|
void PrintHex (uint16 data);
|
||||||
|
void PrintHex (uint32 data);
|
||||||
|
void PrintHex (const uint64 &data);
|
||||||
|
|
||||||
|
#endif // TC_HEADER_Boot_BootConsoleIo
|
||||||
|
|||||||
@@ -1,23 +1,27 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
; Derived from source code of TrueCrypt 7.1a, which is
|
||||||
;
|
; Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
; Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
; by the TrueCrypt License 3.0.
|
||||||
; the file License.txt included in TrueCrypt binary and source code distribution
|
;
|
||||||
; packages.
|
; Modifications and additions to the original source code (contained in this file)
|
||||||
;
|
; and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
; and are governed by the Apache License 2.0 the full text of which is
|
||||||
.MODEL tiny, C
|
; contained in the file License.txt included in VeraCrypt binary and source
|
||||||
.386
|
; code distribution packages.
|
||||||
|
;
|
||||||
INCLUDE BootDefs.i
|
|
||||||
|
.MODEL tiny, C
|
||||||
EXTERNDEF main:NEAR
|
.386
|
||||||
|
|
||||||
_TEXT SEGMENT
|
INCLUDE BootDefs.i
|
||||||
ORG TC_COM_EXECUTABLE_OFFSET
|
|
||||||
|
EXTERNDEF main:NEAR
|
||||||
start:
|
|
||||||
jmp main
|
_TEXT SEGMENT
|
||||||
|
ORG TC_COM_EXECUTABLE_OFFSET
|
||||||
_TEXT ENDS
|
|
||||||
END start
|
start:
|
||||||
|
jmp main
|
||||||
|
|
||||||
|
_TEXT ENDS
|
||||||
|
END start
|
||||||
|
|||||||
+181
-177
@@ -1,177 +1,181 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#include "Platform.h"
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#include "Bios.h"
|
code distribution packages.
|
||||||
#include "BootConsoleIo.h"
|
*/
|
||||||
#include "BootDefs.h"
|
|
||||||
#include "BootDiskIo.h"
|
#include "Platform.h"
|
||||||
#include "BootDebug.h"
|
#include "Bios.h"
|
||||||
|
#include "BootConsoleIo.h"
|
||||||
|
#include "BootDefs.h"
|
||||||
#ifdef TC_BOOT_TRACING_ENABLED
|
#include "BootDiskIo.h"
|
||||||
|
#include "BootDebug.h"
|
||||||
void InitDebugPort ()
|
|
||||||
{
|
|
||||||
__asm
|
#ifdef TC_BOOT_TRACING_ENABLED
|
||||||
{
|
|
||||||
mov dx, TC_DEBUG_PORT
|
void InitDebugPort ()
|
||||||
mov ah, 1
|
{
|
||||||
int 0x17
|
__asm
|
||||||
mov dx, TC_DEBUG_PORT
|
{
|
||||||
mov ah, 0xe2
|
mov dx, TC_DEBUG_PORT
|
||||||
int 0x17
|
mov ah, 1
|
||||||
}
|
int 0x17
|
||||||
}
|
mov dx, TC_DEBUG_PORT
|
||||||
|
mov ah, 0xe2
|
||||||
|
int 0x17
|
||||||
void WriteDebugPort (byte dataByte)
|
}
|
||||||
{
|
}
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov al, dataByte
|
void WriteDebugPort (byte dataByte)
|
||||||
mov dx, TC_DEBUG_PORT
|
{
|
||||||
mov ah, 0
|
__asm
|
||||||
int 0x17
|
{
|
||||||
}
|
mov al, dataByte
|
||||||
}
|
mov dx, TC_DEBUG_PORT
|
||||||
|
mov ah, 0
|
||||||
#endif // TC_BOOT_TRACING_ENABLED
|
int 0x17
|
||||||
|
}
|
||||||
|
}
|
||||||
#ifdef TC_BOOT_DEBUG_ENABLED
|
|
||||||
|
#endif // TC_BOOT_TRACING_ENABLED
|
||||||
extern "C" void PrintDebug (uint32 debugVal)
|
|
||||||
{
|
|
||||||
Print (debugVal);
|
#ifdef TC_BOOT_DEBUG_ENABLED
|
||||||
PrintEndl();
|
|
||||||
}
|
extern "C" void PrintDebug (uint32 debugVal)
|
||||||
|
{
|
||||||
|
Print (debugVal);
|
||||||
void PrintVal (const char *message, const uint32 value, bool newLine, bool hex)
|
PrintEndl();
|
||||||
{
|
}
|
||||||
Print (message);
|
|
||||||
Print (": ");
|
|
||||||
|
void PrintVal (const char *message, const uint32 value, bool newLine, bool hex)
|
||||||
if (hex)
|
{
|
||||||
PrintHex (value);
|
Print (message);
|
||||||
else
|
Print (": ");
|
||||||
Print (value);
|
|
||||||
|
if (hex)
|
||||||
if (newLine)
|
PrintHex (value);
|
||||||
PrintEndl();
|
else
|
||||||
}
|
Print (value);
|
||||||
|
|
||||||
|
if (newLine)
|
||||||
void PrintVal (const char *message, const uint64 &value, bool newLine, bool hex)
|
PrintEndl();
|
||||||
{
|
}
|
||||||
Print (message);
|
|
||||||
Print (": ");
|
|
||||||
PrintHex (value);
|
void PrintVal (const char *message, const uint64 &value, bool newLine, bool hex)
|
||||||
if (newLine)
|
{
|
||||||
PrintEndl();
|
Print (message);
|
||||||
}
|
Print (": ");
|
||||||
|
PrintHex (value);
|
||||||
|
if (newLine)
|
||||||
void PrintHexDump (byte *mem, size_t size, uint16 *memSegment)
|
PrintEndl();
|
||||||
{
|
}
|
||||||
const size_t width = 16;
|
|
||||||
for (size_t pos = 0; pos < size; )
|
|
||||||
{
|
void PrintHexDump (byte *mem, size_t size, uint16 *memSegment)
|
||||||
for (int pass = 1; pass <= 2; ++pass)
|
{
|
||||||
{
|
const size_t width = 16;
|
||||||
size_t i;
|
for (size_t pos = 0; pos < size; )
|
||||||
for (i = 0; i < width && pos < size; ++i)
|
{
|
||||||
{
|
for (int pass = 1; pass <= 2; ++pass)
|
||||||
byte dataByte;
|
{
|
||||||
if (memSegment)
|
size_t i;
|
||||||
{
|
for (i = 0; i < width && pos < size; ++i)
|
||||||
__asm
|
{
|
||||||
{
|
byte dataByte;
|
||||||
push es
|
if (memSegment)
|
||||||
mov si, ss:memSegment
|
{
|
||||||
mov es, ss:[si]
|
__asm
|
||||||
mov si, ss:mem
|
{
|
||||||
add si, pos
|
push es
|
||||||
mov al, es:[si]
|
mov si, ss:memSegment
|
||||||
mov dataByte, al
|
mov es, ss:[si]
|
||||||
pop es
|
mov si, ss:mem
|
||||||
}
|
add si, pos
|
||||||
pos++;
|
mov al, es:[si]
|
||||||
}
|
mov dataByte, al
|
||||||
else
|
pop es
|
||||||
dataByte = mem[pos++];
|
}
|
||||||
|
pos++;
|
||||||
if (pass == 1)
|
}
|
||||||
{
|
else
|
||||||
PrintHex (dataByte);
|
dataByte = mem[pos++];
|
||||||
PrintChar (' ');
|
|
||||||
}
|
if (pass == 1)
|
||||||
else
|
{
|
||||||
PrintChar (IsPrintable (dataByte) ? dataByte : '.');
|
PrintHex (dataByte);
|
||||||
}
|
PrintChar (' ');
|
||||||
|
}
|
||||||
if (pass == 1)
|
else
|
||||||
{
|
PrintChar (IsPrintable (dataByte) ? dataByte : '.');
|
||||||
pos -= i;
|
}
|
||||||
PrintChar (' ');
|
|
||||||
}
|
if (pass == 1)
|
||||||
}
|
{
|
||||||
|
pos -= i;
|
||||||
PrintEndl ();
|
PrintChar (' ');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PrintEndl ();
|
||||||
void PrintHexDump (uint16 memSegment, uint16 memOffset, size_t size)
|
}
|
||||||
{
|
}
|
||||||
PrintHexDump ((byte *) memOffset, size, &memSegment);
|
|
||||||
}
|
|
||||||
|
void PrintHexDump (uint16 memSegment, uint16 memOffset, size_t size)
|
||||||
#endif // TC_BOOT_DEBUG_ENABLED
|
{
|
||||||
|
PrintHexDump ((byte *) memOffset, size, &memSegment);
|
||||||
|
}
|
||||||
#ifdef TC_BOOT_STACK_CHECKING_ENABLED
|
|
||||||
|
#endif // TC_BOOT_DEBUG_ENABLED
|
||||||
extern "C" char end[];
|
|
||||||
|
|
||||||
static void PrintStackInfo ()
|
#ifdef TC_BOOT_STACK_CHECKING_ENABLED
|
||||||
{
|
|
||||||
uint16 spReg;
|
extern "C" char end[];
|
||||||
__asm mov spReg, sp
|
|
||||||
|
static void PrintStackInfo ()
|
||||||
Print ("Stack: "); Print (TC_BOOT_LOADER_STACK_TOP - spReg);
|
{
|
||||||
Print ("/"); Print (TC_BOOT_LOADER_STACK_TOP - (uint16) end);
|
uint16 spReg;
|
||||||
}
|
__asm mov spReg, sp
|
||||||
|
|
||||||
|
Print ("Stack: "); Print (TC_BOOT_LOADER_STACK_TOP - spReg);
|
||||||
void CheckStack ()
|
Print ("/"); Print (TC_BOOT_LOADER_STACK_TOP - (uint16) end);
|
||||||
{
|
}
|
||||||
uint16 spReg;
|
|
||||||
__asm mov spReg, sp
|
|
||||||
|
void CheckStack ()
|
||||||
if (*(uint32 *) end != 0x12345678UL || spReg < (uint16) end)
|
{
|
||||||
{
|
uint16 spReg;
|
||||||
__asm cli
|
__asm mov spReg, sp
|
||||||
__asm mov sp, TC_BOOT_LOADER_STACK_TOP
|
|
||||||
|
if (*(uint32 *) end != 0x12345678UL || spReg < (uint16) end)
|
||||||
PrintError ("Stack overflow");
|
{
|
||||||
TC_THROW_FATAL_EXCEPTION;
|
__asm cli
|
||||||
}
|
__asm mov sp, TC_BOOT_LOADER_STACK_TOP
|
||||||
}
|
|
||||||
|
PrintError ("Stack overflow");
|
||||||
|
TC_THROW_FATAL_EXCEPTION;
|
||||||
void InitStackChecker ()
|
}
|
||||||
{
|
}
|
||||||
*(uint32 *) end = 0x12345678UL;
|
|
||||||
|
|
||||||
PrintStackInfo();
|
void InitStackChecker ()
|
||||||
PrintEndl();
|
{
|
||||||
}
|
*(uint32 *) end = 0x12345678UL;
|
||||||
|
|
||||||
#endif // TC_BOOT_STACK_CHECKING_ENABLED
|
PrintStackInfo();
|
||||||
|
PrintEndl();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // TC_BOOT_STACK_CHECKING_ENABLED
|
||||||
|
|||||||
@@ -1,56 +1,60 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#ifndef TC_HEADER_Boot_BootDebug
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#define TC_HEADER_Boot_BootDebug
|
code distribution packages.
|
||||||
|
*/
|
||||||
#include "Platform.h"
|
|
||||||
#include "BootConsoleIo.h"
|
#ifndef TC_HEADER_Boot_BootDebug
|
||||||
|
#define TC_HEADER_Boot_BootDebug
|
||||||
#if 0
|
|
||||||
# define TC_BOOT_DEBUG_ENABLED
|
#include "Platform.h"
|
||||||
#endif
|
#include "BootConsoleIo.h"
|
||||||
|
|
||||||
#if 0 || defined (TC_BOOT_DEBUG_ENABLED)
|
#if 0
|
||||||
# define TC_BOOT_STACK_CHECKING_ENABLED
|
# define TC_BOOT_DEBUG_ENABLED
|
||||||
extern "C" void CheckStack ();
|
#endif
|
||||||
#else
|
|
||||||
# define CheckStack()
|
#if 0 || defined (TC_BOOT_DEBUG_ENABLED)
|
||||||
#endif
|
# define TC_BOOT_STACK_CHECKING_ENABLED
|
||||||
|
extern "C" void CheckStack ();
|
||||||
#if 0
|
#else
|
||||||
# define TC_BOOT_TRACING_ENABLED
|
# define CheckStack()
|
||||||
# if 1
|
#endif
|
||||||
# define TC_TRACE_INT13
|
|
||||||
# endif
|
#if 0
|
||||||
# if 0
|
# define TC_BOOT_TRACING_ENABLED
|
||||||
# define TC_TRACE_INT15
|
# if 1
|
||||||
# endif
|
# define TC_TRACE_INT13
|
||||||
#endif
|
# endif
|
||||||
|
# if 0
|
||||||
#ifdef TC_BOOT_DEBUG_ENABLED
|
# define TC_TRACE_INT15
|
||||||
# define trace_point do { Print(__FILE__); PrintChar (':'); Print (TC_TO_STRING (__LINE__)); PrintEndl(); } while (false)
|
# endif
|
||||||
# define trace_val(VAL) PrintVal (#VAL, VAL);
|
#endif
|
||||||
# define trace_hex(VAL) do { Print (#VAL), PrintChar (':'); PrintHex (VAL); PrintEndl(); } while (false)
|
|
||||||
# define assert(COND) do { if (!(COND)) { trace_point; __asm jmp $ } } while (false)
|
#ifdef TC_BOOT_DEBUG_ENABLED
|
||||||
#else
|
# define trace_point do { Print(__FILE__); PrintChar (':'); Print (TC_TO_STRING (__LINE__)); PrintEndl(); } while (false)
|
||||||
# define trace_point
|
# define trace_val(VAL) PrintVal (#VAL, VAL);
|
||||||
# define trace_val(VAL)
|
# define trace_hex(VAL) do { Print (#VAL), PrintChar (':'); PrintHex (VAL); PrintEndl(); } while (false)
|
||||||
# define trace_hex(VAL)
|
# define assert(COND) do { if (!(COND)) { trace_point; __asm jmp $ } } while (false)
|
||||||
# define assert(COND)
|
#else
|
||||||
#endif
|
# define trace_point
|
||||||
|
# define trace_val(VAL)
|
||||||
void InitDebugPort ();
|
# define trace_hex(VAL)
|
||||||
void InitStackChecker ();
|
# define assert(COND)
|
||||||
void WriteDebugPort (byte dataByte);
|
#endif
|
||||||
void PrintHexDump (byte *mem, size_t size, uint16 *memSegment = nullptr);
|
|
||||||
void PrintHexDump (uint16 memSegment, uint16 memOffset, size_t size);
|
void InitDebugPort ();
|
||||||
void PrintVal (const char *message, const uint32 value, bool newLine = true, bool hex = false);
|
void InitStackChecker ();
|
||||||
void PrintVal (const char *message, const uint64 &value, bool newLine = true, bool hex = false);
|
void WriteDebugPort (byte dataByte);
|
||||||
|
void PrintHexDump (byte *mem, size_t size, uint16 *memSegment = nullptr);
|
||||||
#endif // TC_HEADER_Boot_BootDebug
|
void PrintHexDump (uint16 memSegment, uint16 memOffset, size_t size);
|
||||||
|
void PrintVal (const char *message, const uint32 value, bool newLine = true, bool hex = false);
|
||||||
|
void PrintVal (const char *message, const uint64 &value, bool newLine = true, bool hex = false);
|
||||||
|
|
||||||
|
#endif // TC_HEADER_Boot_BootDebug
|
||||||
|
|||||||
+210
-188
@@ -1,188 +1,210 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#ifndef TC_HEADER_Boot_BootDefs
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#define TC_HEADER_Boot_BootDefs
|
code distribution packages.
|
||||||
|
*/
|
||||||
// Total memory required (CODE + DATA + BSS + STACK + 0x100) in KBytes - determined from linker map.
|
|
||||||
#define TC__BOOT_MEMORY_REQUIRED 42
|
#ifndef TC_HEADER_Boot_BootDefs
|
||||||
|
#define TC_HEADER_Boot_BootDefs
|
||||||
#ifdef TC_WINDOWS_BOOT_SINGLE_CIPHER_MODE
|
|
||||||
# undef TC__BOOT_MEMORY_REQUIRED
|
// Total memory required (CODE + DATA + BSS + STACK + 0x100) in KBytes - determined from linker map.
|
||||||
|
#define TC__BOOT_MEMORY_REQUIRED 43
|
||||||
# ifdef TC_WINDOWS_BOOT_AES
|
|
||||||
# ifdef TC_WINDOWS_BOOT_RESCUE_DISK_MODE
|
#ifdef TC_WINDOWS_BOOT_SINGLE_CIPHER_MODE
|
||||||
# define TC__BOOT_MEMORY_REQUIRED 30
|
# undef TC__BOOT_MEMORY_REQUIRED
|
||||||
# else
|
|
||||||
# define TC__BOOT_MEMORY_REQUIRED 28
|
# ifdef TC_WINDOWS_BOOT_AES
|
||||||
# endif
|
# ifdef TC_WINDOWS_BOOT_RESCUE_DISK_MODE
|
||||||
# elif defined (TC_WINDOWS_BOOT_SERPENT)
|
# define TC__BOOT_MEMORY_REQUIRED 31
|
||||||
# define TC__BOOT_MEMORY_REQUIRED 32
|
# else
|
||||||
# elif defined (TC_WINDOWS_BOOT_TWOFISH)
|
# define TC__BOOT_MEMORY_REQUIRED 29
|
||||||
# define TC__BOOT_MEMORY_REQUIRED 40
|
# endif
|
||||||
# endif
|
# elif defined (TC_WINDOWS_BOOT_SERPENT)
|
||||||
|
# define TC__BOOT_MEMORY_REQUIRED 33
|
||||||
#if 0
|
# elif defined (TC_WINDOWS_BOOT_TWOFISH)
|
||||||
# undef TC__BOOT_MEMORY_REQUIRED
|
# define TC__BOOT_MEMORY_REQUIRED 41
|
||||||
# define TC__BOOT_MEMORY_REQUIRED 60
|
# elif defined (TC_WINDOWS_BOOT_CAMELLIA)
|
||||||
#endif
|
# define TC__BOOT_MEMORY_REQUIRED 31
|
||||||
|
# endif
|
||||||
#endif
|
|
||||||
|
#if 0
|
||||||
// Modifying this value can introduce incompatibility with previous versions
|
# undef TC__BOOT_MEMORY_REQUIRED
|
||||||
#define TC__BOOT_LOADER_SEGMENT TC_HEX (9000) // Some buggy BIOS routines fail if CS bits 0-10 are not zero
|
# define TC__BOOT_MEMORY_REQUIRED 60
|
||||||
|
#endif
|
||||||
#if TC__BOOT_MEMORY_REQUIRED <= 32
|
|
||||||
# define TC__BOOT_LOADER_SEGMENT_LOW (TC__BOOT_LOADER_SEGMENT - 32 * 1024 / 16)
|
#endif
|
||||||
#else
|
|
||||||
# define TC__BOOT_LOADER_SEGMENT_LOW (TC__BOOT_LOADER_SEGMENT - 64 * 1024 / 16)
|
// Modifying this value can introduce incompatibility with previous versions
|
||||||
#endif
|
#define TC__BOOT_LOADER_SEGMENT TC_HEX (9000) // Some buggy BIOS routines fail if CS bits 0-10 are not zero
|
||||||
|
|
||||||
#define TC__COM_EXECUTABLE_OFFSET TC_HEX (100)
|
#if TC__BOOT_MEMORY_REQUIRED <= 32
|
||||||
|
# define TC__BOOT_LOADER_SEGMENT_LOW (TC__BOOT_LOADER_SEGMENT - 32 * 1024 / 16)
|
||||||
#define TC__BOOT_LOADER_LOWMEM_SEGMENT TC_HEX (2000)
|
#else
|
||||||
#define TC__BOOT_LOADER_BUFFER_SEGMENT TC_HEX (4000)
|
# define TC__BOOT_LOADER_SEGMENT_LOW (TC__BOOT_LOADER_SEGMENT - 64 * 1024 / 16)
|
||||||
#define TC__BOOT_LOADER_ALT_SEGMENT TC_HEX (6000)
|
#endif
|
||||||
|
|
||||||
#define TC__BOOT_LOADER_STACK_TOP (TC_BOOT_MEMORY_REQUIRED * TC_UNSIGNED (1024) - 4)
|
#define TC__COM_EXECUTABLE_OFFSET TC_HEX (100)
|
||||||
|
|
||||||
#define TC__LB_SIZE 512
|
#define TC__BOOT_LOADER_LOWMEM_SEGMENT TC_HEX (2000)
|
||||||
#define TC__BOOT_LOADER_AREA_SECTOR_COUNT 63
|
#define TC__BOOT_LOADER_BUFFER_SEGMENT TC_HEX (4000)
|
||||||
|
#define TC__BOOT_LOADER_ALT_SEGMENT TC_HEX (6000)
|
||||||
#define TC__BOOT_SECTOR_VERSION_OFFSET 430
|
|
||||||
#define TC__BOOT_SECTOR_LOADER_LENGTH_OFFSET 432
|
#define TC__BOOT_LOADER_STACK_TOP (TC_BOOT_MEMORY_REQUIRED * TC_UNSIGNED (1024) - 4)
|
||||||
#define TC__BOOT_SECTOR_LOADER_CHECKSUM_OFFSET 434
|
|
||||||
#define TC__BOOT_SECTOR_USER_CONFIG_OFFSET 438
|
#define TC__LB_SIZE 512
|
||||||
#define TC__BOOT_SECTOR_CONFIG_OFFSET 439 // The last byte that is reserved for the boot loader
|
#define TC__BOOT_LOADER_AREA_SECTOR_COUNT 63
|
||||||
|
|
||||||
#define TC__BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH 24
|
#define TC__BOOT_SECTOR_VERSION_OFFSET 430
|
||||||
#define TC__BOOT_SECTOR_USER_MESSAGE_OFFSET (TC__BOOT_SECTOR_VERSION_OFFSET - TC__BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH)
|
#define TC__BOOT_SECTOR_LOADER_LENGTH_OFFSET 432
|
||||||
|
#define TC__BOOT_SECTOR_LOADER_CHECKSUM_OFFSET 434
|
||||||
#define TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_SIZE 4
|
#define TC__BOOT_SECTOR_USER_CONFIG_OFFSET 438
|
||||||
#define TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_OFFSET (TC__BOOT_SECTOR_USER_MESSAGE_OFFSET - TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_SIZE)
|
#define TC__BOOT_SECTOR_CONFIG_OFFSET 439 // The last byte that is reserved for the boot loader
|
||||||
|
|
||||||
#define TC__BOOT_LOADER_DECOMPRESSOR_START_SECTOR 2
|
#define TC__BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH 24
|
||||||
#define TC__BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT 4
|
#define TC__BOOT_SECTOR_USER_MESSAGE_OFFSET (TC__BOOT_SECTOR_VERSION_OFFSET - TC__BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH)
|
||||||
#define TC__BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE 32768
|
|
||||||
#define TC__BOOT_LOADER_COMPRESSED_BUFFER_OFFSET (TC_COM_EXECUTABLE_OFFSET + 3072)
|
#define TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_SIZE 4
|
||||||
|
#define TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_OFFSET (TC__BOOT_SECTOR_USER_MESSAGE_OFFSET - TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_SIZE)
|
||||||
#define TC__BOOT_LOADER_START_SECTOR (TC_BOOT_LOADER_DECOMPRESSOR_START_SECTOR + TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT)
|
|
||||||
#define TC__MAX_BOOT_LOADER_SECTOR_COUNT (TC_BOOT_LOADER_AREA_SECTOR_COUNT - TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT - 2)
|
#define TC__BOOT_SECTOR_PIM_VALUE_SIZE 2
|
||||||
#define TC__MAX_BOOT_LOADER_DECOMPRESSED_SIZE ((TC_BOOT_LOADER_AREA_SECTOR_COUNT - 2) * TC_LB_SIZE)
|
#define TC__BOOT_SECTOR_PIM_VALUE_OFFSET (TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_OFFSET - TC__BOOT_SECTOR_PIM_VALUE_SIZE)
|
||||||
|
|
||||||
#define TC__BOOT_LOADER_BACKUP_SECTOR_COUNT 30
|
#define TC__BOOT_LOADER_DECOMPRESSOR_START_SECTOR 2
|
||||||
|
#define TC__BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT 4
|
||||||
#define TC__GZIP_HEADER_SIZE 10
|
#define TC__BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE 32768
|
||||||
|
#define TC__BOOT_LOADER_COMPRESSED_BUFFER_OFFSET (TC_COM_EXECUTABLE_OFFSET + 3072)
|
||||||
#define TC__BOOT_CFG_FLAG_AREA_SIZE 1 // In bytes
|
|
||||||
|
#define TC__BOOT_LOADER_START_SECTOR (TC_BOOT_LOADER_DECOMPRESSOR_START_SECTOR + TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT)
|
||||||
// If you add more flags, revise TC__BOOT_CFG_FLAG_AREA_SIZE
|
#define TC__MAX_BOOT_LOADER_SECTOR_COUNT (TC_BOOT_LOADER_AREA_SECTOR_COUNT - TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT - 2)
|
||||||
#define TC__BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE TC_HEX (02)
|
#define TC__MAX_BOOT_LOADER_DECOMPRESSED_SIZE ((TC_BOOT_LOADER_AREA_SECTOR_COUNT - 2) * TC_LB_SIZE)
|
||||||
#define TC__BOOT_CFG_FLAG_WINDOWS_VISTA_OR_LATER TC_HEX (04)
|
|
||||||
#define TC__BOOT_CFG_FLAG_RESCUE_DISABLE_HW_ENCRYPTION TC_HEX (10)
|
#define TC__BOOT_LOADER_BACKUP_SECTOR_COUNT 30
|
||||||
#define TC__BOOT_CFG_FLAG_RESCUE_DISK_ORIG_SYS_LOADER TC_HEX (20)
|
|
||||||
#define TC__BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE (TC_HEX (40) + TC_HEX (80))
|
#define TC__GZIP_HEADER_SIZE 10
|
||||||
|
|
||||||
// Modifying the following values can introduce incompatibility with previous versions
|
#define TC__BOOT_CFG_FLAG_AREA_SIZE 1 // In bytes
|
||||||
#define TC__BOOT_USER_CFG_FLAG_SILENT_MODE TC_HEX (01)
|
|
||||||
#define TC__BOOT_USER_CFG_FLAG_DISABLE_ESC TC_HEX (02)
|
// If you add more flags, revise TC__BOOT_CFG_FLAG_AREA_SIZE
|
||||||
#define TC__BOOT_USER_CFG_FLAG_DISABLE_HW_ENCRYPTION TC_HEX (04)
|
#define TC__BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE TC_HEX (02)
|
||||||
|
#define TC__BOOT_CFG_FLAG_WINDOWS_VISTA_OR_LATER TC_HEX (04)
|
||||||
// The following items are treated as a 2-bit value (apply TC_BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE to obtain the value)
|
#define TC__BOOT_CFG_FLAG_RESCUE_DISABLE_HW_ENCRYPTION TC_HEX (10)
|
||||||
#define TC__HIDDEN_OS_CREATION_PHASE_NONE 0
|
#define TC__BOOT_CFG_FLAG_RESCUE_DISK_ORIG_SYS_LOADER TC_HEX (20)
|
||||||
#define TC__HIDDEN_OS_CREATION_PHASE_CLONING TC_HEX (40) // The boot loader is to copy the content of the system partition to the hidden volume
|
#define TC__BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE (TC_HEX (40) + TC_HEX (80))
|
||||||
#define TC__HIDDEN_OS_CREATION_PHASE_WIPING TC_HEX (80) // The boot loader has successfully copied the content of the system partition to the hidden volume. The original OS is to be wiped now.
|
|
||||||
#define TC__HIDDEN_OS_CREATION_PHASE_WIPED (TC_HEX (40) + TC_HEX (80)) // The original OS has been wiped. The user is required to install a new OS (decoy OS) on the system partition now.
|
// Modifying the following values can introduce incompatibility with previous versions
|
||||||
|
#define TC__BOOT_USER_CFG_FLAG_SILENT_MODE TC_HEX (01)
|
||||||
|
#define TC__BOOT_USER_CFG_FLAG_DISABLE_ESC TC_HEX (02)
|
||||||
#ifdef TC_ASM_PREPROCESS
|
#define TC__BOOT_USER_CFG_FLAG_DISABLE_HW_ENCRYPTION TC_HEX (04)
|
||||||
|
#define TC__BOOT_USER_CFG_FLAG_DISABLE_PIM TC_HEX (08)
|
||||||
#define TC_HEX(N) 0##N##h
|
#define TC__BOOT_USER_CFG_FLAG_STORE_HASH TC_HEX (10)
|
||||||
#define TC_UNSIGNED(N) N
|
|
||||||
|
// The following items are treated as a 2-bit value (apply TC_BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE to obtain the value)
|
||||||
TC_BOOT_MEMORY_REQUIRED = TC__BOOT_MEMORY_REQUIRED
|
#define TC__HIDDEN_OS_CREATION_PHASE_NONE 0
|
||||||
TC_BOOT_LOADER_SEGMENT = TC__BOOT_LOADER_SEGMENT
|
#define TC__HIDDEN_OS_CREATION_PHASE_CLONING TC_HEX (40) // The boot loader is to copy the content of the system partition to the hidden volume
|
||||||
TC_BOOT_LOADER_SEGMENT_LOW = TC__BOOT_LOADER_SEGMENT_LOW
|
#define TC__HIDDEN_OS_CREATION_PHASE_WIPING TC_HEX (80) // The boot loader has successfully copied the content of the system partition to the hidden volume. The original OS is to be wiped now.
|
||||||
TC_COM_EXECUTABLE_OFFSET = TC__COM_EXECUTABLE_OFFSET
|
#define TC__HIDDEN_OS_CREATION_PHASE_WIPED (TC_HEX (40) + TC_HEX (80)) // The original OS has been wiped. The user is required to install a new OS (decoy OS) on the system partition now.
|
||||||
TC_BOOT_LOADER_LOWMEM_SEGMENT = TC__BOOT_LOADER_LOWMEM_SEGMENT
|
|
||||||
TC_BOOT_LOADER_BUFFER_SEGMENT = TC__BOOT_LOADER_BUFFER_SEGMENT
|
|
||||||
TC_BOOT_LOADER_ALT_SEGMENT = TC__BOOT_LOADER_ALT_SEGMENT
|
#ifdef TC_ASM_PREPROCESS
|
||||||
TC_BOOT_LOADER_STACK_TOP = TC__BOOT_LOADER_STACK_TOP
|
|
||||||
TC_LB_SIZE = TC__LB_SIZE
|
#define TC_HEX(N) 0##N##h
|
||||||
TC_BOOT_LOADER_AREA_SECTOR_COUNT = TC__BOOT_LOADER_AREA_SECTOR_COUNT
|
#define TC_UNSIGNED(N) N
|
||||||
TC_BOOT_SECTOR_LOADER_LENGTH_OFFSET = TC__BOOT_SECTOR_LOADER_LENGTH_OFFSET
|
|
||||||
TC_BOOT_SECTOR_LOADER_CHECKSUM_OFFSET = TC__BOOT_SECTOR_LOADER_CHECKSUM_OFFSET
|
TC_BOOT_MEMORY_REQUIRED = TC__BOOT_MEMORY_REQUIRED
|
||||||
TC_BOOT_SECTOR_CONFIG_OFFSET = TC__BOOT_SECTOR_CONFIG_OFFSET
|
TC_BOOT_LOADER_SEGMENT = TC__BOOT_LOADER_SEGMENT
|
||||||
TC_BOOT_SECTOR_USER_CONFIG_OFFSET = TC__BOOT_SECTOR_USER_CONFIG_OFFSET
|
TC_BOOT_LOADER_SEGMENT_LOW = TC__BOOT_LOADER_SEGMENT_LOW
|
||||||
TC_BOOT_LOADER_DECOMPRESSOR_START_SECTOR = TC__BOOT_LOADER_DECOMPRESSOR_START_SECTOR
|
TC_COM_EXECUTABLE_OFFSET = TC__COM_EXECUTABLE_OFFSET
|
||||||
TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT = TC__BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT
|
TC_BOOT_LOADER_LOWMEM_SEGMENT = TC__BOOT_LOADER_LOWMEM_SEGMENT
|
||||||
TC_BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE = TC__BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE
|
TC_BOOT_LOADER_BUFFER_SEGMENT = TC__BOOT_LOADER_BUFFER_SEGMENT
|
||||||
TC_BOOT_LOADER_COMPRESSED_BUFFER_OFFSET = TC__BOOT_LOADER_COMPRESSED_BUFFER_OFFSET
|
TC_BOOT_LOADER_ALT_SEGMENT = TC__BOOT_LOADER_ALT_SEGMENT
|
||||||
TC_BOOT_LOADER_START_SECTOR = TC__BOOT_LOADER_START_SECTOR
|
TC_BOOT_LOADER_STACK_TOP = TC__BOOT_LOADER_STACK_TOP
|
||||||
TC_MAX_BOOT_LOADER_SECTOR_COUNT = TC__MAX_BOOT_LOADER_SECTOR_COUNT
|
TC_LB_SIZE = TC__LB_SIZE
|
||||||
TC_MAX_BOOT_LOADER_DECOMPRESSED_SIZE = TC__MAX_BOOT_LOADER_DECOMPRESSED_SIZE
|
TC_BOOT_LOADER_AREA_SECTOR_COUNT = TC__BOOT_LOADER_AREA_SECTOR_COUNT
|
||||||
TC_BOOT_LOADER_BACKUP_SECTOR_COUNT = TC__BOOT_LOADER_BACKUP_SECTOR_COUNT
|
TC_BOOT_SECTOR_LOADER_LENGTH_OFFSET = TC__BOOT_SECTOR_LOADER_LENGTH_OFFSET
|
||||||
TC_GZIP_HEADER_SIZE = TC__GZIP_HEADER_SIZE
|
TC_BOOT_SECTOR_LOADER_CHECKSUM_OFFSET = TC__BOOT_SECTOR_LOADER_CHECKSUM_OFFSET
|
||||||
TC_BOOT_CFG_FLAG_AREA_SIZE = TC__BOOT_CFG_FLAG_AREA_SIZE
|
TC_BOOT_SECTOR_CONFIG_OFFSET = TC__BOOT_SECTOR_CONFIG_OFFSET
|
||||||
TC_BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE = TC__BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE
|
TC_BOOT_SECTOR_USER_CONFIG_OFFSET = TC__BOOT_SECTOR_USER_CONFIG_OFFSET
|
||||||
TC_BOOT_CFG_FLAG_WINDOWS_VISTA_OR_LATER = TC__BOOT_CFG_FLAG_WINDOWS_VISTA_OR_LATER
|
TC_BOOT_LOADER_DECOMPRESSOR_START_SECTOR = TC__BOOT_LOADER_DECOMPRESSOR_START_SECTOR
|
||||||
TC_BOOT_CFG_FLAG_RESCUE_DISK_ORIG_SYS_LOADER = TC__BOOT_CFG_FLAG_RESCUE_DISK_ORIG_SYS_LOADER
|
TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT = TC__BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT
|
||||||
TC_BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE = TC__BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE
|
TC_BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE = TC__BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE
|
||||||
TC_BOOT_USER_CFG_FLAG_SILENT_MODE = TC__BOOT_USER_CFG_FLAG_SILENT_MODE
|
TC_BOOT_LOADER_COMPRESSED_BUFFER_OFFSET = TC__BOOT_LOADER_COMPRESSED_BUFFER_OFFSET
|
||||||
TC_HIDDEN_OS_CREATION_PHASE_NONE = TC__HIDDEN_OS_CREATION_PHASE_NONE
|
TC_BOOT_LOADER_START_SECTOR = TC__BOOT_LOADER_START_SECTOR
|
||||||
TC_HIDDEN_OS_CREATION_PHASE_CLONING = TC__HIDDEN_OS_CREATION_PHASE_CLONING
|
TC_MAX_BOOT_LOADER_SECTOR_COUNT = TC__MAX_BOOT_LOADER_SECTOR_COUNT
|
||||||
TC_HIDDEN_OS_CREATION_PHASE_WIPING = TC__HIDDEN_OS_CREATION_PHASE_WIPING
|
TC_MAX_BOOT_LOADER_DECOMPRESSED_SIZE = TC__MAX_BOOT_LOADER_DECOMPRESSED_SIZE
|
||||||
TC_HIDDEN_OS_CREATION_PHASE_WIPED = TC__HIDDEN_OS_CREATION_PHASE_WIPED
|
TC_BOOT_LOADER_BACKUP_SECTOR_COUNT = TC__BOOT_LOADER_BACKUP_SECTOR_COUNT
|
||||||
|
TC_GZIP_HEADER_SIZE = TC__GZIP_HEADER_SIZE
|
||||||
#else // TC_ASM_PREPROCESS
|
TC_BOOT_CFG_FLAG_AREA_SIZE = TC__BOOT_CFG_FLAG_AREA_SIZE
|
||||||
|
TC_BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE = TC__BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE
|
||||||
#define TC_HEX(N) 0x##N
|
TC_BOOT_CFG_FLAG_WINDOWS_VISTA_OR_LATER = TC__BOOT_CFG_FLAG_WINDOWS_VISTA_OR_LATER
|
||||||
#define TC_UNSIGNED(N) N##U
|
TC_BOOT_CFG_FLAG_RESCUE_DISK_ORIG_SYS_LOADER = TC__BOOT_CFG_FLAG_RESCUE_DISK_ORIG_SYS_LOADER
|
||||||
|
TC_BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE = TC__BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE
|
||||||
#define TC_BOOT_MEMORY_REQUIRED TC__BOOT_MEMORY_REQUIRED
|
TC_BOOT_USER_CFG_FLAG_SILENT_MODE = TC__BOOT_USER_CFG_FLAG_SILENT_MODE
|
||||||
#define TC_BOOT_LOADER_SEGMENT TC__BOOT_LOADER_SEGMENT
|
TC_HIDDEN_OS_CREATION_PHASE_NONE = TC__HIDDEN_OS_CREATION_PHASE_NONE
|
||||||
#define TC_COM_EXECUTABLE_OFFSET TC__COM_EXECUTABLE_OFFSET
|
TC_HIDDEN_OS_CREATION_PHASE_CLONING = TC__HIDDEN_OS_CREATION_PHASE_CLONING
|
||||||
#define TC_BOOT_LOADER_LOWMEM_SEGMENT TC__BOOT_LOADER_LOWMEM_SEGMENT
|
TC_HIDDEN_OS_CREATION_PHASE_WIPING = TC__HIDDEN_OS_CREATION_PHASE_WIPING
|
||||||
#define TC_BOOT_LOADER_BUFFER_SEGMENT TC__BOOT_LOADER_BUFFER_SEGMENT
|
TC_HIDDEN_OS_CREATION_PHASE_WIPED = TC__HIDDEN_OS_CREATION_PHASE_WIPED
|
||||||
#define TC_BOOT_LOADER_ALT_SEGMENT TC__BOOT_LOADER_ALT_SEGMENT
|
|
||||||
#define TC_BOOT_LOADER_STACK_TOP (TC__BOOT_LOADER_STACK_TOP)
|
#else // TC_ASM_PREPROCESS
|
||||||
#define TC_BOOT_LOADER_AREA_SECTOR_COUNT TC__BOOT_LOADER_AREA_SECTOR_COUNT
|
|
||||||
#define TC_BOOT_SECTOR_USER_MESSAGE_OFFSET TC__BOOT_SECTOR_USER_MESSAGE_OFFSET
|
#define TC_HEX(N) 0x##N
|
||||||
#define TC_BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_SIZE TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_SIZE
|
#define TC_UNSIGNED(N) N##U
|
||||||
#define TC_BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_OFFSET TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_OFFSET
|
|
||||||
#define TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH TC__BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH
|
#define TC_BOOT_MEMORY_REQUIRED TC__BOOT_MEMORY_REQUIRED
|
||||||
#define TC_BOOT_SECTOR_VERSION_OFFSET TC__BOOT_SECTOR_VERSION_OFFSET
|
#define TC_BOOT_LOADER_SEGMENT TC__BOOT_LOADER_SEGMENT
|
||||||
#define TC_BOOT_SECTOR_LOADER_LENGTH_OFFSET TC__BOOT_SECTOR_LOADER_LENGTH_OFFSET
|
#define TC_COM_EXECUTABLE_OFFSET TC__COM_EXECUTABLE_OFFSET
|
||||||
#define TC_BOOT_SECTOR_LOADER_CHECKSUM_OFFSET TC__BOOT_SECTOR_LOADER_CHECKSUM_OFFSET
|
#define TC_BOOT_LOADER_LOWMEM_SEGMENT TC__BOOT_LOADER_LOWMEM_SEGMENT
|
||||||
#define TC_BOOT_LOADER_DECOMPRESSOR_START_SECTOR TC__BOOT_LOADER_DECOMPRESSOR_START_SECTOR
|
#define TC_BOOT_LOADER_BUFFER_SEGMENT TC__BOOT_LOADER_BUFFER_SEGMENT
|
||||||
#define TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT TC__BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT
|
#define TC_BOOT_LOADER_ALT_SEGMENT TC__BOOT_LOADER_ALT_SEGMENT
|
||||||
#define TC_BOOT_SECTOR_CONFIG_OFFSET TC__BOOT_SECTOR_CONFIG_OFFSET
|
#define TC_BOOT_LOADER_STACK_TOP (TC__BOOT_LOADER_STACK_TOP)
|
||||||
#define TC_BOOT_SECTOR_USER_CONFIG_OFFSET TC__BOOT_SECTOR_USER_CONFIG_OFFSET
|
#define TC_BOOT_LOADER_AREA_SECTOR_COUNT TC__BOOT_LOADER_AREA_SECTOR_COUNT
|
||||||
#define TC_BOOT_LOADER_START_SECTOR TC__BOOT_LOADER_START_SECTOR
|
#define TC_BOOT_SECTOR_USER_MESSAGE_OFFSET TC__BOOT_SECTOR_USER_MESSAGE_OFFSET
|
||||||
#define TC_LB_SIZE TC__LB_SIZE
|
#define TC_BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_SIZE TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_SIZE
|
||||||
#define TC_MAX_BOOT_LOADER_SECTOR_COUNT TC__MAX_BOOT_LOADER_SECTOR_COUNT
|
#define TC_BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_OFFSET TC__BOOT_SECTOR_OUTER_VOLUME_BAK_HEADER_CRC_OFFSET
|
||||||
#define TC_MAX_BOOT_LOADER_DECOMPRESSED_SIZE TC__MAX_BOOT_LOADER_DECOMPRESSED_SIZE
|
#define TC_BOOT_SECTOR_PIM_VALUE_SIZE TC__BOOT_SECTOR_PIM_VALUE_SIZE
|
||||||
#define TC_BOOT_LOADER_BACKUP_SECTOR_COUNT TC__BOOT_LOADER_BACKUP_SECTOR_COUNT
|
#define TC_BOOT_SECTOR_PIM_VALUE_OFFSET TC__BOOT_SECTOR_PIM_VALUE_OFFSET
|
||||||
#define TC_GZIP_HEADER_SIZE TC__GZIP_HEADER_SIZE
|
#define TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH TC__BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH
|
||||||
#define TC_BOOT_CFG_FLAG_AREA_SIZE TC__BOOT_CFG_FLAG_AREA_SIZE
|
#define TC_BOOT_SECTOR_VERSION_OFFSET TC__BOOT_SECTOR_VERSION_OFFSET
|
||||||
#define TC_BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE TC__BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE
|
#define TC_BOOT_SECTOR_LOADER_LENGTH_OFFSET TC__BOOT_SECTOR_LOADER_LENGTH_OFFSET
|
||||||
#define TC_BOOT_CFG_FLAG_WINDOWS_VISTA_OR_LATER TC__BOOT_CFG_FLAG_WINDOWS_VISTA_OR_LATER
|
#define TC_BOOT_SECTOR_LOADER_CHECKSUM_OFFSET TC__BOOT_SECTOR_LOADER_CHECKSUM_OFFSET
|
||||||
#define TC_BOOT_CFG_FLAG_RESCUE_DISK_ORIG_SYS_LOADER TC__BOOT_CFG_FLAG_RESCUE_DISK_ORIG_SYS_LOADER
|
#define TC_BOOT_LOADER_DECOMPRESSOR_START_SECTOR TC__BOOT_LOADER_DECOMPRESSOR_START_SECTOR
|
||||||
#define TC_BOOT_CFG_FLAG_RESCUE_DISABLE_HW_ENCRYPTION TC__BOOT_CFG_FLAG_RESCUE_DISABLE_HW_ENCRYPTION
|
#define TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT TC__BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT
|
||||||
#define TC_BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE TC__BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE
|
#define TC_BOOT_SECTOR_CONFIG_OFFSET TC__BOOT_SECTOR_CONFIG_OFFSET
|
||||||
#define TC_BOOT_USER_CFG_FLAG_SILENT_MODE TC__BOOT_USER_CFG_FLAG_SILENT_MODE
|
#define TC_BOOT_SECTOR_USER_CONFIG_OFFSET TC__BOOT_SECTOR_USER_CONFIG_OFFSET
|
||||||
#define TC_BOOT_USER_CFG_FLAG_DISABLE_ESC TC__BOOT_USER_CFG_FLAG_DISABLE_ESC
|
#define TC_BOOT_LOADER_START_SECTOR TC__BOOT_LOADER_START_SECTOR
|
||||||
#define TC_BOOT_USER_CFG_FLAG_DISABLE_HW_ENCRYPTION TC__BOOT_USER_CFG_FLAG_DISABLE_HW_ENCRYPTION
|
#define TC_LB_SIZE TC__LB_SIZE
|
||||||
#define TC_HIDDEN_OS_CREATION_PHASE_NONE TC__HIDDEN_OS_CREATION_PHASE_NONE
|
#define TC_MAX_BOOT_LOADER_SECTOR_COUNT TC__MAX_BOOT_LOADER_SECTOR_COUNT
|
||||||
#define TC_HIDDEN_OS_CREATION_PHASE_CLONING TC__HIDDEN_OS_CREATION_PHASE_CLONING
|
#define TC_MAX_BOOT_LOADER_DECOMPRESSED_SIZE TC__MAX_BOOT_LOADER_DECOMPRESSED_SIZE
|
||||||
#define TC_HIDDEN_OS_CREATION_PHASE_WIPING TC__HIDDEN_OS_CREATION_PHASE_WIPING
|
#define TC_BOOT_LOADER_BACKUP_SECTOR_COUNT TC__BOOT_LOADER_BACKUP_SECTOR_COUNT
|
||||||
#define TC_HIDDEN_OS_CREATION_PHASE_WIPED TC__HIDDEN_OS_CREATION_PHASE_WIPED
|
#define TC_GZIP_HEADER_SIZE TC__GZIP_HEADER_SIZE
|
||||||
|
#define TC_BOOT_CFG_FLAG_AREA_SIZE TC__BOOT_CFG_FLAG_AREA_SIZE
|
||||||
#endif // TC_ASM_PREPROCESS
|
#define TC_BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE TC__BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE
|
||||||
|
#define TC_BOOT_CFG_FLAG_WINDOWS_VISTA_OR_LATER TC__BOOT_CFG_FLAG_WINDOWS_VISTA_OR_LATER
|
||||||
#endif // TC_HEADER_Boot_BootDefs
|
#define TC_BOOT_CFG_FLAG_RESCUE_DISK_ORIG_SYS_LOADER TC__BOOT_CFG_FLAG_RESCUE_DISK_ORIG_SYS_LOADER
|
||||||
|
#define TC_BOOT_CFG_FLAG_RESCUE_DISABLE_HW_ENCRYPTION TC__BOOT_CFG_FLAG_RESCUE_DISABLE_HW_ENCRYPTION
|
||||||
|
#define TC_BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE TC__BOOT_CFG_MASK_HIDDEN_OS_CREATION_PHASE
|
||||||
|
#define TC_BOOT_USER_CFG_FLAG_SILENT_MODE TC__BOOT_USER_CFG_FLAG_SILENT_MODE
|
||||||
|
#define TC_BOOT_USER_CFG_FLAG_DISABLE_ESC TC__BOOT_USER_CFG_FLAG_DISABLE_ESC
|
||||||
|
#define TC_BOOT_USER_CFG_FLAG_DISABLE_HW_ENCRYPTION TC__BOOT_USER_CFG_FLAG_DISABLE_HW_ENCRYPTION
|
||||||
|
#define TC_BOOT_USER_CFG_FLAG_DISABLE_PIM TC__BOOT_USER_CFG_FLAG_DISABLE_PIM
|
||||||
|
#define TC_BOOT_USER_CFG_FLAG_STORE_HASH TC__BOOT_USER_CFG_FLAG_STORE_HASH
|
||||||
|
#define TC_HIDDEN_OS_CREATION_PHASE_NONE TC__HIDDEN_OS_CREATION_PHASE_NONE
|
||||||
|
#define TC_HIDDEN_OS_CREATION_PHASE_CLONING TC__HIDDEN_OS_CREATION_PHASE_CLONING
|
||||||
|
#define TC_HIDDEN_OS_CREATION_PHASE_WIPING TC__HIDDEN_OS_CREATION_PHASE_WIPING
|
||||||
|
#define TC_HIDDEN_OS_CREATION_PHASE_WIPED TC__HIDDEN_OS_CREATION_PHASE_WIPED
|
||||||
|
|
||||||
|
#endif // TC_ASM_PREPROCESS
|
||||||
|
|
||||||
|
#define EFI_BOOTARGS_REGIONS_LOW 0x90000, 0x88000, 0x80000
|
||||||
|
#define EFI_BOOTARGS_REGIONS_HIGH \
|
||||||
|
0x100000, 0x200000, 0x300000, 0x400000, 0x500000, 0x600000, 0x700000, 0x800000, \
|
||||||
|
0x900000, 0xA00000, 0xB00000, 0xC00000, 0xD00000, 0xE00000, 0xF00000, 0x1000000
|
||||||
|
|
||||||
|
#define EFI_BOOTARGS_REGIONS EFI_BOOTARGS_REGIONS_LOW, EFI_BOOTARGS_REGIONS_HIGH
|
||||||
|
|
||||||
|
#endif // TC_HEADER_Boot_BootDefs
|
||||||
|
|||||||
+491
-487
@@ -1,487 +1,491 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-2011 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#include "Bios.h"
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#include "BootConsoleIo.h"
|
code distribution packages.
|
||||||
#include "BootConfig.h"
|
*/
|
||||||
#include "BootDebug.h"
|
|
||||||
#include "BootDefs.h"
|
#include "Bios.h"
|
||||||
#include "BootDiskIo.h"
|
#include "BootConsoleIo.h"
|
||||||
#include "BootStrings.h"
|
#include "BootConfig.h"
|
||||||
|
#include "BootDebug.h"
|
||||||
|
#include "BootDefs.h"
|
||||||
byte SectorBuffer[TC_LB_SIZE];
|
#include "BootDiskIo.h"
|
||||||
|
#include "BootStrings.h"
|
||||||
#ifdef TC_BOOT_DEBUG_ENABLED
|
|
||||||
static bool SectorBufferInUse = false;
|
|
||||||
|
byte SectorBuffer[TC_LB_SIZE];
|
||||||
void AcquireSectorBuffer ()
|
|
||||||
{
|
#ifdef TC_BOOT_DEBUG_ENABLED
|
||||||
if (SectorBufferInUse)
|
static bool SectorBufferInUse = false;
|
||||||
TC_THROW_FATAL_EXCEPTION;
|
|
||||||
|
void AcquireSectorBuffer ()
|
||||||
SectorBufferInUse = true;
|
{
|
||||||
}
|
if (SectorBufferInUse)
|
||||||
|
TC_THROW_FATAL_EXCEPTION;
|
||||||
|
|
||||||
void ReleaseSectorBuffer ()
|
SectorBufferInUse = true;
|
||||||
{
|
}
|
||||||
SectorBufferInUse = false;
|
|
||||||
}
|
|
||||||
|
void ReleaseSectorBuffer ()
|
||||||
#endif
|
{
|
||||||
|
SectorBufferInUse = false;
|
||||||
|
}
|
||||||
bool IsLbaSupported (byte drive)
|
|
||||||
{
|
#endif
|
||||||
static byte CachedDrive = TC_INVALID_BIOS_DRIVE;
|
|
||||||
static bool CachedStatus;
|
|
||||||
uint16 result = 0;
|
bool IsLbaSupported (byte drive)
|
||||||
|
{
|
||||||
if (CachedDrive == drive)
|
static byte CachedDrive = TC_INVALID_BIOS_DRIVE;
|
||||||
goto ret;
|
static bool CachedStatus;
|
||||||
|
uint16 result = 0;
|
||||||
__asm
|
|
||||||
{
|
if (CachedDrive == drive)
|
||||||
mov bx, 0x55aa
|
goto ret;
|
||||||
mov dl, drive
|
|
||||||
mov ah, 0x41
|
__asm
|
||||||
int 0x13
|
{
|
||||||
jc err
|
mov bx, 0x55aa
|
||||||
mov result, bx
|
mov dl, drive
|
||||||
err:
|
mov ah, 0x41
|
||||||
}
|
int 0x13
|
||||||
|
jc err
|
||||||
CachedDrive = drive;
|
mov result, bx
|
||||||
CachedStatus = (result == 0xaa55);
|
err:
|
||||||
ret:
|
}
|
||||||
return CachedStatus;
|
|
||||||
}
|
CachedDrive = drive;
|
||||||
|
CachedStatus = (result == 0xaa55);
|
||||||
|
ret:
|
||||||
void PrintDiskError (BiosResult error, bool write, byte drive, const uint64 *sector, const ChsAddress *chs)
|
return CachedStatus;
|
||||||
{
|
}
|
||||||
PrintEndl();
|
|
||||||
Print (write ? "Write" : "Read"); Print (" error:");
|
|
||||||
Print (error);
|
void PrintDiskError (BiosResult error, bool write, byte drive, const uint64 *sector, const ChsAddress *chs)
|
||||||
Print (" Drive:");
|
{
|
||||||
Print (drive ^ 0x80);
|
PrintEndl();
|
||||||
|
Print (write ? "Write" : "Read"); Print (" error:");
|
||||||
if (sector)
|
Print (error);
|
||||||
{
|
Print (" Drive:");
|
||||||
Print (" Sector:");
|
Print (drive ^ 0x80);
|
||||||
Print (*sector);
|
|
||||||
}
|
if (sector)
|
||||||
|
{
|
||||||
if (chs)
|
Print (" Sector:");
|
||||||
{
|
Print (*sector);
|
||||||
Print (" CHS:");
|
}
|
||||||
Print (*chs);
|
|
||||||
}
|
if (chs)
|
||||||
|
{
|
||||||
PrintEndl();
|
Print (" CHS:");
|
||||||
Beep();
|
Print (*chs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PrintEndl();
|
||||||
void Print (const ChsAddress &chs)
|
Beep();
|
||||||
{
|
}
|
||||||
Print (chs.Cylinder);
|
|
||||||
PrintChar ('/');
|
|
||||||
Print (chs.Head);
|
void Print (const ChsAddress &chs)
|
||||||
PrintChar ('/');
|
{
|
||||||
Print (chs.Sector);
|
Print (chs.Cylinder);
|
||||||
}
|
PrintChar ('/');
|
||||||
|
Print (chs.Head);
|
||||||
|
PrintChar ('/');
|
||||||
void PrintSectorCountInMB (const uint64 §orCount)
|
Print (chs.Sector);
|
||||||
{
|
}
|
||||||
Print (sectorCount >> (TC_LB_SIZE_BIT_SHIFT_DIVISOR + 2)); Print (" MB ");
|
|
||||||
}
|
|
||||||
|
void PrintSectorCountInMB (const uint64 §orCount)
|
||||||
|
{
|
||||||
BiosResult ReadWriteSectors (bool write, uint16 bufferSegment, uint16 bufferOffset, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
Print (sectorCount >> (TC_LB_SIZE_BIT_SHIFT_DIVISOR + 2)); Print (" MB ");
|
||||||
{
|
}
|
||||||
CheckStack();
|
|
||||||
|
|
||||||
byte cylinderLow = (byte) chs.Cylinder;
|
BiosResult ReadWriteSectors (bool write, uint16 bufferSegment, uint16 bufferOffset, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
||||||
byte sector = chs.Sector;
|
{
|
||||||
sector |= byte (chs.Cylinder >> 2) & 0xc0;
|
CheckStack();
|
||||||
byte function = write ? 0x03 : 0x02;
|
|
||||||
|
byte cylinderLow = (byte) chs.Cylinder;
|
||||||
BiosResult result;
|
byte sector = chs.Sector;
|
||||||
byte tryCount = TC_MAX_BIOS_DISK_IO_RETRIES;
|
sector |= byte (chs.Cylinder >> 2) & 0xc0;
|
||||||
|
byte function = write ? 0x03 : 0x02;
|
||||||
do
|
|
||||||
{
|
BiosResult result;
|
||||||
result = BiosResultSuccess;
|
byte tryCount = TC_MAX_BIOS_DISK_IO_RETRIES;
|
||||||
|
|
||||||
__asm
|
do
|
||||||
{
|
{
|
||||||
push es
|
result = BiosResultSuccess;
|
||||||
mov ax, bufferSegment
|
|
||||||
mov es, ax
|
__asm
|
||||||
mov bx, bufferOffset
|
{
|
||||||
mov dl, drive
|
push es
|
||||||
mov ch, cylinderLow
|
mov ax, bufferSegment
|
||||||
mov si, chs
|
mov es, ax
|
||||||
mov dh, [si].Head
|
mov bx, bufferOffset
|
||||||
mov cl, sector
|
mov dl, drive
|
||||||
mov al, sectorCount
|
mov ch, cylinderLow
|
||||||
mov ah, function
|
mov si, chs
|
||||||
int 0x13
|
mov dh, [si].Head
|
||||||
jnc ok // If CF=0, ignore AH to prevent issues caused by potential bugs in BIOSes
|
mov cl, sector
|
||||||
mov result, ah
|
mov al, sectorCount
|
||||||
ok:
|
mov ah, function
|
||||||
pop es
|
int 0x13
|
||||||
}
|
jnc ok // If CF=0, ignore AH to prevent issues caused by potential bugs in BIOSes
|
||||||
|
mov result, ah
|
||||||
if (result == BiosResultEccCorrected)
|
ok:
|
||||||
result = BiosResultSuccess;
|
pop es
|
||||||
|
}
|
||||||
// Some BIOSes report I/O errors prematurely in some cases
|
|
||||||
} while (result != BiosResultSuccess && --tryCount != 0);
|
if (result == BiosResultEccCorrected)
|
||||||
|
result = BiosResultSuccess;
|
||||||
if (!silent && result != BiosResultSuccess)
|
|
||||||
PrintDiskError (result, write, drive, nullptr, &chs);
|
// Some BIOSes report I/O errors prematurely in some cases
|
||||||
|
} while (result != BiosResultSuccess && --tryCount != 0);
|
||||||
return result;
|
|
||||||
}
|
if (!silent && result != BiosResultSuccess)
|
||||||
|
PrintDiskError (result, write, drive, nullptr, &chs);
|
||||||
|
|
||||||
BiosResult ReadWriteSectors (bool write, byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
return result;
|
||||||
{
|
}
|
||||||
uint16 codeSeg;
|
|
||||||
__asm mov codeSeg, cs
|
|
||||||
return ReadWriteSectors (write, codeSeg, (uint16) buffer, drive, chs, sectorCount, silent);
|
BiosResult ReadWriteSectors (bool write, byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
||||||
}
|
{
|
||||||
|
uint16 codeSeg;
|
||||||
|
__asm mov codeSeg, cs
|
||||||
BiosResult ReadSectors (byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
return ReadWriteSectors (write, codeSeg, (uint16) buffer, drive, chs, sectorCount, silent);
|
||||||
{
|
}
|
||||||
return ReadWriteSectors (false, buffer, drive, chs, sectorCount, silent);
|
|
||||||
}
|
|
||||||
|
BiosResult ReadSectors (byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
||||||
|
{
|
||||||
BiosResult WriteSectors (byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
return ReadWriteSectors (false, buffer, drive, chs, sectorCount, silent);
|
||||||
{
|
}
|
||||||
return ReadWriteSectors (true, buffer, drive, chs, sectorCount, silent);
|
|
||||||
}
|
|
||||||
|
BiosResult WriteSectors (byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent)
|
||||||
|
{
|
||||||
static BiosResult ReadWriteSectors (bool write, BiosLbaPacket &dapPacket, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
return ReadWriteSectors (true, buffer, drive, chs, sectorCount, silent);
|
||||||
{
|
}
|
||||||
CheckStack();
|
|
||||||
|
|
||||||
if (!IsLbaSupported (drive))
|
static BiosResult ReadWriteSectors (bool write, BiosLbaPacket &dapPacket, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
||||||
{
|
{
|
||||||
DriveGeometry geometry;
|
CheckStack();
|
||||||
|
|
||||||
BiosResult result = GetDriveGeometry (drive, geometry, silent);
|
if (!IsLbaSupported (drive))
|
||||||
if (result != BiosResultSuccess)
|
{
|
||||||
return result;
|
DriveGeometry geometry;
|
||||||
|
|
||||||
ChsAddress chs;
|
BiosResult result = GetDriveGeometry (drive, geometry, silent);
|
||||||
LbaToChs (geometry, sector, chs);
|
if (result != BiosResultSuccess)
|
||||||
return ReadWriteSectors (write, (uint16) (dapPacket.Buffer >> 16), (uint16) dapPacket.Buffer, drive, chs, sectorCount, silent);
|
return result;
|
||||||
}
|
|
||||||
|
ChsAddress chs;
|
||||||
dapPacket.Size = sizeof (dapPacket);
|
LbaToChs (geometry, sector, chs);
|
||||||
dapPacket.Reserved = 0;
|
return ReadWriteSectors (write, (uint16) (dapPacket.Buffer >> 16), (uint16) dapPacket.Buffer, drive, chs, sectorCount, silent);
|
||||||
dapPacket.SectorCount = sectorCount;
|
}
|
||||||
dapPacket.Sector = sector;
|
|
||||||
|
dapPacket.Size = sizeof (dapPacket);
|
||||||
byte function = write ? 0x43 : 0x42;
|
dapPacket.Reserved = 0;
|
||||||
|
dapPacket.SectorCount = sectorCount;
|
||||||
BiosResult result;
|
dapPacket.Sector = sector;
|
||||||
byte tryCount = TC_MAX_BIOS_DISK_IO_RETRIES;
|
|
||||||
|
byte function = write ? 0x43 : 0x42;
|
||||||
do
|
|
||||||
{
|
BiosResult result;
|
||||||
result = BiosResultSuccess;
|
byte tryCount = TC_MAX_BIOS_DISK_IO_RETRIES;
|
||||||
|
|
||||||
__asm
|
do
|
||||||
{
|
{
|
||||||
mov bx, 0x55aa
|
result = BiosResultSuccess;
|
||||||
mov dl, drive
|
|
||||||
mov si, [dapPacket]
|
__asm
|
||||||
mov ah, function
|
{
|
||||||
xor al, al
|
mov bx, 0x55aa
|
||||||
int 0x13
|
mov dl, drive
|
||||||
jnc ok // If CF=0, ignore AH to prevent issues caused by potential bugs in BIOSes
|
mov si, [dapPacket]
|
||||||
mov result, ah
|
mov ah, function
|
||||||
ok:
|
xor al, al
|
||||||
}
|
int 0x13
|
||||||
|
jnc ok // If CF=0, ignore AH to prevent issues caused by potential bugs in BIOSes
|
||||||
if (result == BiosResultEccCorrected)
|
mov result, ah
|
||||||
result = BiosResultSuccess;
|
ok:
|
||||||
|
}
|
||||||
// Some BIOSes report I/O errors prematurely in some cases
|
|
||||||
} while (result != BiosResultSuccess && --tryCount != 0);
|
if (result == BiosResultEccCorrected)
|
||||||
|
result = BiosResultSuccess;
|
||||||
if (!silent && result != BiosResultSuccess)
|
|
||||||
PrintDiskError (result, write, drive, §or);
|
// Some BIOSes report I/O errors prematurely in some cases
|
||||||
|
} while (result != BiosResultSuccess && --tryCount != 0);
|
||||||
return result;
|
|
||||||
}
|
if (!silent && result != BiosResultSuccess)
|
||||||
|
PrintDiskError (result, write, drive, §or);
|
||||||
|
|
||||||
static BiosResult ReadWriteSectors (bool write, byte *buffer, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
return result;
|
||||||
{
|
}
|
||||||
BiosLbaPacket dapPacket;
|
|
||||||
dapPacket.Buffer = (uint32) buffer;
|
|
||||||
return ReadWriteSectors (write, dapPacket, drive, sector, sectorCount, silent);
|
static BiosResult ReadWriteSectors (bool write, byte *buffer, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
||||||
}
|
{
|
||||||
|
BiosLbaPacket dapPacket;
|
||||||
|
dapPacket.Buffer = (uint32) buffer;
|
||||||
BiosResult ReadWriteSectors (bool write, uint16 bufferSegment, uint16 bufferOffset, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
return ReadWriteSectors (write, dapPacket, drive, sector, sectorCount, silent);
|
||||||
{
|
}
|
||||||
BiosLbaPacket dapPacket;
|
|
||||||
dapPacket.Buffer = ((uint32) bufferSegment << 16) | bufferOffset;
|
|
||||||
return ReadWriteSectors (write, dapPacket, drive, sector, sectorCount, silent);
|
BiosResult ReadWriteSectors (bool write, uint16 bufferSegment, uint16 bufferOffset, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
||||||
}
|
{
|
||||||
|
BiosLbaPacket dapPacket;
|
||||||
BiosResult ReadSectors (uint16 bufferSegment, uint16 bufferOffset, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
dapPacket.Buffer = ((uint32) bufferSegment << 16) | bufferOffset;
|
||||||
{
|
return ReadWriteSectors (write, dapPacket, drive, sector, sectorCount, silent);
|
||||||
return ReadWriteSectors (false, bufferSegment, bufferOffset, drive, sector, sectorCount, silent);
|
}
|
||||||
}
|
|
||||||
|
BiosResult ReadSectors (uint16 bufferSegment, uint16 bufferOffset, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
||||||
|
{
|
||||||
BiosResult ReadSectors (byte *buffer, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
return ReadWriteSectors (false, bufferSegment, bufferOffset, drive, sector, sectorCount, silent);
|
||||||
{
|
}
|
||||||
BiosResult result;
|
|
||||||
uint16 codeSeg;
|
|
||||||
__asm mov codeSeg, cs
|
BiosResult ReadSectors (byte *buffer, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
||||||
|
{
|
||||||
result = ReadSectors (BootStarted ? codeSeg : TC_BOOT_LOADER_ALT_SEGMENT, (uint16) buffer, drive, sector, sectorCount, silent);
|
BiosResult result;
|
||||||
|
uint16 codeSeg;
|
||||||
// Alternative segment is used to prevent memory corruption caused by buggy BIOSes
|
__asm mov codeSeg, cs
|
||||||
if (!BootStarted)
|
|
||||||
CopyMemory (TC_BOOT_LOADER_ALT_SEGMENT, (uint16) buffer, buffer, sectorCount * TC_LB_SIZE);
|
result = ReadSectors (BootStarted ? codeSeg : TC_BOOT_LOADER_ALT_SEGMENT, (uint16) buffer, drive, sector, sectorCount, silent);
|
||||||
|
|
||||||
return result;
|
// Alternative segment is used to prevent memory corruption caused by buggy BIOSes
|
||||||
}
|
if (!BootStarted)
|
||||||
|
CopyMemory (TC_BOOT_LOADER_ALT_SEGMENT, (uint16) buffer, buffer, sectorCount * TC_LB_SIZE);
|
||||||
|
|
||||||
BiosResult WriteSectors (byte *buffer, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
return result;
|
||||||
{
|
}
|
||||||
return ReadWriteSectors (true, buffer, drive, sector, sectorCount, silent);
|
|
||||||
}
|
|
||||||
|
BiosResult WriteSectors (byte *buffer, byte drive, const uint64 §or, uint16 sectorCount, bool silent)
|
||||||
|
{
|
||||||
BiosResult GetDriveGeometry (byte drive, DriveGeometry &geometry, bool silent)
|
return ReadWriteSectors (true, buffer, drive, sector, sectorCount, silent);
|
||||||
{
|
}
|
||||||
CheckStack();
|
|
||||||
|
|
||||||
byte maxCylinderLow, maxHead, maxSector;
|
BiosResult GetDriveGeometry (byte drive, DriveGeometry &geometry, bool silent)
|
||||||
BiosResult result;
|
{
|
||||||
__asm
|
CheckStack();
|
||||||
{
|
|
||||||
push es
|
byte maxCylinderLow, maxHead, maxSector;
|
||||||
mov dl, drive
|
BiosResult result;
|
||||||
mov ah, 0x08
|
__asm
|
||||||
int 0x13
|
{
|
||||||
|
push es
|
||||||
mov result, ah
|
mov dl, drive
|
||||||
mov maxCylinderLow, ch
|
mov ah, 0x08
|
||||||
mov maxSector, cl
|
int 0x13
|
||||||
mov maxHead, dh
|
|
||||||
pop es
|
mov result, ah
|
||||||
}
|
mov maxCylinderLow, ch
|
||||||
|
mov maxSector, cl
|
||||||
if (result == BiosResultSuccess)
|
mov maxHead, dh
|
||||||
{
|
pop es
|
||||||
geometry.Cylinders = (maxCylinderLow | (uint16 (maxSector & 0xc0) << 2)) + 1;
|
}
|
||||||
geometry.Heads = maxHead + 1;
|
|
||||||
geometry.Sectors = maxSector & ~0xc0;
|
if (result == BiosResultSuccess)
|
||||||
}
|
{
|
||||||
else if (!silent)
|
geometry.Cylinders = (maxCylinderLow | (uint16 (maxSector & 0xc0) << 2)) + 1;
|
||||||
{
|
geometry.Heads = maxHead + 1;
|
||||||
Print ("Drive ");
|
geometry.Sectors = maxSector & ~0xc0;
|
||||||
Print (drive ^ 0x80);
|
}
|
||||||
Print (" not found: ");
|
else if (!silent)
|
||||||
PrintErrorNoEndl ("");
|
{
|
||||||
Print (result);
|
Print ("Drive ");
|
||||||
PrintEndl();
|
Print (drive ^ 0x80);
|
||||||
}
|
Print (" not found: ");
|
||||||
|
PrintErrorNoEndl ("");
|
||||||
return result;
|
Print (result);
|
||||||
}
|
PrintEndl();
|
||||||
|
}
|
||||||
|
|
||||||
void ChsToLba (const DriveGeometry &geometry, const ChsAddress &chs, uint64 &lba)
|
return result;
|
||||||
{
|
}
|
||||||
lba.HighPart = 0;
|
|
||||||
lba.LowPart = (uint32 (chs.Cylinder) * geometry.Heads + chs.Head) * geometry.Sectors + chs.Sector - 1;
|
|
||||||
}
|
void ChsToLba (const DriveGeometry &geometry, const ChsAddress &chs, uint64 &lba)
|
||||||
|
{
|
||||||
|
lba.HighPart = 0;
|
||||||
void LbaToChs (const DriveGeometry &geometry, const uint64 &lba, ChsAddress &chs)
|
lba.LowPart = (uint32 (chs.Cylinder) * geometry.Heads + chs.Head) * geometry.Sectors + chs.Sector - 1;
|
||||||
{
|
}
|
||||||
chs.Sector = (byte) ((lba.LowPart % geometry.Sectors) + 1);
|
|
||||||
uint32 ch = lba.LowPart / geometry.Sectors;
|
|
||||||
chs.Head = (byte) (ch % geometry.Heads);
|
void LbaToChs (const DriveGeometry &geometry, const uint64 &lba, ChsAddress &chs)
|
||||||
chs.Cylinder = (uint16) (ch / geometry.Heads);
|
{
|
||||||
}
|
chs.Sector = (byte) ((lba.LowPart % geometry.Sectors) + 1);
|
||||||
|
uint32 ch = lba.LowPart / geometry.Sectors;
|
||||||
|
chs.Head = (byte) (ch % geometry.Heads);
|
||||||
void PartitionEntryMBRToPartition (const PartitionEntryMBR &partEntry, Partition &partition)
|
chs.Cylinder = (uint16) (ch / geometry.Heads);
|
||||||
{
|
}
|
||||||
partition.Active = partEntry.BootIndicator == 0x80;
|
|
||||||
partition.EndSector.HighPart = 0;
|
|
||||||
partition.EndSector.LowPart = partEntry.StartLBA + partEntry.SectorCountLBA - 1;
|
void PartitionEntryMBRToPartition (const PartitionEntryMBR &partEntry, Partition &partition)
|
||||||
partition.SectorCount.HighPart = 0;
|
{
|
||||||
partition.SectorCount.LowPart = partEntry.SectorCountLBA;
|
partition.Active = partEntry.BootIndicator == 0x80;
|
||||||
partition.StartSector.HighPart = 0;
|
partition.EndSector.HighPart = 0;
|
||||||
partition.StartSector.LowPart = partEntry.StartLBA;
|
partition.EndSector.LowPart = partEntry.StartLBA + partEntry.SectorCountLBA - 1;
|
||||||
partition.Type = partEntry.Type;
|
partition.SectorCount.HighPart = 0;
|
||||||
}
|
partition.SectorCount.LowPart = partEntry.SectorCountLBA;
|
||||||
|
partition.StartSector.HighPart = 0;
|
||||||
|
partition.StartSector.LowPart = partEntry.StartLBA;
|
||||||
BiosResult ReadWriteMBR (bool write, byte drive, bool silent)
|
partition.Type = partEntry.Type;
|
||||||
{
|
}
|
||||||
uint64 mbrSector;
|
|
||||||
mbrSector.HighPart = 0;
|
|
||||||
mbrSector.LowPart = 0;
|
BiosResult ReadWriteMBR (bool write, byte drive, bool silent)
|
||||||
|
{
|
||||||
if (write)
|
uint64 mbrSector;
|
||||||
return WriteSectors (SectorBuffer, drive, mbrSector, 1, silent);
|
mbrSector.HighPart = 0;
|
||||||
|
mbrSector.LowPart = 0;
|
||||||
return ReadSectors (SectorBuffer, drive, mbrSector, 1, silent); // Uses alternative segment
|
|
||||||
}
|
if (write)
|
||||||
|
return WriteSectors (SectorBuffer, drive, mbrSector, 1, silent);
|
||||||
|
|
||||||
BiosResult GetDrivePartitions (byte drive, Partition *partitionArray, size_t partitionArrayCapacity, size_t &partitionCount, bool activeOnly, Partition *findPartitionFollowingThis, bool silent)
|
return ReadSectors (SectorBuffer, drive, mbrSector, 1, silent); // Uses alternative segment
|
||||||
{
|
}
|
||||||
Partition *followingPartition;
|
|
||||||
Partition tmpPartition;
|
|
||||||
|
BiosResult GetDrivePartitions (byte drive, Partition *partitionArray, size_t partitionArrayCapacity, size_t &partitionCount, bool activeOnly, Partition *findPartitionFollowingThis, bool silent)
|
||||||
if (findPartitionFollowingThis)
|
{
|
||||||
{
|
Partition *followingPartition;
|
||||||
assert (partitionArrayCapacity == 1);
|
Partition tmpPartition;
|
||||||
partitionArrayCapacity = 0xff;
|
|
||||||
followingPartition = partitionArray;
|
if (findPartitionFollowingThis)
|
||||||
partitionArray = &tmpPartition;
|
{
|
||||||
|
assert (partitionArrayCapacity == 1);
|
||||||
followingPartition->Drive = TC_INVALID_BIOS_DRIVE;
|
partitionArrayCapacity = 0xff;
|
||||||
followingPartition->StartSector.LowPart = 0xFFFFffffUL;
|
followingPartition = partitionArray;
|
||||||
}
|
partitionArray = &tmpPartition;
|
||||||
|
|
||||||
AcquireSectorBuffer();
|
followingPartition->Drive = TC_INVALID_BIOS_DRIVE;
|
||||||
BiosResult result = ReadWriteMBR (false, drive, silent);
|
followingPartition->StartSector.LowPart = 0xFFFFffffUL;
|
||||||
ReleaseSectorBuffer();
|
}
|
||||||
|
|
||||||
partitionCount = 0;
|
AcquireSectorBuffer();
|
||||||
|
BiosResult result = ReadWriteMBR (false, drive, silent);
|
||||||
MBR *mbr = (MBR *) SectorBuffer;
|
ReleaseSectorBuffer();
|
||||||
if (result != BiosResultSuccess || mbr->Signature != 0xaa55)
|
|
||||||
return result;
|
partitionCount = 0;
|
||||||
|
|
||||||
PartitionEntryMBR mbrPartitions[4];
|
MBR *mbr = (MBR *) SectorBuffer;
|
||||||
memcpy (mbrPartitions, mbr->Partitions, sizeof (mbrPartitions));
|
if (result != BiosResultSuccess || mbr->Signature != 0xaa55)
|
||||||
size_t partitionArrayPos = 0, partitionNumber;
|
return result;
|
||||||
|
|
||||||
for (partitionNumber = 0;
|
PartitionEntryMBR mbrPartitions[4];
|
||||||
partitionNumber < array_capacity (mbrPartitions) && partitionArrayPos < partitionArrayCapacity;
|
memcpy (mbrPartitions, mbr->Partitions, sizeof (mbrPartitions));
|
||||||
++partitionNumber)
|
size_t partitionArrayPos = 0, partitionNumber;
|
||||||
{
|
|
||||||
const PartitionEntryMBR &partEntry = mbrPartitions[partitionNumber];
|
for (partitionNumber = 0;
|
||||||
|
partitionNumber < array_capacity (mbrPartitions) && partitionArrayPos < partitionArrayCapacity;
|
||||||
if (partEntry.SectorCountLBA > 0)
|
++partitionNumber)
|
||||||
{
|
{
|
||||||
Partition &partition = partitionArray[partitionArrayPos];
|
const PartitionEntryMBR &partEntry = mbrPartitions[partitionNumber];
|
||||||
PartitionEntryMBRToPartition (partEntry, partition);
|
|
||||||
|
if (partEntry.SectorCountLBA > 0)
|
||||||
if (activeOnly && !partition.Active)
|
{
|
||||||
continue;
|
Partition &partition = partitionArray[partitionArrayPos];
|
||||||
|
PartitionEntryMBRToPartition (partEntry, partition);
|
||||||
partition.Drive = drive;
|
|
||||||
partition.Number = partitionArrayPos;
|
if (activeOnly && !partition.Active)
|
||||||
|
continue;
|
||||||
if (partEntry.Type == 0x5 || partEntry.Type == 0xf) // Extended partition
|
|
||||||
{
|
partition.Drive = drive;
|
||||||
if (IsLbaSupported (drive))
|
partition.Number = partitionArrayPos;
|
||||||
{
|
|
||||||
// Find all extended partitions
|
if (partEntry.Type == 0x5 || partEntry.Type == 0xf) // Extended partition
|
||||||
uint64 firstExtStartLBA = partition.StartSector;
|
{
|
||||||
uint64 extStartLBA = partition.StartSector;
|
if (IsLbaSupported (drive))
|
||||||
MBR *extMbr = (MBR *) SectorBuffer;
|
{
|
||||||
|
// Find all extended partitions
|
||||||
while (partitionArrayPos < partitionArrayCapacity &&
|
uint64 firstExtStartLBA = partition.StartSector;
|
||||||
(result = ReadSectors ((byte *) extMbr, drive, extStartLBA, 1, silent)) == BiosResultSuccess
|
uint64 extStartLBA = partition.StartSector;
|
||||||
&& extMbr->Signature == 0xaa55)
|
MBR *extMbr = (MBR *) SectorBuffer;
|
||||||
{
|
|
||||||
if (extMbr->Partitions[0].SectorCountLBA > 0)
|
while (partitionArrayPos < partitionArrayCapacity &&
|
||||||
{
|
(result = ReadSectors ((byte *) extMbr, drive, extStartLBA, 1, silent)) == BiosResultSuccess
|
||||||
Partition &logPart = partitionArray[partitionArrayPos];
|
&& extMbr->Signature == 0xaa55)
|
||||||
PartitionEntryMBRToPartition (extMbr->Partitions[0], logPart);
|
{
|
||||||
logPart.Drive = drive;
|
if (extMbr->Partitions[0].SectorCountLBA > 0)
|
||||||
|
{
|
||||||
logPart.Number = partitionArrayPos;
|
Partition &logPart = partitionArray[partitionArrayPos];
|
||||||
logPart.Primary = false;
|
PartitionEntryMBRToPartition (extMbr->Partitions[0], logPart);
|
||||||
|
logPart.Drive = drive;
|
||||||
logPart.StartSector.LowPart += extStartLBA.LowPart;
|
|
||||||
logPart.EndSector.LowPart += extStartLBA.LowPart;
|
logPart.Number = partitionArrayPos;
|
||||||
|
logPart.Primary = false;
|
||||||
if (findPartitionFollowingThis)
|
|
||||||
{
|
logPart.StartSector.LowPart += extStartLBA.LowPart;
|
||||||
if (logPart.StartSector.LowPart > findPartitionFollowingThis->EndSector.LowPart
|
logPart.EndSector.LowPart += extStartLBA.LowPart;
|
||||||
&& logPart.StartSector.LowPart < followingPartition->StartSector.LowPart)
|
|
||||||
{
|
if (findPartitionFollowingThis)
|
||||||
*followingPartition = logPart;
|
{
|
||||||
}
|
if (logPart.StartSector.LowPart > findPartitionFollowingThis->EndSector.LowPart
|
||||||
}
|
&& logPart.StartSector.LowPart < followingPartition->StartSector.LowPart)
|
||||||
else
|
{
|
||||||
++partitionArrayPos;
|
*followingPartition = logPart;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Secondary extended
|
else
|
||||||
if (extMbr->Partitions[1].Type != 0x5 && extMbr->Partitions[1].Type == 0xf
|
++partitionArrayPos;
|
||||||
|| extMbr->Partitions[1].SectorCountLBA == 0)
|
}
|
||||||
break;
|
|
||||||
|
// Secondary extended
|
||||||
extStartLBA.LowPart = extMbr->Partitions[1].StartLBA + firstExtStartLBA.LowPart;
|
if (extMbr->Partitions[1].Type != 0x5 && extMbr->Partitions[1].Type == 0xf
|
||||||
}
|
|| extMbr->Partitions[1].SectorCountLBA == 0)
|
||||||
}
|
break;
|
||||||
}
|
|
||||||
else
|
extStartLBA.LowPart = extMbr->Partitions[1].StartLBA + firstExtStartLBA.LowPart;
|
||||||
{
|
}
|
||||||
partition.Primary = true;
|
}
|
||||||
|
}
|
||||||
if (findPartitionFollowingThis)
|
else
|
||||||
{
|
{
|
||||||
if (partition.StartSector.LowPart > findPartitionFollowingThis->EndSector.LowPart
|
partition.Primary = true;
|
||||||
&& partition.StartSector.LowPart < followingPartition->StartSector.LowPart)
|
|
||||||
{
|
if (findPartitionFollowingThis)
|
||||||
*followingPartition = partition;
|
{
|
||||||
}
|
if (partition.StartSector.LowPart > findPartitionFollowingThis->EndSector.LowPart
|
||||||
}
|
&& partition.StartSector.LowPart < followingPartition->StartSector.LowPart)
|
||||||
else
|
{
|
||||||
++partitionArrayPos;
|
*followingPartition = partition;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
++partitionArrayPos;
|
||||||
partitionCount = partitionArrayPos;
|
}
|
||||||
return result;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
partitionCount = partitionArrayPos;
|
||||||
bool GetActivePartition (byte drive)
|
return result;
|
||||||
{
|
}
|
||||||
size_t partCount;
|
|
||||||
|
|
||||||
if (GetDrivePartitions (drive, &ActivePartition, 1, partCount, true) != BiosResultSuccess || partCount < 1)
|
bool GetActivePartition (byte drive)
|
||||||
{
|
{
|
||||||
ActivePartition.Drive = TC_INVALID_BIOS_DRIVE;
|
size_t partCount;
|
||||||
PrintError (TC_BOOT_STR_NO_BOOT_PARTITION);
|
|
||||||
return false;
|
if (GetDrivePartitions (drive, &ActivePartition, 1, partCount, true) != BiosResultSuccess || partCount < 1)
|
||||||
}
|
{
|
||||||
|
ActivePartition.Drive = TC_INVALID_BIOS_DRIVE;
|
||||||
return true;
|
PrintError (TC_BOOT_STR_NO_BOOT_PARTITION);
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|||||||
+120
-116
@@ -1,116 +1,120 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-2011 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#ifndef TC_HEADER_Boot_BootDiskIo
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#define TC_HEADER_Boot_BootDiskIo
|
code distribution packages.
|
||||||
|
*/
|
||||||
#include "Bios.h"
|
|
||||||
#include "BootDebug.h"
|
#ifndef TC_HEADER_Boot_BootDiskIo
|
||||||
#include "BootDefs.h"
|
#define TC_HEADER_Boot_BootDiskIo
|
||||||
|
|
||||||
#define TC_MAX_BIOS_DISK_IO_RETRIES 5
|
#include "Bios.h"
|
||||||
|
#include "BootDebug.h"
|
||||||
enum
|
#include "BootDefs.h"
|
||||||
{
|
|
||||||
BiosResultEccCorrected = 0x11
|
#define TC_MAX_BIOS_DISK_IO_RETRIES 5
|
||||||
};
|
|
||||||
|
enum
|
||||||
#pragma pack(1)
|
{
|
||||||
|
BiosResultEccCorrected = 0x11
|
||||||
struct PartitionEntryMBR
|
};
|
||||||
{
|
|
||||||
byte BootIndicator;
|
#pragma pack(1)
|
||||||
|
|
||||||
byte StartHead;
|
struct PartitionEntryMBR
|
||||||
byte StartCylSector;
|
{
|
||||||
byte StartCylinder;
|
byte BootIndicator;
|
||||||
|
|
||||||
byte Type;
|
byte StartHead;
|
||||||
|
byte StartCylSector;
|
||||||
byte EndHead;
|
byte StartCylinder;
|
||||||
byte EndSector;
|
|
||||||
byte EndCylinder;
|
byte Type;
|
||||||
|
|
||||||
uint32 StartLBA;
|
byte EndHead;
|
||||||
uint32 SectorCountLBA;
|
byte EndSector;
|
||||||
};
|
byte EndCylinder;
|
||||||
|
|
||||||
struct MBR
|
uint32 StartLBA;
|
||||||
{
|
uint32 SectorCountLBA;
|
||||||
byte Code[446];
|
};
|
||||||
PartitionEntryMBR Partitions[4];
|
|
||||||
uint16 Signature;
|
struct MBR
|
||||||
};
|
{
|
||||||
|
byte Code[446];
|
||||||
struct BiosLbaPacket
|
PartitionEntryMBR Partitions[4];
|
||||||
{
|
uint16 Signature;
|
||||||
byte Size;
|
};
|
||||||
byte Reserved;
|
|
||||||
uint16 SectorCount;
|
struct BiosLbaPacket
|
||||||
uint32 Buffer;
|
{
|
||||||
uint64 Sector;
|
byte Size;
|
||||||
};
|
byte Reserved;
|
||||||
|
uint16 SectorCount;
|
||||||
#pragma pack()
|
uint32 Buffer;
|
||||||
|
uint64 Sector;
|
||||||
|
};
|
||||||
struct ChsAddress
|
|
||||||
{
|
#pragma pack()
|
||||||
uint16 Cylinder;
|
|
||||||
byte Head;
|
|
||||||
byte Sector;
|
struct ChsAddress
|
||||||
};
|
{
|
||||||
|
uint16 Cylinder;
|
||||||
struct Partition
|
byte Head;
|
||||||
{
|
byte Sector;
|
||||||
byte Number;
|
};
|
||||||
byte Drive;
|
|
||||||
bool Active;
|
struct Partition
|
||||||
uint64 EndSector;
|
{
|
||||||
bool Primary;
|
byte Number;
|
||||||
uint64 SectorCount;
|
byte Drive;
|
||||||
uint64 StartSector;
|
bool Active;
|
||||||
byte Type;
|
uint64 EndSector;
|
||||||
};
|
bool Primary;
|
||||||
|
uint64 SectorCount;
|
||||||
struct DriveGeometry
|
uint64 StartSector;
|
||||||
{
|
byte Type;
|
||||||
uint16 Cylinders;
|
};
|
||||||
byte Heads;
|
|
||||||
byte Sectors;
|
struct DriveGeometry
|
||||||
};
|
{
|
||||||
|
uint16 Cylinders;
|
||||||
|
byte Heads;
|
||||||
#ifdef TC_BOOT_DEBUG_ENABLED
|
byte Sectors;
|
||||||
void AcquireSectorBuffer ();
|
};
|
||||||
void ReleaseSectorBuffer ();
|
|
||||||
#else
|
|
||||||
# define AcquireSectorBuffer()
|
#ifdef TC_BOOT_DEBUG_ENABLED
|
||||||
# define ReleaseSectorBuffer()
|
void AcquireSectorBuffer ();
|
||||||
#endif
|
void ReleaseSectorBuffer ();
|
||||||
|
#else
|
||||||
void ChsToLba (const DriveGeometry &geometry, const ChsAddress &chs, uint64 &lba);
|
# define AcquireSectorBuffer()
|
||||||
bool GetActivePartition (byte drive);
|
# define ReleaseSectorBuffer()
|
||||||
BiosResult GetDriveGeometry (byte drive, DriveGeometry &geometry, bool silent = false);
|
#endif
|
||||||
BiosResult GetDrivePartitions (byte drive, Partition *partitionArray, size_t partitionArrayCapacity, size_t &partitionCount, bool activeOnly = false, Partition *findPartitionFollowingThis = nullptr, bool silent = false);
|
|
||||||
bool IsLbaSupported (byte drive);
|
void ChsToLba (const DriveGeometry &geometry, const ChsAddress &chs, uint64 &lba);
|
||||||
void LbaToChs (const DriveGeometry &geometry, const uint64 &lba, ChsAddress &chs);
|
bool GetActivePartition (byte drive);
|
||||||
void Print (const ChsAddress &chs);
|
BiosResult GetDriveGeometry (byte drive, DriveGeometry &geometry, bool silent = false);
|
||||||
void PrintDiskError (BiosResult error, bool write, byte drive, const uint64 *sector, const ChsAddress *chs = nullptr);
|
BiosResult GetDrivePartitions (byte drive, Partition *partitionArray, size_t partitionArrayCapacity, size_t &partitionCount, bool activeOnly = false, Partition *findPartitionFollowingThis = nullptr, bool silent = false);
|
||||||
void PrintSectorCountInMB (const uint64 §orCount);
|
bool IsLbaSupported (byte drive);
|
||||||
BiosResult ReadWriteMBR (bool write, byte drive, bool silent = false);
|
void LbaToChs (const DriveGeometry &geometry, const uint64 &lba, ChsAddress &chs);
|
||||||
BiosResult ReadSectors (uint16 bufferSegment, uint16 bufferOffset, byte drive, const uint64 §or, uint16 sectorCount, bool silent = false);
|
void Print (const ChsAddress &chs);
|
||||||
BiosResult ReadSectors (byte *buffer, byte drive, const uint64 §or, uint16 sectorCount, bool silent = false);
|
void PrintDiskError (BiosResult error, bool write, byte drive, const uint64 *sector, const ChsAddress *chs = nullptr);
|
||||||
BiosResult ReadSectors (byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent = false);
|
void PrintSectorCountInMB (const uint64 §orCount);
|
||||||
BiosResult ReadWriteSectors (bool write, uint16 bufferSegment, uint16 bufferOffset, byte drive, const uint64 §or, uint16 sectorCount, bool silent);
|
BiosResult ReadWriteMBR (bool write, byte drive, bool silent = false);
|
||||||
BiosResult WriteSectors (byte *buffer, byte drive, const uint64 §or, uint16 sectorCount, bool silent = false);
|
BiosResult ReadSectors (uint16 bufferSegment, uint16 bufferOffset, byte drive, const uint64 §or, uint16 sectorCount, bool silent = false);
|
||||||
BiosResult WriteSectors (byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent = false);
|
BiosResult ReadSectors (byte *buffer, byte drive, const uint64 §or, uint16 sectorCount, bool silent = false);
|
||||||
|
BiosResult ReadSectors (byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent = false);
|
||||||
extern byte SectorBuffer[TC_LB_SIZE];
|
BiosResult ReadWriteSectors (bool write, uint16 bufferSegment, uint16 bufferOffset, byte drive, const uint64 §or, uint16 sectorCount, bool silent);
|
||||||
|
BiosResult WriteSectors (byte *buffer, byte drive, const uint64 §or, uint16 sectorCount, bool silent = false);
|
||||||
#endif // TC_HEADER_Boot_BootDiskIo
|
BiosResult WriteSectors (byte *buffer, byte drive, const ChsAddress &chs, byte sectorCount, bool silent = false);
|
||||||
|
|
||||||
|
extern byte SectorBuffer[TC_LB_SIZE];
|
||||||
|
|
||||||
|
#endif // TC_HEADER_Boot_BootDiskIo
|
||||||
|
|||||||
@@ -1,128 +1,132 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#include "Crypto.h"
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#include "Platform.h"
|
code distribution packages.
|
||||||
#include "BootConfig.h"
|
*/
|
||||||
#include "BootDebug.h"
|
|
||||||
#include "BootDefs.h"
|
#include "Crypto.h"
|
||||||
#include "BootDiskIo.h"
|
#include "Platform.h"
|
||||||
#include "BootEncryptedIo.h"
|
#include "BootConfig.h"
|
||||||
|
#include "BootDebug.h"
|
||||||
|
#include "BootDefs.h"
|
||||||
BiosResult ReadEncryptedSectors (uint16 destSegment, uint16 destOffset, byte drive, uint64 sector, uint16 sectorCount)
|
#include "BootDiskIo.h"
|
||||||
{
|
#include "BootEncryptedIo.h"
|
||||||
BiosResult result;
|
|
||||||
bool decrypt = true;
|
|
||||||
|
BiosResult ReadEncryptedSectors (uint16 destSegment, uint16 destOffset, byte drive, uint64 sector, uint16 sectorCount)
|
||||||
if (BootCryptoInfo->hiddenVolume)
|
{
|
||||||
{
|
BiosResult result;
|
||||||
if (ReadWritePartiallyCoversEncryptedArea (sector, sectorCount))
|
bool decrypt = true;
|
||||||
return BiosResultInvalidFunction;
|
|
||||||
|
if (BootCryptoInfo->hiddenVolume)
|
||||||
if (sector >= EncryptedVirtualPartition.StartSector && sector <= EncryptedVirtualPartition.EndSector)
|
{
|
||||||
{
|
if (ReadWritePartiallyCoversEncryptedArea (sector, sectorCount))
|
||||||
// Remap the request to the hidden volume
|
return BiosResultInvalidFunction;
|
||||||
sector -= EncryptedVirtualPartition.StartSector;
|
|
||||||
sector += HiddenVolumeStartSector;
|
if (sector >= EncryptedVirtualPartition.StartSector && sector <= EncryptedVirtualPartition.EndSector)
|
||||||
}
|
{
|
||||||
else
|
// Remap the request to the hidden volume
|
||||||
decrypt = false;
|
sector -= EncryptedVirtualPartition.StartSector;
|
||||||
}
|
sector += HiddenVolumeStartSector;
|
||||||
|
}
|
||||||
result = ReadSectors (destSegment, destOffset, drive, sector, sectorCount);
|
else
|
||||||
|
decrypt = false;
|
||||||
if (result != BiosResultSuccess || !decrypt)
|
}
|
||||||
return result;
|
|
||||||
|
result = ReadSectors (destSegment, destOffset, drive, sector, sectorCount);
|
||||||
if (BootCryptoInfo->hiddenVolume)
|
|
||||||
{
|
if (result != BiosResultSuccess || !decrypt)
|
||||||
// Convert sector number to data unit number of the hidden volume
|
return result;
|
||||||
sector -= HiddenVolumeStartSector;
|
|
||||||
sector += HiddenVolumeStartUnitNo;
|
if (BootCryptoInfo->hiddenVolume)
|
||||||
}
|
{
|
||||||
|
// Convert sector number to data unit number of the hidden volume
|
||||||
if (drive == EncryptedVirtualPartition.Drive)
|
sector -= HiddenVolumeStartSector;
|
||||||
{
|
sector += PimValueOrHiddenVolumeStartUnitNo;
|
||||||
while (sectorCount-- > 0)
|
}
|
||||||
{
|
|
||||||
if (BootCryptoInfo->hiddenVolume
|
if (drive == EncryptedVirtualPartition.Drive)
|
||||||
|| (sector >= EncryptedVirtualPartition.StartSector && sector <= EncryptedVirtualPartition.EndSector))
|
{
|
||||||
{
|
while (sectorCount-- > 0)
|
||||||
AcquireSectorBuffer();
|
{
|
||||||
CopyMemory (destSegment, destOffset, SectorBuffer, TC_LB_SIZE);
|
if (BootCryptoInfo->hiddenVolume
|
||||||
|
|| (sector >= EncryptedVirtualPartition.StartSector && sector <= EncryptedVirtualPartition.EndSector))
|
||||||
DecryptDataUnits (SectorBuffer, §or, 1, BootCryptoInfo);
|
{
|
||||||
|
AcquireSectorBuffer();
|
||||||
CopyMemory (SectorBuffer, destSegment, destOffset, TC_LB_SIZE);
|
CopyMemory (destSegment, destOffset, SectorBuffer, TC_LB_SIZE);
|
||||||
ReleaseSectorBuffer();
|
|
||||||
}
|
DecryptDataUnits (SectorBuffer, §or, 1, BootCryptoInfo);
|
||||||
|
|
||||||
++sector;
|
CopyMemory (SectorBuffer, destSegment, destOffset, TC_LB_SIZE);
|
||||||
destOffset += TC_LB_SIZE;
|
ReleaseSectorBuffer();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
++sector;
|
||||||
return result;
|
destOffset += TC_LB_SIZE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BiosResult WriteEncryptedSectors (uint16 sourceSegment, uint16 sourceOffset, byte drive, uint64 sector, uint16 sectorCount)
|
return result;
|
||||||
{
|
}
|
||||||
BiosResult result = BiosResultSuccess;
|
|
||||||
AcquireSectorBuffer();
|
|
||||||
uint64 dataUnitNo;
|
BiosResult WriteEncryptedSectors (uint16 sourceSegment, uint16 sourceOffset, byte drive, uint64 sector, uint16 sectorCount)
|
||||||
uint64 writeOffset;
|
{
|
||||||
|
BiosResult result = BiosResultSuccess;
|
||||||
dataUnitNo = sector;
|
AcquireSectorBuffer();
|
||||||
writeOffset.HighPart = 0;
|
uint64 dataUnitNo;
|
||||||
writeOffset.LowPart = 0;
|
uint64 writeOffset;
|
||||||
|
|
||||||
if (BootCryptoInfo->hiddenVolume)
|
dataUnitNo = sector;
|
||||||
{
|
writeOffset.HighPart = 0;
|
||||||
if (ReadWritePartiallyCoversEncryptedArea (sector, sectorCount))
|
writeOffset.LowPart = 0;
|
||||||
return BiosResultInvalidFunction;
|
|
||||||
|
if (BootCryptoInfo->hiddenVolume)
|
||||||
// Remap the request to the hidden volume
|
{
|
||||||
writeOffset = HiddenVolumeStartSector;
|
if (ReadWritePartiallyCoversEncryptedArea (sector, sectorCount))
|
||||||
writeOffset -= EncryptedVirtualPartition.StartSector;
|
return BiosResultInvalidFunction;
|
||||||
dataUnitNo -= EncryptedVirtualPartition.StartSector;
|
|
||||||
dataUnitNo += HiddenVolumeStartUnitNo;
|
// Remap the request to the hidden volume
|
||||||
}
|
writeOffset = HiddenVolumeStartSector;
|
||||||
|
writeOffset -= EncryptedVirtualPartition.StartSector;
|
||||||
while (sectorCount-- > 0)
|
dataUnitNo -= EncryptedVirtualPartition.StartSector;
|
||||||
{
|
dataUnitNo += PimValueOrHiddenVolumeStartUnitNo;
|
||||||
CopyMemory (sourceSegment, sourceOffset, SectorBuffer, TC_LB_SIZE);
|
}
|
||||||
|
|
||||||
if (drive == EncryptedVirtualPartition.Drive && sector >= EncryptedVirtualPartition.StartSector && sector <= EncryptedVirtualPartition.EndSector)
|
while (sectorCount-- > 0)
|
||||||
{
|
{
|
||||||
EncryptDataUnits (SectorBuffer, &dataUnitNo, 1, BootCryptoInfo);
|
CopyMemory (sourceSegment, sourceOffset, SectorBuffer, TC_LB_SIZE);
|
||||||
}
|
|
||||||
|
if (drive == EncryptedVirtualPartition.Drive && sector >= EncryptedVirtualPartition.StartSector && sector <= EncryptedVirtualPartition.EndSector)
|
||||||
result = WriteSectors (SectorBuffer, drive, sector + writeOffset, 1);
|
{
|
||||||
|
EncryptDataUnits (SectorBuffer, &dataUnitNo, 1, BootCryptoInfo);
|
||||||
if (result != BiosResultSuccess)
|
}
|
||||||
break;
|
|
||||||
|
result = WriteSectors (SectorBuffer, drive, sector + writeOffset, 1);
|
||||||
++sector;
|
|
||||||
++dataUnitNo;
|
if (result != BiosResultSuccess)
|
||||||
sourceOffset += TC_LB_SIZE;
|
break;
|
||||||
}
|
|
||||||
|
++sector;
|
||||||
ReleaseSectorBuffer();
|
++dataUnitNo;
|
||||||
return result;
|
sourceOffset += TC_LB_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReleaseSectorBuffer();
|
||||||
static bool ReadWritePartiallyCoversEncryptedArea (const uint64 §or, uint16 sectorCount)
|
return result;
|
||||||
{
|
}
|
||||||
uint64 readWriteEnd = sector + --sectorCount;
|
|
||||||
|
|
||||||
return ((sector < EncryptedVirtualPartition.StartSector && readWriteEnd >= EncryptedVirtualPartition.StartSector)
|
static bool ReadWritePartiallyCoversEncryptedArea (const uint64 §or, uint16 sectorCount)
|
||||||
|| (sector >= EncryptedVirtualPartition.StartSector && readWriteEnd > EncryptedVirtualPartition.EndSector));
|
{
|
||||||
}
|
uint64 readWriteEnd = sector + --sectorCount;
|
||||||
|
|
||||||
|
return ((sector < EncryptedVirtualPartition.StartSector && readWriteEnd >= EncryptedVirtualPartition.StartSector)
|
||||||
|
|| (sector >= EncryptedVirtualPartition.StartSector && readWriteEnd > EncryptedVirtualPartition.EndSector));
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,18 +1,22 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#ifndef TC_HEADER_Boot_BootEncryptionIo
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#define TC_HEADER_Boot_BootEncryptionIo
|
code distribution packages.
|
||||||
|
*/
|
||||||
#include "Platform.h"
|
|
||||||
|
#ifndef TC_HEADER_Boot_BootEncryptionIo
|
||||||
BiosResult ReadEncryptedSectors (uint16 destSegment, uint16 destOffset, byte drive, uint64 sector, uint16 sectorCount);
|
#define TC_HEADER_Boot_BootEncryptionIo
|
||||||
BiosResult WriteEncryptedSectors (uint16 sourceSegment, uint16 sourceOffset, byte drive, uint64 sector, uint16 sectorCount);
|
|
||||||
static bool ReadWritePartiallyCoversEncryptedArea (const uint64 §or, uint16 sectorCount);
|
#include "Platform.h"
|
||||||
|
|
||||||
#endif // TC_HEADER_Boot_BootEncryptionIo
|
BiosResult ReadEncryptedSectors (uint16 destSegment, uint16 destOffset, byte drive, uint64 sector, uint16 sectorCount);
|
||||||
|
BiosResult WriteEncryptedSectors (uint16 sourceSegment, uint16 sourceOffset, byte drive, uint64 sector, uint16 sectorCount);
|
||||||
|
static bool ReadWritePartiallyCoversEncryptedArea (const uint64 §or, uint16 sectorCount);
|
||||||
|
|
||||||
|
#endif // TC_HEADER_Boot_BootEncryptionIo
|
||||||
|
|||||||
+1269
-1151
File diff suppressed because it is too large
Load Diff
+34
-30
@@ -1,30 +1,34 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#ifndef TC_HEADER_Boot_BootMain
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#define TC_HEADER_Boot_BootMain
|
code distribution packages.
|
||||||
|
*/
|
||||||
#include "TCdefs.h"
|
|
||||||
#include "Platform.h"
|
#ifndef TC_HEADER_Boot_BootMain
|
||||||
|
#define TC_HEADER_Boot_BootMain
|
||||||
static byte AskPassword (Password &password);
|
|
||||||
static int AskSelection (const char *options[], size_t optionCount);
|
#include "TCdefs.h"
|
||||||
static bool AskYesNo (const char *message);
|
#include "Platform.h"
|
||||||
static byte BootEncryptedDrive ();
|
|
||||||
static void BootMenu ();
|
static byte AskPassword (Password &password, int& pim);
|
||||||
static void ExecuteBootSector (byte drive, byte *sectorBuffer);
|
static int AskSelection (const char *options[], size_t optionCount);
|
||||||
static void InitScreen ();
|
static bool AskYesNo (const char *message);
|
||||||
static bool IsMenuKey (byte scanCode);
|
static byte BootEncryptedDrive ();
|
||||||
static bool MountVolume (byte drive, byte &exitKey);
|
static void BootMenu ();
|
||||||
static bool OpenVolume (byte drive, Password &password, CRYPTO_INFO **cryptoInfo, uint32 *headerSaltCrc32 = nullptr, bool skipNormal = false, bool skipHidden = false);
|
static void ExecuteBootSector (byte drive, byte *sectorBuffer);
|
||||||
static void PrintMainMenu ();
|
static void InitScreen ();
|
||||||
static void RepairMenu ();
|
static bool IsMenuKey (byte scanCode);
|
||||||
|
static bool MountVolume (byte drive, byte &exitKey);
|
||||||
#define TC_MENU_KEY_REPAIR TC_BIOS_KEY_F8
|
static bool OpenVolume (byte drive, Password &password, CRYPTO_INFO **cryptoInfo, uint32 *headerSaltCrc32 = nullptr, bool skipNormal = false, bool skipHidden = false);
|
||||||
|
static void PrintMainMenu ();
|
||||||
#endif // TC_HEADER_Boot_BootMain
|
static void RepairMenu ();
|
||||||
|
|
||||||
|
#define TC_MENU_KEY_REPAIR TC_BIOS_KEY_F8
|
||||||
|
|
||||||
|
#endif // TC_HEADER_Boot_BootMain
|
||||||
|
|||||||
@@ -1,82 +1,86 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#include "BootDefs.h"
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#include "BootMemory.h"
|
code distribution packages.
|
||||||
|
*/
|
||||||
static uint32 MemoryMapContValue;
|
|
||||||
|
#include "BootDefs.h"
|
||||||
static bool GetMemoryMapEntry (BiosMemoryMapEntry &entry)
|
#include "BootMemory.h"
|
||||||
{
|
|
||||||
static const uint32 function = 0x0000E820UL;
|
static uint32 MemoryMapContValue;
|
||||||
static const uint32 magic = 0x534D4150UL;
|
|
||||||
static const uint32 bufferSize = sizeof (BiosMemoryMapEntry);
|
static bool GetMemoryMapEntry (BiosMemoryMapEntry &entry)
|
||||||
|
{
|
||||||
bool carry = false;
|
static const uint32 function = 0x0000E820UL;
|
||||||
uint32 resultMagic;
|
static const uint32 magic = 0x534D4150UL;
|
||||||
uint32 resultSize;
|
static const uint32 bufferSize = sizeof (BiosMemoryMapEntry);
|
||||||
|
|
||||||
__asm
|
bool carry = false;
|
||||||
{
|
uint32 resultMagic;
|
||||||
push es
|
uint32 resultSize;
|
||||||
|
|
||||||
lea di, function
|
__asm
|
||||||
TC_ASM_MOV_EAX_DI
|
{
|
||||||
lea di, MemoryMapContValue
|
push es
|
||||||
TC_ASM_MOV_EBX_DI
|
|
||||||
lea di, bufferSize
|
lea di, function
|
||||||
TC_ASM_MOV_ECX_DI
|
TC_ASM_MOV_EAX_DI
|
||||||
lea di, magic
|
lea di, MemoryMapContValue
|
||||||
TC_ASM_MOV_EDX_DI
|
TC_ASM_MOV_EBX_DI
|
||||||
lea di, MemoryMapContValue
|
lea di, bufferSize
|
||||||
TC_ASM_MOV_DI_ECX
|
TC_ASM_MOV_ECX_DI
|
||||||
|
lea di, magic
|
||||||
// Use alternative segment to prevent memory corruption caused by buggy BIOSes
|
TC_ASM_MOV_EDX_DI
|
||||||
push TC_BOOT_LOADER_ALT_SEGMENT
|
lea di, MemoryMapContValue
|
||||||
pop es
|
TC_ASM_MOV_DI_ECX
|
||||||
mov di, 0
|
|
||||||
|
// Use alternative segment to prevent memory corruption caused by buggy BIOSes
|
||||||
int 0x15
|
push TC_BOOT_LOADER_ALT_SEGMENT
|
||||||
jnc no_carry
|
pop es
|
||||||
mov carry, true
|
mov di, 0
|
||||||
no_carry:
|
|
||||||
|
int 0x15
|
||||||
lea di, resultMagic
|
jnc no_carry
|
||||||
TC_ASM_MOV_DI_EAX
|
mov carry, true
|
||||||
lea di, MemoryMapContValue
|
no_carry:
|
||||||
TC_ASM_MOV_DI_EBX
|
|
||||||
lea di, resultSize
|
lea di, resultMagic
|
||||||
TC_ASM_MOV_DI_ECX
|
TC_ASM_MOV_DI_EAX
|
||||||
|
lea di, MemoryMapContValue
|
||||||
pop es
|
TC_ASM_MOV_DI_EBX
|
||||||
}
|
lea di, resultSize
|
||||||
|
TC_ASM_MOV_DI_ECX
|
||||||
CopyMemory (TC_BOOT_LOADER_ALT_SEGMENT, 0, &entry, sizeof (entry));
|
|
||||||
|
pop es
|
||||||
// BIOS may set CF at the end of the list
|
}
|
||||||
if (carry)
|
|
||||||
MemoryMapContValue = 0;
|
CopyMemory (TC_BOOT_LOADER_ALT_SEGMENT, 0, &entry, sizeof (entry));
|
||||||
|
|
||||||
return resultMagic == magic && resultSize == bufferSize;
|
// BIOS may set CF at the end of the list
|
||||||
}
|
if (carry)
|
||||||
|
MemoryMapContValue = 0;
|
||||||
|
|
||||||
bool GetFirstBiosMemoryMapEntry (BiosMemoryMapEntry &entry)
|
return resultMagic == magic && resultSize == bufferSize;
|
||||||
{
|
}
|
||||||
MemoryMapContValue = 0;
|
|
||||||
return GetMemoryMapEntry (entry);
|
|
||||||
}
|
bool GetFirstBiosMemoryMapEntry (BiosMemoryMapEntry &entry)
|
||||||
|
{
|
||||||
|
MemoryMapContValue = 0;
|
||||||
bool GetNextBiosMemoryMapEntry (BiosMemoryMapEntry &entry)
|
return GetMemoryMapEntry (entry);
|
||||||
{
|
}
|
||||||
if (MemoryMapContValue == 0)
|
|
||||||
return false;
|
|
||||||
|
bool GetNextBiosMemoryMapEntry (BiosMemoryMapEntry &entry)
|
||||||
return GetMemoryMapEntry (entry);
|
{
|
||||||
}
|
if (MemoryMapContValue == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return GetMemoryMapEntry (entry);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,24 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#include "Platform.h"
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#include "Bios.h"
|
code distribution packages.
|
||||||
|
*/
|
||||||
#pragma pack(1)
|
|
||||||
|
#include "Platform.h"
|
||||||
struct BiosMemoryMapEntry
|
#include "Bios.h"
|
||||||
{
|
|
||||||
uint64 BaseAddress;
|
#pragma pack(1)
|
||||||
uint64 Length;
|
|
||||||
uint32 Type;
|
struct BiosMemoryMapEntry
|
||||||
};
|
{
|
||||||
|
uint64 BaseAddress;
|
||||||
#pragma pack()
|
uint64 Length;
|
||||||
|
uint32 Type;
|
||||||
bool GetFirstBiosMemoryMapEntry (BiosMemoryMapEntry &entry);
|
};
|
||||||
bool GetNextBiosMemoryMapEntry (BiosMemoryMapEntry &entry);
|
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
bool GetFirstBiosMemoryMapEntry (BiosMemoryMapEntry &entry);
|
||||||
|
bool GetNextBiosMemoryMapEntry (BiosMemoryMapEntry &entry);
|
||||||
|
|||||||
+244
-239
@@ -1,239 +1,244 @@
|
|||||||
;
|
;
|
||||||
; Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.
|
; Derived from source code of TrueCrypt 7.1a, which is
|
||||||
;
|
; Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
; Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
; by the TrueCrypt License 3.0.
|
||||||
; the file License.txt included in TrueCrypt binary and source code distribution
|
;
|
||||||
; packages.
|
; Modifications and additions to the original source code (contained in this file)
|
||||||
;
|
; and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
; and are governed by the Apache License 2.0 the full text of which is
|
||||||
.MODEL tiny
|
; contained in the file License.txt included in VeraCrypt binary and source
|
||||||
.386
|
; code distribution packages.
|
||||||
_TEXT SEGMENT USE16
|
;
|
||||||
|
|
||||||
INCLUDE BootDefs.i
|
.MODEL tiny
|
||||||
|
.386
|
||||||
ORG 7C00h ; Standard boot sector offset
|
_TEXT SEGMENT USE16
|
||||||
|
|
||||||
start:
|
INCLUDE BootDefs.i
|
||||||
; BIOS executes boot sector from 0:7C00 or 7C0:0000 (default CD boot loader address).
|
|
||||||
; Far jump to the next instruction sets IP to the standard offset 7C00.
|
ORG 7C00h ; Standard boot sector offset
|
||||||
db 0EAh ; jmp 0:main
|
|
||||||
dw main, 0
|
start:
|
||||||
|
; BIOS executes boot sector from 0:7C00 or 7C0:0000 (default CD boot loader address).
|
||||||
loader_name_msg:
|
; Far jump to the next instruction sets IP to the standard offset 7C00.
|
||||||
db ' VeraCrypt Boot Loader', 13, 10, 0
|
db 0EAh ; jmp 0:main
|
||||||
|
dw main, 0
|
||||||
main:
|
|
||||||
cli
|
loader_name_msg:
|
||||||
xor ax, ax
|
db ' VeraCrypt Boot Loader', 13, 10, 0
|
||||||
mov ds, ax
|
|
||||||
mov ss, ax
|
main:
|
||||||
mov sp, 7C00h
|
cli
|
||||||
sti
|
xor ax, ax
|
||||||
|
mov ds, ax
|
||||||
; Display boot loader name
|
mov ss, ax
|
||||||
test byte ptr [start + TC_BOOT_SECTOR_USER_CONFIG_OFFSET], TC_BOOT_USER_CFG_FLAG_SILENT_MODE
|
mov sp, 7C00h
|
||||||
jnz skip_loader_name_msg
|
sti
|
||||||
|
|
||||||
lea si, loader_name_msg
|
; Display boot loader name
|
||||||
call print
|
test byte ptr [start + TC_BOOT_SECTOR_USER_CONFIG_OFFSET], TC_BOOT_USER_CFG_FLAG_SILENT_MODE
|
||||||
skip_loader_name_msg:
|
jnz skip_loader_name_msg
|
||||||
|
|
||||||
; Determine boot loader segment
|
lea si, loader_name_msg
|
||||||
mov ax, TC_BOOT_LOADER_SEGMENT
|
call print
|
||||||
|
skip_loader_name_msg:
|
||||||
; Check available memory
|
|
||||||
cmp word ptr [ds:413h], TC_BOOT_LOADER_SEGMENT / 1024 * 16 + TC_BOOT_MEMORY_REQUIRED
|
; Determine boot loader segment
|
||||||
jge memory_ok
|
mov ax, TC_BOOT_LOADER_SEGMENT
|
||||||
|
|
||||||
mov ax, TC_BOOT_LOADER_SEGMENT_LOW
|
; Check available memory
|
||||||
|
cmp word ptr [ds:413h], TC_BOOT_LOADER_SEGMENT / 1024 * 16 + TC_BOOT_MEMORY_REQUIRED
|
||||||
cmp word ptr [ds:413h], TC_BOOT_LOADER_SEGMENT_LOW / 1024 * 16 + TC_BOOT_MEMORY_REQUIRED
|
jge memory_ok
|
||||||
jge memory_ok
|
|
||||||
|
mov ax, TC_BOOT_LOADER_SEGMENT_LOW
|
||||||
; Insufficient memory
|
|
||||||
mov ax, TC_BOOT_LOADER_LOWMEM_SEGMENT
|
cmp word ptr [ds:413h], TC_BOOT_LOADER_SEGMENT_LOW / 1024 * 16 + TC_BOOT_MEMORY_REQUIRED
|
||||||
|
jge memory_ok
|
||||||
memory_ok:
|
|
||||||
mov es, ax
|
; Insufficient memory
|
||||||
|
mov ax, TC_BOOT_LOADER_LOWMEM_SEGMENT
|
||||||
; Clear BSS section
|
|
||||||
xor al, al
|
memory_ok:
|
||||||
mov di, TC_COM_EXECUTABLE_OFFSET
|
mov es, ax
|
||||||
mov cx, TC_BOOT_MEMORY_REQUIRED * 1024 - TC_COM_EXECUTABLE_OFFSET - 1
|
|
||||||
cld
|
; Clear BSS section
|
||||||
rep stosb
|
xor al, al
|
||||||
|
mov di, TC_COM_EXECUTABLE_OFFSET
|
||||||
mov ax, es
|
mov cx, TC_BOOT_MEMORY_REQUIRED * 1024 - TC_COM_EXECUTABLE_OFFSET - 1
|
||||||
sub ax, TC_BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE / 16 ; Decompressor segment
|
cld
|
||||||
mov es, ax
|
rep stosb
|
||||||
|
|
||||||
; Load decompressor
|
mov ax, es
|
||||||
mov cl, TC_BOOT_LOADER_DECOMPRESSOR_START_SECTOR
|
sub ax, TC_BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE / 16 ; Decompressor segment
|
||||||
retry_backup:
|
mov es, ax
|
||||||
mov al, TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT
|
|
||||||
mov bx, TC_COM_EXECUTABLE_OFFSET
|
; Load decompressor
|
||||||
call read_sectors
|
mov cl, TC_BOOT_LOADER_DECOMPRESSOR_START_SECTOR
|
||||||
|
retry_backup:
|
||||||
; Decompressor checksum
|
mov al, TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT
|
||||||
xor ebx, ebx
|
mov bx, TC_COM_EXECUTABLE_OFFSET
|
||||||
mov si, TC_COM_EXECUTABLE_OFFSET
|
call read_sectors
|
||||||
mov cx, TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT * TC_LB_SIZE
|
|
||||||
call checksum
|
; Decompressor checksum
|
||||||
push ebx
|
xor ebx, ebx
|
||||||
|
mov si, TC_COM_EXECUTABLE_OFFSET
|
||||||
; Load compressed boot loader
|
mov cx, TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT * TC_LB_SIZE
|
||||||
mov bx, TC_BOOT_LOADER_COMPRESSED_BUFFER_OFFSET
|
call checksum
|
||||||
mov cl, TC_BOOT_LOADER_START_SECTOR
|
push ebx
|
||||||
mov al, TC_MAX_BOOT_LOADER_SECTOR_COUNT
|
|
||||||
|
; Load compressed boot loader
|
||||||
test backup_loader_used, 1
|
mov bx, TC_BOOT_LOADER_COMPRESSED_BUFFER_OFFSET
|
||||||
jz non_backup
|
mov cl, TC_BOOT_LOADER_START_SECTOR
|
||||||
mov al, TC_BOOT_LOADER_BACKUP_SECTOR_COUNT - TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT
|
mov al, TC_MAX_BOOT_LOADER_SECTOR_COUNT
|
||||||
mov cl, TC_BOOT_LOADER_START_SECTOR + TC_BOOT_LOADER_BACKUP_SECTOR_COUNT
|
|
||||||
|
test backup_loader_used, 1
|
||||||
non_backup:
|
jz non_backup
|
||||||
call read_sectors
|
mov al, TC_BOOT_LOADER_BACKUP_SECTOR_COUNT - TC_BOOT_LOADER_DECOMPRESSOR_SECTOR_COUNT
|
||||||
|
mov cl, TC_BOOT_LOADER_START_SECTOR + TC_BOOT_LOADER_BACKUP_SECTOR_COUNT
|
||||||
; Boot loader checksum
|
|
||||||
pop ebx
|
non_backup:
|
||||||
mov si, TC_BOOT_LOADER_COMPRESSED_BUFFER_OFFSET
|
call read_sectors
|
||||||
mov cx, word ptr [start + TC_BOOT_SECTOR_LOADER_LENGTH_OFFSET]
|
|
||||||
call checksum
|
; Boot loader checksum
|
||||||
|
pop ebx
|
||||||
; Verify checksum
|
mov si, TC_BOOT_LOADER_COMPRESSED_BUFFER_OFFSET
|
||||||
cmp ebx, dword ptr [start + TC_BOOT_SECTOR_LOADER_CHECKSUM_OFFSET]
|
mov cx, word ptr [start + TC_BOOT_SECTOR_LOADER_LENGTH_OFFSET]
|
||||||
je checksum_ok
|
call checksum
|
||||||
|
|
||||||
; Checksum incorrect - try using backup if available
|
; Verify checksum
|
||||||
test backup_loader_used, 1
|
cmp ebx, dword ptr [start + TC_BOOT_SECTOR_LOADER_CHECKSUM_OFFSET]
|
||||||
jnz loader_damaged
|
je checksum_ok
|
||||||
|
|
||||||
mov backup_loader_used, 1
|
; Checksum incorrect - try using backup if available
|
||||||
mov cl, TC_BOOT_LOADER_DECOMPRESSOR_START_SECTOR + TC_BOOT_LOADER_BACKUP_SECTOR_COUNT
|
test backup_loader_used, 1
|
||||||
|
jnz loader_damaged
|
||||||
test TC_BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE, byte ptr [start + TC_BOOT_SECTOR_CONFIG_OFFSET]
|
|
||||||
jnz retry_backup
|
mov backup_loader_used, 1
|
||||||
|
mov cl, TC_BOOT_LOADER_DECOMPRESSOR_START_SECTOR + TC_BOOT_LOADER_BACKUP_SECTOR_COUNT
|
||||||
loader_damaged:
|
|
||||||
lea si, loader_damaged_msg
|
test TC_BOOT_CFG_FLAG_BACKUP_LOADER_AVAILABLE, byte ptr [start + TC_BOOT_SECTOR_CONFIG_OFFSET]
|
||||||
call print
|
jnz retry_backup
|
||||||
lea si, loader_name_msg
|
|
||||||
call print
|
loader_damaged:
|
||||||
jmp $
|
lea si, loader_damaged_msg
|
||||||
checksum_ok:
|
call print
|
||||||
|
lea si, loader_name_msg
|
||||||
; Set up decompressor segment
|
call print
|
||||||
mov ax, es
|
jmp $
|
||||||
mov ds, ax
|
checksum_ok:
|
||||||
cli
|
|
||||||
mov ss, ax
|
; Set up decompressor segment
|
||||||
mov sp, TC_BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE
|
mov ax, es
|
||||||
sti
|
mov ds, ax
|
||||||
|
cli
|
||||||
push dx
|
mov ss, ax
|
||||||
|
mov sp, TC_BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE
|
||||||
; Decompress boot loader
|
sti
|
||||||
mov cx, word ptr [start + TC_BOOT_SECTOR_LOADER_LENGTH_OFFSET]
|
|
||||||
push cx ; Compressed data size
|
push dx
|
||||||
push TC_BOOT_LOADER_COMPRESSED_BUFFER_OFFSET + TC_GZIP_HEADER_SIZE ; Compressed data
|
|
||||||
push TC_MAX_BOOT_LOADER_DECOMPRESSED_SIZE ; Output buffer size
|
; Decompress boot loader
|
||||||
push TC_BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE + TC_COM_EXECUTABLE_OFFSET ; Output buffer
|
mov cx, word ptr [start + TC_BOOT_SECTOR_LOADER_LENGTH_OFFSET]
|
||||||
|
sub cx, TC_GZIP_HEADER_SIZE
|
||||||
push cs
|
push cx ; Compressed data size
|
||||||
push decompressor_ret
|
push TC_BOOT_LOADER_COMPRESSED_BUFFER_OFFSET + TC_GZIP_HEADER_SIZE ; Compressed data
|
||||||
push es
|
push TC_MAX_BOOT_LOADER_DECOMPRESSED_SIZE ; Output buffer size
|
||||||
push TC_COM_EXECUTABLE_OFFSET
|
push TC_BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE + TC_COM_EXECUTABLE_OFFSET ; Output buffer
|
||||||
retf
|
|
||||||
decompressor_ret:
|
push cs
|
||||||
|
push decompressor_ret
|
||||||
add sp, 8
|
push es
|
||||||
pop dx
|
push TC_COM_EXECUTABLE_OFFSET
|
||||||
|
retf
|
||||||
; Restore boot sector segment
|
decompressor_ret:
|
||||||
push cs
|
|
||||||
pop ds
|
add sp, 8
|
||||||
|
pop dx
|
||||||
; Check decompression result
|
|
||||||
test ax, ax
|
; Restore boot sector segment
|
||||||
jz decompression_ok
|
push cs
|
||||||
|
pop ds
|
||||||
lea si, loader_damaged_msg
|
|
||||||
call print
|
; Check decompression result
|
||||||
jmp $
|
test ax, ax
|
||||||
decompression_ok:
|
jz decompression_ok
|
||||||
|
|
||||||
; DH = boot sector flags
|
lea si, loader_damaged_msg
|
||||||
mov dh, byte ptr [start + TC_BOOT_SECTOR_CONFIG_OFFSET]
|
call print
|
||||||
|
jmp $
|
||||||
; Set up boot loader segment
|
decompression_ok:
|
||||||
mov ax, es
|
|
||||||
add ax, TC_BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE / 16
|
; DH = boot sector flags
|
||||||
mov es, ax
|
mov dh, byte ptr [start + TC_BOOT_SECTOR_CONFIG_OFFSET]
|
||||||
mov ds, ax
|
|
||||||
cli
|
; Set up boot loader segment
|
||||||
mov ss, ax
|
mov ax, es
|
||||||
mov sp, TC_BOOT_LOADER_STACK_TOP
|
add ax, TC_BOOT_LOADER_DECOMPRESSOR_MEMORY_SIZE / 16
|
||||||
sti
|
mov es, ax
|
||||||
|
mov ds, ax
|
||||||
; Execute boot loader
|
cli
|
||||||
push es
|
mov ss, ax
|
||||||
push TC_COM_EXECUTABLE_OFFSET
|
mov sp, TC_BOOT_LOADER_STACK_TOP
|
||||||
retf
|
sti
|
||||||
|
|
||||||
; Print string
|
; Execute boot loader
|
||||||
print:
|
push es
|
||||||
xor bx, bx
|
push TC_COM_EXECUTABLE_OFFSET
|
||||||
mov ah, 0eh
|
retf
|
||||||
cld
|
|
||||||
|
; Print string
|
||||||
@@: lodsb
|
print:
|
||||||
test al, al
|
xor bx, bx
|
||||||
jz print_end
|
mov ah, 0eh
|
||||||
|
cld
|
||||||
int 10h
|
|
||||||
jmp @B
|
@@: lodsb
|
||||||
|
test al, al
|
||||||
print_end:
|
jz print_end
|
||||||
ret
|
|
||||||
|
int 10h
|
||||||
; Read sectors of the first cylinder
|
jmp @B
|
||||||
read_sectors:
|
|
||||||
mov ch, 0 ; Cylinder
|
print_end:
|
||||||
mov dh, 0 ; Head
|
ret
|
||||||
; DL = drive number passed from BIOS
|
|
||||||
mov ah, 2
|
; Read sectors of the first cylinder
|
||||||
int 13h
|
read_sectors:
|
||||||
jnc read_ok
|
mov ch, 0 ; Cylinder
|
||||||
|
mov dh, 0 ; Head
|
||||||
lea si, disk_error_msg
|
; DL = drive number passed from BIOS
|
||||||
call print
|
mov ah, 2
|
||||||
read_ok:
|
int 13h
|
||||||
ret
|
jnc read_ok
|
||||||
|
|
||||||
; Calculate checksum
|
lea si, disk_error_msg
|
||||||
checksum:
|
call print
|
||||||
push ds
|
read_ok:
|
||||||
push es
|
ret
|
||||||
pop ds
|
|
||||||
xor eax, eax
|
; Calculate checksum
|
||||||
cld
|
checksum:
|
||||||
|
push ds
|
||||||
@@: lodsb
|
push es
|
||||||
add ebx, eax
|
pop ds
|
||||||
rol ebx, 1
|
xor eax, eax
|
||||||
loop @B
|
cld
|
||||||
|
|
||||||
pop ds
|
@@: lodsb
|
||||||
ret
|
add ebx, eax
|
||||||
|
rol ebx, 1
|
||||||
backup_loader_used db 0
|
loop @B
|
||||||
|
|
||||||
disk_error_msg db 'Disk error', 13, 10, 7, 0
|
pop ds
|
||||||
loader_damaged_msg db 7, 'Loader damaged! Use Rescue Disk: Repair Options > Restore', 0
|
ret
|
||||||
|
|
||||||
ORG 7C00h + 510
|
backup_loader_used db 0
|
||||||
dw 0AA55h ; Boot sector signature
|
|
||||||
|
disk_error_msg db 'Disk error', 13, 10, 7, 0
|
||||||
_TEXT ENDS
|
loader_damaged_msg db 7, 'Loader damaged! Repair with Rescue Disk', 0
|
||||||
END start
|
|
||||||
|
ORG 7C00h + 510
|
||||||
|
dw 0AA55h ; Boot sector signature
|
||||||
|
|
||||||
|
_TEXT ENDS
|
||||||
|
END start
|
||||||
|
|||||||
@@ -1,16 +1,20 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
|
Derived from source code of TrueCrypt 7.1a, which is
|
||||||
|
Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
|
||||||
Governed by the TrueCrypt License 3.0 the full text of which is contained in
|
by the TrueCrypt License 3.0.
|
||||||
the file License.txt included in TrueCrypt binary and source code distribution
|
|
||||||
packages.
|
Modifications and additions to the original source code (contained in this file)
|
||||||
*/
|
and all other portions of this file are Copyright (c) 2013-2016 IDRIX
|
||||||
|
and are governed by the Apache License 2.0 the full text of which is
|
||||||
#ifndef TC_HEADER_Boot_BootStrings
|
contained in the file License.txt included in VeraCrypt binary and source
|
||||||
#define TC_HEADER_Boot_BootStrings
|
code distribution packages.
|
||||||
|
*/
|
||||||
#define TC_BOOT_STR_ERROR "Error: "
|
|
||||||
#define TC_BOOT_STR_NO_BOOT_PARTITION "No bootable partition found"
|
#ifndef TC_HEADER_Boot_BootStrings
|
||||||
#define TC_BOOT_STR_UPGRADE_BIOS "- Upgrade BIOS\r\n- Use a different motherboard model/brand\r\n"
|
#define TC_HEADER_Boot_BootStrings
|
||||||
|
|
||||||
#endif // TC_HEADER_Boot_BootStrings
|
#define TC_BOOT_STR_ERROR "Error: "
|
||||||
|
#define TC_BOOT_STR_NO_BOOT_PARTITION "No bootable partition found"
|
||||||
|
#define TC_BOOT_STR_UPGRADE_BIOS "- Upgrade BIOS\r\n- Use a different motherboard model/brand\r\n"
|
||||||
|
|
||||||
|
#endif // TC_HEADER_Boot_BootStrings
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Adapted for TrueCrypt */
|
/* Adapted for TrueCrypt */
|
||||||
|
/* Adapted for VeraCrypt */
|
||||||
|
|
||||||
|
|
||||||
#define local static /* for local function definitions */
|
#define local static /* for local function definitions */
|
||||||
@@ -82,7 +83,7 @@ local int stored(struct state *s)
|
|||||||
s->bitbuf = 0;
|
s->bitbuf = 0;
|
||||||
s->bitcnt = 0;
|
s->bitcnt = 0;
|
||||||
|
|
||||||
if (s->incnt + 4 > s->inlen)
|
if (s->incnt + 4 > s->inlen)
|
||||||
return 2; /* not enough input */
|
return 2; /* not enough input */
|
||||||
|
|
||||||
/* get length and check against its one's complement */
|
/* get length and check against its one's complement */
|
||||||
@@ -92,7 +93,7 @@ local int stored(struct state *s)
|
|||||||
s->in[s->incnt++] != ((~len >> 8) & 0xff))
|
s->in[s->incnt++] != ((~len >> 8) & 0xff))
|
||||||
return -2; /* didn't match complement! */
|
return -2; /* didn't match complement! */
|
||||||
|
|
||||||
if (s->incnt + len > s->inlen)
|
if (s->incnt + len > s->inlen)
|
||||||
return 2; /* not enough input */
|
return 2; /* not enough input */
|
||||||
|
|
||||||
/* copy len bytes from in to out */
|
/* copy len bytes from in to out */
|
||||||
@@ -378,21 +379,21 @@ local int dynamic(struct state *s)
|
|||||||
lengths[index++] = symbol;
|
lengths[index++] = symbol;
|
||||||
else { /* repeat instruction */
|
else { /* repeat instruction */
|
||||||
len = 0; /* assume repeating zeros */
|
len = 0; /* assume repeating zeros */
|
||||||
switch(symbol)
|
switch(symbol)
|
||||||
{
|
{
|
||||||
case 16: { /* repeat last length 3..6 times */
|
case 16: { /* repeat last length 3..6 times */
|
||||||
if (index == 0) return -5; /* no last length! */
|
if (index == 0) return -5; /* no last length! */
|
||||||
len = lengths[index - 1]; /* last length */
|
len = lengths[index - 1]; /* last length */
|
||||||
symbol = 3 + bits(s, 2);
|
symbol = 3 + bits(s, 2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 17: /* repeat zero 3..10 times */
|
case 17: /* repeat zero 3..10 times */
|
||||||
symbol = 3 + bits(s, 3);
|
symbol = 3 + bits(s, 3);
|
||||||
break;
|
break;
|
||||||
default: /* == 18, repeat zero 11..138 times */
|
default: /* == 18, repeat zero 11..138 times */
|
||||||
symbol = 11 + bits(s, 7);
|
symbol = 11 + bits(s, 7);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ((index + symbol > nlen + ndist))
|
if ((index + symbol > nlen + ndist))
|
||||||
return -6; /* too many lengths! */
|
return -6; /* too many lengths! */
|
||||||
while (symbol--) /* repeat last or zero symbol times */
|
while (symbol--) /* repeat last or zero symbol times */
|
||||||
@@ -400,8 +401,8 @@ local int dynamic(struct state *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check for end-of-block code -- there better be one! */
|
/* check for end-of-block code -- there better be one! */
|
||||||
if (lengths[256] == 0)
|
if (lengths[256] == 0)
|
||||||
return -9;
|
return -9;
|
||||||
|
|
||||||
/* build huffman table for literal/length codes */
|
/* build huffman table for literal/length codes */
|
||||||
@@ -422,50 +423,50 @@ local int dynamic(struct state *s)
|
|||||||
void _acrtused () { }
|
void _acrtused () { }
|
||||||
|
|
||||||
// Decompress deflated data
|
// Decompress deflated data
|
||||||
int far main (
|
int far main (
|
||||||
unsigned char *dest, /* pointer to destination pointer */
|
unsigned char *dest, /* pointer to destination pointer */
|
||||||
unsigned int destlen, /* amount of output space */
|
unsigned int destlen, /* amount of output space */
|
||||||
unsigned char *source, /* pointer to source data pointer */
|
unsigned char *source, /* pointer to source data pointer */
|
||||||
unsigned int sourcelen)
|
unsigned int sourcelen)
|
||||||
{
|
{
|
||||||
struct state s; /* input/output state */
|
struct state s; /* input/output state */
|
||||||
int last, type; /* block information */
|
int last, type; /* block information */
|
||||||
int err; /* return value */
|
int err; /* return value */
|
||||||
|
|
||||||
/* initialize output state */
|
/* initialize output state */
|
||||||
s.out = dest;
|
s.out = dest;
|
||||||
s.outlen = destlen; /* ignored if dest is NIL */
|
s.outlen = destlen; /* ignored if dest is NIL */
|
||||||
s.outcnt = 0;
|
s.outcnt = 0;
|
||||||
|
|
||||||
/* initialize input state */
|
/* initialize input state */
|
||||||
s.in = source;
|
s.in = source;
|
||||||
s.inlen = sourcelen;
|
s.inlen = sourcelen;
|
||||||
s.incnt = 0;
|
s.incnt = 0;
|
||||||
s.bitbuf = 0;
|
s.bitbuf = 0;
|
||||||
s.bitcnt = 0;
|
s.bitcnt = 0;
|
||||||
|
|
||||||
/* process blocks until last block or error */
|
/* process blocks until last block or error */
|
||||||
do {
|
do {
|
||||||
last = bits(&s, 1); /* one if last block */
|
last = bits(&s, 1); /* one if last block */
|
||||||
type = bits(&s, 2); /* block type 0..3 */
|
type = bits(&s, 2); /* block type 0..3 */
|
||||||
switch(type)
|
switch(type)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
err = stored(&s);
|
err = stored(&s);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
err = fixed(&s);
|
err = fixed(&s);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
err = dynamic(&s);
|
err = dynamic(&s);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
err = -1; /* type == 3, invalid */
|
err = -1; /* type == 3, invalid */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err != 0) break; /* return with error */
|
if (err != 0) break; /* return with error */
|
||||||
} while (!last);
|
} while (!last);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user