695 {
697 try
698 {
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 }
742 }
743 }
744 }
745 }
746 finally
747 {
749 {
751 }
752 }
753 }
static unsafe byte[] DeriveKeyMaterial(SafeNCryptSecretHandle secretAgreement, string kdf, string hashAlgorithm, byte[] hmacKey, byte[] secretPrepend, byte[] secretAppend, SecretAgreementFlags flags)
static unsafe IntPtr StringToCoTaskMemUni(string? s)
static void FreeCoTaskMem(IntPtr ptr)
static readonly IntPtr Zero
Span< T > Slice(int start)