public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/openssl] rebase_40beta: Refactor embedded mac verification in FIPS module
Date: Tue, 09 Jun 2026 12:45:06 GMT [thread overview]
Message-ID: <178100910690.1.23737405291868163.rpms-openssl-500ad3d30083@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/openssl
Branch : rebase_40beta
Commit : 500ad3d30083818715ca42b77f4722594cc2edab
Author : Dmitry Belyavskiy <dbelyavs@redhat.com>
Date : 2023-01-05T11:30:00+01:00
Stats : +49/-64 in 2 file(s)
URL : https://src.fedoraproject.org/rpms/openssl/c/500ad3d30083818715ca42b77f4722594cc2edab?branch=rebase_40beta
Log:
Refactor embedded mac verification in FIPS module
Resolves: rhbz#2156045
---
diff --git a/0033-FIPS-embed-hmac.patch b/0033-FIPS-embed-hmac.patch
index c788072..484a75e 100644
--- a/0033-FIPS-embed-hmac.patch
+++ b/0033-FIPS-embed-hmac.patch
@@ -1,7 +1,7 @@
-diff -up openssl-3.0.0/providers/fips/self_test.c.embed-hmac openssl-3.0.0/providers/fips/self_test.c
---- openssl-3.0.0/providers/fips/self_test.c.embed-hmac 2021-11-16 13:57:05.127171056 +0100
-+++ openssl-3.0.0/providers/fips/self_test.c 2021-11-16 14:07:21.963412455 +0100
-@@ -171,11 +171,27 @@ DEP_FINI_ATTRIBUTE void cleanup(void)
+diff -up openssl-3.0.7/providers/fips/self_test.c.embed-hmac openssl-3.0.7/providers/fips/self_test.c
+--- openssl-3.0.7/providers/fips/self_test.c.embed-hmac 2023-01-05 10:03:44.864869710 +0100
++++ openssl-3.0.7/providers/fips/self_test.c 2023-01-05 10:15:17.041606472 +0100
+@@ -172,11 +172,27 @@ DEP_FINI_ATTRIBUTE void cleanup(void)
}
#endif
@@ -29,13 +29,7 @@ diff -up openssl-3.0.0/providers/fips/self_test.c.embed-hmac openssl-3.0.0/provi
static int verify_integrity(OSSL_CORE_BIO *bio, OSSL_FUNC_BIO_read_ex_fn read_ex_cb,
unsigned char *expected, size_t expected_len,
OSSL_LIB_CTX *libctx, OSSL_SELF_TEST *ev,
-@@ -183,14 +199,26 @@ static int verify_integrity(OSSL_CORE_BI
- {
- int ret = 0, status;
- unsigned char out[MAX_MD_SIZE];
-- unsigned char buf[INTEGRITY_BUF_SIZE];
-+ unsigned char buf[INTEGRITY_BUF_SIZE+HMAC_LEN];
- size_t bytes_read = 0, out_len = 0;
+@@ -189,9 +205,20 @@ static int verify_integrity(OSSL_CORE_BI
EVP_MAC *mac = NULL;
EVP_MAC_CTX *ctx = NULL;
OSSL_PARAM params[2], *p = params;
@@ -44,7 +38,6 @@ diff -up openssl-3.0.0/providers/fips/self_test.c.embed-hmac openssl-3.0.0/provi
+ struct link_map *lm = NULL;
+ unsigned long paddr;
+ unsigned long off = 0;
-+ int have_rest = 0;
OSSL_SELF_TEST_onbegin(ev, event_type, OSSL_SELF_TEST_DESC_INTEGRITY_HMAC);
@@ -57,64 +50,52 @@ diff -up openssl-3.0.0/providers/fips/self_test.c.embed-hmac openssl-3.0.0/provi
mac = EVP_MAC_fetch(libctx, MAC_NAME, NULL);
if (mac == NULL)
goto err;
-@@ -204,12 +233,53 @@ static int verify_integrity(OSSL_CORE_BI
+@@ -205,13 +233,42 @@ static int verify_integrity(OSSL_CORE_BI
if (!EVP_MAC_init(ctx, fixed_key, sizeof(fixed_key), params))
goto err;
-+ status = read_ex_cb(bio, buf, HMAC_LEN, &bytes_read);
-+ if (status != 1 || bytes_read != HMAC_LEN)
-+ goto err;
-+ off += HMAC_LEN;
-+
- while (1) {
+- while (1) {
- status = read_ex_cb(bio, buf, sizeof(buf), &bytes_read);
-- if (status != 1)
-+ status = read_ex_cb(bio, buf+HMAC_LEN, INTEGRITY_BUF_SIZE, &bytes_read);
-+ if (status != 1) {
-+ have_rest = 1;
-+ break;
-+ }
-+
-+ if (bytes_read == INTEGRITY_BUF_SIZE) { /* Full block */
-+ /* Logic:
-+ * We have HMAC_LEN (read before) + INTEGRITY_BUF_SIZE (read now) in buffer
-+ * We calculate HMAC from first INTEGRITY_BUF_SIZE bytes
-+ * and move last HMAC_LEN bytes to the beginning of the buffer
-+ *
-+ * If we have read (a part of) buffer fips_hmac_container
-+ * we should replace it with zeros.
-+ * If it is inside our current buffer, we will update now.
-+ * If it intersects the upper bound, we will clean up on the next step.
-+ */
-+ if (off - HMAC_LEN <= paddr && paddr <= off + bytes_read)
-+ memset (buf + HMAC_LEN + paddr - off, 0, HMAC_LEN);
-+ off += bytes_read;
-+
-+ if (!EVP_MAC_update(ctx, buf, bytes_read))
-+ goto err;
-+ memcpy (buf, buf+INTEGRITY_BUF_SIZE, HMAC_LEN);
-+ } else { /* Final block */
-+ /* Logic is basically the same as in previous branch
-+ * but we calculate HMAC from HMAC_LEN (rest of previous step)
-+ * and bytes_read read on this step
-+ * */
-+ if (off - HMAC_LEN <= paddr && paddr <= off + bytes_read)
-+ memset (buf + HMAC_LEN + paddr - off, 0, HMAC_LEN);
-+ if (!EVP_MAC_update(ctx, buf, bytes_read+HMAC_LEN))
-+ goto err;
-+ off += bytes_read;
++ while ((off + INTEGRITY_BUF_SIZE) <= paddr) {
++ status = read_ex_cb(bio, buf, INTEGRITY_BUF_SIZE, &bytes_read);
+ if (status != 1)
break;
-- if (!EVP_MAC_update(ctx, buf, bytes_read))
-+ }
-+ }
-+ if (have_rest) {
-+ if (!EVP_MAC_update(ctx, buf, HMAC_LEN))
+ if (!EVP_MAC_update(ctx, buf, bytes_read))
goto err;
-+ off += HMAC_LEN;
++ off += bytes_read;
}
++
++ if (off + INTEGRITY_BUF_SIZE > paddr) {
++ int delta = paddr - off;
++ status = read_ex_cb(bio, buf, delta, &bytes_read);
++ if (status != 1)
++ goto err;
++ if (!EVP_MAC_update(ctx, buf, bytes_read))
++ goto err;
++ off += bytes_read;
++
++ status = read_ex_cb(bio, buf, HMAC_LEN, &bytes_read);
++ memset(buf, 0, HMAC_LEN);
++ if (status != 1)
++ goto err;
++ if (!EVP_MAC_update(ctx, buf, bytes_read))
++ goto err;
++ off += bytes_read;
++ }
++
++ while (bytes_read > 0) {
++ status = read_ex_cb(bio, buf, INTEGRITY_BUF_SIZE, &bytes_read);
++ if (status != 1)
++ break;
++ if (!EVP_MAC_update(ctx, buf, bytes_read))
++ goto err;
++ off += bytes_read;
++ }
++
if (!EVP_MAC_final(ctx, out, &out_len, sizeof(out)))
goto err;
-@@ -284,8 +358,7 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
+
+@@ -285,8 +342,7 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
CRYPTO_THREAD_unlock(fips_state_lock);
}
@@ -124,7 +105,7 @@ diff -up openssl-3.0.0/providers/fips/self_test.c.embed-hmac openssl-3.0.0/provi
ERR_raise(ERR_LIB_PROV, PROV_R_MISSING_CONFIG_DATA);
goto end;
}
-@@ -294,8 +367,9 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
+@@ -305,8 +361,9 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
if (ev == NULL)
goto end;
@@ -136,7 +117,7 @@ diff -up openssl-3.0.0/providers/fips/self_test.c.embed-hmac openssl-3.0.0/provi
if (module_checksum == NULL) {
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_CONFIG_DATA);
goto end;
-@@ -357,7 +431,6 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
+@@ -356,7 +413,6 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
ok = 1;
end:
OSSL_SELF_TEST_free(ev);
diff --git a/openssl.spec b/openssl.spec
index bc11f21..0eea9bf 100644
--- a/openssl.spec
+++ b/openssl.spec
@@ -29,7 +29,7 @@ print(string.sub(hash, 0, 16))
Summary: Utilities from the general purpose cryptography library with TLS implementation
Name: openssl
Version: 3.0.7
-Release: 1%{?dist}
+Release: 2%{?dist}
Epoch: 1
# We have to remove certain patented algorithms from the openssl source
# tarball with the hobble-openssl script which is included below.
@@ -530,6 +530,10 @@ install -m644 %{SOURCE9} \
%ldconfig_scriptlets libs
%changelog
+* Thu Jan 05 2023 Dmitry Belyavskiy <dbelyavs@redhat.com> - 1:3.0.7-2
+- Refactor embedded mac verification in FIPS module
+ Resolves: rhbz#2156045
+
* Fri Dec 23 2022 Dmitry Belyavskiy <dbelyavs@redhat.com> - 1:3.0.7-1
- Rebase to upstream version 3.0.7
- C99 compatibility in downstream-only 0032-Force-fips.patch
reply other threads:[~2026-06-09 12:45 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178100910690.1.23737405291868163.rpms-openssl-500ad3d30083@fedoraproject.org \
--to=dbelyavs@redhat.com \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox