123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- @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
|