cfsslscan_common.go 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. package tls
  2. import (
  3. "fmt"
  4. )
  5. type hashAlgID uint8
  6. const (
  7. HashNone hashAlgID = iota
  8. HashMD5
  9. HashSHA1
  10. HashSHA224
  11. HashSHA256
  12. HashSHA384
  13. HashSHA512
  14. )
  15. func (h hashAlgID) String() string {
  16. switch h {
  17. case HashNone:
  18. return "None"
  19. case HashMD5:
  20. return "MD5"
  21. case HashSHA1:
  22. return "SHA1"
  23. case HashSHA224:
  24. return "SHA224"
  25. case HashSHA256:
  26. return "SHA256"
  27. case HashSHA384:
  28. return "SHA384"
  29. case HashSHA512:
  30. return "SHA512"
  31. default:
  32. return "Unknown"
  33. }
  34. }
  35. type sigAlgID uint8
  36. // Signature algorithms for TLS 1.2 (See RFC 5246, section A.4.1)
  37. const (
  38. SigAnon sigAlgID = iota
  39. SigRSA
  40. SigDSA
  41. SigECDSA
  42. )
  43. func (sig sigAlgID) String() string {
  44. switch sig {
  45. case SigAnon:
  46. return "Anon"
  47. case SigRSA:
  48. return "RSA"
  49. case SigDSA:
  50. return "DSA"
  51. case SigECDSA:
  52. return "ECDSA"
  53. default:
  54. return "Unknown"
  55. }
  56. }
  57. // SignatureAndHash mirrors the TLS 1.2, SignatureAndHashAlgorithm struct. See
  58. // RFC 5246, section A.4.1.
  59. type SignatureAndHash struct {
  60. h hashAlgID
  61. s sigAlgID
  62. }
  63. func (sigAlg SignatureAndHash) String() string {
  64. return fmt.Sprintf("{%s,%s}", sigAlg.s, sigAlg.h)
  65. }
  66. func (sigAlg SignatureAndHash) MarshalJSON() ([]byte, error) {
  67. return []byte(fmt.Sprintf(`{"signature":"%s","hash":"%s"}`, sigAlg.s, sigAlg.h)), nil
  68. }
  69. func (sigAlg SignatureAndHash) internal() signatureAndHash {
  70. return signatureAndHash{uint8(sigAlg.h), uint8(sigAlg.s)}
  71. }
  72. // defaultSignatureAndHashAlgorithms contains the default signature and hash
  73. // algorithm paris supported by `crypto/tls`
  74. var defaultSignatureAndHashAlgorithms []signatureAndHash
  75. // AllSignatureAndHashAlgorithms contains all possible signature and
  76. // hash algorithm pairs that the can be advertised in a TLS 1.2 ClientHello.
  77. var AllSignatureAndHashAlgorithms []SignatureAndHash
  78. func init() {
  79. defaultSignatureAndHashAlgorithms = supportedSignatureAlgorithms
  80. for _, sighash := range supportedSignatureAlgorithms {
  81. AllSignatureAndHashAlgorithms = append(AllSignatureAndHashAlgorithms,
  82. SignatureAndHash{hashAlgID(sighash.hash), sigAlgID(sighash.signature)})
  83. }
  84. }
  85. // TLSVersions is a list of the current SSL/TLS Versions implemented by Go
  86. var Versions = map[uint16]string{
  87. VersionSSL30: "SSL 3.0",
  88. VersionTLS10: "TLS 1.0",
  89. VersionTLS11: "TLS 1.1",
  90. VersionTLS12: "TLS 1.2",
  91. }
  92. // CipherSuite describes an individual cipher suite, with long and short names
  93. // and security properties.
  94. type CipherSuite struct {
  95. Name, ShortName string
  96. // ForwardSecret cipher suites negotiate ephemeral keys, allowing forward secrecy.
  97. ForwardSecret bool
  98. EllipticCurve bool
  99. }
  100. // Returns the (short) name of the cipher suite.
  101. func (c CipherSuite) String() string {
  102. if c.ShortName != "" {
  103. return c.ShortName
  104. }
  105. return c.Name
  106. }
  107. // CipherSuites contains all values in the TLS Cipher Suite Registry
  108. // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml
  109. var CipherSuites = map[uint16]CipherSuite{
  110. 0x0000: {Name: "TLS_NULL_WITH_NULL_NULL"},
  111. 0x0001: {Name: "TLS_RSA_WITH_NULL_MD5"},
  112. 0x0002: {Name: "TLS_RSA_WITH_NULL_SHA"},
  113. 0x0003: {Name: "TLS_RSA_EXPORT_WITH_RC4_40_MD5", ShortName: "EXP-RC4-MD5"},
  114. 0x0004: {Name: "TLS_RSA_WITH_RC4_128_MD5", ShortName: "RC4-MD5"},
  115. 0x0005: {Name: "TLS_RSA_WITH_RC4_128_SHA", ShortName: "RC4-SHA"},
  116. 0x0006: {Name: "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5", ShortName: "EXP-RC2-CBC-MD5"},
  117. 0x0007: {Name: "TLS_RSA_WITH_IDEA_CBC_SHA", ShortName: "IDEA-CBC-SHA"},
  118. 0x0008: {Name: "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA", ShortName: "EXP-DES-CBC-SHA"},
  119. 0x0009: {Name: "TLS_RSA_WITH_DES_CBC_SHA", ShortName: "DES-CBC-SHA"},
  120. 0x000A: {Name: "TLS_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "DES-CBC3-SHA"},
  121. 0x000B: {Name: "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", ShortName: "EXP-DH-DSS-DES-CBC-SHA"},
  122. 0x000C: {Name: "TLS_DH_DSS_WITH_DES_CBC_SHA", ShortName: "DH-DSS-DES-CBC-SHA"},
  123. 0x000D: {Name: "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA", ShortName: "DH-DSS-DES-CBC3-SHA"},
  124. 0x000E: {Name: "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", ShortName: "EXP-DH-RSA-DES-CBC-SHA"},
  125. 0x000F: {Name: "TLS_DH_RSA_WITH_DES_CBC_SHA", ShortName: "DH-RSA-DES-CBC-SHA"},
  126. 0x0010: {Name: "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "DH-RSA-DES-CBC3-SHA"},
  127. 0x0011: {Name: "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", ShortName: "EXP-EDH-DSS-DES-CBC-SHA", ForwardSecret: true},
  128. 0x0012: {Name: "TLS_DHE_DSS_WITH_DES_CBC_SHA", ShortName: "EDH-DSS-DES-CBC-SHA", ForwardSecret: true},
  129. 0x0013: {Name: "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA", ShortName: "EDH-DSS-DES-CBC3-SHA", ForwardSecret: true},
  130. 0x0014: {Name: "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", ShortName: "EXP-EDH-RSA-DES-CBC-SHA", ForwardSecret: true},
  131. 0x0015: {Name: "TLS_DHE_RSA_WITH_DES_CBC_SHA", ShortName: "EDH-RSA-DES-CBC-SHA", ForwardSecret: true},
  132. 0x0016: {Name: "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "EDH-RSA-DES-CBC3-SHA", ForwardSecret: true},
  133. 0x0017: {Name: "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5"},
  134. 0x0018: {Name: "TLS_DH_anon_WITH_RC4_128_MD5"},
  135. 0x0019: {Name: "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA"},
  136. 0x001A: {Name: "TLS_DH_anon_WITH_DES_CBC_SHA"},
  137. 0x001B: {Name: "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"},
  138. 0x001E: {Name: "TLS_KRB5_WITH_DES_CBC_SHA"},
  139. 0x001F: {Name: "TLS_KRB5_WITH_3DES_EDE_CBC_SHA"},
  140. 0x0020: {Name: "TLS_KRB5_WITH_RC4_128_SHA"},
  141. 0x0021: {Name: "TLS_KRB5_WITH_IDEA_CBC_SHA"},
  142. 0x0022: {Name: "TLS_KRB5_WITH_DES_CBC_MD5"},
  143. 0x0023: {Name: "TLS_KRB5_WITH_3DES_EDE_CBC_MD5"},
  144. 0x0024: {Name: "TLS_KRB5_WITH_RC4_128_MD5"},
  145. 0x0025: {Name: "TLS_KRB5_WITH_IDEA_CBC_MD5"},
  146. 0x0026: {Name: "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA"},
  147. 0x0027: {Name: "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA"},
  148. 0x0028: {Name: "TLS_KRB5_EXPORT_WITH_RC4_40_SHA"},
  149. 0x0029: {Name: "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"},
  150. 0x002A: {Name: "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5"},
  151. 0x002B: {Name: "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"},
  152. 0x002C: {Name: "TLS_PSK_WITH_NULL_SHA"},
  153. 0x002D: {Name: "TLS_DHE_PSK_WITH_NULL_SHA", ForwardSecret: true},
  154. 0x002E: {Name: "TLS_RSA_PSK_WITH_NULL_SHA"},
  155. 0x002F: {Name: "TLS_RSA_WITH_AES_128_CBC_SHA", ShortName: "AES128-SHA"},
  156. 0x0030: {Name: "TLS_DH_DSS_WITH_AES_128_CBC_SHA", ShortName: "DH-DSS-AES128-SHA"},
  157. 0x0031: {Name: "TLS_DH_RSA_WITH_AES_128_CBC_SHA", ShortName: "DH-RSA-AES128-SHA"},
  158. 0x0032: {Name: "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", ShortName: "DHE-DSS-AES128-SHA", ForwardSecret: true},
  159. 0x0033: {Name: "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", ShortName: "DHE-RSA-AES128-SHA", ForwardSecret: true},
  160. 0x0034: {Name: "TLS_DH_anon_WITH_AES_128_CBC_SHA"},
  161. 0x0035: {Name: "TLS_RSA_WITH_AES_256_CBC_SHA", ShortName: "AES256-SHA"},
  162. 0x0036: {Name: "TLS_DH_DSS_WITH_AES_256_CBC_SHA", ShortName: "DH-DSS-AES256-SHA"},
  163. 0x0037: {Name: "TLS_DH_RSA_WITH_AES_256_CBC_SHA", ShortName: "DH-RSA-AES256-SHA"},
  164. 0x0038: {Name: "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", ShortName: "DHE-DSS-AES256-SHA", ForwardSecret: true},
  165. 0x0039: {Name: "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", ShortName: "DHE-RSA-AES256-SHA", ForwardSecret: true},
  166. 0x003A: {Name: "TLS_DH_anon_WITH_AES_256_CBC_SHA"},
  167. 0x003B: {Name: "TLS_RSA_WITH_NULL_SHA256"},
  168. 0x003C: {Name: "TLS_RSA_WITH_AES_128_CBC_SHA256", ShortName: "AES128-SHA256"},
  169. 0x003D: {Name: "TLS_RSA_WITH_AES_256_CBC_SHA256", ShortName: "AES256-SHA256"},
  170. 0x003E: {Name: "TLS_DH_DSS_WITH_AES_128_CBC_SHA256", ShortName: "DH-DSS-AES128-SHA256"},
  171. 0x003F: {Name: "TLS_DH_RSA_WITH_AES_128_CBC_SHA256", ShortName: "DH-RSA-AES128-SHA256"},
  172. 0x0040: {Name: "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", ShortName: "DHE-DSS-AES128-SHA256", ForwardSecret: true},
  173. 0x0041: {Name: "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA", ShortName: "CAMELLIA128-SHA"},
  174. 0x0042: {Name: "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA", ShortName: "DH-DSS-CAMELLIA128-SHA"},
  175. 0x0043: {Name: "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA", ShortName: "DH-RSA-CAMELLIA128-SHA"},
  176. 0x0044: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA", ShortName: "DHE-DSS-CAMELLIA128-SHA", ForwardSecret: true},
  177. 0x0045: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA", ShortName: "DHE-RSA-CAMELLIA128-SHA", ForwardSecret: true},
  178. 0x0046: {Name: "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA"},
  179. 0x0067: {Name: "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", ShortName: "DHE-RSA-AES128-SHA256", ForwardSecret: true},
  180. 0x0068: {Name: "TLS_DH_DSS_WITH_AES_256_CBC_SHA256", ShortName: "DH-DSS-AES256-SHA256"},
  181. 0x0069: {Name: "TLS_DH_RSA_WITH_AES_256_CBC_SHA256", ShortName: "DH-RSA-AES256-SHA256"},
  182. 0x006A: {Name: "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", ShortName: "DHE-DSS-AES256-SHA256", ForwardSecret: true},
  183. 0x006B: {Name: "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", ShortName: "DHE-RSA-AES256-SHA256", ForwardSecret: true},
  184. 0x006C: {Name: "TLS_DH_anon_WITH_AES_128_CBC_SHA256"},
  185. 0x006D: {Name: "TLS_DH_anon_WITH_AES_256_CBC_SHA256"},
  186. 0x0084: {Name: "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA", ShortName: "CAMELLIA256-SHA"},
  187. 0x0085: {Name: "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA", ShortName: "DH-DSS-CAMELLIA256-SHA"},
  188. 0x0086: {Name: "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA", ShortName: "DH-RSA-CAMELLIA256-SHA"},
  189. 0x0087: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA", ShortName: "DHE-DSS-CAMELLIA256-SHA", ForwardSecret: true},
  190. 0x0088: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA", ShortName: "DHE-RSA-CAMELLIA256-SHA", ForwardSecret: true},
  191. 0x0089: {Name: "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA"},
  192. 0x008A: {Name: "TLS_PSK_WITH_RC4_128_SHA", ShortName: "PSK-RC4-SHA"},
  193. 0x008B: {Name: "TLS_PSK_WITH_3DES_EDE_CBC_SHA", ShortName: "PSK-3DES-EDE-CBC-SHA"},
  194. 0x008C: {Name: "TLS_PSK_WITH_AES_128_CBC_SHA", ShortName: "PSK-AES128-CBC-SHA"},
  195. 0x008D: {Name: "TLS_PSK_WITH_AES_256_CBC_SHA", ShortName: "PSK-AES256-CBC-SHA"},
  196. 0x008E: {Name: "TLS_DHE_PSK_WITH_RC4_128_SHA", ForwardSecret: true},
  197. 0x008F: {Name: "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA", ForwardSecret: true},
  198. 0x0090: {Name: "TLS_DHE_PSK_WITH_AES_128_CBC_SHA", ForwardSecret: true},
  199. 0x0091: {Name: "TLS_DHE_PSK_WITH_AES_256_CBC_SHA", ForwardSecret: true},
  200. 0x0092: {Name: "TLS_RSA_PSK_WITH_RC4_128_SHA"},
  201. 0x0093: {Name: "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"},
  202. 0x0094: {Name: "TLS_RSA_PSK_WITH_AES_128_CBC_SHA"},
  203. 0x0095: {Name: "TLS_RSA_PSK_WITH_AES_256_CBC_SHA"},
  204. 0x0096: {Name: "TLS_RSA_WITH_SEED_CBC_SHA", ShortName: "SEED-SHA"},
  205. 0x0097: {Name: "TLS_DH_DSS_WITH_SEED_CBC_SHA", ShortName: "DH-DSS-SEED-SHA"},
  206. 0x0098: {Name: "TLS_DH_RSA_WITH_SEED_CBC_SHA", ShortName: "DH-RSA-SEED-SHA"},
  207. 0x0099: {Name: "TLS_DHE_DSS_WITH_SEED_CBC_SHA", ShortName: "DHE-DSS-SEED-SHA", ForwardSecret: true},
  208. 0x009A: {Name: "TLS_DHE_RSA_WITH_SEED_CBC_SHA", ShortName: "DHE-RSA-SEED-SHA", ForwardSecret: true},
  209. 0x009B: {Name: "TLS_DH_anon_WITH_SEED_CBC_SHA"},
  210. 0x009C: {Name: "TLS_RSA_WITH_AES_128_GCM_SHA256", ShortName: "AES128-GCM-SHA256"},
  211. 0x009D: {Name: "TLS_RSA_WITH_AES_256_GCM_SHA384", ShortName: "AES256-GCM-SHA384"},
  212. 0x009E: {Name: "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", ShortName: "DHE-RSA-AES128-GCM-SHA256", ForwardSecret: true},
  213. 0x009F: {Name: "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", ShortName: "DHE-RSA-AES256-GCM-SHA384", ForwardSecret: true},
  214. 0x00A0: {Name: "TLS_DH_RSA_WITH_AES_128_GCM_SHA256", ShortName: "DH-RSA-AES128-GCM-SHA256"},
  215. 0x00A1: {Name: "TLS_DH_RSA_WITH_AES_256_GCM_SHA384", ShortName: "DH-RSA-AES256-GCM-SHA384"},
  216. 0x00A2: {Name: "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", ShortName: "DHE-DSS-AES128-GCM-SHA256", ForwardSecret: true},
  217. 0x00A3: {Name: "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", ShortName: "DHE-DSS-AES256-GCM-SHA384", ForwardSecret: true},
  218. 0x00A4: {Name: "TLS_DH_DSS_WITH_AES_128_GCM_SHA256", ShortName: "DH-DSS-AES128-GCM-SHA256"},
  219. 0x00A5: {Name: "TLS_DH_DSS_WITH_AES_256_GCM_SHA384", ShortName: "DH-DSS-AES256-GCM-SHA384"},
  220. 0x00A6: {Name: "TLS_DH_anon_WITH_AES_128_GCM_SHA256"},
  221. 0x00A7: {Name: "TLS_DH_anon_WITH_AES_256_GCM_SHA384"},
  222. 0x00A8: {Name: "TLS_PSK_WITH_AES_128_GCM_SHA256"},
  223. 0x00A9: {Name: "TLS_PSK_WITH_AES_256_GCM_SHA384"},
  224. 0x00AA: {Name: "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", ForwardSecret: true},
  225. 0x00AB: {Name: "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384", ForwardSecret: true},
  226. 0x00AC: {Name: "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"},
  227. 0x00AD: {Name: "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"},
  228. 0x00AE: {Name: "TLS_PSK_WITH_AES_128_CBC_SHA256"},
  229. 0x00AF: {Name: "TLS_PSK_WITH_AES_256_CBC_SHA384"},
  230. 0x00B0: {Name: "TLS_PSK_WITH_NULL_SHA256"},
  231. 0x00B1: {Name: "TLS_PSK_WITH_NULL_SHA384"},
  232. 0x00B2: {Name: "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", ForwardSecret: true},
  233. 0x00B3: {Name: "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384", ForwardSecret: true},
  234. 0x00B4: {Name: "TLS_DHE_PSK_WITH_NULL_SHA256", ForwardSecret: true},
  235. 0x00B5: {Name: "TLS_DHE_PSK_WITH_NULL_SHA384", ForwardSecret: true},
  236. 0x00B6: {Name: "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"},
  237. 0x00B7: {Name: "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"},
  238. 0x00B8: {Name: "TLS_RSA_PSK_WITH_NULL_SHA256"},
  239. 0x00B9: {Name: "TLS_RSA_PSK_WITH_NULL_SHA384"},
  240. 0x00BA: {Name: "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256"},
  241. 0x00BB: {Name: "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256"},
  242. 0x00BC: {Name: "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256"},
  243. 0x00BD: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true},
  244. 0x00BE: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true},
  245. 0x00BF: {Name: "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256"},
  246. 0x00C0: {Name: "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256"},
  247. 0x00C1: {Name: "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256"},
  248. 0x00C2: {Name: "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256"},
  249. 0x00C3: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256", ForwardSecret: true},
  250. 0x00C4: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256", ForwardSecret: true},
  251. 0x00C5: {Name: "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256"},
  252. 0x00FF: {Name: "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"},
  253. 0xC001: {Name: "TLS_ECDH_ECDSA_WITH_NULL_SHA", EllipticCurve: true},
  254. 0xC002: {Name: "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", ShortName: "ECDH-ECDSA-RC4-SHA", EllipticCurve: true},
  255. 0xC003: {Name: "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", ShortName: "ECDH-ECDSA-DES-CBC3-SHA", EllipticCurve: true},
  256. 0xC004: {Name: "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", ShortName: "ECDH-ECDSA-AES128-SHA", EllipticCurve: true},
  257. 0xC005: {Name: "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", ShortName: "ECDH-ECDSA-AES256-SHA", EllipticCurve: true},
  258. 0xC006: {Name: "TLS_ECDHE_ECDSA_WITH_NULL_SHA", ForwardSecret: true, EllipticCurve: true},
  259. 0xC007: {Name: "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", ShortName: "ECDHE-ECDSA-RC4-SHA", ForwardSecret: true, EllipticCurve: true},
  260. 0xC008: {Name: "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", ShortName: "ECDHE-ECDSA-DES-CBC3-SHA", ForwardSecret: true, EllipticCurve: true},
  261. 0xC009: {Name: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", ShortName: "ECDHE-ECDSA-AES128-SHA", ForwardSecret: true, EllipticCurve: true},
  262. 0xC00A: {Name: "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", ShortName: "ECDHE-ECDSA-AES256-SHA", ForwardSecret: true, EllipticCurve: true},
  263. 0xC00B: {Name: "TLS_ECDH_RSA_WITH_NULL_SHA", EllipticCurve: true},
  264. 0xC00C: {Name: "TLS_ECDH_RSA_WITH_RC4_128_SHA", ShortName: "ECDH-RSA-RC4-SHA", EllipticCurve: true},
  265. 0xC00D: {Name: "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "ECDH-RSA-DES-CBC3-SHA", EllipticCurve: true},
  266. 0xC00E: {Name: "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", ShortName: "ECDH-RSA-AES128-SHA", EllipticCurve: true},
  267. 0xC00F: {Name: "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", ShortName: "ECDH-RSA-AES256-SHA", EllipticCurve: true},
  268. 0xC010: {Name: "TLS_ECDHE_RSA_WITH_NULL_SHA", ForwardSecret: true, EllipticCurve: true},
  269. 0xC011: {Name: "TLS_ECDHE_RSA_WITH_RC4_128_SHA", ShortName: "ECDHE-RSA-RC4-SHA", ForwardSecret: true, EllipticCurve: true},
  270. 0xC012: {Name: "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "ECDHE-RSA-DES-CBC3-SHA", ForwardSecret: true, EllipticCurve: true},
  271. 0xC013: {Name: "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", ShortName: "ECDHE-RSA-AES128-SHA", ForwardSecret: true, EllipticCurve: true},
  272. 0xC014: {Name: "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", ShortName: "ECDHE-RSA-AES256-SHA", ForwardSecret: true, EllipticCurve: true},
  273. 0xC015: {Name: "TLS_ECDH_anon_WITH_NULL_SHA", EllipticCurve: true},
  274. 0xC016: {Name: "TLS_ECDH_anon_WITH_RC4_128_SHA", EllipticCurve: true},
  275. 0xC017: {Name: "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", EllipticCurve: true},
  276. 0xC018: {Name: "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", EllipticCurve: true},
  277. 0xC019: {Name: "TLS_ECDH_anon_WITH_AES_256_CBC_SHA", EllipticCurve: true},
  278. 0xC01A: {Name: "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA", ShortName: "SRP-3DES-EDE-CBC-SHA"},
  279. 0xC01B: {Name: "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", ShortName: "SRP-RSA-3DES-EDE-CBC-SHA"},
  280. 0xC01C: {Name: "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA", ShortName: "SRP-DSS-3DES-EDE-CBC-SHA"},
  281. 0xC01D: {Name: "TLS_SRP_SHA_WITH_AES_128_CBC_SHA", ShortName: "SRP-AES-128-CBC-SHA"},
  282. 0xC01E: {Name: "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA", ShortName: "SRP-RSA-AES-128-CBC-SHA"},
  283. 0xC01F: {Name: "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA", ShortName: "SRP-DSS-AES-128-CBC-SHA"},
  284. 0xC020: {Name: "TLS_SRP_SHA_WITH_AES_256_CBC_SHA", ShortName: "SRP-AES-256-CBC-SHA"},
  285. 0xC021: {Name: "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA", ShortName: "SRP-RSA-AES-256-CBC-SHA"},
  286. 0xC022: {Name: "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA", ShortName: "SRP-DSS-AES-256-CBC-SHA"},
  287. 0xC023: {Name: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", ShortName: "ECDHE-ECDSA-AES128-SHA256", ForwardSecret: true, EllipticCurve: true},
  288. 0xC024: {Name: "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", ShortName: "ECDHE-ECDSA-AES256-SHA384", ForwardSecret: true, EllipticCurve: true},
  289. 0xC025: {Name: "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", ShortName: "ECDH-ECDSA-AES128-SHA256", EllipticCurve: true},
  290. 0xC026: {Name: "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", ShortName: "ECDH-ECDSA-AES256-SHA384", EllipticCurve: true},
  291. 0xC027: {Name: "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", ShortName: "ECDHE-RSA-AES128-SHA256", ForwardSecret: true, EllipticCurve: true},
  292. 0xC028: {Name: "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", ShortName: "ECDHE-RSA-AES256-SHA384", ForwardSecret: true, EllipticCurve: true},
  293. 0xC029: {Name: "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", ShortName: "ECDH-RSA-AES128-SHA256", EllipticCurve: true},
  294. 0xC02A: {Name: "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", ShortName: "ECDH-RSA-AES256-SHA384", EllipticCurve: true},
  295. 0xC02B: {Name: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", ShortName: "ECDHE-ECDSA-AES128-GCM-SHA256", ForwardSecret: true, EllipticCurve: true},
  296. 0xC02C: {Name: "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", ShortName: "ECDHE-ECDSA-AES256-GCM-SHA384", ForwardSecret: true, EllipticCurve: true},
  297. 0xC02D: {Name: "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", ShortName: "ECDH-ECDSA-AES128-GCM-SHA256", EllipticCurve: true},
  298. 0xC02E: {Name: "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", ShortName: "ECDH-ECDSA-AES256-GCM-SHA384", EllipticCurve: true},
  299. 0xC02F: {Name: "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", ShortName: "ECDHE-RSA-AES128-GCM-SHA256", ForwardSecret: true, EllipticCurve: true},
  300. 0xC030: {Name: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", ShortName: "ECDHE-RSA-AES256-GCM-SHA384", ForwardSecret: true, EllipticCurve: true},
  301. 0xC031: {Name: "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", ShortName: "ECDH-RSA-AES128-GCM-SHA256", EllipticCurve: true},
  302. 0xC032: {Name: "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", ShortName: "ECDH-RSA-AES256-GCM-SHA384", EllipticCurve: true},
  303. 0xC033: {Name: "TLS_ECDHE_PSK_WITH_RC4_128_SHA", ForwardSecret: true, EllipticCurve: true},
  304. 0xC034: {Name: "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", ForwardSecret: true, EllipticCurve: true},
  305. 0xC035: {Name: "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", ForwardSecret: true, EllipticCurve: true},
  306. 0xC036: {Name: "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", ForwardSecret: true, EllipticCurve: true},
  307. 0xC037: {Name: "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256", ForwardSecret: true, EllipticCurve: true},
  308. 0xC038: {Name: "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384", ForwardSecret: true, EllipticCurve: true},
  309. 0xC039: {Name: "TLS_ECDHE_PSK_WITH_NULL_SHA", ForwardSecret: true, EllipticCurve: true},
  310. 0xC03A: {Name: "TLS_ECDHE_PSK_WITH_NULL_SHA256", ForwardSecret: true, EllipticCurve: true},
  311. 0xC03B: {Name: "TLS_ECDHE_PSK_WITH_NULL_SHA384", ForwardSecret: true, EllipticCurve: true},
  312. 0xC03C: {Name: "TLS_RSA_WITH_ARIA_128_CBC_SHA256"},
  313. 0xC03D: {Name: "TLS_RSA_WITH_ARIA_256_CBC_SHA384"},
  314. 0xC03E: {Name: "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256"},
  315. 0xC03F: {Name: "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384"},
  316. 0xC040: {Name: "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256"},
  317. 0xC041: {Name: "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384"},
  318. 0xC042: {Name: "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true},
  319. 0xC043: {Name: "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true},
  320. 0xC044: {Name: "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true},
  321. 0xC045: {Name: "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true},
  322. 0xC046: {Name: "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256"},
  323. 0xC047: {Name: "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384"},
  324. 0xC048: {Name: "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true, EllipticCurve: true},
  325. 0xC049: {Name: "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true, EllipticCurve: true},
  326. 0xC04A: {Name: "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256", EllipticCurve: true},
  327. 0xC04B: {Name: "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384", EllipticCurve: true},
  328. 0xC04C: {Name: "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true, EllipticCurve: true},
  329. 0xC04D: {Name: "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true, EllipticCurve: true},
  330. 0xC04E: {Name: "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256", EllipticCurve: true},
  331. 0xC04F: {Name: "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384", EllipticCurve: true},
  332. 0xC050: {Name: "TLS_RSA_WITH_ARIA_128_GCM_SHA256"},
  333. 0xC051: {Name: "TLS_RSA_WITH_ARIA_256_GCM_SHA384"},
  334. 0xC052: {Name: "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256", ForwardSecret: true},
  335. 0xC053: {Name: "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384", ForwardSecret: true},
  336. 0xC054: {Name: "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256"},
  337. 0xC055: {Name: "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384"},
  338. 0xC056: {Name: "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256", ForwardSecret: true},
  339. 0xC057: {Name: "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384", ForwardSecret: true},
  340. 0xC058: {Name: "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256"},
  341. 0xC059: {Name: "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384"},
  342. 0xC05A: {Name: "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256"},
  343. 0xC05B: {Name: "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384"},
  344. 0xC05C: {Name: "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256", ForwardSecret: true, EllipticCurve: true},
  345. 0xC05D: {Name: "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384", ForwardSecret: true, EllipticCurve: true},
  346. 0xC05E: {Name: "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256", EllipticCurve: true},
  347. 0xC05F: {Name: "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384", EllipticCurve: true},
  348. 0xC060: {Name: "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256", ForwardSecret: true, EllipticCurve: true},
  349. 0xC061: {Name: "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384", ForwardSecret: true, EllipticCurve: true},
  350. 0xC062: {Name: "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256", EllipticCurve: true},
  351. 0xC063: {Name: "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384", EllipticCurve: true},
  352. 0xC064: {Name: "TLS_PSK_WITH_ARIA_128_CBC_SHA256"},
  353. 0xC065: {Name: "TLS_PSK_WITH_ARIA_256_CBC_SHA384"},
  354. 0xC066: {Name: "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true},
  355. 0xC067: {Name: "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true},
  356. 0xC068: {Name: "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256"},
  357. 0xC069: {Name: "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384"},
  358. 0xC06A: {Name: "TLS_PSK_WITH_ARIA_128_GCM_SHA256"},
  359. 0xC06B: {Name: "TLS_PSK_WITH_ARIA_256_GCM_SHA384"},
  360. 0xC06C: {Name: "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256", ForwardSecret: true},
  361. 0xC06D: {Name: "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384", ForwardSecret: true},
  362. 0xC06E: {Name: "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256"},
  363. 0xC06F: {Name: "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384"},
  364. 0xC070: {Name: "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256", ForwardSecret: true, EllipticCurve: true},
  365. 0xC071: {Name: "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384", ForwardSecret: true, EllipticCurve: true},
  366. 0xC072: {Name: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true, EllipticCurve: true},
  367. 0xC073: {Name: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", ForwardSecret: true, EllipticCurve: true},
  368. 0xC074: {Name: "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", EllipticCurve: true},
  369. 0xC075: {Name: "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", EllipticCurve: true},
  370. 0xC076: {Name: "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true, EllipticCurve: true},
  371. 0xC077: {Name: "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384", ForwardSecret: true, EllipticCurve: true},
  372. 0xC078: {Name: "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256", EllipticCurve: true},
  373. 0xC079: {Name: "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384", EllipticCurve: true},
  374. 0xC07A: {Name: "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256"},
  375. 0xC07B: {Name: "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384"},
  376. 0xC07C: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", ForwardSecret: true},
  377. 0xC07D: {Name: "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", ForwardSecret: true},
  378. 0xC07E: {Name: "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256"},
  379. 0xC07F: {Name: "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384"},
  380. 0xC080: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256", ForwardSecret: true},
  381. 0xC081: {Name: "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384", ForwardSecret: true},
  382. 0xC082: {Name: "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256"},
  383. 0xC083: {Name: "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384"},
  384. 0xC084: {Name: "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256"},
  385. 0xC085: {Name: "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384"},
  386. 0xC086: {Name: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", ForwardSecret: true, EllipticCurve: true},
  387. 0xC087: {Name: "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", ForwardSecret: true, EllipticCurve: true},
  388. 0xC088: {Name: "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", EllipticCurve: true},
  389. 0xC089: {Name: "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", EllipticCurve: true},
  390. 0xC08A: {Name: "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", ForwardSecret: true, EllipticCurve: true},
  391. 0xC08B: {Name: "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", ForwardSecret: true, EllipticCurve: true},
  392. 0xC08C: {Name: "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256", EllipticCurve: true},
  393. 0xC08D: {Name: "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384", EllipticCurve: true},
  394. 0xC08E: {Name: "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256"},
  395. 0xC08F: {Name: "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384"},
  396. 0xC090: {Name: "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256", ForwardSecret: true},
  397. 0xC091: {Name: "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384", ForwardSecret: true},
  398. 0xC092: {Name: "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256"},
  399. 0xC093: {Name: "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384"},
  400. 0xC094: {Name: "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256"},
  401. 0xC095: {Name: "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384"},
  402. 0xC096: {Name: "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true},
  403. 0xC097: {Name: "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", ForwardSecret: true},
  404. 0xC098: {Name: "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256"},
  405. 0xC099: {Name: "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384"},
  406. 0xC09A: {Name: "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", ForwardSecret: true, EllipticCurve: true},
  407. 0xC09B: {Name: "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", ForwardSecret: true, EllipticCurve: true},
  408. 0xC09C: {Name: "TLS_RSA_WITH_AES_128_CCM"},
  409. 0xC09D: {Name: "TLS_RSA_WITH_AES_256_CCM"},
  410. 0xC09E: {Name: "TLS_DHE_RSA_WITH_AES_128_CCM", ForwardSecret: true},
  411. 0xC09F: {Name: "TLS_DHE_RSA_WITH_AES_256_CCM", ForwardSecret: true},
  412. 0xC0A0: {Name: "TLS_RSA_WITH_AES_128_CCM_8"},
  413. 0xC0A1: {Name: "TLS_RSA_WITH_AES_256_CCM_8"},
  414. 0xC0A2: {Name: "TLS_DHE_RSA_WITH_AES_128_CCM_8", ForwardSecret: true},
  415. 0xC0A3: {Name: "TLS_DHE_RSA_WITH_AES_256_CCM_8", ForwardSecret: true},
  416. 0xC0A4: {Name: "TLS_PSK_WITH_AES_128_CCM"},
  417. 0xC0A5: {Name: "TLS_PSK_WITH_AES_256_CCM"},
  418. 0xC0A6: {Name: "TLS_DHE_PSK_WITH_AES_128_CCM", ForwardSecret: true},
  419. 0xC0A7: {Name: "TLS_DHE_PSK_WITH_AES_256_CCM", ForwardSecret: true},
  420. 0xC0A8: {Name: "TLS_PSK_WITH_AES_128_CCM_8"},
  421. 0xC0A9: {Name: "TLS_PSK_WITH_AES_256_CCM_8"},
  422. 0xC0AA: {Name: "TLS_PSK_DHE_WITH_AES_128_CCM_8", ForwardSecret: true},
  423. 0xC0AB: {Name: "TLS_PSK_DHE_WITH_AES_256_CCM_8", ForwardSecret: true},
  424. 0xC0AC: {Name: "TLS_ECDHE_ECDSA_WITH_AES_128_CCM", ForwardSecret: true, EllipticCurve: true},
  425. 0xC0AD: {Name: "TLS_ECDHE_ECDSA_WITH_AES_256_CCM", ForwardSecret: true, EllipticCurve: true},
  426. 0xC0AE: {Name: "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8", ForwardSecret: true, EllipticCurve: true},
  427. 0xC0AF: {Name: "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8", ForwardSecret: true, EllipticCurve: true},
  428. // Non-IANA standardized cipher suites:
  429. // ChaCha20, Poly1305 cipher suites are defined in
  430. // https://tools.ietf.org/html/draft-agl-tls-chacha20poly1305-04
  431. 0xCC13: {Name: "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", ForwardSecret: true, EllipticCurve: true},
  432. 0xCC14: {Name: "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", ForwardSecret: true, EllipticCurve: true},
  433. 0xCC15: {Name: "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", ForwardSecret: true, EllipticCurve: true},
  434. }
  435. var Curves = map[CurveID]string{
  436. 0: "Unassigned",
  437. 1: "sect163k1",
  438. 2: "sect163r1",
  439. 3: "sect163r2",
  440. 4: "sect193r1",
  441. 5: "sect193r2",
  442. 6: "sect233k1",
  443. 7: "sect233r1",
  444. 8: "sect239k1",
  445. 9: "sect283k1",
  446. 10: "sect283r1",
  447. 11: "sect409k1",
  448. 12: "sect409r1",
  449. 13: "sect571k1",
  450. 14: "sect571r1",
  451. 15: "secp160k1",
  452. 16: "secp160r1",
  453. 17: "secp160r2",
  454. 18: "secp192k1",
  455. 19: "secp192r1",
  456. 20: "secp224k1",
  457. 21: "secp224r1",
  458. 22: "secp256k1",
  459. 23: "secp256r1",
  460. 24: "secp384r1",
  461. 25: "secp521r1",
  462. 26: "brainpoolP256r1",
  463. 27: "brainpoolP384r1",
  464. 28: "brainpoolP512r1",
  465. 65281: "arbitrary_explicit_prime_curves",
  466. 65282: "arbitrary_explicit_char2_curves",
  467. }