コード例 #1
0
        /// <summary>
        /// Estrae determinati dati del certificato dal timestamp
        /// </summary>
        /// <param name="certsColl"></param>
        /// <returns></returns>
        public DocsPaVO.documento.TSInfo getTSCertInfo(ICollection certsColl)
        {
            DocsPaVO.documento.TSInfo retval = new DocsPaVO.documento.TSInfo();

            try
            {
                foreach (object obj in certsColl)
                {
                    retval.dataInizioValiditaCert = (DateTime)getProps("NotBefore", obj);
                    retval.dataFineValiditaCert   = (DateTime)getProps("NotAfter", obj);

                    string issuer  = (string)getProps("IssuerDN", obj).ToString();
                    string subject = (string)getProps("SubjectDN", obj).ToString();

                    DocsPaVO.documento.SubjectInfo subjectInfo = new DocsPaVO.documento.SubjectInfo();
                    SignedDocument sd = new SignedDocument();
                    sd.ParseCNIPASubjectInfo(ref subjectInfo, issuer);
                    retval.TSANameIssuer = subjectInfo.CommonName;

                    sd.ParseCNIPASubjectInfo(ref subjectInfo, subject);
                    retval.TSANameSubject = subjectInfo.CommonName;
                    break; //solo il primo
                }
            } catch {}
            return(retval);
        }
コード例 #2
0
        public DocsPaVO.documento.TSInfo getTSCertInfo(string base64TSR)
        {
            TimeStampResponse resp = getTsRes(Convert.FromBase64String(base64TSR));

            ICollection certsColl = resp.TimeStampToken.GetCertificates("COLLECTION").GetMatches(null);

            DocsPaVO.documento.TSInfo retval = getTSCertInfo(certsColl);
            retval.TSdateTime     = resp.TimeStampToken.TimeStampInfo.GenTime.ToLocalTime();
            retval.TSserialNumber = resp.TimeStampToken.TimeStampInfo.SerialNumber.ToString();
            retval.TSimprint      = Convert.ToBase64String(resp.TimeStampToken.TimeStampInfo.TstInfo.MessageImprint.GetEncoded());
            retval.TSdateTime     = resp.TimeStampToken.TimeStampInfo.GenTime;
            retval.TSType         = DocsPaVO.documento.TsType.TSR;
            return(retval);
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fileDoc"></param>
        /// <returns></returns>
        public static bool VerifyPadesSignature(DocsPaVO.documento.FileDocumento fileDoc)
        {
            SignedDocument  si = new SignedDocument();
            VerifyTimeStamp verifyTimeStamp = new VerifyTimeStamp();

            string padesSignAlgorithm = null;

            dpaItextSharp.text.pdf.PdfReader pdfReader = null;
            try
            {
                pdfReader = new dpaItextSharp.text.pdf.PdfReader(fileDoc.content);
            }
            catch
            {
                return(false);
            }

            dpaItextSharp.text.pdf.AcroFields af = pdfReader.AcroFields;
            List <string> signNames = af.GetSignatureNames().Cast <string>().ToList <string>();

            if (signNames.Count == 0) //Firma non è presente
            {
                return(false);
            }

            List <DocsPaVO.documento.SignerInfo> siList = new List <DocsPaVO.documento.SignerInfo>();
            bool verResult = true;


            foreach (string name in signNames)
            {
                List <DocsPaVO.documento.TSInfo> tsLst = new List <DocsPaVO.documento.TSInfo>();
                dpaItextSharp.text.pdf.PdfPKCS7  pk    = af.VerifySignature(name);

                try
                {
                    padesSignAlgorithm = "PADES " + pk.GetHashAlgorithm();
                }
                catch (Exception exalg)
                {
                    padesSignAlgorithm = "PADES : errore ricavando l'algo Hash:" + exalg.Message;
                }

                byte[] cert = pk.SigningCertificate.GetEncoded();
                DocsPaVO.documento.SignerInfo sinfo = si.GetCertSignersInfo(cert);
                sinfo.SignatureAlgorithm = padesSignAlgorithm;
                sinfo.SigningTime        = pk.SignDate;
                if (verResult) //fino a che è true verifica
                {
                    verResult = pk.Verify();
                }

                if (pk.TimeStampToken != null)
                {
                    //Ricavo il certificato
                    ICollection certsColl = pk.TimeStampToken.GetCertificates("COLLECTION").GetMatches(null);
                    DocsPaVO.documento.TSInfo timeStamp = verifyTimeStamp.getTSCertInfo(certsColl);

                    timeStamp.TSdateTime     = pk.TimeStampToken.TimeStampInfo.GenTime.ToLocalTime();
                    timeStamp.TSserialNumber = pk.TimeStampToken.TimeStampInfo.SerialNumber.ToString();
                    timeStamp.TSimprint      = Convert.ToBase64String(pk.TimeStampToken.TimeStampInfo.TstInfo.MessageImprint.GetEncoded());
                    timeStamp.TSType         = DocsPaVO.documento.TsType.PADES;
                    tsLst.Add(timeStamp);
                }
                if (tsLst.Count > 0)
                {
                    sinfo.SignatureTimeStampInfo = tsLst.ToArray();
                }

                siList.Add(sinfo);
            }

            DocsPaVO.documento.VerifySignatureResult result = new DocsPaVO.documento.VerifySignatureResult();

            if (verResult)
            {
                result.StatusCode        = 0;
                result.StatusDescription = "La Verifica OK, ma senza controllo CRL";
            }
            else
            {
                result.StatusCode        = -1;
                result.StatusDescription = "La Verifica di almeno un firmatario e Fallita";
            }

            List <DocsPaVO.documento.PKCS7Document> pkcsDocs = new List <DocsPaVO.documento.PKCS7Document>();

            if ((fileDoc.signatureResult != null) && (fileDoc.signatureResult.PKCS7Documents != null) && (fileDoc.signatureResult.PKCS7Documents.Length > 0))
            {
                foreach (DocsPaVO.documento.PKCS7Document docs in fileDoc.signatureResult.PKCS7Documents)
                {
                    pkcsDocs.Add(docs);
                }
            }

            pkcsDocs.Add(new DocsPaVO.documento.PKCS7Document {
                SignersInfo = siList.ToArray(), SignAlgorithm = padesSignAlgorithm, DocumentFileName = fileDoc.nomeOriginale, SignHash = "Non Disponibile per la firma PADES", SignatureType = DocsPaVO.documento.SignType.PADES
            });
            result.PKCS7Documents    = pkcsDocs.ToArray();
            result.FinalDocumentName = fileDoc.name;
            fileDoc.signatureResult  = result;

            return(false);
        }