Module Name:    src
Committed By:   christos
Date:           Sun Sep  8 13:09:21 UTC 2024

Modified Files:
        src/crypto/external/bsd/openssl/dist: Configure
        src/crypto/external/bsd/openssl/dist/apps/lib: opt.c
        src/crypto/external/bsd/openssl/dist/crypto/asn1: a_d2i_fp.c a_strex.c
        src/crypto/external/bsd/openssl/dist/crypto/conf: conf_def.c
        src/crypto/external/bsd/openssl/dist/crypto/pkcs7: pk7_doit.c
        src/crypto/external/bsd/openssl/dist/crypto/rand: randfile.c
        src/crypto/external/bsd/openssl/dist/crypto/rsa: rsa_oaep.c
        src/crypto/external/bsd/openssl/dist/ssl: ssl_lib.c ssl_sess.c t1_lib.c
        src/crypto/external/bsd/openssl/dist/test: evp_extra_test.c
        src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc: aesp8-ppc.S
            poly1305-ppc.S
        src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64:
            aesp8-ppc.S poly1305-ppc.S

Log Message:
merge and regen between 3.0.1[45]


To generate a diff of this commit:
cvs rdiff -u -r1.35 -r1.36 src/crypto/external/bsd/openssl/dist/Configure
cvs rdiff -u -r1.3 -r1.4 src/crypto/external/bsd/openssl/dist/apps/lib/opt.c
cvs rdiff -u -r1.8 -r1.9 \
    src/crypto/external/bsd/openssl/dist/crypto/asn1/a_d2i_fp.c
cvs rdiff -u -r1.11 -r1.12 \
    src/crypto/external/bsd/openssl/dist/crypto/asn1/a_strex.c
cvs rdiff -u -r1.15 -r1.16 \
    src/crypto/external/bsd/openssl/dist/crypto/conf/conf_def.c
cvs rdiff -u -r1.11 -r1.12 \
    src/crypto/external/bsd/openssl/dist/crypto/pkcs7/pk7_doit.c
cvs rdiff -u -r1.14 -r1.15 \
    src/crypto/external/bsd/openssl/dist/crypto/rand/randfile.c
cvs rdiff -u -r1.12 -r1.13 \
    src/crypto/external/bsd/openssl/dist/crypto/rsa/rsa_oaep.c
cvs rdiff -u -r1.25 -r1.26 src/crypto/external/bsd/openssl/dist/ssl/ssl_lib.c
cvs rdiff -u -r1.14 -r1.15 \
    src/crypto/external/bsd/openssl/dist/ssl/ssl_sess.c
cvs rdiff -u -r1.39 -r1.40 src/crypto/external/bsd/openssl/dist/ssl/t1_lib.c
cvs rdiff -u -r1.15 -r1.16 \
    src/crypto/external/bsd/openssl/dist/test/evp_extra_test.c
cvs rdiff -u -r1.4 -r1.5 \
    src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/aesp8-ppc.S
cvs rdiff -u -r1.3 -r1.4 \
    src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/poly1305-ppc.S
cvs rdiff -u -r1.4 -r1.5 \
    src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/aesp8-ppc.S
cvs rdiff -u -r1.3 -r1.4 \
    src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/poly1305-ppc.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/crypto/external/bsd/openssl/dist/Configure
