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); }
public EsitoVerifica VerificaByteEV(byte[] fileContents, string endPoint, Object[] args) { EsitoVerifica ev = new EsitoVerifica(); string dataVerificaString = string.Empty; DateTime?dataverificaDT; if (args.Length > 0) { dataverificaDT = args[0] as DateTime?; if (dataverificaDT == null) { dataVerificaString = args[0] as string; if (dataVerificaString == null) { ev.status = EsitoVerificaStatus.ErroreGenerico; return(ev); } } else { dataVerificaString = zeniDateConverter(dataverificaDT); } } System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3; FirmaDigitale.FirmaDigitalePortTypeClient client = createClient(endPoint); FirmaDigitale.DocumentoType doc = new FirmaDigitale.DocumentoType(); FirmaDigitale.DettaglioFirmaDigitaleType ret = null; try { sbyte?arg1 = 0; sbyte?arg2 = 0; sbyte?arg3 = 1; ret = client.VerificaFirma(fileContents, arg1, arg2, dataVerificaString, arg3, out doc); ev.status = EsitoVerificaStatus.Valid; ev.content = doc.fileOriginale; if (ret != null) { ev.VerifySignatureResult = ConvertToVerifySignatureResult(ev.status, ret); } ; return(ev); } catch (FaultException <FirmaDigitale.FaultType> f) { ev.status = EsitoVerificaStatus.ErroreGenerico; ev.message = f.Detail.userMessage; ev.errorCode = f.Detail.errorCode; return(ev); } catch (FaultException <FirmaDigitale.WarningResponseType> w) { List <string> lstW = new List <string> (); foreach (FirmaDigitale.WarningType s in w.Detail.WarinigFault) { lstW.Add(Utils.SerializeObject <FirmaDigitale.WarningType>(s)); ev.message = s.errorMsg; ev.errorCode = s.errorCode; ev.SubjectDN = s.SubjectDN; ev.SubjectCN = s.SubjectCN; ev.status = EsitoVerificaStatus.ErroreGenerico; if (s.errorCode == "1468") { ev.status = EsitoVerificaStatus.SHA1NonSupportato; } if (s.errorCode == "1407") // check { ev.status = EsitoVerificaStatus.NotTimeValid; } if (s.errorCode == "1408") // check { ev.status = EsitoVerificaStatus.Revoked; foreach (FirmaDigitale.FirmatarioType ft in w.Detail.DettaglioFirmaDigitale.datiFirmatari) { if (ft.firmatario.dataRevocaCertificato != DateTime.MinValue) { ev.dataRevocaCertificato = ft.firmatario.dataRevocaCertificato; } } } } //TEST!!!! FirmaDigitale.DettaglioFirmaDigitaleType d = w.Detail.DettaglioFirmaDigitale; ev.content = w.Detail.Documento.fileOriginale; ev.VerifySignatureResult = ConvertToVerifySignatureResult(ev.status, d);; ev.additionalData = lstW.ToArray(); return(ev); } }
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); }
public EsitoVerifica VerificaByteEVCompleta(byte[] fileContents, DateTime?dataverificaDT, FirmaDigitale.FirmaDigitalePortTypeClient client) { logger.Debug("INIZIO"); logger.Debug("VERIFICA FIRMA COMPLETA"); string verbosesgb = ConfigurationManager.AppSettings["VERBOSEDEBUG"]; bool verboseDebug = false; Boolean.TryParse(verbosesgb, out verboseDebug); EsitoVerifica ev = new EsitoVerifica(); FirmaDigitale.DettaglioFirmaDigitaleType ret = null; string dataVerificaString = string.Empty; try { if (dataverificaDT != null) { dataVerificaString = zeniDateConverter(dataverificaDT); } else { dataVerificaString = null; } System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Ssl3; } catch (Exception ex) { string inner = string.Empty; ev.status = EsitoVerificaStatus.ErroreGenerico; if (ex.InnerException != null) { inner = ex.InnerException.Message; } ev.message = string.Format("{0},{1} INNER {2} ", ex.Message, ex.StackTrace, inner); return(ev); } try { sbyte?controlloFirmeAnnidate = 1; logger.Debug("Data Verifica: " + dataVerificaString + " (" + dataverificaDT.ToString() + ")"); FirmaDigitale.DocumentoType doc = new FirmaDigitale.DocumentoType(); ret = client.VerificaFirmaCompleta(fileContents, dataVerificaString, controlloFirmeAnnidate, out doc); ev.status = EsitoVerificaStatus.Valid; if (ret != null) { ev.VerifySignatureResult = ConvertToVerifySignatureResult(ev.status, ret); } ; if (verboseDebug) { logger.Info(Utils.SerializeObject <EsitoVerifica>(ev)); } logger.Debug("Firma OK"); return(ev); } catch (FaultException <FirmaDigitale.FaultType> f) { ev.status = EsitoVerificaStatus.ErroreGenerico; ev.message = f.Detail.userMessage; ev.errorCode = f.Detail.errorCode; logger.Error("errore in verifica firma completa:" + ev.message); if (logger.IsInfoEnabled) { logger.Info(Utils.SerializeObject <EsitoVerifica>(ev)); } return(ev); } catch (FaultException <FirmaDigitale.WarningResponseType> w) { List <string> lstW = new List <string>(); foreach (FirmaDigitale.WarningType s in w.Detail.WarningFault) { lstW.Add(Utils.SerializeObject <FirmaDigitale.WarningType>(s)); ev.message = s.errorMsg; ev.errorCode = s.errorCode; ev.SubjectDN = s.SubjectDN; ev.SubjectCN = s.SubjectCN; ev.status = EsitoVerificaStatus.ErroreGenerico; if (s.errorCode == "1426") { ev.status = EsitoVerificaStatus.CtlNotTimeValid; } if (s.errorCode == "1468") { ev.status = EsitoVerificaStatus.SHA1NonSupportato; } if (s.errorCode == "1407") // check { ev.status = EsitoVerificaStatus.NotTimeValid; } if (s.errorCode == "1408") // check { ev.status = EsitoVerificaStatus.Revoked; foreach (FirmaDigitale.FirmatarioType ft in w.Detail.DettaglioFirmaDigitale.datiFirmatari) { if (ft.firmatario.dataRevocaCertificato != DateTime.MinValue) { ev.dataRevocaCertificato = ft.firmatario.dataRevocaCertificato; } } } } //TEST!!!! FirmaDigitale.DettaglioFirmaDigitaleType d = w.Detail.DettaglioFirmaDigitale; if (w.Detail.Documento != null) { ev.content = w.Detail.Documento.fileOriginale; } ev.VerifySignatureResult = ConvertToVerifySignatureResult(ev.status, d);; ev.additionalData = lstW.ToArray(); logger.Debug("Firma verificata con warning"); if (logger.IsInfoEnabled) { logger.Info(Utils.SerializeObject <EsitoVerifica>(ev)); } return(ev); } catch (Exception ex) { ev.status = EsitoVerificaStatus.ErroreGenerico; ev.message = string.Format("{0},{1}", ex.Message, ex.StackTrace); logger.Error(ev.message); if (logger.IsInfoEnabled) { logger.Info(Utils.SerializeObject <EsitoVerifica>(ev)); } return(ev); } }
private static VerifySignatureResult ConvertToVerifySignatureResult(EsitoVerificaStatus status, FirmaDigitale.DettaglioFirmaDigitaleType d) { string usedgv = ConfigurationManager.AppSettings["USEDATIGENERALIVERIFICA"]; bool UseDatiGeneraliVerifica = false; Boolean.TryParse(usedgv, out UseDatiGeneraliVerifica); if (!UseDatiGeneraliVerifica) { return(ConvertToVerifySignatureResultUsingInternalStructures(status, d)); } else { return(ConvertToVerifySignatureResultUsingDatiGeneraliVerifica(status, d)); } }