private static DocsPaVO.documento.SignerInfo ExtractSignerInfo(EsitoVerificaStatus status, FirmaDigitale.DatiFirmaType firmatario, FirmaDigitale.MarcaType marcaFirma) { DocsPaVO.documento.SignerInfo si = new DocsPaVO.documento.SignerInfo(); if (firmatario != null) { // firmatari si.CertificateInfo = new DocsPaVO.documento.CertificateInfo { ValidFromDate = firmatario.dataInizioValiditaCert, ValidToDate = firmatario.dataFineValiditaCert, RevocationStatusDescription = status.ToString(), RevocationStatus = (int)status, IssuerName = "CN=" + firmatario.cnCertAuthority, SerialNumber = firmatario.serialNumber, SubjectName = firmatario.commonName, SignatureAlgorithm = "N.D.", ThumbPrint = "N.D" }; if (firmatario.dataRevocaCertificato != DateTime.MinValue) { si.CertificateInfo.RevocationStatus = 4; //Revocato si.CertificateInfo.RevocationDate = firmatario.dataRevocaCertificato; } si.SubjectInfo = new DocsPaVO.documento.SubjectInfo { CodiceFiscale = firmatario.codiceFiscale, CommonName = firmatario.commonName, CertId = firmatario.distinguishName, Organizzazione = firmatario.organizzazione, SerialNumber = firmatario.serialNumber, Nome = firmatario.nome, Cognome = firmatario.cognome, Country = firmatario.nazione }; si.SignatureAlgorithm = convertOidToString(firmatario.digestAlgorithm); } if (marcaFirma != null) { List <TSInfo> tsList = new List <TSInfo>(); TSInfo tsi = new TSInfo { dataInizioValiditaCert = marcaFirma.dataInizioValiditaCert, dataFineValiditaCert = marcaFirma.dataFineValiditaCert, TSdateTime = marcaFirma.TSdateTime, TSimprint = marcaFirma.TSimprint, TSANameIssuer = marcaFirma.TSANameIssuer, TSANameSubject = marcaFirma.TSANameSubject, TSserialNumber = marcaFirma.TSserialNumber, TSType = TsType.PKCS }; tsList.Add(tsi); si.SignatureTimeStampInfo = tsList.ToArray(); } return(si); }
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); }
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 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)); } }
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 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); }