VAMPIRE |
eBACS: ECRYPT Benchmarking of Cryptographic Systems |
ECRYPT II |
---|
General information: | Introduction | eBASH | eBASC | eBAEAD | eBATS | SUPERCOP | XBX | Computers | Arch |
---|
How to submit new software: | Tips | hash | stream | aead | dh | kem | encrypt | sign |
---|
List of primitives measured: | lwc | sha3 | hash | stream | lwc | caesar | aead | dh | kem | encrypt | sign |
---|
Measurements: | lwc | sha3 | hash | stream | lwc | caesar | aead | dh | kem | encrypt | sign |
---|
List of subroutines: | verify | decode | encode | sort | core | hashblocks | xof | scalarmult |
---|
There is a separate page listing the stream ciphers submitted to eBASC so far (including some submitted to eSTREAM and imported to eBASC), and another page reporting measurements of those stream ciphers.
The top-level directory name crypto_stream is required; it distinguishes stream generation from other operations benchmarked by SUPERCOP, such as crypto_hash and crypto_sign.
The second-level directory name a57 should be a lowercase version of your stream-cipher name. Please omit dashes, dots, slashes, and other punctuation marks; the directory name should consist solely of digits (0123456789) and lowercase ASCII letters (abcdefghijklmnopqrstuvwxyz).
Different stream ciphers must be placed into different second-level directories, even if they are part of the same "family" of stream ciphers. For example, crypto_stream/aes128estream is separate from crypto_stream/aes256estream. One submission tarball can include several stream ciphers. Directory names may be changed by the eBASC managers to resolve conflicts or confusion.
The third-level directory name ref is up to you. Different implementations must be placed into different third-level directories. You can use subdirectories here; for example, crypto_stream/a57/ref might be a reference implementation, crypto_stream/a57/smith/little might be John Smith's little-endian implementation, and crypto_stream/a57/smith/sse3 might be John Smith's SSE3-optimized implementation. One submission tarball can include several implementations.
After choosing the implementation name crypto_stream/a57/ref, create a directory by that name. Inside the crypto_stream/a57/ref directory, create a file named api.h with two lines
#define CRYPTO_KEYBYTES 32 #define CRYPTO_NONCEBYTES 8indicating that your software uses a 32-byte (256-bit) key and an 8-byte (64-bit) nonce.
Next, inside the crypto_stream/a57/ref directory, create a file named stream.c that defines the following functions:
#include "crypto_stream.h" int crypto_stream( unsigned char *out, unsigned long long outlen, const unsigned char *n, const unsigned char *k ) { ... ... the code for your A5/7 implementation goes here ... generating stream out[0],out[1],...,out[outlen-1] ... using nonce n and key k ... return 0; } int crypto_stream_xor( unsigned char *out, const unsigned char *in, unsigned long long inlen, const unsigned char *n, const unsigned char *k ) { ... ... the code for your A5/7 implementation goes here ... generating ciphertext out[0],out[1],...,out[inlen-1] ... from plaintext in[0],in[1],...,in[inlen-1] ... using nonce n and key k ... return 0; }Your functions must have exactly the prototype shown here: first an unsigned char pointer for the output, then (for the xor function) a const unsigned char pointer for the input, then an unsigned long long for the number of bytes of output (and input), then an unsigned char pointer for the nonce, then an unsigned char pointer for the key. Your functions must return 0 to indicate success, or a negative number to indicate failure (e.g., out of memory).
You can use names other than stream.c. You can split your code across several files *.c defining various auxiliary functions; the files will be automatically compiled together. You must include crypto_stream.h for any file referring to the crypto_stream_* functions. The file crypto_stream.h is not something for you to write or submit; it is created automatically by SUPERCOP. See the SUPERCOP tips for more advice and options.
Finally, create a tarball such as a57-ref-3.01a.tar.gz that contains your crypto_stream/a57/ref/api.h, crypto_stream/a57/ref/stream.c, etc. Put the tarball on the web, and send the URL to the eBACS/eBATS/eBASC/eBASH mailing list with a note requesting inclusion in SUPERCOP and subsequent benchmarking.