Use Bouncy Castle for encoding public keys.

This commit is contained in:
akwizgran
2016-02-23 16:16:29 +00:00
committed by str4d
parent 698f3470f4
commit 94cca59249
3 changed files with 13 additions and 25 deletions

View File

@@ -164,8 +164,8 @@ class CryptoComponentImpl implements CryptoComponent {
// Return a wrapper that uses the SEC 1 encoding
ECPublicKeyParameters ecPublicKey =
(ECPublicKeyParameters) keyPair.getPublic();
PublicKey publicKey = new Sec1PublicKey(ecPublicKey,
AGREEMENT_KEY_PAIR_BITS);
PublicKey publicKey = new Sec1PublicKey(ecPublicKey
);
ECPrivateKeyParameters ecPrivateKey =
(ECPrivateKeyParameters) keyPair.getPrivate();
PrivateKey privateKey = new Sec1PrivateKey(ecPrivateKey,
@@ -183,8 +183,8 @@ class CryptoComponentImpl implements CryptoComponent {
// Return a wrapper that uses the SEC 1 encoding
ECPublicKeyParameters ecPublicKey =
(ECPublicKeyParameters) keyPair.getPublic();
PublicKey publicKey = new Sec1PublicKey(ecPublicKey,
SIGNATURE_KEY_PAIR_BITS);
PublicKey publicKey = new Sec1PublicKey(ecPublicKey
);
ECPrivateKeyParameters ecPrivateKey =
(ECPrivateKeyParameters) keyPair.getPrivate();
PrivateKey privateKey = new Sec1PrivateKey(ecPrivateKey,

View File

@@ -1,11 +1,5 @@
package org.briarproject.crypto;
import static java.util.logging.Level.INFO;
import java.math.BigInteger;
import java.security.GeneralSecurityException;
import java.util.logging.Logger;
import org.briarproject.api.crypto.KeyParser;
import org.briarproject.api.crypto.PrivateKey;
import org.briarproject.api.crypto.PublicKey;
@@ -15,6 +9,12 @@ import org.spongycastle.crypto.params.ECPublicKeyParameters;
import org.spongycastle.math.ec.ECCurve;
import org.spongycastle.math.ec.ECPoint;
import java.math.BigInteger;
import java.security.GeneralSecurityException;
import java.util.logging.Logger;
import static java.util.logging.Level.INFO;
/**
* A key parser that uses the encoding defined in "SEC 1: Elliptic Curve
* Cryptography", section 2.3 (Certicom Corporation, May 2009). Point
@@ -73,7 +73,7 @@ class Sec1KeyParser implements KeyParser {
throw new GeneralSecurityException();
// Construct a public key from the point (x, y) and the params
ECPublicKeyParameters k = new ECPublicKeyParameters(pub, params);
PublicKey p = new Sec1PublicKey(k, keyBits);
PublicKey p = new Sec1PublicKey(k);
long duration = System.currentTimeMillis() - now;
if (LOG.isLoggable(INFO))
LOG.info("Parsing public key took " + duration + " ms");

View File

@@ -2,7 +2,6 @@ package org.briarproject.crypto;
import org.briarproject.api.crypto.PublicKey;
import org.spongycastle.crypto.params.ECPublicKeyParameters;
import org.spongycastle.math.ec.ECPoint;
/**
* An elliptic curve public key that uses the encoding defined in "SEC 1:
@@ -12,24 +11,13 @@ import org.spongycastle.math.ec.ECPoint;
class Sec1PublicKey implements PublicKey {
private final ECPublicKeyParameters key;
private final int bytesPerInt, publicKeyBytes;
Sec1PublicKey(ECPublicKeyParameters key, int keyBits) {
Sec1PublicKey(ECPublicKeyParameters key) {
this.key = key;
bytesPerInt = (keyBits + 7) / 8;
publicKeyBytes = 1 + 2 * bytesPerInt;
}
public byte[] getEncoded() {
byte[] encodedKey = new byte[publicKeyBytes];
encodedKey[0] = 4;
ECPoint pub = key.getQ().normalize();
byte[] x = pub.getAffineXCoord().toBigInteger().toByteArray();
Sec1Utils.convertToFixedLength(x, encodedKey, 1, bytesPerInt);
byte[] y = pub.getAffineYCoord().toBigInteger().toByteArray();
Sec1Utils.convertToFixedLength(y, encodedKey, 1 + bytesPerInt,
bytesPerInt);
return encodedKey;
return key.getQ().getEncoded(false);
}
ECPublicKeyParameters getKey() {