internal static byte[] GetHashProperty(SafeCspHashHandle hashHandle, HashProperty property) { Contract.Assert(hashHandle != null && !hashHandle.IsInvalid, "keyHandle != null && !keyHandle.IsInvalid"); int bufferSize = 0; byte[] buffer = null; // Figure out how big of a buffer we need to hold the property if (!UnsafeNativeMethods.CryptGetHashParam(hashHandle, property, buffer, ref bufferSize, 0)) { int errorCode = Marshal.GetLastWin32Error(); if (errorCode != (int)ErrorCode.MoreData) { throw new CryptographicException(errorCode); } } // Now get the property bytes directly buffer = new byte[bufferSize]; if (!UnsafeNativeMethods.CryptGetHashParam(hashHandle, property, buffer, ref bufferSize, 0)) { throw new CryptographicException(Marshal.GetLastWin32Error()); } return(buffer); }
internal static void SetHashProperty(SafeCspHashHandle hashHandle, HashProperty property, byte[] value) { Contract.Assert(hashHandle != null && !hashHandle.IsInvalid, "hashHandle != null && !hashHandle.IsInvalid"); if (!UnsafeNativeMethods.CryptSetHashParam(hashHandle, property, value, 0)) { throw new CryptographicException(Marshal.GetLastWin32Error()); } }
internal static int GetHashPropertyInt32(SafeCspHashHandle hashHandle, HashProperty property) { byte[] rawProperty = GetHashProperty(hashHandle, property); Contract.Assert(rawProperty.Length == sizeof(int) || rawProperty.Length == 0, "Unexpected property size"); return(rawProperty.Length == sizeof(int) ? BitConverter.ToInt32(rawProperty, 0) : 0); }
internal static extern bool CryptSetHashParam(SafeCspHashHandle hHash, HashProperty dwParam, [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbData, int dwFlags);
internal static byte[] GetHashProperty(SafeCspHashHandle hashHandle, HashProperty property) { Contract.Assert(hashHandle != null && !hashHandle.IsInvalid, "keyHandle != null && !keyHandle.IsInvalid"); int bufferSize = 0; byte[] buffer = null; // Figure out how big of a buffer we need to hold the property if (!UnsafeNativeMethods.CryptGetHashParam(hashHandle, property, buffer, ref bufferSize, 0)) { int errorCode = Marshal.GetLastWin32Error(); if (errorCode != (int)ErrorCode.MoreData) { throw new CryptographicException(errorCode); } } // Now get the property bytes directly buffer = new byte[bufferSize]; if (!UnsafeNativeMethods.CryptGetHashParam(hashHandle, property, buffer, ref bufferSize, 0)) { throw new CryptographicException(Marshal.GetLastWin32Error()); } return buffer; }
internal static int GetHashPropertyInt32(SafeCspHashHandle hashHandle, HashProperty property) { byte[] rawProperty = GetHashProperty(hashHandle, property); Contract.Assert(rawProperty.Length == sizeof(int) || rawProperty.Length == 0, "Unexpected property size"); return rawProperty.Length == sizeof(int) ? BitConverter.ToInt32(rawProperty, 0) : 0; }