File: src\runtime\src\libraries\Common\src\Interop\Windows\BCrypt\Interop.BCryptAlgPseudoHandle.cs
Web Access
Project: src\src\runtime\src\libraries\System.Security.Cryptography\src\System.Security.Cryptography.csproj (System.Security.Cryptography)
// 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;

internal static partial class Interop
{
    internal static partial class BCrypt
    {
        // Pseudo-handles, as defined in bcrypt.h
        // TODO: This really should be backed by 'nuint' (see https://github.com/dotnet/roslyn/issues/44110)
        public enum BCryptAlgPseudoHandle : uint
        {
            BCRYPT_MD5_ALG_HANDLE = 0x00000021,
            BCRYPT_SHA1_ALG_HANDLE = 0x00000031,
            BCRYPT_SHA256_ALG_HANDLE = 0x00000041,
            BCRYPT_SHA384_ALG_HANDLE = 0x00000051,
            BCRYPT_SHA512_ALG_HANDLE = 0x00000061,
            BCRYPT_HMAC_MD5_ALG_HANDLE = 0x00000091,
            BCRYPT_HMAC_SHA1_ALG_HANDLE = 0x000000a1,
            BCRYPT_HMAC_SHA256_ALG_HANDLE = 0x000000b1,
            BCRYPT_HMAC_SHA384_ALG_HANDLE = 0x000000c1,
            BCRYPT_HMAC_SHA512_ALG_HANDLE = 0x000000d1,
            BCRYPT_PBKDF2_ALG_HANDLE = 0x00000331,
            BCRYPT_HKDF_ALG_HANDLE = 0x00000391,
            BCRYPT_SHA3_256_ALG_HANDLE = 0x000003B1,
            BCRYPT_SHA3_384_ALG_HANDLE = 0x000003C1,
            BCRYPT_SHA3_512_ALG_HANDLE = 0x000003D1,
            BCRYPT_HMAC_SHA3_256_ALG_HANDLE = 0x000003E1,
            BCRYPT_HMAC_SHA3_384_ALG_HANDLE = 0x000003F1,
            BCRYPT_HMAC_SHA3_512_ALG_HANDLE = 0x00000401,
            BCRYPT_CSHAKE128_ALG_HANDLE = 0x00000411,
            BCRYPT_CSHAKE256_ALG_HANDLE = 0x00000421,
            BCRYPT_KMAC128_ALG_HANDLE = 0x00000431,
            BCRYPT_KMAC256_ALG_HANDLE = 0x00000441,
        }

        internal static bool PseudoHandlesSupported { get; } =
#if NET
            OperatingSystem.IsWindowsVersionAtLeast(10, 0, 0);
#elif NETSTANDARD2_0_OR_GREATER
            RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && Environment.OSVersion.Version.Major >= 10;
#elif NETFRAMEWORK
            Environment.OSVersion.Version.Major >= 10;
#else
#error Unhandled platform targets
#endif
    }
}