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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline buzikove  
#1 Оставлено : 5 октября 2020 г. 19:46:39(UTC)
buzikove

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

Группы: Участники
Зарегистрирован: 15.03.2012(UTC)
Сообщений: 9

Сказал(а) «Спасибо»: 1 раз
Добрый вечер.
Некоторое время бьюсь с взаимодействием со СМЭВ3. Начал с того, что через СМЭВ Адаптер сделал себе контрольный пример.
Код:
<?xml version="1.0" encoding="UTF-8"?>
<ns2:SendRequestRequest xmlns:ns2="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/1.1" xmlns="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/basic/1.1" xmlns:ns3="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/faults/1.1">
	<ns2:SenderProvidedRequestData Id="SIGNED_BY_CALLER">
		<ns2:MessageID>fd7c5dd3-049b-11eb-b21e-52540074bb92</ns2:MessageID>
		<ns2:TransactionCode>016f42db-049c-11eb-9135-fa163e1007b9|00000000000000000000|S/9k4RvayUJ2ID/kSfqYI0tn/2C0AzIUCb9skAPi+ED2GAe40Sdu4BUE8t4V9RiiovcvLj6yosKMkP3ePDEEXoy31/mgbXYkTmibUwMpx3U9CgQjnCeN0mTMs/kgROW9U5mSOhSOh6ZLZjlYtmbT/WTAVL7ScWivdkMCA+SXQ47c+rWRCrLuobFzsG/smhFHZ660GoWlcSgz46u+QaoO5eaT1UFstLflN+BUAcO+Z+Dr5iTfkiMdtvM2VcUnjitR+flYQoq41hG5FV03lWhwmBc5NF/B1svK6MQWKd9KbuznZU/1AYxigqej3WzMmi+j5BdKaDN5RvUORPoX5KN6EQ==</ns2:TransactionCode>
		<MessagePrimaryContent>
			<req:Request xmlns:req="urn://x-artefacts-rosreestr-gov-ru/virtual-services/egrn-statement/1.1.2" xmlns="urn://x-artefacts-smev-gov-ru/services/service-adapter/types" xmlns:das="urn://x-artefacts-rosreestr-gov-ru/virtual-services/egrn-statement/dRegionsRF/1.0.0" xmlns:ns2="urn://x-artefacts-smev-gov-ru/services/service-adapter/types/faults" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
				<req:region>41</req:region>
				<req:externalNumber>1111111111</req:externalNumber>
				<req:senderType>Vedomstvo</req:senderType>
				<req:actionCode>659111111111</req:actionCode>
				<req:Attachment>
					<req:IsMTOMAttachmentContent>true</req:IsMTOMAttachmentContent>
					<req:RequestDescription>
						<req:IsUnstructuredFormat>false</req:IsUnstructuredFormat>
						<req:IsZippedPacket>true</req:IsZippedPacket>
						<req:fileName>request.xml</req:fileName>
					</req:RequestDescription>
					<req:Statement>
						<req:IsUnstructuredFormat>false</req:IsUnstructuredFormat>
						<req:IsZippedPacket>true</req:IsZippedPacket>
						<req:fileName>a768d964-baf2-4298-8b74-86269d64efe6.xml</req:fileName>
					</req:Statement>
					<req:File>
						<req:IsUnstructuredFormat>true</req:IsUnstructuredFormat>
						<req:IsZippedPacket>true</req:IsZippedPacket>
						<req:fileName>a768d964-baf2-4298-8b74-86269d64efe6.xml.sig</req:fileName>
					</req:File>
					<req:File>
						<req:IsUnstructuredFormat>true</req:IsUnstructuredFormat>
						<req:IsZippedPacket>true</req:IsZippedPacket>
						<req:fileName>request.xml.sig</req:fileName>
					</req:File>
				</req:Attachment>
			</req:Request>
		</MessagePrimaryContent>
		<ns2:BusinessProcessMetadata/>
		<ns2:TestMessage/>
	</ns2:SenderProvidedRequestData>
	<ns2:CallerInformationSystemSignature>
		<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
			<ds:SignedInfo>
				<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
				<ds:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
				<ds:Reference URI="#SIGNED_BY_CALLER">
					<ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
						<ds:Transform Algorithm="urn://smev-gov-ru/xmldsig/transform"/></ds:Transforms>
					<ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
					<ds:DigestValue>H3MVRVT63GRLYzIiprtZYqp83hH7iVsaBG9oN+YPBPA=</ds:DigestValue></ds:Reference></ds:SignedInfo>
			<ds:SignatureValue>zNr+FfFWFWnfFDSS2Zhflmc5As9BZmWDRTWv/8RbkLznp/I+7FRhcqi5WSsztM8wKp8exRg8xSXC4XleaEqk2w==</ds:SignatureValue>
			<ds:KeyInfo>
				<ds:X509Data>
					<ds:X509Certificate>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</ds:X509Certificate>
				</ds:X509Data>
			</ds:KeyInfo>
		</ds:Signature>
	</ns2:CallerInformationSystemSignature>
