All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bouncycastle.crypto.prng.drbg.DualECPoints Maven / Gradle / Ivy

There is a newer version: 1.70_1
Show 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; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy