forked from I2P_Developers/i2p.i2p
I2CP: Fix issues with persisted leaseset private keys
- Don't generate revocation key for LS2 - Fix generation of persistent revocation key for LS1 - Fix persistent private keys without persistent revocation key - Don't put unconfigured private keys in leaseset - Don't strip i2cp.leaseSetPrivateKey from config before it's used
This commit is contained in:
@ -841,18 +841,33 @@ public class TunnelConfig {
|
||||
_context.random().nextBytes(rk);
|
||||
config.setProperty(p, Base64.encode(rk));
|
||||
}
|
||||
|
||||
// As of 0.9.18, add persistent leaseset keys if not present
|
||||
// but only if we know the sigtype
|
||||
p = OPT + "i2cp.leaseSetSigningPrivateKey";
|
||||
if (_dest != null && !config.containsKey(p)) {
|
||||
try {
|
||||
SigType type = _dest.getSigType();
|
||||
SimpleDataStructure keys[] = KeyGenerator.getInstance().generateSigningKeys(type);
|
||||
config.setProperty(p, type.name() + ':' + keys[1].toBase64());
|
||||
} catch (GeneralSecurityException gse) {
|
||||
// so much for that
|
||||
String senc = config.getProperty(OPT + "i2cp.leaseSetEncType", "0");
|
||||
String slstyp = config.getProperty(OPT + "i2cp.leaseSetType", "0");
|
||||
if (senc.equals("0") && slstyp.equals("0")) {
|
||||
// only for LS1
|
||||
p = OPT + "i2cp.leaseSetSigningPrivateKey";
|
||||
if (!config.containsKey(p)) {
|
||||
SigType type;
|
||||
if (_dest != null) {
|
||||
type = _dest.getSigType();
|
||||
} else {
|
||||
String ssigtyp = config.getProperty(OPT + "i2cp.destination.sigType", "0");
|
||||
type = SigType.parseSigType(ssigtyp);
|
||||
}
|
||||
if (type != null) {
|
||||
try {
|
||||
SimpleDataStructure keys[] = KeyGenerator.getInstance().generateSigningKeys(type);
|
||||
config.setProperty(p, type.name() + ':' + keys[1].toBase64());
|
||||
} catch (GeneralSecurityException gse) {
|
||||
// so much for that
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// persistent LS encryption keys
|
||||
// multiple types as of 0.9.46, add missing ones
|
||||
p = OPT + "i2cp.leaseSetPrivateKey";
|
||||
@ -860,7 +875,6 @@ public class TunnelConfig {
|
||||
// normalize it first to make the code below easier
|
||||
if (skeys != null && skeys.length() > 0 && !skeys.contains(":"))
|
||||
config.setProperty(p, "ELGAMAL_2048:" + skeys);
|
||||
String senc = config.getProperty(OPT + "i2cp.leaseSetEncType", "0");
|
||||
String[] senca = DataHelper.split(senc, ",");
|
||||
// for each configured enc type, generate a key if we don't have it
|
||||
for (int i = 0; i < senca.length; i++) {
|
||||
|
Reference in New Issue
Block a user