diff --git a/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java b/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java index 930078ba0..06b4727ab 100644 --- a/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java +++ b/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java @@ -198,9 +198,14 @@ public class DHSessionKeyBuilder { /** * Specify the value given by the peer for use in the session key negotiation - * + * @throws IllegalStateException if already set */ - public void setPeerPublicValue(BigInteger peerVal) throws InvalidPublicParameterException { + public synchronized void setPeerPublicValue(BigInteger peerVal) throws InvalidPublicParameterException { + if (_peerValue != null) { + if (!_peerValue.equals(peerVal)) + throw new IllegalStateException(); + return; + } validatePublic(peerVal); _peerValue = peerVal; }