diff --git a/router/java/src/net/i2p/router/tunnel/HopProcessor.java b/router/java/src/net/i2p/router/tunnel/HopProcessor.java index b9155df6c2f386bd717ac4c42c536ada99c5ae50..21b9dc5db9e15d705fcb91caad23ce993a83db0d 100644 --- a/router/java/src/net/i2p/router/tunnel/HopProcessor.java +++ b/router/java/src/net/i2p/router/tunnel/HopProcessor.java @@ -100,7 +100,10 @@ class HopProcessor { private final void encrypt(byte data[], int offset, int length) { for (int off = offset + IV_LENGTH; off < length; off += IV_LENGTH) { - DataHelper.xor(data, off - IV_LENGTH, data, off, data, off, IV_LENGTH); + //DataHelper.xor(data, off - IV_LENGTH, data, off, data, off, IV_LENGTH); + for (int j = 0; j < IV_LENGTH; j++) { + data[off + j] ^= data[(off - IV_LENGTH) + j]; + } _context.aes().encryptBlock(data, off, _config.getLayerKey(), data, off); } } diff --git a/router/java/src/net/i2p/router/tunnel/OutboundGatewayProcessor.java b/router/java/src/net/i2p/router/tunnel/OutboundGatewayProcessor.java index 3bfee992c08fc5fb246e5cb5898f7bc6bc221b26..33ab24e11ff5b6a0b71706d7528237891cb46099 100644 --- a/router/java/src/net/i2p/router/tunnel/OutboundGatewayProcessor.java +++ b/router/java/src/net/i2p/router/tunnel/OutboundGatewayProcessor.java @@ -93,7 +93,10 @@ class OutboundGatewayProcessor { System.arraycopy(orig, off, cur, 0, HopProcessor.IV_LENGTH); ctx.aes().decryptBlock(orig, off, config.getLayerKey(), orig, off); - DataHelper.xor(prev, 0, orig, off, orig, off, HopProcessor.IV_LENGTH); + //DataHelper.xor(prev, 0, orig, off, orig, off, HopProcessor.IV_LENGTH); + for (int j = 0; j < HopProcessor.IV_LENGTH; j++) { + orig[off + j] ^= prev[j]; + } byte xf[] = prev; prev = cur; cur = xf;