</ns2:SendRequestRequest>

Проверку на Технологическом портале пример проходит.

По образу и подобию формирую часть для подписи (сразу в канонической форме), считаю хэш - сходится.
Потом встраиваю то, что подписал в собственно XML-посылку, добавляю часть CallerInformationSystemSignature, отправляю... И получаю ошибку.
Причем, если в мою посылку вставить подпись из образцовой посылки, то проверка на портале проходит. Значит с каноникализацией и хэшем точно все в порядке.

Порядок подписи следующий:
Код:

CryptAcquireContextW( &hProv, CertContName.c_str(), NULL, PROV_GOST_2012_256, 0 );
CryptCreateHash(hProv, CALG_GR3411_2012_256, 0, 0, &hHash);
CryptHashData(hHash, (BYTE*)buf, blen, 0);
CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0);
sLastHash = base64(rgbHash, cbHash, &hblen);
CryptSignHashW(hHash, AT_KEYEXCHANGE, NULL, 0, NULL, &dwSigLen);
pbSignature = (BYTE *)malloc(dwSigLen);
pbSignRev = (BYTE *)malloc(dwSigLen);
CryptSignHashW(hHash, AT_KEYEXCHANGE, NULL, 0, pbSignature, &dwSigLen);
CryptImportKey(hProv, pbKeyBlob,	dwBlobLen, 0, 0, &hPubKey);
CryptVerifySignatureW(hHash, pbSignature, dwSigLen, hPubKey, NULL, 0);
for (DWORD i=0;i<dwSigLen;i++){
  pbSignRev[i] = pbSignature[dwSigLen-i-1];
};
sSign = base64(pbSignature, dwSigLen, &hblen);
sRevSign = base64(pbSignRev, dwSigLen, &hblen);
cout << "Signature " << sSign << endl;
cout << byte_to_upp_string(pbSignature, dwSigLen) << endl;
cout << "Reverse Sign " << sRevSign << endl;
cout << byte_to_upp_string(pbSignRev, dwSigLen) << endl;


Считал значения по-умолчанию для провайдера и ключа:
PP_HASHOID 1.2.643.2.2.30.1 szOID_GostR3411_94_CryptoProParamSet Узел замены функции хэширования по умолчанию, вариант "Верба-О"
PP_CIPHEROID 1.2.643.7.1.2.5.1.1 szOID_Gost28147_89_TC26_Z_ParamSet Узел замены алгоритма шифрования, вариант ТК26 Z
PP_SIGNATUREOID 1.2.643.2.2.35.1 szOID_GostR3410_2001_CryptoPro_A_ParamSet Параметры a, b, p, q, (x,y) цифровой подписи и алгоритма Диффи-Хеллмана на базе алгоритма ГОСТ Р 34.10-2001, вариант криптопровайдера
KP_HASHOID 1.2.643.7.1.1.2.2 szOID_CP_GOST_R3411_12_256 Функция хэширования ГОСТ Р 34.11-2012, длина выхода 256 бит
KP_CIPHEROID 1.2.643.7.1.2.5.1.1 szOID_Gost28147_89_TC26_Z_ParamSet Узел замены алгоритма шифрования, вариант ТК26 Z

Может их надо поменять на что-либо другое?
Направьте или ткните носом, что я делаю не так?

PS. Пример прямой и развернутой подписи в base64 и массивом
Signature IkIxvJmHDVUe6WgQsJUg6wMx81EByTpfDf2kPEjlVNeDAjN6e3Xnd3sVgNzmXti2QgtTt7U25SKXsf60Sm4s5g==
224231BC99870D551EE96810B09520EB0331F35101C93A5F0DFDA43C48E554D78302337A7B75E7777B1580DCE65ED8B6420B53B7B536E52297B1FEB44A6E2CE6
Reverse Sign 5ixuSrT+sZci5Ta1t1MLQrbYXubcgBV7d+d1e3ozAoPXVOVIPKT9DV86yQFR8zED6yCVsBBo6R5VDYeZvDFCIg==
E62C6E4AB4FEB19722E536B5B7530B42B6D85EE6DC80157B77E7757B7A330283D754E5483CA4FD0D5F3AC90151F33103EB2095B01068E91E550D8799BC314222

