private bool CheckIsPresentCadesAndPades() { bool result = false; FileDocumento signedDocument = this.GetSignedDocument(); bool cades = false; bool pades = false; if (signedDocument != null && signedDocument.signatureResult != null) { VerifySignatureResult signatureResult = signedDocument.signatureResult; foreach (PKCS7Document document in signatureResult.PKCS7Documents) { if (document.SignatureType == SignType.PADES) { pades = true; } if (document.SignatureType == SignType.CADES) { cades = true; } if (cades && pades) { break; } } } result = cades && pades; return(result); }
private Microsoft.Web.UI.WebControls.TreeNode GetNodeCheckDocumento(VerifySignatureResult signatureResult) { Microsoft.Web.UI.WebControls.TreeNode node = new Microsoft.Web.UI.WebControls.TreeNode(); node.NavigateUrl = DETAIL_PAGE + "?type=signatureResult"; node.Target = "right"; node.Text = "Risultato verifica"; return(node); }
private static VerifySignatureResult ConvertToVerifySignatureResult(EsitoVerificaStatus status, DocsPaVO.documento.Internal.PKCS7Document[] p7docsLst) { VerifySignatureResult vsr = new VerifySignatureResult(); vsr.PKCS7Documents = p7docsLst; vsr.StatusCode = (int)status; vsr.StatusDescription = status.ToString(); vsr.CRLOnlineCheck = true; return(vsr); }
public async Task <VerifySignatureResult> VerifySignature(Object data, string method, string nonceStr, string publicKey, string requestUrl, string signType, string timestamp, string signature, string environment) { VerifySignatureResult result = new VerifySignatureResult(); try { string url = ""; if (environment == "sandbox") { url = String.Concat(Url.SandBoxOpen, "/tool/signature/verify"); } else if (environment == "production") { url = String.Concat(Url.ProductionOpen, "/tool/signature/verify"); } VerifySignatureRequestData verifySignatureData = new VerifySignatureRequestData(); verifySignatureData.data = data; verifySignatureData.method = method; verifySignatureData.nonceStr = nonceStr; verifySignatureData.publicKey = publicKey; verifySignatureData.requestUrl = requestUrl; verifySignatureData.signType = signType; verifySignatureData.timestamp = timestamp; verifySignatureData.signature = signature; var content = JsonConvert.SerializeObject(verifySignatureData); var buffer = System.Text.Encoding.UTF8.GetBytes(content); var byteContent = new ByteArrayContent(buffer); byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); HttpClient client = new HttpClient(); var response = await client.PostAsync(url, byteContent); var responseStr = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { var jsonAsString = await response.Content.ReadAsStringAsync(); result = JsonConvert.DeserializeObject <VerifySignatureResult>(jsonAsString); } else { result = JsonConvert.DeserializeObject <VerifySignatureResult>(response.Content.ReadAsStringAsync().Result); } } catch (Exception ex) { Console.WriteLine("Error", ex.Message); } return(result); }
private void Page_Load(object sender, System.EventArgs e) { Response.Expires = -1; this._requestType = (string)Request.QueryString["type"]; this._requestDocumentIndex = Convert.ToInt32(Request.QueryString["documentIndex"]); //this._requestSignerIndex=Convert.ToInt32(Request.QueryString["index"]); this._fileDocument = DocumentManager.GetSignedDocument(); this._signatureResult = this._fileDocument.signatureResult; // Put user code to initialize the page here this.FillTable(); }
private static VerifySignatureResult ConvertToVerifySignatureResult(EsitoVerificaStatus status, FirmaDigitale.DettaglioFirmaDigitaleType d) { VerifySignatureResult vsr = new VerifySignatureResult(); List <DocsPaVO.documento.SignerInfo> siLst = new List <DocsPaVO.documento.SignerInfo>(); if (d.datiFirmatari != null) { foreach (FirmaDigitale.FirmatarioType ft in d.datiFirmatari) { DocsPaVO.documento.SignerInfo si = new DocsPaVO.documento.SignerInfo(); si.CertificateInfo = new DocsPaVO.documento.CertificateInfo { ValidFromDate = ft.firmatario.dataInizioValiditaCert, ValidToDate = ft.firmatario.dataFineValiditaCert, RevocationDate = ft.firmatario.dataRevocaCertificato, RevocationStatus = (int)status, RevocationStatusDescription = status.ToString(), IssuerName = "CN=" + ft.firmatario.cnCertAuthority, SignatureAlgorithm = "N.D." }; si.SubjectInfo = new DocsPaVO.documento.SubjectInfo { CodiceFiscale = ft.firmatario.codiceFiscale, CommonName = ft.firmatario.commonName, CertId = ft.firmatario.distinguishName, Organizzazione = ft.firmatario.organizzazione, SerialNumber = ft.firmatario.serialNumber, }; si.SignatureAlgorithm = convertOidtoString(ft.firmatario.digestAlgorithm); siLst.Add(si); } } List <DocsPaVO.documento.PKCS7Document> p7docsLst = new List <DocsPaVO.documento.PKCS7Document>(); DocsPaVO.documento.PKCS7Document p7doc = new DocsPaVO.documento.PKCS7Document { SignersInfo = siLst.ToArray(), DocumentFileName = null, Level = 0 }; p7docsLst.Add(p7doc); vsr.PKCS7Documents = p7docsLst.ToArray(); vsr.StatusCode = (int)status; vsr.StatusDescription = status.ToString(); vsr.CRLOnlineCheck = true; return(vsr); }
private VerifySignatureResult ConvertToVerifySignatureResult(Return actalisReturn) { VerifySignatureResult vsr = new VerifySignatureResult(); try { List <DocsPaVO.documento.SignerInfo> siLst = null; SignerInfo[] signersInfo = null; if (actalisReturn.signers != null) { siLst = ConvertFromActalisSigner(actalisReturn.signers); signersInfo = siLst.ToArray(); } List <DocsPaVO.documento.PKCS7Document> p7docsLst = new List <DocsPaVO.documento.PKCS7Document>(); DocsPaVO.documento.PKCS7Document p7doc = new DocsPaVO.documento.PKCS7Document { SignersInfo = signersInfo, DocumentFileName = null, Level = 0 }; p7docsLst.Add(p7doc); vsr.PKCS7Documents = p7docsLst.ToArray(); /// ATTNEZIONE DA GESTIRE /// actalisReturn.error quando tutto va bene torna OK, mentre non dovrebbe tornare nulla /// volendo possiamo mettere che se torna OK, la stringa in actalisReturn.error viene eliminata. /// estratto dalla documentazione VOL Pagina 4 /// Error 1..1 Stringa Eventuale codice di errore. Vuoto se non si è verificato nessun errore nella validazione. /// decommentare codice sotto per risolvere il bug /* * if (actalisReturn.error.Equals ("OK")) * actalisReturn.error=""; */ vsr.StatusCode = String.IsNullOrEmpty(actalisReturn.error) ? 0 : 1; vsr.StatusDescription = actalisReturn.error; vsr.CRLOnlineCheck = true; } catch (Exception ex) { string err = string.Format("Errore in toCertificateInfo {0} stk {1}", ex.Message, ex.StackTrace); logger.ErrorFormat(err); vsr.StatusDescription = err; vsr.StatusCode = -1; } return(vsr); }
private EsitoVerifica getResult(Return ret, byte[] originalFile) { VerifySignatureResult vsr = ConvertToVerifySignatureResult(ret); EsitoVerifica retval = new EsitoVerifica { VerifySignatureResult = vsr, content = originalFile }; retval.status = EsitoVerificaStatus.Valid; if (revoked) { retval.status = EsitoVerificaStatus.Revoked; } else if (certExpired) { retval.status = EsitoVerificaStatus.NotTimeValid; } return(retval); }
private static VerifySignatureResult ConvertToVerifySignatureResult(EsitoVerificaStatus status) { VerifySignatureResult vsr = new VerifySignatureResult(); List <DocsPaVO.documento.SignerInfo> siLst = new List <DocsPaVO.documento.SignerInfo>(); { DocsPaVO.documento.SignerInfo si = new DocsPaVO.documento.SignerInfo(); si.CertificateInfo = new DocsPaVO.documento.CertificateInfo { ValidFromDate = DateTime.Parse("2011-03-25T13:57:54+01:00"), ValidToDate = DateTime.Parse("2014-03-25T00:00:00+01:00"), RevocationStatus = (int)EsitoVerificaStatus.Valid, RevocationStatusDescription = EsitoVerificaStatus.Valid.ToString() }; si.SubjectInfo = new DocsPaVO.documento.SubjectInfo { CodiceFiscale = "TTVLFF44P28D969E", CommonName = "Elio Raffaele Ottaviano", CertId = "2011500471127", }; siLst.Add(si); } { DocsPaVO.documento.SignerInfo si = new DocsPaVO.documento.SignerInfo(); si.CertificateInfo = new DocsPaVO.documento.CertificateInfo { ValidFromDate = DateTime.Parse("2008-09-01T14:09:40+02:00"), ValidToDate = DateTime.Parse("2013-12-31T18:00:00+01:00"), RevocationDate = DateTime.Parse("2011-01-21T12:48:17+01:00"), RevocationStatus = (int)EsitoVerificaStatus.Revoked, RevocationStatusDescription = EsitoVerificaStatus.Revoked.ToString() }; si.SubjectInfo = new DocsPaVO.documento.SubjectInfo { CodiceFiscale = "TTVLFF44P28D969E", CommonName = "ELIO RAFFAELE OTTAVIANO", CertId = "12202828:4330:1", }; siLst.Add(si); } List <DocsPaVO.documento.PKCS7Document> p7docsLst = new List <DocsPaVO.documento.PKCS7Document>(); DocsPaVO.documento.PKCS7Document p7doc = new DocsPaVO.documento.PKCS7Document { SignersInfo = siLst.ToArray(), DocumentFileName = null, Level = 0 }; p7docsLst.Add(p7doc); vsr.PKCS7Documents = p7docsLst.ToArray(); vsr.StatusCode = (int)EsitoVerificaStatus.Revoked; vsr.StatusDescription = status.ToString(); vsr.CRLOnlineCheck = true; return(vsr); }
private void BuildTreeView() { FileDocumento signedDocument = this.GetSignedDocumentFromSession(); VerifySignatureResult signatureResult = signedDocument.signatureResult; if (signatureResult != null) { //this.trvDettagliFirma.Nodes.Add(this.GetNodeCheckDocumento(signatureResult)); int documentIndex = 0; Microsoft.Web.UI.WebControls.TreeNode documentNode = null; Microsoft.Web.UI.WebControls.TreeNode parentNode = null; Microsoft.Web.UI.WebControls.TreeNode originalDocument = null; foreach (PKCS7Document document in signatureResult.PKCS7Documents) { // Aggiunta del nodo solo se il documento è p7m documentNode = this.GetNodePKCS7Document(document, documentIndex); if (documentIndex == 0) { this.trvDettagliFirma.Nodes.Add(documentNode); } else { parentNode.Nodes.Add(documentNode); } parentNode = documentNode; documentIndex++; } // Aggiunta del nodo relativo al file originale originalDocument = this.GetNodeDocumentoOriginale(signedDocument); if (parentNode != null) { parentNode.Nodes.Add(originalDocument); } else { this.trvDettagliFirma.Nodes.Add(originalDocument); } //Questo Codice commentato visualizza la marca temporale sulla ROOT del certificato //Per visualizzarla è necessario decommentarla /* * if (signatureResult.tsInfo != null) * { * int idx = 0; * foreach (TSInfo ts in signatureResult.tsInfo) * { * Microsoft.Web.UI.WebControls.TreeNode tsNode = new Microsoft.Web.UI.WebControls.TreeNode(); * tsNode.NavigateUrl = DETAIL_PAGE + "?type=timestamp"; * tsNode.Target = TARGET; * string tsText = "Marca Temporale"; * tsNode.Text = tsText; * this.trvDettagliFirma.Nodes.Add(tsNode); * } * } */ } else { // Il documento non è firmato digitalmente this.trvDettagliFirma.Nodes.Add(this.GetNodeDocumentoOriginale(signedDocument)); } }
private static VerifySignatureResult ConvertToVerifySignatureResultUsingInternalStructures(EsitoVerificaStatus status, FirmaDigitale.DettaglioFirmaDigitaleType d) { VerifySignatureResult vsr = new VerifySignatureResult(); List <DocsPaVO.documento.SignerInfo> siLst = new List <DocsPaVO.documento.SignerInfo>(); string verbosesgb = ConfigurationManager.AppSettings["VERBOSEDEBUG"]; bool verboseDebug = false; Boolean.TryParse(verbosesgb, out verboseDebug); if (verboseDebug) { logger.Debug(d.datiGeneraliVerifica); } if (d.fileMarcatoSpecified) { if (d.dataVerificaFirmaSpecified) { logger.InfoFormat("data verifica firma {0}", d.dataVerificaFirma); } if (d.fileMarcato) { logger.Debug("Marcato"); TSInfo ts = new TSInfo(); if (d.marcaDetached != null) { logger.Debug("marcaDetached !=null"); //Gestire la marca //logger.DebugFormat("TSANameIssuer [{0}]", d.marcaDetached.TSANameIssuer); //logger.DebugFormat("TSANameSubject [{0}]", d.marcaDetached.TSANameSubject); //logger.DebugFormat("TSimprint [{0}]", d.marcaDetached.TSimprint); //logger.DebugFormat("TSserialNumber [{0}]", d.marcaDetached.TSserialNumber); if (!String.IsNullOrEmpty(d.marcaDetached.TSANameIssuer)) { ts.TSANameIssuer = d.marcaDetached.TSANameIssuer; } if (!String.IsNullOrEmpty(d.marcaDetached.TSANameSubject)) { ts.TSANameSubject = d.marcaDetached.TSANameSubject; } if (!String.IsNullOrEmpty(d.marcaDetached.TSimprint)) { ts.TSimprint = d.marcaDetached.TSimprint; } if (!String.IsNullOrEmpty(d.marcaDetached.TSserialNumber)) { ts.TSserialNumber = d.marcaDetached.TSserialNumber; } if (d.marcaDetached.TSdateTimeSpecified) { ts.TSdateTime = d.marcaDetached.TSdateTime; } if (d.marcaDetached.dataFineValiditaCertSpecified) { ts.dataFineValiditaCert = d.marcaDetached.dataFineValiditaCert; } if (d.marcaDetached.dataInizioValiditaCertSpecified) { ts.dataInizioValiditaCert = d.marcaDetached.dataInizioValiditaCert; } } else { //default nel caso la try sotto desse errore ts.TSANameIssuer = "Marca non Detached, dati non disponibili"; //se questo dato ce l'ho lo valido if (d.dataVerificaFirmaSpecified) { ts.TSdateTime = d.dataVerificaFirma; } } } else { } } if (d.datiFirmatari != null) { foreach (FirmaDigitale.FirmatarioType ft in d.datiFirmatari) { //firmatari DocsPaVO.documento.SignerInfo si = ExtractSignerInfo(status, ft.firmatario, ft.marcaFirma); //controfirmatari if (ft.controfirmatario != null) { List <DocsPaVO.documento.SignerInfo> csiLst = new List <DocsPaVO.documento.SignerInfo>(); foreach (FirmaDigitale.FirmatarioTypeControfirmatario cft in ft.controfirmatario) { DocsPaVO.documento.SignerInfo csi = ExtractSignerInfo(status, cft.firma, cft.marca); csi.isCountersigner = true; csiLst.Add(csi); } if (csiLst.Count > 0) { si.counterSignatures = csiLst.ToArray(); } } siLst.Add(si); } } List <DocsPaVO.documento.PKCS7Document> p7docsLst = new List <DocsPaVO.documento.PKCS7Document>(); DocsPaVO.documento.PKCS7Document p7doc = new DocsPaVO.documento.PKCS7Document { SignersInfo = siLst.ToArray(), DocumentFileName = null, Level = 0 }; p7docsLst.Add(p7doc); vsr.PKCS7Documents = p7docsLst.ToArray(); vsr.CRLOnlineCheck = true; return(vsr); }
private static VerifySignatureResult ConvertToVerifySignatureResultUsingDatiGeneraliVerifica(EsitoVerificaStatus status, FirmaDigitale.DettaglioFirmaDigitaleType d) { DeSign.deSign design = null; string verbosesgb = ConfigurationManager.AppSettings["VERBOSEDEBUG"]; bool verboseDebug = false; Boolean.TryParse(verbosesgb, out verboseDebug); try { if (!String.IsNullOrEmpty(d.datiGeneraliVerifica)) { if (verboseDebug) { logger.InfoFormat("Risposta da infocert {0}", d.datiGeneraliVerifica); } design = DeSign.deSign.Deserialize(d.datiGeneraliVerifica); } } catch (Exception e) { logger.ErrorFormat("Errore deserializzando i dati da infocert {0} {1}", e.Message, e.StackTrace); return(null); } VerifySignatureResult vsr = new VerifySignatureResult(); List <DocsPaVO.documento.SignerInfo> siLst = new List <SignerInfo>(); List <DocsPaVO.documento.PKCS7Document> p7docsLst = new List <PKCS7Document>(); string digestAlgo = string.Empty; bool badSignature = false; foreach (object item in design.signedData) { //trattasi di signedData DeSign.signedData sd = item as DeSign.signedData; foreach (DeSign.signer signer in sd.signer) { DocsPaVO.documento.SignerInfo si = convertToSignerInfo(signer); if (si.CertificateInfo.RevocationStatus != 0) { vsr.StatusCode = si.CertificateInfo.RevocationStatus; vsr.StatusDescription = si.CertificateInfo.RevocationStatusDescription; } digestAlgo = convertOidToString(signer.digestAlgorithm); if (signer.status == "KO") { if (!badSignature) { badSignature = true; } } siLst.Add(si); } } List <TSInfo> tsList = new List <TSInfo>(); foreach (object item in design.timeStamp) { //trattasi di signedData DeSign.timeStamp ts = item as DeSign.timeStamp; TSInfo tsi = new TSInfo { dataInizioValiditaCert = convertSimpleDateTime(ts.certNotBefore), dataFineValiditaCert = convertSimpleDateTime(ts.certNotAfter), TSdateTime = convertSimpleDateTime(ts.timeStampDate), TSimprint = ts.timeStampImprint, TSANameIssuer = ts.issuer.CN, TSANameSubject = ts.subject.CN, TSserialNumber = ts.timeStampSerial, TSType = TsType.PKCS }; tsList.Add(tsi); } if (tsList.Count > 0) { vsr.DocumentTimeStampInfo = tsList.ToArray(); } p7docsLst.Add(new PKCS7Document { SignersInfo = siLst.ToArray(), DocumentFileName = null, Level = 0 }); vsr.PKCS7Documents = p7docsLst.ToArray(); vsr.CRLOnlineCheck = true; if ((badSignature) && (vsr.StatusCode == 0)) { vsr.StatusCode = -1; } return(vsr); }