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);
        }
Exemple #2
0
        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);
        }