Elgamal BN_exp() 操作卡住
Elgamal BN_exp() operation get stuck
我正在尝试实施 Elgamal 操作。常见的第一个是两个 BIGNUM 之间的乘法。第二个是两个 BIGNUM 的幂(例如 h:=g^x, c_1:=g^y
)。当我执行 BN_exp()
时,C 程序卡住了。为什么?此外,有什么解决问题的建议吗?
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <openssl/obj_mac.h>
#include <openssl/ec.h>
#include <openssl/rand.h>
#include <openssl/bn.h>
int main(int argc, char *argv[])
{
BN_CTX *ctx;
BIGNUM *bn1 = BN_new();
BIGNUM *bn2 = BN_new();
BIGNUM *result = BN_new();
BIGNUM *r = BN_new();
BN_CTX *bn_ctx = BN_CTX_new();
static const char rnd_seed[] = "string to make the random number generator think it has entropy";
RAND_seed(rnd_seed, sizeof rnd_seed); /* or BN_generate_prime_ex may fail */
BN_generate_prime_ex(r, 1024, 0, NULL, NULL, NULL);
BN_rand_range(bn1, r);
BN_rand_range(bn2, r);
BN_mul(result, bn2, bn1, bn_ctx);
BN_exp(result, bn2, bn1, bn_ctx); // here get stuck!
return 0;
}
正如@Topaco 在评论中建议的那样,ElGamal 需要(性能更好的)模运算,即 BN_mod_mul()、BN_mod_exp() 和 BN_mod_inverse()。
我正在尝试实施 Elgamal 操作。常见的第一个是两个 BIGNUM 之间的乘法。第二个是两个 BIGNUM 的幂(例如 h:=g^x, c_1:=g^y
)。当我执行 BN_exp()
时,C 程序卡住了。为什么?此外,有什么解决问题的建议吗?
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <openssl/obj_mac.h>
#include <openssl/ec.h>
#include <openssl/rand.h>
#include <openssl/bn.h>
int main(int argc, char *argv[])
{
BN_CTX *ctx;
BIGNUM *bn1 = BN_new();
BIGNUM *bn2 = BN_new();
BIGNUM *result = BN_new();
BIGNUM *r = BN_new();
BN_CTX *bn_ctx = BN_CTX_new();
static const char rnd_seed[] = "string to make the random number generator think it has entropy";
RAND_seed(rnd_seed, sizeof rnd_seed); /* or BN_generate_prime_ex may fail */
BN_generate_prime_ex(r, 1024, 0, NULL, NULL, NULL);
BN_rand_range(bn1, r);
BN_rand_range(bn2, r);
BN_mul(result, bn2, bn1, bn_ctx);
BN_exp(result, bn2, bn1, bn_ctx); // here get stuck!
return 0;
}
正如@Topaco 在评论中建议的那样,ElGamal 需要(性能更好的)模运算,即 BN_mod_mul()、BN_mod_exp() 和 BN_mod_inverse()。