我安装了过时的OpenSSL_0_9_6-beta3
版本的OpenSSL。函数RSA_generate_key
的定义如下:
RSA * RSA_generate_key(int bits, unsigned long e,void (*callback)(int,int,void *),void *cb_arg)
这是我的测试代码:
#include <openssl/rsa.h>
int main(){
unsigned long e = RSA_F4;
RSA *r = RSA_generate_key(512, e, NULL, NULL);
const BIGNUM *n = r->n;
BN_print_fp(stdout, n);
RSA_free(r);
return 0;
}
当我运行它时,它会永远循环。在Valgrind下运行时,我可以看到原因:
Conditional jump or move depends on uninitialized value(s)
我想这是因为我不明白函数签名的真正含义是什么,我将不正确的参数传递给它 - 在OpenSSL中永远输入不正确的参数时,循环方法存在问题。这就是为什么我来这里问你是否理解功能签名,因为我在互联网上找不到任何指南。
答案 0 :(得分:1)
旧版本的OpenSSL中的cb_arg是什么意思?
RSA_generate_key(int bits,unsigned long e,void(* callback)(int,int,void *),void * cb_arg)
它是一个函数回调。它允许您在RSA密钥生成期间实现进度条,因为操作可能需要很长时间。
https://www.googleapis.com/auth/plus.me
已弃用。您应该使用RSA_generate_key
代替。
另请参阅Stack Overflow上的How to generate RSA private key using openssl?,RSA_generate_key
man page和RSA_generate_key_ex
man page。
RSA_generate_key_ex
您应该提供发现的背景。另外,请务必使用Conditional jump or move depends on uninitialized value(s)
编译OpenSSL和您的程序。如果优化过高,那么Valgrind会产生误报。另请参阅The Valgrind Quick Start Guide。