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

◆ GetProviderParameter()

static object Internal.NativeCrypto.CapiHelper.GetProviderParameter ( SafeProvHandle safeProvHandle,
int keyNumber,
int keyParam )
inlinestatic

Definition at line 626 of file CapiHelper.cs.

627 {
628 VerifyValidHandle(safeProvHandle);
629 byte[] impType = new byte[4];
630 int cb = 4;
632 int num = 0;
633 int num2 = 0;
634 bool flag = false;
635 string result = null;
636 try
637 {
638 switch (keyParam)
639 {
640 case 3:
641 num = GetProviderParameterWorker(safeProvHandle, impType, ref cb, global::Interop.Advapi32.CryptProvParam.PP_IMPTYPE);
642 if (!IsFlagBitSet((uint)num, 1u))
643 {
644 if (!CryptGetUserKey(safeProvHandle, keyNumber, out safeKeyHandle))
645 {
646 throw GetErrorCode().ToCryptographicException();
647 }
648 byte[] array = null;
649 int num3 = 0;
650 array = new byte[4];
651 cb = 4;
652 if (!global::Interop.Advapi32.CryptGetKeyParam(safeKeyHandle, global::Interop.Advapi32.CryptGetKeyParamFlags.KP_PERMISSIONS, array, ref cb, 0))
653 {
654 throw GetErrorCode().ToCryptographicException();
655 }
656 num3 = BitConverter.ToInt32(array, 0);
657 flag = IsFlagBitSet((uint)num3, 4u);
658 }
659 else
660 {
661 flag = false;
662 }
663 break;
664 case 4:
665 num = GetProviderParameterWorker(safeProvHandle, impType, ref cb, global::Interop.Advapi32.CryptProvParam.PP_IMPTYPE);
666 flag = IsFlagBitSet((uint)num, 8u);
667 break;
668 case 5:
669 case 7:
670 num = GetProviderParameterWorker(safeProvHandle, impType, ref cb, global::Interop.Advapi32.CryptProvParam.PP_IMPTYPE);
671 flag = IsFlagBitSet((uint)num, 1u);
672 break;
673 case 6:
674 flag = (CryptGetUserKey(safeProvHandle, keyNumber, out safeKeyHandle) ? true : false);
675 break;
676 case 8:
677 {
678 num2 = 1;
679 byte[] impType2 = null;
680 num = GetProviderParameterWorker(safeProvHandle, impType2, ref cb, global::Interop.Advapi32.CryptProvParam.PP_UNIQUE_CONTAINER);
681 impType2 = new byte[cb];
682 num = GetProviderParameterWorker(safeProvHandle, impType2, ref cb, global::Interop.Advapi32.CryptProvParam.PP_UNIQUE_CONTAINER);
683 result = Encoding.ASCII.GetString(impType2, 0, cb - 1);
684 break;
685 }
686 }
687 }
688 finally
689 {
690 safeKeyHandle.Dispose();
691 }
692 if (num2 != 0)
693 {
694 return result;
695 }
696 return flag;
697 }
static int GetProviderParameterWorker(SafeProvHandle safeProvHandle, byte[] impType, ref int cb, global::Interop.Advapi32.CryptProvParam flags)
static void VerifyValidHandle(SafeHandleZeroOrMinusOneIsInvalid handle)
static bool IsFlagBitSet(uint dwImp, uint flag)
static bool CryptGetUserKey(SafeProvHandle safeProvHandle, int dwKeySpec, out SafeKeyHandle safeKeyHandle)
static int ToInt32(byte[] value, int startIndex)
static Encoding ASCII
Definition Encoding.cs:511

References System.array, System.Text.Encoding.ASCII, Internal.NativeCrypto.CapiHelper.CryptGetUserKey(), System.Runtime.InteropServices.SafeHandle.Dispose(), Internal.NativeCrypto.CapiHelper.GetErrorCode(), Internal.NativeCrypto.CapiHelper.GetProviderParameterWorker(), Internal.NativeCrypto.CapiHelper.IsFlagBitSet(), System.BitConverter.ToInt32(), and Internal.NativeCrypto.CapiHelper.VerifyValidHandle().

Referenced by System.Security.Cryptography.CspKeyContainerInfo.ReadDeviceParameterVerifyContext(), and System.Security.Cryptography.CspKeyContainerInfo.ReadKeyParameterSilent().