#!/bin/bash ## -- FILE ------------------------------------------------------------------ ## name : bordercastle.sh ## project : BoarderZone: BorderCastle ## created : Leon Poyyayil - 2013-08-01 ## language : Linux shell script ## environment: GNU bash ## copyright : (c) 1990-2025 by Leon Poyyayil (private), Switzerland ## license : Bouncy Castle License. see LICENSE ## -------------------------------------------------------------------------- # this script builds the Bouncy Castle JCE provider from scratch with changed # package names to allow for independency of other Bouncy/Spongy Castle users. SCRIPT_DIR="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" MAIN_DIR=$(readlink -f "$SCRIPT_DIR") pushd $MAIN_DIR >/dev/null . bordercastle.conf BC_PKG="r${VERSION_MAJOR}rv${VERSION_MINOR}" BC_DIR="bc-java-${BC_PKG}" BC_URL="https://github.com/bcgit/bc-java/archive/refs/tags/${BC_PKG}.zip" BC_ZIP=bouncycastle/crypto-${BC_VER}.zip PATCH=bouncycastle/crypto-$BC_VER.patch DELIMITER=$'\n==========\n' if [[ "$FORCED" == "true" ]]; then verbose "cleaning up old stuff ..." rm -rf bc* boca* crypto crypto-$BC_VER log/*.done rm -rf private/patch/bouncycastle/* rm -rf private/patch/bordercastle/* fi if [ -f "$BC_ZIP" ]; then verbose "BouncyCastle v. $BC_VER already downloaded" else info "downloading BouncyCastle v. $BC_VER ..." wget -O "$BC_ZIP" "$BC_URL" -nv -o log/bouncycastle-download.log fi if [[ ! -d crypto && ! -d bc-light && ! -d boca-light ]]; then info "extracting original BouncyCastle v. $BC_VER sources ..." unzip -o -b $BC_ZIP 2>&1 > log/crypto-$BC_VER.zip.log mv $BC_DIR crypto chmod -R u+w crypto/* rm -f log/*.done else verbose "BouncyCastle already unpacked" fi if [[ -d crypto && ! -d bc-light && ! -d boca-light ]]; then info "${DELIMITER}converting original BouncyCastle source tree to maven layout ..." bin/bouncycastle-to-maven-layout.sh 2>&1 | tee log/bouncycastle-to-maven-layout.sh.log rm -f log/*.done else verbose "BouncyCastle already converted to maven layout" fi if [[ -d bc-light && ! -d boca-light ]]; then info "${DELIMITER}converting BouncyCastle source tree to BorderCastle packages ..." bin/bouncycastle-to-bordercastle.sh 2>&1 | tee log/bouncycastle-to-bordercastle.sh.log rm -f log/*.done else verbose "BouncyCastle already converted to BorderCastle" fi if [[ ! -d private/patch/bouncycastle/boca-light ]]; then info "${DELIMITER}preparing patch creation ..." mkdir -p private/patch/bouncycastle cp -a boca-* private/patch/bouncycastle/ else verbose "BorderCastle patch already prepared" fi if [[ -f "$PATCH" && ! -f log/crypto-$BC_VER.patch.done ]]; then info "${DELIMITER}applying BorderCastle source code patch ..." patch -p1 < "$PATCH" 2>&1 | tee log/crypto-$BC_VER.patch.log touch log/crypto-$BC_VER.patch.done else verbose "BorderCastle already patched" fi if [[ ! -d private/patch/bordercastle/boca-light ]]; then info "${DELIMITER}updating patch ..." mkdir -p private/patch/bordercastle cp -a boca-* private/patch/bordercastle/ pushd private/patch >/dev/null diff -rupN bouncycastle bordercastle > ../../bouncycastle/crypto-${BC_VER}-new.patch popd >/dev/null info "=> examine new patch: bouncycastle/crypto-${BC_VER}-new.patch" else verbose "BorderCastle patch already updated" fi if [[ ! -f log/bordercastle-compile.done ]]; then info "${DELIMITER}compiling BorderCastle source code with maven ..." LOGFILE=log/bordercastle-compile.sh.log bin/bordercastle-compile.sh 2>&1 | tee "$LOGFILE" SEARCH_QUERY="\[INFO\] BUILD FAILURE" if grep -q "$SEARCH_QUERY" "$LOGFILE"; then echo "${DELIMITER}maven build failed, aborting" exit -1 fi touch log/bordercastle-compile.done else verbose "BorderCastle already compiled" fi if [[ ! -f libs/bordercastle-jce-javadoc.zip ]]; then info "${DELIMITER}generating BorderCastle javadoc ..." bin/bordercastle-javadoc.sh 2>&1 | tee log/bordercastle-javadoc.sh.log else verbose "BorderCastle javadoc already generated" fi if [[ ! -f libs/bordercastle-jce.jar ]]; then info "${DELIMITER}re-packing BorderCastle JCE provider .jar ..." bin/bordercastle-repack.sh 2>&1 | tee log/bordercastle-repack.sh.log else verbose "BorderCastle JCE provider already re-packed" fi if [[ ! -f libs/bordercastle-jce-obfuscated.jar ]]; then info "${DELIMITER}obfuscating BorderCastle JCE provider .jar ..." bin/bordercastle-obfuscate.sh 2>&1 | tee log/bordercastle-obfuscate.sh.log else verbose "BorderCastle JCE provider already obfuscated" fi if [[ ! -f libs/signed/bordercastle-jce-$BC_VER.jar ]]; then info "${DELIMITER}signing BorderCastle libraries .jar ..." bin/bordercastle-sign.sh 2>&1 | tee log/bordercastle-sign.sh.log else verbose "BorderCastle libraries already signed" fi if [[ "$FORCED" == "true" ]]; then info "${DELIMITER}cleaning intermediate build files ..." bin/bordercastle-post-build-cleanup.sh 2>&1 | tee log/bordercastle-post-build-cleanup.sh.log fi popd >/dev/null ## -- EOF -------------------------------------------------------------------