diff options
author | miod <> | 2014-05-01 11:29:18 +0000 |
---|---|---|
committer | miod <> | 2014-05-01 11:29:18 +0000 |
commit | a4b876b424f6cd1cc57b8a19f1d0a213cf99013c (patch) | |
tree | f108f3d039d9bca9110b834a40913a6167263c52 | |
parent | 635e6748cf54c09f2dda8a991718ce3200f92820 (diff) | |
download | openbsd-a4b876b424f6cd1cc57b8a19f1d0a213cf99013c.tar.gz openbsd-a4b876b424f6cd1cc57b8a19f1d0a213cf99013c.tar.bz2 openbsd-a4b876b424f6cd1cc57b8a19f1d0a213cf99013c.zip |
Add support for the french ANSSI FRP256v1 elliptic curve.
While not to be considered a good choice of elliptic curve (refer to
http://safecurves.cr.yp.to/ for more details), it is nevertheless deemed a
good decision to allow developers with requirements to use such a curve,
to be able to do this via a crypto library allowing for much better choices
to be made, without having to change (much of) their code to get better crypto.
ok beck@ deraadt@
-rw-r--r-- | src/lib/libcrypto/ec/ec_curve.c | 34 | ||||
-rw-r--r-- | src/lib/libcrypto/objects/objects.txt | 2 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/ec/ec_curve.c | 34 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/objects/objects.txt | 2 |
4 files changed, 70 insertions, 2 deletions
diff --git a/src/lib/libcrypto/ec/ec_curve.c b/src/lib/libcrypto/ec/ec_curve.c index 372a533615..23bc3ab94e 100644 --- a/src/lib/libcrypto/ec/ec_curve.c +++ b/src/lib/libcrypto/ec/ec_curve.c | |||
@@ -2250,6 +2250,36 @@ static const struct { EC_CURVE_DATA h; unsigned char data[0+64*6]; } | |||
2250 | 0x9C,0xA9,0x00,0x69 } | 2250 | 0x9C,0xA9,0x00,0x69 } |
2251 | }; | 2251 | }; |
2252 | 2252 | ||
2253 | static const struct { EC_CURVE_DATA h; unsigned char data[0+32*6]; } | ||
2254 | _EC_FRP256v1 = { | ||
2255 | { NID_X9_62_prime_field, 0,32,1 }, | ||
2256 | { /* no seed */ | ||
2257 | 0xF1,0xFD,0x17,0x8C,0x0B,0x3A,0xD5,0x8F,0x10,0x12, /* p */ | ||
2258 | 0x6D,0xE8,0xCE,0x42,0x43,0x5B,0x39,0x61,0xAD,0xBC, | ||
2259 | 0xAB,0xC8,0xCA,0x6D,0xE8,0xFC,0xF3,0x53,0xD8,0x6E, | ||
2260 | 0x9C,0x03, | ||
2261 | 0xF1,0xFD,0x17,0x8C,0x0B,0x3A,0xD5,0x8F,0x10,0x12, /* a */ | ||
2262 | 0x6D,0xE8,0xCE,0x42,0x43,0x5B,0x39,0x61,0xAD,0xBC, | ||
2263 | 0xAB,0xC8,0xCA,0x6D,0xE8,0xFC,0xF3,0x53,0xD8,0x6E, | ||
2264 | 0x9C,0x00, | ||
2265 | 0xEE,0x35,0x3F,0xCA,0x54,0x28,0xA9,0x30,0x0D,0x4A, /* b */ | ||
2266 | 0xBA,0x75,0x4A,0x44,0xC0,0x0F,0xDF,0xEC,0x0C,0x9A, | ||
2267 | 0xE4,0xB1,0xA1,0x80,0x30,0x75,0xED,0x96,0x7B,0x7B, | ||
2268 | 0xB7,0x3F, | ||
2269 | 0xB6,0xB3,0xD4,0xC3,0x56,0xC1,0x39,0xEB,0x31,0x18, /* x */ | ||
2270 | 0x3D,0x47,0x49,0xD4,0x23,0x95,0x8C,0x27,0xD2,0xDC, | ||
2271 | 0xAF,0x98,0xB7,0x01,0x64,0xC9,0x7A,0x2D,0xD9,0x8F, | ||
2272 | 0x5C,0xFF, | ||
2273 | 0x61,0x42,0xE0,0xF7,0xC8,0xB2,0x04,0x91,0x1F,0x92, /* y */ | ||
2274 | 0x71,0xF0,0xF3,0xEC,0xEF,0x8C,0x27,0x01,0xC3,0x07, | ||
2275 | 0xE8,0xE4,0xC9,0xE1,0x83,0x11,0x5A,0x15,0x54,0x06, | ||
2276 | 0x2C,0xFB, | ||
2277 | 0xF1,0xFD,0x17,0x8C,0x0B,0x3A,0xD5,0x8F,0x10,0x12, /* order */ | ||
2278 | 0x6D,0xE8,0xCE,0x42,0x43,0x5B,0x53,0xDC,0x67,0xE1, | ||
2279 | 0x40,0xD2,0xBF,0x94,0x1F,0xFD,0xD4,0x59,0xC6,0xD6, | ||
2280 | 0x55,0xE1 } | ||
2281 | }; | ||
2282 | |||
2253 | typedef struct _ec_list_element_st { | 2283 | typedef struct _ec_list_element_st { |
2254 | int nid; | 2284 | int nid; |
2255 | const EC_CURVE_DATA *data; | 2285 | const EC_CURVE_DATA *data; |
@@ -2370,7 +2400,9 @@ static const ec_list_element curve_list[] = { | |||
2370 | { NID_brainpoolP384r1, &_EC_brainpoolP384r1.h, 0, "RFC 5639 curve over a 384 bit prime field"}, | 2400 | { NID_brainpoolP384r1, &_EC_brainpoolP384r1.h, 0, "RFC 5639 curve over a 384 bit prime field"}, |
2371 | { NID_brainpoolP384t1, &_EC_brainpoolP384t1.h, 0, "RFC 5639 curve over a 384 bit prime field"}, | 2401 | { NID_brainpoolP384t1, &_EC_brainpoolP384t1.h, 0, "RFC 5639 curve over a 384 bit prime field"}, |
2372 | { NID_brainpoolP512r1, &_EC_brainpoolP512r1.h, 0, "RFC 5639 curve over a 512 bit prime field"}, | 2402 | { NID_brainpoolP512r1, &_EC_brainpoolP512r1.h, 0, "RFC 5639 curve over a 512 bit prime field"}, |
2373 | { NID_brainpoolP512t1, &_EC_brainpoolP512t1.h, 0, "RFC 5639 curve over a 512 bit prime field"} | 2403 | { NID_brainpoolP512t1, &_EC_brainpoolP512t1.h, 0, "RFC 5639 curve over a 512 bit prime field"}, |
2404 | /* ANSSI */ | ||
2405 | { NID_FRP256v1, &_EC_FRP256v1.h, 0, "FRP256v1"} | ||
2374 | }; | 2406 | }; |
2375 | 2407 | ||
2376 | #define curve_list_length (sizeof(curve_list)/sizeof(ec_list_element)) | 2408 | #define curve_list_length (sizeof(curve_list)/sizeof(ec_list_element)) |
diff --git a/src/lib/libcrypto/objects/objects.txt b/src/lib/libcrypto/objects/objects.txt index 04939e7ead..487e079255 100644 --- a/src/lib/libcrypto/objects/objects.txt +++ b/src/lib/libcrypto/objects/objects.txt | |||
@@ -1307,3 +1307,5 @@ brainpool 1 11 : brainpoolP384r1 | |||
1307 | brainpool 1 12 : brainpoolP384t1 | 1307 | brainpool 1 12 : brainpoolP384t1 |
1308 | brainpool 1 13 : brainpoolP512r1 | 1308 | brainpool 1 13 : brainpoolP512r1 |
1309 | brainpool 1 14 : brainpoolP512t1 | 1309 | brainpool 1 14 : brainpoolP512t1 |
1310 | |||
1311 | 1 2 250 1 223 101 256 1 : FRP256v1 | ||
diff --git a/src/lib/libssl/src/crypto/ec/ec_curve.c b/src/lib/libssl/src/crypto/ec/ec_curve.c index 372a533615..23bc3ab94e 100644 --- a/src/lib/libssl/src/crypto/ec/ec_curve.c +++ b/src/lib/libssl/src/crypto/ec/ec_curve.c | |||
@@ -2250,6 +2250,36 @@ static const struct { EC_CURVE_DATA h; unsigned char data[0+64*6]; } | |||
2250 | 0x9C,0xA9,0x00,0x69 } | 2250 | 0x9C,0xA9,0x00,0x69 } |
2251 | }; | 2251 | }; |
2252 | 2252 | ||
2253 | static const struct { EC_CURVE_DATA h; unsigned char data[0+32*6]; } | ||
2254 | _EC_FRP256v1 = { | ||
2255 | { NID_X9_62_prime_field, 0,32,1 }, | ||
2256 | { /* no seed */ | ||
2257 | 0xF1,0xFD,0x17,0x8C,0x0B,0x3A,0xD5,0x8F,0x10,0x12, /* p */ | ||
2258 | 0x6D,0xE8,0xCE,0x42,0x43,0x5B,0x39,0x61,0xAD,0xBC, | ||
2259 | 0xAB,0xC8,0xCA,0x6D,0xE8,0xFC,0xF3,0x53,0xD8,0x6E, | ||
2260 | 0x9C,0x03, | ||
2261 | 0xF1,0xFD,0x17,0x8C,0x0B,0x3A,0xD5,0x8F,0x10,0x12, /* a */ | ||
2262 | 0x6D,0xE8,0xCE,0x42,0x43,0x5B,0x39,0x61,0xAD,0xBC, | ||
2263 | 0xAB,0xC8,0xCA,0x6D,0xE8,0xFC,0xF3,0x53,0xD8,0x6E, | ||
2264 | 0x9C,0x00, | ||
2265 | 0xEE,0x35,0x3F,0xCA,0x54,0x28,0xA9,0x30,0x0D,0x4A, /* b */ | ||
2266 | 0xBA,0x75,0x4A,0x44,0xC0,0x0F,0xDF,0xEC,0x0C,0x9A, | ||
2267 | 0xE4,0xB1,0xA1,0x80,0x30,0x75,0xED,0x96,0x7B,0x7B, | ||
2268 | 0xB7,0x3F, | ||
2269 | 0xB6,0xB3,0xD4,0xC3,0x56,0xC1,0x39,0xEB,0x31,0x18, /* x */ | ||
2270 | 0x3D,0x47,0x49,0xD4,0x23,0x95,0x8C,0x27,0xD2,0xDC, | ||
2271 | 0xAF,0x98,0xB7,0x01,0x64,0xC9,0x7A,0x2D,0xD9,0x8F, | ||
2272 | 0x5C,0xFF, | ||
2273 | 0x61,0x42,0xE0,0xF7,0xC8,0xB2,0x04,0x91,0x1F,0x92, /* y */ | ||
2274 | 0x71,0xF0,0xF3,0xEC,0xEF,0x8C,0x27,0x01,0xC3,0x07, | ||
2275 | 0xE8,0xE4,0xC9,0xE1,0x83,0x11,0x5A,0x15,0x54,0x06, | ||
2276 | 0x2C,0xFB, | ||
2277 | 0xF1,0xFD,0x17,0x8C,0x0B,0x3A,0xD5,0x8F,0x10,0x12, /* order */ | ||
2278 | 0x6D,0xE8,0xCE,0x42,0x43,0x5B,0x53,0xDC,0x67,0xE1, | ||
2279 | 0x40,0xD2,0xBF,0x94,0x1F,0xFD,0xD4,0x59,0xC6,0xD6, | ||
2280 | 0x55,0xE1 } | ||
2281 | }; | ||
2282 | |||
2253 | typedef struct _ec_list_element_st { | 2283 | typedef struct _ec_list_element_st { |
2254 | int nid; | 2284 | int nid; |
2255 | const EC_CURVE_DATA *data; | 2285 | const EC_CURVE_DATA *data; |
@@ -2370,7 +2400,9 @@ static const ec_list_element curve_list[] = { | |||
2370 | { NID_brainpoolP384r1, &_EC_brainpoolP384r1.h, 0, "RFC 5639 curve over a 384 bit prime field"}, | 2400 | { NID_brainpoolP384r1, &_EC_brainpoolP384r1.h, 0, "RFC 5639 curve over a 384 bit prime field"}, |
2371 | { NID_brainpoolP384t1, &_EC_brainpoolP384t1.h, 0, "RFC 5639 curve over a 384 bit prime field"}, | 2401 | { NID_brainpoolP384t1, &_EC_brainpoolP384t1.h, 0, "RFC 5639 curve over a 384 bit prime field"}, |
2372 | { NID_brainpoolP512r1, &_EC_brainpoolP512r1.h, 0, "RFC 5639 curve over a 512 bit prime field"}, | 2402 | { NID_brainpoolP512r1, &_EC_brainpoolP512r1.h, 0, "RFC 5639 curve over a 512 bit prime field"}, |
2373 | { NID_brainpoolP512t1, &_EC_brainpoolP512t1.h, 0, "RFC 5639 curve over a 512 bit prime field"} | 2403 | { NID_brainpoolP512t1, &_EC_brainpoolP512t1.h, 0, "RFC 5639 curve over a 512 bit prime field"}, |
2404 | /* ANSSI */ | ||
2405 | { NID_FRP256v1, &_EC_FRP256v1.h, 0, "FRP256v1"} | ||
2374 | }; | 2406 | }; |
2375 | 2407 | ||
2376 | #define curve_list_length (sizeof(curve_list)/sizeof(ec_list_element)) | 2408 | #define curve_list_length (sizeof(curve_list)/sizeof(ec_list_element)) |
diff --git a/src/lib/libssl/src/crypto/objects/objects.txt b/src/lib/libssl/src/crypto/objects/objects.txt index 04939e7ead..487e079255 100644 --- a/src/lib/libssl/src/crypto/objects/objects.txt +++ b/src/lib/libssl/src/crypto/objects/objects.txt | |||
@@ -1307,3 +1307,5 @@ brainpool 1 11 : brainpoolP384r1 | |||
1307 | brainpool 1 12 : brainpoolP384t1 | 1307 | brainpool 1 12 : brainpoolP384t1 |
1308 | brainpool 1 13 : brainpoolP512r1 | 1308 | brainpool 1 13 : brainpoolP512r1 |
1309 | brainpool 1 14 : brainpoolP512t1 | 1309 | brainpool 1 14 : brainpoolP512t1 |
1310 | |||
1311 | 1 2 250 1 223 101 256 1 : FRP256v1 | ||