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,223.5 sigs/sec

🥈 ring

2,043.4 sigs/sec

🥉 graviola

1,326.5 sigs/sec

golang

1,250.8 sigs/sec

rustcrypto

969.29 sigs/sec
ECDSA-P256 signing

🥇 graviola

87,510 sigs/sec

🥈 aws-lc-rs

68,614 sigs/sec

🥉 ring

65,850 sigs/sec

golang

60,121 sigs/sec

rustcrypto

8,272.6 sigs/sec
ECDSA-P384 signing

🥇 aws-lc-rs

16,079 sigs/sec

🥈 graviola

8,722.8 sigs/sec

🥉 golang

7,192.5 sigs/sec

ring

3,440.8 sigs/sec

rustcrypto

2,283.8 sigs/sec

Signature verification

RSA2048 signature verification

🥇 aws-lc-rs

68,763 sigs/sec

🥈 ring

58,776 sigs/sec

🥉 graviola

49,531 sigs/sec

golang

39,064 sigs/sec

rustcrypto

8,084.7 sigs/sec
ECDSA-P256 signature verification

🥇 graviola

26,670 sigs/sec

🥈 aws-lc-rs

24,896 sigs/sec

🥉 ring

23,160 sigs/sec

golang

19,410 sigs/sec

rustcrypto

5,164.2 sigs/sec
ECDSA-P384 signature verification

🥇 aws-lc-rs

6,503.8 sigs/sec

🥈 graviola

4,893.4 sigs/sec

🥉 golang

2,320.3 sigs/sec

ring

1,922.4 sigs/sec

rustcrypto

1,233.4 sigs/sec

Key exchange

X25519 key agreement

🥇 graviola

42,769 kx/sec

🥈 aws-lc-rs

42,558 kx/sec

🥉 ring

26,331 kx/sec

dalek

23,550 kx/sec

golang

13,375 kx/sec
P256 key agreement

🥇 aws-lc-rs

24,810 kx/sec

🥈 graviola

23,341 kx/sec

🥉 ring

21,189 kx/sec

golang

20,282 kx/sec

rustcrypto

5,138.3 kx/sec
P384 key agreement

🥇 aws-lc-rs

6,879.7 kx/sec

🥈 graviola

4,585.7 kx/sec

🥉 golang

2,483.2 kx/sec

ring

1,855.3 kx/sec

rustcrypto

1,235 kx/sec

Bulk encryption

AES256-GCM encryption (8KB wide)

🥇 aws-lc-rs

6.54 GiB/sec

🥈 golang

5.9 GiB/sec

🥉 ring

5.5 GiB/sec

graviola

5.2 GiB/sec

rustcrypto

0.14 GiB/sec

Versions tested

  • aws-lc-rs version: aws-lc-rs 1.13.3, aws-lc-sys 0.30.0
  • dalek version: curve25519-dalek 4.1.3, x25519-dalek 2.0.1
  • golang version: go version go1.23.1 darwin/arm64
  • graviola version: 0.3.0
  • ring version: ring 0.17.14
  • rustcrypto version: aes-gcm 0.10.3, p256 0.13.2, p384 0.13.1, rsa 0.9.8, sha2 0.10.9
  • x86_64

    Signing

    RSA2048 signing ⓘ

    🥇 aws-lc-rs

    5,476.5 sigs/sec

    🥈 ring

    2,407.5 sigs/sec

    🥉 graviola

    2,318.2 sigs/sec

    golang

    1,390.7 sigs/sec

    rustcrypto

    874.06 sigs/sec
    ECDSA-P256 signing

    🥇 graviola

    90,898 sigs/sec

    🥈 aws-lc-rs

    84,749 sigs/sec

    🥉 ring

    81,198 sigs/sec

    golang

    44,575 sigs/sec

    rustcrypto

    9,446.6 sigs/sec
    ECDSA-P384 signing

    🥇 aws-lc-rs

    16,398 sigs/sec

    🥈 graviola

    9,303 sigs/sec

    🥉 golang

    6,758.6 sigs/sec

    ring

    3,296.2 sigs/sec

    rustcrypto

    2,219.6 sigs/sec

    Signature verification

    RSA2048 signature verification

    🥇 graviola

    84,549 sigs/sec

    🥈 aws-lc-rs

    76,438 sigs/sec

    🥉 ring

    64,915 sigs/sec

    golang

    46,786 sigs/sec

    rustcrypto

    7,404.7 sigs/sec
    ECDSA-P256 signature verification

    🥇 aws-lc-rs

    26,874 sigs/sec

    🥈 graviola

    26,606 sigs/sec

    🥉 ring

    26,113 sigs/sec

    golang

    20,017 sigs/sec

    rustcrypto

    5,618.7 sigs/sec
    ECDSA-P384 signature verification

    🥇 aws-lc-rs

    6,993.5 sigs/sec

    🥈 graviola

    5,169.8 sigs/sec

    🥉 golang

    2,316 sigs/sec

    ring

    1,827.9 sigs/sec

    rustcrypto

    1,225.9 sigs/sec

    Key exchange

    X25519 key agreement

    🥇 graviola

    43,204 kx/sec

    🥈 aws-lc-rs

    43,016 kx/sec

    🥉 ring

    22,785 kx/sec

    dalek

    20,185 kx/sec

    golang

    14,762 kx/sec
    P256 key agreement

    🥇 aws-lc-rs

    25,621 kx/sec

    🥈 ring

    24,342 kx/sec

    🥉 graviola

    24,263 kx/sec

    golang

    21,198 kx/sec

    rustcrypto

    5,583.2 kx/sec
    P384 key agreement

    🥇 aws-lc-rs

    7,290.4 kx/sec

    🥈 graviola

    4,950.9 kx/sec

    🥉 golang

    2,519.5 kx/sec

    ring

    1,771.7 kx/sec

    rustcrypto

    1,223.1 kx/sec

    Bulk encryption

    AES256-GCM encryption (8KB wide) ⓘ

    🥇 aws-lc-rs

    10.2 GiB/sec
    ⓘ

    🥈 ring

    9.52 GiB/sec
    ⓘ

    🥉 graviola

    9.33 GiB/sec

    golang

    6.5 GiB/sec

    rustcrypto

    1.83 GiB/sec

    Versions tested

  • aws-lc-rs version: aws-lc-rs 1.13.3, aws-lc-sys 0.30.0
  • dalek version: curve25519-dalek 4.1.3, x25519-dalek 2.0.1
  • golang version: go version go1.24.2 linux/amd64
  • graviola version: 0.3.0
  • ring version: ring 0.17.14
  • rustcrypto version: aes-gcm 0.10.3, p256 0.13.2, p384 0.13.1, rsa 0.9.8, sha2 0.10.9
  • Full reports