protected override bool VerifySignatureCore( ReadOnlySpan <byte> hash, ReadOnlySpan <byte> signature, DSASignatureFormat signatureFormat) { Span <byte> stackBuf = stackalloc byte[WindowsMaxQSize]; ReadOnlySpan <byte> source = AdjustHashSizeIfNecessary(hash, stackBuf); if (signatureFormat == DSASignatureFormat.Rfc3279DerSequence) { // source.Length is the field size, in bytes, so just convert to bits. int fieldSizeBits = source.Length * 8; signature = this.ConvertSignatureToIeeeP1363(signatureFormat, signature, fieldSizeBits); } else if (signatureFormat != DSASignatureFormat.IeeeP1363FixedFieldConcatenation) { Debug.Fail($"Missing internal implementation handler for signature format {signatureFormat}"); throw new CryptographicException( SR.Cryptography_UnknownSignatureFormat, signatureFormat.ToString()); } using (SafeNCryptKeyHandle keyHandle = GetDuplicatedKeyHandle()) { unsafe { return(CngCommon.VerifyHash(keyHandle, source, signature, AsymmetricPaddingMode.None, null)); } } }
public override bool VerifySignature(ReadOnlySpan <byte> hash, ReadOnlySpan <byte> signature) { Span <byte> stackBuf = stackalloc byte[WindowsMaxQSize]; ReadOnlySpan <byte> source = AdjustHashSizeIfNecessary(hash, stackBuf); #endif using (SafeNCryptKeyHandle keyHandle = GetDuplicatedKeyHandle()) { unsafe { return(CngCommon.VerifyHash(keyHandle, source, signature, AsymmetricPaddingMode.None, null)); } } }
public override bool VerifySignature(ReadOnlySpan <byte> hash, ReadOnlySpan <byte> signature) { byte[] arrayToReturnToArrayPool = AdjustHashSizeIfNecessaryWithArrayPool(ref hash); try { using (SafeNCryptKeyHandle keyHandle = GetDuplicatedKeyHandle()) { unsafe { return(CngCommon.VerifyHash(keyHandle, hash, signature, AsymmetricPaddingMode.None, null)); } } } finally { if (arrayToReturnToArrayPool != null) { Array.Clear(arrayToReturnToArrayPool, 0, hash.Length); ArrayPool <byte> .Shared.Return(arrayToReturnToArrayPool); } } }
public override bool VerifySignature(byte[] hash, byte[] signature) { if (hash == null) { throw new ArgumentNullException(nameof(hash)); } if (signature == null) { throw new ArgumentNullException(nameof(signature)); } hash = AdjustHashSizeIfNecessary(hash); using (SafeNCryptKeyHandle keyHandle = GetDuplicatedKeyHandle()) { unsafe { bool verified = CngCommon.VerifyHash(keyHandle, hash, signature, AsymmetricPaddingMode.None, null); return(verified); } } }