private bool CheckDigestedReferences()
        {
            ArrayList references = this.m_signature.SignedInfo.References;

            for (int i = 0; i < references.Count; i++)
            {
                Reference reference = (Reference)references[i];
                SignedXmlDebugLog.LogVerifyReference(this, reference);
                byte[] actualHash = reference.CalculateHashValue(this.m_containingDocument, this.m_signature.ReferencedItems);
                SignedXmlDebugLog.LogVerifyReferenceHash(this, reference, actualHash, reference.DigestValue);
                if (actualHash.Length != reference.DigestValue.Length)
                {
                    return(false);
                }
                byte[] buffer2     = actualHash;
                byte[] digestValue = reference.DigestValue;
                for (int j = 0; j < buffer2.Length; j++)
                {
                    if (buffer2[j] != digestValue[j])
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
示例#2
0
        private bool CheckDigestedReferences()
        {
            ArrayList references = m_signature.SignedInfo.References;

            for (int i = 0; i < references.Count; ++i)
            {
                Reference digestedReference = (Reference)references[i];

                if (!ReferenceUsesSafeTransformMethods(digestedReference))
                {
                    return(false);
                }

                SignedXmlDebugLog.LogVerifyReference(this, digestedReference);
                byte[] calculatedHash = null;
                try
                {
                    calculatedHash = digestedReference.CalculateHashValue(_containingDocument, m_signature.ReferencedItems);
                }
                catch (CryptoSignedXmlRecursionException)
                {
                    SignedXmlDebugLog.LogSignedXmlRecursionLimit(this, digestedReference);
                    return(false);
                }
                // Compare both hashes
                SignedXmlDebugLog.LogVerifyReferenceHash(this, digestedReference, calculatedHash, digestedReference.DigestValue);

                if (!CryptographicEquals(calculatedHash, digestedReference.DigestValue))
                {
                    return(false);
                }
            }

            return(true);
        }
示例#3
0
文件: SignedXml.cs 项目: ash2005/z
        private bool CheckDigestedReferences()
        {
            ArrayList references = m_signature.SignedInfo.References;

            for (int i = 0; i < references.Count; ++i)
            {
                Reference digestedReference = (Reference)references[i];

                SignedXmlDebugLog.LogVerifyReference(this, digestedReference);
                byte[] calculatedHash = digestedReference.CalculateHashValue(m_containingDocument, m_signature.ReferencedItems);

                // Compare both hashes
                SignedXmlDebugLog.LogVerifyReferenceHash(this, digestedReference, calculatedHash, digestedReference.DigestValue);
                if (calculatedHash.Length != digestedReference.DigestValue.Length)
                {
                    return(false);
                }

                byte[] rgb1 = calculatedHash;
                byte[] rgb2 = digestedReference.DigestValue;
                for (int j = 0; j < rgb1.Length; ++j)
                {
                    if (rgb1[j] != rgb2[j])
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
示例#4
0
        private bool CheckDigestedReferences()
        {
            ArrayList references = m_signature.SignedInfo.References;

            for (int i = 0; i < references.Count; ++i)
            {
                Reference digestedReference = (Reference)references[i];
                // propagate namespaces
                digestedReference.Namespaces = m_namespaces;
                digestedReference.SignedXml  = this;
                byte[] calculatedHash = digestedReference.CalculateHashValue(m_containingDocument, m_signature.ReferencedItems);

                // Compare both hashes
                if (calculatedHash.Length != digestedReference.DigestValue.Length)
                {
#if _DEBUG
                    if (debug)
                    {
                        Console.WriteLine("Failed to verify hash for reference {0} -- hashes didn't match length.", i);
                    }
#endif
                    return(false);
                }

                byte[] rgb1 = calculatedHash;
                byte[] rgb2 = digestedReference.DigestValue;
                for (int j = 0; j < rgb1.Length; ++j)
                {
                    if (rgb1[j] != rgb2[j])
                    {
#if _DEBUG
                        if (debug)
                        {
                            Console.WriteLine("Failed to verify has for reference {0} -- hashes didn't match value.", i);
                            Console.WriteLine("Computed hash: " + Convert.ToBase64String(rgb1));
                            Console.WriteLine("Claimed hash: " + Convert.ToBase64String(rgb2));
                        }
#endif
                        return(false);
                    }
                }
            }
            return(true);
        }