/**

* EdDSA-Java by str4d
*
* To the extent possible under law, the person who associated CC0 with
* EdDSA-Java has waived all copyright and related or neighboring rights
* to EdDSA-Java.
*
* You should have received a copy of the CC0 legalcode along with this
* work. If not, see <https://creativecommons.org/publicdomain/zero/1.0/>.
*
*/

package net.i2p.crypto.eddsa.spec;

import java.security.spec.KeySpec;

import net.i2p.crypto.eddsa.math.GroupElement;

/**

* @author str4d
*
*/

public class EdDSAPublicKeySpec implements KeySpec {

private final GroupElement A;
private final GroupElement Aneg;
private final EdDSAParameterSpec spec;

/**
 * @param pk the public key
 * @param spec the parameter specification for this key
 * @throws IllegalArgumentException if key length is wrong
 */
public EdDSAPublicKeySpec(byte[] pk, EdDSAParameterSpec spec) {
    if (pk.length != spec.getCurve().getField().getb()/8)
        throw new IllegalArgumentException("public-key length is wrong");

    this.A = new GroupElement(spec.getCurve(), pk);
    // Precompute -A for use in verification.
    this.Aneg = A.negate();
    Aneg.precompute(false);
    this.spec = spec;
}

public EdDSAPublicKeySpec(GroupElement A, EdDSAParameterSpec spec) {
    this.A = A;
    this.Aneg = A.negate();
    Aneg.precompute(false);
    this.spec = spec;
}

public GroupElement getA() {
    return A;
}

public GroupElement getNegativeA() {
    return Aneg;
}

public EdDSAParameterSpec getParams() {
    return spec;
}

}