Pebble Coding

ソフトウェアエンジニアによるIT関連技術の備忘録

go言語実装のed25519のベンチマークを測定してみる

go言語によるed25519実装は2種類あるようですが、こちらにあるもので調べてみました。

GitHub - Bytom/bytom: Official Go implementation of the Bytom protocol

go言語では単体テストにベンチマーク機能が組み込まれており、簡単にベンチマークが取れるようになっています。 ed25519実装の単体テストにもベンチマーク機能が組み込まれているので、それを使って測定してみました。

~/go/src/github.com/bytom/crypto/ed25519

私の環境では上記の場所にソースがクローンされているので、そのフォルダに移動してから以下のコマンドを実行します。

$ go test -bench .
goos: darwin
goarch: amd64
pkg: github.com/bytom/crypto/ed25519
BenchmarkKeyGeneration-4       30000         51601 ns/op
BenchmarkSigning-4             30000         52517 ns/op
BenchmarkVerification-4        10000        139791 ns/op
PASS
ok      github.com/bytom/crypto/ed25519 5.633s

マシンスペックは以下です。
On MacBook Pro 2017 2.3Ghz Intel Core i5

キーペア生成が1メッセージあたり51usec(マイクロ秒)
ベリファイが1メッセージあたり139usec(マイクロ秒)

GitHub - orlp/ed25519: Portable C implementation of Ed25519, a high-speed high-security public-key signature system.

こちらによると、マシンスペックが違いますが、C++版が、

キーペア生成 88us
ベリファイ 228us
なので、同等のパフォーマンスがでているといってよさそうです。