我想生成许多ec密钥对。稍微加快了速度,我改写了我的建议书以使用多个线程来完成这项工作。这是每个线程想要生成密钥的方式的代码片段:
(...)
EC_KEY* _ec_key = EC_KEY_new();
EC_GROUP* ec_group_new = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1);
const EC_GROUP* ec_group = ec_group_new;
if (!EC_KEY_set_group(ec_key,ec_group))
DieWithError("Error in initializeCrypto, EC_KEY_set_group failed!");
// Segfault at this position
if(!EC_KEY_generate_key(ec_key))
DieWithError ("Error in generateKeys, EC_KEY_generate_key failed!");
(...)
EC_GROUP_free(ec_group_new);
EC_KEY_free(ec_key);
Run Code Online (Sandbox Code Playgroud)
乍一看,一切似乎都正常。使用我的i5 520m上的四个线程,应用程序的运行速度快两倍。但是在经过3-4次E6密钥生成后,它突然出现了段错误。如果我锁定EC_KEY_generate_key操作,则不再存在段错误,但是使用多个线程的优势就消失了。现在我的问题。是否可以在不破坏内存的情况下将密钥创建分成多个线程?我没有使用Google找到任何信息。不过,SSL Docu没有提及任何有关线程安全性的内容。非常感谢您的帮助。谢谢