AlexMAS / GostCryptography

.NET driver for ViPNet CSP and CryptoPro CSP
MIT License
128 stars 41 forks source link

А подписывать можно только HASH данных? #20

Closed bitrix1 closed 5 years ago

bitrix1 commented 5 years ago

Здравствуйте. Есть ли возможность подписывать сообщение, а не HASH, чтобы сделать один файл с прикрепленной подписью? Например для просмотра через КриптоАрм. http://cpdn.cryptopro.ru/content/cades/plugin-samples-sign-detached.html

Вот что я имею в виду: JavaScript

var oSignedData = cadesplugin.CreateObject("CAdESCOM.CadesSignedData");
oSignedData.Content = dataToSign; // тут передаются данные.
var sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, detached=false); //это сообщение с прикрепленной подписью.

P.S. На всякий случай, для проверки попробовал подписать данные в GostCryptography, и получил ошибку System.ArgumentOutOfRangeException: "Hash size must be 64 bytes. Подумал а вдруг получится, но нет :)

private static byte[] CreateSignature1(GostAsymmetricAlgorithm privateKey, byte[] msgBytes)
{
  return privateKey.CreateSignature(msgBytes);
}

Спасибо!

bitrix1 commented 5 years ago

Кажется понял, нашел API SignedXml. https://docs.microsoft.com/ru-ru/dotnet/api/system.security.cryptography.xml.signedxml?view=netframework-4.5 Попытался подсунуть ему GostAsymmetricAlgorithm в поле signedXml.SigningKey и получил "Сбой при создании ключа подписи.". Потом увидел GostCryptography.Xml.GostSignedXmlImpl, наследника того самого SignedXml и понял, что тут как раз решалась эта проблема. Файл xml из примера на сайте Microsoft не годится, нужен именно файл этого проекта GostCryptography.Tests/Data/SignedXmlExample.xml

AlexMAS commented 5 years ago

Здравствуйте. Если нужно подписать бинарные данные, также можно воспользоваться CMS/PKCS#7.