commit: 759bad79c455781231dde5f76b56f8a2403f51c6
Author: Filip Kobierski <fkobi <AT> pm <DOT> me>
AuthorDate: Mon Apr 7 20:59:28 2025 +0000
Commit: Florian Schmaus <flow <AT> gentoo <DOT> org>
CommitDate: Sun Aug 31 17:57:16 2025 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=759bad79
net-p2p/biglybt: add 3.8.0.2
Ebuild was changed pretty heavily:
- move broken USE=doc comment to broken USE=test comment
- update DESCRIPTION
- update dev-java/swt dep version (bug 959131)
- add comment about not needing `jdk[-headless-awt]`
- unbundle bcprov to allow JDKs newer than 21 (bug 936549)
- remove contributing files from DOCS
- PATCHES: quote just variables
- adjust comments on JAVA_ variables
- rework src_prepare
- clean development files early
- use loop for copying resources
- use `delete` instead of `-exec rm -rf {} +`
- add `|| die` labels
- use upstream desktop icon (needs seds)
- remove excess `|| die` fom ejavac
- use upstream icons
- remove obsolete `default` from src_install
- fixed optfeature text typos
Bug: https://bugs.gentoo.org/936549
Closes: https://bugs.gentoo.org/959131
Signed-off-by: Filip Kobierski <fkobi <AT> pm.me>
Part-of: https://github.com/gentoo/gentoo/pull/40734
Closes: https://github.com/gentoo/gentoo/pull/40734
Signed-off-by: Florian Schmaus <flow <AT> gentoo.org>
net-p2p/biglybt/Manifest | 1 +
net-p2p/biglybt/biglybt-3.8.0.2.ebuild | 123 ++++++
.../files/biglybt-3.8.0.2-unbundle-bcprov.patch | 491 +++++++++++++++++++++
3 files changed, 615 insertions(+)
diff --git a/net-p2p/biglybt/Manifest b/net-p2p/biglybt/Manifest
index 7405427efb7c..803b796e58b5 100644
--- a/net-p2p/biglybt/Manifest
+++ b/net-p2p/biglybt/Manifest
@@ -1 +1,2 @@
DIST biglybt-3.7.0.0.tar.gz 44021778 BLAKE2B
9ce54062b298d2e47f9fcc88a3fa8da935c7d3c4ad24f28cf2975300b78140b547e3e43c377cae50fd1276d49d53a43bc77e36957133dc6fe1fa7e301ebe80fe
SHA512
815ce2f2b327de266650d9650dcbc539247dca2a8bce727ca0a4fc6eb7dfbcee770ffce04dd3b96aef458df1ee20ce39229f6a3d409725a532d081c82d4504bd
+DIST biglybt-3.8.0.2.tar.gz 46676464 BLAKE2B
d78f07cfc0d71ef29bc17c75c4dc834001ed91f6c4e0ae1e4be80f6a175c55fcba05c802a2739fd4636df3b28c7feda2e127cd99554acca9a8820338cf4eac12
SHA512
3679a153cdaaf861f0e5c3ead1164358435f2031999f2fd14fe6944d162bdd0e88ca253f053c94b4958f5a8550e3a89a923857d09ad022b6c1b9e6d17f089698
diff --git a/net-p2p/biglybt/biglybt-3.8.0.2.ebuild
b/net-p2p/biglybt/biglybt-3.8.0.2.ebuild
new file mode 100644
index 000000000000..8b0429fab13c
--- /dev/null
+++ b/net-p2p/biglybt/biglybt-3.8.0.2.ebuild
@@ -0,0 +1,123 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# for 3.8.0.2 USE=doc produces 2 errors:
+# uis/src/com/biglybt/ui/swt/plugin/net/buddy/swt/BuddyPluginView.java:68:
+#
uis/src/com/biglybt/ui/swt/plugin/net/buddy/swt/BuddyPluginViewChat.java:45:
+# error: package com.biglybt.ui.swt.plugin.net.buddy does not exist
+# no USE=test due to unsupported testing framework #839681
+JAVA_PKG_IUSE="source"
+MAVEN_PROVIDES="com.${PN}:${PN}-core:${PV} com.${PN}:${PN}-ui:${PV}"
+
+inherit desktop java-pkg-2 java-pkg-simple optfeature xdg
+
+DESCRIPTION="Feature-filled Bittorrent client based on Azureus"
+HOMEPAGE="https://www.biglybt.com"
+SRC_URI="https://github.com/BiglySoftware/BiglyBT/archive/v${PV}.tar.gz ->
${P}.tar.gz"
+S="${WORKDIR}/BiglyBT-${PV}"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~ppc64"
+
+CP_DEPEND="
+ >=dev-java/bcprov-1.80:0
+ dev-java/commons-cli:0
+ dev-java/swt:0[cairo]
+"
+
+# Due to removal of AENameServiceDescriptor it would fail to start under
jdk:1.8
+# StartServer ERROR: unable to bind to 127.0.0.1:6880 listening for passed
torrent info: \
+# sun.net.spi.nameservice.NameServiceDescriptor: Provider
com.biglybt.core.util.spi.AENameServiceDescriptor not found
+#
+# NOTE: BiglyBT works with [headless-awt]
+DEPEND="${CP_DEPEND}
+ >=virtual/jdk-11:*"
+RDEPEND="${CP_DEPEND}
+ >=virtual/jre-1.8:*"
+
+DOCS=( README.md ChangeLog.txt )
+
+PATCHES=(
+ "${FILESDIR}"/biglybt-3.2.0.0-disable-SWTUpdateChecker.patch
+ "${FILESDIR}"/biglybt-3.2.0.0-disable-shared-plugins.patch
+ "${FILESDIR}"/biglybt-3.5.0.0-Entities.javadoc.patch
+ "${FILESDIR}"/biglybt-3.6.0.0-disable-PluginUpdatePlugin.patch
+ "${FILESDIR}"/biglybt-3.6.0.0-fix-ambiguous.patch
+ "${FILESDIR}"/biglybt-3.8.0.2-unbundle-bcprov.patch #936549
+)
+
+JAVA_GENTOO_CLASSPATH_EXTRA="target/classes"
+JAVA_JAR_FILENAME="BiglyBT.jar"
+JAVA_MAIN_CLASS="com.${PN}.ui.Main"
+JAVA_RESOURCE_DIRS=( {core,uis}/resources ) # both are needed
+JAVA_SRC_DIR="uis/src" # we compile core manually to avoid bloating the jar
+
+declare -r ASSET_DIR="${S}"/assets/linux
+src_prepare() {
+ default #780585
+ rm -r core/src/org/gudy || die "removing bundled bouncycastle failed"
#936549
+ java-pkg-2_src_prepare
+
+ find -type f -name ".editorconfig" -o -name ".gitignore" -delete \
+ || die "Cleaning distfile artifacts failed"
+
+ # AENameServiceDescriptor fails to compile with jdk >= 11
+ # "error: package sun.net.spi.nameservice does not exist"
+ # https://github.com/BiglySoftware/BiglyBT/pull/2611
+ rm -r core/src/com/biglybt/core/util/spi || die "deleting spi failed"
+
+ # java-pkg-simple.eclass expects resources in a separate directory
+ # REVIEW: instead of copying all and deleting it would be better to
copy selectively
+ local module
+ for module in core uis; do
+ cp -r ${module}/{src,resources} || die "copying source for
resources failed"
+ find ${module}/resources -type f -name "*.java" -delete || die
"deleting java files failed"
+ done
+ rm -r core/resources/META-INF || die "deleting copied META-INF failed"
+
+ # patch the desktop file
+ sed -i \
+ -e '/#!/d' \
+ -e 's|${installer:dir.main}/||' \
+ -e 's|.svg||' \
+ "${ASSET_DIR}"/${PN}.desktop || die "patching desktop file
failed"
+
+ # https://github.com/BiglySoftware/BiglyBT/pull/3523
+ sed -i 's/Application;//g' "${ASSET_DIR}"/${PN}.desktop || die
+}
+
+src_compile() {
+ # build core classes, needed for compiling uis
+ ejavac -d target/classes \
+ -cp "$(java-pkg_getjars commons-cli):$(java-pkg_getjars
swt):$(java-pkg_getjars bcprov)" \
+ $(find core/src -type f -name "*.java")
+
+ java-pkg-simple_src_compile
+
+ # see top comment
+ # use doc && JAVA_SRC_DIR=( {core,uis}/src ) ejavadoc
+}
+
+src_install() {
+ java-pkg-simple_src_install
+
+ doicon -s 256 "${ASSET_DIR}"/${PN}.png
+ doicon -s scalable "${ASSET_DIR}"/${PN}.svg
+ domenu "${ASSET_DIR}"/${PN}.desktop
+
+ if use source; then
+ java-pkg_dosrc "core/src/*"
+ java-pkg_dosrc "uis/src/*"
+ fi
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ optfeature_header "If you are using plugin proxies, you might want to
swap them for these native packages:"
+ optfeature "I2P SOCKS proxy" net-vpn/i2p net-vpn/i2pd
+ optfeature "Tor SOCKS proxy" net-vpn/tor
+}
diff --git a/net-p2p/biglybt/files/biglybt-3.8.0.2-unbundle-bcprov.patch
b/net-p2p/biglybt/files/biglybt-3.8.0.2-unbundle-bcprov.patch
new file mode 100644
index 000000000000..d3359db8aa9c
--- /dev/null
+++ b/net-p2p/biglybt/files/biglybt-3.8.0.2-unbundle-bcprov.patch
@@ -0,0 +1,491 @@
+Description: Use the version of BouncyCastle packaged in Debian
+Author: David Juran <[email protected]>
+Forwarded: no
+
+Gentoo relevant:
+* Bug: https://bugs.gentoo.org/936549
+* PR: https://github.com/gentoo/gentoo/pull/40734#issuecomment-3028397493
+--- a/core/src/com/biglybt/core/security/CryptoECCUtils.java
++++ b/core/src/com/biglybt/core/security/CryptoECCUtils.java
+@@ -24,15 +24,15 @@
+ import java.security.*;
+ import java.security.spec.KeySpec;
+
+-import org.gudy.bouncycastle.jce.ECNamedCurveTable;
+-import org.gudy.bouncycastle.jce.interfaces.ECPrivateKey;
+-import org.gudy.bouncycastle.jce.interfaces.ECPublicKey;
+-import org.gudy.bouncycastle.jce.provider.BouncyCastleProvider;
+-import org.gudy.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
+-import org.gudy.bouncycastle.jce.spec.ECParameterSpec;
+-import org.gudy.bouncycastle.jce.spec.ECPrivateKeySpec;
+-import org.gudy.bouncycastle.jce.spec.ECPublicKeySpec;
+-import org.gudy.bouncycastle.math.ec.ECPoint;
++import org.bouncycastle.jce.ECNamedCurveTable;
++import org.bouncycastle.jce.interfaces.ECPrivateKey;
++import org.bouncycastle.jce.interfaces.ECPublicKey;
++import org.bouncycastle.jce.provider.BouncyCastleProvider;
++import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
++import org.bouncycastle.jce.spec.ECParameterSpec;
++import org.bouncycastle.jce.spec.ECPrivateKeySpec;
++import org.bouncycastle.jce.spec.ECPublicKeySpec;
++import org.bouncycastle.math.ec.ECPoint;
+
+ public class
+ CryptoECCUtils
+--- a/core/src/com/biglybt/core/security/impl/CryptoManagerImpl.java
++++ b/core/src/com/biglybt/core/security/impl/CryptoManagerImpl.java
+@@ -29,9 +29,9 @@
+ import javax.crypto.spec.PBEKeySpec;
+ import javax.crypto.spec.PBEParameterSpec;
+
+-import org.gudy.bouncycastle.crypto.CipherParameters;
+-import org.gudy.bouncycastle.crypto.engines.RC4Engine;
+-import org.gudy.bouncycastle.crypto.params.KeyParameter;
++import org.bouncycastle.crypto.CipherParameters;
++import org.bouncycastle.crypto.engines.RC4Engine;
++import org.bouncycastle.crypto.params.KeyParameter;
+
+ import com.biglybt.core.config.COConfigurationManager;
+ import com.biglybt.core.security.*;
+--- a/core/src/com/biglybt/core/security/impl/CryptoHandlerECC.java
++++ b/core/src/com/biglybt/core/security/impl/CryptoHandlerECC.java
+@@ -27,9 +27,9 @@
+ import javax.crypto.Cipher;
+ import javax.crypto.IllegalBlockSizeException;
+
+-import org.gudy.bouncycastle.jce.provider.JCEIESCipher;
+-import org.gudy.bouncycastle.jce.spec.IEKeySpec;
+-import org.gudy.bouncycastle.jce.spec.IESParameterSpec;
++import org.bouncycastle.jce.provider.BouncyCastleProvider;
++import org.bouncycastle.jce.spec.IEKeySpec;
++import org.bouncycastle.jce.spec.IESParameterSpec;
+
+ import com.biglybt.core.config.COConfigurationManager;
+ import com.biglybt.core.security.*;
+@@ -64,6 +64,7 @@
+ CryptoManagerImpl _manager,
+ int _instance_id )
+ {
++ Security.addProvider(new BouncyCastleProvider());
+ manager = _manager;
+ instance_id = _instance_id;
+
+@@ -227,11 +228,11 @@
+
+ IESParameterSpec param = new IESParameterSpec( d, e,
128);
+
+- InternalECIES cipher = new InternalECIES();
++ Cipher cipher = Cipher.getInstance("ECIES");
+
+- cipher.internalEngineInit( Cipher.ENCRYPT_MODE,
key_spec, param, null );
++ cipher.init( Cipher.ENCRYPT_MODE, key_spec, param, null
);
+
+- byte[] encrypted = cipher.internalEngineDoFinal(data,
0, data.length );
++ byte[] encrypted = cipher.doFinal(data, 0, data.length
);
+
+ byte[] result = new byte[32+encrypted.length];
+
+@@ -271,11 +272,11 @@
+
+ IESParameterSpec param = new IESParameterSpec( d, e,
128);
+
+- InternalECIES cipher = new InternalECIES();
++ Cipher cipher = Cipher.getInstance("ECIES");
+
+- cipher.internalEngineInit( Cipher.DECRYPT_MODE,
key_spec, param, null );
++ cipher.init( Cipher.DECRYPT_MODE, key_spec, param, null
);
+
+- return( cipher.internalEngineDoFinal( data, 32,
data.length - 32 ));
++ return( cipher.doFinal( data, 32, data.length - 32 ));
+
+ }catch( CryptoManagerException e ){
+
+@@ -886,32 +887,4 @@
+ return((int)COConfigurationManager.getIntParameter(
CONFIG_PREFIX + "pwtype", CryptoManagerPasswordHandler.HANDLER_TYPE_USER ));
+ }
+
+- static class InternalECIES
+- extends JCEIESCipher.ECIES
+- {
+- // we use this class to obtain compatibility with BC
+-
+- public void
+- internalEngineInit(
+- int opmode,
+- Key key,
+- AlgorithmParameterSpec params,
+- SecureRandom random )
+-
+- throws InvalidKeyException,
InvalidAlgorithmParameterException
+- {
+- engineInit(opmode, key, params, random);
+- }
+-
+- protected byte[]
+- internalEngineDoFinal(
+- byte[] input,
+- int inputOffset,
+- int inputLen )
+-
+- throws IllegalBlockSizeException, BadPaddingException
+- {
+- return engineDoFinal(input, inputOffset, inputLen);
+- }
+- }
+ }
+--- a/core/src/com/biglybt/core/security/impl/SESecurityManagerBC.java
++++ b/core/src/com/biglybt/core/security/impl/SESecurityManagerBC.java
+@@ -33,9 +33,9 @@
+ import java.security.cert.X509Certificate;
+ import java.util.Calendar;
+
+-import org.gudy.bouncycastle.asn1.x509.X509Name;
+-import org.gudy.bouncycastle.jce.X509V3CertificateGenerator;
+-import org.gudy.bouncycastle.jce.provider.BouncyCastleProvider;
++import org.bouncycastle.asn1.x509.X509Name;
++import org.bouncycastle.x509.X509V3CertificateGenerator;
++import org.bouncycastle.jce.provider.BouncyCastleProvider;
+
+ import com.biglybt.core.util.Constants;
+ import com.biglybt.core.util.Debug;
+@@ -49,7 +49,7 @@
+ initialise()
+ {
+ try{
+- Security.addProvider(new
org.gudy.bouncycastle.jce.provider.BouncyCastleProvider());
++ Security.addProvider(new
org.bouncycastle.jce.provider.BouncyCastleProvider());
+
+ KeyFactory kf = KeyFactory.getInstance( "ECDSA",
BouncyCastleProvider.PROVIDER_NAME );
+
+@@ -59,7 +59,7 @@
+
+ try{
+
+- where =
BouncyCastleProvider.class.getClassLoader().getResource(
"org/gudy/bouncycastle/jce/provider/BouncyCastleProvider.class"
).toExternalForm();
++ where =
BouncyCastleProvider.class.getClassLoader().getResource(
"org/bouncycastle/jce/provider/BouncyCastleProvider.class" ).toExternalForm();
+
+ }catch( Throwable e ){
+
+--- a/core/src/com/biglybt/core/security/impl/CryptoSTSEngineImpl.java
++++ b/core/src/com/biglybt/core/security/impl/CryptoSTSEngineImpl.java
+@@ -22,7 +22,7 @@
+ import java.nio.ByteBuffer;
+ import java.security.*;
+
+-import org.gudy.bouncycastle.jce.provider.JCEECDHKeyAgreement;
++import javax.crypto.KeyAgreement;
+
+ import com.biglybt.core.security.CryptoECCUtils;
+ import com.biglybt.core.security.CryptoManagerException;
+@@ -46,7 +46,7 @@
+ private PublicKey remotePubKey;
+ private byte[] sharedSecret;
+
+- private InternalDH ecDH;
++ private KeyAgreement ecDH;
+
+ /**
+ *
+@@ -65,8 +65,8 @@
+ ephemeralKeyPair = CryptoECCUtils.createKeys();
+
+ try{
+- ecDH = new InternalDH();
+-
++ Security.addProvider(new
org.bouncycastle.jce.provider.BouncyCastleProvider());
++ ecDH = KeyAgreement.getInstance("ECDH");
+ //ecDH = KeyAgreement.getInstance("ECDH",
BouncyCastleProvider.PROVIDER_NAME);
+
+ ecDH.init(ephemeralKeyPair.getPrivate());
+@@ -398,40 +398,4 @@
+ }
+ }
+
+- static class
+- InternalDH
+- extends JCEECDHKeyAgreement.DH
+- {
+- // we use this class to obtain compatibility with BC
+-
+- @Override
+- public void
+- init(
+- Key key )
+-
+- throws InvalidKeyException,
InvalidAlgorithmParameterException
+- {
+- engineInit( key, null );
+- }
+-
+- @Override
+- public Key
+- doPhase(
+- Key key,
+- boolean lastPhase )
+-
+- throws InvalidKeyException, IllegalStateException
+- {
+- return( engineDoPhase( key, lastPhase ));
+- }
+-
+- @Override
+- public byte[]
+- generateSecret()
+-
+- throws IllegalStateException
+- {
+- return( engineGenerateSecret());
+- }
+- }
+-}
+\ No newline at end of file
++}
+--- a/core/src/com/biglybt/core/subs/impl/SubscriptionManagerImpl.java
++++ b/core/src/com/biglybt/core/subs/impl/SubscriptionManagerImpl.java
+@@ -32,7 +32,7 @@
+ import java.util.zip.GZIPOutputStream;
+
+ import com.biglybt.util.MapUtils;
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+
+ import com.biglybt.core.Core;
+ import com.biglybt.core.CoreFactory;
+--- a/core/src/com/biglybt/core/subs/impl/SubscriptionImpl.java
++++ b/core/src/com/biglybt/core/subs/impl/SubscriptionImpl.java
+@@ -28,7 +28,7 @@
+ import java.util.concurrent.atomic.AtomicLong;
+
+ import com.biglybt.util.MapUtils;
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+ import org.json.simple.JSONObject;
+
+ import com.biglybt.core.internat.MessageText;
+--- a/core/src/com/biglybt/core/pairing/impl/PairingManagerTunnelHandler.java
++++ b/core/src/com/biglybt/core/pairing/impl/PairingManagerTunnelHandler.java
+@@ -34,9 +34,9 @@
+ import javax.crypto.spec.IvParameterSpec;
+ import javax.crypto.spec.SecretKeySpec;
+
+-import org.gudy.bouncycastle.crypto.agreement.srp.SRP6Server;
+-import org.gudy.bouncycastle.crypto.agreement.srp.SRP6VerifierGenerator;
+-import org.gudy.bouncycastle.crypto.digests.SHA256Digest;
++import org.bouncycastle.crypto.agreement.srp.SRP6Server;
++import org.bouncycastle.crypto.agreement.srp.SRP6VerifierGenerator;
++import org.bouncycastle.crypto.digests.SHA256Digest;
+ import org.json.simple.JSONObject;
+
+ import com.biglybt.core.Core;
+--- a/core/src/com/biglybt/core/networkmanager/impl/udp/UDPConnectionSet.java
++++ b/core/src/com/biglybt/core/networkmanager/impl/udp/UDPConnectionSet.java
+@@ -26,9 +26,9 @@
+
+ import javax.crypto.spec.SecretKeySpec;
+
+-import org.gudy.bouncycastle.crypto.CipherParameters;
+-import org.gudy.bouncycastle.crypto.engines.RC4Engine;
+-import org.gudy.bouncycastle.crypto.params.KeyParameter;
++import org.bouncycastle.crypto.CipherParameters;
++import org.bouncycastle.crypto.engines.RC4Engine;
++import org.bouncycastle.crypto.params.KeyParameter;
+
+ import com.biglybt.core.logging.LogEvent;
+ import com.biglybt.core.logging.LogIDs;
+--- a/core/src/com/biglybt/core/networkmanager/impl/TransportCipher.java
++++ b/core/src/com/biglybt/core/networkmanager/impl/TransportCipher.java
+@@ -26,9 +26,9 @@
+ import javax.crypto.Cipher;
+ import javax.crypto.spec.SecretKeySpec;
+
+-import org.gudy.bouncycastle.crypto.CipherParameters;
+-import org.gudy.bouncycastle.crypto.engines.RC4Engine;
+-import org.gudy.bouncycastle.crypto.params.KeyParameter;
++import org.bouncycastle.crypto.CipherParameters;
++import org.bouncycastle.crypto.engines.RC4Engine;
++import org.bouncycastle.crypto.params.KeyParameter;
+
+ import com.biglybt.core.util.Debug;
+
+--- a/core/src/com/biglybt/core/dht/control/impl/DHTControlImpl.java
++++ b/core/src/com/biglybt/core/dht/control/impl/DHTControlImpl.java
+@@ -29,9 +29,9 @@
+ import java.util.Map.Entry;
+ import java.util.concurrent.atomic.AtomicBoolean;
+
+-import org.gudy.bouncycastle.crypto.CipherParameters;
+-import org.gudy.bouncycastle.crypto.engines.RC4Engine;
+-import org.gudy.bouncycastle.crypto.params.KeyParameter;
++import org.bouncycastle.crypto.CipherParameters;
++import org.bouncycastle.crypto.engines.RC4Engine;
++import org.bouncycastle.crypto.params.KeyParameter;
+
+ import com.biglybt.core.dht.*;
+ import com.biglybt.core.dht.control.*;
+---
a/core/src/com/biglybt/core/tracker/server/impl/tcp/TRTrackerServerProcessorTCP.java
++++
b/core/src/com/biglybt/core/tracker/server/impl/tcp/TRTrackerServerProcessorTCP.java
+@@ -25,7 +25,7 @@
+ import java.util.*;
+ import java.util.zip.GZIPOutputStream;
+
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+
+ import com.biglybt.core.dht.netcoords.DHTNetworkPosition;
+ import com.biglybt.core.dht.netcoords.DHTNetworkPositionManager;
+--- a/core/src/com/biglybt/core/util/AddressUtils.java
++++ b/core/src/com/biglybt/core/util/AddressUtils.java
+@@ -23,7 +23,7 @@
+ import java.security.MessageDigest;
+ import java.util.*;
+
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+
+ import com.biglybt.core.CoreFactory;
+ import com.biglybt.core.config.COConfigurationManager;
+@@ -786,11 +786,11 @@
+ try{
+ // unfortunately we have an
incompatible base64 standard in i2p, they replaced / with ~ and + with -
+
+- char[] encoded = to_decode.toCharArray();
++ byte[] encoded = to_decode.getBytes();
+
+ for ( int i=0;i<encoded.length;i++){
+
+- char c = encoded[i];
++ byte c = encoded[i];
+
+ if ( c == '~' ){
+ encoded[i] = '/';
+--- a/core/src/com/biglybt/core/util/MD4Hasher.java
++++ b/core/src/com/biglybt/core/util/MD4Hasher.java
+@@ -21,7 +21,7 @@
+
+ import java.security.MessageDigest;
+
+-import org.gudy.bouncycastle.jce.provider.BouncyCastleProvider;
++import org.bouncycastle.jce.provider.BouncyCastleProvider;
+
+
+ public class
+--- a/core/src/com/biglybt/core/util/UrlUtils.java
++++ b/core/src/com/biglybt/core/util/UrlUtils.java
+@@ -25,7 +25,7 @@
+
+ import javax.net.ssl.*;
+
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+
+ import com.biglybt.core.CoreFactory;
+ import com.biglybt.core.config.COConfigurationManager;
+--- a/core/src/com/biglybt/net/magneturi/impl/MagnetURIHandlerImpl.java
++++ b/core/src/com/biglybt/net/magneturi/impl/MagnetURIHandlerImpl.java
+@@ -23,7 +23,7 @@
+ import java.net.*;
+ import java.util.*;
+
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+
+ import com.biglybt.core.CoreFactory;
+ import com.biglybt.core.config.COConfigurationManager;
+--- a/core/src/com/biglybt/util/JSONUtils.java
++++ b/core/src/com/biglybt/util/JSONUtils.java
+@@ -20,7 +20,7 @@
+ import java.io.UnsupportedEncodingException;
+ import java.util.*;
+
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+ import org.json.simple.JSONArray;
+ import org.json.simple.JSONObject;
+ import org.json.simple.JSONValue;
+--- a/core/src/com/biglybt/util/MapUtils.java
++++ b/core/src/com/biglybt/util/MapUtils.java
+@@ -23,7 +23,7 @@
+ import java.util.*;
+
+ import com.biglybt.core.util.UrlUtils;
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+
+ import com.biglybt.core.util.Base32;
+ import com.biglybt.core.util.Constants;
+--- a/uis/src/com/biglybt/ui/console/util/StringEncrypter.java
++++ b/uis/src/com/biglybt/ui/console/util/StringEncrypter.java
+@@ -29,7 +29,7 @@
+ import javax.crypto.spec.DESKeySpec;
+ import javax.crypto.spec.DESedeKeySpec;
+
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+
+ /**
+ * utility class to encrypt strings. this class was taken from the examples
at:
+--- a/uis/src/com/biglybt/ui/swt/auth/AuthenticatorWindow.java
++++ b/uis/src/com/biglybt/ui/swt/auth/AuthenticatorWindow.java
+@@ -36,7 +36,7 @@
+ import org.eclipse.swt.layout.GridData;
+ import org.eclipse.swt.layout.GridLayout;
+ import org.eclipse.swt.widgets.*;
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+
+ import com.biglybt.core.config.COConfigurationManager;
+ import com.biglybt.core.internat.MessageText;
+--- a/uis/src/com/biglybt/ui/swt/browser/listener/TorrentListener.java
++++ b/uis/src/com/biglybt/ui/swt/browser/listener/TorrentListener.java
+@@ -28,7 +28,7 @@
+ import com.biglybt.core.config.COConfigurationManager;
+ import com.biglybt.core.torrent.TOTorrent;
+ import com.biglybt.core.util.*;
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+
+ import com.biglybt.core.messenger.ClientMessageContext;
+ import com.biglybt.core.messenger.ClientMessageContext.torrentURLHandler;
+--- a/core/pom.xml
++++ b/core/pom.xml
+@@ -24,6 +24,11 @@
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ </dependency>
++ <dependency>
++ <groupId>org.bouncycastle</groupId>
++ <artifactId>bcprov</artifactId>
++ <version>debian</version>
++ </dependency>
+ </dependencies>
+
+ <build>
+--- a/core/src/com/biglybt/core/security/impl/SESecurityManagerImpl.java
++++ b/core/src/com/biglybt/core/security/impl/SESecurityManagerImpl.java
+@@ -182,7 +182,7 @@
+ String[] providers =
+ { "com.sun.net.ssl.internal.ssl.Provider",
+ "org.metastatic.jessie.provider.Jessie",
+-
"org.gudy.bouncycastle.jce.provider.BouncyCastleProvider"};
++
"org.bouncycastle.jce.provider.BouncyCastleProvider"};
+
+ String provider = null;
+
+--- a/core/src/com/biglybt/net/udp/uc/impl/PRUDPPacketHandlerSupport.java
++++ b/core/src/com/biglybt/net/udp/uc/impl/PRUDPPacketHandlerSupport.java
+@@ -44,7 +44,7 @@
+ import java.util.Set;
+ import java.util.concurrent.ConcurrentHashMap;
+
+-import org.gudy.bouncycastle.util.encoders.Base64;
++import org.bouncycastle.util.encoders.Base64;
+
+ import com.biglybt.core.config.COConfigurationManager;
+ import com.biglybt.core.config.ParameterListener;
+@@ -2097,4 +2097,4 @@
+ return( buf );
+ }
+ }
+-}
+\ No newline at end of file
++}