From 3658cca3e58086bb612bba3459acd18c2847aedb Mon Sep 17 00:00:00 2001
From: human <human>
Date: Mon, 19 Apr 2004 21:43:06 +0000
Subject: [PATCH] Further simplified I2P repliable datagram format: they now
 contain senderPubDest + S(H(payload)) + payload (human)

---
 .../client/datagram/I2PDatagramDissector.java   | 16 ++++++++--------
 .../i2p/client/datagram/I2PDatagramMaker.java   | 17 +++++------------
 2 files changed, 13 insertions(+), 20 deletions(-)

diff --git a/core/java/src/net/i2p/client/datagram/I2PDatagramDissector.java b/core/java/src/net/i2p/client/datagram/I2PDatagramDissector.java
index eb1e0af46b..ae5e31c1d1 100644
--- a/core/java/src/net/i2p/client/datagram/I2PDatagramDissector.java
+++ b/core/java/src/net/i2p/client/datagram/I2PDatagramDissector.java
@@ -59,20 +59,20 @@ public final class I2PDatagramDissector {
      */
     public void loadI2PDatagram(byte[] dgram) throws DataFormatException {
         ByteArrayInputStream dgStream = new ByteArrayInputStream(dgram);
-        byte[] hashedData;
-
+        byte[] rxTrimmedPayload;
 
         try {
+            rxDest.readBytes(dgStream);
+
             rxSign.readBytes(dgStream);
 
-            rxDest.readBytes(dgStream);
             rxPayloadLen = dgStream.read(rxPayload);
+
+            // FIXME: hashGen.calculateHash(source, offset, len) would rock...
+            rxTrimmedPayload = new byte[rxPayloadLen];
+            System.arraycopy(rxPayload, 0, rxTrimmedPayload, 0, rxPayloadLen);
             
-            hashedData = new byte[dgram.length - Signature.SIGNATURE_BYTES];
-            System.arraycopy(dgram, Signature.SIGNATURE_BYTES,
-                             hashedData, 0,
-                             hashedData.length);
-            rxHashBytes = hashGen.calculateHash(hashedData).toByteArray();
+            rxHashBytes =hashGen.calculateHash(rxTrimmedPayload).toByteArray();
         } catch (IOException e) {
             _log.error("Caught IOException - INCONSISTENT STATE!", e);
         }
diff --git a/core/java/src/net/i2p/client/datagram/I2PDatagramMaker.java b/core/java/src/net/i2p/client/datagram/I2PDatagramMaker.java
index 600397948d..669818ac78 100644
--- a/core/java/src/net/i2p/client/datagram/I2PDatagramMaker.java
+++ b/core/java/src/net/i2p/client/datagram/I2PDatagramMaker.java
@@ -36,7 +36,6 @@ public final class I2PDatagramMaker {
     private SigningPrivateKey sxPrivKey = null;
     private byte[] sxDestBytes = null;
 
-    private ByteArrayOutputStream sxBuf = new ByteArrayOutputStream(DGRAM_BUFSIZE);
     private ByteArrayOutputStream sxDGram = new ByteArrayOutputStream(DGRAM_BUFSIZE);
 
     /**
@@ -56,22 +55,16 @@ public final class I2PDatagramMaker {
      * @param payload Bytes to be contained in the I2P datagram.
      */
     public byte[] makeI2PDatagram(byte[] payload) {
-        byte[] hashedData;
-
-        sxBuf.reset();
         sxDGram.reset();
         
         try {
-            sxBuf.write(sxDestBytes);
-            sxBuf.write(payload);
-            
-            hashedData = sxBuf.toByteArray();
-            
-            dsaEng.sign(hashGen.calculateHash(hashedData).toByteArray(),
+            sxDGram.write(sxDestBytes);
+        
+            dsaEng.sign(hashGen.calculateHash(payload).toByteArray(),
                         sxPrivKey).writeBytes(sxDGram);
 
-            sxDGram.write(hashedData);
-        
+            sxDGram.write(payload);
+
             return sxDGram.toByteArray();
         } catch (IOException e) {
             _log.error("Caught IOException", e);
-- 
GitLab