我希望在使用EC密鑰簽署數據期間提供OpenSSL特定數據以用作隨機種子。我正在做這個比較我的應用程序與另一個參考(閉源)。該實用程序將該文件與私鑰相關聯,將文件與數據一起簽名,並將隨機數據作爲參數進行歸檔。如何提供用於ECDSA簽名的OpenSSL隨機數據?
我已經有EC密鑰的生成和數據簽名,但無法比較兩個應用,因爲我沒有共同點。 OpenSSL生成用於簽署數據的隨機數據(可能來自/ dev/random),因此每次運行都會給我一個不同的簽名。
我試過RAND_clear()
結合RAND_add()
,但不斷變化的簽名。要麼我不理解整個ECDSA概念,要麼我做錯了什麼。
我比較應用程序的第二個選項是導入公鑰並驗證引用程序生成的簽名。這是更好的選擇,但我無法導入給定的示例公鑰(83個字符的十六進制字符串)。 EC_POINT_oct2point()
不斷給我空結果。
任何幫助/指針/引用將不勝感激。
char * key_as_binary_data; //369368AF243193D001E39CE76BB1D5DA08A9BC0A63307AB352338E5EA5C0E05A0C2531866F3E3C2702
int data_size; //Size of the key buffer
EC_POINT * ecpoint = NULL;
EC_GROUP * ecgroup = NULL;
EC_KEY * eckey = NULL;
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
int asn1_flag = OPENSSL_EC_NAMED_CURVE;
eckey = EC_KEY_new();
ecpoint = EC_POINT_new(ecgroup);
ecgroup = EC_GROUP_new_by_curve_name(OBJ_sn2nid("sect163k1"));
EC_GROUP_set_asn1_flag(ecgroup, asn1_flag);
EC_GROUP_set_point_conversion_form(ecgroup, form);
EC_KEY_set_group(eckey,ecgroup);
EC_KEY_generate_key(eckey);
//This gives me a null ecpoint
EC_POINT_oct2point(ecgroup,ecpoint,key_as_binary_data,data_size-1,ctx);
EC_KEY_set_public_key(eckey,ecpoint);
如果你想與EC_POINT_oct2point()的幫助,你應該告訴我們你是如何調用它。 – caf 2009-07-23 12:19:52