2018/01/18

ECDSAの署名+αから公開鍵を算出したい (8)

このシリーズも、早8回目。
すぐにあきらめて終わるだろうと思ったのだが、意外と粘り強いようだ。
粘り強いというか、粘着質というか・・・。


Bitcoinなどで使っている楕円曲線暗号の計算は、楕円曲線のグラフそのままではなく、剰余で範囲を制限した値空間になるということと、その空間ではX座標に対してY座標が正負にあるのではなく、なんだかわからないが偶数/奇数になる、ということが前回分かった。

分かったというか、分からないところも多かったので、そのまま受け入れたというところだ。


では、前回0x02と0x03が逆になったのは、それに関して何か間違っていたのではないかと思うだろう。
よって、今回はY座標の値も見てみた。

・・・偶数/奇数と0x02/0x03の関係は間違っていない。
よく考えたら、非圧縮公開鍵を圧縮公開鍵に変換するのはAPIを使っているから、そこは間違えないのだった。


なのに。。。なぜ。。。


移植元になったjavascriptのライブラリを動かしてみようとしたのだが、さっっっぱりわからん。
動かないということはわかったのだけど、何をして良いのかわからんのだ。


https://stackoverflow.com/questions/28400459/referenceerror-describe-is-not-defined-nodejs
ここにならって、npmでmochaをインストールし、`mocha` とやってみたのだが無いと怒られたので、sudo apt install npmでインストール。。。しようとしたら、404 Not Foundでインストールできず。

たいがいにしとけや、きさーん!と思ったが、こちらにもインストールの方法が載っていた。
https://qiita.com/TsutomuNakamura/items/0eb50bf7622a3906e101

npmにsudoして、-gもやってやらんといかんのか。
このディレクトリだけ動けばいいから-gをつけてないのがいかんかったか。。

そして、一番上のディレクトリで「mocha」を実行すると、何か進んだ。
よかったよかった。


。。。よくない。
ソースはいじってないのに、見たいところがピンポイントでエラーになっているではないか。

1) ecdsa
      recoverPubKey
        throws on Invalid i value (> 3) (Expected UInt2, got Number 4):
    Error: Expected property "2" of type UInt2, got Number 4
     at tfSubError (node_modules/typeforce/errors.js:93:9)
     at node_modules/typeforce/index.js:159:17
     at Array.every (<anonymous>)
     at _tuple (node_modules/typeforce/index.js:155:20)
     at typeforce (node_modules/typeforce/index.js:196:9)
     at Object.recoverPubKey (src/ecdsa.js:166:3)
     at test/ecdsa.js:129:17
     at tryBlock (assert.js:619:5)
     at innerThrows (assert.js:638:18)
     at Function.throws (assert.js:662:3)
     at Context.<anonymous> (test/ecdsa.js:128:16)

UInt2を期待したけど4が来た?
うーん、UInt2って書いてあると、0~65535までOKのような気がしたが、javascriptは違うんだろうか。
2がbitの2だったら、0~3というのは納得できるが、そもそもこのtestをがんばって意味があるのか。。。

最新版のbitcoinjs-libだったら、書いてあるとおりにやればよいのかもしれんが、recovery pubkeyがあるのは古いバージョンだけなのだ。


残念だが、思考が定まらんし、今回はここまでだ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。