From e5c9f55f8b52d7a15d3b37db9beb076fb2f1c121 Mon Sep 17 00:00:00 2001 From: Fabio Di Fabio Date: Thu, 12 Oct 2023 12:43:41 +0200 Subject: [PATCH] Force the use of jdk18 version of Bouncy Castle library (#5748) This avoid that any dependency can include the jdk15 version in the distribution. Signed-off-by: Fabio Di Fabio --- build.gradle | 39 ++++++++++++++++++- .../ethereum/p2p/rlpx/framing/Framer.java | 18 ++++++++- gradle/verification-metadata.xml | 24 ++++++++++++ gradle/versions.gradle | 2 +- 4 files changed, 80 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 8ce41eb46f..a1950eb65d 100644 --- a/build.gradle +++ b/build.gradle @@ -14,6 +14,7 @@ */ +import groovy.transform.CompileStatic import groovy.transform.Memoized import net.ltgt.gradle.errorprone.CheckSeverity @@ -147,7 +148,20 @@ allprojects { } } - dependencies { errorprone 'com.google.errorprone:error_prone_core' } + dependencies { + components.all(BouncyCastleCapability) + errorprone 'com.google.errorprone:error_prone_core' + } + + configurations.all { + resolutionStrategy.capabilitiesResolution.withCapability('org.bouncycastle:bcprov-jdk18on') { + selectHighestVersion() + } + resolutionStrategy.capabilitiesResolution.withCapability('org.bouncycastle:bcpkix-jdk18on') { + selectHighestVersion() + } + } + apply plugin: 'com.diffplug.spotless' spotless { @@ -1044,6 +1058,29 @@ dependencies { errorprone 'com.google.errorprone:error_prone_core' } +@CompileStatic +class BouncyCastleCapability implements ComponentMetadataRule { + void execute(ComponentMetadataContext context) { + context.details.with { + if (id.group == "org.bouncycastle") { + if(id.name == "bcprov-jdk15on") { + allVariants { + it.withCapabilities { + it.addCapability("org.bouncycastle", "bcprov-jdk18on", "0") + } + } + } else if(id.name == "bcpkix-jdk15on") { + allVariants { + it.withCapabilities { + it.addCapability("org.bouncycastle", "bcpkix-jdk18on", "0") + } + } + } + } + } + } +} + distributions { main { contents { diff --git a/ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/rlpx/framing/Framer.java b/ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/rlpx/framing/Framer.java index 2e9cad6dfe..1302b3765d 100644 --- a/ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/rlpx/framing/Framer.java +++ b/ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/rlpx/framing/Framer.java @@ -16,7 +16,6 @@ package org.hyperledger.besu.ethereum.p2p.rlpx.framing; import static io.netty.buffer.ByteBufUtil.hexDump; import static io.netty.buffer.Unpooled.wrappedBuffer; -import static org.bouncycastle.pqc.math.linearalgebra.ByteUtils.xor; import static org.hyperledger.besu.ethereum.p2p.rlpx.RlpxFrameConstants.LENGTH_FRAME_SIZE; import static org.hyperledger.besu.ethereum.p2p.rlpx.RlpxFrameConstants.LENGTH_MAX_MESSAGE_FRAME; @@ -396,6 +395,23 @@ public class Framer { return pad == 0 ? 0 : 16 - pad; } + /** + * Compute the bitwise XOR of two arrays of bytes. The arrays have to be of same length. No length + * checking is performed. + * + * @param x1 the first array + * @param x2 the second array + * @return x1 XOR x2 + */ + private static byte[] xor(final byte[] x1, final byte[] x2) { + byte[] out = new byte[x1.length]; + + for (int i = x1.length - 1; i >= 0; i--) { + out[i] = (byte) (x1[i] ^ x2[i]); + } + return out; + } + @FormatMethod private static FramingException error(final String s, final Object... params) { return new FramingException(String.format(s, params)); diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index bf2f064afa..39a5dccc21 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -3481,6 +3481,14 @@ + + + + + + + + @@ -3505,6 +3513,14 @@ + + + + + + + + @@ -3513,6 +3529,14 @@ + + + + + + + + diff --git a/gradle/versions.gradle b/gradle/versions.gradle index 1548ca5bae..af5d4fc47c 100644 --- a/gradle/versions.gradle +++ b/gradle/versions.gradle @@ -151,7 +151,7 @@ dependencyManagement { dependency 'org.awaitility:awaitility:4.2.0' - dependencySet(group: 'org.bouncycastle', version: '1.75') { + dependencySet(group: 'org.bouncycastle', version: '1.76') { entry'bcpkix-jdk18on' entry'bcprov-jdk18on' }