DiceLockIVIndexedNoOMCheck is a C++ program to verify that DiceLockIVIndexed class implementing one of DiceLock different architectures is working as expected.
DiceLockIVIndexed class is the class that implements DiceLock architecture with the following characteristics:
– base encryption cipher/decipher is any symmetric cipher (stream cipher or block cipher operation mode) working with symmetric key, and initialization vector (IV) are needed,
– ciphered index pointing symmetric key modification plus ciphertext is checked for random number test properties,
– any function that is able to change original symmetric key with new values generating index pointing out such modification,
– bit random number tests that can verify that encrypted ciphertext is at random.
Current algorithm classes that can be used with DiceLockIVIndexed architecture are:
– as base encryption cipher/decipher:
– symmetric key changers: IncreaseBase0IndexModifier_6_0_0_1 and DecreaseBase0IndexModifier_6_0_0_1,
– random number tests: Frequency, Block Frequency, Cumulative Sum Forward, Cumulative Sum Reverse, Runs, Longest Run Of Ones, Rank, Universal, Approximate Entropy, Serial, Discrete Fourier Transform tests and random number test Suite with any or all previous enumerated random number tests.
Because of so many alternative encryption/decryption engines can be used, we have split DiceLockIVIndexed class tests in two main C++ program tests:
– DiceLockIVIndexedNoOMCheck C++ Source Code program making use of stream ciphers, and
– DiceLockIVIndexedOMCheck C++ Source Code program making use of block cipher operation modes with multiple block ciphers.
In this test we verify DiceLockIVIndexedNoOMCheck C++ Source Code program making use of stream ciphers with the configuration shown below.
While performing internal software quality assurance we have verified that DiceLockIVIndexedNoOMCheck in debug mode does not generate any memory leaks with any executed option.
Debug mode was run with the corresponding debugger and the C Run-Time Libraries (CRT) debug heap functions as well as with dump memory leak information function that can be obtained executing “_CrtDumpMemoryLeaks” statement before program ends execution.
In this test we have selected this DiceLock configuration:
DiceLock class: DiceLockIVIndexed
Encryption stream cipher: HC 256 stream cipher
Random number test: Frequency
Random number test: Block Frequency
Random number test: Cumulative Sum Forward
Random number test: Longest Run of Ones
Random number test: Runs
All random number test significance level: Alpha = 0.001 (confidence level of 99.9%)
Symmetric key modifier class: IncreaseBase0IndexModifier_6_0_0_1 by index key modifier
Bit stream class: PhysicalCryptoRandomStream bit data stream
PhysicalCryptoRandomStream class makes use of AWE (Address Windowing Extensions) that uses physical nonpaged memory, so memory is not swapped to hard disk.
In order to use PhysicalCryptoRandomStream class, which works with AWE it requires that “Lock Pages In Memory” Windows security setting policy permission must be granted in “Local Policy Settings” to the account executing the program, and in some versions the program must have “Run this program as an administrator” “Privilege Level” option checked.
At post bottom there are C++ Source Code links to all DiceLock cipher files being used to perform this configuration test.
Execution call has been:
– DiceLockIVIndexedNoOMCheck 101 DiceLock-8-0-0-1-DiceLockIVIndexed-HC-256-Frequency-Block-Frequency-CuSum-Forward-Longest-Run-Of-Ones-Runs-Incr-Base0-Index-Physical-memory.log
In the following post you can find DiceLockIVIndexedNoOMCheck C++ source code that has been executed where you can see how DiceLockIVIndexed class can work with all different options:
And the result we’ve gotten is:
Verified: --------- DiceLock-8-0-0-1-DiceLockIVIndexed-HC-256-Frequency-Block-Frequency-CuSum-Forward-Longest-Run-Of-Ones-Runs-Incr-Base0-Index-Physical-memory.log Number of streams tested: 62500 From length of shorter stream tested in bits: 8 Up to length of larger stream tested in bits: 500000 Number of correct streams deciphered: 62500 Number of incorrect streams deciphered: 0 Incorrect deciphered streams = 0 ==> ---OK--- Total encrypted streams reciphered at least once: 288 Maximum number of reciphers performed over one stream being reciphered: 2 File with reciphered stream data: DiceLock-8-0-0-1-DiceLockIVIndexed-HC-256-Frequency-Block-Frequency-CuSum-Forward-Longest-Run-Of-Ones-Runs-Incr-Base0-Index-Physical-memory.log.reciphered
Original output log file from DiceLockIVIndexedNoOMCheck execution:
From log file we can see that all randomized-encrypted text sequences have been correctly deciphered.
While DiceLockIVIndexedNoOMCheck was executed a log file of reciphered (plaintext sequences being ciphered more than one time in order to get sequences at random) text sequences has been stored.
DiceLockIVIndexedNoOMCheck reciphers log file is composed of rows, and each row shows hexadecimal value for each byte of symmetric key, initialization vector and plaintext, plaintext length in bits and number of reciphers executed with such plaintext and symmetric key.
Reciphers log file:
This output file will allow us to extract statistical information and to verify DiceLock cipher architecture execution between different operating system environments.
So, DiceLock cipher test and analysis can go on …
DiceLock is a trademark or registered trademark of his owner where applies. DiceLock research is the research to implement Self-corrector randomisation-encryption and method, european patent EP1182777 granted 08/21/2003 and US patent US7508945 granted 03/24/2009.