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