2016-03-24 13 views
0

私は楕円曲線を離散logrithm問題を解くことを試みています。目標の楕円曲線は2進数のフィールドF2^113で定義されているので、私はプログラムで多量のEC_POINT_add演算を行う必要があります。残念ながら、EC_POINT_addは常に約7x(10^7)回のループの後に0を返し、プログラムを停止します。私のテストコードはここにありますが、なぜEC_POINT_addが常に0を返し、約7x(10^7)ループの後にプログラムが停止するのか、私は非常に混乱しています。私は本当にあなたの助けが必要です。なぜなら、この問題は一週間を私に混乱させたからです。ありがとうございました!openssl楕円曲線:EC_POINT_add戻り値のエラー

/*X1 is a elliptic point, Tx,Ty,BL,c1,d1,c[i],d[i] and R[i] are BIGNUM* */ 
while(1) { 

    if(1 != EC_POINT_get_affine_coordinates_GF2m(curve,X1,Tx,Ty,ctx)) return 0; 

    BN_mod(Tx,Tx,BL,ctx); 
    i = atoi(BN_bn2dec(Tx)); 

    if(1 != EC_POINT_add(curve,X1,X1,R[i],ctx)) { 
      printf("\nb\n"); 
      return 0; 
    } 

    BN_mod_add(c1,c1,c[i],order,ctx); 
    BN_mod_add(d1,d1,d[i],order,ctx); 

    k++; 
    printf("%d ",k); 
} 
+0

私はそれが流れの上にスタックかもしれないと思うが、私はそれに対処する方法を知らない。 – ybshen

答えて

0

最後に私のコードでデバッグを見つけたので、私は自分の質問に答えようとしています。私はすべての潜在的なエラーをテストし、最終的に関数 'BN_bn2dec()'の戻り文字列を 'OPENSSL_free()'で解放しなければならないことを発見しました。そうでなければ、約2 * 10^8回ループ。

BN_bn2hex() and BN_bn2dec() return printable strings containing the 
    hexadecimal and decimal encoding of a respectively. For negative 
    numbers, the string is prefaced with a leading '-'. The string must be 
    freed later using OPENSSL_free(). 

エラーを見つけるためにGDBデバッガを使用しました。 GDBは本当にコードをデバッグするのに便利なツールです。