aboutsummaryrefslogtreecommitdiff
path: root/website/static/security/patches/SA-25:08/openssl-15.patch
diff options
context:
space:
mode:
Diffstat (limited to 'website/static/security/patches/SA-25:08/openssl-15.patch')
-rw-r--r--website/static/security/patches/SA-25:08/openssl-15.patch173
1 files changed, 173 insertions, 0 deletions
diff --git a/website/static/security/patches/SA-25:08/openssl-15.patch b/website/static/security/patches/SA-25:08/openssl-15.patch
new file mode 100644
index 0000000000..f4678a9583
--- /dev/null
+++ b/website/static/security/patches/SA-25:08/openssl-15.patch
@@ -0,0 +1,173 @@
+--- crypto/openssl/crypto/cms/cms_pwri.c.orig
++++ crypto/openssl/crypto/cms/cms_pwri.c
+@@ -242,7 +242,7 @@
+ /* Check byte failure */
+ goto err;
+ }
+- if (inlen < (size_t)(tmp[0] - 4)) {
++ if (inlen < 4 + (size_t)tmp[0]) {
+ /* Invalid length value */
+ goto err;
+ }
+--- crypto/openssl/crypto/ec/ecp_sm2p256.c.orig
++++ crypto/openssl/crypto/ec/ecp_sm2p256.c
+@@ -56,10 +56,6 @@
+ 0xffffffffffffffff, 0xffffffff00000000,
+ 0xffffffffffffffff, 0xfffffffeffffffff
+ };
+-ALIGN32 static const BN_ULONG def_ord[P256_LIMBS] = {
+- 0x53bbf40939d54123, 0x7203df6b21c6052b,
+- 0xffffffffffffffff, 0xfffffffeffffffff
+-};
+
+ ALIGN32 static const BN_ULONG ONE[P256_LIMBS] = {1, 0, 0, 0};
+
+@@ -177,13 +173,6 @@
+ BN_MOD_INV(out, in, ecp_sm2p256_div_by_2, ecp_sm2p256_sub, def_p);
+ }
+
+-/* Modular inverse mod order |out| = |in|^(-1) % |ord|. */
+-static ossl_inline void ecp_sm2p256_mod_ord_inverse(BN_ULONG* out,
+- const BN_ULONG* in) {
+- BN_MOD_INV(out, in, ecp_sm2p256_div_by_2_mod_ord, ecp_sm2p256_sub_mod_ord,
+- def_ord);
+-}
+-
+ /* Point double: R <- P + P */
+ static void ecp_sm2p256_point_double(P256_POINT *R, const P256_POINT *P)
+ {
+@@ -454,52 +443,6 @@
+ }
+ #endif
+
+-/*
+- * Convert Jacobian coordinate point into affine coordinate (x,y)
+- */
+-static int ecp_sm2p256_get_affine(const EC_GROUP *group,
+- const EC_POINT *point,
+- BIGNUM *x, BIGNUM *y, BN_CTX *ctx)
+-{
+- ALIGN32 BN_ULONG z_inv2[P256_LIMBS] = {0};
+- ALIGN32 BN_ULONG z_inv3[P256_LIMBS] = {0};
+- ALIGN32 BN_ULONG x_aff[P256_LIMBS] = {0};
+- ALIGN32 BN_ULONG y_aff[P256_LIMBS] = {0};
+- ALIGN32 BN_ULONG point_x[P256_LIMBS] = {0};
+- ALIGN32 BN_ULONG point_y[P256_LIMBS] = {0};
+- ALIGN32 BN_ULONG point_z[P256_LIMBS] = {0};
+-
+- if (EC_POINT_is_at_infinity(group, point)) {
+- ECerr(ERR_LIB_EC, EC_R_POINT_AT_INFINITY);
+- return 0;
+- }
+-
+- if (ecp_sm2p256_bignum_field_elem(point_x, point->X) <= 0
+- || ecp_sm2p256_bignum_field_elem(point_y, point->Y) <= 0
+- || ecp_sm2p256_bignum_field_elem(point_z, point->Z) <= 0) {
+- ECerr(ERR_LIB_EC, EC_R_COORDINATES_OUT_OF_RANGE);
+- return 0;
+- }
+-
+- ecp_sm2p256_mod_inverse(z_inv3, point_z);
+- ecp_sm2p256_sqr(z_inv2, z_inv3);
+-
+- if (x != NULL) {
+- ecp_sm2p256_mul(x_aff, point_x, z_inv2);
+- if (!bn_set_words(x, x_aff, P256_LIMBS))
+- return 0;
+- }
+-
+- if (y != NULL) {
+- ecp_sm2p256_mul(z_inv3, z_inv3, z_inv2);
+- ecp_sm2p256_mul(y_aff, point_y, z_inv3);
+- if (!bn_set_words(y, y_aff, P256_LIMBS))
+- return 0;
+- }
+-
+- return 1;
+-}
+-
+ /* r = sum(scalar[i]*point[i]) */
+ static int ecp_sm2p256_windowed_mul(const EC_GROUP *group,
+ P256_POINT *r,
+@@ -689,44 +632,6 @@
+ return 1;
+ }
+
+-static int ecp_sm2p256_inv_mod_ord(const EC_GROUP *group, BIGNUM *r,
+- const BIGNUM *x, BN_CTX *ctx)
+-{
+- int ret = 0;
+- ALIGN32 BN_ULONG t[P256_LIMBS] = {0};
+- ALIGN32 BN_ULONG out[P256_LIMBS] = {0};
+-
+- if (bn_wexpand(r, P256_LIMBS) == NULL) {
+- ECerr(ERR_LIB_EC, ERR_R_BN_LIB);
+- goto err;
+- }
+-
+- if ((BN_num_bits(x) > 256) || BN_is_negative(x)) {
+- BIGNUM *tmp;
+-
+- if ((tmp = BN_CTX_get(ctx)) == NULL
+- || !BN_nnmod(tmp, x, group->order, ctx)) {
+- ECerr(ERR_LIB_EC, ERR_R_BN_LIB);
+- goto err;
+- }
+- x = tmp;
+- }
+-
+- if (!ecp_sm2p256_bignum_field_elem(t, x)) {
+- ECerr(ERR_LIB_EC, EC_R_COORDINATES_OUT_OF_RANGE);
+- goto err;
+- }
+-
+- ecp_sm2p256_mod_ord_inverse(out, t);
+-
+- if (!bn_set_words(r, out, P256_LIMBS))
+- goto err;
+-
+- ret = 1;
+-err:
+- return ret;
+-}
+-
+ const EC_METHOD *EC_GFp_sm2p256_method(void)
+ {
+ static const EC_METHOD ret = {
+@@ -747,7 +652,7 @@
+ ossl_ec_GFp_simple_point_copy,
+ ossl_ec_GFp_simple_point_set_to_infinity,
+ ossl_ec_GFp_simple_point_set_affine_coordinates,
+- ecp_sm2p256_get_affine,
++ ossl_ec_GFp_simple_point_get_affine_coordinates,
+ 0, 0, 0,
+ ossl_ec_GFp_simple_add,
+ ossl_ec_GFp_simple_dbl,
+@@ -763,7 +668,7 @@
+ ecp_sm2p256_field_mul,
+ ecp_sm2p256_field_sqr,
+ 0 /* field_div */,
+- 0 /* field_inv */,
++ ossl_ec_GFp_simple_field_inv,
+ 0 /* field_encode */,
+ 0 /* field_decode */,
+ 0 /* field_set_to_one */,
+@@ -779,7 +684,7 @@
+ ossl_ecdsa_simple_sign_setup,
+ ossl_ecdsa_simple_sign_sig,
+ ossl_ecdsa_simple_verify_sig,
+- ecp_sm2p256_inv_mod_ord,
++ 0, /* use constant‑time fallback for inverse mod order */
+ 0, /* blind_coordinates */
+ 0, /* ladder_pre */
+ 0, /* ladder_step */
+--- crypto/openssl/crypto/http/http_lib.c.orig
++++ crypto/openssl/crypto/http/http_lib.c
+@@ -263,6 +263,7 @@
+ /* strip leading '[' and trailing ']' from escaped IPv6 address */
+ sl -= 2;
+ strncpy(host, server + 1, sl);
++ host[sl] = '\0';
+ server = host;
+ }
+