History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/security/ssl/CipherSuite.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/security/ssl/CipherSuite.java+1274−0
@@ -0,0 +1,1274 @@
1+/*
2+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+
27+package sun.security.ssl;
28+
29+import java.util.*;
30+
31+import java.security.NoSuchAlgorithmException;
32+import java.security.InvalidKeyException;
33+import java.security.SecureRandom;
34+
35+import javax.crypto.SecretKey;
36+import javax.crypto.spec.IvParameterSpec;
37+import javax.crypto.spec.SecretKeySpec;
38+
39+import sun.security.ssl.CipherSuite.*;
40+import static sun.security.ssl.CipherSuite.KeyExchange.*;
41+import static sun.security.ssl.CipherSuite.PRF.*;
42+import static sun.security.ssl.JsseJce.*;
43+
44+/**
45+ * An SSL/TLS CipherSuite. Constants for the standard key exchange, cipher,
46+ * and mac algorithms are also defined in this class.
47+ *
48+ * The CipherSuite class and the inner classes defined in this file roughly
49+ * follow the type safe enum pattern described in Effective Java. This means:
50+ *
51+ * . instances are immutable, classes are final
52+ *
53+ * . there is a unique instance of every value, i.e. there are never two
54+ * instances representing the same CipherSuite, etc. This means equality
55+ * tests can be performed using == instead of equals() (although that works
56+ * as well). [A minor exception are *unsupported* CipherSuites read from a
57+ * handshake message, but this is usually irrelevant]
58+ *
59+ * . instances are obtained using the static valueOf() factory methods.
60+ *
61+ * . properties are defined as final variables and made available as
62+ * package private variables without method accessors
63+ *
64+ * . if the member variable allowed is false, the given algorithm is either
65+ * unavailable or disabled at compile time
66+ *
67+ */
68+final class CipherSuite implements Comparable {
69+
70+ // minimum priority for supported CipherSuites
71+ final static int SUPPORTED_SUITES_PRIORITY = 1;
72+
73+ // minimum priority for default enabled CipherSuites
74+ final static int DEFAULT_SUITES_PRIORITY = 300;
75+
76+ // Flag indicating if CipherSuite availability can change dynamically.
77+ // This is the case when we rely on a JCE cipher implementation that
78+ // may not be available in the installed JCE providers.
79+ // It is true because we might not have an ECC implementation.
80+ final static boolean DYNAMIC_AVAILABILITY = true;
81+
82+ private final static boolean ALLOW_ECC = Debug.getBooleanProperty
83+ ("com.sun.net.ssl.enableECC", true);
84+
85+ // Map Integer(id) -> CipherSuite
86+ // contains all known CipherSuites
87+ private final static Map<Integer,CipherSuite> idMap;
88+
89+ // Map String(name) -> CipherSuite
90+ // contains only supported CipherSuites (i.e. allowed == true)
91+ private final static Map<String,CipherSuite> nameMap;
92+
93+ // Protocol defined CipherSuite name, e.g. SSL_RSA_WITH_RC4_128_MD5
94+ // we use TLS_* only for new CipherSuites, still SSL_* for old ones
95+ final String name;
96+
97+ // id in 16 bit MSB format, i.e. 0x0004 for SSL_RSA_WITH_RC4_128_MD5
98+ final int id;
99+
100+ // priority for the internal default preference order. the higher the
101+ // better. Each supported CipherSuite *must* have a unique priority.
102+ // Ciphersuites with priority >= DEFAULT_SUITES_PRIORITY are enabled
103+ // by default
104+ final int priority;
105+
106+ // key exchange, bulk cipher, mac and prf algorithms. See those
107+ // classes below.
108+ final KeyExchange keyExchange;
109+ final BulkCipher cipher;
110+ final MacAlg macAlg;
111+ final PRF prfAlg;
112+
113+ // whether a CipherSuite qualifies as exportable under 512/40 bit rules.
114+ // TLS 1.1+ (RFC 4346) must not negotiate to these suites.
115+ final boolean exportable;
116+
117+ // true iff implemented and enabled at compile time
118+ final boolean allowed;
119+
120+ // obsoleted since protocol version
121+ final int obsoleted;
122+
123+ // supported since protocol version
124+ final int supported;
125+
126+ /**
127+ * Constructor for implemented CipherSuites.
128+ */
129+ private CipherSuite(String name, int id, int priority,
130+ KeyExchange keyExchange, BulkCipher cipher,
131+ boolean allowed, int obsoleted, int supported, PRF prfAlg) {
132+ this.name = name;
133+ this.id = id;
134+ this.priority = priority;
135+ this.keyExchange = keyExchange;
136+ this.cipher = cipher;
137+ this.exportable = cipher.exportable;
138+ if (name.endsWith("_MD5")) {
139+ macAlg = M_MD5;
140+ } else if (name.endsWith("_SHA")) {
141+ macAlg = M_SHA;
142+ } else if (name.endsWith("_SHA256")) {
143+ macAlg = M_SHA256;
144+ } else if (name.endsWith("_SHA384")) {
145+ macAlg = M_SHA384;
146+ } else if (name.endsWith("_NULL")) {
147+ macAlg = M_NULL;
148+ } else if (name.endsWith("_SCSV")) {
149+ macAlg = M_NULL;
150+ } else {
151+ throw new IllegalArgumentException
152+ ("Unknown MAC algorithm for ciphersuite " + name);
153+ }
154+
155+ allowed &= keyExchange.allowed;
156+ allowed &= cipher.allowed;
157+ this.allowed = allowed;
158+ this.obsoleted = obsoleted;
159+ this.supported = supported;
160+ this.prfAlg = prfAlg;
161+ }
162+
163+ /**
164+ * Constructor for unimplemented CipherSuites.
165+ */
166+ private CipherSuite(String name, int id) {
167+ this.name = name;
168+ this.id = id;
169+ this.allowed = false;
170+
171+ this.priority = 0;
172+ this.keyExchange = null;
173+ this.cipher = null;
174+ this.macAlg = null;
175+ this.exportable = false;
176+ this.obsoleted = ProtocolVersion.LIMIT_MAX_VALUE;
177+ this.supported = ProtocolVersion.LIMIT_MIN_VALUE;
178+ this.prfAlg = P_NONE;
179+ }
180+
181+ /**
182+ * Return whether this CipherSuite is available for use. A
183+ * CipherSuite may be unavailable even if it is supported
184+ * (i.e. allowed == true) if the required JCE cipher is not installed.
185+ * In some configuration, this situation may change over time, call
186+ * CipherSuiteList.clearAvailableCache() before this method to obtain
187+ * the most current status.
188+ */
189+ boolean isAvailable() {
190+ return allowed && keyExchange.isAvailable() && cipher.isAvailable();
191+ }
192+
193+ boolean isNegotiable() {
194+ return this != C_SCSV && isAvailable();
195+ }
196+
197+ /**
198+ * Compares CipherSuites based on their priority. Has the effect of
199+ * sorting CipherSuites when put in a sorted collection, which is
200+ * used by CipherSuiteList. Follows standard Comparable contract.
201+ *
202+ * Note that for unsupported CipherSuites parsed from a handshake
203+ * message we violate the equals() contract.
204+ */
205+ public int compareTo(Object o) {
206+ return ((CipherSuite)o).priority - priority;
207+ }
208+
209+ /**
210+ * Returns this.name.
211+ */
212+ public String toString() {
213+ return name;
214+ }
215+
216+ /**
217+ * Return a CipherSuite for the given name. The returned CipherSuite
218+ * is supported by this implementation but may not actually be
219+ * currently useable. See isAvailable().
220+ *
221+ * @exception IllegalArgumentException if the CipherSuite is unknown or
222+ * unsupported.
223+ */
224+ static CipherSuite valueOf(String s) {
225+ if (s == null) {
226+ throw new IllegalArgumentException("Name must not be null");
227+ }
228+
229+ CipherSuite c = nameMap.get(s);
230+ if ((c == null) || (c.allowed == false)) {
231+ throw new IllegalArgumentException("Unsupported ciphersuite " + s);
232+ }
233+
234+ return c;
235+ }
236+
237+ /**
238+ * Return a CipherSuite with the given ID. A temporary object is
239+ * constructed if the ID is unknown. Use isAvailable() to verify that
240+ * the CipherSuite can actually be used.
241+ */
242+ static CipherSuite valueOf(int id1, int id2) {
243+ id1 &= 0xff;
244+ id2 &= 0xff;
245+ int id = (id1 << 8) | id2;
246+ CipherSuite c = idMap.get(id);
247+ if (c == null) {
248+ String h1 = Integer.toString(id1, 16);
249+ String h2 = Integer.toString(id2, 16);
250+ c = new CipherSuite("Unknown 0x" + h1 + ":0x" + h2, id);
251+ }
252+ return c;
253+ }
254+
255+ // for use by CipherSuiteList only
256+ static Collection<CipherSuite> allowedCipherSuites() {
257+ return nameMap.values();
258+ }
259+
260+ /*
261+ * Use this method when all of the values need to be specified.
262+ * This is primarily used when defining a new ciphersuite for
263+ * TLS 1.2+ that doesn't use the "default" PRF.
264+ */
265+ private static void add(String name, int id, int priority,
266+ KeyExchange keyExchange, BulkCipher cipher,
267+ boolean allowed, int obsoleted, int supported, PRF prf) {
268+
269+ CipherSuite c = new CipherSuite(name, id, priority, keyExchange,
270+ cipher, allowed, obsoleted, supported, prf);
271+ if (idMap.put(id, c) != null) {
272+ throw new RuntimeException("Duplicate ciphersuite definition: "
273+ + id + ", " + name);
274+ }
275+ if (c.allowed) {
276+ if (nameMap.put(name, c) != null) {
277+ throw new RuntimeException("Duplicate ciphersuite definition: "
278+ + id + ", " + name);
279+ }
280+ }
281+ }
282+
283+ /*
284+ * Use this method when there is no lower protocol limit where this
285+ * suite can be used, and the PRF is P_SHA256. That is, the
286+ * existing ciphersuites. From RFC 5246:
287+ *
288+ * All cipher suites in this document use P_SHA256.
289+ */
290+ private static void add(String name, int id, int priority,
291+ KeyExchange keyExchange, BulkCipher cipher,
292+ boolean allowed, int obsoleted) {
293+ // If this is an obsoleted suite, then don't let the TLS 1.2
294+ // protocol have a valid PRF value.
295+ PRF prf = P_SHA256;
296+ if (obsoleted < ProtocolVersion.TLS12.v) {
297+ prf = P_NONE;
298+ }
299+
300+ add(name, id, priority, keyExchange, cipher, allowed, obsoleted,
301+ ProtocolVersion.LIMIT_MIN_VALUE, prf);
302+ }
303+
304+ /*
305+ * Use this method when there is no upper protocol limit. That is,
306+ * suites which have not been obsoleted.
307+ */
308+ private static void add(String name, int id, int priority,
309+ KeyExchange keyExchange, BulkCipher cipher, boolean allowed) {
310+ add(name, id, priority, keyExchange,
311+ cipher, allowed, ProtocolVersion.LIMIT_MAX_VALUE);
312+ }
313+
314+ /*
315+ * Use this method to define an unimplemented suite. This provides
316+ * a number<->name mapping that can be used for debugging.
317+ */
318+ private static void add(String name, int id) {
319+ CipherSuite c = new CipherSuite(name, id);
320+ if (idMap.put(id, c) != null) {
321+ throw new RuntimeException("Duplicate ciphersuite definition: "
322+ + id + ", " + name);
323+ }
324+ }
325+
326+ /**
327+ * An SSL/TLS key exchange algorithm.
328+ */
329+ static enum KeyExchange {
330+
331+ // key exchange algorithms
332+ K_NULL ("NULL", false),
333+ K_RSA ("RSA", true),
334+ K_RSA_EXPORT ("RSA_EXPORT", true),
335+ K_DH_RSA ("DH_RSA", false),
336+ K_DH_DSS ("DH_DSS", false),
337+ K_DHE_DSS ("DHE_DSS", true),
338+ K_DHE_RSA ("DHE_RSA", true),
339+ K_DH_ANON ("DH_anon", true),
340+
341+ K_ECDH_ECDSA ("ECDH_ECDSA", ALLOW_ECC),
342+ K_ECDH_RSA ("ECDH_RSA", ALLOW_ECC),
343+ K_ECDHE_ECDSA("ECDHE_ECDSA", ALLOW_ECC),
344+ K_ECDHE_RSA ("ECDHE_RSA", ALLOW_ECC),
345+ K_ECDH_ANON ("ECDH_anon", ALLOW_ECC),
346+
347+ // Kerberos cipher suites
348+ K_KRB5 ("KRB5", true),
349+ K_KRB5_EXPORT("KRB5_EXPORT", true),
350+
351+ // renegotiation protection request signaling cipher suite
352+ K_SCSV ("SCSV", true);
353+
354+ // name of the key exchange algorithm, e.g. DHE_DSS
355+ final String name;
356+ final boolean allowed;
357+ private final boolean alwaysAvailable;
358+
359+ KeyExchange(String name, boolean allowed) {
360+ this.name = name;
361+ this.allowed = allowed;
362+ this.alwaysAvailable = allowed &&
363+ (!name.startsWith("EC")) && (!name.startsWith("KRB"));
364+ }
365+
366+ boolean isAvailable() {
367+ if (alwaysAvailable) {
368+ return true;
369+ }
370+
371+ if (name.startsWith("EC")) {
372+ return (allowed && JsseJce.isEcAvailable());
373+ } else if (name.startsWith("KRB")) {
374+ return (allowed && JsseJce.isKerberosAvailable());
375+ } else {
376+ return allowed;
377+ }
378+ }
379+
380+ public String toString() {
381+ return name;
382+ }
383+ }
384+
385+ /**
386+ * An SSL/TLS bulk cipher algorithm. One instance per combination of
387+ * cipher and key length.
388+ *
389+ * Also contains a factory method to obtain in initialized CipherBox
390+ * for this algorithm.
391+ */
392+ final static class BulkCipher {
393+
394+ // Map BulkCipher -> Boolean(available)
395+ private final static Map<BulkCipher,Boolean> availableCache =
396+ new HashMap<>(8);
397+
398+ // descriptive name including key size, e.g. AES/128
399+ final String description;
400+
401+ // JCE cipher transformation string, e.g. AES/CBC/NoPadding
402+ final String transformation;
403+
404+ // algorithm name, e.g. AES
405+ final String algorithm;
406+
407+ // supported and compile time enabled. Also see isAvailable()
408+ final boolean allowed;
409+
410+ // number of bytes of entropy in the key
411+ final int keySize;
412+
413+ // length of the actual cipher key in bytes.
414+ // for non-exportable ciphers, this is the same as keySize
415+ final int expandedKeySize;
416+
417+ // size of the IV (also block size)
418+ final int ivSize;
419+
420+ // exportable under 512/40 bit rules
421+ final boolean exportable;
422+
423+ BulkCipher(String transformation, int keySize,
424+ int expandedKeySize, int ivSize, boolean allowed) {
425+ this.transformation = transformation;
426+ this.algorithm = transformation.split("/")[0];
427+ this.description = this.algorithm + "/" + (keySize << 3);
428+ this.keySize = keySize;
429+ this.ivSize = ivSize;
430+ this.allowed = allowed;
431+
432+ this.expandedKeySize = expandedKeySize;
433+ this.exportable = true;
434+ }
435+
436+ BulkCipher(String transformation, int keySize,
437+ int ivSize, boolean allowed) {
438+ this.transformation = transformation;
439+ this.algorithm = transformation.split("/")[0];
440+ this.description = this.algorithm + "/" + (keySize << 3);
441+ this.keySize = keySize;
442+ this.ivSize = ivSize;
443+ this.allowed = allowed;
444+
445+ this.expandedKeySize = keySize;
446+ this.exportable = false;
447+ }
448+
449+ /**
450+ * Return an initialized CipherBox for this BulkCipher.
451+ * IV must be null for stream ciphers.
452+ *
453+ * @exception NoSuchAlgorithmException if anything goes wrong
454+ */
455+ CipherBox newCipher(ProtocolVersion version, SecretKey key,
456+ IvParameterSpec iv, SecureRandom random,
457+ boolean encrypt) throws NoSuchAlgorithmException {
458+ return CipherBox.newCipherBox(version, this,
459+ key, iv, random, encrypt);
460+ }
461+
462+ /**
463+ * Test if this bulk cipher is available. For use by CipherSuite.
464+ *
465+ * Currently all supported ciphers except AES are always available
466+ * via the JSSE internal implementations. We also assume AES/128
467+ * is always available since it is shipped with the SunJCE provider.
468+ * However, AES/256 is unavailable when the default JCE policy
469+ * jurisdiction files are installed because of key length restrictions.
470+ */
471+ boolean isAvailable() {
472+ if (allowed == false) {
473+ return false;
474+ }
475+ if (this == B_AES_256) {
476+ return isAvailable(this);
477+ }
478+
479+ // always available
480+ return true;
481+ }
482+
483+ // for use by CipherSuiteList.clearAvailableCache();
484+ static synchronized void clearAvailableCache() {
485+ if (DYNAMIC_AVAILABILITY) {
486+ availableCache.clear();
487+ }
488+ }
489+
490+ private static synchronized boolean isAvailable(BulkCipher cipher) {
491+ Boolean b = availableCache.get(cipher);
492+ if (b == null) {
493+ try {
494+ SecretKey key = new SecretKeySpec
495+ (new byte[cipher.expandedKeySize], cipher.algorithm);
496+ IvParameterSpec iv =
497+ new IvParameterSpec(new byte[cipher.ivSize]);
498+ cipher.newCipher(ProtocolVersion.DEFAULT,
499+ key, iv, null, true);
500+ b = Boolean.TRUE;
501+ } catch (NoSuchAlgorithmException e) {
502+ b = Boolean.FALSE;
503+ }
504+ availableCache.put(cipher, b);
505+ }
506+ return b.booleanValue();
507+ }
508+
509+ public String toString() {
510+ return description;
511+ }
512+ }
513+
514+ /**
515+ * An SSL/TLS key MAC algorithm.
516+ *
517+ * Also contains a factory method to obtain an initialized MAC
518+ * for this algorithm.
519+ */
520+ final static class MacAlg {
521+
522+ // descriptive name, e.g. MD5
523+ final String name;
524+
525+ // size of the MAC value (and MAC key) in bytes
526+ final int size;
527+
528+ MacAlg(String name, int size) {
529+ this.name = name;
530+ this.size = size;
531+ }
532+
533+ /**
534+ * Return an initialized MAC for this MacAlg. ProtocolVersion
535+ * must either be SSL30 (SSLv3 custom MAC) or TLS10 (std. HMAC).
536+ *
537+ * @exception NoSuchAlgorithmException if anything goes wrong
538+ */
539+ MAC newMac(ProtocolVersion protocolVersion, SecretKey secret)
540+ throws NoSuchAlgorithmException, InvalidKeyException {
541+ return new MAC(this, protocolVersion, secret);
542+ }
543+
544+ public String toString() {
545+ return name;
546+ }
547+ }
548+
549+ // export strength ciphers
550+ final static BulkCipher B_NULL =
551+ new BulkCipher("NULL", 0, 0, 0, true);
552+ final static BulkCipher B_RC4_40 =
553+ new BulkCipher(CIPHER_RC4, 5, 16, 0, true);
554+ final static BulkCipher B_RC2_40 =
555+ new BulkCipher("RC2", 5, 16, 8, false);
556+ final static BulkCipher B_DES_40 =
557+ new BulkCipher(CIPHER_DES, 5, 8, 8, true);
558+
559+ // domestic strength ciphers
560+ final static BulkCipher B_RC4_128 =
561+ new BulkCipher(CIPHER_RC4, 16, 0, true);
562+ final static BulkCipher B_DES =
563+ new BulkCipher(CIPHER_DES, 8, 8, true);
564+ final static BulkCipher B_3DES =
565+ new BulkCipher(CIPHER_3DES, 24, 8, true);
566+ final static BulkCipher B_IDEA =
567+ new BulkCipher("IDEA", 16, 8, false);
568+ final static BulkCipher B_AES_128 =
569+ new BulkCipher(CIPHER_AES, 16, 16, true);
570+ final static BulkCipher B_AES_256 =
571+ new BulkCipher(CIPHER_AES, 32, 16, true);
572+
573+ // MACs
574+ final static MacAlg M_NULL = new MacAlg("NULL", 0);
575+ final static MacAlg M_MD5 = new MacAlg("MD5", 16);
576+ final static MacAlg M_SHA = new MacAlg("SHA", 20);
577+ final static MacAlg M_SHA256 = new MacAlg("SHA256", 32);
578+ final static MacAlg M_SHA384 = new MacAlg("SHA384", 48);
579+
580+ /**
581+ * PRFs (PseudoRandom Function) from TLS specifications.
582+ *
583+ * TLS 1.1- uses a single MD5/SHA1-based PRF algorithm for generating
584+ * the necessary material.
585+ *
586+ * In TLS 1.2+, all existing/known CipherSuites use SHA256, however
587+ * new Ciphersuites (e.g. RFC 5288) can define specific PRF hash
588+ * algorithms.
589+ */
590+ static enum PRF {
591+
592+ // PRF algorithms
593+ P_NONE( "NONE", 0, 0),
594+ P_SHA256("SHA-256", 32, 64),
595+ P_SHA384("SHA-384", 48, 128),
596+ P_SHA512("SHA-512", 64, 128); // not currently used.
597+
598+ // PRF characteristics
599+ private final String prfHashAlg;
600+ private final int prfHashLength;
601+ private final int prfBlockSize;
602+
603+ PRF(String prfHashAlg, int prfHashLength, int prfBlockSize) {
604+ this.prfHashAlg = prfHashAlg;
605+ this.prfHashLength = prfHashLength;
606+ this.prfBlockSize = prfBlockSize;
607+ }
608+
609+ String getPRFHashAlg() {
610+ return prfHashAlg;
611+ }
612+
613+ int getPRFHashLength() {
614+ return prfHashLength;
615+ }
616+
617+ int getPRFBlockSize() {
618+ return prfBlockSize;
619+ }
620+ }
621+
622+ static {
623+ idMap = new HashMap<Integer,CipherSuite>();
624+ nameMap = new HashMap<String,CipherSuite>();
625+
626+ final boolean F = false;
627+ final boolean T = true;
628+ // N: ciphersuites only allowed if we are not in FIPS mode
629+ final boolean N = (SunJSSE.isFIPS() == false);
630+
631+ /*
632+ * TLS Cipher Suite Registry, as of August 2010.
633+ *
634+ * http://www.iana.org/assignments/tls-parameters/tls-parameters.xml
635+ *
636+ * Range Registration Procedures Notes
637+ * 000-191 Standards Action Refers to value of first byte
638+ * 192-254 Specification Required Refers to value of first byte
639+ * 255 Reserved for Private Use Refers to value of first byte
640+ *
641+ * Value Description Reference
642+ * 0x00,0x00 TLS_NULL_WITH_NULL_NULL [RFC5246]
643+ * 0x00,0x01 TLS_RSA_WITH_NULL_MD5 [RFC5246]
644+ * 0x00,0x02 TLS_RSA_WITH_NULL_SHA [RFC5246]
645+ * 0x00,0x03 TLS_RSA_EXPORT_WITH_RC4_40_MD5 [RFC4346]
646+ * 0x00,0x04 TLS_RSA_WITH_RC4_128_MD5 [RFC5246]
647+ * 0x00,0x05 TLS_RSA_WITH_RC4_128_SHA [RFC5246]
648+ * 0x00,0x06 TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 [RFC4346]
649+ * 0x00,0x07 TLS_RSA_WITH_IDEA_CBC_SHA [RFC5469]
650+ * 0x00,0x08 TLS_RSA_EXPORT_WITH_DES40_CBC_SHA [RFC4346]
651+ * 0x00,0x09 TLS_RSA_WITH_DES_CBC_SHA [RFC5469]
652+ * 0x00,0x0A TLS_RSA_WITH_3DES_EDE_CBC_SHA [RFC5246]
653+ * 0x00,0x0B TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA [RFC4346]
654+ * 0x00,0x0C TLS_DH_DSS_WITH_DES_CBC_SHA [RFC5469]
655+ * 0x00,0x0D TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA [RFC5246]
656+ * 0x00,0x0E TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA [RFC4346]
657+ * 0x00,0x0F TLS_DH_RSA_WITH_DES_CBC_SHA [RFC5469]
658+ * 0x00,0x10 TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA [RFC5246]
659+ * 0x00,0x11 TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA [RFC4346]
660+ * 0x00,0x12 TLS_DHE_DSS_WITH_DES_CBC_SHA [RFC5469]
661+ * 0x00,0x13 TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA [RFC5246]
662+ * 0x00,0x14 TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA [RFC4346]
663+ * 0x00,0x15 TLS_DHE_RSA_WITH_DES_CBC_SHA [RFC5469]
664+ * 0x00,0x16 TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA [RFC5246]
665+ * 0x00,0x17 TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 [RFC4346]
666+ * 0x00,0x18 TLS_DH_anon_WITH_RC4_128_MD5 [RFC5246]
667+ * 0x00,0x19 TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA [RFC4346]
668+ * 0x00,0x1A TLS_DH_anon_WITH_DES_CBC_SHA [RFC5469]
669+ * 0x00,0x1B TLS_DH_anon_WITH_3DES_EDE_CBC_SHA [RFC5246]
670+ * 0x00,0x1C-1D Reserved to avoid conflicts with SSLv3 [RFC5246]
671+ * 0x00,0x1E TLS_KRB5_WITH_DES_CBC_SHA [RFC2712]
672+ * 0x00,0x1F TLS_KRB5_WITH_3DES_EDE_CBC_SHA [RFC2712]
673+ * 0x00,0x20 TLS_KRB5_WITH_RC4_128_SHA [RFC2712]
674+ * 0x00,0x21 TLS_KRB5_WITH_IDEA_CBC_SHA [RFC2712]
675+ * 0x00,0x22 TLS_KRB5_WITH_DES_CBC_MD5 [RFC2712]
676+ * 0x00,0x23 TLS_KRB5_WITH_3DES_EDE_CBC_MD5 [RFC2712]
677+ * 0x00,0x24 TLS_KRB5_WITH_RC4_128_MD5 [RFC2712]
678+ * 0x00,0x25 TLS_KRB5_WITH_IDEA_CBC_MD5 [RFC2712]
679+ * 0x00,0x26 TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA [RFC2712]
680+ * 0x00,0x27 TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA [RFC2712]
681+ * 0x00,0x28 TLS_KRB5_EXPORT_WITH_RC4_40_SHA [RFC2712]
682+ * 0x00,0x29 TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 [RFC2712]
683+ * 0x00,0x2A TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5 [RFC2712]
684+ * 0x00,0x2B TLS_KRB5_EXPORT_WITH_RC4_40_MD5 [RFC2712]
685+ * 0x00,0x2C TLS_PSK_WITH_NULL_SHA [RFC4785]
686+ * 0x00,0x2D TLS_DHE_PSK_WITH_NULL_SHA [RFC4785]
687+ * 0x00,0x2E TLS_RSA_PSK_WITH_NULL_SHA [RFC4785]
688+ * 0x00,0x2F TLS_RSA_WITH_AES_128_CBC_SHA [RFC5246]
689+ * 0x00,0x30 TLS_DH_DSS_WITH_AES_128_CBC_SHA [RFC5246]
690+ * 0x00,0x31 TLS_DH_RSA_WITH_AES_128_CBC_SHA [RFC5246]
691+ * 0x00,0x32 TLS_DHE_DSS_WITH_AES_128_CBC_SHA [RFC5246]
692+ * 0x00,0x33 TLS_DHE_RSA_WITH_AES_128_CBC_SHA [RFC5246]
693+ * 0x00,0x34 TLS_DH_anon_WITH_AES_128_CBC_SHA [RFC5246]
694+ * 0x00,0x35 TLS_RSA_WITH_AES_256_CBC_SHA [RFC5246]
695+ * 0x00,0x36 TLS_DH_DSS_WITH_AES_256_CBC_SHA [RFC5246]
696+ * 0x00,0x37 TLS_DH_RSA_WITH_AES_256_CBC_SHA [RFC5246]
697+ * 0x00,0x38 TLS_DHE_DSS_WITH_AES_256_CBC_SHA [RFC5246]
698+ * 0x00,0x39 TLS_DHE_RSA_WITH_AES_256_CBC_SHA [RFC5246]
699+ * 0x00,0x3A TLS_DH_anon_WITH_AES_256_CBC_SHA [RFC5246]
700+ * 0x00,0x3B TLS_RSA_WITH_NULL_SHA256 [RFC5246]
701+ * 0x00,0x3C TLS_RSA_WITH_AES_128_CBC_SHA256 [RFC5246]
702+ * 0x00,0x3D TLS_RSA_WITH_AES_256_CBC_SHA256 [RFC5246]
703+ * 0x00,0x3E TLS_DH_DSS_WITH_AES_128_CBC_SHA256 [RFC5246]
704+ * 0x00,0x3F TLS_DH_RSA_WITH_AES_128_CBC_SHA256 [RFC5246]
705+ * 0x00,0x40 TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 [RFC5246]
706+ * 0x00,0x41 TLS_RSA_WITH_CAMELLIA_128_CBC_SHA [RFC5932]
707+ * 0x00,0x42 TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA [RFC5932]
708+ * 0x00,0x43 TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA [RFC5932]
709+ * 0x00,0x44 TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA [RFC5932]
710+ * 0x00,0x45 TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA [RFC5932]
711+ * 0x00,0x46 TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA [RFC5932]
712+ * 0x00,0x47-4F Reserved to avoid conflicts with
713+ * deployed implementations [Pasi_Eronen]
714+ * 0x00,0x50-58 Reserved to avoid conflicts [Pasi Eronen]
715+ * 0x00,0x59-5C Reserved to avoid conflicts with
716+ * deployed implementations [Pasi_Eronen]
717+ * 0x00,0x5D-5F Unassigned
718+ * 0x00,0x60-66 Reserved to avoid conflicts with widely
719+ * deployed implementations [Pasi_Eronen]
720+ * 0x00,0x67 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 [RFC5246]
721+ * 0x00,0x68 TLS_DH_DSS_WITH_AES_256_CBC_SHA256 [RFC5246]
722+ * 0x00,0x69 TLS_DH_RSA_WITH_AES_256_CBC_SHA256 [RFC5246]
723+ * 0x00,0x6A TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 [RFC5246]
724+ * 0x00,0x6B TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 [RFC5246]
725+ * 0x00,0x6C TLS_DH_anon_WITH_AES_128_CBC_SHA256 [RFC5246]
726+ * 0x00,0x6D TLS_DH_anon_WITH_AES_256_CBC_SHA256 [RFC5246]
727+ * 0x00,0x6E-83 Unassigned
728+ * 0x00,0x84 TLS_RSA_WITH_CAMELLIA_256_CBC_SHA [RFC5932]
729+ * 0x00,0x85 TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA [RFC5932]
730+ * 0x00,0x86 TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA [RFC5932]
731+ * 0x00,0x87 TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA [RFC5932]
732+ * 0x00,0x88 TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA [RFC5932]
733+ * 0x00,0x89 TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA [RFC5932]
734+ * 0x00,0x8A TLS_PSK_WITH_RC4_128_SHA [RFC4279]
735+ * 0x00,0x8B TLS_PSK_WITH_3DES_EDE_CBC_SHA [RFC4279]
736+ * 0x00,0x8C TLS_PSK_WITH_AES_128_CBC_SHA [RFC4279]
737+ * 0x00,0x8D TLS_PSK_WITH_AES_256_CBC_SHA [RFC4279]
738+ * 0x00,0x8E TLS_DHE_PSK_WITH_RC4_128_SHA [RFC4279]
739+ * 0x00,0x8F TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA [RFC4279]
740+ * 0x00,0x90 TLS_DHE_PSK_WITH_AES_128_CBC_SHA [RFC4279]
741+ * 0x00,0x91 TLS_DHE_PSK_WITH_AES_256_CBC_SHA [RFC4279]
742+ * 0x00,0x92 TLS_RSA_PSK_WITH_RC4_128_SHA [RFC4279]
743+ * 0x00,0x93 TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA [RFC4279]
744+ * 0x00,0x94 TLS_RSA_PSK_WITH_AES_128_CBC_SHA [RFC4279]
745+ * 0x00,0x95 TLS_RSA_PSK_WITH_AES_256_CBC_SHA [RFC4279]
746+ * 0x00,0x96 TLS_RSA_WITH_SEED_CBC_SHA [RFC4162]
747+ * 0x00,0x97 TLS_DH_DSS_WITH_SEED_CBC_SHA [RFC4162]
748+ * 0x00,0x98 TLS_DH_RSA_WITH_SEED_CBC_SHA [RFC4162]
749+ * 0x00,0x99 TLS_DHE_DSS_WITH_SEED_CBC_SHA [RFC4162]
750+ * 0x00,0x9A TLS_DHE_RSA_WITH_SEED_CBC_SHA [RFC4162]
751+ * 0x00,0x9B TLS_DH_anon_WITH_SEED_CBC_SHA [RFC4162]
752+ * 0x00,0x9C TLS_RSA_WITH_AES_128_GCM_SHA256 [RFC5288]
753+ * 0x00,0x9D TLS_RSA_WITH_AES_256_GCM_SHA384 [RFC5288]
754+ * 0x00,0x9E TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 [RFC5288]
755+ * 0x00,0x9F TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 [RFC5288]
756+ * 0x00,0xA0 TLS_DH_RSA_WITH_AES_128_GCM_SHA256 [RFC5288]
757+ * 0x00,0xA1 TLS_DH_RSA_WITH_AES_256_GCM_SHA384 [RFC5288]
758+ * 0x00,0xA2 TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 [RFC5288]
759+ * 0x00,0xA3 TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 [RFC5288]
760+ * 0x00,0xA4 TLS_DH_DSS_WITH_AES_128_GCM_SHA256 [RFC5288]
761+ * 0x00,0xA5 TLS_DH_DSS_WITH_AES_256_GCM_SHA384 [RFC5288]
762+ * 0x00,0xA6 TLS_DH_anon_WITH_AES_128_GCM_SHA256 [RFC5288]
763+ * 0x00,0xA7 TLS_DH_anon_WITH_AES_256_GCM_SHA384 [RFC5288]
764+ * 0x00,0xA8 TLS_PSK_WITH_AES_128_GCM_SHA256 [RFC5487]
765+ * 0x00,0xA9 TLS_PSK_WITH_AES_256_GCM_SHA384 [RFC5487]
766+ * 0x00,0xAA TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 [RFC5487]
767+ * 0x00,0xAB TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 [RFC5487]
768+ * 0x00,0xAC TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 [RFC5487]
769+ * 0x00,0xAD TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 [RFC5487]
770+ * 0x00,0xAE TLS_PSK_WITH_AES_128_CBC_SHA256 [RFC5487]
771+ * 0x00,0xAF TLS_PSK_WITH_AES_256_CBC_SHA384 [RFC5487]
772+ * 0x00,0xB0 TLS_PSK_WITH_NULL_SHA256 [RFC5487]
773+ * 0x00,0xB1 TLS_PSK_WITH_NULL_SHA384 [RFC5487]
774+ * 0x00,0xB2 TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 [RFC5487]
775+ * 0x00,0xB3 TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 [RFC5487]
776+ * 0x00,0xB4 TLS_DHE_PSK_WITH_NULL_SHA256 [RFC5487]
777+ * 0x00,0xB5 TLS_DHE_PSK_WITH_NULL_SHA384 [RFC5487]
778+ * 0x00,0xB6 TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 [RFC5487]
779+ * 0x00,0xB7 TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 [RFC5487]
780+ * 0x00,0xB8 TLS_RSA_PSK_WITH_NULL_SHA256 [RFC5487]
781+ * 0x00,0xB9 TLS_RSA_PSK_WITH_NULL_SHA384 [RFC5487]
782+ * 0x00,0xBA TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932]
783+ * 0x00,0xBB TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932]
784+ * 0x00,0xBC TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932]
785+ * 0x00,0xBD TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932]
786+ * 0x00,0xBE TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932]
787+ * 0x00,0xBF TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256 [RFC5932]
788+ * 0x00,0xC0 TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932]
789+ * 0x00,0xC1 TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932]
790+ * 0x00,0xC2 TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932]
791+ * 0x00,0xC3 TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932]
792+ * 0x00,0xC4 TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932]
793+ * 0x00,0xC5 TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256 [RFC5932]
794+ * 0x00,0xC6-FE Unassigned
795+ * 0x00,0xFF TLS_EMPTY_RENEGOTIATION_INFO_SCSV [RFC5746]
796+ * 0x01-BF,* Unassigned
797+ * 0xC0,0x01 TLS_ECDH_ECDSA_WITH_NULL_SHA [RFC4492]
798+ * 0xC0,0x02 TLS_ECDH_ECDSA_WITH_RC4_128_SHA [RFC4492]
799+ * 0xC0,0x03 TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA [RFC4492]
800+ * 0xC0,0x04 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA [RFC4492]
801+ * 0xC0,0x05 TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA [RFC4492]
802+ * 0xC0,0x06 TLS_ECDHE_ECDSA_WITH_NULL_SHA [RFC4492]
803+ * 0xC0,0x07 TLS_ECDHE_ECDSA_WITH_RC4_128_SHA [RFC4492]
804+ * 0xC0,0x08 TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA [RFC4492]
805+ * 0xC0,0x09 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA [RFC4492]
806+ * 0xC0,0x0A TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA [RFC4492]
807+ * 0xC0,0x0B TLS_ECDH_RSA_WITH_NULL_SHA [RFC4492]
808+ * 0xC0,0x0C TLS_ECDH_RSA_WITH_RC4_128_SHA [RFC4492]
809+ * 0xC0,0x0D TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA [RFC4492]
810+ * 0xC0,0x0E TLS_ECDH_RSA_WITH_AES_128_CBC_SHA [RFC4492]
811+ * 0xC0,0x0F TLS_ECDH_RSA_WITH_AES_256_CBC_SHA [RFC4492]
812+ * 0xC0,0x10 TLS_ECDHE_RSA_WITH_NULL_SHA [RFC4492]
813+ * 0xC0,0x11 TLS_ECDHE_RSA_WITH_RC4_128_SHA [RFC4492]
814+ * 0xC0,0x12 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA [RFC4492]
815+ * 0xC0,0x13 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA [RFC4492]
816+ * 0xC0,0x14 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA [RFC4492]
817+ * 0xC0,0x15 TLS_ECDH_anon_WITH_NULL_SHA [RFC4492]
818+ * 0xC0,0x16 TLS_ECDH_anon_WITH_RC4_128_SHA [RFC4492]
819+ * 0xC0,0x17 TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA [RFC4492]
820+ * 0xC0,0x18 TLS_ECDH_anon_WITH_AES_128_CBC_SHA [RFC4492]
821+ * 0xC0,0x19 TLS_ECDH_anon_WITH_AES_256_CBC_SHA [RFC4492]
822+ * 0xC0,0x1A TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA [RFC5054]
823+ * 0xC0,0x1B TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA [RFC5054]
824+ * 0xC0,0x1C TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA [RFC5054]
825+ * 0xC0,0x1D TLS_SRP_SHA_WITH_AES_128_CBC_SHA [RFC5054]
826+ * 0xC0,0x1E TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA [RFC5054]
827+ * 0xC0,0x1F TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA [RFC5054]
828+ * 0xC0,0x20 TLS_SRP_SHA_WITH_AES_256_CBC_SHA [RFC5054]
829+ * 0xC0,0x21 TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA [RFC5054]
830+ * 0xC0,0x22 TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA [RFC5054]
831+ * 0xC0,0x23 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 [RFC5289]
832+ * 0xC0,0x24 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 [RFC5289]
833+ * 0xC0,0x25 TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 [RFC5289]
834+ * 0xC0,0x26 TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 [RFC5289]
835+ * 0xC0,0x27 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 [RFC5289]
836+ * 0xC0,0x28 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 [RFC5289]
837+ * 0xC0,0x29 TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 [RFC5289]
838+ * 0xC0,0x2A TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 [RFC5289]
839+ * 0xC0,0x2B TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 [RFC5289]
840+ * 0xC0,0x2C TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 [RFC5289]
841+ * 0xC0,0x2D TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 [RFC5289]
842+ * 0xC0,0x2E TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 [RFC5289]
843+ * 0xC0,0x2F TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 [RFC5289]
844+ * 0xC0,0x30 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 [RFC5289]
845+ * 0xC0,0x31 TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 [RFC5289]
846+ * 0xC0,0x32 TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 [RFC5289]
847+ * 0xC0,0x33 TLS_ECDHE_PSK_WITH_RC4_128_SHA [RFC5489]
848+ * 0xC0,0x34 TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA [RFC5489]
849+ * 0xC0,0x35 TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA [RFC5489]
850+ * 0xC0,0x36 TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA [RFC5489]
851+ * 0xC0,0x37 TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 [RFC5489]
852+ * 0xC0,0x38 TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 [RFC5489]
853+ * 0xC0,0x39 TLS_ECDHE_PSK_WITH_NULL_SHA [RFC5489]
854+ * 0xC0,0x3A TLS_ECDHE_PSK_WITH_NULL_SHA256 [RFC5489]
855+ * 0xC0,0x3B TLS_ECDHE_PSK_WITH_NULL_SHA384 [RFC5489]
856+ * 0xC0,0x3C-FF Unassigned
857+ * 0xC1-FD,* Unassigned
858+ * 0xFE,0x00-FD Unassigned
859+ * 0xFE,0xFE-FF Reserved to avoid conflicts with widely
860+ * deployed implementations [Pasi_Eronen]
861+ * 0xFF,0x00-FF Reserved for Private Use [RFC5246]
862+ */
863+
864+ add("SSL_NULL_WITH_NULL_NULL",
865+ 0x0000, 1, K_NULL, B_NULL, F);
866+
867+ /*
868+ * Definition of the CipherSuites that are enabled by default.
869+ * They are listed in preference order, most preferred first, using
870+ * the following criteria:
871+ * 1. Prefer the stronger buld cipher, in the order of AES_256,
872+ * AES_128, RC-4, 3DES-EDE.
873+ * 2. Prefer the stronger MAC algorithm, in the order of SHA384,
874+ * SHA256, SHA, MD5.
875+ * 3. Prefer the better performance of key exchange and digital
876+ * signature algorithm, in the order of ECDHE-ECDSA, ECDHE-RSA,
877+ * RSA, ECDH-ECDSA, ECDH-RSA, DHE-RSA, DHE-DSS.
878+ */
879+ int p = DEFAULT_SUITES_PRIORITY * 2;
880+
881+ // shorten names to fit the following table cleanly.
882+ int max = ProtocolVersion.LIMIT_MAX_VALUE;
883+ int tls11 = ProtocolVersion.TLS11.v;
884+ int tls12 = ProtocolVersion.TLS12.v;
885+
886+ // ID Key Exchange Cipher A obs suprt PRF
887+ // ====== ============ ========= = === ===== ========
888+ add("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
889+ 0xc024, --p, K_ECDHE_ECDSA, B_AES_256, T, max, tls12, P_SHA384);
890+ add("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
891+ 0xc028, --p, K_ECDHE_RSA, B_AES_256, T, max, tls12, P_SHA384);
892+ add("TLS_RSA_WITH_AES_256_CBC_SHA256",
893+ 0x003d, --p, K_RSA, B_AES_256, T, max, tls12, P_SHA256);
894+ add("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384",
895+ 0xc026, --p, K_ECDH_ECDSA, B_AES_256, T, max, tls12, P_SHA384);
896+ add("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384",
897+ 0xc02a, --p, K_ECDH_RSA, B_AES_256, T, max, tls12, P_SHA384);
898+ add("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
899+ 0x006b, --p, K_DHE_RSA, B_AES_256, T, max, tls12, P_SHA256);
900+ add("TLS_DHE_DSS_WITH_AES_256_CBC_SHA256",
901+ 0x006a, --p, K_DHE_DSS, B_AES_256, T, max, tls12, P_SHA256);
902+
903+ add("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
904+ 0xC00A, --p, K_ECDHE_ECDSA, B_AES_256, T);
905+ add("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
906+ 0xC014, --p, K_ECDHE_RSA, B_AES_256, T);
907+ add("TLS_RSA_WITH_AES_256_CBC_SHA",
908+ 0x0035, --p, K_RSA, B_AES_256, T);
909+ add("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
910+ 0xC005, --p, K_ECDH_ECDSA, B_AES_256, T);
911+ add("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
912+ 0xC00F, --p, K_ECDH_RSA, B_AES_256, T);
913+ add("TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
914+ 0x0039, --p, K_DHE_RSA, B_AES_256, T);
915+ add("TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
916+ 0x0038, --p, K_DHE_DSS, B_AES_256, T);
917+
918+ add("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
919+ 0xc023, --p, K_ECDHE_ECDSA, B_AES_128, T, max, tls12, P_SHA256);
920+ add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
921+ 0xc027, --p, K_ECDHE_RSA, B_AES_128, T, max, tls12, P_SHA256);
922+ add("TLS_RSA_WITH_AES_128_CBC_SHA256",
923+ 0x003c, --p, K_RSA, B_AES_128, T, max, tls12, P_SHA256);
924+ add("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
925+ 0xc025, --p, K_ECDH_ECDSA, B_AES_128, T, max, tls12, P_SHA256);
926+ add("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
927+ 0xc029, --p, K_ECDH_RSA, B_AES_128, T, max, tls12, P_SHA256);
928+ add("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
929+ 0x0067, --p, K_DHE_RSA, B_AES_128, T, max, tls12, P_SHA256);
930+ add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
931+ 0x0040, --p, K_DHE_DSS, B_AES_128, T, max, tls12, P_SHA256);
932+
933+ add("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
934+ 0xC009, --p, K_ECDHE_ECDSA, B_AES_128, T);
935+ add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
936+ 0xC013, --p, K_ECDHE_RSA, B_AES_128, T);
937+ add("TLS_RSA_WITH_AES_128_CBC_SHA",
938+ 0x002f, --p, K_RSA, B_AES_128, T);
939+ add("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
940+ 0xC004, --p, K_ECDH_ECDSA, B_AES_128, T);
941+ add("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
942+ 0xC00E, --p, K_ECDH_RSA, B_AES_128, T);
943+ add("TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
944+ 0x0033, --p, K_DHE_RSA, B_AES_128, T);
945+ add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
946+ 0x0032, --p, K_DHE_DSS, B_AES_128, T);
947+
948+ add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
949+ 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N);
950+ add("TLS_ECDHE_RSA_WITH_RC4_128_SHA",
951+ 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N);
952+ add("SSL_RSA_WITH_RC4_128_SHA",
953+ 0x0005, --p, K_RSA, B_RC4_128, N);
954+ add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
955+ 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N);
956+ add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
957+ 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N);
958+
959+ add("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
960+ 0xC008, --p, K_ECDHE_ECDSA, B_3DES, T);
961+ add("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
962+ 0xC012, --p, K_ECDHE_RSA, B_3DES, T);
963+ add("SSL_RSA_WITH_3DES_EDE_CBC_SHA",
964+ 0x000a, --p, K_RSA, B_3DES, T);
965+ add("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA",
966+ 0xC003, --p, K_ECDH_ECDSA, B_3DES, T);
967+ add("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
968+ 0xC00D, --p, K_ECDH_RSA, B_3DES, T);
969+ add("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
970+ 0x0016, --p, K_DHE_RSA, B_3DES, T);
971+ add("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
972+ 0x0013, --p, K_DHE_DSS, B_3DES, N);
973+
974+ add("SSL_RSA_WITH_RC4_128_MD5",
975+ 0x0004, --p, K_RSA, B_RC4_128, N);
976+
977+ // Renegotiation protection request Signalling Cipher Suite Value (SCSV)
978+ add("TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
979+ 0x00ff, --p, K_SCSV, B_NULL, T);
980+
981+ /*
982+ * Definition of the CipherSuites that are supported but not enabled
983+ * by default.
984+ * They are listed in preference order, preferred first, using the
985+ * following criteria:
986+ * 1. CipherSuites for KRB5 need additional KRB5 service
987+ * configuration, and these suites are not common in practice,
988+ * so we put KRB5 based cipher suites at the end of the supported
989+ * list.
990+ * 2. If a cipher suite has been obsoleted, we put it at the end of
991+ * the list.
992+ * 3. Prefer the stronger bulk cipher, in the order of AES_256,
993+ * AES_128, RC-4, 3DES-EDE, DES, RC4_40, DES40, NULL.
994+ * 4. Prefer the stronger MAC algorithm, in the order of SHA384,
995+ * SHA256, SHA, MD5.
996+ * 5. Prefer the better performance of key exchange and digital
997+ * signature algorithm, in the order of ECDHE-ECDSA, ECDHE-RSA,
998+ * RSA, ECDH-ECDSA, ECDH-RSA, DHE-RSA, DHE-DSS, anonymous.
999+ */
1000+ p = DEFAULT_SUITES_PRIORITY;
1001+
1002+ add("TLS_DH_anon_WITH_AES_256_CBC_SHA256",
1003+ 0x006d, --p, K_DH_ANON, B_AES_256, N, max, tls12, P_SHA256);
1004+ add("TLS_ECDH_anon_WITH_AES_256_CBC_SHA",
1005+ 0xC019, --p, K_ECDH_ANON, B_AES_256, T);
1006+ add("TLS_DH_anon_WITH_AES_256_CBC_SHA",
1007+ 0x003a, --p, K_DH_ANON, B_AES_256, N);
1008+
1009+ add("TLS_DH_anon_WITH_AES_128_CBC_SHA256",
1010+ 0x006c, --p, K_DH_ANON, B_AES_128, N, max, tls12, P_SHA256);
1011+ add("TLS_ECDH_anon_WITH_AES_128_CBC_SHA",
1012+ 0xC018, --p, K_ECDH_ANON, B_AES_128, T);
1013+ add("TLS_DH_anon_WITH_AES_128_CBC_SHA",
1014+ 0x0034, --p, K_DH_ANON, B_AES_128, N);
1015+
1016+ add("TLS_ECDH_anon_WITH_RC4_128_SHA",
1017+ 0xC016, --p, K_ECDH_ANON, B_RC4_128, N);
1018+ add("SSL_DH_anon_WITH_RC4_128_MD5",
1019+ 0x0018, --p, K_DH_ANON, B_RC4_128, N);
1020+
1021+ add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
1022+ 0xC017, --p, K_ECDH_ANON, B_3DES, T);
1023+ add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
1024+ 0x001b, --p, K_DH_ANON, B_3DES, N);
1025+
1026+ add("TLS_RSA_WITH_NULL_SHA256",
1027+ 0x003b, --p, K_RSA, B_NULL, N, max, tls12, P_SHA256);
1028+ add("TLS_ECDHE_ECDSA_WITH_NULL_SHA",
1029+ 0xC006, --p, K_ECDHE_ECDSA, B_NULL, N);
1030+ add("TLS_ECDHE_RSA_WITH_NULL_SHA",
1031+ 0xC010, --p, K_ECDHE_RSA, B_NULL, N);
1032+ add("SSL_RSA_WITH_NULL_SHA",
1033+ 0x0002, --p, K_RSA, B_NULL, N);
1034+ add("TLS_ECDH_ECDSA_WITH_NULL_SHA",
1035+ 0xC001, --p, K_ECDH_ECDSA, B_NULL, N);
1036+ add("TLS_ECDH_RSA_WITH_NULL_SHA",
1037+ 0xC00B, --p, K_ECDH_RSA, B_NULL, N);
1038+ add("TLS_ECDH_anon_WITH_NULL_SHA",
1039+ 0xC015, --p, K_ECDH_ANON, B_NULL, N);
1040+ add("SSL_RSA_WITH_NULL_MD5",
1041+ 0x0001, --p, K_RSA, B_NULL, N);
1042+
1043+ // weak cipher suites obsoleted in TLS 1.2
1044+ add("SSL_RSA_WITH_DES_CBC_SHA",
1045+ 0x0009, --p, K_RSA, B_DES, N, tls12);
1046+ add("SSL_DHE_RSA_WITH_DES_CBC_SHA",
1047+ 0x0015, --p, K_DHE_RSA, B_DES, N, tls12);
1048+ add("SSL_DHE_DSS_WITH_DES_CBC_SHA",
1049+ 0x0012, --p, K_DHE_DSS, B_DES, N, tls12);
1050+ add("SSL_DH_anon_WITH_DES_CBC_SHA",
1051+ 0x001a, --p, K_DH_ANON, B_DES, N, tls12);
1052+
1053+ // weak cipher suites obsoleted in TLS 1.1
1054+ add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
1055+ 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11);
1056+ add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
1057+ 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11);
1058+
1059+ add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
1060+ 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11);
1061+ add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
1062+ 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11);
1063+ add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
1064+ 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11);
1065+ add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
1066+ 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11);
1067+
1068+ // Supported Kerberos ciphersuites from RFC2712
1069+ add("TLS_KRB5_WITH_RC4_128_SHA",
1070+ 0x0020, --p, K_KRB5, B_RC4_128, N);
1071+ add("TLS_KRB5_WITH_RC4_128_MD5",
1072+ 0x0024, --p, K_KRB5, B_RC4_128, N);
1073+ add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA",
1074+ 0x001f, --p, K_KRB5, B_3DES, N);
1075+ add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5",
1076+ 0x0023, --p, K_KRB5, B_3DES, N);
1077+ add("TLS_KRB5_WITH_DES_CBC_SHA",
1078+ 0x001e, --p, K_KRB5, B_DES, N, tls12);
1079+ add("TLS_KRB5_WITH_DES_CBC_MD5",
1080+ 0x0022, --p, K_KRB5, B_DES, N, tls12);
1081+ add("TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
1082+ 0x0028, --p, K_KRB5_EXPORT, B_RC4_40, N, tls11);
1083+ add("TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
1084+ 0x002b, --p, K_KRB5_EXPORT, B_RC4_40, N, tls11);
1085+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA",
1086+ 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
1087+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5",
1088+ 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11);
1089+
1090+ /*
1091+ * Other values from the TLS Cipher Suite Registry, as of August 2010.
1092+ *
1093+ * http://www.iana.org/assignments/tls-parameters/tls-parameters.xml
1094+ *
1095+ * Range Registration Procedures Notes
1096+ * 000-191 Standards Action Refers to value of first byte
1097+ * 192-254 Specification Required Refers to value of first byte
1098+ * 255 Reserved for Private Use Refers to value of first byte
1099+ */
1100+
1101+ // Register the names of a few additional CipherSuites.
1102+ // Makes them show up as names instead of numbers in
1103+ // the debug output.
1104+
1105+ // remaining unsupported ciphersuites defined in RFC2246.
1106+ add("SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5", 0x0006);
1107+ add("SSL_RSA_WITH_IDEA_CBC_SHA", 0x0007);
1108+ add("SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", 0x000b);
1109+ add("SSL_DH_DSS_WITH_DES_CBC_SHA", 0x000c);
1110+ add("SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA", 0x000d);
1111+ add("SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", 0x000e);
1112+ add("SSL_DH_RSA_WITH_DES_CBC_SHA", 0x000f);
1113+ add("SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA", 0x0010);
1114+
1115+ // SSL 3.0 Fortezza ciphersuites
1116+ add("SSL_FORTEZZA_DMS_WITH_NULL_SHA", 0x001c);
1117+ add("SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA", 0x001d);
1118+
1119+ // 1024/56 bit exportable ciphersuites from expired internet draft
1120+ add("SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA", 0x0062);
1121+ add("SSL_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA", 0x0063);
1122+ add("SSL_RSA_EXPORT1024_WITH_RC4_56_SHA", 0x0064);
1123+ add("SSL_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA", 0x0065);
1124+ add("SSL_DHE_DSS_WITH_RC4_128_SHA", 0x0066);
1125+
1126+ // Netscape old and new SSL 3.0 FIPS ciphersuites
1127+ // see http://www.mozilla.org/projects/security/pki/nss/ssl/fips-ssl-ciphersuites.html
1128+ add("NETSCAPE_RSA_FIPS_WITH_3DES_EDE_CBC_SHA", 0xffe0);
1129+ add("NETSCAPE_RSA_FIPS_WITH_DES_CBC_SHA", 0xffe1);
1130+ add("SSL_RSA_FIPS_WITH_DES_CBC_SHA", 0xfefe);
1131+ add("SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA", 0xfeff);
1132+
1133+ // Unsupported Kerberos cipher suites from RFC 2712
1134+ add("TLS_KRB5_WITH_IDEA_CBC_SHA", 0x0021);
1135+ add("TLS_KRB5_WITH_IDEA_CBC_MD5", 0x0025);
1136+ add("TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA", 0x0027);
1137+ add("TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5", 0x002a);
1138+
1139+ // Unsupported cipher suites from RFC 4162
1140+ add("TLS_RSA_WITH_SEED_CBC_SHA", 0x0096);
1141+ add("TLS_DH_DSS_WITH_SEED_CBC_SHA", 0x0097);
1142+ add("TLS_DH_RSA_WITH_SEED_CBC_SHA", 0x0098);
1143+ add("TLS_DHE_DSS_WITH_SEED_CBC_SHA", 0x0099);
1144+ add("TLS_DHE_RSA_WITH_SEED_CBC_SHA", 0x009a);
1145+ add("TLS_DH_anon_WITH_SEED_CBC_SHA", 0x009b);
1146+
1147+ // Unsupported cipher suites from RFC 4279
1148+ add("TLS_PSK_WITH_RC4_128_SHA", 0x008a);
1149+ add("TLS_PSK_WITH_3DES_EDE_CBC_SHA", 0x008b);
1150+ add("TLS_PSK_WITH_AES_128_CBC_SHA", 0x008c);
1151+ add("TLS_PSK_WITH_AES_256_CBC_SHA", 0x008d);
1152+ add("TLS_DHE_PSK_WITH_RC4_128_SHA", 0x008e);
1153+ add("TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA", 0x008f);
1154+ add("TLS_DHE_PSK_WITH_AES_128_CBC_SHA", 0x0090);
1155+ add("TLS_DHE_PSK_WITH_AES_256_CBC_SHA", 0x0091);
1156+ add("TLS_RSA_PSK_WITH_RC4_128_SHA", 0x0092);
1157+ add("TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA", 0x0093);
1158+ add("TLS_RSA_PSK_WITH_AES_128_CBC_SHA", 0x0094);
1159+ add("TLS_RSA_PSK_WITH_AES_256_CBC_SHA", 0x0095);
1160+
1161+ // Unsupported cipher suites from RFC 4785
1162+ add("TLS_PSK_WITH_NULL_SHA", 0x002c);
1163+ add("TLS_DHE_PSK_WITH_NULL_SHA", 0x002d);
1164+ add("TLS_RSA_PSK_WITH_NULL_SHA", 0x002e);
1165+
1166+ // Unsupported cipher suites from RFC 5246
1167+ add("TLS_DH_DSS_WITH_AES_128_CBC_SHA", 0x0030);
1168+ add("TLS_DH_RSA_WITH_AES_128_CBC_SHA", 0x0031);
1169+ add("TLS_DH_DSS_WITH_AES_256_CBC_SHA", 0x0036);
1170+ add("TLS_DH_RSA_WITH_AES_256_CBC_SHA", 0x0037);
1171+ add("TLS_DH_DSS_WITH_AES_128_CBC_SHA256", 0x003e);
1172+ add("TLS_DH_RSA_WITH_AES_128_CBC_SHA256", 0x003f);
1173+ add("TLS_DH_DSS_WITH_AES_256_CBC_SHA256", 0x0068);
1174+ add("TLS_DH_RSA_WITH_AES_256_CBC_SHA256", 0x0069);
1175+
1176+ // Unsupported cipher suites from RFC 5288
1177+ add("TLS_RSA_WITH_AES_128_GCM_SHA256", 0x009c);
1178+ add("TLS_RSA_WITH_AES_256_GCM_SHA384", 0x009d);
1179+ add("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", 0x009e);
1180+ add("TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", 0x009f);
1181+ add("TLS_DH_RSA_WITH_AES_128_GCM_SHA256", 0x00a0);
1182+ add("TLS_DH_RSA_WITH_AES_256_GCM_SHA384", 0x00a1);
1183+ add("TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", 0x00a2);
1184+ add("TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", 0x00a3);
1185+ add("TLS_DH_DSS_WITH_AES_128_GCM_SHA256", 0x00a4);
1186+ add("TLS_DH_DSS_WITH_AES_256_GCM_SHA384", 0x00a5);
1187+ add("TLS_DH_anon_WITH_AES_128_GCM_SHA256", 0x00a6);
1188+ add("TLS_DH_anon_WITH_AES_256_GCM_SHA384", 0x00a7);
1189+
1190+ // Unsupported cipher suites from RFC 5487
1191+ add("TLS_PSK_WITH_AES_128_GCM_SHA256", 0x00a8);
1192+ add("TLS_PSK_WITH_AES_256_GCM_SHA384", 0x00a9);
1193+ add("TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", 0x00aa);
1194+ add("TLS_DHE_PSK_WITH_AES_256_GCM_SHA384", 0x00ab);
1195+ add("TLS_RSA_PSK_WITH_AES_128_GCM_SHA256", 0x00ac);
1196+ add("TLS_RSA_PSK_WITH_AES_256_GCM_SHA384", 0x00ad);
1197+ add("TLS_PSK_WITH_AES_128_CBC_SHA256", 0x00ae);
1198+ add("TLS_PSK_WITH_AES_256_CBC_SHA384", 0x00af);
1199+ add("TLS_PSK_WITH_NULL_SHA256", 0x00b0);
1200+ add("TLS_PSK_WITH_NULL_SHA384", 0x00b1);
1201+ add("TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", 0x00b2);
1202+ add("TLS_DHE_PSK_WITH_AES_256_CBC_SHA384", 0x00b3);
1203+ add("TLS_DHE_PSK_WITH_NULL_SHA256", 0x00b4);
1204+ add("TLS_DHE_PSK_WITH_NULL_SHA384", 0x00b5);
1205+ add("TLS_RSA_PSK_WITH_AES_128_CBC_SHA256", 0x00b6);
1206+ add("TLS_RSA_PSK_WITH_AES_256_CBC_SHA384", 0x00b7);
1207+ add("TLS_RSA_PSK_WITH_NULL_SHA256", 0x00b8);
1208+ add("TLS_RSA_PSK_WITH_NULL_SHA384", 0x00b9);
1209+
1210+ // Unsupported cipher suites from RFC 5932
1211+ add("TLS_RSA_WITH_CAMELLIA_128_CBC_SHA", 0x0041);
1212+ add("TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA", 0x0042);
1213+ add("TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA", 0x0043);
1214+ add("TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA", 0x0044);
1215+ add("TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA", 0x0045);
1216+ add("TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA", 0x0046);
1217+ add("TLS_RSA_WITH_CAMELLIA_256_CBC_SHA", 0x0084);
1218+ add("TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA", 0x0085);
1219+ add("TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA", 0x0086);
1220+ add("TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA", 0x0087);
1221+ add("TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA", 0x0088);
1222+ add("TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA", 0x0089);
1223+ add("TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256", 0x00ba);
1224+ add("TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256", 0x00bb);
1225+ add("TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256", 0x00bc);
1226+ add("TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256", 0x00bd);
1227+ add("TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", 0x00be);
1228+ add("TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256", 0x00bf);
1229+ add("TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256", 0x00c0);
1230+ add("TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256", 0x00c1);
1231+ add("TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256", 0x00c2);
1232+ add("TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256", 0x00c3);
1233+ add("TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256", 0x00c4);
1234+ add("TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256", 0x00c5);
1235+
1236+ // Unsupported cipher suites from RFC 5054
1237+ add("TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA", 0xc01a);
1238+ add("TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", 0xc01b);
1239+ add("TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA", 0xc01c);
1240+ add("TLS_SRP_SHA_WITH_AES_128_CBC_SHA", 0xc01d);
1241+ add("TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA", 0xc01e);
1242+ add("TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA", 0xc01f);
1243+ add("TLS_SRP_SHA_WITH_AES_256_CBC_SHA", 0xc020);
1244+ add("TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA", 0xc021);
1245+ add("TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA", 0xc022);
1246+
1247+ // Unsupported cipher suites from RFC 5289
1248+ add("TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", 0xc02b);
1249+ add("TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", 0xc02c);
1250+ add("TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", 0xc02d);
1251+ add("TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", 0xc02e);
1252+ add("TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", 0xc02f);
1253+ add("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", 0xc030);
1254+ add("TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", 0xc031);
1255+ add("TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", 0xc032);
1256+
1257+ // Unsupported cipher suites from RFC 5489
1258+ add("TLS_ECDHE_PSK_WITH_RC4_128_SHA", 0xc033);
1259+ add("TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", 0xc034);
1260+ add("TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", 0xc035);
1261+ add("TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", 0xc036);
1262+ add("TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256", 0xc037);
1263+ add("TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384", 0xc038);
1264+ add("TLS_ECDHE_PSK_WITH_NULL_SHA", 0xc039);
1265+ add("TLS_ECDHE_PSK_WITH_NULL_SHA256", 0xc03a);
1266+ add("TLS_ECDHE_PSK_WITH_NULL_SHA384", 0xc03b);
1267+ }
1268+
1269+ // ciphersuite SSL_NULL_WITH_NULL_NULL
1270+ final static CipherSuite C_NULL = CipherSuite.valueOf(0, 0);
1271+
1272+ // ciphersuite TLS_EMPTY_RENEGOTIATION_INFO_SCSV
1273+ final static CipherSuite C_SCSV = CipherSuite.valueOf(0x00, 0xff);
1274+}