Ejemplo n.º 1
0
        /// <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());
        }
Ejemplo n.º 2
0
        /// <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);
        }