/* See LICENSE for licensing and NOTICE for copyright. */ package org.cryptacular.adapter; import java.security.spec.ECParameterSpec; import java.security.spec.ECPoint; import org.bouncycastle.crypto.params.ECDomainParameters; import org.bouncycastle.crypto.params.ECKeyParameters; import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util; /** * Base class for wrapped EC keys. * * @param <T> EC key parameters type. * * @author Middleware Services */ public abstract class AbstractWrappedECKey<T extends ECKeyParameters> extends AbstractWrappedKey<T> { /** Elliptic curve algorithm name. */ private static final String ALGORITHM = "EC"; /** * Creates a new instance that wraps the given key. * * @param wrappedKey Key to wrap. */ public AbstractWrappedECKey(final T wrappedKey) { super(wrappedKey); } /** @return EC domain parameters. */ public ECParameterSpec getParams() { final ECDomainParameters params = delegate.getParameters(); return new ECParameterSpec( EC5Util.convertCurve(params.getCurve(), params.getSeed()), new ECPoint( params.getG().normalize().getXCoord().toBigInteger(), params.getG().normalize().getYCoord().toBigInteger()), params.getN(), params.getH().intValue()); } @Override public String getAlgorithm() { return ALGORITHM; } }