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

Уведомление

Icon
Error

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

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

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

Сказал(а) «Спасибо»: 1 раз
Подпись, полученная через cryptcp, не проходит проверку через Gost3410_2012_256CryptoServiceProvider.VerifySignature

С чем это может быть связано, нужно сделать еще какие-то манипуляции с байтами signature? Пробовал Reverse().

Код:

            var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);

            var certificates = store.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, false);
            X509Certificate2 certificate = certificates[0];
            var gostPrivateKey = (Gost3410_2012_256CryptoServiceProvider)certificate.PrivateKey;
            var gostHash = new Gost3411_2012_256CryptoServiceProvider();

            Process compiler = new Process();
            compiler.StartInfo.FileName = helperPath;
            compiler.StartInfo.Arguments = string.Format("-sign -nocert -nostampcert -hashAlg 1.2.643.7.1.1.2.2 -thumberprint \"{0}\" \"{1}\" \"{2}\"",
                certificate.Thumbprint, file, resultFile);
            compiler.StartInfo.UseShellExecute = false;
            compiler.Start();
            compiler.WaitForExit();

            var signedCms = new SignedCms();
            string detachedSignBase64 = File.ReadAllText(resultFile);
            var detachedSign = Convert.FromBase64String(detachedSignBase64);
            signedCms.Decode(detachedSign);

            X509Certificate2Collection certCollection = new X509Certificate2Collection { certificate };
            signedCms.CheckSignature(certCollection, true);

            // выполняется
            signedCms.CheckSignature(new X509Certificate2Collection { certificate }, true);

            var data = File.ReadAllBytes(file);
            foreach (var si in signedCms.SignerInfos)
            {
                var signature = si.GetSignature();

                // verify = false ?
                var verify = gostPrivateKey.VerifyData(data, gostHash, signature);
                if (!verify)
                    throw new Exception("Неверная подпись");
            }
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.