Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Jun 2025 20:43:32 GMT
From:      Martin Matuska <mm@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: f47afeb2ce1e - stable/13 - libarchive: merge from vendor branch
Message-ID:  <202506202043.55KKhWot031198@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by mm:

URL: https://cgit.FreeBSD.org/src/commit/?id=f47afeb2ce1eb04a787a4b8c1a6d7752940268da

commit f47afeb2ce1eb04a787a4b8c1a6d7752940268da
Author:     Martin Matuska <mm@FreeBSD.org>
AuthorDate: 2025-06-01 20:16:26 +0000
Commit:     Martin Matuska <mm@FreeBSD.org>
CommitDate: 2025-06-20 20:14:01 +0000

    libarchive: merge from vendor branch
    
    libarchive 3.8.1
    
    New features:
     #2088 7-zip reader: improve self-extracting archive detection
     #2137 zip writer: added XZ, LZMA, ZSTD and BZIP2 support
     #2403 zip writer: added LZMA + RISCV BCJ filter
     #2601 bsdtar: support --mtime and --clamp-mtime
     #2602 libarchive: mbedtls 3.x compatibility
    
    Security fixes:
     #2422 tar reader: Handle truncation in the middle of a GNU long linkname
           (CVE-2024-57970)
     #2532 tar reader: fix unchecked return value in list_item_verbose()
           (CVE-2025-25724)
     #2532 unzip: fix null pointer dereference (CVE-2025-1632)
     #2568 warc: prevent signed integer overflow (CVE-2025-5916)
     #2584 rar: do not skip past EOF while reading (CVE-2025-5918)
     #2588 tar: fix overflow in build_ustar_entry (CVE-2025-5917)
     #2598 rar: fix double free with over 4 billion nodes (CVE-2025-5914)
     #2599 rar: fix heap-buffer-overflow (CVE-2025-5915)
    
    Important bugfixes:
     #2399 7-zip reader: add SPARC filter support for non-LZMA compressors
     #2405 tar reader: ignore ustar size when pax size is present
     #2435 tar writer: fix bug when -s/a/b/ used more than once with b flag
     #2459 7-zip reader: add POWERPC filter support for non-LZMA compressors
     #2519 libarchive: handle ARCHIVE_FILTER_LZOP in archive_read_append_filter
     #2539 libarchive: add missing seeker function to archive_read_open_FILE()
     #2544 gzip: allow setting the original filename for gzip compressed files
     #2564 libarchive: improve lseek handling
     #2582 rar: support large headers on 32 bit systems
     #2587 bsdtar: don't hardlink negative inode files together
     #2596 rar: support large headers on 32 bit systems
     #2606 libarchive: support @-prefixed Unix epoch timestamps as date strings
     #2634 tar: Support negative time values with pax
     #2637 tar: Keep block alignment after pax error
     #2642 libarchive: fix FILE_skip regression
     #2643 tar: Handle extra bytes after sparse entries
     #2649 compress: Prevent call stack overflow
     #2651 iso9660: always check archive_string_ensure return value
    
    CVE:            CVE-2024-57970, CVE-2025-1632, CVE-2025-25724,
                    CVE-2025-5914, CVE-2025-5915, CVE-2025-5916,
                    CVE-2025-5917, CVE-2025-5918
    PR:             286944 (exp-run on main, libarchive 3.8.0)
    
    (cherry picked from commit 2e113ef82465598b8c26e0ca415fbe90677fbd47)
---
 contrib/libarchive/COPYING                         |    2 +-
 contrib/libarchive/NEWS                            |    8 +
 contrib/libarchive/README.md                       |    9 +-
 .../github_actions/install-macos-dependencies.sh   |   19 +
 contrib/libarchive/cpio/cpio.c                     |    2 +-
 contrib/libarchive/cpio/test/test_format_newc.c    |   12 +-
 contrib/libarchive/cpio/test/test_option_a.c       |    2 +-
 contrib/libarchive/cpio/test/test_option_c.c       |    8 +-
 contrib/libarchive/libarchive/archive.h            |   57 +-
 contrib/libarchive/libarchive/archive_acl.c        |   14 +-
 .../libarchive/libarchive/archive_acl_private.h    |    2 +-
 contrib/libarchive/libarchive/archive_cmdline.c    |    2 +-
 .../libarchive/archive_cryptor_private.h           |    8 +
 contrib/libarchive/libarchive/archive_digest.c     |  344 +-
 .../libarchive/libarchive/archive_digest_private.h |   35 +-
 .../libarchive/archive_disk_acl_freebsd.c          |    4 +-
 contrib/libarchive/libarchive/archive_entry.c      |   54 +-
 contrib/libarchive/libarchive/archive_entry.h      |   84 +-
 .../libarchive/archive_entry_link_resolver.c       |    8 +
 .../libarchive/libarchive/archive_entry_locale.h   |    2 +-
 .../libarchive/libarchive/archive_entry_private.h  |   13 +-
 .../libarchive/libarchive/archive_hmac_private.h   |    2 +-
 contrib/libarchive/libarchive/archive_match.c      |  102 +-
 contrib/libarchive/libarchive/archive_options.c    |    4 +-
 .../libarchive/archive_options_private.h           |    4 +-
 contrib/libarchive/libarchive/archive_pack_dev.h   |    2 +-
 .../{archive_getdate.c => archive_parse_date.c}    |   65 +-
 contrib/libarchive/libarchive/archive_platform.h   |    5 +
 .../libarchive/libarchive/archive_platform_acl.h   |    2 +-
 .../libarchive/libarchive/archive_platform_xattr.h |    2 +-
 contrib/libarchive/libarchive/archive_ppmd7.c      |   11 +-
 contrib/libarchive/libarchive/archive_ppmd8.c      |   15 +-
 .../libarchive/libarchive/archive_ppmd_private.h   |   18 +-
 .../libarchive/libarchive/archive_random_private.h |    2 +-
 contrib/libarchive/libarchive/archive_rb.h         |    2 +-
 contrib/libarchive/libarchive/archive_read.c       |    6 -
 .../libarchive/archive_read_append_filter.c        |    4 +
 .../libarchive/archive_read_disk_entry_from_file.c |    2 +-
 .../libarchive/archive_read_disk_posix.c           |    9 +-
 .../libarchive/archive_read_disk_private.h         |    7 +-
 .../libarchive/libarchive/archive_read_format.3    |   15 +
 .../libarchive/libarchive/archive_read_open_fd.c   |   42 +-
 .../libarchive/libarchive/archive_read_open_file.c |  121 +-
 .../libarchive/archive_read_open_filename.c        |   61 +-
 .../archive_read_support_filter_by_code.c          |   14 -
 .../archive_read_support_filter_compress.c         |    3 +-
 .../libarchive/archive_read_support_filter_lz4.c   |    1 -
 .../libarchive/archive_read_support_format_7zip.c  |  445 +-
 .../archive_read_support_format_by_code.c          |   15 -
 .../libarchive/archive_read_support_format_cab.c   |    7 +-
 .../libarchive/archive_read_support_format_cpio.c  |   22 +-
 .../archive_read_support_format_iso9660.c          |    4 +-
 .../libarchive/archive_read_support_format_lha.c   |   73 +-
 .../libarchive/archive_read_support_format_rar.c   |  184 +-
 .../libarchive/archive_read_support_format_rar5.c  |  101 +-
 .../libarchive/archive_read_support_format_tar.c   |  409 +-
 .../libarchive/archive_read_support_format_warc.c  |    7 +-
 .../libarchive/archive_read_support_format_xar.c   |  355 +-
 .../libarchive/archive_read_support_format_zip.c   |   33 +-
 contrib/libarchive/libarchive/archive_string.c     |  141 +-
 .../libarchive/archive_string_composition.h        |    3 +-
 .../libarchive/libarchive/archive_string_sprintf.c |   11 +-
 contrib/libarchive/libarchive/archive_time.c       |  163 +
 .../{archive_getdate.h => archive_time_private.h}  |   26 +-
 contrib/libarchive/libarchive/archive_util.c       |   76 +-
 .../libarchive/archive_version_details.c           |  405 +-
 contrib/libarchive/libarchive/archive_write.c      |    2 +-
 .../archive_write_add_filter_b64encode.c           |    2 +-
 .../libarchive/archive_write_add_filter_gzip.c     |   19 +-
 .../libarchive/archive_write_add_filter_uuencode.c |    2 +-
 .../libarchive/archive_write_disk_posix.c          |   15 +-
 .../libarchive/archive_write_open_filename.c       |    8 +-
 .../libarchive/archive_write_set_format_7zip.c     |  298 +-
 .../libarchive/archive_write_set_format_gnutar.c   |   16 +-
 .../libarchive/archive_write_set_format_iso9660.c  |   25 +-
 .../libarchive/archive_write_set_format_mtree.c    |  123 +-
 .../libarchive/archive_write_set_format_pax.c      |    6 +-
 .../libarchive/archive_write_set_format_xar.c      |  692 +-
 .../libarchive/archive_write_set_format_zip.c      |  986 +-
 .../libarchive/archive_write_set_options.3         |   43 +-
 contrib/libarchive/libarchive/libarchive-formats.5 |   20 +-
 .../libarchive/libarchive/test/read_open_memory.c  |    2 +-
 .../libarchive/test/test_7zip_filename_encoding.c  |  200 +-
 contrib/libarchive/libarchive/test/test_acl_pax.c  |    8 +-
 .../libarchive/test/test_acl_platform_nfs4.c       |   10 +-
 .../libarchive/test/test_acl_platform_posix1e.c    |    3 +-
 .../libarchive/libarchive/test/test_acl_posix1e.c  |    8 +-
 contrib/libarchive/libarchive/test/test_acl_text.c |    2 +-
 .../libarchive/test/test_archive_match_time.c      |   71 +-
 ...archive_getdate.c => test_archive_parse_date.c} |   21 +-
 .../test/test_archive_string_conversion.c          |    4 +-
 .../libarchive/test/test_compat_gtar_large.c       |  224 +
 .../libarchive/test/test_compat_solaris_tar_acl.c  |    4 +-
 .../libarchive/test/test_compat_star_acl.c         |    6 +-
 contrib/libarchive/libarchive/test/test_entry.c    |    2 +-
 .../libarchive/libarchive/test/test_open_file.c    |    9 +-
 .../test/test_read_disk_directory_traversals.c     |    2 +-
 .../libarchive/test/test_read_format_7zip.c        |  315 +-
 .../test_read_format_7zip_deflate_powerpc.7z.uu    |   55 +
 .../test_read_format_7zip_extract_second.7z.uu     |   22 +-
 .../test/test_read_format_7zip_lzma2_powerpc.7z.uu |   48 +
 .../test/test_read_format_7zip_lzma2_riscv.7z.uu   |   49 +
 .../test/test_read_format_7zip_lzma2_sparc.7z.uu   |   51 +
 .../test/test_read_format_7zip_sfx_elf.elf.uu      | 9442 ++++++++++++++++++++
 .../test_read_format_7zip_sfx_modified_pe.exe.uu   |  109 +
 .../test/test_read_format_7zip_sfx_pe.exe.uu       | 4751 ++++++++++
 .../test/test_read_format_7zip_zstd_sparc.7z.uu    |   59 +
 .../test/test_read_format_gtar_redundant_L.c       |   40 +
 .../test_read_format_gtar_redundant_L.tar.Z.uu     |   16 +
 .../libarchive/test/test_read_format_gtar_sparse.c |    8 +-
 .../test/test_read_format_gtar_sparse_length.c     |   53 +
 .../test_read_format_gtar_sparse_length.tar.Z.uu   |   12 +
 ...est_read_format_gtar_sparse_skip_entry.tar.Z.uu |   18 +-
 .../libarchive/test/test_read_format_rar.c         |   74 +-
 .../libarchive/test/test_read_format_rar5.c        |   29 +-
 .../test/test_read_format_rar5_unicode.rar.uu      |   18 +-
 .../test/test_read_format_rar_encryption.c         |    4 +-
 .../test/test_read_format_rar_endarc_huge.rar.uu   |    4 +
 .../test/test_read_format_rar_newsub_huge.rar.uu   |    5 +
 .../test/test_read_format_rar_overflow.c           |   48 +
 .../test/test_read_format_rar_overflow.rar.uu      |   11 +
 .../test/test_read_format_rar_symlink_huge.rar.uu  |    5 +
 .../test_read_format_tar_empty_with_gnulabel.c     |    2 +-
 .../test/test_read_format_tar_mac_metadata.c       |   85 +
 .../test_read_format_tar_mac_metadata_1.tar.uu     |  231 +
 .../test/test_read_format_tar_pax_g_large.c        |   53 +
 .../test/test_read_format_tar_pax_g_large.tar.uu   |   49 +
 .../test/test_read_format_tar_pax_negative_time.c  |   68 +
 .../test_read_format_tar_pax_negative_time.tar.uu  |   60 +
 .../libarchive/test/test_read_format_warc.c        |   24 +
 .../test/test_read_format_warc_incomplete.warc.uu  |   10 +
 .../libarchive/test/test_read_format_zip.c         |    5 +-
 .../test/test_read_pax_empty_val_no_nl.c           |   65 +
 .../test/test_read_pax_empty_val_no_nl.tar.uu      |   60 +
 .../libarchive/test/test_read_position.c           |    2 +-
 .../libarchive/libarchive/test/test_sparse_basic.c |    8 +-
 .../libarchive/libarchive/test/test_tar_large.c    |    2 +-
 .../libarchive/test/test_write_disk_perms.c        |    8 +-
 .../test/test_write_disk_secure_noabsolutepaths.c  |    4 +-
 .../libarchive/test/test_write_filter_gzip.c       |    5 +-
 .../libarchive/test/test_write_format_7zip.c       |    6 +
 .../libarchive/test/test_write_format_7zip_large.c |    6 +
 .../libarchive/test/test_write_format_gnutar.c     |   29 +-
 .../test/test_write_format_mtree_preset_digests.c  | 2107 +++++
 .../libarchive/test/test_write_format_tar_sparse.c |    4 +-
 .../libarchive/test/test_write_format_xar.c        |   39 +
 .../test/test_write_format_zip64_stream.c          |  192 +-
 .../test/test_write_format_zip_compression_bzip2.c |  362 +
 .../test_write_format_zip_compression_lzmaxz.c     |  425 +
 .../test/test_write_format_zip_compression_store.c |  277 +-
 .../test/test_write_format_zip_compression_zstd.c  |  366 +
 .../test/test_write_format_zip_entry_size_unset.c  |  150 +-
 .../libarchive/test/test_write_format_zip_file.c   |  164 +-
 .../test/test_write_format_zip_file_zip64.c        |  192 +-
 .../libarchive/test/test_write_format_zip_large.c  |   35 +-
 .../libarchive/test/test_write_format_zip_stream.c |  156 +-
 contrib/libarchive/libarchive_fe/passphrase.c      |   10 +-
 contrib/libarchive/tar/bsdtar.1                    |   74 +-
 contrib/libarchive/tar/bsdtar.c                    |   35 +-
 contrib/libarchive/tar/bsdtar.h                    |   12 +-
 contrib/libarchive/tar/cmdline.c                   |    2 +
 contrib/libarchive/tar/subst.c                     |    1 +
 contrib/libarchive/tar/test/test_list_item.c       |   63 +
 contrib/libarchive/tar/test/test_list_item.tar.uu  |  169 +
 contrib/libarchive/tar/test/test_option_C_mtree.c  |    4 +-
 .../{test_option_P.c => test_option_P_upper.c}     |    0
 .../libarchive/tar/test/test_option_ignore_zeros.c |    4 +-
 contrib/libarchive/tar/test/test_option_mtime.c    |   82 +
 contrib/libarchive/tar/test/test_option_s.c        |   14 +-
 contrib/libarchive/tar/test/test_stdio.c           |   48 +-
 contrib/libarchive/tar/util.c                      |   57 +-
 contrib/libarchive/tar/write.c                     |    4 +
 contrib/libarchive/test_utils/test_common.h        |    2 +-
 contrib/libarchive/test_utils/test_main.c          |  192 +-
 contrib/libarchive/test_utils/test_utils.c         |   48 +
 contrib/libarchive/test_utils/test_utils.h         |   11 +-
 contrib/libarchive/unzip/bsdunzip.c                |   21 +-
 contrib/libarchive/unzip/la_getline.h              |   16 +
 lib/libarchive/Makefile                            |    3 +-
 lib/libarchive/tests/Makefile                      |   35 +-
 usr.bin/tar/tests/Makefile                         |    5 +-
 181 files changed, 25587 insertions(+), 2345 deletions(-)

