001// SPDX-FileCopyrightText: 2020 Paul Schaub <vanitasvitae@fsfe.org>
002//
003// SPDX-License-Identifier: Apache-2.0
004
005package org.pgpainless.key.generation.type.ecc.ecdh;
006
007import javax.annotation.Nonnull;
008import java.security.spec.AlgorithmParameterSpec;
009
010import org.bouncycastle.jce.spec.ECNamedCurveGenParameterSpec;
011import org.pgpainless.algorithm.PublicKeyAlgorithm;
012import org.pgpainless.key.generation.type.KeyType;
013import org.pgpainless.key.generation.type.ecc.EllipticCurve;
014
015public final class ECDH implements KeyType {
016
017    private final EllipticCurve curve;
018
019    private ECDH(EllipticCurve curve) {
020        this.curve = curve;
021    }
022
023    public static ECDH fromCurve(@Nonnull EllipticCurve curve) {
024        return new ECDH(curve);
025    }
026
027    @Override
028    public String getName() {
029        return "ECDH";
030    }
031
032    @Override
033    public PublicKeyAlgorithm getAlgorithm() {
034        return PublicKeyAlgorithm.ECDH;
035    }
036
037    @Override
038    public int getBitStrength() {
039        return curve.getBitStrength();
040    }
041
042    @Override
043    public AlgorithmParameterSpec getAlgorithmSpec() {
044        return new ECNamedCurveGenParameterSpec(curve.getName());
045    }
046}