Статус: Новичок
Группы: Участники
Зарегистрирован: 26.10.2020(UTC) Сообщений: 3 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
В Visual Studio пример создания подписи CAdES-BES по хеш собирается без проблем и подпись создает без ошибок Но в Golang используя CGO и cades.dll (64 bit) получаю ошибку 0xc2100121 Подскажите в какую сторону копать? Код Код:
static int SignXml(HCRYPTPROV hProv, PCCERT_CONTEXT certContext, BYTE* data, DWORD cbData) {
HCRYPTHASH hHash = 0;
if (!CryptCreateHash(hProv, CALG_GR3411_2012_256, 0, 0, &hHash))
{
return 0;
}
if (!CryptHashData(hHash, data, cbData, 0)) {
CryptDestroyHash(hHash);
return 0;
}
DWORD cbToBeSigned = 0;
BYTE* pbToBeSigned;
if (!CryptGetHashParam(hHash, HP_HASHVAL, NULL, &cbToBeSigned, 0)) {
CryptDestroyHash(hHash);
return 0;
}
pbToBeSigned = (BYTE*)malloc(cbToBeSigned);
if (!CryptGetHashParam(hHash, HP_HASHVAL, pbToBeSigned, &cbToBeSigned, 0)) {
CryptDestroyHash(hHash);
return 0;
}
const char* oid = "1.2.840.113549.1.7.1";
CRYPT_SIGN_MESSAGE_PARA* signPara = malloc(sizeof(CRYPT_SIGN_MESSAGE_PARA));
memset(signPara, 0, sizeof(CRYPT_SIGN_MESSAGE_PARA));
signPara->cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA);
signPara->pSigningCert = certContext;
signPara->dwMsgEncodingType = MY_ENC_TYPE;
signPara->HashAlgorithm.pszObjId = (LPSTR)szOID_CP_GOST_R3411_12_256;
CADES_SIGN_PARA* cadesSignPara = malloc(sizeof(CADES_SIGN_PARA));
memset(cadesSignPara, 0, sizeof(CADES_SIGN_PARA));
cadesSignPara->dwCadesType = CADES_BES;
CADES_SIGN_MESSAGE_PARA* para = malloc(sizeof(CADES_SIGN_MESSAGE_PARA));
memset(para, 0, sizeof(CADES_SIGN_MESSAGE_PARA));
para->dwSize = sizeof(CADES_SIGN_MESSAGE_PARA);
para->pSignMessagePara = signPara;
para->pCadesSignPara = cadesSignPara;
PCRYPT_DATA_BLOB* pSignedMessage = malloc(sizeof(PCRYPT_DATA_BLOB));
memset(pSignedMessage, 0, sizeof(PCRYPT_DATA_BLOB));
if (!CadesSignHash(para, pbToBeSigned, cbToBeSigned, (LPSTR)szOID_RSA_data, pSignedMessage)) {
free(pbToBeSigned);
CryptDestroyHash(hHash);
return 0;
}
free(pbToBeSigned);
CryptDestroyHash(hHash);
return 1;
}
DebugView Код:
[19208] cades.dll: CPTraceGeneral: (pSignPara=0x000001C240B78B10, pbHashData=0x000001C243309600, cbHashData=32, pszInnerContentObjID=0x0000000001366A1B, ppSignedBlob=0x000001C240B7D7A0)
[19208] cades.dll: CPTraceGeneral: Signer updating start
[19208] cades.dll: CPTraceGeneral: Hash algorithm deduced
[19208] cades.dll: CPTraceGeneral: (pAttr=0)
[19208] cades.dll: CPTraceGeneral: (pAttr=0)
[19208] cades.dll: CPTraceGeneral: Attributes copied
[19208] cades.dll: CPTraceGeneral: Signer does not have any of signing-certificate attributes
[19208] cades.dll: CPTraceGeneral: signing-certificate(-v2) attribute assembled
[19208] cades.dll: CPTraceGeneral: Signer does not have signingTime attribute
[19208] cades.dll: CPTraceGeneral: signingTime attribute assembled
[19208] cades.dll: CPTraceGeneral: Signer is updated successfully
[19208] cades.dll: CPTraceGeneral: (hCryptMsg=0x000001C240AFC9B0, dwSignatureIndex=0, pCadesSignPara=0x000000B1F01FCE00)
[19208] cades.dll: CPTraceGeneral: Input parameters checked
[19208] cades.dll: CPTraceGeneral: Signer certificate ID found
[19208] cades.dll: CPTraceGeneral: pSignerCert=0x000001C240A99270
[19208] cades.dll: CPTraceGeneral: (hCryptMsg=0x000001C240AFC9B0, dwSignatureIndex=0, pdwCadesType=0x000000B1F01FCAA8)
[19208] cades.dll: CPTraceGeneral: (res=1, GetLastError=0x00000000
[19208] cades.dll: CPTraceGeneral: Hash algorithm deduced
[19208] cades.dll: CPTraceGeneral: Signature extracted via CMSG_ENCRYPTED_DIGEST
[19208] tspcli.dll: CPTraceGeneral: Checking policies...
[19208] tspcli.dll: CPTraceGeneral: Checking policies... OK.
[19208] tspcli.dll: CPTraceGeneral: Making request...
[19208] tspcli.dll: CPTraceGeneral: Initializing request...
[19208] tspcli.dll: CPTraceGeneral: Encoding request...
[19208] tspcli.dll: CPTraceGeneral: Making request... OK.
[19208] cades.dll: CPTraceGeneral: CAtlException, m_hr=0xc2100121
[19208] cades.dll: CPTraceGeneral: (res=0, GetLastError=0xc2100121
[19208] cades.dll: CPTraceGeneral: Expression FAILED: ::CadesMsgEnhanceSignature(msg.GetHandle(), 0, &cadesSignPara)
[19208] cades.dll: CPTraceGeneral: Last win32 error thrown as exception
[19208] cades.dll: CPTraceGeneral: COleException, m_sc=0xc2100121
[19208] cades.dll: CPTraceGeneral: (res=0, GetLastError=0xc2100121
[19208] cades.dll: CPTraceGeneral: (dwFlags=2560, lpSource=0x0000000000000000, dwMessageId=-1039138527, dwLanguageId=0, lpBuffer=0x000000B1F01FEEB0, nSize=2048, Arguments=0x0000000000000000)
[19208] cades.dll: CPTraceGeneral: (res=39, GetLastError=0xc2100121
|