我正在尝试进行签名验证,然后使用openssl和EVP函数检查邮件的内容。 我用这样的代码签名:
bool RSASign( RSA* rsa,
const unsigned char* Msg,
size_t MsgLen,
unsigned char** EncMsg,
size_t* MsgLenEnc) {
EVP_MD_CTX* m_RSASignCtx = EVP_MD_CTX_create(); //- cоздает текущий контекст подписи
EVP_PKEY* priKey = EVP_PKEY_new(); //- аллоцирует память под новый приватный ключ
EVP_PKEY_assign_RSA(priKey, rsa);
if (EVP_DigestSignInit(m_RSASignCtx,NULL, EVP_sha384(), NULL,priKey)<=0) {//- задает использование текущего контекста с таким то ключом
return false;
}
if (EVP_DigestSignUpdate(m_RSASignCtx, Msg, MsgLen) <= 0) {//- хэширует указанное число байт в текущий контекст
return false;
}
if (EVP_DigestSignFinal(m_RSASignCtx, NULL, MsgLenEnc) <=0) {// - с NULL параметром получается достать максимальную длину для аллокации буфера
return false;
}
*EncMsg = (unsigned char*)malloc(*MsgLenEnc);//-аллоцируем буфер
if (EVP_DigestSignFinal(m_RSASignCtx, *EncMsg, MsgLenEnc) <= 0) {//- подписываем сообщение и кладем в буфер, в длину записывается реальное число байт
return false;
}
EVP_MD_CTX_cleanup(m_RSASignCtx);
return true;
}
与签名相关的EVP功能如何运作?他们是否加密服务器上的消息并发送到客户端,并且只在客户端计算哈希?官方消息来源没有提到它。我需要验证签名,然后验证其内容的某些部分。