Pebble Coding

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

ed25519をswiftで実装してみる

ed25519をswiftで実装してみます。

pythonのリファレンス実装

https://ed25519.cr.yp.to/software.html

をそのままswiftに置き換えただけのものです。
ソースはこちら。

github.com

swiftには標準ライブラリにBigInt実装がありませんので、pure swift で実装されたこちら

github.com

を使いました。
注意する点は、このBigIntライブラリは除算と余りの計算で負の値が指定された時の結果が、
Java系統の方式を採用しています。
整数論を使ったアルゴリズムを使う場合、python,ruby系統の値になってくれないと困るので、
そこだけ独自に実装しました。

swfit 負数の除法 - Pebble Coding

MacBook Pro 2017でベンチマークをとった結果は、以下のようになりました。

python swift4 (Release Build)
スカラー 1 sec 3 sec
秘密鍵から公開鍵生成、署名、署名確認 7 sec 33 sec

python実装に比べてもだいぶ遅いので実用では使えそうにないですね。
実は、Ed25519の実装には、まだ最適化の余地がありますが、かなり面倒なので、この記事はここまでとします。

余談ですが、テストする際はここをReleaseにビルドにしましょう。
デバッグビルドではめちゃくちゃ遅くなり、16分とかかかります。

f:id:pebble8888:20171008211732p:plain