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

🥇 ring

2,043.4 sigs/sec

🥈 graviola

1,351.5 sigs/sec

🥉 aws-lc-rs

1,264.6 sigs/sec

golang

1,250.8 sigs/sec

rustcrypto

968.32 sigs/sec
ECDSA-P256 signing

🥇 graviola

86,755 sigs/sec

🥈 ring

65,851 sigs/sec

🥉 aws-lc-rs

63,079 sigs/sec

golang

60,121 sigs/sec

rustcrypto

7,543 sigs/sec
ECDSA-P384 signing

🥇 aws-lc-rs

13,431 sigs/sec

🥈 graviola

8,748 sigs/sec

🥉 golang

7,192.5 sigs/sec

ring

3,411.5 sigs/sec

rustcrypto

2,255 sigs/sec

Signature verification

RSA2048 signature verification

🥇 ring

57,438 sigs/sec

🥈 graviola

49,038 sigs/sec

🥉 aws-lc-rs

43,796 sigs/sec

golang

39,064 sigs/sec

rustcrypto

7,858.5 sigs/sec
ECDSA-P256 signature verification

🥇 aws-lc-rs

24,948 sigs/sec

🥈 graviola

24,706 sigs/sec

🥉 ring

23,104 sigs/sec

golang

19,410 sigs/sec

rustcrypto

4,633.8 sigs/sec
ECDSA-P384 signature verification

🥇 aws-lc-rs

5,243.1 sigs/sec

🥈 graviola

4,742.3 sigs/sec

🥉 golang

2,320.3 sigs/sec

ring

1,904.7 sigs/sec

rustcrypto

1,224.2 sigs/sec

Key exchange

X25519 key agreement

🥇 graviola

42,655 kx/sec

🥈 aws-lc-rs

34,135 kx/sec

🥉 ring

26,096 kx/sec

dalek

23,873 kx/sec

golang

13,375 kx/sec
P256 key agreement

🥇 graviola

23,232 kx/sec

🥈 ring

21,096 kx/sec

🥉 aws-lc-rs

20,796 kx/sec

golang

20,282 kx/sec

rustcrypto

4,603.5 kx/sec
P384 key agreement

🥇 graviola

4,481.5 kx/sec

🥈 aws-lc-rs

4,460.2 kx/sec

🥉 golang

2,483.2 kx/sec

ring

1,846.8 kx/sec

rustcrypto

1,222.5 kx/sec

Bulk encryption

AES256-GCM encryption (8KB wide)

🥇 golang

5.9 GiB/sec

🥈 aws-lc-rs

5.44 GiB/sec

🥉 ring

5.42 GiB/sec

graviola

5.23 GiB/sec

rustcrypto

0.13 GiB/sec

x86_64

Signing

RSA2048 signing

🥇 ring

2,381.7 sigs/sec

🥈 aws-lc-rs

2,304.5 sigs/sec

🥉 graviola

2,253.9 sigs/sec

golang

1,358.4 sigs/sec

rustcrypto

879.9 sigs/sec
ECDSA-P256 signing

🥇 graviola

91,276 sigs/sec

🥈 ring

78,830 sigs/sec

🥉 aws-lc-rs

77,304 sigs/sec

golang

60,809 sigs/sec

rustcrypto

8,361.7 sigs/sec
ECDSA-P384 signing

🥇 aws-lc-rs

15,382 sigs/sec

🥈 graviola

9,145 sigs/sec

🥉 golang

6,798 sigs/sec

ring

3,146.7 sigs/sec

rustcrypto

2,137.1 sigs/sec

Signature verification

RSA2048 signature verification

🥇 graviola

83,041 sigs/sec

🥈 aws-lc-rs

77,596 sigs/sec

🥉 ring

65,362 sigs/sec

golang

46,486 sigs/sec

rustcrypto

7,294.4 sigs/sec
ECDSA-P256 signature verification

🥇 aws-lc-rs

26,696 sigs/sec

🥈 ring

26,114 sigs/sec

🥉 graviola

24,795 sigs/sec

golang

19,334 sigs/sec

rustcrypto

4,844.6 sigs/sec
ECDSA-P384 signature verification

🥇 aws-lc-rs

6,234.9 sigs/sec

🥈 graviola

5,049.5 sigs/sec

🥉 golang

2,261.3 sigs/sec

ring

1,749.4 sigs/sec

rustcrypto

1,206.4 sigs/sec

Key exchange

X25519 key agreement

🥇 aws-lc-rs

42,978 kx/sec

🥈 graviola

42,462 kx/sec

🥉 dalek

20,200 kx/sec

ring

20,040 kx/sec

golang

14,267 kx/sec
P256 key agreement

🥇 ring

23,935 kx/sec

🥈 aws-lc-rs

23,529 kx/sec

🥉 graviola

23,441 kx/sec

golang

20,698 kx/sec

rustcrypto

4,870.6 kx/sec
P384 key agreement

🥇 aws-lc-rs

5,255 kx/sec

🥈 graviola

4,820.1 kx/sec

🥉 golang

2,438 kx/sec

ring

1,731.5 kx/sec

rustcrypto

1,164.5 kx/sec

Bulk encryption

AES256-GCM encryption (8KB wide) ⓘ

🥇 aws-lc-rs

9.78 GiB/sec

🥈 golang

6.22 GiB/sec

🥉 graviola

5 GiB/sec

ring

4.91 GiB/sec

rustcrypto

1.78 GiB/sec

Full reports