public async Task <bool> VerifyAsync(byte[] digest, string signature, string algorithm, CancellationToken token) { this.EnsureNotDisposed(); if (digest == null || !digest.Any()) { throw new ArgumentException("digest"); } BasicHasher.ValidateDigestLength(algorithm, digest); var verifier = new Signing.Verifier(_rsa); var hex = digest.ToHexString(); var res = await Task.FromResult(verifier.VerifyHash(hex, signature, algorithm)); //var res = await Task.FromResult(verifier.VerifyHash(digest, signature, algorithm)); if (!res) { // legacy code used a double digest hash, so hash once more and check var hashBytesLegacy = BasicHasher.GetHashBytes(digest, algorithm); res = await Task.FromResult(verifier.VerifyHash(digest, signature, algorithm)); return(res); } return(res); }
public bool VerifyHash(byte[] hashedBytes, string signedHash, string algorithm) { algorithm = BasicHasherAlgorithms.VerifyAndMapToAlogrithm(algorithm); BasicHasher.ValidateDigestLength(algorithm, hashedBytes); byte[] signedBytes = BasicHasher.ConvertFromHexOrBase64(signedHash); var isValid = _publicKey.VerifyHash(hashedBytes, algorithm, signedBytes); #if DEBUG var hashHex = hashedBytes.ToHexString(); Trace.WriteLine("VerifyHash\t" + hashHex + "\t" + algorithm + "\tsig\t" + signedHash + "\tresult\t" + isValid.ToString().ToLower()); #endif return(isValid); }