VerifyHash() public method

public VerifyHash ( byte hash, byte signature, Internal.Cryptography.HashAlgorithmName hashAlgorithm, RSASignaturePadding padding ) : bool
hash byte
signature byte
hashAlgorithm Internal.Cryptography.HashAlgorithmName
padding RSASignaturePadding
return bool
Beispiel #1
0
        public override bool VerifyHash(byte[] hash, byte[] signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding)
        {
            if (signature == null)
                throw new ArgumentNullException(nameof(signature));
            if (padding != RSASignaturePadding.Pkcs1)
                throw PaddingModeNotSupported();

            // _impl does remaining parameter validation

            return _impl.VerifyHash(hash, signature, hashAlgorithm, padding);
        }
Beispiel #2
0
        [System.Security.SecuritySafeCritical]  // auto-generated
        public override bool VerifySignature(byte[] rgbHash, byte[] rgbSignature)
        {
            if (rgbHash == null)
            {
                throw new ArgumentNullException("rgbHash");
            }
            if (rgbSignature == null)
            {
                throw new ArgumentNullException("rgbSignature");
            }
            Contract.EndContractBlock();

            if (_strOID == null)
            {
                throw new CryptographicUnexpectedOperationException(Environment.GetResourceString("Cryptography_MissingOID"));
            }
            if (_rsaKey == null)
            {
                throw new CryptographicUnexpectedOperationException(Environment.GetResourceString("Cryptography_MissingKey"));
            }

            // Two cases here -- if we are talking to the CSP version or if we are talking to some other RSA provider.
            if (_rsaKey is RSACryptoServiceProvider)
            {
                // This path is kept around for desktop compat: in case someone is using this with a hash algorithm that's known to GetAlgIdFromOid but
                // not from OidToHashAlgorithmName.
                int calgHash = X509Utils.GetAlgIdFromOid(_strOID, OidGroup.HashAlgorithm);
                return(((RSACryptoServiceProvider)_rsaKey).VerifyHash(rgbHash, calgHash, rgbSignature));
            }
            else if (OverridesVerifyHash)
            {
                HashAlgorithmName hashAlgorithmName = Utils.OidToHashAlgorithmName(_strOID);
                return(_rsaKey.VerifyHash(rgbHash, rgbSignature, hashAlgorithmName, RSASignaturePadding.Pkcs1));
            }
            else
            {
                // Fallback compat path for 3rd-party RSA classes that don't override VerifyHash()

                byte[] pad = Utils.RsaPkcs1Padding(_rsaKey, CryptoConfig.EncodeOID(_strOID), rgbHash);
                // Apply the public key to the signature data to get back the padded buffer actually signed.
                // Compare the two buffers to see if they match; ignoring any leading zeros
                return(Utils.CompareBigIntArrays(_rsaKey.EncryptValue(rgbSignature), pad));
            }
        }
        public override bool VerifySignature(byte[] rgbHash, byte[] rgbSignature)
        {
            if (rgbHash == null)
            {
                throw new ArgumentNullException(nameof(rgbHash));
            }
            if (rgbSignature == null)
            {
                throw new ArgumentNullException(nameof(rgbSignature));
            }
            if (_algName == null)
            {
                throw new CryptographicUnexpectedOperationException(SR.Cryptography_MissingOID);
            }
            if (_rsaKey == null)
            {
                throw new CryptographicUnexpectedOperationException(SR.Cryptography_MissingKey);
            }

            return(_rsaKey.VerifyHash(rgbHash, rgbSignature, new HashAlgorithmName(_algName), RSASignaturePadding.Pkcs1));
        }