mirror of
https://github.com/veracrypt/VeraCrypt
synced 2024-12-02 16:03:26 +01:00
140 lines
3.8 KiB
Batchfile
140 lines
3.8 KiB
Batchfile
@echo off
|
|
setlocal EnableDelayedExpansion
|
|
|
|
:: Define constants
|
|
set "VERACRYPT_PATH=c:\Program Files\VeraCrypt\veracrypt.exe"
|
|
set "PASSWORD=test"
|
|
set "HIDDEN_PASSWORD=testhidden"
|
|
|
|
:: Find a free drive letter
|
|
call :freedrive mydriveletter || (
|
|
echo ERROR: No free drive letter found.
|
|
goto :exit
|
|
)
|
|
|
|
echo Using drive letter !mydriveletter!: for our tests
|
|
echo.
|
|
|
|
:: Define an array of hash algorithms and their corresponding container files
|
|
set "algorithms[0]=sha512,test.sha512.hc"
|
|
set "algorithms[1]=whirlpool,test.whirlpool.hc"
|
|
set "algorithms[2]=sha256,test.sha256.hc"
|
|
set "algorithms[3]=blake2s,test.blake2s.hc"
|
|
set "algorithms[4]=streebog,test.streebog.hc"
|
|
|
|
:: Loop through each algorithm
|
|
for /L %%i in (0,1,4) do (
|
|
for /F "tokens=1,2 delims=," %%a in ("!algorithms[%%i]!") do (
|
|
set "hash=%%a"
|
|
set "container=%%b"
|
|
|
|
if exist "!container!" (
|
|
call :mount_and_measure "!hash!" "!container!" "Normal" "!PASSWORD!"
|
|
call :mount_and_measure "!hash!" "!container!" "Hidden" "!HIDDEN_PASSWORD!"
|
|
echo.
|
|
)
|
|
)
|
|
)
|
|
|
|
:: Autodetect test
|
|
call :availablevolume testvolume || goto :exit
|
|
|
|
call :measure_time "Wrong Password (PRF Auto-detection)" ^
|
|
"/volume !testvolume! /l !mydriveletter! /password wrongpassword /q /silent /m ro"
|
|
|
|
echo.
|
|
goto :exit
|
|
|
|
:: Subroutine to mount a volume and measure the time taken
|
|
:mount_and_measure
|
|
setlocal
|
|
set "hash=%~1"
|
|
set "container=%~2"
|
|
set "type=%~3"
|
|
set "volumepassword=%~4"
|
|
|
|
call :measure_time "%hash% (%type%)" ^
|
|
"/volume !container! /hash !hash! /l !mydriveletter! /password !volumepassword! /q /silent /m ro"
|
|
|
|
if not exist !mydriveletter!:\ (
|
|
echo ERROR: Drive letter !mydriveletter!: does not exist after mount operation.
|
|
goto :exit
|
|
)
|
|
|
|
"!VERACRYPT_PATH!" /dismount !mydriveletter! /silent /q
|
|
exit /b
|
|
|
|
:: Subroutine to measure the time taken for a command to execute
|
|
:measure_time
|
|
setlocal
|
|
set "oper=%~1"
|
|
set "command=%~2"
|
|
|
|
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"
|
|
|
|
"!VERACRYPT_PATH!" %command%
|
|
|
|
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"
|
|
|
|
set /A elapsed=end-start
|
|
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 %oper% = %hh%:%mm%:%ss%,%cc%
|
|
exit /b
|
|
|
|
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%
|
|
|
|
:: Subroutine to find an available volume
|
|
:availablevolume
|
|
setlocal EnableDelayedExpansion
|
|
set exitcode=0
|
|
set "output_var=%~1"
|
|
for %%i in (test.sha512.hc,test.sha256.hc,test.whirlpool.hc,test.blake2s.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
|
|
|
|
pause |