Graviola Benchmarking Results

At the moment benchmarking is non-automated, and is run on two of my laptops. See below.

Headlines

These categories are chosen because they are typically used for TLS traffic on the web.

aarch64

Signing

RSA2048 signing

🥇 aws-lc-rs

2,218.6 sigs/sec

🥈 ring

2,051.1 sigs/sec

🥉 graviola

1,358 sigs/sec

golang

1,250.8 sigs/sec

rustcrypto

970.2 sigs/sec
ECDSA-P256 signing

🥇 graviola

85,746 sigs/sec

🥈 ring

67,951 sigs/sec

🥉 aws-lc-rs

64,870 sigs/sec

golang

60,121 sigs/sec

rustcrypto

7,788.7 sigs/sec
ECDSA-P384 signing

🥇 aws-lc-rs

14,483 sigs/sec

🥈 graviola

8,995.2 sigs/sec

🥉 golang

7,192.5 sigs/sec

ring

3,429.9 sigs/sec

rustcrypto

2,326.3 sigs/sec

Signature verification

RSA2048 signature verification

🥇 aws-lc-rs

68,753 sigs/sec

🥈 ring

57,661 sigs/sec

🥉 graviola

49,062 sigs/sec

golang

39,064 sigs/sec

rustcrypto

7,884 sigs/sec
ECDSA-P256 signature verification

🥇 aws-lc-rs

25,699 sigs/sec

🥈 graviola

25,414 sigs/sec

🥉 ring

23,800 sigs/sec

golang

19,410 sigs/sec

rustcrypto

4,767.5 sigs/sec
ECDSA-P384 signature verification

🥇 aws-lc-rs

6,027.9 sigs/sec

🥈 graviola

4,933 sigs/sec

🥉 golang

2,320.3 sigs/sec

ring

1,915.9 sigs/sec

rustcrypto

1,203.4 sigs/sec

Key exchange

X25519 key agreement

🥇 graviola

43,835 kx/sec

🥈 aws-lc-rs

42,585 kx/sec

🥉 ring

27,031 kx/sec

dalek

23,965 kx/sec

golang

13,375 kx/sec
P256 key agreement

🥇 graviola

24,098 kx/sec

🥈 ring

21,740 kx/sec

🥉 aws-lc-rs

21,403 kx/sec

golang

20,282 kx/sec

rustcrypto

4,743.2 kx/sec
P384 key agreement

🥇 aws-lc-rs

5,155.1 kx/sec

🥈 graviola

4,710.4 kx/sec

🥉 golang

2,483.2 kx/sec

ring

1,850.4 kx/sec

rustcrypto

1,260.1 kx/sec

Bulk encryption

AES256-GCM encryption (8KB wide)

🥇 aws-lc-rs

6.54 GiB/sec

🥈 golang

5.9 GiB/sec

🥉 graviola

5.45 GiB/sec

ring

5.44 GiB/sec

rustcrypto

0.134 GiB/sec

Versions tested

  • aws-lc-rs version: aws-lc-rs 1.10.0, aws-lc-sys 0.22.0
  • dalek version: curve25519-dalek 4.1.3, x25519-dalek 2.0.1
  • golang version: go version go1.23.1 darwin/arm64
  • graviola version: graviola 0.2.0-alpha.0
  • ring version: ring 0.17.8
  • rustcrypto version: aes-gcm 0.10.3, p256 0.13.2, p384 0.13.0, rsa 0.9.6, sha2 0.10.8
  • x86_64

    Signing

    RSA2048 signing ⓘ

    🥇 aws-lc-rs

    5,495.6 sigs/sec

    🥈 ring

    2,413.7 sigs/sec

    🥉 graviola

    2,279 sigs/sec

    golang

    1,358.4 sigs/sec

    rustcrypto

    879.04 sigs/sec
    ECDSA-P256 signing

    🥇 graviola

    92,610 sigs/sec

    🥈 ring

    80,648 sigs/sec

    🥉 aws-lc-rs

    79,121 sigs/sec

    golang

    60,809 sigs/sec

    rustcrypto

    8,612.7 sigs/sec
    ECDSA-P384 signing

    🥇 aws-lc-rs

    15,800 sigs/sec

    🥈 graviola

    9,310.3 sigs/sec

    🥉 golang

    6,798 sigs/sec

    ring

    3,284 sigs/sec

    rustcrypto

    2,210.9 sigs/sec

    Signature verification

    RSA2048 signature verification

    🥇 graviola

    83,986 sigs/sec

    🥈 aws-lc-rs

    77,374 sigs/sec

    🥉 ring

    66,449 sigs/sec

    golang

    46,486 sigs/sec

    rustcrypto

    7,428.2 sigs/sec
    ECDSA-P256 signature verification

    🥇 aws-lc-rs

    26,759 sigs/sec

    🥈 ring

    26,427 sigs/sec

    🥉 graviola

    25,369 sigs/sec

    golang

    19,334 sigs/sec

    rustcrypto

    5,006.7 sigs/sec
    ECDSA-P384 signature verification

    🥇 aws-lc-rs

    6,293.1 sigs/sec

    🥈 graviola

    5,051.7 sigs/sec

    🥉 golang

    2,261.3 sigs/sec

    ring

    1,822.1 sigs/sec

    rustcrypto

    1,146.3 sigs/sec

    Key exchange

    X25519 key agreement

    🥇 graviola

    43,888 kx/sec

    🥈 aws-lc-rs

    42,896 kx/sec

    🥉 ring

    20,464 kx/sec

    dalek

    19,980 kx/sec

    golang

    14,267 kx/sec
    P256 key agreement

    🥇 graviola

    24,931 kx/sec

    🥈 ring

    24,288 kx/sec

    🥉 aws-lc-rs

    24,203 kx/sec

    golang

    20,698 kx/sec

    rustcrypto

    5,022.2 kx/sec
    P384 key agreement

    🥇 aws-lc-rs

    5,418.9 kx/sec

    🥈 graviola

    4,938.4 kx/sec

    🥉 golang

    2,438 kx/sec

    ring

    1,782.8 kx/sec

    rustcrypto

    1,194 kx/sec

    Bulk encryption

    AES256-GCM encryption (8KB wide) ⓘ

    🥇 aws-lc-rs

    10 GiB/sec

    🥈 golang

    6.22 GiB/sec

    🥉 graviola

    5.1 GiB/sec

    ring

    5 GiB/sec

    rustcrypto

    1.77 GiB/sec

    Versions tested

  • aws-lc-rs version: aws-lc-rs 1.10.0, aws-lc-sys 0.22.0
  • dalek version: curve25519-dalek 4.1.3, x25519-dalek 2.0.1
  • golang version: go version go1.22.4 linux/amd64
  • graviola version: graviola 0.1.1
  • ring version: ring 0.17.8
  • rustcrypto version: aes-gcm 0.10.3, p256 0.13.2, p384 0.13.0, rsa 0.9.6, sha2 0.10.8
  • Full reports