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); }
/// <summary> /// Updates the file. /// </summary> /// <param name="baseDirectory">The base directory.</param> /// <param name="verifyData">The verify data.</param> /// <param name="hashType">Type of the hash.</param> public static void UpdateFile(string baseDirectory, IUpdatableVerifiableFile verifyData, HashType hashType) { if (string.IsNullOrEmpty(baseDirectory)) { throw new ArgumentNullException("baseDirectory"); } else if (verifyData == null) { throw new ArgumentNullException("verifyData"); } FileInfo fif = new FileInfo(QQnPath.Combine(baseDirectory, verifyData.Filename)); if (!fif.Exists) { return; } long size = fif.Length; string hash = QQnCryptoHelpers.CalculateFileHash(fif.FullName, hashType); DateTime dt = fif.LastWriteTimeUtc; verifyData.UpdateVerifyData(hash, size, dt); }
void SignAndVerify(HashType hashType) { string hash = QQnCryptoHelpers.CalculateFileHash(SnkFile, hashType); Assert.That(QQnCryptoHelpers.VerifyFileHash(SnkFile, hash), Is.True, "Hash of type {0} ok", hashType); }