<PackageReference Include="BouncyCastle.Cryptography" Version="2.5.0" />

SignatureScheme

public abstract class SignatureScheme
using Org.BouncyCastle.Tls.Crypto; using System; namespace Org.BouncyCastle.Tls { public abstract class SignatureScheme { public const int rsa_pkcs1_sha1 = 513; public const int ecdsa_sha1 = 515; public const int rsa_pkcs1_sha256 = 1025; public const int rsa_pkcs1_sha384 = 1281; public const int rsa_pkcs1_sha512 = 1537; public const int ecdsa_secp256r1_sha256 = 1027; public const int ecdsa_secp384r1_sha384 = 1283; public const int ecdsa_secp521r1_sha512 = 1539; public const int rsa_pss_rsae_sha256 = 2052; public const int rsa_pss_rsae_sha384 = 2053; public const int rsa_pss_rsae_sha512 = 2054; public const int ed25519 = 2055; public const int ed448 = 2056; public const int rsa_pss_pss_sha256 = 2057; public const int rsa_pss_pss_sha384 = 2058; public const int rsa_pss_pss_sha512 = 2059; public const int ecdsa_brainpoolP256r1tls13_sha256 = 2074; public const int ecdsa_brainpoolP384r1tls13_sha384 = 2075; public const int ecdsa_brainpoolP512r1tls13_sha512 = 2076; public const int sm2sig_sm3 = 1800; public static int From(SignatureAndHashAlgorithm sigAndHashAlg) { if (sigAndHashAlg == null) throw new ArgumentNullException(); return From(sigAndHashAlg.Hash, sigAndHashAlg.Signature); } public static int From(short hashAlgorithm, short signatureAlgorithm) { return ((hashAlgorithm & 255) << 8) | (signatureAlgorithm & 255); } public static int GetCryptoHashAlgorithm(int signatureScheme) { switch (signatureScheme) { case 2055: case 2056: return -1; case 2052: case 2057: case 2074: return 4; case 2053: case 2058: case 2075: return 5; case 2054: case 2059: case 2076: return 6; case 1800: return 7; default: { short hashAlgorithm = GetHashAlgorithm(signatureScheme); if (8 == hashAlgorithm || !HashAlgorithm.IsRecognized(hashAlgorithm)) return -1; return TlsCryptoUtilities.GetHash(hashAlgorithm); } } } public static int GetCryptoHashAlgorithm(SignatureAndHashAlgorithm signatureAndHashAlgorithm) { return GetCryptoHashAlgorithm(From(signatureAndHashAlgorithm)); } public static string GetName(int signatureScheme) { switch (signatureScheme) { case 513: return "rsa_pkcs1_sha1"; case 515: return "ecdsa_sha1"; case 1025: return "rsa_pkcs1_sha256"; case 1281: return "rsa_pkcs1_sha384"; case 1537: return "rsa_pkcs1_sha512"; case 1027: return "ecdsa_secp256r1_sha256"; case 1283: return "ecdsa_secp384r1_sha384"; case 1539: return "ecdsa_secp521r1_sha512"; case 2052: return "rsa_pss_rsae_sha256"; case 2053: return "rsa_pss_rsae_sha384"; case 2054: return "rsa_pss_rsae_sha512"; case 2055: return "ed25519"; case 2056: return "ed448"; case 2057: return "rsa_pss_pss_sha256"; case 2058: return "rsa_pss_pss_sha384"; case 2059: return "rsa_pss_pss_sha512"; case 2074: return "ecdsa_brainpoolP256r1tls13_sha256"; case 2075: return "ecdsa_brainpoolP384r1tls13_sha384"; case 2076: return "ecdsa_brainpoolP512r1tls13_sha512"; case 1800: return "sm2sig_sm3"; default: return "UNKNOWN"; } } public static int GetNamedGroup(int signatureScheme) { switch (signatureScheme) { case 2074: return 31; case 2075: return 32; case 2076: return 33; case 1027: return 23; case 1283: return 24; case 1539: return 25; case 1800: return 41; default: return -1; } } public static short GetHashAlgorithm(int signatureScheme) { return (short)((signatureScheme >> 8) & 255); } public static short GetSignatureAlgorithm(int signatureScheme) { return (short)(signatureScheme & 255); } public static SignatureAndHashAlgorithm GetSignatureAndHashAlgorithm(int signatureScheme) { return SignatureAndHashAlgorithm.GetInstance(GetHashAlgorithm(signatureScheme), GetSignatureAlgorithm(signatureScheme)); } public static string GetText(int signatureScheme) { string str = Convert.ToString(signatureScheme, 16).ToUpperInvariant(); return GetName(signatureScheme) + "(0x" + str + ")"; } public static bool IsPrivate(int signatureScheme) { return signatureScheme >> 9 == 254; } public static bool IsECDsa(int signatureScheme) { if ((uint)(signatureScheme - 2074) <= 2) return true; return 3 == GetSignatureAlgorithm(signatureScheme); } public static bool IsRsaPss(int signatureScheme) { if ((uint)(signatureScheme - 2052) <= 2 || (uint)(signatureScheme - 2057) <= 2) return true; return false; } } }