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); } }