+ /*
+ * Parse a cipher suite name.
+ */
+ public static int GetSuiteByName(string s)
+ {
+ string t = s.Trim().Replace("_", "").Replace("-", "")
+ .ToUpperInvariant();
+ if (t.StartsWith("TLS") || t.StartsWith("SSL")) {
+ t = t.Substring(3);
+ }
+ switch (t) {
+ case "NULLWITHNULLNULL":
+ return NULL_WITH_NULL_NULL;
+ case "RSAWITHNULLMD5":
+ return RSA_WITH_NULL_MD5;
+ case "RSAWITHNULLSHA":
+ return RSA_WITH_NULL_SHA;
+ case "RSAWITHNULLSHA256":
+ return RSA_WITH_NULL_SHA256;
+ case "RSAWITHRC4128MD5":
+ return RSA_WITH_RC4_128_MD5;
+ case "RSAWITHRC4128SHA":
+ return RSA_WITH_RC4_128_SHA;
+ case "RSAWITH3DESEDECBCSHA":
+ return RSA_WITH_3DES_EDE_CBC_SHA;
+ case "RSAWITHAES128CBCSHA":
+ return RSA_WITH_AES_128_CBC_SHA;
+ case "RSAWITHAES256CBCSHA":
+ return RSA_WITH_AES_256_CBC_SHA;
+ case "RSAWITHAES128CBCSHA256":
+ return RSA_WITH_AES_128_CBC_SHA256;
+ case "RSAWITHAES256CBCSHA256":
+ return RSA_WITH_AES_256_CBC_SHA256;
+ case "DHDSSWITH3DESEDECBCSHA":
+ return DH_DSS_WITH_3DES_EDE_CBC_SHA;
+ case "DHRSAWITH3DESEDECBCSHA":
+ return DH_RSA_WITH_3DES_EDE_CBC_SHA;
+ case "DHEDSSWITH3DESEDECBCSHA":
+ return DHE_DSS_WITH_3DES_EDE_CBC_SHA;
+ case "DHERSAWITH3DESEDECBCSHA":
+ return DHE_RSA_WITH_3DES_EDE_CBC_SHA;
+ case "DHDSSWITHAES128CBCSHA":
+ return DH_DSS_WITH_AES_128_CBC_SHA;
+ case "DHRSAWITHAES128CBCSHA":
+ return DH_RSA_WITH_AES_128_CBC_SHA;
+ case "DHEDSSWITHAES128CBCSHA":
+ return DHE_DSS_WITH_AES_128_CBC_SHA;
+ case "DHERSAWITHAES128CBCSHA":
+ return DHE_RSA_WITH_AES_128_CBC_SHA;
+ case "DHDSSWITHAES256CBCSHA":
+ return DH_DSS_WITH_AES_256_CBC_SHA;
+ case "DHRSAWITHAES256CBCSHA":
+ return DH_RSA_WITH_AES_256_CBC_SHA;
+ case "DHEDSSWITHAES256CBCSHA":
+ return DHE_DSS_WITH_AES_256_CBC_SHA;
+ case "DHERSAWITHAES256CBCSHA":
+ return DHE_RSA_WITH_AES_256_CBC_SHA;
+ case "DHDSSWITHAES128CBCSHA256":
+ return DH_DSS_WITH_AES_128_CBC_SHA256;
+ case "DHRSAWITHAES128CBCSHA256":
+ return DH_RSA_WITH_AES_128_CBC_SHA256;
+ case "DHEDSSWITHAES128CBCSHA256":
+ return DHE_DSS_WITH_AES_128_CBC_SHA256;
+ case "DHERSAWITHAES128CBCSHA256":
+ return DHE_RSA_WITH_AES_128_CBC_SHA256;
+ case "DHDSSWITHAES256CBCSHA256":
+ return DH_DSS_WITH_AES_256_CBC_SHA256;
+ case "DHRSAWITHAES256CBCSHA256":
+ return DH_RSA_WITH_AES_256_CBC_SHA256;
+ case "DHEDSSWITHAES256CBCSHA256":
+ return DHE_DSS_WITH_AES_256_CBC_SHA256;
+ case "DHERSAWITHAES256CBCSHA256":
+ return DHE_RSA_WITH_AES_256_CBC_SHA256;
+ case "DHANONWITHRC4128MD5":
+ return DH_anon_WITH_RC4_128_MD5;
+ case "DHANONWITH3DESEDECBCSHA":
+ return DH_anon_WITH_3DES_EDE_CBC_SHA;
+ case "DHANONWITHAES128CBCSHA":
+ return DH_anon_WITH_AES_128_CBC_SHA;
+ case "DHANONWITHAES256CBCSHA":
+ return DH_anon_WITH_AES_256_CBC_SHA;
+ case "DHANONWITHAES128CBCSHA256":
+ return DH_anon_WITH_AES_128_CBC_SHA256;
+ case "DHANONWITHAES256CBCSHA256":
+ return DH_anon_WITH_AES_256_CBC_SHA256;
+ case "ECDHECDSAWITHNULLSHA":
+ return ECDH_ECDSA_WITH_NULL_SHA;
+ case "ECDHECDSAWITHRC4128SHA":
+ return ECDH_ECDSA_WITH_RC4_128_SHA;
+ case "ECDHECDSAWITH3DESEDECBCSHA":
+ return ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA;
+ case "ECDHECDSAWITHAES128CBCSHA":
+ return ECDH_ECDSA_WITH_AES_128_CBC_SHA;
+ case "ECDHECDSAWITHAES256CBCSHA":
+ return ECDH_ECDSA_WITH_AES_256_CBC_SHA;
+ case "ECDHEECDSAWITHNULLSHA":
+ return ECDHE_ECDSA_WITH_NULL_SHA;
+ case "ECDHEECDSAWITHRC4128SHA":
+ return ECDHE_ECDSA_WITH_RC4_128_SHA;
+ case "ECDHEECDSAWITH3DESEDECBCSHA":
+ return ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA;
+ case "ECDHEECDSAWITHAES128CBCSHA":
+ return ECDHE_ECDSA_WITH_AES_128_CBC_SHA;
+ case "ECDHEECDSAWITHAES256CBCSHA":
+ return ECDHE_ECDSA_WITH_AES_256_CBC_SHA;
+ case "ECDHRSAWITHNULLSHA":
+ return ECDH_RSA_WITH_NULL_SHA;
+ case "ECDHRSAWITHRC4128SHA":
+ return ECDH_RSA_WITH_RC4_128_SHA;
+ case "ECDHRSAWITH3DESEDECBCSHA":
+ return ECDH_RSA_WITH_3DES_EDE_CBC_SHA;
+ case "ECDHRSAWITHAES128CBCSHA":
+ return ECDH_RSA_WITH_AES_128_CBC_SHA;
+ case "ECDHRSAWITHAES256CBCSHA":
+ return ECDH_RSA_WITH_AES_256_CBC_SHA;
+ case "ECDHERSAWITHNULLSHA":
+ return ECDHE_RSA_WITH_NULL_SHA;
+ case "ECDHERSAWITHRC4128SHA":
+ return ECDHE_RSA_WITH_RC4_128_SHA;
+ case "ECDHERSAWITH3DESEDECBCSHA":
+ return ECDHE_RSA_WITH_3DES_EDE_CBC_SHA;
+ case "ECDHERSAWITHAES128CBCSHA":
+ return ECDHE_RSA_WITH_AES_128_CBC_SHA;
+ case "ECDHERSAWITHAES256CBCSHA":
+ return ECDHE_RSA_WITH_AES_256_CBC_SHA;
+ case "ECDHANONWITHNULLSHA":
+ return ECDH_anon_WITH_NULL_SHA;
+ case "ECDHANONWITHRC4128SHA":
+ return ECDH_anon_WITH_RC4_128_SHA;
+ case "ECDHANONWITH3DESEDECBCSHA":
+ return ECDH_anon_WITH_3DES_EDE_CBC_SHA;
+ case "ECDHANONWITHAES128CBCSHA":
+ return ECDH_anon_WITH_AES_128_CBC_SHA;
+ case "ECDHANONWITHAES256CBCSHA":
+ return ECDH_anon_WITH_AES_256_CBC_SHA;
+ case "RSAWITHAES128GCMSHA256":
+ return RSA_WITH_AES_128_GCM_SHA256;
+ case "RSAWITHAES256GCMSHA384":
+ return RSA_WITH_AES_256_GCM_SHA384;
+ case "DHERSAWITHAES128GCMSHA256":
+ return DHE_RSA_WITH_AES_128_GCM_SHA256;
+ case "DHERSAWITHAES256GCMSHA384":
+ return DHE_RSA_WITH_AES_256_GCM_SHA384;
+ case "DHRSAWITHAES128GCMSHA256":
+ return DH_RSA_WITH_AES_128_GCM_SHA256;
+ case "DHRSAWITHAES256GCMSHA384":
+ return DH_RSA_WITH_AES_256_GCM_SHA384;
+ case "DHEDSSWITHAES128GCMSHA256":
+ return DHE_DSS_WITH_AES_128_GCM_SHA256;
+ case "DHEDSSWITHAES256GCMSHA384":
+ return DHE_DSS_WITH_AES_256_GCM_SHA384;
+ case "DHDSSWITHAES128GCMSHA256":
+ return DH_DSS_WITH_AES_128_GCM_SHA256;
+ case "DHDSSWITHAES256GCMSHA384":
+ return DH_DSS_WITH_AES_256_GCM_SHA384;
+ case "DHANONWITHAES128GCMSHA256":
+ return DH_anon_WITH_AES_128_GCM_SHA256;
+ case "DHANONWITHAES256GCMSHA384":
+ return DH_anon_WITH_AES_256_GCM_SHA384;
+ case "ECDHEECDSAWITHAES128CBCSHA256":
+ return ECDHE_ECDSA_WITH_AES_128_CBC_SHA256;
+ case "ECDHEECDSAWITHAES256CBCSHA384":
+ return ECDHE_ECDSA_WITH_AES_256_CBC_SHA384;
+ case "ECDHECDSAWITHAES128CBCSHA256":
+ return ECDH_ECDSA_WITH_AES_128_CBC_SHA256;
+ case "ECDHECDSAWITHAES256CBCSHA384":
+ return ECDH_ECDSA_WITH_AES_256_CBC_SHA384;
+ case "ECDHERSAWITHAES128CBCSHA256":
+ return ECDHE_RSA_WITH_AES_128_CBC_SHA256;
+ case "ECDHERSAWITHAES256CBCSHA384":
+ return ECDHE_RSA_WITH_AES_256_CBC_SHA384;
+ case "ECDHRSAWITHAES128CBCSHA256":
+ return ECDH_RSA_WITH_AES_128_CBC_SHA256;
+ case "ECDHRSAWITHAES256CBCSHA384":
+ return ECDH_RSA_WITH_AES_256_CBC_SHA384;
+ case "ECDHEECDSAWITHAES128GCMSHA256":
+ return ECDHE_ECDSA_WITH_AES_128_GCM_SHA256;
+ case "ECDHEECDSAWITHAES256GCMSHA384":
+ return ECDHE_ECDSA_WITH_AES_256_GCM_SHA384;
+ case "ECDHECDSAWITHAES128GCMSHA256":
+ return ECDH_ECDSA_WITH_AES_128_GCM_SHA256;
+ case "ECDHECDSAWITHAES256GCMSHA384":
+ return ECDH_ECDSA_WITH_AES_256_GCM_SHA384;
+ case "ECDHERSAWITHAES128GCMSHA256":
+ return ECDHE_RSA_WITH_AES_128_GCM_SHA256;
+ case "ECDHERSAWITHAES256GCMSHA384":
+ return ECDHE_RSA_WITH_AES_256_GCM_SHA384;
+ case "ECDHRSAWITHAES128GCMSHA256":
+ return ECDH_RSA_WITH_AES_128_GCM_SHA256;
+ case "ECDHRSAWITHAES256GCMSHA384":
+ return ECDH_RSA_WITH_AES_256_GCM_SHA384;
+ case "ECDHERSAWITHCHACHA20POLY1305SHA256":
+ return ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256;
+ case "ECDHEECDSAWITHCHACHA20POLY1305SHA256":
+ return ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256;
+ case "DHERSAWITHCHACHA20POLY1305SHA256":
+ return DHE_RSA_WITH_CHACHA20_POLY1305_SHA256;
+ case "PSKWITHCHACHA20POLY1305SHA256":
+ return PSK_WITH_CHACHA20_POLY1305_SHA256;
+ case "ECDHEPSKWITHCHACHA20POLY1305SHA256":
+ return ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256;
+ case "DHEPSKWITHCHACHA20POLY1305SHA256":
+ return DHE_PSK_WITH_CHACHA20_POLY1305_SHA256;
+ case "RSAPSKWITHCHACHA20POLY1305SHA256":
+ return RSA_PSK_WITH_CHACHA20_POLY1305_SHA256;
+
+ default:
+ throw new Exception(string.Format(
+ "Unknown cipher suite: '{0}'", s));
+ }
+ }
+