У меня есть вопрос относительно RSA_size.OpenSSL RSA_size с EVP_PKEY
версия, что авария на WIN32, но работает на Линукс платформ:
...
EVP_PKEY* pPublicKey = null;
unsigned int uKeySize = 0;
const unsigned char *pData;
pData = a_publicKey->Key.Data; /* Key.Data = unsigned char *p containing the Key in a string version */
pPublicKey = d2i_PublicKey(EVP_PKEY_RSA, null, &pData, a_publicKey->Key.Length);
if(pPublicKey != null)
{
uKeySize = RSA_size(pPublicKey->pkey.rsa); //Crash
}
...
версии, которые работают на win32 (не тестировался на Linux, но я предполагаю, что это работает, а):
...
EVP_PKEY* pPublicKey = null;
RSA* pRsaPublicKey = null;
unsigned int uKeySize = 0;
const unsigned char *pData;
pData = a_publicKey->Key.Data; /* Key.Data = unsigned char *p containing the Key in a string version */
pPublicKey = d2i_PublicKey(EVP_PKEY_RSA, null, &pData, a_publicKey->Key.Length);
if(pPublicKey != null)
{
pRsaPublicKey = EVP_PKEY_get1_RSA(pPublicKey);
EVP_PKEY_free(pPublicKey);
uKeySize = RSA_size(pRsaPublicKey);
}
...
я не понимаю, почему сбой первой версии. Но когда я смотрю на структуру pkey.rsa, значения не совпадают с указателями RSA во второй версии. Любые идеи?
Вы должны также освободить 'RSA *' вы получили назад от 'EVP_PKEY_get1_RSA'. Значение 'get1' означает, что счетчик ссылок был увеличен. «Get0» означает, что счетчик * не * увеличивался, поэтому не требуется '* _free'. – jww
@jww Да, на самом деле я освобождаю его сразу после «...», но я понимаю, что это может привести к недоразумениям. –