旧版本的OpenSSL中的cb_arg是什么意思?

时间:2017-08-01 08:32:00

标签: c openssl

我安装了过时的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中永远输入不正确的参数时,循环方法存在问题。这就是为什么我来这里问你是否理解功能签名,因为我在互联网上找不到任何指南。

1 个答案:

答案 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 pageRSA_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