WinAbility Encryption Driver (Driver) contains the implementation of the following cryptographic algorithms:
The implementation of the AES algorithm uses the source code in assembler language by Dr. Gladman . It conforms to the specification of the NIST document FIPS 197. The implementation supports the 128-, 192-, and 256-bit key lengths.
The implementation of the Twofish algorithm conforms to its description by Bruce Schneier . The implementation supports the 128-, 192-, and 256-bit key lengths.
The Driver allows for combining two of the standard encryption algorithms described above, each using an independent encryption key, into a cascade algorithm, that effectively creates a combined encryption algorithm with the key lengths between 256 and 512 bits.
The Driver implements the SHA2 algorithms (with the digest sizes 256, 384, and 512 bits), as per the specifications on the document NIST 180-3.
The Driver implements this 512-bit hash algorithm according to its description by Paulo S. L. M. Barreto .
The Driver contains the implementations of the SHA1 and MD5 hash algorithms, to allow for their availability for the legacy protocols, when required. However, these algorithms are not used in other constructions within the Driver itself.
The Driver implements the ECB and CBC encryption modes as per the specifications of the NIST document SP 800-38 A.
The Driver implements the XTS encryption mode conforming to the NIST document SP 800-38 E.
The Driver implements the CMAC (OMAC) algorithm according to the NIST document SP 800-38B.
The Driver implements the HMAC algorithm according to the NIST document FIPS 198 A.
The Driver implements the PBKDF2 (Password-Based Key Derivation Function ) algorithm.
The Driver implements the CTR-DRBG algorithm as described in the NIST publication SP 800-90 section 10.2.1. An option is also available to use the pseudo-random data generator as a random data generator by collecting the entropy from the movements of the computer mouse and timing the keystrokes of the keyboard in the background, as well as using several volatile system parameters.