Отредактировано пользователем 5 октября 2020 г. 21:06:52(UTC)  | Причина: Не указана

Offline two_oceans  
#2 Оставлено : 6 октября 2020 г. 6:36:09(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Добрый день.
На вид код правильный, есть замечания по эффективности, но должно считать правильно.
В коде не видно, но для сборки потом нужно использовать перевернутую подпись.
Есть большая вероятность что текст не каноничен или неправильная сборка Signature. Честно у меня уже глаз дергается читать сообщения в которых автор сформировал "уже каноничный текст", но в примерно трети случаев это оказалось не так: чаще всего забывают объявления пространств имен из вышестоящих тегов у ds:SignedInfo или подписываемого фрагмента. Да, в реальном документе таких объявлений нет (поэтому сформировать документ сразу канонично нельзя, так как каноничность в одном фрагменте вызовет неканоничность в вышестоящем фрагменте!), но во фрагменте идущем на каноникализацию и соответственно в каноничном тексте объявления должны быть. Еще в трети случаев - собрали Signature логически неправильно, еще в трети - после верной сборки Signature неверно вставили в документ или исказили документ при отправке.
Поэтому давайте все рассмотрим постепенно, выделив такие результаты.
Первый этап: каноничный текст и хэш подписываемого фрагмента.
Второй этап: каноничный текст и хэш от SignedInfo.
Третий этап: SignatureValue и сертификат.
Правильно ли я понял, что первый и второй этап пока оставили неизменными от проверочного файла и пробуете только вычисление SignatureValue, плюс замену SignatureValue и сертификата?

Одно только значение подписи бесполезно для проверки, надо всю Signature (там и SignedInfo и сертификат) - так можно проверить соответствие SignatureValue и SignedInfo. Обратите внимание, что SignedInfo для смэв 3 желательно формировать без табуляций и переводов строк, так как смэв 3 запрещает эти символы в спецификации и не всегда по стандартам обрабатывает когда они есть. Для надежности проверки приходится пожертвовать удобочитаемостью. Если же меняли первый/второй этап, то лучше прикрепить (или указать ссылку на облачный диск) весь тестовый файл, который не проходит проверку. Есть еще нюансы проверки в зависимости как проверяете на странице техпортала СМЭВ3 или посылаете в тестовую/эмулятор/продуктивную СМЭВ. Для начала рекомендуется проверять на странице.

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

Offline buzikove  
#3 Оставлено : 6 октября 2020 г. 8:32:32(UTC)
buzikove

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

Группы: Участники
Зарегистрирован: 15.03.2012(UTC)
Сообщений: 9

Сказал(а) «Спасибо»: 1 раз
Спасибо за ответ.

Про первый этап.
Я в исходном сообщении указал, что хэш подписной части сошелся, поэтому приводить его не стал. Вот она
Код:
<ns1:SenderProvidedRequestData xmlns:ns1="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/1.1" Id="SIGNED_BY_CALLER"><ns1:MessageID>fd7c5dd3-049b-11eb-b21e-52540074bb92</ns1:MessageID><ns1:TransactionCode>016f42db-049c-11eb-9135-fa163e1007b9|00000000000000000000|S/9k4RvayUJ2ID/kSfqYI0tn/2C0AzIUCb9skAPi+ED2GAe40Sdu4BUE8t4V9RiiovcvLj6yosKMkP3ePDEEXoy31/mgbXYkTmibUwMpx3U9CgQjnCeN0mTMs/kgROW9U5mSOhSOh6ZLZjlYtmbT/WTAVL7ScWivdkMCA+SXQ47c+rWRCrLuobFzsG/smhFHZ660GoWlcSgz46u+QaoO5eaT1UFstLflN+BUAcO+Z+Dr5iTfkiMdtvM2VcUnjitR+flYQoq41hG5FV03lWhwmBc5NF/B1svK6MQWKd9KbuznZU/1AYxigqej3WzMmi+j5BdKaDN5RvUORPoX5KN6EQ==</ns1:TransactionCode><ns2:MessagePrimaryContent xmlns:ns2="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/basic/1.1"><ns3:Request xmlns:ns3="urn://x-artefacts-rosreestr-gov-ru/virtual-services/egrn-statement/1.1.2"><ns3:region>41</ns3:region><ns3:externalNumber>1111111111</ns3:externalNumber><ns3:senderType>Vedomstvo</ns3:senderType><ns3:actionCode>659111111111</ns3:actionCode><ns3:Attachment><ns3:IsMTOMAttachmentContent>true</ns3:IsMTOMAttachmentContent><ns3:RequestDescription><ns3:IsUnstructuredFormat>false</ns3:IsUnstructuredFormat><ns3:IsZippedPacket>true</ns3:IsZippedPacket><ns3:fileName>request.xml</ns3:fileName></ns3:RequestDescription><ns3:Statement><ns3:IsUnstructuredFormat>false</ns3:IsUnstructuredFormat><ns3:IsZippedPacket>true</ns3:IsZippedPacket><ns3:fileName>a768d964-baf2-4298-8b74-86269d64efe6.xml</ns3:fileName></ns3:Statement><ns3:File><ns3:IsUnstructuredFormat>true</ns3:IsUnstructuredFormat><ns3:IsZippedPacket>true</ns3:IsZippedPacket><ns3:fileName>a768d964-baf2-4298-8b74-86269d64efe6.xml.sig</ns3:fileName></ns3:File><ns3:File><ns3:IsUnstructuredFormat>true</ns3:IsUnstructuredFormat><ns3:IsZippedPacket>true</ns3:IsZippedPacket><ns3:fileName>request.xml.sig</ns3:fileName></ns3:File></ns3:Attachment></ns3:Request></ns2:MessagePrimaryContent><ns1:BusinessProcessMetadata></ns1:BusinessProcessMetadata><ns1:TestMessage></ns1:TestMessage></ns1:SenderProvidedRequestData>

