| 
									
										
										
										
											2025-10-24 07:02:23 +02:00
										 |  |  | #!/bin/bash
 | 
					
						
							| 
									
										
										
										
											2025-10-25 08:02:34 +02:00
										 |  |  | ## -- 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 | 
					
						
							|  |  |  | ## -------------------------------------------------------------------------- | 
					
						
							| 
									
										
										
										
											2025-10-24 07:02:23 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-25 08:02:34 +02:00
										 |  |  | # 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 ------------------------------------------------------------------- |