2017-08-01 62 views
1

我安装了古老的OpenSSL_0_9_6-beta3版本的OpenSSL。该功能RSA_generate_key在那里定义如下:旧版本的OpenSSL中的cb_arg是什么意思?

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

旧版本的OpenSSL中的cb_arg是什么意思?
RSA_generate_key(INT位,无符号长即空隙(*回调)(INT,INT,无效*),无效* cb_arg)

它的一个回调函数。它允许您在RSA密钥生成期间实施进度栏,因为操作可能需要很长时间。

RSA_generate_key已弃用。您应该使用RSA_generate_key_ex

另请参阅堆栈溢出How to generate RSA private key using openssl?RSA_generate_key man pageRSA_generate_key_ex man page


Conditional jump or move depends on uninitialized value(s) 

您应提供调查结果的情况下。此外,请务必使用-O1编译OpenSSL和您的程序。如果优化过高,Valgrind会产生误报。另见The Valgrind Quick Start Guide

+0

-O1没有变化。我被告知可能会有一个问题,不播种随机数发生器。 – SlowerPhoton

+0

@SlowerPhoton - 你是否也重新编译过OpenSSL?如果你从发行版中获得它,那么它在'-O3'编译。 – jww