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

◆ DeriveKeyMaterial() [4/4]

static unsafe byte[] Interop.NCrypt.DeriveKeyMaterial ( SafeNCryptSecretHandle secretAgreement,
string kdf,
string hashAlgorithm,
byte[] hmacKey,
byte[] secretPrepend,
byte[] secretAppend,
SecretAgreementFlags flags )
inlinestaticprivate

Definition at line 694 of file Interop.cs.

695 {
696 IntPtr intPtr = IntPtr.Zero;
697 try
698 {
699 intPtr = Marshal.StringToCoTaskMemUni(hashAlgorithm);
700 Span<NCryptBuffer> span = stackalloc NCryptBuffer[4];
701 int num = 0;
702 NCryptBuffer nCryptBuffer = default(NCryptBuffer);
703 nCryptBuffer.cbBuffer = (hashAlgorithm.Length + 1) * 2;
704 nCryptBuffer.BufferType = BufferType.KdfHashAlgorithm;
705 nCryptBuffer.pvBuffer = intPtr;
706 span[num] = nCryptBuffer;
707 num++;
708 fixed (byte* ptr = hmacKey)
709 {
710 fixed (byte* ptr2 = secretPrepend)
711 {
712 fixed (byte* ptr3 = secretAppend)
713 {
714 if (ptr != null)
715 {
716 NCryptBuffer nCryptBuffer2 = default(NCryptBuffer);
717 nCryptBuffer2.cbBuffer = hmacKey.Length;
718 nCryptBuffer2.BufferType = BufferType.KdfHmacKey;
719 nCryptBuffer2.pvBuffer = new IntPtr(ptr);
720 span[num] = nCryptBuffer2;
721 num++;
722 }
723 if (ptr2 != null)
724 {
725 NCryptBuffer nCryptBuffer3 = default(NCryptBuffer);
726 nCryptBuffer3.cbBuffer = secretPrepend.Length;
727 nCryptBuffer3.BufferType = BufferType.KdfSecretPrepend;
728 nCryptBuffer3.pvBuffer = new IntPtr(ptr2);
729 span[num] = nCryptBuffer3;
730 num++;
731 }
732 if (ptr3 != null)
733 {
734 NCryptBuffer nCryptBuffer4 = default(NCryptBuffer);
735 nCryptBuffer4.cbBuffer = secretAppend.Length;
736 nCryptBuffer4.BufferType = BufferType.KdfSecretAppend;
737 nCryptBuffer4.pvBuffer = new IntPtr(ptr3);
738 span[num] = nCryptBuffer4;
739 num++;
740 }
741 return DeriveKeyMaterial(secretAgreement, kdf, span.Slice(0, num), flags);
742 }
743 }
744 }
745 }
746 finally
747 {
748 if (intPtr != IntPtr.Zero)
749 {
750 Marshal.FreeCoTaskMem(intPtr);
751 }
752 }
753 }
static unsafe byte[] DeriveKeyMaterial(SafeNCryptSecretHandle secretAgreement, string kdf, string hashAlgorithm, byte[] hmacKey, byte[] secretPrepend, byte[] secretAppend, SecretAgreementFlags flags)
Definition Interop.cs:617
static unsafe IntPtr StringToCoTaskMemUni(string? s)
Definition Marshal.cs:1327
static void FreeCoTaskMem(IntPtr ptr)
Definition Marshal.cs:1712
static readonly IntPtr Zero
Definition IntPtr.cs:18
Span< T > Slice(int start)
Definition Span.cs:271

References Interop.NCrypt.DeriveKeyMaterial(), System.Runtime.InteropServices.Marshal.FreeCoTaskMem(), System.Span< T >.Slice(), System.Runtime.InteropServices.Marshal.StringToCoTaskMemUni(), and System.IntPtr.Zero.