• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Conscrypt's Capabilities
2========================================
3
4Conscrypt is relatively selective in choosing the set of primitives to provide, focusing
5on the most important and widely-used algorithms.  Following is a list of JCA algorithm names
6and other identifiers that are supported by Conscrypt.
7
8## TLS
9
10### Protocol Versions
11
12* `SSLv3` (ignored)
13* `TLSv1`
14* `TLSv1.1`
15* `TLSv1.2`
16* `TLSv1.3`
17
18Conscrypt supports TLS v1.0-1.3.  For backwards compatibility it will accept
19`SSLv3` in calls to methods like
20[`setEnabledProtocols()`](https://docs.oracle.com/javase/9/docs/api/javax/net/ssl/SSLSocket.html#setEnabledProtocols-java.lang.String:A-)
21but will ignore it.
22
23### SSLContext
24
25* `Default`
26* `SSL`
27* `TLS`
28* `TLSv1`
29* `TLSv1.1`
30* `TLSv1.2`
31* `TLSv1.3`
32
33Conscrypt provides the above set of SSLContext algorithm names for JSSE
34purposes, including the special value `Default`, which is used to determine the
35value of
36[`SSLContext.getDefault()`](https://docs.oracle.com/javase/9/docs/api/javax/net/ssl/SSLContext.html#getDefault--).
37The `Default`, `SSL`, `TLS`, and `TLSv1.3` values return a context where TLS
38v1.0-1.3 are all enabled; the others return a context with TLS v1.0-1.2 enabled.
39
40### Cipher Suites
41
42#### Enabled
43* TLS 1.0-1.2
44  * `TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA`
45  * `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
46  * `TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`
47  * `TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
48  * `TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256`
49  * `TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA`
50  * `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
51  * `TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA`
52  * `TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
53  * `TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256`
54  * `TLS_RSA_WITH_AES_128_CBC_SHA`
55  * `TLS_RSA_WITH_AES_128_GCM_SHA256`
56  * `TLS_RSA_WITH_AES_256_CBC_SHA`
57  * `TLS_RSA_WITH_AES_256_GCM_SHA384`
58* TLS 1.3
59  * `TLS_AES_128_GCM_SHA256`
60  * `TLS_AES_256_GCM_SHA384`
61  * `TLS_CHACHA20_POLY1305_SHA256`
62
63The above cipher suites are enabled by default when the associated version of
64the protocol is enabled.  The TLS 1.3 cipher suites cannot be customized; they
65are always enabled when TLS 1.3 is enabled, and any attempt to disable them via
66a call to
67[`setEnabledCipherSuites()`](https://docs.oracle.com/javase/9/docs/api/javax/net/ssl/SSLSocket.html#setEnabledCipherSuites-java.lang.String:A-)
68is ignored.
69
70#### Supported But Not Enabled
71* TLS 1.0-1.2
72  * `SSL_RSA_WITH_3DES_EDE_CBC_SHA`
73  * `TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA`
74  * `TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA`
75  * `TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256`
76  * `TLS_PSK_WITH_AES_128_CBC_SHA`
77  * `TLS_PSK_WITH_AES_256_CBC_SHA`
78
79The above cipher suites are supported, but not enabled by default.  TLS 1.3
80cipher suites cannot be customized, so there are no cipher suites that are
81supported but not enabled.
82
83## Cryptography
84
85### Cipher
86
87* `AES/CBC/NoPadding`
88* `AES/CBC/PKCS5Padding`
89* `AES/CTR/NoPadding`
90* `AES/ECB/NoPadding`
91* `AES/ECB/PKCS5Padding`
92
93AES with 128, 192, or 256-bit keys.
94
95* `AES/GCM/NoPadding`
96
97AES/GCM with 128 or 256-bit keys.
98
99* `AES_128/CBC/NoPadding`
100* `AES_128/CBC/PKCS5Padding`
101* `AES_128/ECB/NoPadding`
102* `AES_128/ECB/PKCS5Padding`
103* `AES_128/GCM/NoPadding`
104* `AES_256/CBC/NoPadding`
105* `AES_256/CBC/PKCS5Padding`
106* `AES_256/ECB/NoPadding`
107* `AES_256/ECB/PKCS5Padding`
108* `AES_256/GCM/NoPadding`
109
110Key-restricted versions of the AES ciphers.
111
112* `ARC4`
113
114The RC4 stream cipher.
115
116* `ChaCha20/NONE/NoPadding`
117* `ChaCha20/Poly1305/NoPadding`
118
119ChaCha with 20 rounds, 96-bit nonce, and 32-bit counter as described in
120[RFC 7539](https://tools.ietf.org/html/rfc7539), either with or without a Poly1305 AEAD
121authenticator.
122
123* `DESEDE/CBC/NoPadding`
124* `DESEDE/CBC/PKCS5Padding`
125
126Triple DES with either two or three intermediate keys.
127
128* `RSA/ECB/NoPadding`
129* `RSA/ECB/OAEPPadding`
130* `RSA/ECB/OAEPWithSHA-1AndMGF1Padding`
131* `RSA/ECB/OAEPWithSHA-224AndMGF1Padding`
132* `RSA/ECB/OAEPWithSHA-256AndMGF1Padding`
133* `RSA/ECB/OAEPWithSHA-384AndMGF1Padding`
134* `RSA/ECB/OAEPWithSHA-512AndMGF1Padding`
135* `RSA/ECB/PKCS1Padding`
136
137Conscrypt's OAEP ciphers (eg, `RSA/ECB/OAEPWithSHA-256AndMGF1Padding`) use the named digest for
138both the main digest and the MGF1 digest.  This differs from the behavior of some other
139providers, including the ones bundled with OpenJDK, which always use SHA-1 for the MGF1 digest.
140For maximum compatibility, you should use `RSA/ECB/OAEPPadding` and initialize it with an
141[`OAEPParameterSpec`](https://docs.oracle.com/javase/9/docs/api/javax/crypto/spec/OAEPParameterSpec.html).
142
143### AlgorithmParameters
144* `AES`
145* `ChaCha20`
146* `DESEDE`
147* `EC`
148* `GCM`
149* `OAEP`
150* `PSS`
151
152Conscrypt's EC AlgorithmParameters implementation only supports named curves.
153
154### CertificateFactory
155* `X509`
156
157### KeyAgreement
158* `ECDH`
159
160### KeyFactory
161* `EC`
162* `RSA`
163
164### KeyGenerator
165* `AES`
166* `ARC4`
167* `ChaCha20`
168* `DESEDE`
169* `HmacMD5`
170* `HmacSHA1`
171* `HmacSHA224`
172* `HmacSHA256`
173* `HmacSHA384`
174* `HmacSHA512`
175
176### KeyPairGenerator
177* `EC`
178* `RSA`
179
180### Mac
181* `HmacMD5`
182* `HmacSHA1`
183* `HmacSHA224`
184* `HmacSHA256`
185* `HmacSHA384`
186* `HmacSHA512`
187
188### MessageDigest
189* `MD5`
190* `SHA-1`
191* `SHA-224`
192* `SHA-256`
193* `SHA-384`
194* `SHA-512`
195
196### SecretKeyFactory
197* `DESEDE`
198
199### SecureRandom
200* `SHA1PRNG`
201
202### Signature
203* `MD5withRSA`
204* `NONEwithECDSA`
205* `NONEwithRSA`
206* `SHA1withRSA`
207* `SHA1withECDSA`
208* `SHA1withRSA/PSS`
209* `SHA224withRSA`
210* `SHA224withECDSA`
211* `SHA224withRSA/PSS`
212* `SHA256withRSA`
213* `SHA256withECDSA`
214* `SHA256withRSA/PSS`
215* `SHA384withRSA`
216* `SHA384withECDSA`
217* `SHA384withRSA/PSS`
218* `SHA512withRSA`
219* `SHA512withECDSA`
220* `SHA512withRSA/PSS`
221
222### Elliptic Curves
223
224Conscrypt supports the following curves:
225
226* secp224r1
227* prime256v1 (aka secp256r1)
228* secp384r1
229* secp521r1
230