gpt4 book ai didi

c++ - 使用 SHA-512 为哈希在 CMS 中创建分离签名

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:21 25 4
gpt4 key购买 nike

我的内容和 CMS 具有分离签名( key 算法 - SHA-256)和我使用 key 算法 SHA-512 向 CMS 添加了一个签名。但是当使用 CryptoApi 添加时,函数 CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_SIGNER, &SignerEncodeInfo) 返回 CRYPT_E_UNKNOWN_ALGO

原因是在 CMS 中 digestAlgoritm:ASN.1 structure 中不存在 SHA-512

如果我使用 ASN.1 编辑器添加 SHA-512,将添加签名者信息:ASN.1 after insert

是否可以直接使用 CryptoApi 添加此 block 或 SignerInfo,还是只能通过编辑 ASN.1 来添加?

最佳答案

我找到了解决方法。

我创建了一个包含算法但不包含签名者信息和证书的模板。可以使用 asn1 编辑器或 CryptoApi(使用 CryptMsgOpenToDecodeCryptMsgControl(..., CMSG_CTRL_DEL_SIGNER, ...))完成然后需要将签名者信息和证书从当前签名传输到上面创建的模板

PCMSG_CMS_SIGNER_INFO pSignerInfo;
DWORD cbSignerInfo;
CryptMsgGetParam(hMsg2, CMSG_CMS_SIGNER_INFO_PARAM, 0, NULL, &cbSignerInfo);
pSignerInfo = (PCMSG_CMS_SIGNER_INFO)LocalAlloc(LPTR, cbSignerInfo);
CryptMsgGetParam(hMsg2, CMSG_CMS_SIGNER_INFO_PARAM, 0, (PVOID)pSignerInfo, &cbSignerInfo);

CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_CMS_SIGNER_INFO, pSignerInfo);

DWORD cbCertInfo;
CryptMsgGetParam(hMsg2, CMSG_CERT_PARAM, 0, NULL, &cbCertInfo);
std::vector<BYTE> pCertInfo(cbCertInfo);
CryptMsgGetParam(hMsg2, CMSG_CERT_PARAM, 0, &pCertInfo[0], &cbCertInfo);

CRYPT_INTEGER_BLOB certBlob;
memset(&certBlob, 0, sizeof(CRYPT_INTEGER_BLOB));
certBlob.cbData = cbCertInfo;
certBlob.pbData = &pCertInfo[0];
CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_CERT, &certBlob);

之后,您可以添加新签名。

关于c++ - 使用 SHA-512 为哈希在 CMS 中创建分离签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50756812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com