[Git][java-team/orchid][master] 10 commits: build: declare the default capability again so that composite builds resolve Orchid
Masayuki Hatta (@mhatta)
gitlab at salsa.debian.org
Fri Nov 6 08:15:42 GMT 2026
Masayuki Hatta pushed to branch master at Debian Java Maintainers / orchid
Commits:
af3f0cba by Masayuki Hatta at 2026-11-06T12:28:26+09:00
build: declare the default capability again so that composite builds resolve Orchid
- - - - -
9b6f1f44 by Masayuki Hatta at 2026-11-06T12:29:21+09:00
Add the notices for third-party code (Bouncy Castle encoders, jnacl Curve25519)
- - - - -
63d26cde by Masayuki Hatta at 2026-11-06T12:33:22+09:00
RELEASING: push master and wait for CI before tagging
- - - - -
cb2c15c6 by Masayuki Hatta at 2026-11-06T12:43:04+09:00
samples/android: run TLS through AndroidSSLSocketFactory (fixes the handshake on API 24)
- - - - -
0cc67af7 by Masayuki Hatta at 2026-11-06T12:51:22+09:00
samples/android: trust the ISRG roots on Android 7.0; log the cause when the request fails
- - - - -
8cbe4c63 by Masayuki Hatta at 2026-11-06T13:43:06+09:00
samples/android: use the platform TLS again (the API 24 failure was the missing ISRG root)
- - - - -
bb292c73 by Masayuki Hatta at 2026-11-06T13:50:31+09:00
Revert "samples/android: use the platform TLS again (the API 24 failure was the missing ISRG root)"
This reverts commit 8cbe4c63db12b91cb31a7f99c8e4a39b0b8c6109.
- - - - -
4673b79c by Masayuki Hatta at 2026-11-06T17:02:34+09:00
New upstream version 2.5.1+ds
- - - - -
c8a14e76 by Masayuki Hatta at 2026-11-06T17:02:35+09:00
Update upstream source from tag 'upstream/2.5.1+ds'
Update to upstream version '2.5.1+ds'
with Debian dir 6d140f630e8205602e9b9660cad5a617568c55bb
- - - - -
28b46139 by Masayuki Hatta at 2026-11-06T17:04:39+09:00
New upstream version 2.5.0+ds
- - - - -
19 changed files:
- .git-archival.txt
- LICENSE
- README.md
- build.gradle
- debian/changelog
- doc/RELEASING.md
- samples/android/app/src/androidTest/java/org/mhatta/orchid/sample/TorConnectionTest.java
- samples/android/app/src/main/AndroidManifest.xml
- samples/android/app/src/main/java/org/mhatta/orchid/sample/TorCheck.java
- + samples/android/app/src/main/res/raw/isrg_root_x1.pem
- + samples/android/app/src/main/res/raw/isrg_root_x2.pem
- + samples/android/app/src/main/res/xml/network_security_config.xml
- src/main/java/com/subgraph/orchid/encoders/Base64.java
- src/main/java/com/subgraph/orchid/encoders/Base64Encoder.java
- src/main/java/com/subgraph/orchid/encoders/DecoderException.java
- src/main/java/com/subgraph/orchid/encoders/Encoder.java
- src/main/java/com/subgraph/orchid/encoders/EncoderException.java
- src/main/java/com/subgraph/orchid/encoders/Hex.java
- src/main/java/com/subgraph/orchid/encoders/HexEncoder.java
Changes:
=====================================
.git-archival.txt
=====================================
@@ -1 +1 @@
-describe: v2.5.0
+describe: v2.5.1
=====================================
LICENSE
=====================================
@@ -23,3 +23,72 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+------------------------------------------------------------------------------
+Third-party code
+------------------------------------------------------------------------------
+
+Orchid includes code from the projects below, which remains under its own
+license.
+
+
+Bouncy Castle
+-------------
+
+Files: src/main/java/com/subgraph/orchid/encoders/*
+
+These files are derived from the org.bouncycastle.util.encoders package of
+the Bouncy Castle Crypto APIs for Java.
+
+Copyright (c) 2000-2013 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+jnacl
+-----
+
+Files: src/main/java/com/subgraph/orchid/crypto/Curve25519.java
+
+This file is derived from jnacl
+(https://github.com/neilalexander/jnacl/blob/master/crypto/curve25519.java).
+
+Copyright (c) 2011, Neil Alexander T.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
=====================================
README.md
=====================================
@@ -159,6 +159,15 @@ is a small app that does all of the following. An app that embeds it should:
* **Keep host names off the device's DNS** with HTTP clients that resolve
names themselves, such as OkHttp: use `torClient.getSocketFactory(key)` and a
DNS hook that returns `OrchidSocketFactory.unresolvedAddress(host)`.
+* **Run TLS through an SSLEngine** for HTTPS over Orchid: give the HTTP client
+ `new AndroidSSLSocketFactory(sslContext)` (for OkHttp, with
+ `sslSocketFactory(factory, trustManager)`). The platform's SSLSocket needs
+ a socket with a file descriptor, which a Tor stream does not have; on older
+ releases such as Android 7.0 the handshake fails with "Socket closed".
+* **Trust the Let's Encrypt roots on Android 7.0** if the app talks to sites
+ with Let's Encrypt certificates: 7.0 (API 24) does not ship ISRG Root X1,
+ so the handshake fails there whether or not Tor is used. The sample adds
+ ISRG Root X1 and X2 with a network security config.
* **Protect the SOCKS port**, if the app opens one: every app on the device
can connect to `127.0.0.1`. Set a random password with
`TorConfig#setSocksPassword()` and give it only to the app's own HTTP client.
=====================================
build.gradle
=====================================
@@ -104,6 +104,9 @@ jar {
// A stable name for applications that use Java modules.
'Automatic-Module-Name': 'com.subgraph.orchid'
}
+ // The jar carries third-party code (see LICENSE), so it carries the
+ // notices too.
+ from('LICENSE') { into 'META-INF' }
}
// The demo programs: "gradle runDemo" runs OrchidDemo, and demoJar packs
@@ -189,6 +192,7 @@ def getReleaseTag() {
return '0.0.0'
}
+group = 'org.mhatta'
version = getReleaseTag().replaceFirst(/^v/, '')
processResources {
@@ -261,6 +265,10 @@ java {
['apiElements', 'runtimeElements'].each { name ->
configurations.named(name) {
outgoing {
+ // Declaring a capability replaces the default one, which
+ // project dependencies and composite builds (includeBuild, as in
+ // samples/android) ask for; declare it again.
+ capability("${project.group}:${project.name}:${project.version}")
capability("org.mhatta:orchid:${project.version}")
capability("org.bitcoinj:orchid:${project.version}")
}
=====================================
debian/changelog
=====================================
@@ -1,5 +1,5 @@
-orchid (2.5.0+ds-1) UNRELEASED; urgency=medium
+orchid (2.5.1+ds-1) unstable; urgency=medium
* Initial release. (Closes: #740364)
- -- Masayuki Hatta <mhatta at debian.org> Thu, 05 Nov 2026 11:50:17 +0900
+ -- Masayuki Hatta <mhatta at debian.org> Fri, 06 Nov 2026 17:03:38 +0900
=====================================
doc/RELEASING.md
=====================================
@@ -33,10 +33,22 @@ version comes from `git describe`, and a build that is not exactly a tag
## Making a release
+Push `master` and let CI pass **before** tagging. The CI and Android
+workflows run only on pushes to `master`, not on tags, so a tag pushed on
+its own is never tested on GitHub (v2.5.0 went out that way).
+
```sh
-# 1. Tag the release (signed) and push it.
+# 0. Push master and wait until both workflows (CI, Android) pass on it.
+git push origin master
+gh run list --branch master --commit "$(git rev-parse HEAD)"
+gh run watch <run id> --exit-status # once for each of the two runs
+# If a run fails, fix it on master and push again; do not tag yet.
+
+# 1. Tag the commit CI tested (signed) and push the tag.
+git fetch origin
+test "$(git rev-parse HEAD)" = "$(git rev-parse origin/master)"
git tag -s v2.4.0 -m "Orchid 2.4.0"
-git push origin master v2.4.0
+git push origin v2.4.0
# 2. Build from the tag, with no local changes, using JDK 21.
git checkout v2.4.0
=====================================
samples/android/app/src/androidTest/java/org/mhatta/orchid/sample/TorConnectionTest.java
=====================================
@@ -55,7 +55,16 @@ public class TorConnectionTest {
done.await(BOOTSTRAP_MINUTES, TimeUnit.MINUTES));
assertNull("Orchid failed to start", failure.get());
- final String answer = TorCheck.fetch(orchid.client());
+ final String answer;
+ try {
+ answer = TorCheck.fetch(orchid.client());
+ } catch (java.io.IOException e) {
+ // The test report keeps only the first line; logcat.txt (the CI
+ // artifact) gets the causes, e.g. "Trust anchor for certification
+ // path not found".
+ Log.e(TorCheck.TAG, "request through Tor failed", e);
+ throw e;
+ }
Log.i(TorCheck.TAG, "check.torproject.org: " + answer);
assertTrue("not through Tor: " + answer, TorCheck.isTor(answer));
}
=====================================
samples/android/app/src/main/AndroidManifest.xml
=====================================
@@ -13,12 +13,16 @@
and later, where allowBackup no longer stops device-to-device
transfers. The data directory itself is under getNoBackupFilesDir(),
which is never backed up.
+
+ networkSecurityConfig adds the Let's Encrypt roots for Android 7.0;
+ see res/xml/network_security_config.xml.
-->
<application
android:label="Orchid sample"
android:allowBackup="false"
android:fullBackupContent="false"
- android:dataExtractionRules="@xml/data_extraction_rules">
+ android:dataExtractionRules="@xml/data_extraction_rules"
+ android:networkSecurityConfig="@xml/network_security_config">
<activity
android:name=".MainActivity"
=====================================
samples/android/app/src/main/java/org/mhatta/orchid/sample/TorCheck.java
=====================================
@@ -2,10 +2,18 @@ package org.mhatta.orchid.sample;
import java.io.IOException;
import java.net.InetAddress;
+import java.security.GeneralSecurityException;
+import java.security.KeyStore;
import java.util.Collections;
import java.util.List;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
+
import com.subgraph.orchid.TorClient;
+import com.subgraph.orchid.sockets.AndroidSSLSocketFactory;
import com.subgraph.orchid.sockets.OrchidSocketFactory;
import okhttp3.Dns;
@@ -33,12 +41,28 @@ final class TorCheck {
* would ask the device's DNS. unresolvedAddress() returns a
* placeholder instead, and the exit relay resolves the name.
*
+ * - sslSocketFactory: TLS runs over the Tor stream through an SSLEngine
+ * (AndroidSSLSocketFactory). The platform's own SSLSocket wraps the
+ * socket's file descriptor, and a socket through Orchid has none: on
+ * older releases (seen on Android 7.0, API 24) the handshake fails
+ * with "SocketException: Socket closed". The device's trusted CAs are
+ * used, and OkHttp still checks the host name.
+ *
* Do not use OkHttp's proxy(new Proxy(SOCKS, ...)) on Android: the
* platform's SOCKS client speaks SOCKS 4 only, without host names.
*/
- static OkHttpClient httpClient(TorClient tor) {
+ static OkHttpClient httpClient(TorClient tor) throws IOException {
+ final X509TrustManager trustManager = platformTrustManager();
+ final SSLContext tls;
+ try {
+ tls = SSLContext.getInstance("TLS");
+ tls.init(null, new TrustManager[] { trustManager }, null);
+ } catch (GeneralSecurityException e) {
+ throw new IOException("cannot set up TLS", e);
+ }
return new OkHttpClient.Builder()
.socketFactory(tor.getSocketFactory("orchid-sample"))
+ .sslSocketFactory(new AndroidSSLSocketFactory(tls), trustManager)
.dns(new Dns() {
public List<InetAddress> lookup(String hostname) {
return Collections.singletonList(OrchidSocketFactory.unresolvedAddress(hostname));
@@ -47,6 +71,23 @@ final class TorCheck {
.build();
}
+ /** The trust manager of the device's trusted CAs. */
+ private static X509TrustManager platformTrustManager() throws IOException {
+ try {
+ final TrustManagerFactory factory =
+ TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+ factory.init((KeyStore) null);
+ for (TrustManager tm : factory.getTrustManagers()) {
+ if (tm instanceof X509TrustManager) {
+ return (X509TrustManager) tm;
+ }
+ }
+ } catch (GeneralSecurityException e) {
+ throw new IOException("cannot load the trusted CAs", e);
+ }
+ throw new IOException("no X509TrustManager on this device");
+ }
+
/** "200 {...}": the status and the body of the answer. */
static String fetch(TorClient tor) throws IOException {
final Request request = new Request.Builder().url(URL).build();
=====================================
samples/android/app/src/main/res/raw/isrg_root_x1.pem
=====================================
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
+TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
+cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
+WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
+ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
+MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
+h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
+0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
+A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
+T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
+B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
+B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
+KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
+OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
+jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
+qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
+rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
+hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
+ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
+3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
+NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
+ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
+TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
+jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
+oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
+4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
+mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
+emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
+-----END CERTIFICATE-----
=====================================
samples/android/app/src/main/res/raw/isrg_root_x2.pem
=====================================
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw
+CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg
+R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00
+MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT
+ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw
+EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW
++1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9
+ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI
+zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW
+tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1
+/q4AaOeMSQ+2b1tbFfLn
+-----END CERTIFICATE-----
=====================================
samples/android/app/src/main/res/xml/network_security_config.xml
=====================================
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Android 7.0 (API 24) does not ship ISRG Root X1, the root of Let's Encrypt
+ (it came with Android 7.1.1), and Let's Encrypt no longer serves the chain
+ cross-signed by DST Root CA X3. So on 7.0 no Let's Encrypt site, such as
+ check.torproject.org, can be verified with the system CAs alone. Trust the
+ two ISRG roots in addition to the system CAs; user-installed CAs stay
+ untrusted.
+
+ ISRG Root X1 SHA-256 96:BC:EC:06:26:49:76:F3:74:60:77:9A:CF:28:C5:A7:CF:E8:A3:C0:AA:E1:1A:8F:FC:EE:05:C0:BD:DF:08:C6
+ ISRG Root X2 SHA-256 69:72:9B:8E:15:A8:6E:FC:17:7A:57:AF:B7:17:1D:FC:64:AD:D2:8C:2F:CA:8C:F1:50:7E:34:45:3C:CB:14:70
+-->
+<network-security-config>
+ <base-config cleartextTrafficPermitted="false">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="@raw/isrg_root_x1" />
+ <certificates src="@raw/isrg_root_x2" />
+ </trust-anchors>
+ </base-config>
+</network-security-config>
=====================================
src/main/java/com/subgraph/orchid/encoders/Base64.java
=====================================
@@ -1,3 +1,13 @@
+/*
+ * Derived from the Bouncy Castle Crypto APIs for Java
+ * (org.bouncycastle.util.encoders), imported into Orchid in 2013.
+ *
+ * Copyright (c) 2000-2013 The Legion Of The Bouncy Castle
+ * (http://www.bouncycastle.org)
+ *
+ * Licensed under the MIT license. The full text is in the "Bouncy Castle"
+ * section of the LICENSE file at the top of the source tree.
+ */
package com.subgraph.orchid.encoders;
import java.io.ByteArrayOutputStream;
=====================================
src/main/java/com/subgraph/orchid/encoders/Base64Encoder.java
=====================================
@@ -1,3 +1,13 @@
+/*
+ * Derived from the Bouncy Castle Crypto APIs for Java
+ * (org.bouncycastle.util.encoders), imported into Orchid in 2013.
+ *
+ * Copyright (c) 2000-2013 The Legion Of The Bouncy Castle
+ * (http://www.bouncycastle.org)
+ *
+ * Licensed under the MIT license. The full text is in the "Bouncy Castle"
+ * section of the LICENSE file at the top of the source tree.
+ */
package com.subgraph.orchid.encoders;
import java.io.IOException;
=====================================
src/main/java/com/subgraph/orchid/encoders/DecoderException.java
=====================================
@@ -1,3 +1,13 @@
+/*
+ * Derived from the Bouncy Castle Crypto APIs for Java
+ * (org.bouncycastle.util.encoders), imported into Orchid in 2013.
+ *
+ * Copyright (c) 2000-2013 The Legion Of The Bouncy Castle
+ * (http://www.bouncycastle.org)
+ *
+ * Licensed under the MIT license. The full text is in the "Bouncy Castle"
+ * section of the LICENSE file at the top of the source tree.
+ */
package com.subgraph.orchid.encoders;
public class DecoderException
=====================================
src/main/java/com/subgraph/orchid/encoders/Encoder.java
=====================================
@@ -1,3 +1,13 @@
+/*
+ * Derived from the Bouncy Castle Crypto APIs for Java
+ * (org.bouncycastle.util.encoders), imported into Orchid in 2013.
+ *
+ * Copyright (c) 2000-2013 The Legion Of The Bouncy Castle
+ * (http://www.bouncycastle.org)
+ *
+ * Licensed under the MIT license. The full text is in the "Bouncy Castle"
+ * section of the LICENSE file at the top of the source tree.
+ */
package com.subgraph.orchid.encoders;
import java.io.IOException;
=====================================
src/main/java/com/subgraph/orchid/encoders/EncoderException.java
=====================================
@@ -1,3 +1,13 @@
+/*
+ * Derived from the Bouncy Castle Crypto APIs for Java
+ * (org.bouncycastle.util.encoders), imported into Orchid in 2013.
+ *
+ * Copyright (c) 2000-2013 The Legion Of The Bouncy Castle
+ * (http://www.bouncycastle.org)
+ *
+ * Licensed under the MIT license. The full text is in the "Bouncy Castle"
+ * section of the LICENSE file at the top of the source tree.
+ */
package com.subgraph.orchid.encoders;
public class EncoderException
=====================================
src/main/java/com/subgraph/orchid/encoders/Hex.java
=====================================
@@ -1,3 +1,13 @@
+/*
+ * Derived from the Bouncy Castle Crypto APIs for Java
+ * (org.bouncycastle.util.encoders), imported into Orchid in 2013.
+ *
+ * Copyright (c) 2000-2013 The Legion Of The Bouncy Castle
+ * (http://www.bouncycastle.org)
+ *
+ * Licensed under the MIT license. The full text is in the "Bouncy Castle"
+ * section of the LICENSE file at the top of the source tree.
+ */
package com.subgraph.orchid.encoders;
import java.io.ByteArrayOutputStream;
=====================================
src/main/java/com/subgraph/orchid/encoders/HexEncoder.java
=====================================
@@ -1,3 +1,13 @@
+/*
+ * Derived from the Bouncy Castle Crypto APIs for Java
+ * (org.bouncycastle.util.encoders), imported into Orchid in 2013.
+ *
+ * Copyright (c) 2000-2013 The Legion Of The Bouncy Castle
+ * (http://www.bouncycastle.org)
+ *
+ * Licensed under the MIT license. The full text is in the "Bouncy Castle"
+ * section of the LICENSE file at the top of the source tree.
+ */
package com.subgraph.orchid.encoders;
import java.io.IOException;
View it on GitLab: https://salsa.debian.org/java-team/orchid/-/compare/23a150f0f2b5bb14e4aa46fe900865f8ebfd02c8...28b46139ab7644cdc92e2e5e8cb2e3bbac28ba73
--
View it on GitLab: https://salsa.debian.org/java-team/orchid/-/compare/23a150f0f2b5bb14e4aa46fe900865f8ebfd02c8...28b46139ab7644cdc92e2e5e8cb2e3bbac28ba73
You're receiving this email because of your account on salsa.debian.org. Manage all notifications: https://salsa.debian.org/-/profile/notifications | Help: https://salsa.debian.org/help
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20261106/0f62eb47/attachment.htm>
More information about the pkg-java-commits
mailing list