Skip to content

Commit a280999

Browse files
committed
Some updates to tests and argument checks
1 parent d0e2e52 commit a280999

11 files changed

+46
-7
lines changed

src/main/java/com/danubetech/keyformats/PrivateKeyBytes.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ public static byte[] bytes_to_X25519PrivateKey(byte[] privateKeyBytes) {
181181
public static byte[] P_256PrivateKey_to_bytes(ECPrivateKey privateKey) {
182182

183183
byte[] s = ByteArrayUtil.bigIntegertoByteArray(privateKey.getS());
184-
if (s.length != 32) throw new IllegalArgumentException("Invalid 's' value (not 32 bytes): private key, length=" + s.length);
184+
if (s.length != 32) throw new IllegalArgumentException("Invalid key size (not 32 bytes): private key, length=" + s.length + " (" + privateKey.getS().bitLength() + " bits)");
185185

186186
return s;
187187
}
@@ -211,7 +211,7 @@ public static ECPrivateKey bytes_to_P_256PrivateKey(byte[] privateKeyBytes) {
211211
public static byte[] P_384PrivateKey_to_bytes(ECPrivateKey privateKey) {
212212

213213
byte[] s = ByteArrayUtil.bigIntegertoByteArray(privateKey.getS());
214-
if (s.length != 48) throw new IllegalArgumentException("Invalid 's' value (not 48 bytes): private key, length=" + s.length);
214+
if (s.length != 48) throw new IllegalArgumentException("Invalid key size (not 48 bytes): private key, length=" + s.length + " (" + privateKey.getS().bitLength() + " bits)");
215215

216216
return s;
217217
}
@@ -241,7 +241,7 @@ public static ECPrivateKey bytes_to_P_384PrivateKey(byte[] privateKeyBytes) {
241241
public static byte[] P_521PrivateKey_to_bytes(ECPrivateKey privateKey) {
242242

243243
byte[] s = ByteArrayUtil.bigIntegertoByteArray(privateKey.getS());
244-
if (s.length != 64 && s.length != 65 && s.length != 66) throw new IllegalArgumentException("Invalid 's' value (not 64 or 65 or 66 bytes): private key, length=" + s.length);
244+
if (s.length != 64 && s.length != 65 && s.length != 66) throw new IllegalArgumentException("Invalid key size (not 64 or 65 or 66 bytes): private key, length=" + s.length + " (" + privateKey.getS().bitLength() + " bits)");
245245

246246
return s;
247247
}

src/main/java/com/danubetech/keyformats/PublicKeyBytes.java

+10-4
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,9 @@ public static byte[] bytes_to_X25519PublicKey(byte[] publicKeyBytes) {
166166

167167
public static byte[] P_256PublicKey_to_bytes(ECPublicKey publicKey) {
168168

169-
return EC5Util.convertPoint(publicKey.getParams(), publicKey.getW()).getEncoded(true);
169+
byte[] point = EC5Util.convertPoint(publicKey.getParams(), publicKey.getW()).getEncoded(true);
170+
if (point.length != 33) throw new IllegalArgumentException("Invalid key size (not 33 bytes): " + Hex.encodeHexString(point) + ", length=" + point.length);
171+
return point;
170172
}
171173

172174
public static ECPublicKey bytes_to_P_256PublicKey(byte[] publicKeyBytes) {
@@ -198,7 +200,9 @@ public static ECPublicKey bytes_to_P_256PublicKey(byte[] publicKeyBytes) {
198200

199201
public static byte[] P_384PublicKey_to_bytes(ECPublicKey publicKey) {
200202

201-
return EC5Util.convertPoint(publicKey.getParams(), publicKey.getW()).getEncoded(true);
203+
byte[] point = EC5Util.convertPoint(publicKey.getParams(), publicKey.getW()).getEncoded(true);
204+
if (point.length != 49) throw new IllegalArgumentException("Invalid key size (not 49 bytes): " + Hex.encodeHexString(point) + ", length=" + point.length);
205+
return point;
202206
}
203207

204208
public static ECPublicKey bytes_to_P_384PublicKey(byte[] publicKeyBytes) {
@@ -230,12 +234,14 @@ public static ECPublicKey bytes_to_P_384PublicKey(byte[] publicKeyBytes) {
230234

231235
public static byte[] P_521PublicKey_to_bytes(ECPublicKey publicKey) {
232236

233-
return EC5Util.convertPoint(publicKey.getParams(), publicKey.getW()).getEncoded(true);
237+
byte[] point = EC5Util.convertPoint(publicKey.getParams(), publicKey.getW()).getEncoded(true);
238+
if (point.length != 65 && point.length != 66 && point.length != 67) throw new IllegalArgumentException("Invalid key size (not 65 or 66 or 67 bytes): " + Hex.encodeHexString(point) + ", length=" + point.length);
239+
return point;
234240
}
235241

236242
public static ECPublicKey bytes_to_P_521PublicKey(byte[] publicKeyBytes) {
237243

238-
if (publicKeyBytes.length != 65 && publicKeyBytes.length != 66 && publicKeyBytes.length != 67) throw new IllegalArgumentException("Expected 64 or 65 or 66 bytes instead of " + publicKeyBytes.length);
244+
if (publicKeyBytes.length != 65 && publicKeyBytes.length != 66 && publicKeyBytes.length != 67) throw new IllegalArgumentException("Expected 65 or 66 or 67 bytes instead of " + publicKeyBytes.length);
239245

240246
ECNamedCurveParameterSpec ecNamedCurveParameterSpec = ECNamedCurveTable.getParameterSpec("secp521r1");
241247
org.bouncycastle.math.ec.ECPoint bcEcPoint = ecNamedCurveParameterSpec.getCurve().decodePoint(publicKeyBytes);

src/main/java/com/danubetech/keyformats/crypto/impl/Ed25519_EdDSA_LibIndySigner.java

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public Ed25519_EdDSA_LibIndySigner(byte[] privateKey, Wallet wallet, String sign
2020

2121
this.wallet = wallet;
2222
this.signerVk = signerVk;
23+
24+
if (privateKey.length != 64) throw new IllegalArgumentException("Expected 32 bytes instead of " + privateKey.length);
2325
}
2426

2527
@Override

src/main/java/com/danubetech/keyformats/crypto/impl/Ed25519_EdDSA_PrivateKeySigner.java

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ public class Ed25519_EdDSA_PrivateKeySigner extends PrivateKeySigner<byte[]> {
1111
public Ed25519_EdDSA_PrivateKeySigner(byte[] privateKey) {
1212

1313
super(privateKey, JWSAlgorithm.EdDSA);
14+
15+
if (privateKey.length != 64) throw new IllegalArgumentException("Expected 32 bytes instead of " + privateKey.length);
1416
}
1517

1618
@Override

src/main/java/com/danubetech/keyformats/crypto/impl/Ed25519_EdDSA_PublicKeyVerifier.java

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ public class Ed25519_EdDSA_PublicKeyVerifier extends PublicKeyVerifier<byte[]> {
1111
public Ed25519_EdDSA_PublicKeyVerifier(byte[] publicKey) {
1212

1313
super(publicKey, JWSAlgorithm.EdDSA);
14+
15+
if (publicKey.length != 32) throw new IllegalArgumentException("Expected 32 bytes instead of " + publicKey.length);
1416
}
1517

1618
@Override

src/main/java/com/danubetech/keyformats/crypto/impl/P_256_ES256_PrivateKeySigner.java

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.danubetech.keyformats.crypto.PrivateKeySigner;
44
import com.danubetech.keyformats.jose.JWSAlgorithm;
55
import com.danubetech.keyformats.util.ASNUtil;
6+
import com.danubetech.keyformats.util.ByteArrayUtil;
67

78
import java.io.IOException;
89
import java.security.GeneralSecurityException;
@@ -14,6 +15,9 @@ public class P_256_ES256_PrivateKeySigner extends PrivateKeySigner<ECPrivateKey>
1415
public P_256_ES256_PrivateKeySigner(ECPrivateKey privateKey) {
1516

1617
super(privateKey, JWSAlgorithm.ES256);
18+
19+
byte[] s = ByteArrayUtil.bigIntegertoByteArray(privateKey.getS());
20+
if (s.length != 32) throw new IllegalArgumentException("Invalid key size (not 32 bytes): private key, length=" + s.length + " (" + privateKey.getS().bitLength() + " bits)");
1721
}
1822

1923
@Override

src/main/java/com/danubetech/keyformats/crypto/impl/P_256_ES256_PublicKeyVerifier.java

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.danubetech.keyformats.crypto.PublicKeyVerifier;
44
import com.danubetech.keyformats.jose.JWSAlgorithm;
55
import com.danubetech.keyformats.util.ASNUtil;
6+
import org.apache.commons.codec.binary.Hex;
7+
import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util;
68

79
import java.io.IOException;
810
import java.security.GeneralSecurityException;
@@ -14,6 +16,9 @@ public class P_256_ES256_PublicKeyVerifier extends PublicKeyVerifier<ECPublicKey
1416
public P_256_ES256_PublicKeyVerifier(ECPublicKey publicKey) {
1517

1618
super(publicKey, JWSAlgorithm.ES256);
19+
20+
byte[] point = EC5Util.convertPoint(publicKey.getParams(), publicKey.getW()).getEncoded(true);
21+
if (point.length != 33) throw new IllegalArgumentException("Invalid key size (not 33 bytes): " + Hex.encodeHexString(point) + ", length=" + point.length);
1722
}
1823

1924
@Override

src/main/java/com/danubetech/keyformats/crypto/impl/P_384_ES384_PrivateKeySigner.java

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.danubetech.keyformats.crypto.PrivateKeySigner;
44
import com.danubetech.keyformats.jose.JWSAlgorithm;
55
import com.danubetech.keyformats.util.ASNUtil;
6+
import com.danubetech.keyformats.util.ByteArrayUtil;
67

78
import java.io.IOException;
89
import java.security.GeneralSecurityException;
@@ -14,6 +15,9 @@ public class P_384_ES384_PrivateKeySigner extends PrivateKeySigner<ECPrivateKey>
1415
public P_384_ES384_PrivateKeySigner(ECPrivateKey privateKey) {
1516

1617
super(privateKey, JWSAlgorithm.ES384);
18+
19+
byte[] s = ByteArrayUtil.bigIntegertoByteArray(privateKey.getS());
20+
if (s.length != 48) throw new IllegalArgumentException("Invalid key size (not 48 bytes): private key, length=" + s.length + " (" + privateKey.getS().bitLength() + " bits)");
1721
}
1822

1923
@Override

src/main/java/com/danubetech/keyformats/crypto/impl/P_384_ES384_PublicKeyVerifier.java

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.danubetech.keyformats.crypto.PublicKeyVerifier;
44
import com.danubetech.keyformats.jose.JWSAlgorithm;
55
import com.danubetech.keyformats.util.ASNUtil;
6+
import org.apache.commons.codec.binary.Hex;
7+
import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util;
68

79
import java.io.IOException;
810
import java.security.GeneralSecurityException;
@@ -14,6 +16,9 @@ public class P_384_ES384_PublicKeyVerifier extends PublicKeyVerifier<ECPublicKey
1416
public P_384_ES384_PublicKeyVerifier(ECPublicKey publicKey) {
1517

1618
super(publicKey, JWSAlgorithm.ES384);
19+
20+
byte[] point = EC5Util.convertPoint(publicKey.getParams(), publicKey.getW()).getEncoded(true);
21+
if (point.length != 49) throw new IllegalArgumentException("Invalid key size (not 49 bytes): " + Hex.encodeHexString(point) + ", length=" + point.length);
1722
}
1823

1924
@Override

src/main/java/com/danubetech/keyformats/crypto/impl/P_521_ES512_PrivateKeySigner.java

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.danubetech.keyformats.crypto.PrivateKeySigner;
44
import com.danubetech.keyformats.jose.JWSAlgorithm;
55
import com.danubetech.keyformats.util.ASNUtil;
6+
import com.danubetech.keyformats.util.ByteArrayUtil;
67

78
import java.io.IOException;
89
import java.security.GeneralSecurityException;
@@ -14,6 +15,9 @@ public class P_521_ES512_PrivateKeySigner extends PrivateKeySigner<ECPrivateKey>
1415
public P_521_ES512_PrivateKeySigner(ECPrivateKey privateKey) {
1516

1617
super(privateKey, JWSAlgorithm.ES512);
18+
19+
byte[] s = ByteArrayUtil.bigIntegertoByteArray(privateKey.getS());
20+
if (s.length != 64 && s.length != 65 && s.length != 66) throw new IllegalArgumentException("Invalid key size (not 64 or 65 or 66 bytes): private key, length=" + s.length + " (" + privateKey.getS().bitLength() + " bits)");
1721
}
1822

1923
@Override

src/main/java/com/danubetech/keyformats/crypto/impl/P_521_ES512_PublicKeyVerifier.java

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.danubetech.keyformats.crypto.PublicKeyVerifier;
44
import com.danubetech.keyformats.jose.JWSAlgorithm;
55
import com.danubetech.keyformats.util.ASNUtil;
6+
import org.apache.commons.codec.binary.Hex;
7+
import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util;
68

79
import java.io.IOException;
810
import java.security.GeneralSecurityException;
@@ -14,6 +16,9 @@ public class P_521_ES512_PublicKeyVerifier extends PublicKeyVerifier<ECPublicKey
1416
public P_521_ES512_PublicKeyVerifier(ECPublicKey publicKey) {
1517

1618
super(publicKey, JWSAlgorithm.ES512);
19+
20+
byte[] point = EC5Util.convertPoint(publicKey.getParams(), publicKey.getW()).getEncoded(true);
21+
if (point.length != 65 && point.length != 66 && point.length != 67) throw new IllegalArgumentException("Invalid key size (not 65 or 66 or 67 bytes): " + Hex.encodeHexString(point) + ", length=" + point.length);
1722
}
1823

1924
@Override

0 commit comments

Comments
 (0)