diff --git a/contrib/libarchive/COPYING b/contrib/libarchive/COPYING
index 1b9723574a7b..9d0bcf81ff61 100644
--- a/contrib/libarchive/COPYING
+++ b/contrib/libarchive/COPYING
@@ -20,7 +20,7 @@ the actual statements in the files are controlling.
    libarchive/mtree.5
 
 * The following source files are in the public domain:
-   libarchive/archive_getdate.c
+   libarchive/archive_parse_date.c
 
 * The following source files are triple-licensed with the ability to choose
   from CC0 1.0 Universal, OpenSSL or Apache 2.0 licenses:
diff --git a/contrib/libarchive/NEWS b/contrib/libarchive/NEWS
index 6af50e4e4033..caca7d5cbdb9 100644
--- a/contrib/libarchive/NEWS
+++ b/contrib/libarchive/NEWS
@@ -1,3 +1,11 @@
+Jun 01, 2026: libarchive 3.8.1 released
+
+May 20, 2025: libarchive 3.8.0 released
+
+Mar 30, 2025: libarchive 3.7.9 released
+
+Mar 20, 2025: libarchive 3.7.8 released
+
 Oct 13, 2024: libarchive 3.7.7 released
 
 Sep 23, 2024: libarchive 3.7.6 released
diff --git a/contrib/libarchive/README.md b/contrib/libarchive/README.md
index 933de6986425..0d63357292ec 100644
--- a/contrib/libarchive/README.md
+++ b/contrib/libarchive/README.md
@@ -85,13 +85,14 @@ Currently, the library automatically detects and reads the following formats:
   * PWB binary cpio
   * ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions)
   * ZIP archives (with uncompressed or "deflate" compressed entries, including support for encrypted Zip archives)
-  * ZIPX archives (with support for bzip2, ppmd8, lzma and xz compressed entries)
+  * ZIPX archives (with support for bzip2, zstd, ppmd8, lzma and xz compressed entries)
   * GNU and BSD 'ar' archives
   * 'mtree' format
   * 7-Zip archives (including archives that use zstandard compression)
   * Microsoft CAB format
   * LHA and LZH archives
   * RAR and RAR 5.0 archives (with some limitations due to RAR's proprietary status)
+  * WARC archives
   * XAR archives
 
 The library also detects and handles any of the following before evaluating the archive:
@@ -120,15 +121,18 @@ The library can create archives in any of the following formats:
   * PWB binary cpio
   * shar archives
   * ZIP archives (with uncompressed or "deflate" compressed entries)
+  * ZIPX archives (with bzip2, zstd, lzma or xz compressed entries)
   * GNU and BSD 'ar' archives
   * 'mtree' format
   * ISO9660 format
-  * 7-Zip archives
+  * 7-Zip archives (including archives that use zstandard compression)
+  * WARC archives
   * XAR archives
 
 When creating archives, the result can be filtered with any of the following:
 
   * uuencode
+  * base64
   * gzip compression
   * bzip2 compression
   * compress/LZW compression
@@ -241,4 +245,3 @@ questions we are asked about libarchive:
   appropriate.  It has many advantages over other tar formats
   (including the legacy GNU tar format) and is widely supported by
   current tar implementations.
-
diff --git a/contrib/libarchive/build/ci/github_actions/install-macos-dependencies.sh b/contrib/libarchive/build/ci/github_actions/install-macos-dependencies.sh
new file mode 100755
index 000000000000..2aa4823fc3d0
--- /dev/null
+++ b/contrib/libarchive/build/ci/github_actions/install-macos-dependencies.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+set -eux
+
+# Uncommenting these adds a full minute to the CI time
+#brew update > /dev/null
+#brew upgrade > /dev/null
+
+# This does an upgrade if the package is already installed
+brew install \
+	autoconf \
+	automake \
+	libtool \
+	pkg-config \
+	cmake \
+	xz \
+	lz4 \
+	zstd \
+	libxml2 \
+	openssl
diff --git a/contrib/libarchive/cpio/cpio.c b/contrib/libarchive/cpio/cpio.c
index 6bc6eb22e967..2bf1bfa2985a 100644
--- a/contrib/libarchive/cpio/cpio.c
+++ b/contrib/libarchive/cpio/cpio.c
@@ -1206,7 +1206,7 @@ list_item_verbose(struct cpio *cpio, struct archive_entry *entry)
 	else
 		strcpy(date, "invalid mtime");
 
-	fprintf(out, "%s%3d %-8s %-8s %8s %12s %s",
+	fprintf(out, "%s%3u %-8s %-8s %8s %12s %s",
 	    archive_entry_strmode(entry),
 	    archive_entry_nlink(entry),
 	    uname, gname, size, date,
diff --git a/contrib/libarchive/cpio/test/test_format_newc.c b/contrib/libarchive/cpio/test/test_format_newc.c
index 884b6c9c4da7..33aa16d07a81 100644
--- a/contrib/libarchive/cpio/test/test_format_newc.c
+++ b/contrib/libarchive/cpio/test/test_format_newc.c
@@ -189,10 +189,10 @@ DEFINE_TEST(test_format_newc)
 	gid = from_hex(e + 30, 8); /* gid */
 	assertEqualMem(e + 38, "00000003", 8); /* nlink */
 	t = from_hex(e + 46, 8); /* mtime */
-	failure("t=%#08jx now=%#08jx=%jd", (intmax_t)t, (intmax_t)now,
+	failure("t=%#08jx now=%#08jx=%jd", (uintmax_t)t, (uintmax_t)now,
 	    (intmax_t)now);
 	assert(t <= now); /* File wasn't created in future. */
-	failure("t=%#08jx now - 2=%#08jx=%jd", (intmax_t)t, (intmax_t)now - 2,
+	failure("t=%#08jx now - 2=%#08jx=%jd", (uintmax_t)t, (uintmax_t)now - 2,
 	    (intmax_t)now - 2);
 	assert(t >= now - 2); /* File was created w/in last 2 secs. */
 	failure("newc format stores body only with last appearance of a link\n"
@@ -219,7 +219,7 @@ DEFINE_TEST(test_format_newc)
 		assert(is_hex(e, 110));
 		assertEqualMem(e + 0, "070701", 6); /* Magic */
 		assert(is_hex(e + 6, 8)); /* ino */
-#if defined(_WIN32) && !defined(CYGWIN)
+#if defined(_WIN32) && !defined(__CYGWIN__)
 		/* Mode: Group members bits and others bits do not work. */
 		assertEqualInt(0xa180, from_hex(e + 14, 8) & 0xffc0);
 #else
@@ -230,7 +230,7 @@ DEFINE_TEST(test_format_newc)
 		assertEqualMem(e + 38, "00000001", 8); /* nlink */
 		t2 = from_hex(e + 46, 8); /* mtime */
 		failure("First entry created at t=%#08jx this entry created"
-		    " at t2=%#08jx", (intmax_t)t, (intmax_t)t2);
+		    " at t2=%#08jx", (uintmax_t)t, (uintmax_t)t2);
 		assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */
 		assertEqualMem(e + 54, "00000005", 8); /* File size */
 		fs = (uint64_t)from_hex(e + 54, 8);
@@ -266,7 +266,7 @@ DEFINE_TEST(test_format_newc)
 #endif
 	t2 = from_hex(e + 46, 8); /* mtime */
 	failure("First entry created at t=%#08jx this entry created at"
-	    "t2=%#08jx", (intmax_t)t, (intmax_t)t2);
+	    "t2=%#08jx", (uintmax_t)t, (uintmax_t)t2);
 	assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */
 	assertEqualMem(e + 54, "00000000", 8); /* File size */
 	fs = (uint64_t)from_hex(e + 54, 8);
@@ -300,7 +300,7 @@ DEFINE_TEST(test_format_newc)
 	assertEqualMem(e + 38, "00000003", 8); /* nlink */
 	t2 = from_hex(e + 46, 8); /* mtime */
 	failure("First entry created at t=%#08jx this entry created at"
-	    "t2=%#08jx", (intmax_t)t, (intmax_t)t2);
+	    "t2=%#08jx", (uintmax_t)t, (uintmax_t)t2);
 	assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */
 	assertEqualInt(10, from_hex(e + 54, 8)); /* File size */
 	fs = (uint64_t)from_hex(e + 54, 8);
diff --git a/contrib/libarchive/cpio/test/test_option_a.c b/contrib/libarchive/cpio/test/test_option_a.c
index e6b87948c65a..28e5b73765d7 100644
--- a/contrib/libarchive/cpio/test/test_option_a.c
+++ b/contrib/libarchive/cpio/test/test_option_a.c
@@ -52,7 +52,7 @@ test_create(void)
 		 * #ifdef this section out.  Most of the test below is
 		 * still valid. */
 		memset(&times, 0, sizeof(times));
-#if defined(_WIN32) && !defined(CYGWIN)
+#if defined(_WIN32) && !defined(__CYGWIN__)
 		times.actime = 86400;
 		times.modtime = 86400;
 #else
diff --git a/contrib/libarchive/cpio/test/test_option_c.c b/contrib/libarchive/cpio/test/test_option_c.c
index e8748449514b..2414a4658bb1 100644
--- a/contrib/libarchive/cpio/test/test_option_c.c
+++ b/contrib/libarchive/cpio/test/test_option_c.c
@@ -18,7 +18,7 @@ is_octal(const char *p, size_t l)
 	return (1);
 }
 
-static long long int
+static unsigned long long int
 from_octal(const char *p, size_t l)
 {
 	long long int r = 0;
@@ -117,7 +117,7 @@ DEFINE_TEST(test_option_c)
 	gid = (int)from_octal(e + 30, 6);
 	assertEqualMem(e + 36, "000001", 6); /* nlink */
 	failure("file entries should not have rdev set (dev field was 0%o)",
-	    dev);
+	    (unsigned int)dev);
 	assertEqualMem(e + 42, "000000", 6); /* rdev */
 	t = from_octal(e + 48, 11); /* mtime */
 	assert(t <= now); /* File wasn't created in future. */
@@ -133,7 +133,7 @@ DEFINE_TEST(test_option_c)
 		assert(is_octal(e, 76)); /* Entire header is octal digits. */
 		assertEqualMem(e + 0, "070707", 6); /* Magic */
 		assertEqualInt(dev, from_octal(e + 6, 6)); /* dev */
-		assert(ino != from_octal(e + 12, 6)); /* ino */
+		assert(ino != (int)from_octal(e + 12, 6)); /* ino */
 #if !defined(_WIN32) || defined(__CYGWIN__)
 		/* On Windows, symbolic link and group members bits and
 		 * others bits do not work. */
@@ -163,7 +163,7 @@ DEFINE_TEST(test_option_c)
 	assertEqualInt(dev, from_octal(e + 6, 6));
 	/* Ino must be different from first entry. */
 	assert(is_octal(e + 12, 6)); /* ino */
-	assert(ino != from_octal(e + 12, 6));
+	assert(ino != (int)from_octal(e + 12, 6));
 #if defined(_WIN32) && !defined(__CYGWIN__)
 	/* Group members bits and others bits do not work. */
 	assertEqualMem(e + 18, "040777", 6); /* Mode */
diff --git a/contrib/libarchive/libarchive/archive.h b/contrib/libarchive/libarchive/archive.h
index 5b65475f61e2..002190a24663 100644
--- a/contrib/libarchive/libarchive/archive.h
+++ b/contrib/libarchive/libarchive/archive.h
@@ -34,12 +34,15 @@
  * assert that ARCHIVE_VERSION_NUMBER >= 2012108.
  */
 /* Note: Compiler will complain if this does not match archive_entry.h! */
-#define	ARCHIVE_VERSION_NUMBER 3007007
+#define	ARCHIVE_VERSION_NUMBER 3008001
 
 #include <sys/stat.h>
 #include <stddef.h>  /* for wchar_t */
 #include <stdio.h> /* For FILE * */
+#if ARCHIVE_VERSION_NUMBER < 4000000
+/* time_t is slated to be removed from public includes in 4.0 */
 #include <time.h> /* For time_t */
+#endif
 
 /*
  * Note: archive.h is for use outside of libarchive; the configuration
@@ -63,12 +66,15 @@
 #define __LA_INT64_T_DEFINED
 # if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
 typedef __int64 la_int64_t;
+typedef unsigned __int64 la_uint64_t;
 # else
 # include <unistd.h>  /* ssize_t */
 #  if defined(_SCO_DS) || defined(__osf__)
 typedef long long la_int64_t;
+typedef unsigned long long la_uint64_t;
 #  else
 typedef int64_t la_int64_t;
+typedef uint64_t la_uint64_t;
 #  endif
 # endif
 #endif
@@ -94,6 +100,22 @@ typedef ssize_t la_ssize_t;
 # endif
 #endif
 
+#if ARCHIVE_VERSION_NUMBER < 4000000
+/* Use the platform types for time_t */
+#define __LA_TIME_T time_t
+#else
+/* Use 64-bits integer types for time_t */
+#define __LA_TIME_T la_int64_t
+#endif
+
+#if ARCHIVE_VERSION_NUMBER < 4000000
+/* Use the platform types for dev_t */
+#define __LA_DEV_T dev_t
+#else
+/* Use 64-bits integer types for dev_t */
+#define __LA_DEV_T la_int64_t
+#endif
+
 /* Large file support for Android */
 #if defined(__LIBARCHIVE_BUILD) && defined(__ANDROID__)
 #include "android_lf.h"
@@ -132,7 +154,7 @@ typedef ssize_t la_ssize_t;
 #define	__LA_PRINTF(fmtarg, firstvararg)	/* nothing */
 #endif
 
-#if defined(__GNUC__) && __GNUC__ >= 3 && __GNUC_MINOR__ >= 1
+#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
 # define __LA_DEPRECATED __attribute__((deprecated))
 #else
 # define __LA_DEPRECATED
@@ -155,7 +177,7 @@ __LA_DECL int		archive_version_number(void);
 /*
  * Textual name/version of the library, useful for version displays.
  */
-#define	ARCHIVE_VERSION_ONLY_STRING "3.7.7"
+#define	ARCHIVE_VERSION_ONLY_STRING "3.8.1"
 #define	ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
 __LA_DECL const char *	archive_version_string(void);
 
@@ -178,6 +200,23 @@ __LA_DECL const char *  archive_liblzma_version(void);
 __LA_DECL const char *  archive_bzlib_version(void);
 __LA_DECL const char *  archive_liblz4_version(void);
 __LA_DECL const char *  archive_libzstd_version(void);
+__LA_DECL const char *  archive_liblzo2_version(void);
+__LA_DECL const char *  archive_libexpat_version(void);
+__LA_DECL const char *  archive_libbsdxml_version(void);
+__LA_DECL const char *  archive_libxml2_version(void);
+__LA_DECL const char *  archive_mbedtls_version(void);
+__LA_DECL const char *  archive_nettle_version(void);
+__LA_DECL const char *  archive_openssl_version(void);
+__LA_DECL const char *  archive_libmd_version(void);
+__LA_DECL const char *  archive_commoncrypto_version(void);
+__LA_DECL const char *  archive_cng_version(void);
+__LA_DECL const char *  archive_wincrypt_version(void);
+__LA_DECL const char *  archive_librichacl_version(void);
+__LA_DECL const char *  archive_libacl_version(void);
+__LA_DECL const char *  archive_libattr_version(void);
+__LA_DECL const char *  archive_libiconv_version(void);
+__LA_DECL const char *  archive_libpcre_version(void);
+__LA_DECL const char *  archive_libpcre2_version(void);
 
 /* Declare our basic types. */
 struct archive;
@@ -449,6 +488,8 @@ __LA_DECL int archive_read_support_format_by_code(struct archive *, int);
 __LA_DECL int archive_read_support_format_cab(struct archive *);
 __LA_DECL int archive_read_support_format_cpio(struct archive *);
 __LA_DECL int archive_read_support_format_empty(struct archive *);
+/* archive_read_support_format_gnutar() is an alias for historical reasons
+ * of archive_read_support_format_tar(). */
 __LA_DECL int archive_read_support_format_gnutar(struct archive *);
 __LA_DECL int archive_read_support_format_iso9660(struct archive *);
 __LA_DECL int archive_read_support_format_lha(struct archive *);
@@ -828,6 +869,10 @@ __LA_DECL int archive_write_set_format_filter_by_ext(struct archive *a, const ch
 __LA_DECL int archive_write_set_format_filter_by_ext_def(struct archive *a, const char *filename, const char * def_ext);
 __LA_DECL int archive_write_zip_set_compression_deflate(struct archive *);
 __LA_DECL int archive_write_zip_set_compression_store(struct archive *);
+__LA_DECL int archive_write_zip_set_compression_lzma(struct archive *);
+__LA_DECL int archive_write_zip_set_compression_xz(struct archive *);
+__LA_DECL int archive_write_zip_set_compression_bzip2(struct archive *);
+__LA_DECL int archive_write_zip_set_compression_zstd(struct archive *);
 /* Deprecated; use archive_write_open2 instead */
 __LA_DECL int archive_write_open(struct archive *, void *,
 		     archive_open_callback *, archive_write_callback *,
@@ -1083,6 +1128,10 @@ __LA_DECL int		 archive_compression(struct archive *)
 				__LA_DEPRECATED;
 #endif
 
+/* Parses a date string relative to the current time.
+ * NOTE: This is not intended for general date parsing, and the resulting timestamp should only be used for libarchive. */
+__LA_DECL time_t	archive_parse_date(time_t now, const char *datestr);
+
 __LA_DECL int		 archive_errno(struct archive *);
 __LA_DECL const char	*archive_error_string(struct archive *);
 __LA_DECL const char	*archive_format_name(struct archive *);
@@ -1201,8 +1250,10 @@ __LA_DECL int	archive_match_include_gname_w(struct archive *,
 		    const wchar_t *);
 
 /* Utility functions */
+#if ARCHIVE_VERSION_NUMBER < 4000000
 /* Convenience function to sort a NULL terminated list of strings */
 __LA_DECL int archive_utility_string_sort(char **);
+#endif
 
 #ifdef __cplusplus
 }
diff --git a/contrib/libarchive/libarchive/archive_acl.c b/contrib/libarchive/libarchive/archive_acl.c
index bbb085afe7af..9e71f5ee5610 100644
--- a/contrib/libarchive/libarchive/archive_acl.c
+++ b/contrib/libarchive/libarchive/archive_acl.c
@@ -1185,8 +1185,13 @@ archive_acl_from_text_w(struct archive_acl *acl, const wchar_t *text,
 		/* Set remaining fields to blank. */
 		for (n = fields; n < numfields; ++n)
 			field[n].start = field[n].end = NULL;
+		
+		if (field[0].start == NULL || field[0].end == NULL) {
+			/* This should never happen */
+			return (ARCHIVE_FATAL);
+		}
 
-		if (field[0].start != NULL && *(field[0].start) == L'#') {
+		if (*(field[0].start) == L'#') {
 			/* Comment, skip entry */
 			continue;
 		}
@@ -1676,7 +1681,12 @@ archive_acl_from_text_nl(struct archive_acl *acl, const char *text,
 		for (n = fields; n < numfields; ++n)
 			field[n].start = field[n].end = NULL;
 
-		if (field[0].start != NULL && *(field[0].start) == '#') {
+		if (field[0].start == NULL || field[0].end == NULL) {
+			/* This should never happen */
+			return (ARCHIVE_FATAL);
+		}
+
+		if (*(field[0].start) == '#') {
 			/* Comment, skip entry */
 			continue;
 		}
diff --git a/contrib/libarchive/libarchive/archive_acl_private.h b/contrib/libarchive/libarchive/archive_acl_private.h
index 2c9b5053430e..54e4439692ed 100644
--- a/contrib/libarchive/libarchive/archive_acl_private.h
+++ b/contrib/libarchive/libarchive/archive_acl_private.h
@@ -80,4 +80,4 @@ int archive_acl_from_text_l(struct archive_acl *, const char * /* text */,
 int archive_acl_from_text_nl(struct archive_acl *, const char * /* text */,
     size_t /* size of text */, int /* type */, struct archive_string_conv *);
 
-#endif /* ARCHIVE_ENTRY_PRIVATE_H_INCLUDED */
+#endif /* !ARCHIVE_ACL_PRIVATE_H_INCLUDED */
diff --git a/contrib/libarchive/libarchive/archive_cmdline.c b/contrib/libarchive/libarchive/archive_cmdline.c
index 2e5428cae516..23bb05d6424a 100644
--- a/contrib/libarchive/libarchive/archive_cmdline.c
+++ b/contrib/libarchive/libarchive/archive_cmdline.c
@@ -71,7 +71,7 @@ get_argument(struct archive_string *as, const char *p)
 	archive_string_empty(as);
 
 	/* Skip beginning space characters. */
-	while (*s != '\0' && *s == ' ')
+	while (*s == ' ')
 		s++;
 	/* Copy non-space characters. */
 	while (*s != '\0' && *s != ' ') {
diff --git a/contrib/libarchive/libarchive/archive_cryptor_private.h b/contrib/libarchive/libarchive/archive_cryptor_private.h
index c13f29260a07..4b3c6c161433 100644
--- a/contrib/libarchive/libarchive/archive_cryptor_private.h
+++ b/contrib/libarchive/libarchive/archive_cryptor_private.h
@@ -64,6 +64,7 @@ typedef struct {
 
 #elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
 #include <bcrypt.h>
+#define	ARCHIVE_CRYPTOR_USE_CNG 1
 
 /* Common in other bcrypt implementations, but missing from VS2008. */
 #ifndef BCRYPT_SUCCESS
@@ -86,6 +87,7 @@ typedef struct {
 #include <mbedtls/aes.h>
 #include <mbedtls/md.h>
 #include <mbedtls/pkcs5.h>
+#define	ARCHIVE_CRYPTOR_USE_MBED 1
 
 #define AES_MAX_KEY_SIZE 32
 #define AES_BLOCK_SIZE 16
@@ -105,6 +107,7 @@ typedef struct {
 #endif
 #include <nettle/aes.h>
 #include <nettle/version.h>
+#define	ARCHIVE_CRYPTOR_USE_NETTLE 1
 
 typedef struct {
 #if NETTLE_VERSION_MAJOR < 3
@@ -125,6 +128,7 @@ typedef struct {
 
 #elif defined(HAVE_LIBCRYPTO)
 #include "archive_openssl_evp_private.h"
+#define	ARCHIVE_CRYPTOR_USE_OPENSSL 1
 #define AES_BLOCK_SIZE	16
 #define AES_MAX_KEY_SIZE 32
 
@@ -140,6 +144,10 @@ typedef struct {
 
 #else
 
+#if defined(_WIN32) && !defined(__CYGWIN__) && !(defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA)
+#define ARCHIVE_CRYPTOR_USE_WINCRYPT 1
+#endif
+
 #define AES_BLOCK_SIZE	16
 #define AES_MAX_KEY_SIZE 32
 typedef int archive_crypto_ctx;
diff --git a/contrib/libarchive/libarchive/archive_digest.c b/contrib/libarchive/libarchive/archive_digest.c
index 3776831b21c9..45fc36af1145 100644
--- a/contrib/libarchive/libarchive/archive_digest.c
+++ b/contrib/libarchive/libarchive/archive_digest.c
@@ -196,6 +196,13 @@ __archive_md5final(archive_md5_ctx *ctx, void *md)
 
 #elif defined(ARCHIVE_CRYPTO_MD5_LIBSYSTEM)
 
+// These functions are available in macOS 10.4 and later, but deprecated from 10.15 onwards.
+// We need to continue supporting this feature regardless, so suppress the warnings.
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
 static int
 __archive_md5init(archive_md5_ctx *ctx)
 {
@@ -218,13 +225,46 @@ __archive_md5final(archive_md5_ctx *ctx, void *md)
   return (ARCHIVE_OK);
 }
 
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
+#elif defined(ARCHIVE_CRYPTO_MD5_WIN)
+
+static int
+__archive_md5init(archive_md5_ctx *ctx)
+{
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+  return (win_crypto_init(ctx, BCRYPT_MD5_ALGORITHM));
+#else
+  return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_MD5));
+#endif
+}
+
+static int
+__archive_md5update(archive_md5_ctx *ctx, const void *indata,
+    size_t insize)
+{
+  return (win_crypto_Update(ctx, indata, insize));
+}
+
+static int
+__archive_md5final(archive_md5_ctx *ctx, void *md)
+{
+  return (win_crypto_Final(md, 16, ctx));
+}
+
 #elif defined(ARCHIVE_CRYPTO_MD5_MBEDTLS)
 
 static int
 __archive_md5init(archive_md5_ctx *ctx)
 {
   mbedtls_md5_init(ctx);
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+  if (mbedtls_md5_starts(ctx) == 0)
+#else
   if (mbedtls_md5_starts_ret(ctx) == 0)
+#endif
     return (ARCHIVE_OK);
   else
     return (ARCHIVE_FATAL);
@@ -234,7 +274,11 @@ static int
 __archive_md5update(archive_md5_ctx *ctx, const void *indata,
     size_t insize)
 {
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+  if (mbedtls_md5_update(ctx, indata, insize) == 0)
+#else
   if (mbedtls_md5_update_ret(ctx, indata, insize) == 0)
+#endif
     return (ARCHIVE_OK);
   else
     return (ARCHIVE_FATAL);
@@ -243,7 +287,11 @@ __archive_md5update(archive_md5_ctx *ctx, const void *indata,
 static int
 __archive_md5final(archive_md5_ctx *ctx, void *md)
 {
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+  if (mbedtls_md5_finish(ctx, md) == 0) {
+#else
   if (mbedtls_md5_finish_ret(ctx, md) == 0) {
+#endif
     mbedtls_md5_free(ctx);
     return (ARCHIVE_OK);
   } else {
@@ -311,31 +359,6 @@ __archive_md5final(archive_md5_ctx *ctx, void *md)
   return (ARCHIVE_OK);
 }
 
-#elif defined(ARCHIVE_CRYPTO_MD5_WIN)
-
-static int
-__archive_md5init(archive_md5_ctx *ctx)
-{
-#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
-  return (win_crypto_init(ctx, BCRYPT_MD5_ALGORITHM));
-#else
-  return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_MD5));
-#endif
-}
-
-static int
-__archive_md5update(archive_md5_ctx *ctx, const void *indata,
-    size_t insize)
-{
-  return (win_crypto_Update(ctx, indata, insize));
-}
-
-static int
-__archive_md5final(archive_md5_ctx *ctx, void *md)
-{
-  return (win_crypto_Final(md, 16, ctx));
-}
-
 #else
 
 static int
@@ -420,7 +443,11 @@ static int
 __archive_ripemd160init(archive_rmd160_ctx *ctx)
 {
   mbedtls_ripemd160_init(ctx);
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+  if (mbedtls_ripemd160_starts(ctx) == 0)
+#else
   if (mbedtls_ripemd160_starts_ret(ctx) == 0)
+#endif
     return (ARCHIVE_OK);
   else
     return (ARCHIVE_FATAL);
@@ -430,7 +457,11 @@ static int
 __archive_ripemd160update(archive_rmd160_ctx *ctx, const void *indata,
     size_t insize)
 {
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+  if (mbedtls_ripemd160_update(ctx, indata, insize) == 0)
+#else
   if (mbedtls_ripemd160_update_ret(ctx, indata, insize) == 0)
+#endif
     return (ARCHIVE_OK);
   else
     return (ARCHIVE_FATAL);
@@ -439,7 +470,11 @@ __archive_ripemd160update(archive_rmd160_ctx *ctx, const void *indata,
 static int
 __archive_ripemd160final(archive_rmd160_ctx *ctx, void *md)
 {
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+  if (mbedtls_ripemd160_finish(ctx, md) == 0) {
+#else
   if (mbedtls_ripemd160_finish_ret(ctx, md) == 0) {
+#endif
     mbedtls_ripemd160_free(ctx);
     return (ARCHIVE_OK);
   } else {
@@ -605,13 +640,42 @@ __archive_sha1final(archive_sha1_ctx *ctx, void *md)
   return (ARCHIVE_OK);
 }
 
+#elif defined(ARCHIVE_CRYPTO_SHA1_WIN)
+
+static int
+__archive_sha1init(archive_sha1_ctx *ctx)
+{
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+  return (win_crypto_init(ctx, BCRYPT_SHA1_ALGORITHM));
+#else
+  return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_SHA1));
+#endif
+}
+
+static int
+__archive_sha1update(archive_sha1_ctx *ctx, const void *indata,
+    size_t insize)
+{
+  return (win_crypto_Update(ctx, indata, insize));
+}
+
+static int
+__archive_sha1final(archive_sha1_ctx *ctx, void *md)
+{
+  return (win_crypto_Final(md, 20, ctx));
+}
+
 #elif defined(ARCHIVE_CRYPTO_SHA1_MBEDTLS)
 
 static int
 __archive_sha1init(archive_sha1_ctx *ctx)
 {
   mbedtls_sha1_init(ctx);
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+  if (mbedtls_sha1_starts(ctx) == 0)
+#else
   if (mbedtls_sha1_starts_ret(ctx) == 0)
+#endif
     return (ARCHIVE_OK);
   else
     return (ARCHIVE_FATAL);
@@ -621,7 +685,11 @@ static int
 __archive_sha1update(archive_sha1_ctx *ctx, const void *indata,
     size_t insize)
 {
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+  if (mbedtls_sha1_update(ctx, indata, insize) == 0)
+#else
   if (mbedtls_sha1_update_ret(ctx, indata, insize) == 0)
+#endif
     return (ARCHIVE_OK);
   else
     return (ARCHIVE_FATAL);
@@ -630,7 +698,11 @@ __archive_sha1update(archive_sha1_ctx *ctx, const void *indata,
 static int
 __archive_sha1final(archive_sha1_ctx *ctx, void *md)
 {
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+  if (mbedtls_sha1_finish(ctx, md) == 0) {
+#else
   if (mbedtls_sha1_finish_ret(ctx, md) == 0) {
+#endif
     mbedtls_sha1_free(ctx);
     return (ARCHIVE_OK);
   } else {
@@ -698,31 +770,6 @@ __archive_sha1final(archive_sha1_ctx *ctx, void *md)
   return (ARCHIVE_OK);
 }
 
-#elif defined(ARCHIVE_CRYPTO_SHA1_WIN)
-
-static int
-__archive_sha1init(archive_sha1_ctx *ctx)
-{
-#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
-  return (win_crypto_init(ctx, BCRYPT_SHA1_ALGORITHM));
-#else
-  return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_SHA1));
-#endif
-}
-
-static int
-__archive_sha1update(archive_sha1_ctx *ctx, const void *indata,
-    size_t insize)
-{
-  return (win_crypto_Update(ctx, indata, insize));
-}
-
-static int
-__archive_sha1final(archive_sha1_ctx *ctx, void *md)
-{
-  return (win_crypto_Final(md, 20, ctx));
-}
-
 #else
 
 static int
@@ -873,13 +920,42 @@ __archive_sha256final(archive_sha256_ctx *ctx, void *md)
   return (ARCHIVE_OK);
 }
 
+#elif defined(ARCHIVE_CRYPTO_SHA256_WIN)
+
+static int
+__archive_sha256init(archive_sha256_ctx *ctx)
+{
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+  return (win_crypto_init(ctx, BCRYPT_SHA256_ALGORITHM));
+#else
+  return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_256));
+#endif
+}
+
+static int
+__archive_sha256update(archive_sha256_ctx *ctx, const void *indata,
+    size_t insize)
+{
+  return (win_crypto_Update(ctx, indata, insize));
+}
*** 35191 LINES SKIPPED ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506202043.55KKhWot031198>