示例#1
0
        public void TestSign()
        {
            Assert.That(QQnCryptoHelpers.CalculateFileHash(SnkFile, HashType.None), Is.EqualTo("dcd59a19afe007b2a7e706d100f8fcdeb4e4e1e9,type=SHA1,size=596"), "SHA256++Hash matches");
            Assert.That(QQnCryptoHelpers.CalculateFileHash(SnkFile, HashType.SHA256), Is.EqualTo("31a02f23fb06dc6326428843782c049d14e90fb14f74704909e6e6ba1a2592c0"), "SHA256 hash matches");
            Assert.That(QQnCryptoHelpers.CalculateFileHash(SnkFile, HashType.SHA1), Is.EqualTo("dcd59a19afe007b2a7e706d100f8fcdeb4e4e1e9"), "SHA1 hash matches");
            Assert.That(QQnCryptoHelpers.CalculateFileHash(SnkFile, HashType.MD5), Is.EqualTo("2b19ab067c03e05d55f62702c4a79864"), "MD5 hash matches");


            SignAndVerify(HashType.MD5);
            SignAndVerify(HashType.SHA1);
            SignAndVerify(HashType.SHA256);
            SignAndVerify(HashType.SHA512);
            SignAndVerify(HashType.SHA384);

            // RipeMD160 requires type, or it is validated against SHA1
            SignAndVerify(HashType.RipeMD160 | HashType.PlusType);

            string hash = QQnCryptoHelpers.CalculateFileHash(SnkFile, HashType.RipeMD160);

            Assert.That(QQnCryptoHelpers.VerifyFileHash(SnkFile, hash), Is.False);             // SHA1 hash != RIPEMD160 hash

            SignAndVerify(HashType.SHA1 | HashType.PlusSize);
            SignAndVerify(HashType.SHA1 | HashType.PlusType);
            SignAndVerify(HashType.SHA1 | HashType.PlusSize | HashType.PlusType);
        }
示例#2
0
        /// <summary>
        /// Verifies the file.
        /// </summary>
        /// <param name="baseDirectory">The base directory.</param>
        /// <param name="verifyData">The verify data.</param>
        /// <param name="verificationMode">The verification mode.</param>
        /// <returns></returns>
        public static bool VerifyFile(string baseDirectory, IVerifiableFile verifyData, VerifyMode verificationMode)
        {
            if (string.IsNullOrEmpty(baseDirectory))
            {
                throw new ArgumentNullException("baseDirectory");
            }
            else if (verifyData == null)
            {
                throw new ArgumentNullException("verifyData");
            }

            string path = QQnPath.Combine(baseDirectory, verifyData.Filename);

            FileInfo fif = new FileInfo(path);

            if (!fif.Exists)
            {
                return(false);
            }

            if (verificationMode < VerifyMode.Time)
            {
                return(true);
            }

            bool hasTime    = verifyData.LastWriteTimeUtc.HasValue;
            bool timeFailed = hasTime && fif.LastWriteTimeUtc != verifyData.LastWriteTimeUtc.Value;

            if (timeFailed && verificationMode == VerifyMode.Time)
            {
                return(false);
            }

            if (verificationMode < VerifyMode.TimeSize)
            {
                return(true);
            }

            bool hasSize    = (verifyData.FileSize >= 0);
            bool sizeFailed = hasSize && fif.Length != verifyData.FileSize;

            if ((timeFailed || sizeFailed) && verificationMode == VerifyMode.TimeSize)
            {
                return(false);
            }

            if (verificationMode < VerifyMode.FileHash)
            {
                return(true);
            }

            if (!string.IsNullOrEmpty(verifyData.FileHash) && !QQnCryptoHelpers.VerifyFileHash(fif.FullName, verifyData.FileHash))
            {
                return(false);
            }

            return(true);
        }
示例#3
0
        void SignAndVerify(HashType hashType)
        {
            string hash = QQnCryptoHelpers.CalculateFileHash(SnkFile, hashType);

            Assert.That(QQnCryptoHelpers.VerifyFileHash(SnkFile, hash), Is.True, "Hash of type {0} ok", hashType);
        }