我在OpenSSL BIGNUM中遇到了一些問題。我試圖實現一個基本的ElGamal協議。我遇到的問題是這些計算中的一部分沒有返回我期待的值!當我嘗試計算乘法逆時,這是最明顯的。使用OpenSSL BIGNUMs的數學:如何計算乘法逆?
例如:
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 ...:/
BN_exp()適用於正指數。 –