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.6 sigs/sec

🥈 ring

2,046.5 sigs/sec

🥉 graviola

1,326.1 sigs/sec

golang

1,250.8 sigs/sec

rustcrypto

970.58 sigs/sec
ECDSA-P256 signing

🥇 graviola

87,711 sigs/sec

🥈 aws-lc-rs

70,638 sigs/sec

🥉 ring

67,401 sigs/sec

golang

60,121 sigs/sec

rustcrypto

8,434.8 sigs/sec
ECDSA-P384 signing

🥇 aws-lc-rs

16,133 sigs/sec

🥈 graviola

8,979.8 sigs/sec

🥉 golang

7,192.5 sigs/sec

ring

3,443.5 sigs/sec

rustcrypto

2,230.8 sigs/sec

Signature verification

RSA2048 signature verification

🥇 aws-lc-rs

68,349 sigs/sec

🥈 ring

57,900 sigs/sec

🥉 graviola

49,376 sigs/sec

golang

39,064 sigs/sec

rustcrypto

7,913.6 sigs/sec
ECDSA-P256 signature verification

🥇 graviola

26,677 sigs/sec

🥈 aws-lc-rs

24,933 sigs/sec

🥉 ring

23,804 sigs/sec

golang

19,410 sigs/sec

rustcrypto

5,260.5 sigs/sec
ECDSA-P384 signature verification

🥇 aws-lc-rs

6,732.8 sigs/sec

🥈 graviola

5,032.3 sigs/sec

🥉 golang

2,320.3 sigs/sec

ring

1,922.4 sigs/sec

rustcrypto

1,266.1 sigs/sec

Key exchange

X25519 key agreement

🥇 aws-lc-rs

43,664 kx/sec

🥈 graviola

42,779 kx/sec

🥉 ring

27,066 kx/sec

dalek

24,135 kx/sec

golang

13,375 kx/sec
P256 key agreement

🥇 aws-lc-rs

25,470 kx/sec

🥈 graviola

24,100 kx/sec

🥉 ring

21,183 kx/sec

golang

20,282 kx/sec

rustcrypto

5,229.9 kx/sec
P384 key agreement

🥇 aws-lc-rs

7,058.2 kx/sec

🥈 graviola

4,712.2 kx/sec

🥉 golang

2,483.2 kx/sec

ring

1,854.8 kx/sec

rustcrypto

1,270 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.26 GiB/sec

rustcrypto

0.133 GiB/sec

Versions tested

  • aws-lc-rs version: aws-lc-rs 1.13.0, aws-lc-sys 0.28.2
  • 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
  • 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,544.1 sigs/sec

    🥈 ring

    2,442.5 sigs/sec

    🥉 graviola

    2,353 sigs/sec

    golang

    1,390.7 sigs/sec

    rustcrypto

    874.41 sigs/sec
    ECDSA-P256 signing

    🥇 graviola

    93,167 sigs/sec

    🥈 aws-lc-rs

    86,112 sigs/sec

    🥉 ring

    82,546 sigs/sec

    golang

    44,575 sigs/sec

    rustcrypto

    9,360.3 sigs/sec
    ECDSA-P384 signing

    🥇 aws-lc-rs

    16,682 sigs/sec

    🥈 graviola

    9,458.4 sigs/sec

    🥉 golang

    6,758.6 sigs/sec

    ring

    3,299 sigs/sec

    rustcrypto

    2,250.9 sigs/sec

    Signature verification

    RSA2048 signature verification

    🥇 graviola

    85,182 sigs/sec

    🥈 aws-lc-rs

    78,069 sigs/sec

    🥉 ring

    66,076 sigs/sec

    golang

    46,786 sigs/sec

    rustcrypto

    7,385.7 sigs/sec
    ECDSA-P256 signature verification

    🥇 aws-lc-rs

    27,338 sigs/sec

    🥈 graviola

    27,031 sigs/sec

    🥉 ring

    26,403 sigs/sec

    golang

    20,017 sigs/sec

    rustcrypto

    5,650.1 sigs/sec
    ECDSA-P384 signature verification

    🥇 aws-lc-rs

    7,104.4 sigs/sec

    🥈 graviola

    5,145.4 sigs/sec

    🥉 golang

    2,316 sigs/sec

    ring

    1,840.3 sigs/sec

    rustcrypto

    1,244.9 sigs/sec

    Key exchange

    X25519 key agreement

    🥇 graviola

    43,563 kx/sec

    🥈 aws-lc-rs

    43,465 kx/sec

    🥉 ring

    22,887 kx/sec

    dalek

    20,184 kx/sec

    golang

    14,762 kx/sec
    P256 key agreement

    🥇 aws-lc-rs

    25,872 kx/sec

    🥈 ring

    24,622 kx/sec

    🥉 graviola

    24,622 kx/sec

    golang

    21,198 kx/sec

    rustcrypto

    5,600.1 kx/sec
    P384 key agreement

    🥇 aws-lc-rs

    7,304.2 kx/sec

    🥈 graviola

    5,024.3 kx/sec

    🥉 golang

    2,519.5 kx/sec

    ring

    1,784.3 kx/sec

    rustcrypto

    1,244.4 kx/sec

    Bulk encryption

    AES256-GCM encryption (8KB wide) ⓘ

    🥇 aws-lc-rs

    10.3 GiB/sec
    ⓘ

    🥈 ring

    9.37 GiB/sec

    🥉 golang

    6.5 GiB/sec

    graviola

    5.25 GiB/sec

    rustcrypto

    1.84 GiB/sec

    Versions tested

  • aws-lc-rs version: aws-lc-rs 1.13.0, aws-lc-sys 0.28.2
  • dalek version: curve25519-dalek 4.1.3, x25519-dalek 2.0.1
  • golang version: go version go1.24.2 linux/amd64
  • graviola version: graviola 0.2.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