Example #1
0
        public IActionResult VerifyDetachedSign()
        {
            try
            {
                if (HttpContext.Request.Form.Files.Count <= 0)
                {
                    return(BadRequest("Файлов для подписания не обнаружено."));
                }

                var files = HttpContext.Request.Form.Files;

                var sign = files.FirstOrDefault(x => Path.GetExtension(x.FileName) == ".sig");
                if (sign == null)
                {
                    return(BadRequest("Не удалось найти файл с расширением .sig (подпись) в запросе."));
                }

                var data = files.FirstOrDefault(x => Path.GetExtension(x.FileName) != ".sig");
                if (data == null)
                {
                    return(BadRequest("Не удалось найти файл с данными в запросе."));
                }

                var signStream = new MemoryStream();
                sign.CopyTo(signStream);

                var dataStream = new MemoryStream();
                data.CopyTo(dataStream);

                X509Certificate2 cert = null;
                var result            = provider.VerifyDetachedMessage(signStream.ToArray(), dataStream.ToArray(), false, ref cert);

                return(Ok(new
                {
                    VerifyResult = result,
                    CertSubject = cert.Subject
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest($"Ошибка при выполнении запроса: {ex.Message}."));
            }
        }
        /// <summary>
        /// Метод выполнения тестов подписи данных
        /// </summary>
        /// <param name="csp"></param>
        /// <param name="directory"></param>
        /// <param name="thumbprint"></param>
        private void SignDataExecuteTest(CspType csp, string directory, string thumbprint)
        {
            SignServiceProvider provider = new SignServiceProvider(csp, new LoggerFactory());
            var files = Utils.GetFilesList(directory);

            foreach (var file in files)
            {
                var data = Utils.GetStreamFromFile(file);
                var sign = provider.Sign(data, thumbprint);

                Assert.IsNotNull(sign);
                Assert.IsTrue(sign.Length > 0);

                X509Certificate2 cert = null;

                bool isVerify = provider.VerifyDetachedMessage(sign, data, false, ref cert);

                Assert.IsTrue(isVerify);
                Assert.IsNotNull(cert);
            }
        }