aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/byzantine-lab/bls/ffi/cs/readme-ja.md
diff options
context:
space:
mode:
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.md188
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.
+本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、
+サービスなどはそれぞれ、各権利保有者に帰属します