diff -u src/crypto/external/bsd/openssl/dist/Configure:1.35 src/crypto/external/bsd/openssl/dist/Configure:1.36
--- src/crypto/external/bsd/openssl/dist/Configure:1.35	Tue Jun 11 10:47:51 2024
+++ src/crypto/external/bsd/openssl/dist/Configure	Sun Sep  8 09:09:19 2024
@@ -178,7 +178,6 @@ my @gcc_devteam_warn = qw(
 #       -Wextended-offsetof -- no, needed in CMS ASN1 code
 my @clang_devteam_warn = qw(
     -Wno-unknown-warning-option
-    -Wswitch-default
     -Wno-parentheses-equality
     -Wno-language-extension-token
     -Wno-extended-offsetof
@@ -1583,7 +1582,7 @@ if (!$disabled{makedepend}) {
     disable('unavailable', 'makedepend') unless $config{makedep_scheme};
 }
 
-if (!$disabled{asm} && !$predefined_C{__MACH__} && $^O ne 'VMS') {
+if (!$disabled{asm} && !$predefined_C{__MACH__} && $^O ne 'VMS' && !$predefined_C{_AIX}) {
     # probe for -Wa,--noexecstack option...
     if ($predefined_C{__clang__}) {
         # clang has builtin assembler, which doesn't recognize --help,
@@ -3407,6 +3406,13 @@ sub absolutedir {
         return rel2abs($dir);
     }
 
+    # realpath() on Windows seems to check if the directory actually exists,
+    # which isn't what is wanted here.  All we want to know is if a directory
+    # spec is absolute, not if it exists.
+    if ($^O eq "MSWin32") {
+        return rel2abs($dir);
+    }
+
     # We use realpath() on Unix, since no other will properly clean out
     # a directory spec.
     use Cwd qw/realpath/;

Index: src/crypto/external/bsd/openssl/dist/apps/lib/opt.c
diff -u src/crypto/external/bsd/openssl/dist/apps/lib/opt.c:1.3 src/crypto/external/bsd/openssl/dist/apps/lib/opt.c:1.4
--- src/crypto/external/bsd/openssl/dist/apps/lib/opt.c:1.3	Tue Jun 11 10:47:51 2024
+++ src/crypto/external/bsd/openssl/dist/apps/lib/opt.c	Sun Sep  8 09:09:20 2024
@@ -1,5 +1,5 @@
 /*
- * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2015-2024 The OpenSSL Project Authors. 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
@@ -616,7 +616,7 @@ int opt_uintmax(const char *value, ossl_
         opt_number_error(value);
         return 0;
     }
-    *result = (ossl_intmax_t)m;
+    *result = (ossl_uintmax_t)m;
     errno = oerrno;
     return 1;
 }

Index: src/crypto/external/bsd/openssl/dist/crypto/asn1/a_d2i_fp.c
diff -u src/crypto/external/bsd/openssl/dist/crypto/asn1/a_d2i_fp.c:1.8 src/crypto/external/bsd/openssl/dist/crypto/asn1/a_d2i_fp.c:1.9
--- src/crypto/external/bsd/openssl/dist/crypto/asn1/a_d2i_fp.c:1.8	Sun May  7 14:40:16 2023
+++ src/crypto/external/bsd/openssl/dist/crypto/asn1/a_d2i_fp.c	Sun Sep  8 09:09:20 2024
@@ -1,5 +1,5 @@
 /*
- * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2024 The OpenSSL Project Authors. 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
@@ -148,6 +148,9 @@ int asn1_d2i_read_bio(BIO *in, BUF_MEM *
                     goto err;
                 }
                 len += i;
+                if ((size_t)i < want)
+                    continue;
+
             }
         }
         /* else data already loaded */

Index: src/crypto/external/bsd/openssl/dist/crypto/asn1/a_strex.c
diff -u src/crypto/external/bsd/openssl/dist/crypto/asn1/a_strex.c:1.11 src/crypto/external/bsd/openssl/dist/crypto/asn1/a_strex.c:1.12
--- src/crypto/external/bsd/openssl/dist/crypto/asn1/a_strex.c:1.11	Sun May  7 14:40:16 2023
+++ src/crypto/external/bsd/openssl/dist/crypto/asn1/a_strex.c	Sun Sep  8 09:09:20 2024
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2000-2024 The OpenSSL Project Authors. 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
@@ -10,6 +10,7 @@
 #include <stdio.h>
 #include <string.h>
 #include "internal/cryptlib.h"
+#include "internal/sizes.h"
 #include "crypto/asn1.h"
 #include <openssl/crypto.h>
 #include <openssl/x509.h>
@@ -345,8 +346,10 @@ static int do_print_ex(char_io *io_ch, v
 
     if (lflags & ASN1_STRFLGS_SHOW_TYPE) {
         const char *tagname;
+
         tagname = ASN1_tag2str(type);
-        outlen += strlen(tagname);
+        /* We can directly cast here as tagname will never be too large. */
+        outlen += (int)strlen(tagname);
         if (!io_ch(arg, tagname, outlen) || !io_ch(arg, ":", 1))
             return -1;
         outlen++;
@@ -372,7 +375,7 @@ static int do_print_ex(char_io *io_ch, v
 
     if (type == -1) {
         len = do_dump(lflags, io_ch, arg, str);
-        if (len < 0)
+        if (len < 0 || len > INT_MAX - outlen)
             return -1;
         outlen += len;
         return outlen;
@@ -391,7 +394,7 @@ static int do_print_ex(char_io *io_ch, v
     }
 
     len = do_buf(str->data, str->length, type, flags, &quotes, io_ch, NULL);
-    if (len < 0)
+    if (len < 0 || len > INT_MAX - 2 - outlen)
         return -1;
     outlen += len;
     if (quotes)

Index: src/crypto/external/bsd/openssl/dist/crypto/conf/conf_def.c
diff -u src/crypto/external/bsd/openssl/dist/crypto/conf/conf_def.c:1.15 src/crypto/external/bsd/openssl/dist/crypto/conf/conf_def.c:1.16
--- src/crypto/external/bsd/openssl/dist/crypto/conf/conf_def.c:1.15	Wed May 31 15:30:29 2023
+++ src/crypto/external/bsd/openssl/dist/crypto/conf/conf_def.c	Sun Sep  8 09:09:20 2024
@@ -1,5 +1,5 @@
 /*
- * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2024 The OpenSSL Project Authors. 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
@@ -332,7 +332,7 @@ static int def_load_bio(CONF *conf, BIO 
 
         v = NULL;
         /* check for line continuation */
-        if (bufnum >= 1) {
+        if (!again && bufnum >= 1) {
             /*
              * If we have bytes and the last char '\\' and second last char
              * is not '\\'

Index: src/crypto/external/bsd/openssl/dist/crypto/pkcs7/pk7_doit.c
diff -u src/crypto/external/bsd/openssl/dist/crypto/pkcs7/pk7_doit.c:1.11 src/crypto/external/bsd/openssl/dist/crypto/pkcs7/pk7_doit.c:1.12
--- src/crypto/external/bsd/openssl/dist/crypto/pkcs7/pk7_doit.c:1.11	Sun May  7 14:40:21 2023
+++ src/crypto/external/bsd/openssl/dist/crypto/pkcs7/pk7_doit.c	Sun Sep  8 09:09:20 2024
@@ -1,5 +1,5 @@
 /*
- * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2024 The OpenSSL Project Authors. 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
@@ -1239,36 +1239,29 @@ static int add_attribute(STACK_OF(X509_A
                          void *value)
 {
     X509_ATTRIBUTE *attr = NULL;
+    int i, n;
 
     if (*sk == NULL) {
         if ((*sk = sk_X509_ATTRIBUTE_new_null()) == NULL)
             return 0;
- new_attrib:
-        if ((attr = X509_ATTRIBUTE_create(nid, atrtype, value)) == NULL)
-            return 0;
-        if (!sk_X509_ATTRIBUTE_push(*sk, attr)) {
-            X509_ATTRIBUTE_free(attr);
-            return 0;
-        }
-    } else {
-        int i;
-
-        for (i = 0; i < sk_X509_ATTRIBUTE_num(*sk); i++) {
-            attr = sk_X509_ATTRIBUTE_value(*sk, i);
-            if (OBJ_obj2nid(X509_ATTRIBUTE_get0_object(attr)) == nid) {
-                X509_ATTRIBUTE_free(attr);
-                attr = X509_ATTRIBUTE_create(nid, atrtype, value);
-                if (attr == NULL)
-                    return 0;
-                if (!sk_X509_ATTRIBUTE_set(*sk, i, attr)) {
-                    X509_ATTRIBUTE_free(attr);
-                    return 0;
-                }
-                goto end;
-            }
-        }
-        goto new_attrib;
     }
+    n = sk_X509_ATTRIBUTE_num(*sk);
+    for (i = 0; i < n; i++) {
+        attr = sk_X509_ATTRIBUTE_value(*sk, i);
+        if (OBJ_obj2nid(X509_ATTRIBUTE_get0_object(attr)) == nid)
+            goto end;
+    }
+    if (!sk_X509_ATTRIBUTE_push(*sk, NULL))
+        return 0;
+
  end:
+    attr = X509_ATTRIBUTE_create(nid, atrtype, value);
+    if (attr == NULL) {
+        if (i == n)
+            sk_X509_ATTRIBUTE_pop(*sk);
+        return 0;
+    }
+    X509_ATTRIBUTE_free(sk_X509_ATTRIBUTE_value(*sk, i));
+    (void) sk_X509_ATTRIBUTE_set(*sk, i, attr);
     return 1;
 }

Index: src/crypto/external/bsd/openssl/dist/crypto/rand/randfile.c
diff -u src/crypto/external/bsd/openssl/dist/crypto/rand/randfile.c:1.14 src/crypto/external/bsd/openssl/dist/crypto/rand/randfile.c:1.15
--- src/crypto/external/bsd/openssl/dist/crypto/rand/randfile.c:1.14	Sun May  7 14:40:21 2023
+++ src/crypto/external/bsd/openssl/dist/crypto/rand/randfile.c	Sun Sep  8 09:09:20 2024
@@ -1,5 +1,5 @@
 /*
- * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2024 The OpenSSL Project Authors. 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
@@ -16,6 +16,7 @@
 # include <sys/stat.h>
 #endif
 
+#include "e_os.h"
 #include "internal/cryptlib.h"
 
 #include <errno.h>
@@ -208,8 +209,16 @@ int RAND_write_file(const char *file)
          * should be restrictive from the start
          */
         int fd = open(file, O_WRONLY | O_CREAT | O_BINARY, 0600);
-        if (fd != -1)
+
+        if (fd != -1) {
             out = fdopen(fd, "wb");
+            if (out == NULL) {
+                close(fd);
+                ERR_raise_data(ERR_LIB_RAND, RAND_R_CANNOT_OPEN_FILE,
+                               "Filename=%s", file);
+                return -1;
+            }
+        }
     }
 #endif
 

Index: src/crypto/external/bsd/openssl/dist/crypto/rsa/rsa_oaep.c
diff -u src/crypto/external/bsd/openssl/dist/crypto/rsa/rsa_oaep.c:1.12 src/crypto/external/bsd/openssl/dist/crypto/rsa/rsa_oaep.c:1.13
--- src/crypto/external/bsd/openssl/dist/crypto/rsa/rsa_oaep.c:1.12	Sun May  7 14:40:22 2023
+++ src/crypto/external/bsd/openssl/dist/crypto/rsa/rsa_oaep.c	Sun Sep  8 09:09:20 2024
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1999-2024 The OpenSSL Project Authors. 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
@@ -186,7 +186,7 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(un
 
     mdlen = EVP_MD_get_size(md);
 
-    if (tlen <= 0 || flen <= 0)
+    if (tlen <= 0 || flen <= 0 || mdlen <= 0)
         return -1;
     /*
      * |num| is the length of the modulus; |flen| is the length of the

Index: src/crypto/external/bsd/openssl/dist/ssl/ssl_lib.c
diff -u src/crypto/external/bsd/openssl/dist/ssl/ssl_lib.c:1.25 src/crypto/external/bsd/openssl/dist/ssl/ssl_lib.c:1.26
--- src/crypto/external/bsd/openssl/dist/ssl/ssl_lib.c:1.25	Tue Jun 11 10:47:52 2024
+++ src/crypto/external/bsd/openssl/dist/ssl/ssl_lib.c	Sun Sep  8 09:09:20 2024
@@ -2952,37 +2952,54 @@ int SSL_select_next_proto(unsigned char 
                           unsigned int server_len,
                           const unsigned char *client, unsigned int client_len)
 {
-    unsigned int i, j;
-    const unsigned char *result;
-    int status = OPENSSL_NPN_UNSUPPORTED;
+    PACKET cpkt, csubpkt, spkt, ssubpkt;
+
+    if (!PACKET_buf_init(&cpkt, client, client_len)
+            || !PACKET_get_length_prefixed_1(&cpkt, &csubpkt)
+            || PACKET_remaining(&csubpkt) == 0) {
+        *out = NULL;
+        *outlen = 0;
+        return OPENSSL_NPN_NO_OVERLAP;
+    }
+
+    /*
+     * Set the default opportunistic protocol. Will be overwritten if we find
+     * a match.
+     */
+    *out = (unsigned char *)PACKET_data(&csubpkt);
+    *outlen = (unsigned char)PACKET_remaining(&csubpkt);
 
     /*
      * For each protocol in server preference order, see if we support it.
      */
-    for (i = 0; i < server_len;) {
-        for (j = 0; j < client_len;) {
-            if (server[i] == client[j] &&
-                memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) {
-                /* We found a match */
-                result = &server[i];
-                status = OPENSSL_NPN_NEGOTIATED;
-                goto found;
+    if (PACKET_buf_init(&spkt, server, server_len)) {
+        while (PACKET_get_length_prefixed_1(&spkt, &ssubpkt)) {
+            if (PACKET_remaining(&ssubpkt) == 0)
+                continue; /* Invalid - ignore it */
+            if (PACKET_buf_init(&cpkt, client, client_len)) {
+                while (PACKET_get_length_prefixed_1(&cpkt, &csubpkt)) {
+                    if (PACKET_equal(&csubpkt, PACKET_data(&ssubpkt),
+                                     PACKET_remaining(&ssubpkt))) {
+                        /* We found a match */
+                        *out = (unsigned char *)PACKET_data(&ssubpkt);
+                        *outlen = (unsigned char)PACKET_remaining(&ssubpkt);
+                        return OPENSSL_NPN_NEGOTIATED;
+                    }
+                }
+                /* Ignore spurious trailing bytes in the client list */
+            } else {
+                /* This should never happen */
+                return OPENSSL_NPN_NO_OVERLAP;
             }
-            j += client[j];
-            j++;
         }
-        i += server[i];
-        i++;
+        /* Ignore spurious trailing bytes in the server list */
     }
 
-    /* There's no overlap between our protocols and the server's list. */
-    result = client;
-    status = OPENSSL_NPN_NO_OVERLAP;
-
- found:
-    *out = (unsigned char *)result + 1;
-    *outlen = result[0];
-    return status;
+    /*
+     * There's no overlap between our protocols and the server's list. We use
+     * the default opportunistic protocol selected earlier
+     */
+    return OPENSSL_NPN_NO_OVERLAP;
 }
 
 #ifndef OPENSSL_NO_NEXTPROTONEG

Index: src/crypto/external/bsd/openssl/dist/ssl/ssl_sess.c
diff -u src/crypto/external/bsd/openssl/dist/ssl/ssl_sess.c:1.14 src/crypto/external/bsd/openssl/dist/ssl/ssl_sess.c:1.15
--- src/crypto/external/bsd/openssl/dist/ssl/ssl_sess.c:1.14	Tue Jun 11 10:47:52 2024
+++ src/crypto/external/bsd/openssl/dist/ssl/ssl_sess.c	Sun Sep  8 09:09:21 2024
@@ -53,21 +53,36 @@ __owur static int timeoutcmp(SSL_SESSION
     return 0;
 }
 
+#ifdef __DJGPP__ /* time_t is unsigned on djgpp, it's signed anywhere else */
+# define TMAX(_type_) ((time_t)-1)
+#else
+# define TMAX(_type_) ((time_t)(((_type_)-1) >> 1))
+#endif
+
+#define CALCULATE_TIMEOUT(_ss_, _type_) do { \
+        _type_ overflow; \
+        time_t tmax = TMAX(_type_); \
+        overflow = (_type_)tmax - (_type_)(_ss_)->time; \
+        if ((_ss_)->timeout > (time_t)overflow) { \
+            (_ss_)->timeout_ovf = 1; \
+            (_ss_)->calc_timeout = (_ss_)->timeout - (time_t)overflow; \
+        } else { \
+            (_ss_)->timeout_ovf = 0; \
+            (_ss_)->calc_timeout = (_ss_)->time + (_ss_)->timeout; \
+        } \
+    } while (0)
 /*
  * Calculates effective timeout, saving overflow state
  * Locking must be done by the caller of this function
  */
 void ssl_session_calculate_timeout(SSL_SESSION *ss)
 {
-    /* Force positive timeout */
-    if (ss->timeout < 0)
-        ss->timeout = 0;
-    ss->calc_timeout = ss->time + ss->timeout;
-    /*
-     * |timeout| is always zero or positive, so the check for
-     * overflow only needs to consider if |time| is positive
-     */
-    ss->timeout_ovf = ss->time > 0 && ss->calc_timeout < ss->time;
+
+    if (sizeof(time_t) == 8)
+        CALCULATE_TIMEOUT(ss, uint64_t);
+    else
+        CALCULATE_TIMEOUT(ss, uint32_t);
+
     /*
      * N.B. Realistic overflow can only occur in our lifetimes on a
      *      32-bit machine in January 2038.
@@ -132,6 +147,7 @@ SSL_SESSION *SSL_SESSION_new(void)
         return NULL;
     }
 
+    ss->ext.max_fragment_len_mode = TLSEXT_max_fragment_length_UNSPECIFIED;
     ss->verify_result = 1;      /* avoid 0 (= X509_V_OK) just in case */
     ss->references = 1;
     ss->timeout = 60 * 5 + 4;   /* 5 minute timeout by default */

Index: src/crypto/external/bsd/openssl/dist/ssl/t1_lib.c
diff -u src/crypto/external/bsd/openssl/dist/ssl/t1_lib.c:1.39 src/crypto/external/bsd/openssl/dist/ssl/t1_lib.c:1.40
--- src/crypto/external/bsd/openssl/dist/ssl/t1_lib.c:1.39	Tue Jun 11 10:47:52 2024
+++ src/crypto/external/bsd/openssl/dist/ssl/t1_lib.c	Sun Sep  8 09:09:21 2024
@@ -3401,6 +3401,8 @@ int SSL_set_tlsext_max_fragment_length(S
 
 uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *session)
 {
+    if (session->ext.max_fragment_len_mode == TLSEXT_max_fragment_length_UNSPECIFIED)
+        return TLSEXT_max_fragment_length_DISABLED;
     return session->ext.max_fragment_len_mode;
 }
 

Index: src/crypto/external/bsd/openssl/dist/test/evp_extra_test.c
diff -u src/crypto/external/bsd/openssl/dist/test/evp_extra_test.c:1.15 src/crypto/external/bsd/openssl/dist/test/evp_extra_test.c:1.16
--- src/crypto/external/bsd/openssl/dist/test/evp_extra_test.c:1.15	Tue Jun 11 10:47:52 2024
+++ src/crypto/external/bsd/openssl/dist/test/evp_extra_test.c	Sun Sep  8 09:09:21 2024
@@ -5351,6 +5351,25 @@ static int test_aes_rc4_keylen_change_cv
 }
 #endif
 
+static int test_invalid_ctx_for_digest(void)
+{
+    int ret;
+    EVP_MD_CTX *mdctx;
+
+    mdctx = EVP_MD_CTX_new();
+    if (!TEST_ptr(mdctx))
+        return 0;
+
+    if (!TEST_int_eq(EVP_DigestUpdate(mdctx, "test", sizeof("test") - 1), 0))
+        ret = 0;
+    else
+        ret = 1;
+
+    EVP_MD_CTX_free(mdctx);
+
+    return ret;
+}
+
 int setup_tests(void)
 {
     OPTION_CHOICE o;
@@ -5514,6 +5533,8 @@ int setup_tests(void)
     ADD_TEST(test_aes_rc4_keylen_change_cve_2023_5363);
 #endif
 
+    ADD_TEST(test_invalid_ctx_for_digest);
+
     return 1;
 }
 

Index: src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/aesp8-ppc.S
diff -u src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/aesp8-ppc.S:1.4 src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/aesp8-ppc.S:1.5
--- src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/aesp8-ppc.S:1.4	Sat Mar 21 20:53:12 2020
+++ src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/aesp8-ppc.S	Sun Sep  8 09:09:21 2024
@@ -8,11 +8,12 @@ rcon:
 .byte	0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00
 .byte	0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c
 .byte	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+.long	0x0f102132, 0x43546576, 0x8798a9ba, 0xcbdcedfe
 .Lconsts:
 	mflr	0
 	bcl	20,31,$+4
 	mflr	6
-	addi	6,6,-0x48
+	addi	6,6,-0x58
 	mtlr	0
 	blr	
 .long	0
@@ -2346,6 +2347,18 @@ _aesp8_xts_encrypt6x:
 	li	31,0x70
 	mtspr	256,0
 
+
+	xxlor	2, 32+10, 32+10
+	vsldoi	10,11,10,1
+	xxlor	1, 32+10, 32+10
+
+
+	mr	31, 6
+	bl	.Lconsts
+	lxvw4x	0, 28, 6
+	mr	6, 31
+	li	31,0x70
+
 	subi	9,9,3
 
 	lvx	23,0,6
@@ -2388,69 +2401,77 @@ _aesp8_xts_encrypt6x:
 	vperm	31,31,22,7
 	lvx	25,3,7
 
+
+
+
+
+
+
+
+
 	vperm	0,2,4,5
 	subi	10,10,31
 	vxor	17,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 	vand	11,11,10
 	vxor	7,0,17
-	vxor	8,8,11
+	xxlor	32+1, 0, 0
+	vpermxor	8, 8, 11, 1
 
 .long	0x7C235699
 	vxor	18,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	12,1,18
-	vxor	8,8,11
+	xxlor	32+2, 0, 0
+	vpermxor	8, 8, 11, 2
 
 .long	0x7C5A5699
 	andi.	31,5,15
 	vxor	19,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	13,2,19
-	vxor	8,8,11
+	xxlor	32+3, 0, 0
+	vpermxor	8, 8, 11, 3
 
 .long	0x7C7B5699
 	sub	5,5,31
 	vxor	20,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	14,3,20
-	vxor	8,8,11
+	xxlor	32+4, 0, 0
+	vpermxor	8, 8, 11, 4
 
 .long	0x7C9C5699
 	subi	5,5,0x60
 	vxor	21,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	15,4,21
-	vxor	8,8,11
+	xxlor	32+5, 0, 0
+	vpermxor	8, 8, 11, 5
 
 .long	0x7CBD5699
 	addi	10,10,0x60
 	vxor	22,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	16,5,22
-	vxor	8,8,11
+	xxlor	32+0, 0, 0
+	vpermxor	8, 8, 11, 0
 
 	vxor	31,31,23
 	mtctr	9
@@ -2476,6 +2497,8 @@ _aesp8_xts_encrypt6x:
 	lvx	25,3,7
 	bc	16,0,.Loop_xts_enc6x
 
+	xxlor	32+10, 1, 1
+
 	subic	5,5,96
 	vxor	0,17,31
 .long	0x10E7C508
@@ -2485,7 +2508,6 @@ _aesp8_xts_encrypt6x:
 	vaddubm	8,8,8
 .long	0x11ADC508
 .long	0x11CEC508
-	vsldoi	11,11,11,15
 .long	0x11EFC508
 .long	0x1210C508
 
@@ -2493,7 +2515,8 @@ _aesp8_xts_encrypt6x:
 	vand	11,11,10
 .long	0x10E7CD08
 .long	0x118CCD08
-	vxor	8,8,11
+	xxlor	32+1, 0, 0
+	vpermxor	8, 8, 11, 1
 .long	0x11ADCD08
 .long	0x11CECD08
 	vxor	1,18,31
@@ -2504,13 +2527,13 @@ _aesp8_xts_encrypt6x:
 
 	and	0,0,5
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x10E7D508
 .long	0x118CD508
 	vand	11,11,10
 .long	0x11ADD508
 .long	0x11CED508
-	vxor	8,8,11
+	xxlor	32+2, 0, 0
+	vpermxor	8, 8, 11, 2
 .long	0x11EFD508
 .long	0x1210D508
 
@@ -2524,7 +2547,6 @@ _aesp8_xts_encrypt6x:
 	vaddubm	8,8,8
 .long	0x10E7DD08
 .long	0x118CDD08
-	vsldoi	11,11,11,15
 .long	0x11ADDD08
 .long	0x11CEDD08
 	vand	11,11,10
@@ -2532,7 +2554,8 @@ _aesp8_xts_encrypt6x:
 .long	0x1210DD08
 
 	addi	7,1,32+15
-	vxor	8,8,11
+	xxlor	32+3, 0, 0
+	vpermxor	8, 8, 11, 3
 .long	0x10E7E508
 .long	0x118CE508
 	vxor	3,20,31
@@ -2541,7 +2564,6 @@ _aesp8_xts_encrypt6x:
 .long	0x11ADE508
 .long	0x11CEE508
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x11EFE508
 .long	0x1210E508
 	lvx	24,0,7
@@ -2549,7 +2571,8 @@ _aesp8_xts_encrypt6x:
 
 .long	0x10E7ED08
 .long	0x118CED08
-	vxor	8,8,11
+	xxlor	32+4, 0, 0
+	vpermxor	8, 8, 11, 4
 .long	0x11ADED08
 .long	0x11CEED08
 	vxor	4,21,31
@@ -2559,14 +2582,14 @@ _aesp8_xts_encrypt6x:
 .long	0x1210ED08
 	lvx	25,3,7
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 .long	0x10E7F508
 .long	0x118CF508
 	vand	11,11,10
 .long	0x11ADF508
 .long	0x11CEF508
-	vxor	8,8,11
+	xxlor	32+5, 0, 0
+	vpermxor	8, 8, 11, 5
 .long	0x11EFF508
 .long	0x1210F508
 	vxor	5,22,31
@@ -2576,7 +2599,6 @@ _aesp8_xts_encrypt6x:
 .long	0x10E70509
 .long	0x7C005699
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x118C0D09
 .long	0x7C235699
 .long	0x11AD1509
@@ -2589,7 +2611,10 @@ _aesp8_xts_encrypt6x:
 .long	0x11EF2509
 
 .long	0x7C9C5699
-	vxor	8,8,11
+	xxlor	10, 32+0, 32+0
+	xxlor	32+0, 0, 0
+	vpermxor	8, 8, 11, 0
+	xxlor	32+0, 10, 10
 .long	0x11702D09
 
 
@@ -2622,6 +2647,8 @@ _aesp8_xts_encrypt6x:
 	mtctr	9
 	beq	.Loop_xts_enc6x
 
+	xxlor	32+10, 2, 2
+
 	addic.	5,5,0x60
 	beq	.Lxts_enc6x_zero
 	cmpwi	5,0x20
@@ -2998,6 +3025,18 @@ _aesp8_xts_decrypt6x:
 	li	31,0x70
 	mtspr	256,0
 
+
+	xxlor	2, 32+10, 32+10
+	vsldoi	10,11,10,1
+	xxlor	1, 32+10, 32+10
+
+
+	mr	31, 6
+	bl	.Lconsts
+	lxvw4x	0, 28, 6
+	mr	6, 31
+	li	31,0x70
+
 	subi	9,9,3
 
 	lvx	23,0,6
@@ -3045,64 +3084,64 @@ _aesp8_xts_decrypt6x:
 	vxor	17,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 	vand	11,11,10
 	vxor	7,0,17
-	vxor	8,8,11
+	xxlor	32+1, 0, 0
+	vpermxor	8, 8, 11, 1
 
 .long	0x7C235699
 	vxor	18,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	12,1,18
-	vxor	8,8,11
+	xxlor	32+2, 0, 0
+	vpermxor	8, 8, 11, 2
 
 .long	0x7C5A5699
 	andi.	31,5,15
 	vxor	19,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	13,2,19
-	vxor	8,8,11
+	xxlor	32+3, 0, 0
+	vpermxor	8, 8, 11, 3
 
 .long	0x7C7B5699
 	sub	5,5,31
 	vxor	20,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	14,3,20
-	vxor	8,8,11
+	xxlor	32+4, 0, 0
+	vpermxor	8, 8, 11, 4
 
 .long	0x7C9C5699
 	subi	5,5,0x60
 	vxor	21,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	15,4,21
-	vxor	8,8,11
+	xxlor	32+5, 0, 0
+	vpermxor	8, 8, 11, 5
 
 .long	0x7CBD5699
 	addi	10,10,0x60
 	vxor	22,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	16,5,22
-	vxor	8,8,11
+	xxlor	32+0, 0, 0
+	vpermxor	8, 8, 11, 0
 
 	vxor	31,31,23
 	mtctr	9
@@ -3128,6 +3167,8 @@ _aesp8_xts_decrypt6x:
 	lvx	25,3,7
 	bc	16,0,.Loop_xts_dec6x
 
+	xxlor	32+10, 1, 1
+
 	subic	5,5,96
 	vxor	0,17,31
 .long	0x10E7C548
@@ -3137,7 +3178,6 @@ _aesp8_xts_decrypt6x:
 	vaddubm	8,8,8
 .long	0x11ADC548
 .long	0x11CEC548
-	vsldoi	11,11,11,15
 .long	0x11EFC548
 .long	0x1210C548
 
@@ -3145,7 +3185,8 @@ _aesp8_xts_decrypt6x:
 	vand	11,11,10
 .long	0x10E7CD48
 .long	0x118CCD48
-	vxor	8,8,11
+	xxlor	32+1, 0, 0
+	vpermxor	8, 8, 11, 1
 .long	0x11ADCD48
 .long	0x11CECD48
 	vxor	1,18,31
@@ -3156,13 +3197,13 @@ _aesp8_xts_decrypt6x:
 
 	and	0,0,5
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x10E7D548
 .long	0x118CD548
 	vand	11,11,10
 .long	0x11ADD548
 .long	0x11CED548
-	vxor	8,8,11
+	xxlor	32+2, 0, 0
+	vpermxor	8, 8, 11, 2
 .long	0x11EFD548
 .long	0x1210D548
 
@@ -3176,7 +3217,6 @@ _aesp8_xts_decrypt6x:
 	vaddubm	8,8,8
 .long	0x10E7DD48
 .long	0x118CDD48
-	vsldoi	11,11,11,15
 .long	0x11ADDD48
 .long	0x11CEDD48
 	vand	11,11,10
@@ -3184,7 +3224,8 @@ _aesp8_xts_decrypt6x:
 .long	0x1210DD48
 
 	addi	7,1,32+15
-	vxor	8,8,11
+	xxlor	32+3, 0, 0
+	vpermxor	8, 8, 11, 3
 .long	0x10E7E548
 .long	0x118CE548
 	vxor	3,20,31
@@ -3193,7 +3234,6 @@ _aesp8_xts_decrypt6x:
 .long	0x11ADE548
 .long	0x11CEE548
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x11EFE548
 .long	0x1210E548
 	lvx	24,0,7
@@ -3201,7 +3241,8 @@ _aesp8_xts_decrypt6x:
 
 .long	0x10E7ED48
 .long	0x118CED48
-	vxor	8,8,11
+	xxlor	32+4, 0, 0
+	vpermxor	8, 8, 11, 4
 .long	0x11ADED48
 .long	0x11CEED48
 	vxor	4,21,31
@@ -3211,14 +3252,14 @@ _aesp8_xts_decrypt6x:
 .long	0x1210ED48
 	lvx	25,3,7
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 .long	0x10E7F548
 .long	0x118CF548
 	vand	11,11,10
 .long	0x11ADF548
 .long	0x11CEF548
-	vxor	8,8,11
+	xxlor	32+5, 0, 0
+	vpermxor	8, 8, 11, 5
 .long	0x11EFF548
 .long	0x1210F548
 	vxor	5,22,31
@@ -3228,7 +3269,6 @@ _aesp8_xts_decrypt6x:
 .long	0x10E70549
 .long	0x7C005699
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x118C0D49
 .long	0x7C235699
 .long	0x11AD1549
@@ -3241,7 +3281,10 @@ _aesp8_xts_decrypt6x:
 .long	0x11EF2549
 
 .long	0x7C9C5699
-	vxor	8,8,11
+	xxlor	10, 32+0, 32+0
+	xxlor	32+0, 0, 0
+	vpermxor	8, 8, 11, 0
+	xxlor	32+0, 10, 10
 .long	0x12102D49
 
 .long	0x7CBD5699
@@ -3272,6 +3315,8 @@ _aesp8_xts_decrypt6x:
 	mtctr	9
 	beq	.Loop_xts_dec6x
 
+	xxlor	32+10, 2, 2
+
 	addic.	5,5,0x60
 	beq	.Lxts_dec6x_zero
 	cmpwi	5,0x20

Index: src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/poly1305-ppc.S
diff -u src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/poly1305-ppc.S:1.3 src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/poly1305-ppc.S:1.4
--- src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/poly1305-ppc.S:1.3	Tue May  9 13:21:17 2023
+++ src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/poly1305-ppc.S	Sun Sep  8 09:09:21 2024
@@ -472,7 +472,7 @@ __poly1305_mul:
 
 .align	5
 __poly1305_blocks_vsx:
-	stwu	1,-384(1)
+	stwu	1,-368(1)
 	mflr	0
 	li	10,167
 	li	11,183
@@ -483,12 +483,12 @@ __poly1305_blocks_vsx:
 	addi	11,11,32
 	stvx	22,10,1
 	addi	10,10,32
-	stvx	23,10,1
-	addi	10,10,32
-	stvx	24,11,1
+	stvx	23,11,1
 	addi	11,11,32
-	stvx	25,10,1
+	stvx	24,10,1
 	addi	10,10,32
+	stvx	25,11,1
+	addi	11,11,32
 	stvx	26,10,1
 	addi	10,10,32
 	stvx	27,11,1
@@ -499,15 +499,15 @@ __poly1305_blocks_vsx:
 	addi	11,11,32
 	stvx	30,10,1
 	stvx	31,11,1
-	stw	12,360(1)
+	stw	12,344(1)
 	li	12,-1
 	mtspr	256,12
-	stw	27,364(1)
-	stw	28,368(1)
-	stw	29,372(1)
-	stw	30,376(1)
-	stw	31,380(1)
-	stw	0,388(1)
+	stw	27,348(1)
+	stw	28,352(1)
+	stw	29,356(1)
+	stw	30,360(1)
+	stw	31,364(1)
+	stw	0,372(1)
 
 	bl	.LPICmeup
 
@@ -1208,7 +1208,7 @@ __poly1305_blocks_vsx:
 
 .align	4
 .Ldone_vsx:
-	lwz	0,388(1)
+	lwz	0,372(1)
 	li	27,4
 	li	28,8
 	li	29,12
@@ -1219,39 +1219,39 @@ __poly1305_blocks_vsx:
 .long	0x7C7D1919
 .long	0x7C9E1919
 
-	lwz	12,360(1)
+	lwz	12,344(1)
 	mtlr	0
 	li	10,167
 	li	11,183
 	mtspr	256,12
 	lvx	20,10,1
 	addi	10,10,32
-	lvx	21,10,1
-	addi	10,10,32
-	lvx	22,11,1
+	lvx	21,11,1
 	addi	11,11,32
-	lvx	23,10,1
+	lvx	22,10,1
 	addi	10,10,32
-	lvx	24,11,1
+	lvx	23,11,1
 	addi	11,11,32
-	lvx	25,10,1
+	lvx	24,10,1
 	addi	10,10,32
-	lvx	26,11,1
+	lvx	25,11,1
 	addi	11,11,32
-	lvx	27,10,1
+	lvx	26,10,1
 	addi	10,10,32
-	lvx	28,11,1
+	lvx	27,11,1
 	addi	11,11,32
-	lvx	29,10,1
+	lvx	28,10,1
 	addi	10,10,32
-	lvx	30,11,1
-	lvx	31,10,1
-	lwz	27,364(1)
-	lwz	28,368(1)
-	lwz	29,372(1)
-	lwz	30,376(1)
-	lwz	31,380(1)
-	addi	1,1,384
+	lvx	29,11,1
+	addi	11,11,32
+	lvx	30,10,1
+	lvx	31,11,1
+	lwz	27,348(1)
+	lwz	28,352(1)
+	lwz	29,356(1)
+	lwz	30,360(1)
+	lwz	31,364(1)
+	addi	1,1,368
 	blr	
 .long	0
 .byte	0,12,0x04,1,0x80,5,4,0

Index: src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/aesp8-ppc.S
diff -u src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/aesp8-ppc.S:1.4 src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/aesp8-ppc.S:1.5
--- src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/aesp8-ppc.S:1.4	Sat Mar 21 20:53:12 2020
+++ src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/aesp8-ppc.S	Sun Sep  8 09:09:21 2024
@@ -8,11 +8,12 @@ rcon:
 .byte	0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00
 .byte	0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c,0x0d,0x0e,0x0f,0x0c
 .byte	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+.long	0x0f102132, 0x43546576, 0x8798a9ba, 0xcbdcedfe
 .Lconsts:
 	mflr	0
 	bcl	20,31,$+4
 	mflr	6
-	addi	6,6,-0x48
+	addi	6,6,-0x58
 	mtlr	0
 	blr	
 .long	0
@@ -2386,6 +2387,18 @@ _aesp8_xts_encrypt6x:
 	li	31,0x70
 	mtspr	256,0
 
+
+	xxlor	2, 32+10, 32+10
+	vsldoi	10,11,10,1
+	xxlor	1, 32+10, 32+10
+
+
+	mr	31, 6
+	bl	.Lconsts
+	lxvw4x	0, 28, 6
+	mr	6, 31
+	li	31,0x70
+
 	subi	9,9,3
 
 	lvx	23,0,6
@@ -2428,69 +2441,77 @@ _aesp8_xts_encrypt6x:
 	vperm	31,31,22,7
 	lvx	25,3,7
 
+
+
+
+
+
+
+
+
 	vperm	0,2,4,5
 	subi	10,10,31
 	vxor	17,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 	vand	11,11,10
 	vxor	7,0,17
-	vxor	8,8,11
+	xxlor	32+1, 0, 0
+	vpermxor	8, 8, 11, 1
 
 .long	0x7C235699
 	vxor	18,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	12,1,18
-	vxor	8,8,11
+	xxlor	32+2, 0, 0
+	vpermxor	8, 8, 11, 2
 
 .long	0x7C5A5699
 	andi.	31,5,15
 	vxor	19,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	13,2,19
-	vxor	8,8,11
+	xxlor	32+3, 0, 0
+	vpermxor	8, 8, 11, 3
 
 .long	0x7C7B5699
 	sub	5,5,31
 	vxor	20,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	14,3,20
-	vxor	8,8,11
+	xxlor	32+4, 0, 0
+	vpermxor	8, 8, 11, 4
 
 .long	0x7C9C5699
 	subi	5,5,0x60
 	vxor	21,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	15,4,21
-	vxor	8,8,11
+	xxlor	32+5, 0, 0
+	vpermxor	8, 8, 11, 5
 
 .long	0x7CBD5699
 	addi	10,10,0x60
 	vxor	22,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	16,5,22
-	vxor	8,8,11
+	xxlor	32+0, 0, 0
+	vpermxor	8, 8, 11, 0
 
 	vxor	31,31,23
 	mtctr	9
@@ -2516,6 +2537,8 @@ _aesp8_xts_encrypt6x:
 	lvx	25,3,7
 	bc	16,0,.Loop_xts_enc6x
 
+	xxlor	32+10, 1, 1
+
 	subic	5,5,96
 	vxor	0,17,31
 .long	0x10E7C508
@@ -2525,7 +2548,6 @@ _aesp8_xts_encrypt6x:
 	vaddubm	8,8,8
 .long	0x11ADC508
 .long	0x11CEC508
-	vsldoi	11,11,11,15
 .long	0x11EFC508
 .long	0x1210C508
 
@@ -2533,7 +2555,8 @@ _aesp8_xts_encrypt6x:
 	vand	11,11,10
 .long	0x10E7CD08
 .long	0x118CCD08
-	vxor	8,8,11
+	xxlor	32+1, 0, 0
+	vpermxor	8, 8, 11, 1
 .long	0x11ADCD08
 .long	0x11CECD08
 	vxor	1,18,31
@@ -2544,13 +2567,13 @@ _aesp8_xts_encrypt6x:
 
 	and	0,0,5
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x10E7D508
 .long	0x118CD508
 	vand	11,11,10
 .long	0x11ADD508
 .long	0x11CED508
-	vxor	8,8,11
+	xxlor	32+2, 0, 0
+	vpermxor	8, 8, 11, 2
 .long	0x11EFD508
 .long	0x1210D508
 
@@ -2564,7 +2587,6 @@ _aesp8_xts_encrypt6x:
 	vaddubm	8,8,8
 .long	0x10E7DD08
 .long	0x118CDD08
-	vsldoi	11,11,11,15
 .long	0x11ADDD08
 .long	0x11CEDD08
 	vand	11,11,10
@@ -2572,7 +2594,8 @@ _aesp8_xts_encrypt6x:
 .long	0x1210DD08
 
 	addi	7,1,64+15
-	vxor	8,8,11
+	xxlor	32+3, 0, 0
+	vpermxor	8, 8, 11, 3
 .long	0x10E7E508
 .long	0x118CE508
 	vxor	3,20,31
@@ -2581,7 +2604,6 @@ _aesp8_xts_encrypt6x:
 .long	0x11ADE508
 .long	0x11CEE508
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x11EFE508
 .long	0x1210E508
 	lvx	24,0,7
@@ -2589,7 +2611,8 @@ _aesp8_xts_encrypt6x:
 
 .long	0x10E7ED08
 .long	0x118CED08
-	vxor	8,8,11
+	xxlor	32+4, 0, 0
+	vpermxor	8, 8, 11, 4
 .long	0x11ADED08
 .long	0x11CEED08
 	vxor	4,21,31
@@ -2599,14 +2622,14 @@ _aesp8_xts_encrypt6x:
 .long	0x1210ED08
 	lvx	25,3,7
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 .long	0x10E7F508
 .long	0x118CF508
 	vand	11,11,10
 .long	0x11ADF508
 .long	0x11CEF508
-	vxor	8,8,11
+	xxlor	32+5, 0, 0
+	vpermxor	8, 8, 11, 5
 .long	0x11EFF508
 .long	0x1210F508
 	vxor	5,22,31
@@ -2616,7 +2639,6 @@ _aesp8_xts_encrypt6x:
 .long	0x10E70509
 .long	0x7C005699
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x118C0D09
 .long	0x7C235699
 .long	0x11AD1509
@@ -2629,7 +2651,10 @@ _aesp8_xts_encrypt6x:
 .long	0x11EF2509
 
 .long	0x7C9C5699
-	vxor	8,8,11
+	xxlor	10, 32+0, 32+0
+	xxlor	32+0, 0, 0
+	vpermxor	8, 8, 11, 0
+	xxlor	32+0, 10, 10
 .long	0x11702D09
 
 
@@ -2662,6 +2687,8 @@ _aesp8_xts_encrypt6x:
 	mtctr	9
 	beq	.Loop_xts_enc6x
 
+	xxlor	32+10, 2, 2
+
 	addic.	5,5,0x60
 	beq	.Lxts_enc6x_zero
 	cmpwi	5,0x20
@@ -3038,6 +3065,18 @@ _aesp8_xts_decrypt6x:
 	li	31,0x70
 	mtspr	256,0
 
+
+	xxlor	2, 32+10, 32+10
+	vsldoi	10,11,10,1
+	xxlor	1, 32+10, 32+10
+
+
+	mr	31, 6
+	bl	.Lconsts
+	lxvw4x	0, 28, 6
+	mr	6, 31
+	li	31,0x70
+
 	subi	9,9,3
 
 	lvx	23,0,6
@@ -3085,64 +3124,64 @@ _aesp8_xts_decrypt6x:
 	vxor	17,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 	vand	11,11,10
 	vxor	7,0,17
-	vxor	8,8,11
+	xxlor	32+1, 0, 0
+	vpermxor	8, 8, 11, 1
 
 .long	0x7C235699
 	vxor	18,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	12,1,18
-	vxor	8,8,11
+	xxlor	32+2, 0, 0
+	vpermxor	8, 8, 11, 2
 
 .long	0x7C5A5699
 	andi.	31,5,15
 	vxor	19,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	13,2,19
-	vxor	8,8,11
+	xxlor	32+3, 0, 0
+	vpermxor	8, 8, 11, 3
 
 .long	0x7C7B5699
 	sub	5,5,31
 	vxor	20,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	14,3,20
-	vxor	8,8,11
+	xxlor	32+4, 0, 0
+	vpermxor	8, 8, 11, 4
 
 .long	0x7C9C5699
 	subi	5,5,0x60
 	vxor	21,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	15,4,21
-	vxor	8,8,11
+	xxlor	32+5, 0, 0
+	vpermxor	8, 8, 11, 5
 
 .long	0x7CBD5699
 	addi	10,10,0x60
 	vxor	22,8,23
 	vsrab	11,8,9
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 	vand	11,11,10
 	vxor	16,5,22
-	vxor	8,8,11
+	xxlor	32+0, 0, 0
+	vpermxor	8, 8, 11, 0
 
 	vxor	31,31,23
 	mtctr	9
@@ -3168,6 +3207,8 @@ _aesp8_xts_decrypt6x:
 	lvx	25,3,7
 	bc	16,0,.Loop_xts_dec6x
 
+	xxlor	32+10, 1, 1
+
 	subic	5,5,96
 	vxor	0,17,31
 .long	0x10E7C548
@@ -3177,7 +3218,6 @@ _aesp8_xts_decrypt6x:
 	vaddubm	8,8,8
 .long	0x11ADC548
 .long	0x11CEC548
-	vsldoi	11,11,11,15
 .long	0x11EFC548
 .long	0x1210C548
 
@@ -3185,7 +3225,8 @@ _aesp8_xts_decrypt6x:
 	vand	11,11,10
 .long	0x10E7CD48
 .long	0x118CCD48
-	vxor	8,8,11
+	xxlor	32+1, 0, 0
+	vpermxor	8, 8, 11, 1
 .long	0x11ADCD48
 .long	0x11CECD48
 	vxor	1,18,31
@@ -3196,13 +3237,13 @@ _aesp8_xts_decrypt6x:
 
 	and	0,0,5
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x10E7D548
 .long	0x118CD548
 	vand	11,11,10
 .long	0x11ADD548
 .long	0x11CED548
-	vxor	8,8,11
+	xxlor	32+2, 0, 0
+	vpermxor	8, 8, 11, 2
 .long	0x11EFD548
 .long	0x1210D548
 
@@ -3216,7 +3257,6 @@ _aesp8_xts_decrypt6x:
 	vaddubm	8,8,8
 .long	0x10E7DD48
 .long	0x118CDD48
-	vsldoi	11,11,11,15
 .long	0x11ADDD48
 .long	0x11CEDD48
 	vand	11,11,10
@@ -3224,7 +3264,8 @@ _aesp8_xts_decrypt6x:
 .long	0x1210DD48
 
 	addi	7,1,64+15
-	vxor	8,8,11
+	xxlor	32+3, 0, 0
+	vpermxor	8, 8, 11, 3
 .long	0x10E7E548
 .long	0x118CE548
 	vxor	3,20,31
@@ -3233,7 +3274,6 @@ _aesp8_xts_decrypt6x:
 .long	0x11ADE548
 .long	0x11CEE548
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x11EFE548
 .long	0x1210E548
 	lvx	24,0,7
@@ -3241,7 +3281,8 @@ _aesp8_xts_decrypt6x:
 
 .long	0x10E7ED48
 .long	0x118CED48
-	vxor	8,8,11
+	xxlor	32+4, 0, 0
+	vpermxor	8, 8, 11, 4
 .long	0x11ADED48
 .long	0x11CEED48
 	vxor	4,21,31
@@ -3251,14 +3292,14 @@ _aesp8_xts_decrypt6x:
 .long	0x1210ED48
 	lvx	25,3,7
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 
 .long	0x10E7F548
 .long	0x118CF548
 	vand	11,11,10
 .long	0x11ADF548
 .long	0x11CEF548
-	vxor	8,8,11
+	xxlor	32+5, 0, 0
+	vpermxor	8, 8, 11, 5
 .long	0x11EFF548
 .long	0x1210F548
 	vxor	5,22,31
@@ -3268,7 +3309,6 @@ _aesp8_xts_decrypt6x:
 .long	0x10E70549
 .long	0x7C005699
 	vaddubm	8,8,8
-	vsldoi	11,11,11,15
 .long	0x118C0D49
 .long	0x7C235699
 .long	0x11AD1549
@@ -3281,7 +3321,10 @@ _aesp8_xts_decrypt6x:
 .long	0x11EF2549
 
 .long	0x7C9C5699
-	vxor	8,8,11
+	xxlor	10, 32+0, 32+0
+	xxlor	32+0, 0, 0
+	vpermxor	8, 8, 11, 0
+	xxlor	32+0, 10, 10
 .long	0x12102D49
 
 .long	0x7CBD5699
@@ -3312,6 +3355,8 @@ _aesp8_xts_decrypt6x:
 	mtctr	9
 	beq	.Loop_xts_dec6x
 
+	xxlor	32+10, 2, 2
+
 	addic.	5,5,0x60
 	beq	.Lxts_dec6x_zero
 	cmpwi	5,0x20

Index: src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/poly1305-ppc.S
diff -u src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/poly1305-ppc.S:1.3 src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/poly1305-ppc.S:1.4
--- src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/poly1305-ppc.S:1.3	Tue May  9 13:21:17 2023
+++ src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/poly1305-ppc.S	Sun Sep  8 09:09:21 2024
@@ -390,7 +390,7 @@ __poly1305_splat:
 
 .align	5
 __poly1305_blocks_vsx:
-	stdu	1,-432(1)
+	stdu	1,-416(1)
 	mflr	0
 	li	10,191
 	li	11,207
@@ -401,12 +401,12 @@ __poly1305_blocks_vsx:
 	addi	11,11,32
 	stvx	22,10,1
 	addi	10,10,32
-	stvx	23,10,1
-	addi	10,10,32
-	stvx	24,11,1
+	stvx	23,11,1
 	addi	11,11,32
-	stvx	25,10,1
+	stvx	24,10,1
 	addi	10,10,32
+	stvx	25,11,1
+	addi	11,11,32
 	stvx	26,10,1
 	addi	10,10,32
 	stvx	27,11,1
@@ -417,15 +417,15 @@ __poly1305_blocks_vsx:
 	addi	11,11,32
 	stvx	30,10,1
 	stvx	31,11,1
-	stw	12,388(1)
+	stw	12,372(1)
 	li	12,-1
 	mtspr	256,12
-	std	27,392(1)
-	std	28,400(1)
-	std	29,408(1)
-	std	30,416(1)
-	std	31,424(1)
-	std	0,448(1)
+	std	27,376(1)
+	std	28,384(1)
+	std	29,392(1)
+	std	30,400(1)
+	std	31,408(1)
+	std	0,432(1)
 
 	bl	.LPICmeup
 
@@ -1060,7 +1060,7 @@ __poly1305_blocks_vsx:
 
 .align	4
 .Ldone_vsx:
-	ld	0,448(1)
+	ld	0,432(1)
 	li	27,4
 	li	28,8
 	li	29,12
@@ -1071,39 +1071,39 @@ __poly1305_blocks_vsx:
 .long	0x7C7D1919
 .long	0x7C9E1919
 
-	lwz	12,388(1)
+	lwz	12,372(1)
 	mtlr	0
 	li	10,191
 	li	11,207
 	mtspr	256,12
 	lvx	20,10,1
 	addi	10,10,32
-	lvx	21,10,1
-	addi	10,10,32
-	lvx	22,11,1
+	lvx	21,11,1
 	addi	11,11,32
-	lvx	23,10,1
+	lvx	22,10,1
 	addi	10,10,32
-	lvx	24,11,1
+	lvx	23,11,1
 	addi	11,11,32
-	lvx	25,10,1
+	lvx	24,10,1
 	addi	10,10,32
-	lvx	26,11,1
+	lvx	25,11,1
 	addi	11,11,32
-	lvx	27,10,1
+	lvx	26,10,1
 	addi	10,10,32
-	lvx	28,11,1
+	lvx	27,11,1
 	addi	11,11,32
-	lvx	29,10,1
+	lvx	28,10,1
 	addi	10,10,32
-	lvx	30,11,1
-	lvx	31,10,1
-	ld	27,392(1)
-	ld	28,400(1)
-	ld	29,408(1)
-	ld	30,416(1)
-	ld	31,424(1)
-	addi	1,1,432
+	lvx	29,11,1
+	addi	11,11,32
+	lvx	30,10,1
+	lvx	31,11,1
+	ld	27,376(1)
+	ld	28,384(1)
+	ld	29,392(1)
+	ld	30,400(1)
+	ld	31,408(1)
+	addi	1,1,416
 	blr	
 .long	0
 .byte	0,12,0x04,1,0x80,5,4,0

Reply via email to