/// <summary> /// Verifies that a digital signature is valid for the provided data. /// </summary> /// <param name="data">An array that contains the signed data.</param> /// <param name="offset">The starting index of the signed portion of <paramref name="data"/>.</param> /// <param name="count">The number of bytes in <paramref name="data"/> that were signed.</param> /// <param name="signature">The signature to verify.</param> /// <param name="hashAlgorithm">The hash algorithm used to hash the data for the verification process.</param> /// <param name="signatureFormat">The encoding format for <paramref name="signature"/>.</param> /// <returns> /// <see langword="true"/> if the digital signature is valid for the provided data; otherwise, <see langword="false"/>. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="data"/> or <paramref name="signature"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// /// -or- /// /// <paramref name="offset" /> is less than zero. /// /// -or- /// /// <paramref name="count" /> is less than zero. /// /// -or- /// /// <paramref name="offset" /> + <paramref name="count"/> - 1 results in an index that is /// beyond the upper bound of <paramref name="data"/>. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="hashAlgorithm"/> has a <see langword="null"/> or empty <see cref="HashAlgorithmName.Name"/>. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the hashing or verification operation. /// </exception> public bool VerifyData( byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat) { ArgumentNullException.ThrowIfNull(data); if (offset < 0 || offset > data.Length) { throw new ArgumentOutOfRangeException(nameof(offset)); } if (count < 0 || count > data.Length - offset) { throw new ArgumentOutOfRangeException(nameof(count)); } ArgumentNullException.ThrowIfNull(signature); ArgumentException.ThrowIfNullOrEmpty(hashAlgorithm.Name, nameof(hashAlgorithm)); if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(VerifyDataCore( new ReadOnlySpan <byte>(data, offset, count), signature, hashAlgorithm, signatureFormat)); }
/// <summary> /// Verifies that a digital signature is valid for the provided data. /// </summary> /// <param name="data">The signed data.</param> /// <param name="signature">The signature to verify.</param> /// <param name="hashAlgorithm">The hash algorithm used to hash the data for the verification process.</param> /// <param name="signatureFormat">The encoding format for <paramref name="signature"/>.</param> /// <returns> /// <see langword="true"/> if the digital signature is valid for the provided data; otherwise, <see langword="false"/>. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="data"/> or <paramref name="signature"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="hashAlgorithm"/> has a <see langword="null"/> or empty <see cref="HashAlgorithmName.Name"/>. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the hashing or verification operation. /// </exception> public bool VerifyData( Stream data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat) { if (data == null) { throw new ArgumentNullException(nameof(data)); } if (signature == null) { throw new ArgumentNullException(nameof(signature)); } if (string.IsNullOrEmpty(hashAlgorithm.Name)) { throw new ArgumentException(SR.Cryptography_HashAlgorithmNameNullOrEmpty, nameof(hashAlgorithm)); } if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(VerifyDataCore(data, signature, hashAlgorithm, signatureFormat)); }
/// <summary> /// Computes the hash value of the specified data and signs it using the specified signature format. /// </summary> /// <param name="data">The data to sign.</param> /// <param name="offset">The offset into <paramref name="data"/> at which to begin hashing.</param> /// <param name="count">The number of bytes to read from <paramref name="data"/>.</param> /// <param name="hashAlgorithm">The hash algorithm to use to create the hash value.</param> /// <param name="signatureFormat">The encoding format to use for the signature.</param> /// <returns> /// The ECDSA signature for the specified data. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="data"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// /// -or- /// /// <paramref name="offset" /> is less than zero. /// /// -or- /// /// <paramref name="count" /> is less than zero. /// /// -or- /// /// <paramref name="offset" /> + <paramref name="count"/> - 1 results in an index that is /// beyond the upper bound of <paramref name="data"/>. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="hashAlgorithm"/> has a <see langword="null"/> or empty <see cref="HashAlgorithmName.Name"/>. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the hashing or signing operation. /// </exception> public byte[] SignData( byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat) { if (data == null) { throw new ArgumentNullException(nameof(data)); } if (offset < 0 || offset > data.Length) { throw new ArgumentOutOfRangeException(nameof(offset)); } if (count < 0 || count > data.Length - offset) { throw new ArgumentOutOfRangeException(nameof(count)); } if (string.IsNullOrEmpty(hashAlgorithm.Name)) { throw new ArgumentException(SR.Cryptography_HashAlgorithmNameNullOrEmpty, nameof(hashAlgorithm)); } if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(SignDataCore(new ReadOnlySpan <byte>(data, offset, count), hashAlgorithm, signatureFormat)); }
/// <summary> /// Computes the ECDSA signature for the specified hash value in the indicated format. /// </summary> /// <param name="hash">The hash value to sign.</param> /// <param name="signatureFormat">The encoding format to use for the signature.</param> /// <returns> /// The ECDSA signature for the specified data. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="hash"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the signing operation. /// </exception> public byte[] SignHash(byte[] hash, DSASignatureFormat signatureFormat) { ArgumentNullException.ThrowIfNull(hash); if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(SignHashCore(hash, signatureFormat)); }
/// <summary> /// Computes the hash value of the specified data and signs it using the specified signature format. /// </summary> /// <param name="data">The data to sign.</param> /// <param name="hashAlgorithm">The hash algorithm to use to create the hash value.</param> /// <param name="signatureFormat">The encoding format to use for the signature.</param> /// <returns> /// The ECDSA signature for the specified data. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="data"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="hashAlgorithm"/> has a <see langword="null"/> or empty <see cref="HashAlgorithmName.Name"/>. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the hashing or signing operation. /// </exception> public byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat) { ArgumentNullException.ThrowIfNull(data); ArgumentException.ThrowIfNullOrEmpty(hashAlgorithm.Name, nameof(hashAlgorithm)); if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(SignDataCore(data, hashAlgorithm, signatureFormat)); }
/// <summary> /// Verifies that a digital signature is valid for the provided hash. /// </summary> /// <param name="hash">The signed hash.</param> /// <param name="signature">The signature to verify.</param> /// <param name="signatureFormat">The encoding format for <paramref name="signature"/>.</param> /// <returns> /// <see langword="true"/> if the digital signature is valid for the provided data; otherwise, <see langword="false"/>. /// </returns> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the verification operation. /// </exception> public bool VerifyHash( ReadOnlySpan <byte> hash, ReadOnlySpan <byte> signature, DSASignatureFormat signatureFormat) { if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(VerifyHashCore(hash, signature, signatureFormat)); }
/// <summary> /// Attempts to create the ECDSA signature for the specified hash value in the indicated format /// into the provided buffer. /// </summary> /// <param name="hash">The hash value to sign.</param> /// <param name="destination">The buffer to receive the signature.</param> /// <param name="signatureFormat">The encoding format to use for the signature.</param> /// <param name="bytesWritten"> /// When this method returns, contains a value that indicates the number of bytes written to /// <paramref name="destination"/>. This parameter is treated as uninitialized. /// </param> /// <returns> /// <see langword="true"/> if <paramref name="destination"/> is big enough to receive the signature; /// otherwise, <see langword="false"/>. /// </returns> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the signing operation. /// </exception> public bool TrySignHash( ReadOnlySpan <byte> hash, Span <byte> destination, DSASignatureFormat signatureFormat, out int bytesWritten) { if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(TrySignHashCore(hash, destination, signatureFormat, out bytesWritten)); }
/// <summary> /// Computes the ECDSA signature for the specified hash value in the indicated format. /// </summary> /// <param name="hash">The hash value to sign.</param> /// <param name="signatureFormat">The encoding format to use for the signature.</param> /// <returns> /// The ECDSA signature for the specified data. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="hash"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the signing operation. /// </exception> public byte[] SignHash(byte[] hash, DSASignatureFormat signatureFormat) { if (hash == null) { throw new ArgumentNullException(nameof(hash)); } if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(SignHashCore(hash, signatureFormat)); }
/// <summary> /// Verifies that a digital signature is valid for the provided data. /// </summary> /// <param name="data">The signed data.</param> /// <param name="signature">The signature to verify.</param> /// <param name="hashAlgorithm">The hash algorithm used to hash the data for the verification process.</param> /// <param name="signatureFormat">The encoding format for <paramref name="signature"/>.</param> /// <returns> /// <see langword="true"/> if the digital signature is valid for the provided data; otherwise, <see langword="false"/>. /// </returns> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the hashing or verification operation. /// </exception> public bool VerifyData( ReadOnlySpan <byte> data, ReadOnlySpan <byte> signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat) { ArgumentException.ThrowIfNullOrEmpty(hashAlgorithm.Name, nameof(hashAlgorithm)); if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(VerifyDataCore(data, signature, hashAlgorithm, signatureFormat)); }
/// <summary> /// Attempts to create the ECDSA signature for the specified data in the indicated format /// into the provided buffer. /// </summary> /// <param name="data">The data to hash and sign.</param> /// <param name="destination">The buffer to receive the signature.</param> /// <param name="hashAlgorithm">The hash algorithm to use to create the hash value.</param> /// <param name="signatureFormat">The encoding format to use for the signature.</param> /// <param name="bytesWritten"> /// When this method returns, contains a value that indicates the number of bytes written to /// <paramref name="destination"/>. This parameter is treated as uninitialized. /// </param> /// <returns> /// <see langword="true"/> if <paramref name="destination"/> is big enough to receive the signature; /// otherwise, <see langword="false"/>. /// </returns> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="hashAlgorithm"/> has a <see langword="null"/> or empty <see cref="HashAlgorithmName.Name"/>. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the signing operation. /// </exception> public bool TrySignData( ReadOnlySpan <byte> data, Span <byte> destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten) { ArgumentException.ThrowIfNullOrEmpty(hashAlgorithm.Name, nameof(hashAlgorithm)); if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(TrySignDataCore(data, destination, hashAlgorithm, signatureFormat, out bytesWritten)); }
/// <summary> /// Verifies that a digital signature is valid for the provided hash. /// </summary> /// <param name="rgbHash">The signed hash.</param> /// <param name="rgbSignature">The signature to verify.</param> /// <param name="signatureFormat">The encoding format for <paramref name="rgbSignature"/>.</param> /// <returns> /// <see langword="true"/> if the digital signature is valid for the provided data; otherwise, <see langword="false"/>. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="rgbHash"/> or <paramref name="rgbSignature"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the verification operation. /// </exception> public bool VerifySignature(byte[] rgbHash, byte[] rgbSignature, DSASignatureFormat signatureFormat) { if (rgbHash == null) { throw new ArgumentNullException(nameof(rgbHash)); } if (rgbSignature == null) { throw new ArgumentNullException(nameof(rgbSignature)); } if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(VerifySignatureCore(rgbHash, rgbSignature, signatureFormat)); }
/// <summary> /// Verifies that a digital signature is valid for the provided data. /// </summary> /// <param name="data">The signed data.</param> /// <param name="signature">The signature to verify.</param> /// <param name="hashAlgorithm">The hash algorithm used to hash the data for the verification process.</param> /// <param name="signatureFormat">The encoding format for <paramref name="signature"/>.</param> /// <returns> /// <see langword="true"/> if the digital signature is valid for the provided data; otherwise, <see langword="false"/>. /// </returns> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the hashing or verification operation. /// </exception> public bool VerifyData( ReadOnlySpan <byte> data, ReadOnlySpan <byte> signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat) { if (string.IsNullOrEmpty(hashAlgorithm.Name)) { throw HashAlgorithmNameNullOrEmpty(); } if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(VerifyDataCore(data, signature, hashAlgorithm, signatureFormat)); }
/// <summary> /// Computes the hash value of the specified data and signs it using the specified signature format. /// </summary> /// <param name="data">The data to sign.</param> /// <param name="hashAlgorithm">The hash algorithm to use to create the hash value.</param> /// <param name="signatureFormat">The encoding format to use for the signature.</param> /// <returns> /// The DSA signature for the specified data. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="data"/> is <see langword="null"/>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="signatureFormat"/> is not a known format. /// </exception> /// <exception cref="ArgumentException"> /// <paramref name="hashAlgorithm"/> has a <see langword="null"/> or empty <see cref="HashAlgorithmName.Name"/>. /// </exception> /// <exception cref="CryptographicException"> /// An error occurred in the hashing or signing operation. /// </exception> public byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat) { if (data == null) { throw new ArgumentNullException(nameof(data)); } if (string.IsNullOrEmpty(hashAlgorithm.Name)) { throw HashAlgorithmNameNullOrEmpty(); } if (!signatureFormat.IsKnownValue()) { throw DSASignatureFormatHelpers.CreateUnknownValueException(signatureFormat); } return(SignDataCore(data, hashAlgorithm, signatureFormat)); }