diff --git a/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java b/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java index 5692b6df2ee4e2fcd13f27b6e05403f0664b894b..4448122d01d37036e301593c0f91e6be0da284fa 100644 --- a/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java +++ b/core/java/src/net/i2p/client/impl/I2CPMessageProducer.java @@ -9,6 +9,7 @@ package net.i2p.client.impl; * */ +import java.util.List; import java.util.Properties; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -363,15 +364,20 @@ class I2CPMessageProducer { * */ public void createLeaseSet(I2PSessionImpl session, LeaseSet leaseSet, SigningPrivateKey signingPriv, - PrivateKey priv) throws I2PSessionException { + List<PrivateKey> privs) throws I2PSessionException { CreateLeaseSetMessage msg; int type = leaseSet.getType(); - if (type == DatabaseEntry.KEY_TYPE_LEASESET) + if (type == DatabaseEntry.KEY_TYPE_LEASESET) { msg = new CreateLeaseSetMessage(); - else - msg = new CreateLeaseSet2Message(); + msg.setPrivateKey(privs.get(0)); + } else { + CreateLeaseSet2Message msg2 = new CreateLeaseSet2Message(); + for (PrivateKey priv : privs) { + msg2.addPrivateKey(priv); + } + msg = msg2; + } msg.setLeaseSet(leaseSet); - msg.setPrivateKey(priv); msg.setSigningPrivateKey(signingPriv); SessionId sid = session.getSessionId(); if (sid == null) { diff --git a/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java b/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java index 9755d7f314595ba44502fbae8a5cbb0acbbee369..f0b9d9e3bc0bbf37f0697e7160d7951df8b0f634 100644 --- a/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java +++ b/core/java/src/net/i2p/client/impl/RequestLeaseSetMessageHandler.java @@ -315,7 +315,7 @@ class RequestLeaseSetMessageHandler extends HandlerImpl { _context.random().nextBytes(dummy); spk = new SigningPrivateKey(dummy); } - session.getProducer().createLeaseSet(session, leaseSet, spk, li.getPrivateKey()); + session.getProducer().createLeaseSet(session, leaseSet, spk, li.getPrivateKeys()); session.setLeaseSet(leaseSet); if (_log.shouldDebug()) _log.debug("Created and signed LeaseSet: " + leaseSet); diff --git a/core/java/src/net/i2p/data/i2cp/CreateLeaseSet2Message.java b/core/java/src/net/i2p/data/i2cp/CreateLeaseSet2Message.java index ae1fb0be9cbacc0abb2c3f8563cc744f2f7ae27f..0149b06bc1d21903f3b1aa7935f6b64a904dc199 100644 --- a/core/java/src/net/i2p/data/i2cp/CreateLeaseSet2Message.java +++ b/core/java/src/net/i2p/data/i2cp/CreateLeaseSet2Message.java @@ -138,8 +138,9 @@ public class CreateLeaseSet2Message extends CreateLeaseSetMessage { @Override protected byte[] doWriteMessage() throws I2CPMessageException, IOException { + int type = _leaseSet.getType(); if (_sessionId == null || _leaseSet == null || - (_leaseSet.getType() != DatabaseEntry.KEY_TYPE_META_LS2 && (_signingPrivateKey == null || _privateKey == null))) + (type != DatabaseEntry.KEY_TYPE_META_LS2 && (_signingPrivateKey == null || _privateKey == null))) throw new I2CPMessageException("Unable to write out the message as there is not enough data"); int size = 4 // sessionId + 1 // type @@ -151,9 +152,11 @@ public class CreateLeaseSet2Message extends CreateLeaseSetMessage { _sessionId.writeBytes(os); os.write(_leaseSet.getType()); _leaseSet.writeBytes(os); - if (_leaseSet.getType() != DatabaseEntry.KEY_TYPE_META_LS2) { + if (type != DatabaseEntry.KEY_TYPE_META_LS2) { _signingPrivateKey.writeBytes(os); - _privateKey.writeBytes(os); + for (PrivateKey pk : getPrivateKeys()) { + pk.writeBytes(os); + } } } catch (DataFormatException dfe) { throw new I2CPMessageException("Error writing out the message data", dfe);