diff options
Diffstat (limited to 'vendor/github.com/byzantine-lab/bls/ffi/cs/readme-ja.md')
-rw-r--r-- | vendor/github.com/byzantine-lab/bls/ffi/cs/readme-ja.md | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/vendor/github.com/byzantine-lab/bls/ffi/cs/readme-ja.md b/vendor/github.com/byzantine-lab/bls/ffi/cs/readme-ja.md new file mode 100644 index 000000000..199135725 --- /dev/null +++ b/vendor/github.com/byzantine-lab/bls/ffi/cs/readme-ja.md @@ -0,0 +1,188 @@ +# BLS署名のC#バインディング + +# 必要環境 + +* Visual Studio 2017(x64) or later +* C# 7.2 or later +* .NET Framework 4.5.2 or later + +# DLLのビルド方法 + +Visual Studio 2017の64bit用コマンドプロンプトを開いて +``` +md work +cd work +git clone https://github.com/herumi/cybozulib_ext +git clone https://github.com/herumi/mcl +git clone https://github.com/herumi/bls +cd bls +mklib dll +``` +`bls/bin/*.dll`が作成される。 + +# サンプルのビルド方法 + +bls/ffi/cs/bls.slnを開いて実行する。 + +* 注意 bls256.slnは古いため使わないでください。 + +# クラスとAPI + +## API + +* `Init(int curveType = BN254);` + * ライブラリを曲線curveTypeで初期化する。 + * curveType = BN254 or BLS12_381 +* `SecretKey ShareSecretKey(in SecretKey[] msk, in Id id);` + * マスター秘密鍵の列mskに対するidの秘密鍵を生成(共有)する。 +* `SecretKey RecoverSecretKey(in SecretKey[] secVec, in Id[] idVec);` + * 秘密鍵secVecとID idVecのペアから秘密鍵を復元する。 +* `PublicKey SharePublicKey(in PublicKey[] mpk, in Id id);` + * マスター公開鍵の列mpkに対するidの公開鍵を生成(共有)する。 +* `PublicKey RecoverPublicKey(in PublicKey[] pubVec, in Id[] idVec);` + * 公開鍵pubVecとID idVecのペアから公開鍵を復元する。 +* `Signature RecoverSign(in Signature[] sigVec, in Id[] idVec);` + * 署名sigVecとID idVecのペアから署名を復元する。 + +## Id + +識別子クラス + +* `byte[] Serialize();` + * Idをシリアライズする。 +* `void Deserialize(byte[] buf);` + * バイト列bufからIdをデシリアライズする。 +* `bool IsEqual(in Id rhs);` + * 同値判定。 +* `void SetDecStr(string s);` + * 10進数文字列を設定する。 +* `void SetHexStr(string s);` + * 16進数文字列を設定する。 +* `void SetInt(int x);` + * 整数xを設定する。 +* `string GetDecStr();` + * 10進数表記を取得する。 +* `string GetHexStr();` + * 16進数表記を取得する。 + +## SecretKey + +* `byte[] Serialize();` + * Idをシリアライズする。 +* `void Deserialize(byte[] buf);` + * バイト列bufからSecretKeyをデシリアライズする。 +* `bool IsEqual(in SecretKey rhs);` + * 同値判定。 +* `void SetHexStr(string s);` + * 16進数文字列を設定する。 +* `string GetHexStr();` + * 16進数表記を取得する。 +* `void Add(in SecretKey rhs);` + * 秘密鍵rhsを加算する。 +* `void SetByCSPRNG();` + * 暗号学的乱数で設定する。 +* `void SetHashOf(string s);` + * 文字列sのハッシュ値を設定する。 +* `PublicKey GetPublicKey();` + * 対応する公開鍵を取得する。 +* `Signature Sign(string m);` + * 文字列mの署名を生成する。 +* `Signature GetPop();` + * 自身の秘密鍵による署名(Proof Of Posession)を生成する。 + +## PublicKey + +* `byte[] Serialize();` + * PublicKeyをシリアライズする。 +* `void Deserialize(byte[] buf);` + * バイト列bufからPublicKeyをデシリアライズする。 +* `bool IsEqual(in PublicKey rhs);` + * 同値判定。 +* `void Add(in PublicKey rhs);` + * 公開鍵rhsを加算する。 +* `void SetHexStr(string s);` + * 16進数文字列を設定する。 +* `string GetHexStr();` + * 16進数表記を取得する。 +* `bool Verify(in Signature sig, string m);` + * 文字列mに対する署名sigの正当性を確認する。 +* `bool VerifyPop(in Signature pop);` + * PoPの正当性を確認する。 + +## Signature + +* `byte[] Serialize();` + * Signatureをシリアライズする。 +* `void Deserialize(byte[] buf);` + * バイト列bufからSignatureをデシリアライズする。 +* `bool IsEqual(in Signature rhs);` + * 同値判定。 +* `void Add(in Signature rhs);` + * 署名rhsを加算する。 +* `void SetHexStr(string s);` + * 16進数文字列を設定する。 +* `string GetHexStr();` + * 16進数表記を取得する。 + +## 使い方 + +### 最小サンプル + +``` +using static BLS; + +Init(BN254); // ライブラリ初期化 +SecretKey sec; +sec.SetByCSPRNG(); // 秘密鍵の初期化 +PublicKey pub = sec.GetPublicKey(); // 公開鍵の取得 +string m = "abc"; +Signature sig = sec.Sign(m); // 署名の作成 +if (pub.Verify(sig, m))) { + // 署名の確認 +} +``` + +### 集約署名 +``` +Init(BN254); // ライブラリ初期化 +const int n = 10; +const string m = "abc"; +SecretKey[] secVec = new SecretKey[n]; +PublicKey[] pubVec = new PublicKey[n]; +Signature[] popVec = new Signature[n]; +Signature[] sigVec = new Signature[n]; + +for (int i = 0; i < n; i++) { + secVec[i].SetByCSPRNG(); // 秘密鍵の初期化 + pubVec[i] = secVec[i].GetPublicKey(); // 公開鍵の取得 + popVec[i] = secVec[i].GetPop(); // 所有(PoP)の証明 + sigVec[i] = secVec[i].Sign(m); // 署名 +} + +SecretKey secAgg; +PublicKey pubAgg; +Signature sigAgg; +for (int i = 0; i < n; i++) { + // PoPの確認 + if (pubVec[i].VerifyPop(popVec[i]))) { + // エラー + return; + } + pubAgg.Add(pubVec[i]); // 公開鍵の集約 + sigAgg.Add(sigVec[i]); // 署名の集約 +} +if (pubAgg.Verify(sigAgg, m)) { + // 署名の確認 +} +``` + +# ライセンス + +modified new BSD License +http://opensource.org/licenses/BSD-3-Clause + +# 著者 + +(C)2019 光成滋生 MITSUNARI Shigeo(herumi@nifty.com) All rights reserved. +本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、 +サービスなどはそれぞれ、各権利保有者に帰属します |