org.bouncycastle.crypto.prng.drbg.DualECPoints Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcprov-ext-debug-jdk18on Show documentation
Show all versions of bcprov-ext-debug-jdk18on Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for Java 1.8 and later with debug enabled.
The newest version!
package org.bouncycastle.crypto.prng.drbg;
import org.bouncycastle.math.ec.ECPoint;
/**
* General class for providing point pairs for use with DualEC DRBG. See NIST SP 800-90A for further details.
*/
public class DualECPoints
{
private final ECPoint p;
private final ECPoint q;
private final int securityStrength;
private final int cofactor;
/**
* Base Constructor.
*
* The cofactor is used to calculate the output block length (maxOutlen) according to
*
* max_outlen = largest multiple of 8 less than ((field size in bits) - (13 + log2(cofactor))
*
*
* @param securityStrength maximum security strength to be associated with these parameters
* @param p the P point.
* @param q the Q point.
* @param cofactor cofactor associated with the domain parameters for the point generation.
*/
public DualECPoints(int securityStrength, ECPoint p, ECPoint q, int cofactor)
{
if (!p.getCurve().equals(q.getCurve()))
{
throw new IllegalArgumentException("points need to be on the same curve");
}
this.securityStrength = securityStrength;
this.p = p;
this.q = q;
this.cofactor = cofactor;
}
public int getSeedLen()
{
return p.getCurve().getFieldSize();
}
public int getMaxOutlen()
{
return ((p.getCurve().getFieldSize() - (13 + log2(cofactor))) / 8) * 8;
}
public ECPoint getP()
{
return p;
}
public ECPoint getQ()
{
return q;
}
public int getSecurityStrength()
{
return securityStrength;
}
public int getCofactor()
{
return cofactor;
}
private static int log2(int value)
{
int log = 0;
while ((value >>= 1) != 0)
{
log++;
}
return log;
}
}