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); }
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()); } }
internal static SafeProvHandleCP AcquireProvHandle(CspParameters parameters) { if (parameters == null) { parameters = new CspParameters(75); } SafeProvHandleCP invalidHandle = SafeProvHandleCP.InvalidHandle; AcquireCSP(parameters, ref invalidHandle); return(invalidHandle); }
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()); } }
/// <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); }
internal static extern bool CryptCreateHash([In] SafeProvHandleCP hProv, [In] uint Algid, [In] SafeKeyHandleCP hKey, [In] uint dwFlags, [In][Out] ref SafeHashHandleCP phHash);
internal static extern bool CryptAcquireContext([In][Out] ref SafeProvHandleCP hProv, [In] string pszContainer, [In] string pszProvider, [In] uint dwProvType, [In] uint dwFlags);