Non-agile APIs

Not all algorithms have a corresponding agile API. For instance, there is no EverCrypt_ECDH.h yet. However, clients may still want to call, say Curve25519 and enjoy the benefits of multiplexing.

To that end, EverCrypt features a variety of non-agile, multiplexing APIs.

Chacha20-Poly1305

Multiplexes between: portable C, AVX, AVX2

Found in EverCrypt_Chacha20Poly1305.h.

See AEAD: Chacha20-Poly1305 for the API documentation, which is identical.

Curve25519

Multiplexes between: portable C, ADX + BMI2

Found in EverCrypt_Curve25519.h.

See ECDH: X25519 for the API documentation, which is identical.

Poly1305

Multiplexes between: portable C, AVX, AVX2, X64 assembly

Found in EverCrypt_Poly1305.h.


void EverCrypt_Poly1305_poly1305(uint8_t *dst, uint8_t *src, uint32_t len, uint8_t *key);

  • dst must be at least 16 bytes
  • if len, the length of src, gets close to 4GB, you need to read the precondition in EverCrypt.Poly1305.fsti
  • key must be at least 32 bytes

Ed25519

Found in EverCrypt_Ed25519.h.

Note

This is just a placeholder and there is no multiplexing for this API yet.