diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java index e5c35bf9551ab0cceb28a01a205210d60aa4c254..e2494e8307017224b8550705c88ee29123b6a4a5 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java @@ -76,6 +76,7 @@ import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_ONLY_WHE import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_PORT; import static org.briarproject.bramble.api.plugin.TorConstants.PROP_ONION_V2; import static org.briarproject.bramble.api.plugin.TorConstants.PROP_ONION_V3; +import static org.briarproject.bramble.plugin.tor.TorRendezvousCrypto.SEED_BYTES; import static org.briarproject.bramble.util.IoUtils.copyAndClose; import static org.briarproject.bramble.util.IoUtils.tryToClose; import static org.briarproject.bramble.util.LogUtils.logException; @@ -613,15 +614,15 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { @Override public RendezvousEndpoint createRendezvousEndpoint(KeyMaterialSource k, boolean alice, ConnectionHandler incoming) { - byte[] aliceSeed = k.getKeyMaterial(32); - byte[] bobSeed = k.getKeyMaterial(32); + byte[] aliceSeed = k.getKeyMaterial(SEED_BYTES); + byte[] bobSeed = k.getKeyMaterial(SEED_BYTES); byte[] localSeed = alice ? aliceSeed : bobSeed; byte[] remoteSeed = alice ? bobSeed : aliceSeed; String blob = torRendezvousCrypto.getPrivateKeyBlob(localSeed); String localOnion = torRendezvousCrypto.getOnionAddress(localSeed); String remoteOnion = torRendezvousCrypto.getOnionAddress(remoteSeed); - TransportProperties remote = new TransportProperties(); - remote.put(PROP_ONION_V3, remoteOnion); + TransportProperties remoteProperties = new TransportProperties(); + remoteProperties.put(PROP_ONION_V3, remoteOnion); try { ServerSocket ss = new ServerSocket(); ss.bind(new InetSocketAddress("127.0.0.1", 0)); @@ -646,7 +647,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { @Override public TransportProperties getRemoteTransportProperties() { - return remote; + return remoteProperties; } @Override diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCrypto.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCrypto.java index a7c2fe9f01e3a8fa62ebbeeb7d18d95e9cf723a0..a5b32630e804701fcca2ca7c58f9a00ebee734cf 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCrypto.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCrypto.java @@ -2,6 +2,8 @@ package org.briarproject.bramble.plugin.tor; interface TorRendezvousCrypto { + static final int SEED_BYTES = 32; + String getOnionAddress(byte[] seed); String getPrivateKeyBlob(byte[] seed); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCryptoImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCryptoImpl.java index aea31d84dc1b9f391424119c906ba0fd1a4c40fb..1545bcfba5c6f67c20eb365b85cf37065081cac4 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCryptoImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorRendezvousCryptoImpl.java @@ -18,6 +18,9 @@ public class TorRendezvousCryptoImpl implements TorRendezvousCrypto { private static final EdDSANamedCurveSpec CURVE_SPEC = EdDSANamedCurveTable.getByName("Ed25519"); + private static final byte HS_PROTOCOL_VERSION = 3; + private static final int CHECKSUM_BYTES = 2; + @Override public String getOnionAddress(byte[] seed) { EdDSAPrivateKeySpec spec = new EdDSAPrivateKeySpec(seed, CURVE_SPEC); @@ -26,13 +29,13 @@ public class TorRendezvousCryptoImpl implements TorRendezvousCrypto { byte[] label = ".onion checksum".getBytes(Charset.forName("US-ASCII")); digest.update(label, 0, label.length); digest.update(publicKey, 0, publicKey.length); - digest.update((byte) 3); + digest.update(HS_PROTOCOL_VERSION); byte[] checksum = new byte[digest.getDigestSize()]; digest.doFinal(checksum, 0); - byte[] address = new byte[publicKey.length + 3]; + byte[] address = new byte[publicKey.length + CHECKSUM_BYTES + 1]; arraycopy(publicKey, 0, address, 0, publicKey.length); - arraycopy(checksum, 0, address, publicKey.length, 2); - address[address.length - 1] = 3; + arraycopy(checksum, 0, address, publicKey.length, CHECKSUM_BYTES); + address[address.length - 1] = HS_PROTOCOL_VERSION; return Base32.encode(address).toLowerCase(); }