/** * TLS-Attacker - A Modular Penetration Testing Framework for TLS * * Copyright 2014-2016 Ruhr University Bochum / Hackmanit GmbH * * Licensed under Apache License 2.0 * http://www.apache.org/licenses/LICENSE-2.0 */ package de.rub.nds.tlsattacker.tls.constants; import java.util.HashMap; import java.util.Map; /** * @author Juraj Somorovsky <juraj.somorovsky@rub.de> */ public enum NamedCurve { SECT163K1(new byte[]{(byte) 0, (byte) 1}), SECT163R1(new byte[]{(byte) 0, (byte) 2}), SECT163R2(new byte[]{(byte) 0, (byte) 3}), SECT193R1(new byte[]{(byte) 0, (byte) 4}), SECT193R2(new byte[]{(byte) 0, (byte) 5}), SECT233K1(new byte[]{(byte) 0, (byte) 6}), SECT233R1(new byte[]{(byte) 0, (byte) 7}), SECT239K1(new byte[]{(byte) 0, (byte) 8}), SECT283K1(new byte[]{(byte) 0, (byte) 9}), SECT283R1(new byte[]{(byte) 0, (byte) 10}), SECT409K1(new byte[]{(byte) 0, (byte) 11}), SECT409R1(new byte[]{(byte) 0, (byte) 12}), SECT571K1(new byte[]{(byte) 0, (byte) 13}), SECT571R1(new byte[]{(byte) 0, (byte) 14}), SECP160K1(new byte[]{(byte) 0, (byte) 15}), SECP160R1(new byte[]{(byte) 0, (byte) 16}), SECP160R2(new byte[]{(byte) 0, (byte) 17}), SECP192K1(new byte[]{(byte) 0, (byte) 18}), SECP192R1(new byte[]{(byte) 0, (byte) 19}), SECP224K1(new byte[]{(byte) 0, (byte) 20}), SECP224R1(new byte[]{(byte) 0, (byte) 21}), SECP256K1(new byte[]{(byte) 0, (byte) 22}), SECP256R1(new byte[]{(byte) 0, (byte) 23}), SECP384R1(new byte[]{(byte) 0, (byte) 24}), SECP521R1(new byte[]{(byte) 0, (byte) 25}), BRAINPOOLP256R1(new byte[]{(byte) 0, (byte) 26}), BRAINPOOLP384R1(new byte[]{(byte) 0, (byte) 27}), BRAINPOOLP512R1(new byte[]{(byte) 0, (byte) 28}), ECDH_X25519(new byte[]{(byte) 0, (byte) 29}), ECDH_X448(new byte[]{(byte) 0, (byte) 30}), FFDHE2048(new byte[]{(byte) 1, (byte) 0}), FFDHE3072(new byte[]{(byte) 1, (byte) 1}), FFDHE4096(new byte[]{(byte) 1, (byte) 2}), FFDHE6144(new byte[]{(byte) 1, (byte) 3}), FFDHE8192(new byte[]{(byte) 1, (byte) 4}), NONE(new byte[]{(byte) 0, (byte) 0}); public static final int LENGTH = 2; private byte[] value; private static final Map<Integer, NamedCurve> MAP; private NamedCurve(byte[] value) { this.value = value; } static { MAP = new HashMap<>(); for (NamedCurve c : NamedCurve.values()) { MAP.put(valueToInt(c.value), c); } } private static int valueToInt(byte[] value) { return (value[0] & 0xff) << 8 | (value[1] & 0xff); } public static NamedCurve getNamedCurve(byte[] value) { return MAP.get(valueToInt(value)); } public byte[] getValue() { return value; } public int getIntValue() { return valueToInt(value); } }