Пример #1
0
        private static SafeHashHandleCP SetupHashAlgorithm(SafeProvHandleCP prov, byte[] rgbHash, int algId)
        {
            SafeHashHandleCP invalidHandle = SafeHashHandleCP.InvalidHandle;

            CreateHash(prov, algId, ref invalidHandle);

            uint num = 0;

            if (!CApiExtWin.CryptGetHashParam(invalidHandle, 2, null, ref num, 0))
            {
                throw new CryptographicException(Marshal.GetLastWin32Error());
            }

            if ((ulong)((int)rgbHash.Length) != (ulong)num)
            {
                throw new CryptographicException(-2146893822);
            }

            if (!CApiExtWin.CryptSetHashParam(invalidHandle, 2, rgbHash, 0))
            {
                throw new CryptographicException(Marshal.GetLastWin32Error());
            }

            return(invalidHandle);
        }
Пример #2
0
 internal static void CreateHash(SafeProvHandleCP hProv, int algid, ref SafeHashHandleCP hHash)
 {
     if (!CApiExtWin.CryptCreateHash(hProv, (uint)algid, SafeKeyHandleCP.InvalidHandle, (uint)0, ref hHash))
     {
         throw new CryptographicException(Marshal.GetLastWin32Error());
     }
 }
Пример #3
0
        internal static SafeProvHandleCP AcquireProvHandle(CspParameters parameters)
        {
            if (parameters == null)
            {
                parameters = new CspParameters(75);
            }

            SafeProvHandleCP invalidHandle = SafeProvHandleCP.InvalidHandle;

            AcquireCSP(parameters, ref invalidHandle);

            return(invalidHandle);
        }
Пример #4
0
        internal static void AcquireCSP(CspParameters param, ref SafeProvHandleCP hProv)
        {
            uint num = (uint)CRYPT_VERIFYCONTEXT;            // uint.MaxValue; // CRYPT_DEFAULT_CONTAINER_OPTIONAL

            if ((param.Flags & CspProviderFlags.UseMachineKeyStore) != CspProviderFlags.NoFlags)
            {
                num = num | 32;
            }

            if (!CApiExtWin.CryptAcquireContext(ref hProv, param.KeyContainerName, param.ProviderName, (uint)param.ProviderType, num))
            {
                throw new CryptographicException(Marshal.GetLastWin32Error());
            }
        }
Пример #5
0
        /// <summary>
        /// Метод подписи хэш
        /// </summary>
        /// <param name="hProv"></param>
        /// <param name="keyNumber"></param>
        /// <param name="rgbHash"></param>
        /// <param name="dwFlags"></param>
        /// <param name="algId"></param>
        /// <returns></returns>
        internal static byte[] SignValue(IntPtr hProv, int keyNumber, byte[] rgbHash, int dwFlags, int algId)
        {
            byte[] signArray     = null;
            uint   signArraySize = 0;

            var prov             = new SafeProvHandleCP(hProv);
            var safeHashHandleCP = SetupHashAlgorithm(prov, rgbHash, algId);

            if (!CApiExtWin.CryptSignHash(safeHashHandleCP, (uint)keyNumber, null, (uint)dwFlags, signArray, ref signArraySize))
            {
                throw new CryptographicException(Marshal.GetLastWin32Error());
            }

            signArray = new byte[signArraySize];

            if (!CApiExtWin.CryptSignHash(safeHashHandleCP, (uint)keyNumber, null, (uint)dwFlags, signArray, ref signArraySize))
            {
                throw new CryptographicException(Marshal.GetLastWin32Error());
            }

            return(signArray);
        }
Пример #6
0
 internal static extern bool CryptCreateHash([In] SafeProvHandleCP hProv, [In] uint Algid, [In] SafeKeyHandleCP hKey, [In] uint dwFlags, [In][Out] ref SafeHashHandleCP phHash);
Пример #7
0
 internal static extern bool CryptAcquireContext([In][Out] ref SafeProvHandleCP hProv, [In] string pszContainer, [In] string pszProvider, [In] uint dwProvType, [In] uint dwFlags);