Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CreateProvHandle()

static SafeProvHandle Internal.NativeCrypto.CapiHelper.CreateProvHandle ( CspParameters parameters,
bool randomKeyContainer )
inlinestaticpackage

Definition at line 563 of file CapiHelper.cs.

564 {
565 uint flags = 0u;
566 SafeProvHandle safeProvHandle;
567 uint num = (uint)OpenCSP(parameters, flags, out safeProvHandle);
568 if (num != 0)
569 {
570 safeProvHandle.Dispose();
571 if (IsFlagBitSet((uint)parameters.Flags, 8u) || (num != 2148073497u && num != 2148073494u && num != 2147942402u))
572 {
573 throw ((int)num).ToCryptographicException();
574 }
575 CreateCSP(parameters, randomKeyContainer, out safeProvHandle);
576 }
577 if (parameters.ParentWindowHandle != IntPtr.Zero)
578 {
579 IntPtr pbData = parameters.ParentWindowHandle;
580 if (!global::Interop.Advapi32.CryptSetProvParam(safeProvHandle, global::Interop.Advapi32.CryptProvParam.PP_CLIENT_HWND, ref pbData, 0))
581 {
582 throw GetErrorCode().ToCryptographicException();
583 }
584 }
585 if (parameters.KeyPassword != null)
586 {
588 try
589 {
590 global::Interop.Advapi32.CryptProvParam dwParam = ((parameters.KeyNumber == 2) ? global::Interop.Advapi32.CryptProvParam.PP_SIGNATURE_PIN : global::Interop.Advapi32.CryptProvParam.PP_KEYEXCHANGE_PIN);
591 if (!global::Interop.Advapi32.CryptSetProvParam(safeProvHandle, dwParam, intPtr, 0))
592 {
593 throw GetErrorCode().ToCryptographicException();
594 }
595 }
596 finally
597 {
598 if (intPtr != IntPtr.Zero)
599 {
601 }
602 }
603 }
604 return safeProvHandle;
605 }
static int OpenCSP(CspParameters cspParameters, uint flags, out SafeProvHandle safeProvHandle)
static bool IsFlagBitSet(uint dwImp, uint flag)
static void CreateCSP(CspParameters parameters, bool randomKeyContainer, out SafeProvHandle safeProvHandle)
static IntPtr SecureStringToCoTaskMemAnsi(SecureString s)
Definition Marshal.cs:1257
static void ZeroFreeCoTaskMemAnsi(IntPtr s)
Definition Marshal.cs:1490
static readonly IntPtr Zero
Definition IntPtr.cs:18

References Internal.NativeCrypto.CapiHelper.CreateCSP(), System.Security.Cryptography.SafeProvHandle.Dispose(), System.Security.Cryptography.CspParameters.Flags, Internal.NativeCrypto.CapiHelper.GetErrorCode(), Internal.NativeCrypto.CapiHelper.IsFlagBitSet(), System.Security.Cryptography.CspParameters.KeyPassword, Internal.NativeCrypto.CapiHelper.OpenCSP(), System.Security.Cryptography.CspParameters.ParentWindowHandle, System.Runtime.InteropServices.Marshal.SecureStringToCoTaskMemAnsi(), System.IntPtr.Zero, and System.Runtime.InteropServices.Marshal.ZeroFreeCoTaskMemAnsi().