iTextSharp.text.pdf.security.PdfPKCS7.Verify C# (CSharp) Метод

Verify() публичный Метод

public Verify ( ) : bool
Результат bool
        public bool Verify()
        {
            if (verified)
                return verifyResult;
            if (isTsp) {
                TimeStampTokenInfo info = timeStampToken.TimeStampInfo;
                MessageImprint imprint = info.TstInfo.MessageImprint;
                byte[] md = new byte[messageDigest.GetDigestSize()];
                messageDigest.DoFinal(md, 0);
                byte[] imphashed = imprint.GetHashedMessage();
                verifyResult = Arrays.AreEqual(md, imphashed);
            }
            else {
                if (sigAttr != null) {
                    byte[] msgDigestBytes = new byte[messageDigest.GetDigestSize()];
                    messageDigest.DoFinal(msgDigestBytes, 0);
                    bool verifyRSAdata = true;
                    sig.BlockUpdate(sigAttr, 0, sigAttr.Length);
                    // Stefan Santesson fixed a bug, keeping the code backward compatible
                    bool encContDigestCompare = false;
                    if (RSAdata != null) {
                        verifyRSAdata = Arrays.AreEqual(msgDigestBytes, RSAdata);
                        encContDigest.BlockUpdate(RSAdata, 0, RSAdata.Length);
                        byte[] encContDigestBytes = new byte[encContDigest.GetDigestSize()];
                        encContDigest.DoFinal(encContDigestBytes, 0);
                        encContDigestCompare = Arrays.AreEqual(encContDigestBytes, digestAttr);
                    }
                    bool absentEncContDigestCompare = Arrays.AreEqual(msgDigestBytes, digestAttr);
                    bool concludingDigestCompare = absentEncContDigestCompare || encContDigestCompare;
                    bool sigVerify = sig.VerifySignature(digest);
                    verifyResult = concludingDigestCompare && sigVerify && verifyRSAdata;
                    //verifyResult = Arrays.AreEqual(msgDigestBytes, digestAttr) && sig.VerifySignature(digest) && verifyRSAdata;
                }
                else {
                    if (RSAdata != null){
                        byte[] msd = new byte[messageDigest.GetDigestSize()];
                        messageDigest.DoFinal(msd, 0);
                        sig.BlockUpdate(msd, 0, msd.Length);
                    }
                    verifyResult = sig.VerifySignature(digest);
                }
            }
            verified = true;
            return verifyResult;
        }

Usage Example

Пример #1
0
        /**
         * Checks if the signature covers the whole document
         * and throws an exception if the document was altered
         * @return a PdfPKCS7 object
         * @throws GeneralSecurityException
         */
        virtual protected PdfPKCS7 CoversWholeDocument()
        {
            PdfPKCS7 pkcs7 = fields.VerifySignature(signatureName);

            if (fields.SignatureCoversWholeDocument(signatureName))
            {
                LOGGER.Info("The timestamp covers whole document.");
            }
            else
            {
                throw new VerificationException(null, "Signature doesn't cover whole document.");
            }
            if (pkcs7.Verify())
            {
                LOGGER.Info("The signed document has not been modified.");
                return(pkcs7);
            }
            throw new VerificationException(null, "The document was altered after the signature was applied.");
        }