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 key-encapsulation mechanisms submitted so far, and another page reporting measurements of those functions. Note that the eBATS project also includes public-key signature systems, Diffie–Hellman systems, and encryption systems.
The top-level directory name crypto_kem is required; it distinguishes key-encapsulation mechanisms from other operations benchmarked by SUPERCOP, such as crypto_hash and crypto_sign.
The second-level directory name pqrsa15 should be a lowercase version of your system's 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 key-encapsulation mechanisms must be placed into different second-level directories, even if they are part of the same "family" of functions. For example, crypto_kem/pqrsa20 is separate from crypto_kem/pqrsa15. One submission tarball can include several key-encapsulation mechanisms in separate directories. Directory names may be changed by the eBATS 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_kem/pqrsa15/ref might be a reference implementation, crypto_kem/pqrsa15/smith/little might be John Smith's little-endian implementation, and crypto_kem/pqrsa15/smith/neon might be John Smith's NEON-optimized implementation. One submission tarball can include several implementations.
After choosing the implementation name crypto_kem/pqrsa15/ref, create a directory by that name. Inside the crypto_kem/pqrsa15/ref directory, create a file named api.h with four lines
#define CRYPTO_SECRETKEYBYTES 98304 #define CRYPTO_PUBLICKEYBYTES 32768 #define CRYPTO_CIPHERTEXTBYTES 32768 #define CRYPTO_BYTES 32indicating that your software uses a 98304-byte (786432-bit) secret key, a 32768-byte (262144-bit) public key, a 32768-byte (262144-bit) ciphertext, and a 32-byte (256-bit) session key.
Next, inside the crypto_kem/pqrsa15/ref directory, create a file named kem.c that defines the following functions:
#include "crypto_kem.h" int crypto_kem_keypair( unsigned char *pk, unsigned char *sk ) { ... ... the code for your pqRSA-15 implementation goes here, ... generating public key pk[0],pk[1],... ... and secret key sk[0],sk[1],... ... return 0; } int crypto_kem_enc( unsigned char *c, unsigned char *k, const unsigned char *pk ) { ... ... the code for your pqRSA-15 implementation goes here, ... generating session key k[0],k[1],... ... and ciphertext c[0],c[1],... ... from public key pk[0],pk[1],... ... return 0; } int crypto_kem_dec( unsigned char *k, const unsigned char *c, const unsigned char *sk ) { ... ... the code for your pqRSA-15 implementation goes here, ... generating session key k[0],k[1],... ... from ciphertext c[0],c[1],... ... and secret key sk[0],sk[1],... ... return 0; }Your functions must have exactly the prototypes shown here. The keypair function must have an unsigned char pointer for the public-key output and an unsigned char pointer for the secret-key output. The enc function must have an unsigned char pointer for the ciphertext output, an unsigned char pointer for the session-key output, and a const unsigned char pointer for the public-key input. The dec function must have an unsigned char pointer for the session-key output, a const unsigned char pointer for the ciphertext input, and a const unsigned char pointer for the secret-key input. 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 kem.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_kem.h for any file referring to the crypto_kem_* functions. The file crypto_kem.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 pqrsa15-ref-3.01a.tar.gz that contains your crypto_kem/pqrsa15/ref/api.h, crypto_kem/pqrsa15/ref/kem.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.