ed25519をswiftで実装してみます。
pythonのリファレンス実装
https://ed25519.cr.yp.to/software.html
をそのままswiftに置き換えただけのものです。
ソースはこちら。
swiftには標準ライブラリにBigInt実装がありませんので、pure swift で実装されたこちら
を使いました。
注意する点は、このBigIntライブラリは除算と余りの計算で負の値が指定された時の結果が、
Java系統の方式を採用しています。
整数論を使ったアルゴリズムを使う場合、python,ruby系統の値になってくれないと困るので、
そこだけ独自に実装しました。
MacBook Pro 2017でベンチマークをとった結果は、以下のようになりました。
python | swift4 (Release Build) | |
---|---|---|
スカラー倍 | 1 sec | 3 sec |
秘密鍵から公開鍵生成、署名、署名確認 | 7 sec | 33 sec |
python実装に比べてもだいぶ遅いので実用では使えそうにないですね。
実は、Ed25519の実装には、まだ最適化の余地がありますが、かなり面倒なので、この記事はここまでとします。
余談ですが、テストする際はここをReleaseにビルドにしましょう。
デバッグビルドではめちゃくちゃ遅くなり、16分とかかかります。