/// <summary> /// Проверяеи ЭЦП данных. /// </summary> /// <param name="signature"> /// Подпись (ЭЦП). /// </param> /// <param name="hashContext"> /// Контекст хэша данных. /// </param> /// <param name="flags"> /// Дополнительные управляющие флаги. /// </param> /// <returns> /// True, если ЭЦП корректна. /// </returns> public bool VerifySignature(byte[] signature, HashContext hashContext, int flags) { if (CryptoApi.CryptVerifySignature(hashContext.Handler, signature, signature.Length, handler, null, flags)) { return(true); } if (Marshal.GetLastWin32Error() == Constants.NteBadSignature) { return(false); } throw new Win32Exception(Marshal.GetLastWin32Error()); }
/// <summary> /// The create hash. /// </summary> /// <param name="keyContext"> /// The key context. /// </param> /// <param name="algid"> /// The algid. /// </param> /// <param name="flags"> /// The flags. /// </param> /// <returns> /// The <see cref="HashContext"/>. /// </returns> /// <exception cref="Win32Exception"> /// </exception> private HashContext CreateHash(KeyContext keyContext, int algid, int flags) { var hashHandler = IntPtr.Zero; var keyHandler = IntPtr.Zero; if (keyContext != null) { keyHandler = keyContext.Handler; } if (!CryptoApi.CryptCreateHash(cspHandler, algid, keyHandler, flags, ref hashHandler)) { throw new Win32Exception(); } var hashContext = new HashContext(hashHandler); return(hashContext); }