/// <summary> /// Computes the signature for the specified hash value by encrypting it with the private key. /// </summary> /// <param name="rgbHash">The hash value of the data to be signed.</param> /// <param name="str">The name of the hash algorithm used to create the hash value of the data.</param> /// <returns>The DSA signature for the specified hash value.</returns> public byte[] SignHash(byte[] rgbHash, string str) { if (rgbHash == null) { throw new ArgumentNullException(nameof(rgbHash)); } if (PublicOnly) { throw new CryptographicException(SR.Cryptography_CSP_NoPrivateKey); } int calgHash = CapiHelper.NameOrOidToHashAlgId(str, OidGroup.HashAlgorithm); if (rgbHash.Length != _sha1.HashSize / 8) { throw new CryptographicException(string.Format(SR.Cryptography_InvalidHashSize, "SHA1", _sha1.HashSize / 8)); } return(CapiHelper.SignValue( SafeProvHandle, SafeKeyHandle, _parameters.KeyNumber, CapiHelper.CALG_DSS_SIGN, calgHash, rgbHash)); }
public byte[] CryptDeriveKey(string?algname, string?alghashname, int keySize, byte[] rgbIV) { if (keySize < 0) { throw new CryptographicException(SR.Cryptography_InvalidKeySize); } int algidhash = CapiHelper.NameOrOidToHashAlgId(alghashname, OidGroup.HashAlgorithm); if (algidhash == 0) { throw new CryptographicException(SR.Cryptography_PasswordDerivedBytes_InvalidAlgorithm); } int algid = CapiHelper.NameOrOidToHashAlgId(algname, OidGroup.All); if (algid == 0) { throw new CryptographicException(SR.Cryptography_PasswordDerivedBytes_InvalidAlgorithm); } if (rgbIV == null) { throw new CryptographicException(SR.Cryptography_PasswordDerivedBytes_InvalidIV); } byte[]? key = null; CapiHelper.DeriveKey(ProvHandle, algid, algidhash, _password, _password.Length, keySize << 16, rgbIV, rgbIV.Length, ref key); return(key); }
/// <summary> /// Verifies the signature of a hash value. /// </summary> public bool VerifyHash(byte[] rgbHash, string str, byte[] rgbSignature) { ArgumentNullException.ThrowIfNull(rgbHash); ArgumentNullException.ThrowIfNull(rgbSignature); int calgHash = CapiHelper.NameOrOidToHashAlgId(str, OidGroup.HashAlgorithm); return(VerifyHash(rgbHash, calgHash, rgbSignature)); }
/// <summary> /// Verifies the signature of a hash value. /// </summary> public bool VerifyHash(byte[] rgbHash, string str, byte[] rgbSignature) { if (rgbHash == null) throw new ArgumentNullException(nameof(rgbHash)); if (rgbSignature == null) throw new ArgumentNullException(nameof(rgbSignature)); int calgHash = CapiHelper.NameOrOidToHashAlgId(str, OidGroup.HashAlgorithm); return VerifyHash(rgbHash, calgHash, rgbSignature); }
/// <summary> /// Computes the hash value of a subset of the specified byte array using the /// specified hash algorithm, and signs the resulting hash value. /// </summary> /// <param name="rgbHash">The input data for which to compute the hash</param> /// <param name="str">The hash algorithm to use to create the hash value. </param> /// <returns>The RSA signature for the specified data.</returns> public byte[] SignHash(byte[] rgbHash, string str) { if (rgbHash == null) throw new ArgumentNullException(nameof(rgbHash)); if (PublicOnly) throw new CryptographicException(SR.Cryptography_CSP_NoPrivateKey); int calgHash = CapiHelper.NameOrOidToHashAlgId(str, OidGroup.HashAlgorithm); return SignHash(rgbHash, calgHash); }
/// <summary> /// Verifies the signature of a hash value. /// </summary> public bool VerifyHash(byte[] rgbHash, string str, byte[] rgbSignature) { if (rgbHash == null) { throw new ArgumentNullException("rgbHash"); } if (rgbSignature == null) { throw new ArgumentNullException("rgbSignature"); } int calgHash = CapiHelper.NameOrOidToHashAlgId(str); return(VerifyHash(rgbHash, calgHash, rgbSignature)); }
/// <summary> /// Computes the hash value of a subset of the specified byte array using the specified hash algorithm, and signs the resulting hash value. /// </summary> /// <param name="rgbHash">The input data for which to compute the hash</param> /// <param name="str">The hash algorithm to use to create the hash value. </param> /// <returns>The RSA signature for the specified data.</returns> public byte[] SignHash(byte[] rgbHash, string str) { if (rgbHash == null) { throw new ArgumentNullException("rgbHash"); } if (PublicOnly) { throw new CryptographicException(SR.Cryptography_CSP_NoPrivateKey); } int calgHash = CapiHelper.NameOrOidToHashAlgId(str); return(SignHash(rgbHash, calgHash)); }
/// <summary> /// Verifies the specified signature data by comparing it to the signature computed for the specified hash value. /// </summary> /// <param name="rgbHash">The hash value of the data to be signed.</param> /// <param name="str">The name of the hash algorithm used to create the hash value of the data.</param> /// <param name="rgbSignature">The signature data to be verified.</param> /// <returns>true if the signature verifies as valid; otherwise, false.</returns> public bool VerifyHash(byte[] rgbHash, string?str, byte[] rgbSignature) { ArgumentNullException.ThrowIfNull(rgbHash); ArgumentNullException.ThrowIfNull(rgbSignature); int calgHash = CapiHelper.NameOrOidToHashAlgId(str, OidGroup.HashAlgorithm); return(CapiHelper.VerifySign( SafeProvHandle, SafeKeyHandle, CapiHelper.CALG_DSS_SIGN, calgHash, rgbHash, rgbSignature)); }
/// <summary> /// Verifies the specified signature data by comparing it to the signature computed for the specified hash value. /// </summary> /// <param name="rgbHash">The hash value of the data to be signed.</param> /// <param name="str">The name of the hash algorithm used to create the hash value of the data.</param> /// <param name="rgbSignature">The signature data to be verified.</param> /// <returns>true if the signature verifies as valid; otherwise, false.</returns> public bool VerifyHash(byte[] rgbHash, string str, byte[] rgbSignature) { if (rgbHash == null) { throw new ArgumentNullException(nameof(rgbHash)); } if (rgbSignature == null) { throw new ArgumentNullException(nameof(rgbSignature)); } int calgHash = CapiHelper.NameOrOidToHashAlgId(str, OidGroup.HashAlgorithm); return(CapiHelper.VerifySign( SafeProvHandle, SafeKeyHandle, CapiHelper.CALG_DSS_SIGN, calgHash, rgbHash, rgbSignature)); }