1 /* |
|
2 * Copyright (c) 2006, 2017, 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 package sun.security.ssl; |
|
27 |
|
28 import java.util.ArrayList; |
|
29 import java.util.List; |
|
30 |
|
31 final class ExtensionType { |
|
32 |
|
33 final int id; |
|
34 final String name; |
|
35 |
|
36 private ExtensionType(int id, String name) { |
|
37 this.id = id; |
|
38 this.name = name; |
|
39 } |
|
40 |
|
41 @Override |
|
42 public String toString() { |
|
43 return name; |
|
44 } |
|
45 |
|
46 static List<ExtensionType> knownExtensions = new ArrayList<>(16); |
|
47 |
|
48 static ExtensionType get(int id) { |
|
49 for (ExtensionType ext : knownExtensions) { |
|
50 if (ext.id == id) { |
|
51 return ext; |
|
52 } |
|
53 } |
|
54 return new ExtensionType(id, "type_" + id); |
|
55 } |
|
56 |
|
57 private static ExtensionType e(int id, String name) { |
|
58 ExtensionType ext = new ExtensionType(id, name); |
|
59 knownExtensions.add(ext); |
|
60 return ext; |
|
61 } |
|
62 |
|
63 // extensions defined in RFC 3546 |
|
64 static final ExtensionType EXT_SERVER_NAME = |
|
65 e(0x0000, "server_name"); // IANA registry value: 0 |
|
66 static final ExtensionType EXT_MAX_FRAGMENT_LENGTH = |
|
67 e(0x0001, "max_fragment_length"); // IANA registry value: 1 |
|
68 static final ExtensionType EXT_CLIENT_CERTIFICATE_URL = |
|
69 e(0x0002, "client_certificate_url"); // IANA registry value: 2 |
|
70 static final ExtensionType EXT_TRUSTED_CA_KEYS = |
|
71 e(0x0003, "trusted_ca_keys"); // IANA registry value: 3 |
|
72 static final ExtensionType EXT_TRUNCATED_HMAC = |
|
73 e(0x0004, "truncated_hmac"); // IANA registry value: 4 |
|
74 static final ExtensionType EXT_STATUS_REQUEST = |
|
75 e(0x0005, "status_request"); // IANA registry value: 5 |
|
76 |
|
77 // extensions defined in RFC 4681 |
|
78 static final ExtensionType EXT_USER_MAPPING = |
|
79 e(0x0006, "user_mapping"); // IANA registry value: 6 |
|
80 |
|
81 // extensions defined in RFC 5081 |
|
82 static final ExtensionType EXT_CERT_TYPE = |
|
83 e(0x0009, "cert_type"); // IANA registry value: 9 |
|
84 |
|
85 // extensions defined in RFC 4492 (ECC) and RFC 7919 (FFDHE) |
|
86 static final ExtensionType EXT_SUPPORTED_GROUPS = |
|
87 e(0x000A, "supported_groups"); // IANA registry value: 10 |
|
88 static final ExtensionType EXT_EC_POINT_FORMATS = |
|
89 e(0x000B, "ec_point_formats"); // IANA registry value: 11 |
|
90 |
|
91 // extensions defined in RFC 5054 |
|
92 static final ExtensionType EXT_SRP = |
|
93 e(0x000C, "srp"); // IANA registry value: 12 |
|
94 |
|
95 // extensions defined in RFC 5246 |
|
96 static final ExtensionType EXT_SIGNATURE_ALGORITHMS = |
|
97 e(0x000D, "signature_algorithms"); // IANA registry value: 13 |
|
98 |
|
99 // extension defined in RFC 7301 (ALPN) |
|
100 static final ExtensionType EXT_ALPN = |
|
101 e(0x0010, "application_layer_protocol_negotiation"); |
|
102 // IANA registry value: 16 |
|
103 |
|
104 // extensions defined in RFC 6961 |
|
105 static final ExtensionType EXT_STATUS_REQUEST_V2 = |
|
106 e(0x0011, "status_request_v2"); // IANA registry value: 17 |
|
107 |
|
108 // extensions defined in RFC 7627 |
|
109 static final ExtensionType EXT_EXTENDED_MASTER_SECRET = |
|
110 e(0x0017, "extended_master_secret"); // IANA registry value: 23 |
|
111 |
|
112 // extensions defined in RFC 5746 |
|
113 static final ExtensionType EXT_RENEGOTIATION_INFO = |
|
114 e(0xff01, "renegotiation_info"); // IANA registry value: 65281 |
|
115 } |
|