Pebble Coding

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

2019-02-01から1ヶ月間の記事一覧

rust croaring::Bitmap とは

rust のクレートの一つに croaring::Bitmap というものがある。 Bitmapとは、任意のサイズで1と0の値を持たせたデータ構造のことである。 例えば、u64 の型は 64のサイズのBitmap型であるといえるが、任意のサイズで使えるようにしたものがBitmapである。 こ…

rust の Hash,Hasher トレイト

swift には多数のprotocolが定義されており、これを理解し有効に活用することで、読みやすいコードを書くことができる。 rustにも同じように多数のtraitが定義されている。swiftに比べて、かなり多くのtraitが定義されているが、 マイナー言語ゆえに、日本語…

rust で 正の奇数を小さい方から返すイテレーター

rust で正の奇数を小さい方から返すイテレーターを作ります。 iterator トレイトの定義は以下の通りです。 trait Iterator { type Item; fn next(&mut self) -> Option<Self::Item>; } https://doc.rust-lang.org/std/iter/trait.Iterator.html ドキュメンテーションでは</self::item>…

grin の Proof Of Work で使われている Cuckoo Cycle / Cuckoo Hashing とは

Cuckoo Hashing とは、ハッシュテーブルの構造の一種である。 カッコウ(Cuckoo)には他の種類の鳥の巣に卵を置き、元々あったその鳥の卵は破棄するという習性があるが、 命名はそこから来ている。 まず、一般的なハッシュテーブルの作り方を考える。 8個の要…

ECDSA署名とECSchnorr署名の概略メモ

ECDSA署名とECSchnorr署名の概略メモです。 群や体の演算など、些細な部分は省略し、核となるロジックだけを記載しています。 楕円曲線上の点は大文字、スカラー値は小文字で表現します。 点Aのx,y座標はと表現します。 ECDSA署名 <共有情報> G:ベースポイン…

grin のトランザクションフローのメモ

こちらにgrinのトランザクションフローについての図が上がっていたので、テキストに落としておく。 まだソースを追っているところだったが、このフロー図で理解が進みやすくなる気がする。 この図はどこから入手したんだろ。 MimblewimbleとGrinのトランザク…

rust ?(question mark)演算子

rustでの?演算子はResultの処理を簡略化した機能を持つ。 戻り値としてResultを持つ関数内で利用することができ、 Resultを生成する式の後ろにつけることができる。 ?をつけた場合は式の結果がSuccessだった場合はその値をunwrapして処理を継続する。 Error…

grin の外部依存 crate

grin はかなりの数の外部 crate を利用しています。 セキュリティ上重要な部分は当然自前実装かつセキュリティ監査をしたらしいです。 rust は脆弱性が入り込みにくいとはいえ、何らかの不備が見つからないとも限らないので、まさに実験的プロジェクトです。…

rust の trait

rust の trait は大雑把に言って、swift の protocol に相当する。 以下サンプルを見てみよう。 fn main() { let mut bicycle = Bicycle { pos: 0 }; bicycle.forward(); } struct Bicycle { pub pos: i32 } trait Movable { fn forward(&mut self); } // Bi…

rust をios用にビルドする

ios の target を追加してからビルドします。 $ rustup target add x86_64-apple-ios $ cargo build --target x86_64-apple-ios cargo.toml [lib] name = "blake2rustios" crate-type = ["staticlib"] これでstatic libraryが生成されるようです。 他、細か…

secp256k1_zkpライブラリの関数

secp256k1_zkpライブラリの関数概要のメモです。 スカラー値は小文字、楕円曲線上の点は大文字で表現します。 未調査の部分は?としてあります。 /// seedを指定してハッシュ関数を通した点を返す // 同じseedを指定した場合、いつも同じ点が返されることが保…

secp256k1 ライブラリの関数

secp256k1のC89実装のライブラリの関数のメモです。 GitHub - bitcoin-core/secp256k1: Optimized C library for EC operations on curve secp256k1 秘密鍵はスカラー値であり、sと表現することにします。 sは1以上secp256k1の群位数N未満である必要がありま…

MimbleWimbleプロトコル情報リンク

MimbleWinbleペーパー 2016年 http://diyhpl.us/~bryan/papers2/bitcoin/mimblewimble.txt Block Stream社のAndrew Poelstra氏によるMimbleWimble解説の日本語訳 btcnews.jp GrinのMimbleWinble概要解説 grin/intro_JP.md at master · mimblewimble/grin · G…

macOS にrust(stable版, nightly版)をインストールする

現在の最新バージョンは1.32です。 stableな機能のみしか使わない場合は、brew でインストールしてもよいです。 $ brew install rust nightly の機能を使う場合は rustup を使います。 まずは、brew でインストールしたrustをアンインストールします。 $ bre…