◇ feとuint256

楕円曲線暗号を把握するにはsecp256k1ライブラリの基本型となるfeをおさえましょう。feを組み合わせて例えば楕円の線分上にfeが存在するのか否かの基本的な処理や 各変換処理が実装されておりました。

ということでfeを処理するためのuint256のサンプルからみていきます。ところで以下のサンプルコード。何の変哲もないuint256の処理になっているとみせかけて一か所feの力がないと処理できないものが含まれております。それは……積の演算です。uint256ライブラリに積の演算は含まれておりません。加法と減法のみです。よってfeの力をお借りします。

◇ サンプルコード

uint256 hash = 0;
hash += uint256(12345678); // 和です。
hash += uint256("0x00002046b1c7938971a6089c7105fc15907b8f27ac8dfea9896c27c593a9a966");

uint256 u1("0x1234567");
u1 *= hash; // 積です。
::fprintf(stdout, "uint256 mul 0x%s\n", u1.ToString().c_str());