private unsafe static int GetIntProperty(SafeBCryptHandle provider, string property) { int length; int objectSize; ExceptionHelper.CheckReturnCode(BCryptGetProperty(provider, property, &objectSize, 4, out length, 0)); return(objectSize); }
internal unsafe static BCRYPT_AUTH_TAG_LENGTHS_STRUCT GetAuthTagLengths(SafeBCryptHandle provider) { var size = sizeof(BCRYPT_AUTH_TAG_LENGTHS_STRUCT); var output = default(BCRYPT_AUTH_TAG_LENGTHS_STRUCT); int result; BCryptGetProperty(provider, BCryptPropertyStrings.BCRYPT_AUTH_TAG_LENGTH, &output, size, out result, 0); return(output); }
private unsafe static string GetStringProperty(SafeBCryptHandle provider, string property) { int objectSize; ExceptionHelper.CheckReturnCode(BCryptGetProperty(provider, property, null, 0, out objectSize, 0)); var buffer = stackalloc byte[objectSize]; ExceptionHelper.CheckReturnCode(BCryptGetProperty(provider, property, buffer, objectSize, out objectSize, 0)); return(Marshal.PtrToStringUni((IntPtr)buffer)); }
private unsafe static string[] GetStringArrayProperty(SafeBCryptHandle provider, string property) { int bufferSize; ExceptionHelper.CheckReturnCode(BCryptGetProperty(provider, property, null, 0, out bufferSize, 0)); var tempBuffer = stackalloc byte[bufferSize]; ExceptionHelper.CheckReturnCode(BCryptGetProperty(provider, property, tempBuffer, bufferSize, out bufferSize, 0)); var header = Marshal.PtrToStructure <BCRYPT_ECC_CURVE_NAMES>((IntPtr)tempBuffer); var returnValues = new string[header.dwEccCurveNames]; for (var i = 0; i < header.dwEccCurveNames; i++) { var currentPtr = Unsafe.Read <IntPtr>((void *)IntPtr.Add(header.pEccCurveNames, i * IntPtr.Size)); returnValues[i] = Marshal.PtrToStringUni(currentPtr); } return(returnValues); }
internal static unsafe partial NTSTATUS BCryptGetProperty(SafeBCryptHandle hObject, string pszProperty, void *pbOutput, int cbOutput, out int pcbResult, int dwFlags);
internal static extern unsafe int BCryptGetProperty(SafeBCryptHandle handleObject, string propertyString, void *outputBuffer, int outputByteLength, out int resultSize, int flags);
internal static string[] GetECCurveNameList(SafeBCryptHandle provider) { return(GetStringArrayProperty(provider, BCryptPropertyStrings.BCRYPT_ECC_CURVE_NAME_LIST)); }
private static void SetStringProperty(SafeBCryptHandle provider, string property, string value) { ExceptionHelper.CheckReturnCode( BCryptSetProperty(provider, property, value, value != null ? (value.Length + 1) * sizeof(char) : 0, 0)); }
internal static void SetEccCurveName(SafeBCryptHandle key, string curveName) { SetStringProperty(key, BCryptPropertyStrings.BCRYPT_ECC_CURVE_NAME, curveName); }
internal static int GetKeySizeInBits(SafeBCryptHandle provider) { return(GetIntProperty(provider, BCryptPropertyStrings.BCRYPT_KEY_LENGTH)); }
internal static int GetHashLength(SafeBCryptHandle provider) { return(GetIntProperty(provider, BCryptPropertyStrings.BCRYPT_HASH_LENGTH)); }
internal static int GetBlockLength(SafeBCryptHandle provider) { return(GetIntProperty(provider, BCryptPropertyStrings.BCRYPT_BLOCK_LENGTH)); }
internal static int GetMaxAuthTagLength(SafeBCryptHandle provider) { return(GetAuthTagLengths(provider).dwMaxLength); }
internal static void SetBlockChainingMode(SafeBCryptHandle provider, string chainingMode) { SetStringProperty(provider, BCryptPropertyStrings.BCRYPT_CHAINING_MODE, chainingMode); }
internal static string GetBlockChainingMode(SafeBCryptHandle provider) { return(GetStringProperty(provider, BCryptPropertyStrings.BCRYPT_CHAINING_MODE)); }
internal static extern unsafe NTSTATUS BCryptSetProperty(SafeBCryptHandle hObject, string pszProperty, string pbInput, int cbInput, int dwFlags);