1

PBC ライブラリを使用するこのコードがあります。

element_t pk, pk_temp;

element_init_G2(pk, pairing);
element_init_G2(pk_temp, pairing);
element_init_Zr(ci, pairing);

element_pow_zn(pk_temp, pk_temp, ci);
element_set1(pk);
element_add(pk, pk, pk);

element_mul_zn(pk, pk, pk_temp);

このプログラムを実行すると (ci は以前の計算の値を持っています)、これは私が得る出力です:

pk_temp
[116278406325033872100813200201193617766578695181932793603160637278854742066192092884782310233584512588249536578523628847229234460071209045611450183651531, 2021454548422679707182594138446448992982063147118097540714810473185383559710078393323207940613550542761869670939719707936590719813436809712827363459486303]
ci
557018308384393102708847545615423648196401851115

After pk_temp^ci
pk_temp
[108256843552655255908398113161102639677286937761571877242159361199581616450078081163742350174144405610156719380747507503987165257266343606269839543701390, 315460454942637140235438889718432767280220200962474346118962958364243678526968323118117335000004382683381426774251553048778733132443252812268528626451784]

After pk = pk + pk
pk
0

After pk = pk * pk_temp
pk
O

UPDATE pk が Zr の要素として初期化されている場合、加算は機能します。

4

3 に答える 3

3
element_mul_zn(pk, pk, pk_temp);

しかし実際には、pk_temp は Zn ではなく G2 にあります。

include/pbc_field.h の定義を参照してください。

static inline void element_mul_zn(element_t c, element_t a, element_t z) {
  mpz_t z0; 
  PBC_ASSERT_MATCH2(c, a); 
  //TODO: check z->field is Zn
  mpz_init(z0);
  element_to_mpz(z0, z); 
  element_mul_mpz(c, a, z0);
  mpz_clear(z0);
} 

コードは であるかどうかをチェックせずz->fieldZnに変換するだけG2ですmpzG2に変換したい場合は意味がなくmpzelement_to_mpz単に 0 になります。

于 2013-03-08T05:36:31.003 に答える
1

どのタイプのペアリングを使用しているかわかりませんが、タイプ A のペアリングを使用していると思います。関数

element_set1(pk);

pk は G2 の要素であるため、pk を無限大の点Oに設定します。したがって、結果は次のようになります

element_set1(pk);
pk = O

After pk=pk+pk
pk = O

After pk = pk * pk_temp
pk
O

pk*pk_temp の結果はOです。これは、すべてのスカラー数 c について O = c * Oであるためです。

于 2013-03-08T03:48:42.770 に答える
0

通常、ここではコード レビューに関する質問は受け付けていません。おそらく(暗号ではなく)stackexchangeの方が良いでしょう。

一方、私はあなたがそうしていることに気づきました:

element_set1(pk);

それはpkを1に設定しますか?もしそうなら、pk を自分自身に追加した後に pk が 2 に設定されるのはなぜ驚くのでしょうか?

于 2013-03-07T15:37:10.427 に答える