File: src\libraries\Common\src\Interop\Unix\System.Security.Cryptography.Native\Interop.BIO.cs
Web Access
Project: src\src\libraries\System.Net.Quic\src\System.Net.Quic.csproj (System.Net.Quic)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;
 
internal static partial class Interop
{
    internal static partial class Crypto
    {
        [LibraryImport(Libraries.CryptoNative, EntryPoint = "CryptoNative_CreateMemoryBio")]
        internal static partial SafeBioHandle CreateMemoryBio();
 
        [LibraryImport(Libraries.CryptoNative, EntryPoint = "CryptoNative_BioNewFile", StringMarshalling = StringMarshalling.Utf8)]
        internal static partial SafeBioHandle BioNewFile(string filename, string mode);
 
        [LibraryImport(Libraries.CryptoNative, EntryPoint = "CryptoNative_BioDestroy")]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static partial bool BioDestroy(IntPtr a);
 
        [LibraryImport(Libraries.CryptoNative, EntryPoint = "CryptoNative_BioGets")]
        private static unsafe partial int BioGets(SafeBioHandle b, byte* buf, int size);
 
        internal static unsafe int BioGets(SafeBioHandle b, Span<byte> buf)
        {
            fixed (byte* pBuf = buf)
            {
                return BioGets(b, pBuf, buf.Length);
            }
        }
 
        [LibraryImport(Libraries.CryptoNative, EntryPoint = "CryptoNative_BioRead")]
        internal static partial int BioRead(SafeBioHandle b, byte[] data, int len);
 
        [LibraryImport(Libraries.CryptoNative, EntryPoint = "CryptoNative_BioRead")]
        private static partial int BioRead(SafeBioHandle b, Span<byte> data, int len);
        internal static int BioRead(SafeBioHandle b, Span<byte> data) => BioRead(b, data, data.Length);
 
        [LibraryImport(Libraries.CryptoNative, EntryPoint = "CryptoNative_BioWrite")]
        internal static partial int BioWrite(SafeBioHandle b, byte[] data, int len);
 
        internal static int BioWrite(SafeBioHandle b, ReadOnlySpan<byte> data) =>
            BioWrite(b, ref MemoryMarshal.GetReference(data), data.Length);
 
        [LibraryImport(Libraries.CryptoNative, EntryPoint = "CryptoNative_BioWrite")]
        private static partial int BioWrite(SafeBioHandle b, ref byte data, int len);
 
        [LibraryImport(Libraries.CryptoNative, EntryPoint = "CryptoNative_GetMemoryBioSize")]
        internal static partial int GetMemoryBioSize(SafeBioHandle bio);
 
        [LibraryImport(Libraries.CryptoNative, EntryPoint = "CryptoNative_BioCtrlPending")]
        internal static partial int BioCtrlPending(SafeBioHandle bio);
    }
}