Improved benchmark script which installs newest version of BC via wget or curl

pull/105/head
Jack Tjaden 2025-03-07 16:45:28 -07:00
parent 6bc01e50e2
commit 02449c7f07
1 changed files with 62 additions and 42 deletions

View File

@ -3,37 +3,60 @@
# Flag to track if we downloaded BC during this session # Flag to track if we downloaded BC during this session
BC_DOWNLOADED=false BC_DOWNLOADED=false
# Function to download Bouncy Castle JARs # Function to get the latest Bouncy Castle version from Maven Central
download_bc_jars() { get_latest_version() {
local bc_version="1.79" local metadata_url="https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk18on/maven-metadata.xml"
local lib_dir="../../../lib" if command -v curl >/dev/null; then
local bc_url="https://downloads.bouncycastle.org/java" curl -s "$metadata_url" | grep '<latest>' | sed -e 's/.*<latest>\(.*\)<\/latest>.*/\1/'
elif command -v wget >/dev/null; then
echo -n "Downloading Bouncy Castle JARs... " wget -q -O - "$metadata_url" | grep '<latest>' | sed -e 's/.*<latest>\(.*\)<\/latest>.*/\1/'
# Create lib directory if it doesn't exist
mkdir -p "$lib_dir" 2>/dev/null
# Download both required JARs
if command -v wget >/dev/null; then
wget -q -P "$lib_dir" "$bc_url/bcprov-jdk18on-$bc_version.jar" 2>/dev/null &&
wget -q -P "$lib_dir" "$bc_url/bctls-jdk18on-$bc_version.jar" 2>/dev/null || return 1
elif command -v curl >/dev/null; then
curl -s -L -o "$lib_dir/bcprov-jdk18on-$bc_version.jar" "$bc_url/bcprov-jdk18on-$bc_version.jar" 2>/dev/null &&
curl -s -L -o "$lib_dir/bctls-jdk18on-$bc_version.jar" "$bc_url/bctls-jdk18on-$bc_version.jar" 2>/dev/null || return 1
else else
echo "failed" echo "Error: Neither curl nor wget is installed. Please install one to fetch the latest version."
echo "Error: Neither wget nor curl is available. Please install either wget or curl." exit 1
fi
}
# Function to download Bouncy Castle JARs with the latest version
download_bc_jars() {
local bc_version=$(get_latest_version)
local lib_dir="../../../lib"
local bc_url="https://repo1.maven.org/maven2/org/bouncycastle"
if [ -z "$bc_version" ]; then
echo "failed (could not determine latest version)"
return 1
fi
echo -n "Downloading Bouncy Castle JARs (version $bc_version)... "
mkdir -p "$lib_dir" || {
echo "failed (cannot create $lib_dir)"
return 1
}
if command -v wget >/dev/null; then
wget -P "$lib_dir" "$bc_url/bcprov-jdk18on/$bc_version/bcprov-jdk18on-$bc_version.jar" &&
wget -P "$lib_dir" "$bc_url/bctls-jdk18on/$bc_version/bctls-jdk18on-$bc_version.jar" || {
echo "failed (wget error: check URL or network)"
return 1
}
elif command -v curl >/dev/null; then
curl -L -o "$lib_dir/bcprov-jdk18on-$bc_version.jar" "$bc_url/bcprov-jdk18on/$bc_version/bcprov-jdk18on-$bc_version.jar" &&
curl -L -o "$lib_dir/bctls-jdk18on-$bc_version.jar" "$bc_url/bctls-jdk18on/$bc_version/bctls-jdk18on-$bc_version.jar" || {
echo "failed (curl error: check URL or network)"
return 1
}
else
echo "failed (neither wget nor curl installed)"
echo "Please install wget or curl."
return 1 return 1
fi fi
# Verify downloads were successful
if [ -f "$lib_dir/bcprov-jdk18on-$bc_version.jar" ] && [ -f "$lib_dir/bctls-jdk18on-$bc_version.jar" ]; then if [ -f "$lib_dir/bcprov-jdk18on-$bc_version.jar" ] && [ -f "$lib_dir/bctls-jdk18on-$bc_version.jar" ]; then
echo "done" echo "done"
BC_DOWNLOADED=true BC_DOWNLOADED=true
return 0 return 0
else else
echo "failed" echo "failed (downloaded files not found)"
return 1 return 1
fi fi
} }
@ -42,33 +65,32 @@ download_bc_jars() {
cleanup_bc_jars() { cleanup_bc_jars() {
local lib_dir="../../../lib" local lib_dir="../../../lib"
echo -n "Removing Bouncy Castle JARs... " echo -n "Removing Bouncy Castle JARs... "
rm -f "$lib_dir/bcprov-jdk18on-1.79.jar" "$lib_dir/bctls-jdk18on-1.79.jar" 2>/dev/null rm -f "$lib_dir/bcprov-jdk18on-"*".jar" "$lib_dir/bctls-jdk18on-"*".jar" && echo "done" || echo "failed"
if [ $? -eq 0 ]; then
echo "done"
return 0
else
echo "failed"
return 1
fi
} }
cd ./examples/build/provider cd ./examples/build/provider || {
echo "Error: Cannot change to ./examples/build/provider"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../../lib/:/usr/local/lib exit 1
}
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../../../lib:/usr/local/lib
CLASSPATH="../../../lib/wolfcrypt-jni.jar:." CLASSPATH="../../../lib/wolfcrypt-jni.jar:."
if [ -f "../../../lib/bcprov-jdk18on-1.79.jar" ] && [ -f "../../../lib/bctls-jdk18on-1.79.jar" ]; then # Check for existing Bouncy Castle JARs (any version)
echo "Running crypto benchmark with Bouncy Castle" if ls "../../../lib/bcprov-jdk18on-"*".jar" "../../../lib/bctls-jdk18on-"*".jar" 2>/dev/null; then
CLASSPATH="$CLASSPATH:../../../lib/bcprov-jdk18on-1.79.jar:../../../lib/bctls-jdk18on-1.79.jar" latest_bc_jar=$(ls -t "../../../lib/bcprov-jdk18on-"*".jar" | head -n 1)
bc_version=$(basename "$latest_bc_jar" | sed -e 's/bcprov-jdk18on-//' -e 's/.jar$//')
echo "Running crypto benchmark with Bouncy Castle (version $bc_version)"
CLASSPATH="$CLASSPATH:$latest_bc_jar:../../../lib/bctls-jdk18on-$bc_version.jar"
else else
echo "Bouncy Castle JARs not found in lib directory" echo "Bouncy Castle JARs not found in lib directory"
read -p "Would you like to download Bouncy Castle JARs? (y/n) " -n 1 -r read -p "Would you like to download Bouncy Castle JARs? (y/n) " -n 1 -r
echo echo
if [[ $REPLY =~ ^[Yy]$ ]]; then if [[ $REPLY =~ ^[Yy]$ ]]; then
if download_bc_jars; then if download_bc_jars; then
echo "Running crypto benchmark with Bouncy Castle" bc_version=$(get_latest_version)
CLASSPATH="$CLASSPATH:../../../lib/bcprov-jdk18on-1.79.jar:../../../lib/bctls-jdk18on-1.79.jar" echo "Running crypto benchmark with Bouncy Castle (version $bc_version)"
CLASSPATH="$CLASSPATH:../../../lib/bcprov-jdk18on-$bc_version.jar:../../../lib/bctls-jdk18on-$bc_version.jar"
else else
echo "Running crypto benchmark without Bouncy Castle due to download failure" echo "Running crypto benchmark without Bouncy Castle due to download failure"
fi fi
@ -77,11 +99,9 @@ else
fi fi
fi fi
# Run the benchmark java -XX:-TieredCompilation -XX:ReservedCodeCacheSize=1024m -classpath "$CLASSPATH" -Dsun.boot.library.path=../../../lib/ CryptoBenchmark "$@"
java -XX:-TieredCompilation -XX:ReservedCodeCacheSize=1024m -classpath $CLASSPATH -Dsun.boot.library.path=../../../lib/ CryptoBenchmark $@
# Always prompt for cleanup after benchmark completion if Bouncy Castle files exist if ls "../../../lib/bcprov-jdk18on-"*".jar" "../../../lib/bctls-jdk18on-"*".jar" 2>/dev/null; then
if [ -f "../../../lib/bcprov-jdk18on-1.79.jar" ] && [ -f "../../../lib/bctls-jdk18on-1.79.jar" ]; then
echo echo
read -p "Would you like to remove the Bouncy Castle JARs? (y/n) " -n 1 -r read -p "Would you like to remove the Bouncy Castle JARs? (y/n) " -n 1 -r
echo echo