Exemple #1
0
        private static FirmaDigitale extractFirmaDigitale(DocsPaVO.documento.FileDocumento fileDoc)
        {
            VerifySignature verifySignature = new VerifySignature();
            string          inputDirectory  = verifySignature.GetPKCS7InputDirectory();

            // Creazione cartella di appoggio nel caso non esista
            if (!System.IO.Directory.Exists(inputDirectory))
            {
                System.IO.Directory.CreateDirectory(inputDirectory);
            }

            string inputFile = string.Concat(inputDirectory, fileDoc.name);

            // Copia del file firmato dalla cartella del documentale
            // alla cartella di input utilizzata dal ws della verifica
            CopySignedFileToInputFolder(fileDoc, inputFile);

            fileDoc.signatureResult = verifySignature.Verify(fileDoc.name);

            try
            {
                // Rimozione del file firmato dalla cartella di input
                System.IO.File.Delete(inputFile);
            }
            catch
            {
            }

            if (fileDoc.signatureResult == null)
            {
                return(null);
            }


            FirmaDigitale fd = null;

            if (fileDoc.signatureResult.PKCS7Documents != null)
            {
                fd = new FirmaDigitale();
                foreach (PKCS7Document p7m in fileDoc.signatureResult.PKCS7Documents)
                {
                    if (p7m.SignersInfo != null)
                    {
                        DocsPaVO.documento.SignerInfo si = p7m.SignersInfo.FirstOrDefault();
                        CnipaParser cp = new CnipaParser();
                        cp.ParseCNIPASubjectInfo(ref si.SubjectInfo, si.CertificateInfo.SubjectName);
                        fd.Certificato = String.Format("{0} {1} {2}", "<![CDATA[", Utils.SerializeObject <CertificateInfo>(si.CertificateInfo, true), "]]>");
                        fd.DatiFirma   = String.Format("{0} {1} {2}", "<![CDATA[", Utils.SerializeObject <SubjectInfo>(si.SubjectInfo, true), "]]>");

                        fd.Titolare = new Titolare
                        {
                            CodiceFiscale = si.SubjectInfo.CodiceFiscale,
                            Nome          = si.SubjectInfo.Nome,
                            Cognome       = si.SubjectInfo.Cognome
                        };
                    }
                }
            }
            return(fd);
        }
