示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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));
        }
示例#4
0
        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);
        }
示例#5
0
 internal static unsafe partial NTSTATUS BCryptGetProperty(SafeBCryptHandle hObject, string pszProperty, void *pbOutput, int cbOutput, out int pcbResult, int dwFlags);
示例#6
0
 internal static extern unsafe int BCryptGetProperty(SafeBCryptHandle handleObject, string propertyString, void *outputBuffer, int outputByteLength, out int resultSize, int flags);
示例#7
0
 internal static string[] GetECCurveNameList(SafeBCryptHandle provider)
 {
     return(GetStringArrayProperty(provider, BCryptPropertyStrings.BCRYPT_ECC_CURVE_NAME_LIST));
 }
示例#8
0
 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));
 }
示例#9
0
 internal static void SetEccCurveName(SafeBCryptHandle key, string curveName)
 {
     SetStringProperty(key, BCryptPropertyStrings.BCRYPT_ECC_CURVE_NAME, curveName);
 }
示例#10
0
 internal static int GetKeySizeInBits(SafeBCryptHandle provider)
 {
     return(GetIntProperty(provider, BCryptPropertyStrings.BCRYPT_KEY_LENGTH));
 }
示例#11
0
 internal static int GetHashLength(SafeBCryptHandle provider)
 {
     return(GetIntProperty(provider, BCryptPropertyStrings.BCRYPT_HASH_LENGTH));
 }
示例#12
0
 internal static int GetBlockLength(SafeBCryptHandle provider)
 {
     return(GetIntProperty(provider, BCryptPropertyStrings.BCRYPT_BLOCK_LENGTH));
 }
示例#13
0
 internal static int GetMaxAuthTagLength(SafeBCryptHandle provider)
 {
     return(GetAuthTagLengths(provider).dwMaxLength);
 }
示例#14
0
 internal static void SetBlockChainingMode(SafeBCryptHandle provider, string chainingMode)
 {
     SetStringProperty(provider, BCryptPropertyStrings.BCRYPT_CHAINING_MODE, chainingMode);
 }
示例#15
0
 internal static string GetBlockChainingMode(SafeBCryptHandle provider)
 {
     return(GetStringProperty(provider, BCryptPropertyStrings.BCRYPT_CHAINING_MODE));
 }
示例#16
0
 internal static extern unsafe NTSTATUS BCryptSetProperty(SafeBCryptHandle hObject, string pszProperty, string pbInput, int cbInput, int dwFlags);