libcrux 0.0.1-dev.1

Formally Verified Cryptography
docs.rs failed to build libcrux-0.0.1-dev.1
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: libcrux-0.0.2-pre.2

libcrux - the formally verified crypto library

Please refer to the Architecture document for a detailed overview of the libcrux architecture and properties.

Algorithms

Note The available algorithms is still work in progress and will grow in future.

Algorithm Platforms spec equivalence security proof
AES x64 (AES-NI) Coq
AES-GCM x64 (AES-NI)
Chacha20 x64, arm64 F* (EC)
Poly1305 x64, arm64 F* (EC)
Chacha20Poly1305 x64, arm64 (F* or hacspec)
Curve25519 x64, arm64 (F*)
EdDSA 25519 x64, arm64 (F*)
EcDSA P256 x64, arm64
Sha2 x64, arm64 (F*)
Sha3 x64, arm64 (F*) (EC) (EC)
Blake2 x64, arm64
HMAC x64, arm64
HKDF x64, arm64
Bls12-381 x64, arm64 Coq
HPKE x64, arm64 hacspec

ToDos

Everything in parenthesis still needs to be done

  • Add references to all spec equivalence entries
  • Bls hash to curve?

Equivalence proofs

  • Chacha20 EC
  • Poly EC
  • Chacha20Poly1305 F* or hacspec
  • Curve25519 F*
  • Ed25519 F*
  • Sha2 F*
  • Sha3 F*
  • Sha3 EC

Benchmarks

Algorithm Platforms Performance Performance "RustCrypto" Performance "Ring" Performance "OpenSSL"
Chacha20Poly1305 x64 (avx2)
(encrypt/decrypt) arm64 (Apple silicon) 758.89 / 761.19 MiB/s 249.33 / 230.08 MiB/s 973.04 / 773.60 MiB/s 1.6296 / 1.4670 GiB/s
Curve25519 x64 (avx2)
arm64 (Apple silicon) 30.320 µs 35.465 µs 30.363 µs 32.272 µs
Sha2 224 x64 (avx2) -
arm64 (Apple silicon) 306.41 MiB/s 318.87 MiB/s - 2.2335 GiB/s
Sha2 256 x64 (avx2)
arm64 (Apple silicon) 311.76 MiB/s 319.10 MiB/s 2.2491 GiB/s 2.2455 GiB/s
Sha2 384 x64 (avx2)
arm64 (Apple silicon) 496.62 MiB/s 513.94 MiB/s 592.38 MiB/s 1.3251 GiB/s
Sha2 512 x64 (avx2)
arm64 (Apple silicon) 489.83 MiB/s 513.53 MiB/s 590.17 MiB/s 1.3307 GiB/s
Sha3 224 x64 (avx2) 422.04 MiB/s 246.88 MiB/s - 281.23 MiB/s
arm64 (Apple silicon) 611.62 MiB/s 609.51 MiB/s - 660.30 MiB/s
Sha3 256 x64 (avx2) 371.56 MiB/s 233.28 MiB/s - 309.27 MiB/s
arm64 (Apple silicon) 574.39 MiB/s 573.89 MiB/s - 625.37 MiB/s
Sha3 384 x64 (avx2) 304.05 MiB/s 189.76 MiB/s - 236.08 MiB/s
arm64 (Apple silicon) 440.18 MiB/s 442.02 MiB/s - 480.97 MiB/s
Sha3 512 x64 (avx2) 207.69 MiB/s 129.79 MiB/s - 162.59 MiB/s
arm64 (Apple silicon) 306.78 MiB/s 307.47 MiB/s - 335.92 MiB/s

HPKE

Ciphersuite: x25519, Sha256, Chacha20Poly1305

libcrux HPKE
Setup Sender 79.9 μs 68 μs
Setup Receiver 76 μs 54.4 μs

"-": The library does not support this algorithm and/or platform.

Hardware support

The build enables all available hardware features for the target architecture. Further, the library always performs runtime checks to ensure that the required CPU features are available.

libcrux uses the following configurations for its hardware abstractions

  • simd128 assumes 128 bit SIMD instructions on the platform. This implies SSE3 and SSE4.1 on x64 CPUs and NEON on arm CPUs.
  • simd256 assumes 256 bit SIMD instructions on the platform This implies AVX and AVX2 on x64 CPUs.

Randomness

libcrux provides a DRBG implementation that can be used standalone (drbg::Drbg) or through the Rng traits.