internal SecBufferDesc(byte[] buffer)
{
// Set version to SECBUFFER_VERSION
Version = (int)SecBufferDescType.Version;
// We have only one buffer
BufferCount = 1;
// Allocate security buffer
SecBuffer secBuffer = new SecBuffer(buffer);
// Allocate native memory for managed block
BuffersPtr = Marshal.AllocHGlobal(Marshal.SizeOf(secBuffer));
try
{
// Copy managed data into the native memory
Marshal.StructureToPtr(secBuffer, BuffersPtr, false);
}
catch (Exception)
{
// Delete native memory
Marshal.FreeHGlobal(BuffersPtr);
// Reset native buffer pointer
BuffersPtr = IntPtr.Zero;
// Re-throw exception
throw;
}
}