001// SPDX-FileCopyrightText: 2018 Paul Schaub <vanitasvitae@fsfe.org>
002//
003// SPDX-License-Identifier: Apache-2.0
004
005package org.pgpainless.key.generation.type.ecc;
006
007import javax.annotation.Nonnull;
008
009import org.pgpainless.key.generation.type.xdh.XDHSpec;
010
011/**
012 * Elliptic curves for use with
013 * {@link org.pgpainless.key.generation.type.ecc.ecdh.ECDH}/{@link org.pgpainless.key.generation.type.ecc.ecdsa.ECDSA}.
014 * For curve25519 related curve definitions see
015 * {@link XDHSpec} and {@link org.pgpainless.key.generation.type.eddsa.EdDSACurve}.
016 */
017public enum EllipticCurve {
018    _P256("prime256v1", 256), // prime256v1 is equivalent to P-256, see https://tools.ietf.org/search/rfc4492#page-32
019    _P384("secp384r1", 384), // secp384r1 is equivalent to P-384, see https://tools.ietf.org/search/rfc4492#page-32
020    _P521("secp521r1", 521), // secp521r1 is equivalent to P-521, see https://tools.ietf.org/search/rfc4492#page-32
021    _SECP256K1("secp256k1", 256),
022    _BRAINPOOLP256R1("brainpoolP256r1", 256),
023    _BRAINPOOLP384R1("brainpoolP384r1", 384),
024    _BRAINPOOLP512R1("brainpoolP512r1", 512)
025    ;
026
027    private final String name;
028    private final int bitStrength;
029
030    EllipticCurve(@Nonnull String name, int bitStrength) {
031        this.name = name;
032        this.bitStrength = bitStrength;
033    }
034
035    public String getName() {
036        return name;
037    }
038
039    public int getBitStrength() {
040        return bitStrength;
041    }
042}