获取OpenSSL中已签名邮件的内容

时间:2017-05-17 10:55:10

标签: c++ openssl digital-signature

我正在尝试进行签名验证,然后使用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功能如何运作?他们是否加密服务器上的消息并发送到客户端,并且只在客户端计算哈希?官方消息来源没有提到它。我需要验证签名,然后验证其内容的某些部分。

0 个答案:

没有答案