forked from rpms/openssl
- Upload new upstream sources without manually hobbling them.
- Remove the hobbling script as it is redundant. It is now allowed to ship the sources of patented EC curves, however it is still made unavailable to use by compiling with the 'no-ec2m' Configure option. The additional forbidden curves such as P-160, P-192, wap-tls curves are manually removed by updating 0011-Remove-EC-curves.patch. - Enable Brainpool curves. - Apply the changes to ec_curve.c and ectest.c as a new patch 0010-Add-changes-to-ectest-and-eccurve.patch instead of replacing them. - Modify 0011-Remove-EC-curves.patch to allow Brainpool curves. - Modify 0011-Remove-EC-curves.patch to allow code under macro OPENSSL_NO_EC2M. Resolves: rhbz#2130618, rhbz#2188180 Signed-off-by: Sahana Prasad <sahana@redhat.com>
This commit is contained in:
parent
45cb3a6b4e
commit
05bbcc9920
1
.gitignore
vendored
1
.gitignore
vendored
@ -54,3 +54,4 @@ openssl-1.0.0a-usa.tar.bz2
|
|||||||
/openssl-3.0.0-hobbled.tar.xz
|
/openssl-3.0.0-hobbled.tar.xz
|
||||||
/openssl-3.0.1-hobbled.tar.xz
|
/openssl-3.0.1-hobbled.tar.xz
|
||||||
/openssl-3.0.7-hobbled.tar.gz
|
/openssl-3.0.7-hobbled.tar.gz
|
||||||
|
/openssl-3.0.7.tar.gz
|
||||||
|
1127
0010-Add-changes-to-ectest-and-eccurve.patch
Normal file
1127
0010-Add-changes-to-ectest-and-eccurve.patch
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
36
0013-skipped-tests-EC-curves.patch
Normal file
36
0013-skipped-tests-EC-curves.patch
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
diff -up ./test/recipes/15-test_ec.t.skip-tests ./test/recipes/15-test_ec.t
|
||||||
|
--- ./test/recipes/15-test_ec.t.skip-tests 2023-03-14 13:42:38.865508269 +0100
|
||||||
|
+++ ./test/recipes/15-test_ec.t 2023-03-14 13:43:36.237021635 +0100
|
||||||
|
@@ -90,7 +90,7 @@ subtest 'Ed448 conversions -- public key
|
||||||
|
|
||||||
|
subtest 'Check loading of fips and non-fips keys' => sub {
|
||||||
|
plan skip_all => "FIPS is disabled"
|
||||||
|
- if $no_fips;
|
||||||
|
+ if 1; #Red Hat specific, original value is $no_fips;
|
||||||
|
|
||||||
|
plan tests => 2;
|
||||||
|
|
||||||
|
diff -up ./test/recipes/65-test_cmp_protect.t.skip-tests ./test/recipes/65-test_cmp_protect.t
|
||||||
|
--- ./test/recipes/65-test_cmp_protect.t.skip-tests 2023-03-14 10:13:11.342056559 +0100
|
||||||
|
+++ ./test/recipes/65-test_cmp_protect.t 2023-03-14 10:14:42.643873496 +0100
|
||||||
|
@@ -27,7 +27,7 @@ plan skip_all => "This test is not suppo
|
||||||
|
plan skip_all => "This test is not supported in a shared library build on Windows"
|
||||||
|
if $^O eq 'MSWin32' && !disabled("shared");
|
||||||
|
|
||||||
|
-plan tests => 2 + ($no_fips ? 0 : 1); #fips test
|
||||||
|
+plan skip_all => 2 + ($no_fips ? 0 : 1); #fips test
|
||||||
|
|
||||||
|
my @basic_cmd = ("cmp_protect_test",
|
||||||
|
data_file("server.pem"),
|
||||||
|
diff -up ./test/recipes/65-test_cmp_vfy.t.skip-tests ./test/recipes/65-test_cmp_vfy.t
|
||||||
|
--- ./test/recipes/65-test_cmp_vfy.t.skip-tests 2023-03-14 10:13:38.106296042 +0100
|
||||||
|
+++ ./test/recipes/65-test_cmp_vfy.t 2023-03-14 10:16:56.496071178 +0100
|
||||||
|
@@ -27,7 +27,7 @@ plan skip_all => "This test is not suppo
|
||||||
|
plan skip_all => "This test is not supported in a no-ec build"
|
||||||
|
if disabled("ec");
|
||||||
|
|
||||||
|
-plan tests => 2 + ($no_fips ? 0 : 1); #fips test
|
||||||
|
+plan skip_all => 2 + ($no_fips ? 0 : 1); #fips test
|
||||||
|
|
||||||
|
my @basic_cmd = ("cmp_vfy_test",
|
||||||
|
data_file("server.crt"), data_file("client.crt"),
|
@ -434,9 +434,9 @@ diff -up openssl-3.0.1/test/recipes/30-test_evp.t.fipsmin3 openssl-3.0.1/test/re
|
|||||||
+ evpkdf_x942_des.txt
|
+ evpkdf_x942_des.txt
|
||||||
+ evpmac_cmac_des.txt
|
+ evpmac_cmac_des.txt
|
||||||
+ ) unless $no_des;
|
+ ) unless $no_des;
|
||||||
|
push @defltfiles, qw(evppkey_brainpool.txt) unless $no_ec;
|
||||||
push @defltfiles, qw(evppkey_sm2.txt) unless $no_sm2;
|
push @defltfiles, qw(evppkey_sm2.txt) unless $no_sm2;
|
||||||
|
|
||||||
plan tests =>
|
|
||||||
diff -up openssl-3.0.1/test/recipes/30-test_evp_data/evpmac_common.txt.fipsmin3 openssl-3.0.1/test/recipes/30-test_evp_data/evpmac_common.txt
|
diff -up openssl-3.0.1/test/recipes/30-test_evp_data/evpmac_common.txt.fipsmin3 openssl-3.0.1/test/recipes/30-test_evp_data/evpmac_common.txt
|
||||||
--- openssl-3.0.1/test/recipes/30-test_evp_data/evpmac_common.txt.fipsmin3 2022-05-05 14:46:32.721700697 +0200
|
--- openssl-3.0.1/test/recipes/30-test_evp_data/evpmac_common.txt.fipsmin3 2022-05-05 14:46:32.721700697 +0200
|
||||||
+++ openssl-3.0.1/test/recipes/30-test_evp_data/evpmac_common.txt 2022-05-05 14:51:40.205418897 +0200
|
+++ openssl-3.0.1/test/recipes/30-test_evp_data/evpmac_common.txt 2022-05-05 14:51:40.205418897 +0200
|
||||||
|
628
ec_curve.c
628
ec_curve.c
@ -1,628 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved.
|
|
||||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
|
||||||
* this file except in compliance with the License. You can obtain a copy
|
|
||||||
* in the file LICENSE in the source distribution or at
|
|
||||||
* https://www.openssl.org/source/license.html
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ECDSA low level APIs are deprecated for public use, but still ok for
|
|
||||||
* internal use.
|
|
||||||
*/
|
|
||||||
#include "internal/deprecated.h"
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include "ec_local.h"
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include <openssl/obj_mac.h>
|
|
||||||
#include <openssl/objects.h>
|
|
||||||
#include <openssl/opensslconf.h>
|
|
||||||
#include "internal/nelem.h"
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int field_type, /* either NID_X9_62_prime_field or
|
|
||||||
* NID_X9_62_characteristic_two_field */
|
|
||||||
seed_len, param_len;
|
|
||||||
unsigned int cofactor; /* promoted to BN_ULONG */
|
|
||||||
} EC_CURVE_DATA;
|
|
||||||
|
|
||||||
/* the nist prime curves */
|
|
||||||
static const struct {
|
|
||||||
EC_CURVE_DATA h;
|
|
||||||
unsigned char data[20 + 28 * 6];
|
|
||||||
} _EC_NIST_PRIME_224 = {
|
|
||||||
{
|
|
||||||
NID_X9_62_prime_field, 20, 28, 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* seed */
|
|
||||||
0xBD, 0x71, 0x34, 0x47, 0x99, 0xD5, 0xC7, 0xFC, 0xDC, 0x45, 0xB5, 0x9F,
|
|
||||||
0xA3, 0xB9, 0xAB, 0x8F, 0x6A, 0x94, 0x8B, 0xC5,
|
|
||||||
/* p */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x01,
|
|
||||||
/* a */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFE,
|
|
||||||
/* b */
|
|
||||||
0xB4, 0x05, 0x0A, 0x85, 0x0C, 0x04, 0xB3, 0xAB, 0xF5, 0x41, 0x32, 0x56,
|
|
||||||
0x50, 0x44, 0xB0, 0xB7, 0xD7, 0xBF, 0xD8, 0xBA, 0x27, 0x0B, 0x39, 0x43,
|
|
||||||
0x23, 0x55, 0xFF, 0xB4,
|
|
||||||
/* x */
|
|
||||||
0xB7, 0x0E, 0x0C, 0xBD, 0x6B, 0xB4, 0xBF, 0x7F, 0x32, 0x13, 0x90, 0xB9,
|
|
||||||
0x4A, 0x03, 0xC1, 0xD3, 0x56, 0xC2, 0x11, 0x22, 0x34, 0x32, 0x80, 0xD6,
|
|
||||||
0x11, 0x5C, 0x1D, 0x21,
|
|
||||||
/* y */
|
|
||||||
0xbd, 0x37, 0x63, 0x88, 0xb5, 0xf7, 0x23, 0xfb, 0x4c, 0x22, 0xdf, 0xe6,
|
|
||||||
0xcd, 0x43, 0x75, 0xa0, 0x5a, 0x07, 0x47, 0x64, 0x44, 0xd5, 0x81, 0x99,
|
|
||||||
0x85, 0x00, 0x7e, 0x34,
|
|
||||||
/* order */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0x16, 0xA2, 0xE0, 0xB8, 0xF0, 0x3E, 0x13, 0xDD, 0x29, 0x45,
|
|
||||||
0x5C, 0x5C, 0x2A, 0x3D
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct {
|
|
||||||
EC_CURVE_DATA h;
|
|
||||||
unsigned char data[20 + 48 * 6];
|
|
||||||
} _EC_NIST_PRIME_384 = {
|
|
||||||
{
|
|
||||||
NID_X9_62_prime_field, 20, 48, 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* seed */
|
|
||||||
0xA3, 0x35, 0x92, 0x6A, 0xA3, 0x19, 0xA2, 0x7A, 0x1D, 0x00, 0x89, 0x6A,
|
|
||||||
0x67, 0x73, 0xA4, 0x82, 0x7A, 0xCD, 0xAC, 0x73,
|
|
||||||
/* p */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
/* a */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC,
|
|
||||||
/* b */
|
|
||||||
0xB3, 0x31, 0x2F, 0xA7, 0xE2, 0x3E, 0xE7, 0xE4, 0x98, 0x8E, 0x05, 0x6B,
|
|
||||||
0xE3, 0xF8, 0x2D, 0x19, 0x18, 0x1D, 0x9C, 0x6E, 0xFE, 0x81, 0x41, 0x12,
|
|
||||||
0x03, 0x14, 0x08, 0x8F, 0x50, 0x13, 0x87, 0x5A, 0xC6, 0x56, 0x39, 0x8D,
|
|
||||||
0x8A, 0x2E, 0xD1, 0x9D, 0x2A, 0x85, 0xC8, 0xED, 0xD3, 0xEC, 0x2A, 0xEF,
|
|
||||||
/* x */
|
|
||||||
0xAA, 0x87, 0xCA, 0x22, 0xBE, 0x8B, 0x05, 0x37, 0x8E, 0xB1, 0xC7, 0x1E,
|
|
||||||
0xF3, 0x20, 0xAD, 0x74, 0x6E, 0x1D, 0x3B, 0x62, 0x8B, 0xA7, 0x9B, 0x98,
|
|
||||||
0x59, 0xF7, 0x41, 0xE0, 0x82, 0x54, 0x2A, 0x38, 0x55, 0x02, 0xF2, 0x5D,
|
|
||||||
0xBF, 0x55, 0x29, 0x6C, 0x3A, 0x54, 0x5E, 0x38, 0x72, 0x76, 0x0A, 0xB7,
|
|
||||||
/* y */
|
|
||||||
0x36, 0x17, 0xde, 0x4a, 0x96, 0x26, 0x2c, 0x6f, 0x5d, 0x9e, 0x98, 0xbf,
|
|
||||||
0x92, 0x92, 0xdc, 0x29, 0xf8, 0xf4, 0x1d, 0xbd, 0x28, 0x9a, 0x14, 0x7c,
|
|
||||||
0xe9, 0xda, 0x31, 0x13, 0xb5, 0xf0, 0xb8, 0xc0, 0x0a, 0x60, 0xb1, 0xce,
|
|
||||||
0x1d, 0x7e, 0x81, 0x9d, 0x7a, 0x43, 0x1d, 0x7c, 0x90, 0xea, 0x0e, 0x5f,
|
|
||||||
/* order */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xC7, 0x63, 0x4D, 0x81, 0xF4, 0x37, 0x2D, 0xDF, 0x58, 0x1A, 0x0D, 0xB2,
|
|
||||||
0x48, 0xB0, 0xA7, 0x7A, 0xEC, 0xEC, 0x19, 0x6A, 0xCC, 0xC5, 0x29, 0x73
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct {
|
|
||||||
EC_CURVE_DATA h;
|
|
||||||
unsigned char data[20 + 66 * 6];
|
|
||||||
} _EC_NIST_PRIME_521 = {
|
|
||||||
{
|
|
||||||
NID_X9_62_prime_field, 20, 66, 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* seed */
|
|
||||||
0xD0, 0x9E, 0x88, 0x00, 0x29, 0x1C, 0xB8, 0x53, 0x96, 0xCC, 0x67, 0x17,
|
|
||||||
0x39, 0x32, 0x84, 0xAA, 0xA0, 0xDA, 0x64, 0xBA,
|
|
||||||
/* p */
|
|
||||||
0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
/* a */
|
|
||||||
0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
|
|
||||||
/* b */
|
|
||||||
0x00, 0x51, 0x95, 0x3E, 0xB9, 0x61, 0x8E, 0x1C, 0x9A, 0x1F, 0x92, 0x9A,
|
|
||||||
0x21, 0xA0, 0xB6, 0x85, 0x40, 0xEE, 0xA2, 0xDA, 0x72, 0x5B, 0x99, 0xB3,
|
|
||||||
0x15, 0xF3, 0xB8, 0xB4, 0x89, 0x91, 0x8E, 0xF1, 0x09, 0xE1, 0x56, 0x19,
|
|
||||||
0x39, 0x51, 0xEC, 0x7E, 0x93, 0x7B, 0x16, 0x52, 0xC0, 0xBD, 0x3B, 0xB1,
|
|
||||||
0xBF, 0x07, 0x35, 0x73, 0xDF, 0x88, 0x3D, 0x2C, 0x34, 0xF1, 0xEF, 0x45,
|
|
||||||
0x1F, 0xD4, 0x6B, 0x50, 0x3F, 0x00,
|
|
||||||
/* x */
|
|
||||||
0x00, 0xC6, 0x85, 0x8E, 0x06, 0xB7, 0x04, 0x04, 0xE9, 0xCD, 0x9E, 0x3E,
|
|
||||||
0xCB, 0x66, 0x23, 0x95, 0xB4, 0x42, 0x9C, 0x64, 0x81, 0x39, 0x05, 0x3F,
|
|
||||||
0xB5, 0x21, 0xF8, 0x28, 0xAF, 0x60, 0x6B, 0x4D, 0x3D, 0xBA, 0xA1, 0x4B,
|
|
||||||
0x5E, 0x77, 0xEF, 0xE7, 0x59, 0x28, 0xFE, 0x1D, 0xC1, 0x27, 0xA2, 0xFF,
|
|
||||||
0xA8, 0xDE, 0x33, 0x48, 0xB3, 0xC1, 0x85, 0x6A, 0x42, 0x9B, 0xF9, 0x7E,
|
|
||||||
0x7E, 0x31, 0xC2, 0xE5, 0xBD, 0x66,
|
|
||||||
/* y */
|
|
||||||
0x01, 0x18, 0x39, 0x29, 0x6a, 0x78, 0x9a, 0x3b, 0xc0, 0x04, 0x5c, 0x8a,
|
|
||||||
0x5f, 0xb4, 0x2c, 0x7d, 0x1b, 0xd9, 0x98, 0xf5, 0x44, 0x49, 0x57, 0x9b,
|
|
||||||
0x44, 0x68, 0x17, 0xaf, 0xbd, 0x17, 0x27, 0x3e, 0x66, 0x2c, 0x97, 0xee,
|
|
||||||
0x72, 0x99, 0x5e, 0xf4, 0x26, 0x40, 0xc5, 0x50, 0xb9, 0x01, 0x3f, 0xad,
|
|
||||||
0x07, 0x61, 0x35, 0x3c, 0x70, 0x86, 0xa2, 0x72, 0xc2, 0x40, 0x88, 0xbe,
|
|
||||||
0x94, 0x76, 0x9f, 0xd1, 0x66, 0x50,
|
|
||||||
/* order */
|
|
||||||
0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0x51, 0x86,
|
|
||||||
0x87, 0x83, 0xBF, 0x2F, 0x96, 0x6B, 0x7F, 0xCC, 0x01, 0x48, 0xF7, 0x09,
|
|
||||||
0xA5, 0xD0, 0x3B, 0xB5, 0xC9, 0xB8, 0x89, 0x9C, 0x47, 0xAE, 0xBB, 0x6F,
|
|
||||||
0xB7, 0x1E, 0x91, 0x38, 0x64, 0x09
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct {
|
|
||||||
EC_CURVE_DATA h;
|
|
||||||
unsigned char data[20 + 32 * 6];
|
|
||||||
} _EC_X9_62_PRIME_256V1 = {
|
|
||||||
{
|
|
||||||
NID_X9_62_prime_field, 20, 32, 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* seed */
|
|
||||||
0xC4, 0x9D, 0x36, 0x08, 0x86, 0xE7, 0x04, 0x93, 0x6A, 0x66, 0x78, 0xE1,
|
|
||||||
0x13, 0x9D, 0x26, 0xB7, 0x81, 0x9F, 0x7E, 0x90,
|
|
||||||
/* p */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
/* a */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
|
|
||||||
/* b */
|
|
||||||
0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7, 0xB3, 0xEB, 0xBD, 0x55,
|
|
||||||
0x76, 0x98, 0x86, 0xBC, 0x65, 0x1D, 0x06, 0xB0, 0xCC, 0x53, 0xB0, 0xF6,
|
|
||||||
0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B,
|
|
||||||
/* x */
|
|
||||||
0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47, 0xF8, 0xBC, 0xE6, 0xE5,
|
|
||||||
0x63, 0xA4, 0x40, 0xF2, 0x77, 0x03, 0x7D, 0x81, 0x2D, 0xEB, 0x33, 0xA0,
|
|
||||||
0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96,
|
|
||||||
/* y */
|
|
||||||
0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b, 0x8e, 0xe7, 0xeb, 0x4a,
|
|
||||||
0x7c, 0x0f, 0x9e, 0x16, 0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce,
|
|
||||||
0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5,
|
|
||||||
/* order */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84,
|
|
||||||
0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct {
|
|
||||||
EC_CURVE_DATA h;
|
|
||||||
unsigned char data[0 + 32 * 6];
|
|
||||||
} _EC_SECG_PRIME_256K1 = {
|
|
||||||
{
|
|
||||||
NID_X9_62_prime_field, 0, 32, 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* no seed */
|
|
||||||
/* p */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0x2F,
|
|
||||||
/* a */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
/* b */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
|
|
||||||
/* x */
|
|
||||||
0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, 0x55, 0xA0, 0x62, 0x95,
|
|
||||||
0xCE, 0x87, 0x0B, 0x07, 0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9,
|
|
||||||
0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, 0x98,
|
|
||||||
/* y */
|
|
||||||
0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc,
|
|
||||||
0x0e, 0x11, 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19,
|
|
||||||
0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, 0xd4, 0xb8,
|
|
||||||
/* order */
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B,
|
|
||||||
0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _ec_list_element_st {
|
|
||||||
int nid;
|
|
||||||
const EC_CURVE_DATA *data;
|
|
||||||
const EC_METHOD *(*meth) (void);
|
|
||||||
const char *comment;
|
|
||||||
} ec_list_element;
|
|
||||||
|
|
||||||
#ifdef FIPS_MODULE
|
|
||||||
static const ec_list_element curve_list[] = {
|
|
||||||
/* prime field curves */
|
|
||||||
/* secg curves */
|
|
||||||
{NID_secp224r1, &_EC_NIST_PRIME_224.h,
|
|
||||||
# if !defined(OPENSSL_NO_EC_NISTP_64_GCC_128)
|
|
||||||
EC_GFp_nistp224_method,
|
|
||||||
# else
|
|
||||||
0,
|
|
||||||
# endif
|
|
||||||
"NIST/SECG curve over a 224 bit prime field"},
|
|
||||||
/* SECG secp256r1 is the same as X9.62 prime256v1 and hence omitted */
|
|
||||||
{NID_secp384r1, &_EC_NIST_PRIME_384.h,
|
|
||||||
# if defined(S390X_EC_ASM)
|
|
||||||
EC_GFp_s390x_nistp384_method,
|
|
||||||
# else
|
|
||||||
0,
|
|
||||||
# endif
|
|
||||||
"NIST/SECG curve over a 384 bit prime field"},
|
|
||||||
|
|
||||||
{NID_secp521r1, &_EC_NIST_PRIME_521.h,
|
|
||||||
# if defined(S390X_EC_ASM)
|
|
||||||
EC_GFp_s390x_nistp521_method,
|
|
||||||
# elif !defined(OPENSSL_NO_EC_NISTP_64_GCC_128)
|
|
||||||
EC_GFp_nistp521_method,
|
|
||||||
# else
|
|
||||||
0,
|
|
||||||
# endif
|
|
||||||
"NIST/SECG curve over a 521 bit prime field"},
|
|
||||||
|
|
||||||
/* X9.62 curves */
|
|
||||||
{NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h,
|
|
||||||
# if defined(ECP_NISTZ256_ASM)
|
|
||||||
EC_GFp_nistz256_method,
|
|
||||||
# elif defined(S390X_EC_ASM)
|
|
||||||
EC_GFp_s390x_nistp256_method,
|
|
||||||
# elif !defined(OPENSSL_NO_EC_NISTP_64_GCC_128)
|
|
||||||
EC_GFp_nistp256_method,
|
|
||||||
# else
|
|
||||||
0,
|
|
||||||
# endif
|
|
||||||
"X9.62/SECG curve over a 256 bit prime field"},
|
|
||||||
};
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static const ec_list_element curve_list[] = {
|
|
||||||
/* prime field curves */
|
|
||||||
/* secg curves */
|
|
||||||
# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
|
|
||||||
{NID_secp224r1, &_EC_NIST_PRIME_224.h, EC_GFp_nistp224_method,
|
|
||||||
"NIST/SECG curve over a 224 bit prime field"},
|
|
||||||
# else
|
|
||||||
{NID_secp224r1, &_EC_NIST_PRIME_224.h, 0,
|
|
||||||
"NIST/SECG curve over a 224 bit prime field"},
|
|
||||||
# endif
|
|
||||||
{NID_secp256k1, &_EC_SECG_PRIME_256K1.h, 0,
|
|
||||||
"SECG curve over a 256 bit prime field"},
|
|
||||||
/* SECG secp256r1 is the same as X9.62 prime256v1 and hence omitted */
|
|
||||||
{NID_secp384r1, &_EC_NIST_PRIME_384.h,
|
|
||||||
# if defined(S390X_EC_ASM)
|
|
||||||
EC_GFp_s390x_nistp384_method,
|
|
||||||
# else
|
|
||||||
0,
|
|
||||||
# endif
|
|
||||||
"NIST/SECG curve over a 384 bit prime field"},
|
|
||||||
{NID_secp521r1, &_EC_NIST_PRIME_521.h,
|
|
||||||
# if defined(S390X_EC_ASM)
|
|
||||||
EC_GFp_s390x_nistp521_method,
|
|
||||||
# elif !defined(OPENSSL_NO_EC_NISTP_64_GCC_128)
|
|
||||||
EC_GFp_nistp521_method,
|
|
||||||
# else
|
|
||||||
0,
|
|
||||||
# endif
|
|
||||||
"NIST/SECG curve over a 521 bit prime field"},
|
|
||||||
/* X9.62 curves */
|
|
||||||
{NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h,
|
|
||||||
# if defined(ECP_NISTZ256_ASM)
|
|
||||||
EC_GFp_nistz256_method,
|
|
||||||
# elif defined(S390X_EC_ASM)
|
|
||||||
EC_GFp_s390x_nistp256_method,
|
|
||||||
# elif !defined(OPENSSL_NO_EC_NISTP_64_GCC_128)
|
|
||||||
EC_GFp_nistp256_method,
|
|
||||||
# else
|
|
||||||
0,
|
|
||||||
# endif
|
|
||||||
"X9.62/SECG curve over a 256 bit prime field"},
|
|
||||||
};
|
|
||||||
#endif /* FIPS_MODULE */
|
|
||||||
|
|
||||||
#define curve_list_length OSSL_NELEM(curve_list)
|
|
||||||
|
|
||||||
static const ec_list_element *ec_curve_nid2curve(int nid)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
if (nid <= 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
for (i = 0; i < curve_list_length; i++) {
|
|
||||||
if (curve_list[i].nid == nid)
|
|
||||||
return &curve_list[i];
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static EC_GROUP *ec_group_new_from_data(OSSL_LIB_CTX *libctx,
|
|
||||||
const char *propq,
|
|
||||||
const ec_list_element curve)
|
|
||||||
{
|
|
||||||
EC_GROUP *group = NULL;
|
|
||||||
EC_POINT *P = NULL;
|
|
||||||
BN_CTX *ctx = NULL;
|
|
||||||
BIGNUM *p = NULL, *a = NULL, *b = NULL, *x = NULL, *y = NULL, *order =
|
|
||||||
NULL;
|
|
||||||
int ok = 0;
|
|
||||||
int seed_len, param_len;
|
|
||||||
const EC_METHOD *meth;
|
|
||||||
const EC_CURVE_DATA *data;
|
|
||||||
const unsigned char *params;
|
|
||||||
|
|
||||||
/* If no curve data curve method must handle everything */
|
|
||||||
if (curve.data == NULL)
|
|
||||||
return ossl_ec_group_new_ex(libctx, propq,
|
|
||||||
curve.meth != NULL ? curve.meth() : NULL);
|
|
||||||
|
|
||||||
if ((ctx = BN_CTX_new_ex(libctx)) == NULL) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_MALLOC_FAILURE);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
data = curve.data;
|
|
||||||
seed_len = data->seed_len;
|
|
||||||
param_len = data->param_len;
|
|
||||||
params = (const unsigned char *)(data + 1); /* skip header */
|
|
||||||
params += seed_len; /* skip seed */
|
|
||||||
|
|
||||||
if ((p = BN_bin2bn(params + 0 * param_len, param_len, NULL)) == NULL
|
|
||||||
|| (a = BN_bin2bn(params + 1 * param_len, param_len, NULL)) == NULL
|
|
||||||
|| (b = BN_bin2bn(params + 2 * param_len, param_len, NULL)) == NULL) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_BN_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (curve.meth != 0) {
|
|
||||||
meth = curve.meth();
|
|
||||||
if (((group = ossl_ec_group_new_ex(libctx, propq, meth)) == NULL) ||
|
|
||||||
(!(group->meth->group_set_curve(group, p, a, b, ctx)))) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_EC_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
} else if (data->field_type == NID_X9_62_prime_field) {
|
|
||||||
if ((group = EC_GROUP_new_curve_GFp(p, a, b, ctx)) == NULL) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_EC_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifndef OPENSSL_NO_EC2M
|
|
||||||
else { /* field_type ==
|
|
||||||
* NID_X9_62_characteristic_two_field */
|
|
||||||
|
|
||||||
if ((group = EC_GROUP_new_curve_GF2m(p, a, b, ctx)) == NULL) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_EC_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EC_GROUP_set_curve_name(group, curve.nid);
|
|
||||||
|
|
||||||
if ((P = EC_POINT_new(group)) == NULL) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_EC_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((x = BN_bin2bn(params + 3 * param_len, param_len, NULL)) == NULL
|
|
||||||
|| (y = BN_bin2bn(params + 4 * param_len, param_len, NULL)) == NULL) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_BN_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (!EC_POINT_set_affine_coordinates(group, P, x, y, ctx)) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_EC_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if ((order = BN_bin2bn(params + 5 * param_len, param_len, NULL)) == NULL
|
|
||||||
|| !BN_set_word(x, (BN_ULONG)data->cofactor)) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_BN_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (!EC_GROUP_set_generator(group, P, order, x)) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_EC_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (seed_len) {
|
|
||||||
if (!EC_GROUP_set_seed(group, params - seed_len, seed_len)) {
|
|
||||||
ERR_raise(ERR_LIB_EC, ERR_R_EC_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ok = 1;
|
|
||||||
err:
|
|
||||||
if (!ok) {
|
|
||||||
EC_GROUP_free(group);
|
|
||||||
group = NULL;
|
|
||||||
}
|
|
||||||
EC_POINT_free(P);
|
|
||||||
BN_CTX_free(ctx);
|
|
||||||
BN_free(p);
|
|
||||||
BN_free(a);
|
|
||||||
BN_free(b);
|
|
||||||
BN_free(order);
|
|
||||||
BN_free(x);
|
|
||||||
BN_free(y);
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
|
|
||||||
EC_GROUP *EC_GROUP_new_by_curve_name_ex(OSSL_LIB_CTX *libctx, const char *propq,
|
|
||||||
int nid)
|
|
||||||
{
|
|
||||||
EC_GROUP *ret = NULL;
|
|
||||||
const ec_list_element *curve;
|
|
||||||
|
|
||||||
if ((curve = ec_curve_nid2curve(nid)) == NULL
|
|
||||||
|| (ret = ec_group_new_from_data(libctx, propq, *curve)) == NULL) {
|
|
||||||
#ifndef FIPS_MODULE
|
|
||||||
ERR_raise_data(ERR_LIB_EC, EC_R_UNKNOWN_GROUP,
|
|
||||||
"name=%s", OBJ_nid2sn(nid));
|
|
||||||
#else
|
|
||||||
ERR_raise(ERR_LIB_EC, EC_R_UNKNOWN_GROUP);
|
|
||||||
#endif
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef FIPS_MODULE
|
|
||||||
EC_GROUP *EC_GROUP_new_by_curve_name(int nid)
|
|
||||||
{
|
|
||||||
return EC_GROUP_new_by_curve_name_ex(NULL, NULL, nid);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems)
|
|
||||||
{
|
|
||||||
size_t i, min;
|
|
||||||
|
|
||||||
if (r == NULL || nitems == 0)
|
|
||||||
return curve_list_length;
|
|
||||||
|
|
||||||
min = nitems < curve_list_length ? nitems : curve_list_length;
|
|
||||||
|
|
||||||
for (i = 0; i < min; i++) {
|
|
||||||
r[i].nid = curve_list[i].nid;
|
|
||||||
r[i].comment = curve_list[i].comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
return curve_list_length;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *EC_curve_nid2nist(int nid)
|
|
||||||
{
|
|
||||||
return ossl_ec_curve_nid2nist_int(nid);
|
|
||||||
}
|
|
||||||
|
|
||||||
int EC_curve_nist2nid(const char *name)
|
|
||||||
{
|
|
||||||
return ossl_ec_curve_nist2nid_int(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define NUM_BN_FIELDS 6
|
|
||||||
/*
|
|
||||||
* Validates EC domain parameter data for known named curves.
|
|
||||||
* This can be used when a curve is loaded explicitly (without a curve
|
|
||||||
* name) or to validate that domain parameters have not been modified.
|
|
||||||
*
|
|
||||||
* Returns: The nid associated with the found named curve, or NID_undef
|
|
||||||
* if not found. If there was an error it returns -1.
|
|
||||||
*/
|
|
||||||
int ossl_ec_curve_nid_from_params(const EC_GROUP *group, BN_CTX *ctx)
|
|
||||||
{
|
|
||||||
int ret = -1, nid, len, field_type, param_len;
|
|
||||||
size_t i, seed_len;
|
|
||||||
const unsigned char *seed, *params_seed, *params;
|
|
||||||
unsigned char *param_bytes = NULL;
|
|
||||||
const EC_CURVE_DATA *data;
|
|
||||||
const EC_POINT *generator = NULL;
|
|
||||||
const BIGNUM *cofactor = NULL;
|
|
||||||
/* An array of BIGNUMs for (p, a, b, x, y, order) */
|
|
||||||
BIGNUM *bn[NUM_BN_FIELDS] = {NULL, NULL, NULL, NULL, NULL, NULL};
|
|
||||||
|
|
||||||
/* Use the optional named curve nid as a search field */
|
|
||||||
nid = EC_GROUP_get_curve_name(group);
|
|
||||||
field_type = EC_GROUP_get_field_type(group);
|
|
||||||
seed_len = EC_GROUP_get_seed_len(group);
|
|
||||||
seed = EC_GROUP_get0_seed(group);
|
|
||||||
cofactor = EC_GROUP_get0_cofactor(group);
|
|
||||||
|
|
||||||
BN_CTX_start(ctx);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The built-in curves contains data fields (p, a, b, x, y, order) that are
|
|
||||||
* all zero-padded to be the same size. The size of the padding is
|
|
||||||
* determined by either the number of bytes in the field modulus (p) or the
|
|
||||||
* EC group order, whichever is larger.
|
|
||||||
*/
|
|
||||||
param_len = BN_num_bytes(group->order);
|
|
||||||
len = BN_num_bytes(group->field);
|
|
||||||
if (len > param_len)
|
|
||||||
param_len = len;
|
|
||||||
|
|
||||||
/* Allocate space to store the padded data for (p, a, b, x, y, order) */
|
|
||||||
param_bytes = OPENSSL_malloc(param_len * NUM_BN_FIELDS);
|
|
||||||
if (param_bytes == NULL)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
/* Create the bignums */
|
|
||||||
for (i = 0; i < NUM_BN_FIELDS; ++i) {
|
|
||||||
if ((bn[i] = BN_CTX_get(ctx)) == NULL)
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Fill in the bn array with the same values as the internal curves
|
|
||||||
* i.e. the values are p, a, b, x, y, order.
|
|
||||||
*/
|
|
||||||
/* Get p, a & b */
|
|
||||||
if (!(EC_GROUP_get_curve(group, bn[0], bn[1], bn[2], ctx)
|
|
||||||
&& ((generator = EC_GROUP_get0_generator(group)) != NULL)
|
|
||||||
/* Get x & y */
|
|
||||||
&& EC_POINT_get_affine_coordinates(group, generator, bn[3], bn[4], ctx)
|
|
||||||
/* Get order */
|
|
||||||
&& EC_GROUP_get_order(group, bn[5], ctx)))
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Convert the bignum array to bytes that are joined together to form
|
|
||||||
* a single buffer that contains data for all fields.
|
|
||||||
* (p, a, b, x, y, order) are all zero padded to be the same size.
|
|
||||||
*/
|
|
||||||
for (i = 0; i < NUM_BN_FIELDS; ++i) {
|
|
||||||
if (BN_bn2binpad(bn[i], ¶m_bytes[i*param_len], param_len) <= 0)
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < curve_list_length; i++) {
|
|
||||||
const ec_list_element curve = curve_list[i];
|
|
||||||
|
|
||||||
data = curve.data;
|
|
||||||
/* Get the raw order byte data */
|
|
||||||
params_seed = (const unsigned char *)(data + 1); /* skip header */
|
|
||||||
params = params_seed + data->seed_len;
|
|
||||||
|
|
||||||
/* Look for unique fields in the fixed curve data */
|
|
||||||
if (data->field_type == field_type
|
|
||||||
&& param_len == data->param_len
|
|
||||||
&& (nid <= 0 || nid == curve.nid)
|
|
||||||
/* check the optional cofactor (ignore if its zero) */
|
|
||||||
&& (BN_is_zero(cofactor)
|
|
||||||
|| BN_is_word(cofactor, (const BN_ULONG)curve.data->cofactor))
|
|
||||||
/* Check the optional seed (ignore if its not set) */
|
|
||||||
&& (data->seed_len == 0 || seed_len == 0
|
|
||||||
|| ((size_t)data->seed_len == seed_len
|
|
||||||
&& memcmp(params_seed, seed, seed_len) == 0))
|
|
||||||
/* Check that the groups params match the built-in curve params */
|
|
||||||
&& memcmp(param_bytes, params, param_len * NUM_BN_FIELDS)
|
|
||||||
== 0) {
|
|
||||||
ret = curve.nid;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Gets here if the group was not found */
|
|
||||||
ret = NID_undef;
|
|
||||||
end:
|
|
||||||
OPENSSL_free(param_bytes);
|
|
||||||
BN_CTX_end(ctx);
|
|
||||||
return ret;
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Quit out if anything fails.
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Clean out patent-or-otherwise-encumbered code.
|
|
||||||
# MDC-2: 4,908,861 13/03/2007 - expired, we do not remove it but do not enable it anyway
|
|
||||||
# IDEA: 5,214,703 07/01/2012 - expired, we do not remove it anymore
|
|
||||||
# RC5: 5,724,428 01/11/2015 - expired, we do not remove it anymore
|
|
||||||
# EC: ????????? ??/??/2020
|
|
||||||
# SRP: ????????? ??/??/2017 - expired, we do not remove it anymore
|
|
||||||
|
|
||||||
# Remove assembler portions of IDEA, MDC2, and RC5.
|
|
||||||
# (find crypto/rc5/asm -type f | xargs -r rm -fv)
|
|
||||||
|
|
||||||
for c in `find crypto/bn -name "*gf2m.c"`; do
|
|
||||||
echo Destroying $c
|
|
||||||
> $c
|
|
||||||
done
|
|
||||||
|
|
||||||
for c in `find crypto/ec -name "ec2*.c" -o -name "ec_curve.c"`; do
|
|
||||||
echo Destroying $c
|
|
||||||
> $c
|
|
||||||
done
|
|
||||||
|
|
||||||
for c in `find test -name "ectest.c"`; do
|
|
||||||
echo Destroying $c
|
|
||||||
> $c
|
|
||||||
done
|
|
||||||
|
|
||||||
for h in `find crypto ssl apps test -name "*.h"` ; do
|
|
||||||
echo Removing EC2M references from $h
|
|
||||||
cat $h | \
|
|
||||||
awk 'BEGIN {ech=1;} \
|
|
||||||
/^#[ \t]*ifndef.*NO_EC2M/ {ech--; next;} \
|
|
||||||
/^#[ \t]*if/ {if(ech < 1) ech--;} \
|
|
||||||
{if(ech>0) {;print $0};} \
|
|
||||||
/^#[ \t]*endif/ {if(ech < 1) ech++;}' > $h.hobbled && \
|
|
||||||
mv $h.hobbled $h
|
|
||||||
done
|
|
33
openssl.spec
33
openssl.spec
@ -29,21 +29,18 @@ print(string.sub(hash, 0, 16))
|
|||||||
Summary: Utilities from the general purpose cryptography library with TLS implementation
|
Summary: Utilities from the general purpose cryptography library with TLS implementation
|
||||||
Name: openssl
|
Name: openssl
|
||||||
Version: 3.0.7
|
Version: 3.0.7
|
||||||
Release: 15%{?dist}
|
Release: 16%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
# We have to remove certain patented algorithms from the openssl source
|
# We have to remove certain patented algorithms from the openssl source
|
||||||
# tarball with the hobble-openssl script which is included below.
|
# tarball with the hobble-openssl script which is included below.
|
||||||
# The original openssl upstream tarball cannot be shipped in the .src.rpm.
|
# The original openssl upstream tarball cannot be shipped in the .src.rpm.
|
||||||
Source: openssl-%{version}-hobbled.tar.gz
|
Source: openssl-%{version}.tar.gz
|
||||||
Source1: hobble-openssl
|
|
||||||
Source2: Makefile.certificate
|
Source2: Makefile.certificate
|
||||||
Source3: genpatches
|
Source3: genpatches
|
||||||
Source6: make-dummy-cert
|
Source6: make-dummy-cert
|
||||||
Source7: renew-dummy-cert
|
Source7: renew-dummy-cert
|
||||||
Source9: configuration-switch.h
|
Source9: configuration-switch.h
|
||||||
Source10: configuration-prefix.h
|
Source10: configuration-prefix.h
|
||||||
Source12: ec_curve.c
|
|
||||||
Source13: ectest.c
|
|
||||||
Source14: 0025-for-tests.patch
|
Source14: 0025-for-tests.patch
|
||||||
|
|
||||||
# Patches exported from source git
|
# Patches exported from source git
|
||||||
@ -65,11 +62,16 @@ Patch7: 0007-Add-support-for-PROFILE-SYSTEM-system-default-cipher.patch
|
|||||||
Patch8: 0008-Add-FIPS_mode-compatibility-macro.patch
|
Patch8: 0008-Add-FIPS_mode-compatibility-macro.patch
|
||||||
# Add check to see if fips flag is enabled in kernel
|
# Add check to see if fips flag is enabled in kernel
|
||||||
Patch9: 0009-Add-Kernel-FIPS-mode-flag-support.patch
|
Patch9: 0009-Add-Kernel-FIPS-mode-flag-support.patch
|
||||||
|
# Instead of replacing ectest.c and ec_curve.c, add the changes as a patch so
|
||||||
|
# that new modifications made to these files by upstream are not lost.
|
||||||
|
Patch10: 0010-Add-changes-to-ectest-and-eccurve.patch
|
||||||
# remove unsupported EC curves
|
# remove unsupported EC curves
|
||||||
Patch11: 0011-Remove-EC-curves.patch
|
Patch11: 0011-Remove-EC-curves.patch
|
||||||
# Disable explicit EC curves
|
# Disable explicit EC curves
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2066412
|
# https://bugzilla.redhat.com/show_bug.cgi?id=2066412
|
||||||
Patch12: 0012-Disable-explicit-ec.patch
|
Patch12: 0012-Disable-explicit-ec.patch
|
||||||
|
#Skipped tests from former 0011-Remove-EC-curves.patch
|
||||||
|
Patch13: 0013-skipped-tests-EC-curves.patch
|
||||||
# Instructions to load legacy provider in openssl.cnf
|
# Instructions to load legacy provider in openssl.cnf
|
||||||
Patch24: 0024-load-legacy-prov.patch
|
Patch24: 0024-load-legacy-prov.patch
|
||||||
# Tmp: test name change
|
# Tmp: test name change
|
||||||
@ -246,13 +248,6 @@ from other formats to the formats used by the OpenSSL toolkit.
|
|||||||
%prep
|
%prep
|
||||||
%autosetup -S git -n %{name}-%{version}
|
%autosetup -S git -n %{name}-%{version}
|
||||||
|
|
||||||
# The hobble_openssl is called here redundantly, just to be sure.
|
|
||||||
# The tarball has already the sources removed.
|
|
||||||
%{SOURCE1} > /dev/null
|
|
||||||
|
|
||||||
cp %{SOURCE12} crypto/ec/
|
|
||||||
cp %{SOURCE13} test/
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# Figure out which flags we want to use.
|
# Figure out which flags we want to use.
|
||||||
# default
|
# default
|
||||||
@ -520,6 +515,20 @@ install -m644 %{SOURCE9} \
|
|||||||
%ldconfig_scriptlets libs
|
%ldconfig_scriptlets libs
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue May 02 2023 Sahana Prasad <sahana@redhat.com> - 1:3.0.7-16
|
||||||
|
- Upload new upstream sources without manually hobbling them.
|
||||||
|
- Remove the hobbling script as it is redundant. It is now allowed to ship
|
||||||
|
the sources of patented EC curves, however it is still made unavailable to use
|
||||||
|
by compiling with the 'no-ec2m' Configure option. The additional forbidden
|
||||||
|
curves such as P-160, P-192, wap-tls curves are manually removed by updating
|
||||||
|
0011-Remove-EC-curves.patch.
|
||||||
|
- Enable Brainpool curves.
|
||||||
|
- Apply the changes to ec_curve.c and ectest.c as a new patch
|
||||||
|
0010-Add-changes-to-ectest-and-eccurve.patch instead of replacing them.
|
||||||
|
- Modify 0011-Remove-EC-curves.patch to allow Brainpool curves.
|
||||||
|
- Modify 0011-Remove-EC-curves.patch to allow code under macro OPENSSL_NO_EC2M.
|
||||||
|
Resolves: rhbz#2130618, rhbz#2188180
|
||||||
|
|
||||||
* Fri Apr 28 2023 Dmitry Belyavskiy <dbelyavs@redhat.com> - 1:3.0.7-15
|
* Fri Apr 28 2023 Dmitry Belyavskiy <dbelyavs@redhat.com> - 1:3.0.7-15
|
||||||
- Backport implicit rejection for RSA PKCS#1 v1.5 encryption
|
- Backport implicit rejection for RSA PKCS#1 v1.5 encryption
|
||||||
Resolves: rhbz#2153471
|
Resolves: rhbz#2153471
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (openssl-3.0.7-hobbled.tar.gz) = 1aea183b0b6650d9d5e7ba87b613bb1692c71720b0e75377b40db336b40bad780f7e8ae8dfb9f60841eeb4381f4b79c4c5043210c96e7cb51f90791b80c8285e
|
SHA512 (openssl-3.0.7.tar.gz) = 6c2bcd1cd4b499e074e006150dda906980df505679d8e9d988ae93aa61ee6f8c23c0fa369e2edc1e1a743d7bec133044af11d5ed57633b631ae479feb59e3424
|
||||||
|
Loading…
Reference in New Issue
Block a user