Хэш: H3MVRVT63GRLYzIiprtZYqp83hH7iVsaBG9oN+YPBPA=

Про второй этап.
Подписание SignedInfo не производится - зачен нужна его каноникализация и хэш? У меня нет вышестоящих фрагментов и подписей.

Про третий этап.
Пример SignatureValue я добавил в конец своего сообщения. Сертификат есть в образце.

Я прямо не указал это, и, возможно был не понят. Я сформировал контрольный пример через Адаптер со своим сертификатом. И потом его же использую в собственном подписании. Поэтому и написал, что если взять мою посылку и поменять в ней SignatureValue на значение из образца, то на Портале проверка проходит. Для проверки на портале свою посылку не форматировал вообще, а в контрольном примере нащупал ту грань, после которой дальнейшее форматирование приводит к ошибке. Сам Адаптер содержательную часть отсылает как есть, а вот CallerInformationSystemSignature у него весь в одну строчку.

Сборку XML я произвожу просто текстом в одну строку без переносов строки и табуляций вообще. Он маленький, в нем сложно запутаться и легко отформатировать руками.
Моя посылка вот.
Код:
<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns1:SendRequestRequest xmlns:ns1="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/1.1"><ns1:SenderProvidedRequestData Id="SIGNED_BY_CALLER"><ns1:MessageID>fd7c5dd3-049b-11eb-b21e-52540074bb92</ns1:MessageID><ns1:TransactionCode>016f42db-049c-11eb-9135-fa163e1007b9|00000000000000000000|S/9k4RvayUJ2ID/kSfqYI0tn/2C0AzIUCb9skAPi+ED2GAe40Sdu4BUE8t4V9RiiovcvLj6yosKMkP3ePDEEXoy31/mgbXYkTmibUwMpx3U9CgQjnCeN0mTMs/kgROW9U5mSOhSOh6ZLZjlYtmbT/WTAVL7ScWivdkMCA+SXQ47c+rWRCrLuobFzsG/smhFHZ660GoWlcSgz46u+QaoO5eaT1UFstLflN+BUAcO+Z+Dr5iTfkiMdtvM2VcUnjitR+flYQoq41hG5FV03lWhwmBc5NF/B1svK6MQWKd9KbuznZU/1AYxigqej3WzMmi+j5BdKaDN5RvUORPoX5KN6EQ==</ns1:TransactionCode><ns2:MessagePrimaryContent xmlns:ns2="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/basic/1.1"><ns3:Request xmlns:ns3="urn://x-artefacts-rosreestr-gov-ru/virtual-services/egrn-statement/1.1.2"><ns3:region>41</ns3:region><ns3:externalNumber>1111111111</ns3:externalNumber><ns3:senderType>Vedomstvo</ns3:senderType><ns3:actionCode>659111111111</ns3:actionCode><ns3:Attachment><ns3:IsMTOMAttachmentContent>true</ns3:IsMTOMAttachmentContent><ns3:RequestDescription><ns3:IsUnstructuredFormat>false</ns3:IsUnstructuredFormat><ns3:IsZippedPacket>true</ns3:IsZippedPacket><ns3:fileName>request.xml</ns3:fileName></ns3:RequestDescription><ns3:Statement><ns3:IsUnstructuredFormat>false</ns3:IsUnstructuredFormat><ns3:IsZippedPacket>true</ns3:IsZippedPacket><ns3:fileName>a768d964-baf2-4298-8b74-86269d64efe6.xml</ns3:fileName></ns3:Statement><ns3:File><ns3:IsUnstructuredFormat>true</ns3:IsUnstructuredFormat><ns3:IsZippedPacket>true</ns3:IsZippedPacket><ns3:fileName>a768d964-baf2-4298-8b74-86269d64efe6.xml.sig</ns3:fileName></ns3:File><ns3:File><ns3:IsUnstructuredFormat>true</ns3:IsUnstructuredFormat><ns3:IsZippedPacket>true</ns3:IsZippedPacket><ns3:fileName>request.xml.sig</ns3:fileName></ns3:File></ns3:Attachment></ns3:Request></ns2:MessagePrimaryContent><ns1:BusinessProcessMetadata></ns1:BusinessProcessMetadata><ns1:TestMessage></ns1:TestMessage></ns1:SenderProvidedRequestData><ns1:CallerInformationSystemSignature><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/><ds:Reference URI="#SIGNED_BY_CALLER"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:Transform Algorithm="urn://smev-gov-ru/xmldsig/transform"/></ds:Transforms><ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/><ds:DigestValue>H3MVRVT63GRLYzIiprtZYqp83hH7iVsaBG9oN+YPBPA=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>lo8x8BKhJW4+radk2BkwckhIV7VXxDslUf9pIC6UnFKbv9utjlaa2RWDo4t16R0sG+ya7WmjJgcW0KqWLb656Q==</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>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</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature></ns1:CallerInformationSystemSignature></ns1:SendRequestRequest></S:Body></S:Envelope>


