【发布时间】:2017-02-13 13:16:35
【问题描述】:
我正在尝试在 OpenSSL 中使用 BIGNUM 工具。我编写了以下测试程序:
BIGNUM someSSLInt;
BN_init(&someSSLInt);
BN_set_word(&someSSLInt, 10);
for (unsigned i=0; i<100000; i++) {
BN_mul_word(&someSSLInt, 100)
}
char *sslstr=BN_bn2dec(&someSSLInt);
printf("%s",sslstr);
不幸的是,我得到一个“只有”大约 3000 个零的 1,而我希望得到一个带有 200001 个零的 1。如果我将相同的代码与其他库(例如 GMP 或 Tommath)进行比较,我确实得到了预期的输出。我是否以错误的方式使用 OpenSSL?
我在 macOS 上使用的是 1.0.2g 版本。
【问题讨论】:
-
我认为您需要致电
BN_new:“[BN's] 使用动态内存分配来存储其数据结构...”。所以也许像BIGNUM* someSSLInt = BN_new();这样的东西。你也可以考虑检查BN_mul_word的返回值:"... 这些函数操作的数字的大小没有限制,但必须始终检查返回值,以防发生内存分配错误". -
我更改了代码以使用'new'函数,但'init'对于堆栈变量应该足够了。输出是相同的。我还添加了对“mul”函数的检查,但它没有返回错误。
标签: openssl