This is the README file for the SHA-3 candidate algorithm Boole, submitted by Greg Rose of Qualcomm Incorporated. Introduction ------------ Boole is a somewhat general construction that implements a hash function, a stream cipher, and a MAC function in the same source code. It is named in memory of logician George Boole. The same source code supports three different versions of Boole, for 16-, 32- and 64-bit words. Which version applies is selected by a compile-time parameter WORDSIZE, which give the size of the words in bits as above. This can be selected on the compiler command line (eg. "-DWORDSIZE=64") or by editing the #define line in Boole.h. The default word size is 64 bits. Our "official" submission for SHA-3 is the 64-bit version, hereafter referred to as Boole64 if disambiguation is needed. It directly supports any output size between 1 and 512 bits, which of course includes all the required sizes. For 32-bit and smaller platforms, the 32-bit version ("Boole32") provides a smaller memory footprint and greater efficiency, while supporting output digests from 1 to 256 bits inclusive; it is also a useful target for cryptanalysis. Lastly, the 16-bit version ("Boole16") has an even smaller footprint, might be used as a replacement for MD5, and forms an even simpler target for cryptanalysis. The documents and source code define all three versions of Boole. Output for Known Answer Tests for Boole32 are in the \Additional_Implementations subdirectory to avoid confusing them with the Boole64 submission. Contact Details --------------- The submitter and implementer is Greg Rose, of Qualcomm Incorporated. The owner of the copyright is Qualcomm Incorporated. Address: Greg Rose -- QRC-600H Qualcomm Inc. 5775 Morehouse Drive San Diego CA 92121 USA Phone: +1 858 651 5733 Fax: +1 858 651 5766 Mobile: +1 619 890 8236 email: ggr@qualcomm.com Contents -------- \README: this file. \Reference_Implementation\Boole.h: \Reference_Implementation\Boole.c: Reference implementation. \Optimized_32bit\Boole.h: \Optimized_32bit\Boole.c: Optimized implementation of Boole (64-bit word size). The optimizations are principally using a circular buffer rather than a shift register, avoiding byte-shuffling to form words on 64-bit machines, and unrolling loops to take advantage of constant subscripts. These files are identical to those in \Optimized_64bit. Note that they are *not* Boole32, which is simply a compile time option! \Optimized_64bit\Boole.h: \Optimized_64bit\Boole.c: Optimized implementation of Boole (64-bit word size). The optimizations are principally using a circular buffer rather than a shift register, avoiding byte-shuffling to form words on 64-bit machines, and unrolling loops to take advantage of constant subscripts. These files are identical to those in \Optimized_32bit. On a little-endian platform compile with -DIS_LITTLE_ENDIAN for greater efficiency on memory accesses. \KAT_MCT\ExtremelyLongMsgKAT_224.txt \KAT_MCT\ExtremelyLongMsgKAT_256.txt \KAT_MCT\ExtremelyLongMsgKAT_384.txt \KAT_MCT\ExtremelyLongMsgKAT_512.txt \KAT_MCT\LongMsgKAT_224.txt \KAT_MCT\LongMsgKAT_256.txt \KAT_MCT\LongMsgKAT_384.txt \KAT_MCT\LongMsgKAT_512.txt \KAT_MCT\MonteCarlo_224.txt \KAT_MCT\MonteCarlo_256.txt \KAT_MCT\MonteCarlo_384.txt \KAT_MCT\MonteCarlo_512.txt \KAT_MCT\ShortMsgKAT_224.txt \KAT_MCT\ShortMsgKAT_256.txt \KAT_MCT\ShortMsgKAT_384.txt \KAT_MCT\ShortMsgKAT_512.txt: These are the required output files for the Known Answer Tests and Monte Carlo Tests for Boole. \KAT_MCT\verbose-64-1-224 \KAT_MCT\verbose-64-1-256 \KAT_MCT\verbose-64-1-384 \KAT_MCT\verbose-64-1-512 \KAT_MCT\verbose-64-2-224 \KAT_MCT\verbose-64-2-256 \KAT_MCT\verbose-64-2-384 \KAT_MCT\verbose-64-2-512 These files have detailed outputs of the computation of hash values from Boole64 and Boole32, for the required hash sizes, and for one- and two-block messages, as requested by section 2.B.3 of the call. The suffix of the file name is: - Wordsize (64) - How many blocks (words) of input - output digest length in bits. See the documentation for a marked-up example. \Supporting_Documentation\BoolePaper.pdf: This is the specification paper for Boole. \Supporting_Documentation\BoolePres.pdf This is a powerpoint-style presentation introducing Boole. It should not be considered normative, but nevertheless should correspond to the paper. \Supporting_Documentation\agreements.pdf: Scanned copies of the two required signed statements. Originals are enclosed with the submission CDs. \Supporting_Documentation\Cover_Sheet.jpg: Scanned copy of the signed cover sheet. \Additional_Implementations\Boole32\KAT_MCT\ExtremelyLongMsgKAT_224.txt \Additional_Implementations\Boole32\KAT_MCT\ExtremelyLongMsgKAT_256.txt \Additional_Implementations\Boole32\KAT_MCT\LongMsgKAT_224.txt \Additional_Implementations\Boole32\KAT_MCT\LongMsgKAT_256.txt \Additional_Implementations\Boole32\KAT_MCT\MonteCarlo_224.txt \Additional_Implementations\Boole32\KAT_MCT\MonteCarlo_256.txt \Additional_Implementations\Boole32\KAT_MCT\ShortMsgKAT_224.txt \Additional_Implementations\Boole32\KAT_MCT\ShortMsgKAT_256.txt \Additional_Implementations\Boole32\KAT_MCT\verbose-32-1-224 \Additional_Implementations\Boole32\KAT_MCT\verbose-32-1-256 \Additional_Implementations\Boole32\KAT_MCT\verbose-32-2-224 \Additional_Implementations\Boole32\KAT_MCT\verbose-32-2-256 These files are Boole32 output from Known Answer Tests, Monte Carlo Tests, and a verbose examination of the output from one- and two-block inputs for the required output bit lengths of 224 and 256 bits. The source code is the same as in the top level directories, and so has not been separately included; just compile with -DWORDLENGTH=32. \Boole-1.0.tgz: This is a gzipped tar archive of the source code, documentation, makefiles, etc., that forms a normal "distribution" of Boole. It will eventually appear on a QUALCOMM-supported open source site. NIST can ignore this file, it was included for completeness. In addition to the source files provided above, it contains a hex reading/printing library, and a self-test and timing harness for the stream cipher and MAC functionality of Boole.