OpenSSLBIGNUMで問題が発生しています。基本的なElGamalプロトコルを実装しようとしています。私が抱えている問題は、これらの計算のいくつかが私が期待している値を返さないことです!これは、乗法逆数を計算しようとするとほとんど明らかです。
例えば:
static void roughExample() {
BIGNUM *u1 = BN_new();
BIGNUM *u2 = BN_new();
BIGNUM *one = BN_new();
BN_one(one);
BIGNUM *negOne = BN_new();
BN_zero(negOne);
BN_sub(negOne, negOne, one); // So negOne should = -1 and it does
BN_print_fp(stdout, negOne); //shows -1 here
BN_rand_range(u1, q); // q = large prime, point being that u1 = random large num
BN_print_fp(stdout, u1);
BN_exp(u2, u1, negOne, ctx);
BN_print_fp(stdout, u2); // in the output, u1 = u2.
}
上記の出力は、-1、[大素数]、[まったく同じ大素数]として出力されます。
したがって、明らかにBN_expは、私が期待していることを実行していません。この場合、BN_divを使用して1 / xを実行できると思いますが、欠落しているより大きな画像があるかどうか疑問に思っています。私はこのような計算をたくさん行っていますが、値が予想どおりに変更されたことを常に視覚的に確認できるとは限りません。
誰か助けてもらえますか?前もって感謝します!
編集:1 / xを使用してみましたが、値は0になります...:/