From c48266fdc43587043f3263d2315783ca3c513b32 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Mon, 24 Feb 2014 13:51:20 +0000
Subject: [PATCH]  * Transports: Use SigUtil.rectify() in DH

---
 core/java/src/net/i2p/crypto/SigUtil.java     |  4 ++--
 .../transport/crypto/DHSessionKeyBuilder.java | 20 ++++++++++---------
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/core/java/src/net/i2p/crypto/SigUtil.java b/core/java/src/net/i2p/crypto/SigUtil.java
index 52ca857e62..0be589dc63 100644
--- a/core/java/src/net/i2p/crypto/SigUtil.java
+++ b/core/java/src/net/i2p/crypto/SigUtil.java
@@ -43,9 +43,9 @@ import net.i2p.util.NativeBigInteger;
 /**
  * Utilities for Signing keys and Signatures
  *
- * @since 0.9.9
+ * @since 0.9.9, public since 0.9.12
  */
-class SigUtil {
+public class SigUtil {
 
     private static final Map<SigningPublicKey, ECPublicKey> _pubkeyCache = new LHMCache<SigningPublicKey, ECPublicKey>(64);
     private static final Map<SigningPrivateKey, ECPrivateKey> _privkeyCache = new LHMCache<SigningPrivateKey, ECPrivateKey>(16);
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 68ade63967..0d49a656aa 100644
--- a/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java
+++ b/router/java/src/net/i2p/router/transport/crypto/DHSessionKeyBuilder.java
@@ -12,12 +12,14 @@ package net.i2p.router.transport.crypto;
 //import java.io.InputStream;
 //import java.io.OutputStream;
 import java.math.BigInteger;
+import java.security.InvalidKeyException;
 import java.util.concurrent.LinkedBlockingQueue;
 
 import net.i2p.I2PAppContext;
 import net.i2p.I2PException;
 import net.i2p.crypto.CryptoConstants;
 import net.i2p.crypto.SHA256Generator;
+import net.i2p.crypto.SigUtil;
 import net.i2p.data.ByteArray;
 //import net.i2p.data.DataHelper;
 import net.i2p.data.SessionKey;
@@ -183,16 +185,16 @@ public class DHSessionKeyBuilder {
         return toByteArray(getMyPublicValue());
     }
     
+    /**
+     *  @return exactly 256 bytes
+     *  @throws IllegalArgumentException if requires more than 256 bytes
+     */
     private static final byte[] toByteArray(BigInteger bi) {
-        byte data[] = bi.toByteArray();
-        byte rv[] = new byte[256];
-        if (data.length == 257) // high byte has the sign bit
-            System.arraycopy(data, 1, rv, 0, rv.length);
-        else if (data.length == 256)
-            System.arraycopy(data, 0, rv, 0, rv.length);
-        else
-            System.arraycopy(data, 0, rv, rv.length-data.length, data.length);
-        return rv;
+        try {
+            return SigUtil.rectify(bi, 256);
+        } catch (InvalidKeyException ike) {
+            throw new IllegalArgumentException(ike);
+        }
     }
 
     /**
-- 
GitLab