2017-08-01 60 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