Да, проверки на ошибки убрал для краткости. От убирания одного вызова CryptSignHashW, к сожалению, ничего не поменялось. Проверку делаю как на портале, так и посылкой в эмулятор (есть тэг TestMessge) тестовой СМЭВ.
Offline two_oceans  
#4 Оставлено : 6 октября 2020 г. 13:30:43(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Пожалуйста. В целом ясно, так и предполагал, но собирать документ по частям без точных пояснений как тыкать пальцеи в небо. Сейчас посмотрю.
Автор: buzikove Перейти к цитате
Про второй этап.
Подписание SignedInfo не производится - зачен нужна его каноникализация и хэш? У меня нет вышестоящих фрагментов и подписей.
Ошибка логическая скорее всего именно в этом. Наводящий вопрос по структуре тега Signature: каноникализация фрагмента запроса указана в Transforms в Reference, тогда для чего нужен еще один тег CanonicalizationMethod с каноникализацией? А рядом с ним еще зачем-то SignatureMethod не внесен под Reference? Не наводит ли это на мысль о том, что каноникализируется что-то еще, да и подписывается вовсе не тот хэш из референса?

Целиком алгоритм уже я писал в соседней теме https://www.cryptopro.ru...&m=117454#post117454 , тут краткий вариант:

По спецификации от трансформированных каноничных "подписываемых" данных запроса (на которые указывает reference URI, в данном случае тег SenderProvidedRequestData) считается хэш1, значение хэш1 вставляется в DigestValue в reference в SignedInfo (вообше reference может быть много - повторяется для каждого, но в смэв используется только 1 reference);
после всех reference, SignedInfo каноникализируется и считается хэш2, и уже этот хэш2 идет на CryptSignHash и результат подписания хэша2 форматируется в SignatureValue.

Отредактировано пользователем 6 октября 2020 г. 13:37:28(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
buzikove оставлено 07.10.2020(UTC)
Offline buzikove  
#5 Оставлено : 7 октября 2020 г. 18:15:09(UTC)
buzikove

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

Группы: Участники
Зарегистрирован: 15.03.2012(UTC)
Сообщений: 9

Сказал(а) «Спасибо»: 1 раз
Это тот случай, когда не хватило базовых знаний о подписи XML вообще. Почему-то сразу полез в практику, уперся в подбор хэша, а понимания того, что подписываю вообще не то, не было.
Целиком Ваш алгоритм уже видел ранее, но на тот момент не обладал знаниями, чтобы понять, что он мне подходит и как ему следовать.

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