NIST Logo and ITL Banner Link to the NIST Homepage Link to the ITL Homepage Link to the NIST Homepage
Search CSRC:

SHA-3 SUBMISSION REQUIREMENTS

For full details of the SHA-3 Submission Requirements,
see the Federal Register Notice (November 2, 2007).

Reference and Optimized Implementations

*Note: Submitters may provide additional implementations to demonstrate specific properties of their algorithms. See Additional Implementations for further details.

2.C.1 Reference Implementation

A reference implementation shall be submitted in order to promote the understanding of how the candidate algorithm may be implemented. This implementation shall consist of source code written in ANSI C; appropriate comments should be included in the code, and the code should clearly map to the algorithm description included under Section 2.B.1. Since this implementation is intended for reference purposes, clarity in programming is more important than efficiency.

The reference implementation shall be capable of fully demonstrating the operation of the candidate algorithm. The reference implementation shall support all message digest sizes specified in Section 3. Additionally, it must support all other message digest sizes that are claimed to be supported by the algorithm.

NIST will specify a set of cryptographic service calls, namely a cryptographic API, for the ANSI C implementations, which will be made available at http://www.nist.gov/hash-competition. All ANSI C submissions shall implement that API so that the NIST test system can be compatible with all the submissions.

Separate source code for implementing the required KATs with the reference implementation shall also be included. This code shall be able to process input specified in the format indicated by NIST (on the web site as referred to under Section 2.B.3) and run the required tests.

The reference implementation shall be provided in a directory labeled: \Reference Implementation.

2.C.2 Optimized Implementations

Two optimized implementations of the candidate algorithm shall be submitted - one implementation that is optimized for a 32-bit platform, and another for a 64-bit platform. The optimized implementations shall be specified in the ANSI C programming language. These implementations will be evaluated on 32- and 64-bit platforms.

General Requirements for Both Optimized Implementations:

      • Both of the optimized implementations shall support the message digest sizes specified in Section 3.
      • Separate source code for implementing the required KATs and MCTs with the optimized implementations shall also be included. This code shall be able to process the input specified in the format indicated by NIST (on the web site as referred to under Section 2.B.3) and run the required tests.
      • The submitter shall provide the optimized implementations in two separate directories labeled:
          • \Optimized_32 bit
          • \Optimized_64 bit

respectively.

      • Additionally, submitters may, at their discretion, submit revised optimized implementations (for both the 32- and 64-bit implementations) for use in the Round 2 evaluation process, allowing additional time for improvements. These must be received prior to the beginning of the Round 2 evaluation; submitters will be notified of the specific deadline, as appropriate. Note that the optimized implementations on file with NIST at the close of the initial submission period will be the ones used by NIST in the Round 1 evaluation.