我安裝了古老的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中提供不正確的參數。這就是爲什麼我來這裏問你是否理解函數簽名,因爲我在互聯網上找不到任何指南。
-O1沒有變化。我被告知可能會有一個問題,不播種隨機數發生器。 – SlowerPhoton
@SlowerPhoton - 你是否也重新編譯過OpenSSL?如果你從發行版中獲得它,那麼它在'-O3'編譯。 – jww