예제 #1
0
        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));
                }
            }
        }
예제 #2
0
        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));
                }
            }
        }
예제 #3
0
 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);
         }
     }
 }
예제 #4
0
        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);
                }
            }
        }