use of org.gudy.bouncycastle.math.ec.ECPoint in project BiglyBT by BiglySoftware.
the class ECKeyPairGenerator method generateKeyPair.
/**
* Given the domain parameters this routine generates an EC key
* pair in accordance with X9.62 section 5.2.1 pages 26, 27.
*/
@Override
public AsymmetricCipherKeyPair generateKeyPair() {
BigInteger n = params.getN();
int nBitLength = n.bitLength();
BigInteger d;
do {
d = new BigInteger(nBitLength, random);
} while (d.equals(ZERO) || (d.compareTo(n) >= 0));
ECPoint Q = params.getG().multiply(d);
return new AsymmetricCipherKeyPair(new ECPublicKeyParameters(Q, params), new ECPrivateKeyParameters(d, params));
}
use of org.gudy.bouncycastle.math.ec.ECPoint in project BiglyBT by BiglySoftware.
the class ECDSASigner method generateSignature.
// 5.3 pg 28
/**
* generate a signature for the given message using the key we were
* initialised with. For conventional DSA the message should be a SHA-1
* hash of the message of interest.
*
* @param message the message that will be verified later.
*/
@Override
public BigInteger[] generateSignature(byte[] message) {
BigInteger e = new BigInteger(1, message);
BigInteger n = key.getParameters().getN();
BigInteger r = null;
BigInteger s = null;
// 5.3.2
do // generate s
{
BigInteger k = null;
int nBitLength = n.bitLength();
do // generate r
{
do {
k = new BigInteger(nBitLength, random);
} while (k.equals(ZERO));
ECPoint p = key.getParameters().getG().multiply(k);
// 5.3.3
BigInteger x = p.getX().toBigInteger();
r = x.mod(n);
} while (r.equals(ZERO));
BigInteger d = ((ECPrivateKeyParameters) key).getD();
s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n);
} while (s.equals(ZERO));
BigInteger[] res = new BigInteger[2];
res[0] = r;
res[1] = s;
return res;
}
use of org.gudy.bouncycastle.math.ec.ECPoint in project BiglyBT by BiglySoftware.
the class ECDSASigner method verifySignature.
// 5.4 pg 29
/**
* return true if the value r and s represent a DSA signature for
* the passed in message (for standard DSA the message should be
* a SHA-1 hash of the real message to be verified).
*/
@Override
public boolean verifySignature(byte[] message, BigInteger r, BigInteger s) {
BigInteger e = new BigInteger(1, message);
BigInteger n = key.getParameters().getN();
// r in the range [1,n-1]
if (r.compareTo(ONE) < 0 || r.compareTo(n) >= 0) {
return false;
}
// s in the range [1,n-1]
if (s.compareTo(ONE) < 0 || s.compareTo(n) >= 0) {
return false;
}
BigInteger c = s.modInverse(n);
BigInteger u1 = e.multiply(c).mod(n);
BigInteger u2 = r.multiply(c).mod(n);
ECPoint G = key.getParameters().getG();
ECPoint Q = ((ECPublicKeyParameters) key).getQ();
ECPoint point = G.multiply(u1).add(Q.multiply(u2));
BigInteger v = point.getX().toBigInteger().mod(n);
return v.equals(r);
}
use of org.gudy.bouncycastle.math.ec.ECPoint in project BiglyBT by BiglySoftware.
the class CryptoECCUtils method rawdataToPubkey.
public static PublicKey rawdataToPubkey(byte[] input) throws CryptoManagerException {
ECPoint W = ECCparam.getCurve().decodePoint(input);
KeySpec keyspec = new ECPublicKeySpec(W, (ECParameterSpec) ECCparam);
try {
return KeyFactory.getInstance("ECDSA", BouncyCastleProvider.PROVIDER_NAME).generatePublic(keyspec);
} catch (Throwable e) {
throw (new CryptoManagerException("Failed to decode public key", e));
}
}
use of org.gudy.bouncycastle.math.ec.ECPoint in project BiglyBT by BiglySoftware.
the class ECDHBasicAgreement method calculateAgreement.
@Override
public BigInteger calculateAgreement(CipherParameters pubKey) {
ECPublicKeyParameters pub = (ECPublicKeyParameters) pubKey;
ECPoint P = pub.getQ().multiply(key.getD());
return P.getX().toBigInteger();
}
Aggregations