I2PTunnel, I2CP: Place ECIES first in LS2

Data: Add debug code to ignore LS2 key order
This commit is contained in:
zzz
2020-02-12 17:04:07 +00:00
parent e82f420ee6
commit d3bd2ce190
4 changed files with 27 additions and 6 deletions

View File

@ -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);

View File

@ -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;
}