From f69f06b0387c8812a2bd0b18f692fdadcccd64d2 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Wed, 23 Nov 2011 22:25:36 +0000
Subject: [PATCH]   * Tunnel encryption: More efficient XOR

---
 router/java/src/net/i2p/router/tunnel/HopProcessor.java      | 5 ++++-
 .../src/net/i2p/router/tunnel/OutboundGatewayProcessor.java  | 5 ++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/router/java/src/net/i2p/router/tunnel/HopProcessor.java b/router/java/src/net/i2p/router/tunnel/HopProcessor.java
index b9155df6c2..21b9dc5db9 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 3bfee992c0..33ab24e11f 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;
-- 
GitLab