From d2dea42cecae068f242348aa808e288fdd6efef6 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 18 Dec 2015 11:29:13 +0000 Subject: [PATCH 1/2] Fixed off-by-one error in key rotation. #190 --- briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java b/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java index d86f02a94..d639ea13d 100644 --- a/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java +++ b/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java @@ -281,7 +281,7 @@ class CryptoComponentImpl implements CryptoComponent { inCurr = inNext; SecretKey inNextTag = rotateKey(inNext.getTagKey(), p + 1); SecretKey inNextHeader = rotateKey(inNext.getHeaderKey(), p + 1); - inNext = new IncomingKeys(inNextTag, inNextHeader, p); + inNext = new IncomingKeys(inNextTag, inNextHeader, p + 1); SecretKey outCurrTag = rotateKey(outCurr.getTagKey(), p); SecretKey outCurrHeader = rotateKey(outCurr.getHeaderKey(), p); outCurr = new OutgoingKeys(outCurrTag, outCurrHeader, p); From aab62aaffcc1703c5abc455bf1933fe2e26e9e3c Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 18 Dec 2015 11:31:11 +0000 Subject: [PATCH 2/2] Added sanity checks to catch bugs like #190. --- .../src/org/briarproject/api/transport/TransportKeys.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/briar-api/src/org/briarproject/api/transport/TransportKeys.java b/briar-api/src/org/briarproject/api/transport/TransportKeys.java index 72b7e62c4..ec550b52a 100644 --- a/briar-api/src/org/briarproject/api/transport/TransportKeys.java +++ b/briar-api/src/org/briarproject/api/transport/TransportKeys.java @@ -11,6 +11,12 @@ public class TransportKeys { public TransportKeys(TransportId transportId, IncomingKeys inPrev, IncomingKeys inCurr, IncomingKeys inNext, OutgoingKeys outCurr) { + if (inPrev.getRotationPeriod() != inCurr.getRotationPeriod() - 1) + throw new IllegalArgumentException(); + if (inNext.getRotationPeriod() != inCurr.getRotationPeriod() + 1) + throw new IllegalArgumentException(); + if (outCurr.getRotationPeriod() != inCurr.getRotationPeriod()) + throw new IllegalArgumentException(); this.transportId = transportId; this.inPrev = inPrev; this.inCurr = inCurr;