Skip to content

Commit 73c80ec

Browse files
committed
BCJSSE: Add integrity-only cipher suites from RFC 9150
1 parent 38a7b97 commit 73c80ec

File tree

3 files changed

+41
-10
lines changed

3 files changed

+41
-10
lines changed

docs/releasenotes.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ <h3>2.1.2 Defects Fixed</h3>
2626
<li>SNOVA and MAYO are now correctly added to the JCA provider module-info file.</li>
2727
<li>TLS: Avoid nonce reuse error in JCE AEAD workaround for pre-Java7.</li>
2828
<li>BCJSSE: Session binding map is now shared across all stages of the session lifecycle (SunJSSE compatibility).</li>
29+
<li>BCJSSE: Support for integrity-only cipher suites in TLS 1.3 per RFC 9150.</li>
2930
</ul>
3031
<h3>2.1.3 Additional Features and Functionality</h3>
3132
<ul>

tls/src/main/java/org/bouncycastle/jsse/provider/CipherSuiteInfo.java

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,14 @@ private static void decomposeEncryptionAlgorithm(Set<String> decomposition, int
155155
case EncryptionAlgorithm.NULL:
156156
decomposition.add("C_NULL");
157157
break;
158+
case EncryptionAlgorithm.NULL_HMAC_SHA256:
159+
decomposition.add("C_NULL_HMAC");
160+
decomposeHmacSHA256(decomposition);
161+
break;
162+
case EncryptionAlgorithm.NULL_HMAC_SHA384:
163+
decomposition.add("C_NULL_HMAC");
164+
decomposeHmacSHA384(decomposition);
165+
break;
158166
case EncryptionAlgorithm.SM4_CBC:
159167
decomposition.add("SM4_CBC");
160168
break;
@@ -174,14 +182,14 @@ private static void decomposeHashAlgorithm(Set<String> decomposition, int crypto
174182
switch (cryptoHashAlgorithm)
175183
{
176184
case CryptoHashAlgorithm.sha256:
177-
addAll(decomposition, "SHA256", "SHA-256", "HmacSHA256");
185+
decomposeHmacSHA256(decomposition);
178186
break;
179187
case CryptoHashAlgorithm.sha384:
180-
addAll(decomposition, "SHA384", "SHA-384", "HmacSHA384");
188+
decomposeHmacSHA384(decomposition);
189+
break;
190+
case CryptoHashAlgorithm.sha512:
191+
decomposeHmacSHA512(decomposition);
181192
break;
182-
// case CryptoHashAlgorithm.sha512:
183-
// addAll(decomposition, "SHA512", "SHA-512", "HmacSHA512");
184-
// break;
185193
case CryptoHashAlgorithm.sm3:
186194
addAll(decomposition, "SM3", "HmacSM3");
187195
break;
@@ -190,6 +198,21 @@ private static void decomposeHashAlgorithm(Set<String> decomposition, int crypto
190198
}
191199
}
192200

201+
private static void decomposeHmacSHA256(Set<String> decomposition)
202+
{
203+
addAll(decomposition, "SHA256", "SHA-256", "HmacSHA256");
204+
}
205+
206+
private static void decomposeHmacSHA384(Set<String> decomposition)
207+
{
208+
addAll(decomposition, "SHA384", "SHA-384", "HmacSHA384");
209+
}
210+
211+
private static void decomposeHmacSHA512(Set<String> decomposition)
212+
{
213+
addAll(decomposition, "SHA512", "SHA-512", "HmacSHA512");
214+
}
215+
193216
private static void decomposeKeyExchangeAlgorithm(Set<String> decomposition, int keyExchangeAlgorithm)
194217
{
195218
switch (keyExchangeAlgorithm)
@@ -263,14 +286,14 @@ private static void decomposeMACAlgorithm(Set<String> decomposition, int cipherT
263286
addAll(decomposition, "SHA1", "SHA-1", "HmacSHA1");
264287
break;
265288
case MACAlgorithm.hmac_sha256:
266-
addAll(decomposition, "SHA256", "SHA-256", "HmacSHA256");
289+
decomposeHmacSHA256(decomposition);
267290
break;
268291
case MACAlgorithm.hmac_sha384:
269-
addAll(decomposition, "SHA384", "SHA-384", "HmacSHA384");
292+
decomposeHmacSHA384(decomposition);
293+
break;
294+
case MACAlgorithm.hmac_sha512:
295+
decomposeHmacSHA512(decomposition);
270296
break;
271-
// case MACAlgorithm.hmac_sha512:
272-
// addAll(decomposition, "SHA512", "SHA-512", "HmacSHA512");
273-
// break;
274297
default:
275298
throw new IllegalArgumentException();
276299
}
@@ -381,6 +404,7 @@ private static int getCryptoHashAlgorithm(int cipherSuite)
381404
case CipherSuite.TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256:
382405
case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256:
383406
case CipherSuite.TLS_RSA_WITH_NULL_SHA256:
407+
case CipherSuite.TLS_SHA256_SHA256:
384408
return CryptoHashAlgorithm.sha256;
385409

386410
case CipherSuite.TLS_AES_256_GCM_SHA384:
@@ -412,6 +436,7 @@ private static int getCryptoHashAlgorithm(int cipherSuite)
412436
case CipherSuite.TLS_RSA_WITH_ARIA_256_CBC_SHA384:
413437
case CipherSuite.TLS_RSA_WITH_ARIA_256_GCM_SHA384:
414438
case CipherSuite.TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384:
439+
case CipherSuite.TLS_SHA384_SHA384:
415440
return CryptoHashAlgorithm.sha384;
416441

417442
case CipherSuite.TLS_SM4_CCM_SM3:
@@ -455,6 +480,8 @@ private static String getTransformation(int encryptionAlgorithm)
455480
case EncryptionAlgorithm.CHACHA20_POLY1305:
456481
return "ChaCha20-Poly1305";
457482
case EncryptionAlgorithm.NULL:
483+
case EncryptionAlgorithm.NULL_HMAC_SHA256:
484+
case EncryptionAlgorithm.NULL_HMAC_SHA384:
458485
return "NULL";
459486
case EncryptionAlgorithm.SM4_CBC:
460487
return "SM4/CBC/NoPadding";

tls/src/main/java/org/bouncycastle/jsse/provider/ProvSSLContextSpi.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,9 @@ private static Map<String, CipherSuiteInfo> createSupportedCipherSuiteMap()
181181
addCipherSuite(cs, "TLS_AES_256_GCM_SHA384", CipherSuite.TLS_AES_256_GCM_SHA384);
182182
addCipherSuite(cs, "TLS_CHACHA20_POLY1305_SHA256", CipherSuite.TLS_CHACHA20_POLY1305_SHA256);
183183

184+
addCipherSuite(cs, "TLS_SHA256_SHA256", CipherSuite.TLS_SHA256_SHA256);
185+
addCipherSuite(cs, "TLS_SHA384_SHA384", CipherSuite.TLS_SHA384_SHA384);
186+
184187
// TLS 1.2-
185188
addCipherSuite(cs, "TLS_DH_anon_WITH_AES_128_CBC_SHA", CipherSuite.TLS_DH_anon_WITH_AES_128_CBC_SHA);
186189
addCipherSuite(cs, "TLS_DH_anon_WITH_AES_128_CBC_SHA256", CipherSuite.TLS_DH_anon_WITH_AES_128_CBC_SHA256);

0 commit comments

Comments
 (0)