forked from I2P_Developers/i2p.i2p
I2CP: Fixes for CreateLeaseset2 message with multiple keys
This commit is contained in:
@@ -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) {
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user