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

🥈 ring

2,105.8 sigs/sec

🥉 graviola

1,394.2 sigs/sec

golang

1,250.8 sigs/sec

rustcrypto

970.66 sigs/sec
ECDSA-P256 signing

🥇 graviola

88,665 sigs/sec

🥈 ring

67,939 sigs/sec

🥉 aws-lc-rs

64,715 sigs/sec

golang

60,121 sigs/sec

rustcrypto

7,793 sigs/sec
ECDSA-P384 signing

🥇 aws-lc-rs

14,900 sigs/sec

🥈 graviola

9,005.9 sigs/sec

🥉 golang

7,192.5 sigs/sec

ring

3,432.2 sigs/sec

rustcrypto

2,328.3 sigs/sec

Signature verification

RSA2048 signature verification

🥇 aws-lc-rs

68,827 sigs/sec

🥈 ring

59,132 sigs/sec

🥉 graviola

50,506 sigs/sec

golang

39,064 sigs/sec

rustcrypto

7,895.8 sigs/sec
ECDSA-P256 signature verification

🥇 graviola

27,172 sigs/sec

🥈 aws-lc-rs

25,691 sigs/sec

🥉 ring

23,796 sigs/sec

golang

19,410 sigs/sec

rustcrypto

4,769.9 sigs/sec
ECDSA-P384 signature verification

🥇 aws-lc-rs

6,036.3 sigs/sec

🥈 graviola

5,018 sigs/sec

🥉 golang

2,320.3 sigs/sec

ring

1,918.7 sigs/sec

rustcrypto

1,204.4 sigs/sec

Key exchange

X25519 key agreement

🥇 graviola

43,851 kx/sec

🥈 aws-lc-rs

43,685 kx/sec

🥉 ring

27,043 kx/sec

dalek

24,602 kx/sec

golang

13,375 kx/sec
P256 key agreement

🥇 graviola

23,961 kx/sec

🥈 ring

21,720 kx/sec

🥉 aws-lc-rs

21,394 kx/sec

golang

20,282 kx/sec

rustcrypto

4,736.5 kx/sec
P384 key agreement

🥇 aws-lc-rs

5,156 kx/sec

🥈 graviola

4,719.4 kx/sec

🥉 golang

2,483.2 kx/sec

ring

1,852.2 kx/sec

rustcrypto

1,261.9 kx/sec

Bulk encryption

AES256-GCM encryption (8KB wide)

🥇 aws-lc-rs

6.52 GiB/sec

🥈 golang

5.9 GiB/sec

🥉 graviola

5.51 GiB/sec

ring

5.45 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.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
  • x86_64

    Signing

    RSA2048 signing ⓘ

    🥇 aws-lc-rs

    5,377.8 sigs/sec

    🥈 ring

    2,446.5 sigs/sec

    🥉 graviola

    2,337.8 sigs/sec

    golang

    1,358.4 sigs/sec

    rustcrypto

    884.28 sigs/sec
    ECDSA-P256 signing

    🥇 graviola

    91,486 sigs/sec

    🥈 ring

    81,536 sigs/sec

    🥉 aws-lc-rs

    78,292 sigs/sec

    golang

    60,809 sigs/sec

    rustcrypto

    8,607.2 sigs/sec
    ECDSA-P384 signing

    🥇 aws-lc-rs

    15,718 sigs/sec

    🥈 graviola

    9,153.4 sigs/sec

    🥉 golang

    6,798 sigs/sec

    ring

    3,297.5 sigs/sec

    rustcrypto

    2,172 sigs/sec

    Signature verification

    RSA2048 signature verification

    🥇 graviola

    85,558 sigs/sec

    🥈 aws-lc-rs

    78,476 sigs/sec

    🥉 ring

    66,471 sigs/sec

    golang

    46,486 sigs/sec

    rustcrypto

    7,309.8 sigs/sec
    ECDSA-P256 signature verification

    🥇 aws-lc-rs

    27,097 sigs/sec

    🥈 graviola

    26,665 sigs/sec

    🥉 ring

    26,265 sigs/sec

    golang

    19,334 sigs/sec

    rustcrypto

    5,022.9 sigs/sec
    ECDSA-P384 signature verification

    🥇 aws-lc-rs

    6,222.8 sigs/sec

    🥈 graviola

    5,105.7 sigs/sec

    🥉 golang

    2,261.3 sigs/sec

    ring

    1,837.5 sigs/sec

    rustcrypto

    1,221.6 sigs/sec

    Key exchange

    X25519 key agreement

    🥇 graviola

    43,467 kx/sec

    🥈 aws-lc-rs

    42,964 kx/sec

    🥉 ring

    20,609 kx/sec

    dalek

    20,142 kx/sec

    golang

    14,267 kx/sec
    P256 key agreement

    🥇 ring

    24,181 kx/sec

    🥈 graviola

    24,085 kx/sec

    🥉 aws-lc-rs

    23,649 kx/sec

    golang

    20,698 kx/sec

    rustcrypto

    4,923.4 kx/sec
    P384 key agreement

    🥇 aws-lc-rs

    5,449.2 kx/sec

    🥈 graviola

    5,011.8 kx/sec

    🥉 golang

    2,438 kx/sec

    ring

    1,809.8 kx/sec

    rustcrypto

    1,217.5 kx/sec

    Bulk encryption

    AES256-GCM encryption (8KB wide) ⓘ

    🥇 aws-lc-rs

    10 GiB/sec

    🥈 golang

    6.22 GiB/sec

    🥉 graviola

    5.25 GiB/sec

    ring

    5.22 GiB/sec

    rustcrypto

    1.8 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.2.0-alpha.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