1 Conscrypt's Capabilities 2 ======================================== 3 4 Conscrypt is relatively selective in choosing the set of primitives to provide, focusing 5 on the most important and widely-used algorithms. Following is a list of JCA algorithm names 6 and 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 18 Conscrypt 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-) 21 but 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 33 Conscrypt provides the above set of SSLContext algorithm names for JSSE 34 purposes, including the special value `Default`, which is used to determine the 35 value of 36 [`SSLContext.getDefault()`](https://docs.oracle.com/javase/9/docs/api/javax/net/ssl/SSLContext.html#getDefault--). 37 The `Default`, `SSL`, `TLS`, and `TLSv1.3` values return a context where TLS 38 v1.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 63 The above cipher suites are enabled by default when the associated version of 64 the protocol is enabled. The TLS 1.3 cipher suites cannot be customized; they 65 are always enabled when TLS 1.3 is enabled, and any attempt to disable them via 66 a call to 67 [`setEnabledCipherSuites()`](https://docs.oracle.com/javase/9/docs/api/javax/net/ssl/SSLSocket.html#setEnabledCipherSuites-java.lang.String:A-) 68 is 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 79 The above cipher suites are supported, but not enabled by default. TLS 1.3 80 cipher suites cannot be customized, so there are no cipher suites that are 81 supported 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 93 AES with 128, 192, or 256-bit keys. 94 95 * `AES/GCM/NoPadding` 96 97 AES/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 110 Key-restricted versions of the AES ciphers. 111 112 * `ARC4` 113 114 The RC4 stream cipher. 115 116 * `ChaCha20/NONE/NoPadding` 117 * `ChaCha20/Poly1305/NoPadding` 118 119 ChaCha 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 121 authenticator. 122 123 * `DESEDE/CBC/NoPadding` 124 * `DESEDE/CBC/PKCS5Padding` 125 126 Triple 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 137 Conscrypt's OAEP ciphers (eg, `RSA/ECB/OAEPWithSHA-256AndMGF1Padding`) use the named digest for 138 both the main digest and the MGF1 digest. This differs from the behavior of some other 139 providers, including the ones bundled with OpenJDK, which always use SHA-1 for the MGF1 digest. 140 For 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 152 Conscrypt'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 224 Conscrypt supports the following curves: 225 226 * secp224r1 227 * prime256v1 (aka secp256r1) 228 * secp384r1 229 * secp521r1 230