From d3bd2ce1907cc30fb41f42fb877eea85636fe53e Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Wed, 12 Feb 2020 17:04:07 +0000 Subject: [PATCH] I2PTunnel, I2CP: Place ECIES first in LS2 Data: Add debug code to ignore LS2 key order --- apps/i2ptunnel/jsp/editClient.jsi | 2 +- apps/i2ptunnel/jsp/editServer.jsi | 2 +- .../impl/RequestLeaseSetMessageHandler.java | 4 ++- core/java/src/net/i2p/data/LeaseSet2.java | 25 ++++++++++++++++--- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/apps/i2ptunnel/jsp/editClient.jsi b/apps/i2ptunnel/jsp/editClient.jsi index 63825aa675..5d12f73601 100644 --- a/apps/i2ptunnel/jsp/editClient.jsi +++ b/apps/i2ptunnel/jsp/editClient.jsi @@ -548,7 +548,7 @@ ECIES-X25519 (<%=intl._t("Experts only!")%>)</label> </span> <span class="multiOption"> - <label><input value="0,4" type="radio" id="startOnLoad" name="encType" <%=((has0 && has4) ? " checked=\"checked\"" : "")%> class="tickbox" /> + <label><input value="4,0" type="radio" id="startOnLoad" name="encType" <%=((has0 && has4) ? " checked=\"checked\"" : "")%> class="tickbox" /> <%=intl._t("Both encryption types")%> (<%=intl._t("Experts only!")%>)</label> </span> </td> diff --git a/apps/i2ptunnel/jsp/editServer.jsi b/apps/i2ptunnel/jsp/editServer.jsi index 02fe950c5c..b29d378fd4 100644 --- a/apps/i2ptunnel/jsp/editServer.jsi +++ b/apps/i2ptunnel/jsp/editServer.jsi @@ -857,7 +857,7 @@ ECIES-X25519 (<%=intl._t("Experts only!")%>)</label> </span> <span class="multiOption"> - <label><input value="0,4" type="radio" id="startOnLoad" name="encType" <%=((has0 && has4) ? " checked=\"checked\"" : "")%> class="tickbox" /> + <label><input value="4,0" type="radio" id="startOnLoad" name="encType" <%=((has0 && has4) ? " checked=\"checked\"" : "")%> class="tickbox" /> <%=intl._t("Both encryption types")%> (<%=intl._t("Experts only!")%>)</label> </span> </td> diff --git a/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java b/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java index 03279cba23..3f673b34f6 100644 --- a/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java +++ b/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java @@ -73,7 +73,7 @@ class RequestLeaseSetMessageHandler extends HandlerImpl { private static final String PROP_DH = "i2cp.leaseSetClient.dh."; private static final String PROP_PSK = "i2cp.leaseSetClient.psk."; - private static final boolean PREFER_NEW_ENC = false; + private static final boolean PREFER_NEW_ENC = true; public RequestLeaseSetMessageHandler(I2PAppContext context) { this(context, RequestLeaseSetMessage.MESSAGE_TYPE); @@ -243,6 +243,8 @@ class RequestLeaseSetMessageHandler extends HandlerImpl { if (senc != null) { if (!PREFER_NEW_ENC && senc.equals("4,0")) senc = "0,4"; + else if (PREFER_NEW_ENC && senc.equals("0,4")) + senc = "4,0"; String[] senca = DataHelper.split(senc, ","); for (String sencaa : senca) { EncType newtype = EncType.parseEncType(sencaa); diff --git a/core/java/src/net/i2p/data/LeaseSet2.java b/core/java/src/net/i2p/data/LeaseSet2.java index 3c290c080f..3df166c0f0 100644 --- a/core/java/src/net/i2p/data/LeaseSet2.java +++ b/core/java/src/net/i2p/data/LeaseSet2.java @@ -44,6 +44,9 @@ public class LeaseSet2 extends LeaseSet { // If this leaseset was formerly blinded, the blinded hash, so we can find it again private Hash _blindedHash; + // true for testing + private static final boolean IGNORE_SERVER_KEY_PREFERENCE = false; + private static final int FLAG_OFFLINE_KEYS = 0x01; private static final int FLAG_UNPUBLISHED = 0x02; /** @@ -150,9 +153,25 @@ public class LeaseSet2 extends LeaseSet { */ @Override public PublicKey getEncryptionKey(Set<EncType> supported) { - for (PublicKey pk : getEncryptionKeys()) { - if (supported.contains(pk.getType())) - return pk; + List<PublicKey> keys = getEncryptionKeys(); + if (keys == null) + return null; + if (!IGNORE_SERVER_KEY_PREFERENCE || supported.size() <= 1 || keys.size() <= 1) { + // Honor order in LS + for (PublicKey pk : keys) { + if (supported.contains(pk.getType())) + return pk; + } + } else { + // Our preference, newest enc type first + List<EncType> types = new ArrayList<EncType>(supported); + Collections.sort(types, Collections.reverseOrder()); + for (EncType type : types) { + for (PublicKey pk : keys) { + if (type == pk.getType()) + return pk; + } + } } return null; } -- GitLab