package org.bouncycastle.crypto.tls;
RFC 4492 5.1.1
The named curves defined here are those specified in SEC 2 [13]. Note that many of these curves
are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 through 0xFEFF are
reserved for private use. Values 0xFF01 and 0xFF02 indicate that the client supports arbitrary
prime and characteristic-2 curves, respectively (the curve parameters must be encoded explicitly
in ECParameters).
/**
* RFC 4492 5.1.1
* <p>
* The named curves defined here are those specified in SEC 2 [13]. Note that many of these curves
* are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 through 0xFEFF are
* reserved for private use. Values 0xFF01 and 0xFF02 indicate that the client supports arbitrary
* prime and characteristic-2 curves, respectively (the curve parameters must be encoded explicitly
* in ECParameters).
*/
public class NamedCurve
{
public static final int sect163k1 = 1;
public static final int sect163r1 = 2;
public static final int sect163r2 = 3;
public static final int sect193r1 = 4;
public static final int sect193r2 = 5;
public static final int sect233k1 = 6;
public static final int sect233r1 = 7;
public static final int sect239k1 = 8;
public static final int sect283k1 = 9;
public static final int sect283r1 = 10;
public static final int sect409k1 = 11;
public static final int sect409r1 = 12;
public static final int sect571k1 = 13;
public static final int sect571r1 = 14;
public static final int secp160k1 = 15;
public static final int secp160r1 = 16;
public static final int secp160r2 = 17;
public static final int secp192k1 = 18;
public static final int secp192r1 = 19;
public static final int secp224k1 = 20;
public static final int secp224r1 = 21;
public static final int secp256k1 = 22;
public static final int secp256r1 = 23;
public static final int secp384r1 = 24;
public static final int secp521r1 = 25;
/*
* RFC 7027
*/
public static final int brainpoolP256r1 = 26;
public static final int brainpoolP384r1 = 27;
public static final int brainpoolP512r1 = 28;
/*
* reserved (0xFE00..0xFEFF)
*/
public static final int arbitrary_explicit_prime_curves = 0xFF01;
public static final int arbitrary_explicit_char2_curves = 0xFF02;
public static boolean isValid(int namedCurve)
{
return (namedCurve >= sect163k1 && namedCurve <= brainpoolP512r1)
|| (namedCurve >= arbitrary_explicit_prime_curves && namedCurve <= arbitrary_explicit_char2_curves);
}
public static boolean refersToASpecificNamedCurve(int namedCurve)
{
switch (namedCurve)
{
case arbitrary_explicit_prime_curves:
case arbitrary_explicit_char2_curves:
return false;
default:
return true;
}
}
}