Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Наши способы организации безопасного удалённого доступа к рабочим местам и корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline udjin123  
#1 Оставлено : 1 ноября 2020 г. 1:56:42(UTC)
udjin123

Статус: Новичок

Группы: Участники
Зарегистрирован: 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
Offline Андрей *  
#2 Оставлено : 1 ноября 2020 г. 2:18:18(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 9,889
Мужчина
Российская Федерация

Сказал «Спасибо»: 363 раз
Поблагодарили: 1431 раз в 1105 постах
По коду ошибки:

Коды ошибок из библиотек tspcli и ocspcli 0xC2100121 Не задан адрес службы штампов времени


но в коде указано: cadesSignPara->dwCadesType = CADES_BES; ...

Попробуйте заполнить полностью структуру (null).

https://docs.cryptopro.r...c-struct/cades_sign_para
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
udjin123 оставлено 01.11.2020(UTC)
Offline udjin123  
#3 Оставлено : 1 ноября 2020 г. 2:33:34(UTC)
udjin123

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.10.2020(UTC)
Сообщений: 3
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Цитата:
Попробуйте заполнить полностью структуру (null).


"а ларчик просто открывался"

прописал dwSize и заполнил остальное NULL и все заработало! А я уже весь мозг сломал! Спасибо!

Отредактировано пользователем 1 ноября 2020 г. 2:36:20(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.