Exemple #2
0
        public DocsPaVO.documento.SignerInfo ExtractSignerInfo(X509Certificate2 cert)
        {
            DocsPaVO.documento.SignerInfo signerInfo = new DocsPaVO.documento.SignerInfo();

            signerInfo.CertificateInfo.RevocationStatus = CheckCertificate(cert);
            //signerInfo.CertificateInfo.X509Certificate = cert1.GetEncoded();

            signerInfo.CertificateInfo.RevocationStatusDescription = DecodeStatus(signerInfo.CertificateInfo.RevocationStatus);
            ParseCNIPASubjectInfo(ref signerInfo.SubjectInfo, cert.SubjectName.Name);

            signerInfo.CertificateInfo.IssuerName         = cert.IssuerName.Name;
            signerInfo.CertificateInfo.SerialNumber       = cert.SerialNumber;
            signerInfo.CertificateInfo.SignatureAlgorithm = cert.SignatureAlgorithm.FriendlyName;
            signerInfo.CertificateInfo.SubjectName        = cert.SubjectName.Name;
            signerInfo.CertificateInfo.ValidFromDate      = cert.NotBefore;
            signerInfo.CertificateInfo.ValidToDate        = cert.NotAfter;
            signerInfo.CertificateInfo.ThumbPrint         = cert.Thumbprint;

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("CertificateInfo.IssuerName: '{0}'", signerInfo.CertificateInfo.IssuerName);
            sb.AppendFormat("CertificateInfo.SerialNumber: '{0}'", signerInfo.CertificateInfo.SerialNumber);
            sb.AppendFormat("CertificateInfo.SignatureAlgorithm: '{0}'", signerInfo.CertificateInfo.SignatureAlgorithm);
            sb.AppendFormat("CertificateInfo.SubjectName: '{0}'", signerInfo.CertificateInfo.SubjectName);
            sb.AppendFormat("CertificateInfo.ValidFromDate: '{0}'", signerInfo.CertificateInfo.ValidFromDate);
            sb.AppendFormat("CertificateInfo.ValidToDate: '{0}'", signerInfo.CertificateInfo.ValidToDate);
            sb.AppendFormat("CertificateInfo.ThumbPrint: '{0}'", signerInfo.CertificateInfo.ThumbPrint);

            return(signerInfo);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        public DocsPaVO.documento.SignerInfo GetCertSignersInfo(Org.BouncyCastle.X509.X509Certificate cert1)
        {
            DocsPaVO.documento.SignerInfo retval = new DocsPaVO.documento.SignerInfo();
            retval.SubjectInfo = new DocsPaVO.documento.SubjectInfo();
            string Subject = buildSubject(cert1.SubjectDN);

            ParseCNIPASubjectInfo(ref retval.SubjectInfo, Subject);
            retval.CertificateInfo.IssuerName         = cert1.IssuerDN.ToString();
            retval.CertificateInfo.SerialNumber       = BitConverter.ToString(cert1.SerialNumber.ToByteArray()).Replace("-", "");
            retval.CertificateInfo.SignatureAlgorithm = cert1.SigAlgName;
            retval.CertificateInfo.SubjectName        = Subject;
            retval.CertificateInfo.ValidFromDate      = cert1.NotBefore.ToLocalTime();
            retval.CertificateInfo.ValidToDate        = cert1.NotAfter.ToLocalTime();
            retval.CertificateInfo.ThumbPrint         = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(cert1.GetEncoded())).Replace("-", "");
            retval.CertificateInfo.X509Certificate    = cert1.GetEncoded();
            // controlla revoca
            X509Certificate2 cert = new X509Certificate2(cert1.GetEncoded());

            retval.CertificateInfo.RevocationStatus            = CheckCertificate(cert);
            retval.CertificateInfo.RevocationStatusDescription = DecodeStatus(retval.CertificateInfo.RevocationStatus);

            return(retval);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        private DocsPaVO.documento.SignerInfo ExtractSignerInfo(List <string> ErrorMessageLst, IX509Store store, SignerInformation signer)
        {
            DocsPaVO.documento.SignerInfo         thisSinger = new DocsPaVO.documento.SignerInfo();
            Org.BouncyCastle.X509.X509Certificate cert1      = GetCertificate(signer, store);
            try
            {
                if (!signer.Verify(cert1))
                {
                    ErrorMessageLst.Add("Not valid signature");
                }
            }
            catch (Exception e)
            {
                ErrorMessageLst.Add(e.Message);
            }

            thisSinger.isCountersigner = signer.IsCounterSignature;
            if (signer.SignedAttributes != null)
            {
                if (signer.SignedAttributes[Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.IdAASigningCertificateV2] == null)
                {
                    ErrorMessageLst.Add("Id-AA-SigningCertificateV2 not found");
                }

                if (signer.SignedAttributes[CmsAttributes.MessageDigest] == null)
                {
                    ErrorMessageLst.Add("Pkcs9AtMessageDigest not found");
                }


                if (!signer.IsCounterSignature) //Pare che i controfirmatari non ncessitino di questo parametro
                {
                    if (signer.SignedAttributes[Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.Pkcs9AtContentType] == null)
                    {
                        ErrorMessageLst.Add("Pkcs9AtContentType not found");
                    }
                }

                thisSinger.SignatureAlgorithm = Org.BouncyCastle.Security.DigestUtilities.GetAlgorithmName(signer.DigestAlgorithmID.ObjectID);
                if (signer.SignedAttributes[CmsAttributes.SigningTime] != null)
                {
                    Org.BouncyCastle.Asn1.Cms.Attribute sigTime = signer.SignedAttributes[CmsAttributes.SigningTime];
                    if (sigTime.AttrValues.Count > 0)
                    {
                        try
                        {
                            thisSinger.SigningTime = GetSigningTime(sigTime.AttrValues[0]);
                        }
                        catch (Exception e)
                        {
                            ErrorMessageLst.Add("Error retriving SigningTime");
                        }
                    }
                }
            }
            else
            {
                ErrorMessageLst.Add("Missing SignedAttributes");
            }

            if (gestioneTSFirma)
            {
                List <TSInfo> tsArr = new List <TSInfo>();
                if (signer.UnsignedAttributes != null && signer.UnsignedAttributes[Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.IdAASignatureTimeStampToken] != null)
                {
                    ICollection ret = Org.BouncyCastle.Tsp.TspUtil.GetSignatureTimestamps(signer);
                    foreach (Org.BouncyCastle.Tsp.TimeStampToken token in ret)
                    {
                        VerifyTimeStamp verifyTimeStamp = new VerifyTimeStamp();
                        ICollection     certsColl       = token.GetCertificates("COLLECTION").GetMatches(null);
                        TSInfo          timeStamp       = verifyTimeStamp.getTSCertInfo(certsColl);

                        timeStamp.TSdateTime     = token.TimeStampInfo.GenTime.ToLocalTime();
                        timeStamp.TSserialNumber = token.TimeStampInfo.SerialNumber.ToString();
                        timeStamp.TSimprint      = Convert.ToBase64String(token.TimeStampInfo.TstInfo.MessageImprint.GetEncoded());
                        timeStamp.TSdateTime     = token.TimeStampInfo.GenTime;
                        timeStamp.TSType         = TsType.PKCS;
                        tsArr.Add(timeStamp);
                    }
                }

                if (tsArr.Count > 0)
                {
                    thisSinger.SignatureTimeStampInfo = tsArr.ToArray();
                }
            }
            X509Certificate2 cert = new X509Certificate2(cert1.GetEncoded());

            thisSinger.CertificateInfo.RevocationStatus = CheckCertificate(cert);
            thisSinger.CertificateInfo.X509Certificate  = cert1.GetEncoded();

            thisSinger.CertificateInfo.RevocationStatusDescription = DecodeStatus(thisSinger.CertificateInfo.RevocationStatus);
            ParseCNIPASubjectInfo(ref thisSinger.SubjectInfo, cert.SubjectName.Name);

            thisSinger.CertificateInfo.IssuerName         = cert.IssuerName.Name;
            thisSinger.CertificateInfo.SerialNumber       = cert.SerialNumber;
            thisSinger.CertificateInfo.SignatureAlgorithm = cert.SignatureAlgorithm.FriendlyName;
            thisSinger.CertificateInfo.SubjectName        = cert.SubjectName.Name;
            thisSinger.CertificateInfo.ValidFromDate      = cert.NotBefore;
            thisSinger.CertificateInfo.ValidToDate        = cert.NotAfter;
            thisSinger.CertificateInfo.ThumbPrint         = cert.Thumbprint;

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat("CertificateInfo.IssuerName: '{0}'", thisSinger.CertificateInfo.IssuerName);
            sb.AppendFormat("CertificateInfo.SerialNumber: '{0}'", thisSinger.CertificateInfo.SerialNumber);
            sb.AppendFormat("CertificateInfo.SignatureAlgorithm: '{0}'", thisSinger.CertificateInfo.SignatureAlgorithm);
            sb.AppendFormat("CertificateInfo.SubjectName: '{0}'", thisSinger.CertificateInfo.SubjectName);
            sb.AppendFormat("CertificateInfo.ValidFromDate: '{0}'", thisSinger.CertificateInfo.ValidFromDate);
            sb.AppendFormat("CertificateInfo.ValidToDate: '{0}'", thisSinger.CertificateInfo.ValidToDate);
            sb.AppendFormat("CertificateInfo.ThumbPrint: '{0}'", thisSinger.CertificateInfo.ThumbPrint);
            //DocsPaUtils.LogsManagement.Debugger.Write(string.Format("SignedDocument.Verify - {0}", sb.ToString()));


            //gestione controfirma
            if (signer.UnsignedAttributes != null)
            {
                if (signer.UnsignedAttributes[CmsAttributes.CounterSignature] != null)
                {
                    List <DocsPaVO.documento.SignerInfo> cSigsList = new List <DocsPaVO.documento.SignerInfo>();
                    List <string>          csignErrs         = new List <string> ();
                    SignerInformationStore counterSignatures = signer.GetCounterSignatures();
                    foreach (SignerInformation conunterSig in counterSignatures.GetSigners())
                    {
                        DocsPaVO.documento.SignerInfo cSigs = ExtractSignerInfo(csignErrs, store, conunterSig);
                        cSigsList.Add(cSigs);
                    }
                    if (csignErrs.Count > 0)
                    {
                        ErrorMessageLst.AddRange(csignErrs);
                    }
                    if (cSigsList.Count > 0)
                    {
                        thisSinger.counterSignatures = cSigsList.ToArray();
                    }
                }
            }
            return(thisSinger);
        }
Exemple #8
0
        /// <summary>
        /// Verify PKCS7 signature
        /// </summary>
        /// <returns>CAPICOM/CryptoAPI return code or an ApplicationException in file hash doesn't match</returns>
        public bool Verify(ref List <string> ErrorMessageLst)
        {
            bool rc = true;

            //DocsPaUtils.LogsManagement.Debugger.Write("SignedDocument.Verify - INIT");
            try
            {
                // Decodifica un messaggio SignedCms codificato.
                // Al completamento della decodifica, è possibile recuperare le
                // informazioni decodificate dalle proprietà dell'oggetto SignedCms.
                CmsSignedData          cms     = new CmsSignedData(this.GetSignedContent(this._buf));
                IX509Store             store   = cms.GetCertificates("Collection");
                SignerInformationStore signers = cms.GetSignerInfos();


                SignedData da = SignedData.GetInstance(cms.ContentInfo.Content.ToAsn1Object());

                Asn1Sequence DigAlgAsn1 = null;
                if (da.DigestAlgorithms.Count > 0)
                {
                    DigAlgAsn1 = da.DigestAlgorithms[0].ToAsn1Object() as Asn1Sequence;
                }

                if (DigAlgAsn1 != null)
                {
                    this._SignAlgorithm = Org.BouncyCastle.Security.DigestUtilities.GetAlgorithmName(AlgorithmIdentifier.GetInstance(DigAlgAsn1).ObjectID);
                }


                //DocsPaUtils.LogsManagement.Debugger.Write("SignedDocument.Verify - Decode signed message");

                //  Verify signature. Do not validate signer
                //  certificate for the purposes of this example.
                //  Note that in a production environment, validating
                //  the signer certificate chain will probably
                //  be necessary.

                /*
                 * verifica le firme digitali nel messaggio CMS/PKCS #7 firmato e,
                 * facoltativamente, convalida i certificati del firmatario.
                 *
                 * * Se verifySignatureOnly è true, vengono verificate solo le firme digitali.
                 * Se è false, vengono verificate le firme digitali e vengono convalidati
                 * i certificati dei firmatari e gli scopi dei certificati.
                 * Gli scopi di un certificato sono considerati validi se il certificato
                 * non prevede l'utilizzo della chiave o se l'utilizzo della chiave supporta
                 * le firme digitali o il non-rifiuto.
                 *
                 */
                //_signersInfo = new DocsPaVO.documento.SignerInfo[signers.GetSigners().Count];
                //int i = 0;

                List <DocsPaVO.documento.SignerInfo> signInfoLst = new List <DocsPaVO.documento.SignerInfo>();
                foreach (SignerInformation signer in signers.GetSigners())
                {
                    DocsPaVO.documento.SignerInfo thisSinger = ExtractSignerInfo(ErrorMessageLst, store, signer);
                    signInfoLst.Add(thisSinger);
                }

                _signersInfo = signInfoLst.ToArray();
                //DocsPaUtils.LogsManagement.Debugger.Write(string.Format("SignedDocument.Verify - CheckSignature OK, signers count: {0}", signers.GetSigners().Count));
                CmsProcessable signedContent = cms.SignedContent;
                this._content = (byte[])signedContent.GetContent();

                if ((this._SignAlgorithm != null) && this._content != null)
                {
                    try
                    {
                        this._SignHash = BitConverter.ToString(Org.BouncyCastle.Security.DigestUtilities.CalculateDigest(this._SignAlgorithm, this._content)).Replace("-", "");
                    }
                    catch (Exception e)
                    {
                        ErrorMessageLst.Add(e.Message);
                    }
                }

                //DocsPaUtils.LogsManagement.Debugger.Write(string.Format("SignedDocument.Verify - Extact content, lenght: {0}", this._content.Length));

                this._documentFileName = GetDocumentFileName();
                this._SignType         = "CADES";
                //DocsPaUtils.LogsManagement.Debugger.Write(string.Format("SignedDocument.Verify - DocumentFileName: '{0}'", this._documentFileName));
            }
            catch (Exception ex)
            {
                rc = false;
                //DocsPaUtils.LogsManagement.Debugger.Write("SignedDocument.Verify - Si è verificato un errore nella verifica della firma", ex);
                //throw new ApplicationException(ex.Message);
                ErrorMessageLst.Add(ex.Message);
            }
            finally
            {
                //DocsPaUtils.LogsManagement.Debugger.Write("SignedDocument.Verify - END");
            }

            return(rc);
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
        }