diff --git a/.github/renovate.json5 b/.github/renovate.json5 new file mode 100644 index 0000000000..cf31aad664 --- /dev/null +++ b/.github/renovate.json5 @@ -0,0 +1,32 @@ +{ + $schema: 'https://docs.renovatebot.com/renovate-schema.json', + extends: [ + 'config:best-practices', + ':configMigration', + ':pinVersions', + ':rebaseStalePrs', + 'schedule:weekends', + 'customManagers:githubActionsVersions', + 'helpers:pinGitHubActionDigests', + ], + commitMessagePrefix: 'ci:', + commitMessageAction: 'update', + commitMessageTopic: '{{depName}}', + labels: [ + 'dependencies', + ], + minimumReleaseAge: '3 days', + packageRules: [ + { + matchUpdateTypes: ['pin', 'pinDigest'], + commitMessageAction: 'pin', + }, + ], + osvVulnerabilityAlerts: true, + vulnerabilityAlerts: { + enabled: true, + addLabels: [ + 'security', + ], + }, +} diff --git a/.github/scripts/changelog.sh b/.github/scripts/changelog.sh new file mode 100755 index 0000000000..026549eb9a --- /dev/null +++ b/.github/scripts/changelog.sh @@ -0,0 +1,74 @@ +#!/bin/sh +# Copyright (c) 2023 Joshua Sing +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +# +# Usage: changelog.sh +# Reads the changelog for the specified version from the changelog file. +# The output will be reformatted for use in GitHub releases. +# +# The changelog file defaults to "ChangeLog", but can be changed by setting +# the environment variable $CHANGELOG_FILE +# + +set -e + +# Check if the version argument is provided +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " 1>&2 + exit 1 +fi + +version="${1#v}" +changelog_file="${CHANGELOG_FILE:-ChangeLog}" +found_version=false +changelog="" + +# Check if the specified changelog file exists +if [ ! -f "$changelog_file" ]; then + echo "Error: Changelog file '$changelog_file' not found" 1>&2 + exit 1 +fi + +# Read the changelog file line by line +while IFS= read -r line; do + # Check for the version line + if echo "$line" | grep -Eq "^${version} - "; then + found_version=true + continue + fi + + # Continue reading the changelog until the next version or end of file, + # skipping empty lines + if $found_version; then + echo "$line" | grep -Eq "^\s*$" && continue + echo "$line" | grep -Eq "^[0-9]+\.[0-9]+\.[0-9]+ - " && break + changelog="${changelog}${line}\n" + fi +done < "$changelog_file" + +# If the specified version was not found, print an error +if ! $found_version; then + echo "Error: Version $version was not found in changelog" 1>&2 + exit 1 +fi + +# Tidy up the changelog for displaying on GitHub +changelog=$(echo "$changelog" | sed -e 's/^\t\*/###/' -e 's/^\t//') + +# Print the changelog for the specified version +echo "$changelog" +echo +echo "Full changelog: https://github.com/libressl/portable/blob/master/ChangeLog" +exit 0 diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 0000000000..d9d3b3671a --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,42 @@ +# GitHub Actions workflow to run tests on Android. +name: "Android" + +on: [push, pull_request] + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +jobs: + test: + name: "Test ${{ matrix.name }}" + runs-on: ubuntu-24.04 + permissions: + contents: read + strategy: + fail-fast: false + matrix: + include: + - name: "Android 8-9" + min-nal: 26 + max-nal: 28 + - name: "Android 10-11" + min-nal: 29 + max-nal: 30 + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Install build dependencies" + run: | + sudo apt-get update + sudo apt-get install -y cmake ninja-build + + - name: "Run CI script" + run: ./scripts/test + env: + ARCH: "android" + MIN_NAL: "${{ matrix.min-nal }}" + MAX_NAL: "${{ matrix.max-nal }}" diff --git a/.github/workflows/android_test.yml b/.github/workflows/android_test.yml deleted file mode 100644 index 6ce002ba98..0000000000 --- a/.github/workflows/android_test.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: android_ci - -on: [push, pull_request] - -jobs: - build-android-8-9: - runs-on: ubuntu-18.04 - continue-on-error: false - env: - ARCH: android - MIN_NAL: 26 - MAX_NAL: 28 - name: Android 8.x 9 - steps: - - uses: actions/checkout@v2 - - name: Run CI script - run: ./scripts/test - - build-android-10-11: - runs-on: ubuntu-18.04 - continue-on-error: false - env: - ARCH: android - MIN_NAL: 29 - MAX_NAL: 30 - name: Android 10 11 - steps: - - uses: actions/checkout@v2 - - name: Run CI script - run: ./scripts/test diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml new file mode 100644 index 0000000000..56da4ee5e7 --- /dev/null +++ b/.github/workflows/cifuzz.yml @@ -0,0 +1,46 @@ +name: "CIFuzz" + +on: + workflow_dispatch: + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +jobs: + fuzz: + name: "Fuzz" + runs-on: "ubuntu-24.04" + permissions: + security-events: write + steps: + - name: "Build Fuzzers" + id: build + uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@1b73904cfccf3addafb6d599b8e0f32e710790cc + with: + oss-fuzz-project-name: 'libressl' + dry-run: false + language: c++ + + - name: "Run Fuzzers" + uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@1b73904cfccf3addafb6d599b8e0f32e710790cc + with: + oss-fuzz-project-name: 'libressl' + fuzz-seconds: 300 + dry-run: false + language: c++ + output-sarif: true + + - name: "Upload Crash" + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + if: failure() && steps.build.outcome == 'success' + with: + name: "artifacts" + path: "./out/artifacts" + + - name: "Upload SARIF" + uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9 + if: always() && steps.build.outcome == 'success' + with: + sarif_file: "cifuzz-sarif/results.sarif" + category: "cifuzz-sarif" diff --git a/.github/workflows/cmake-config.yml b/.github/workflows/cmake-config.yml new file mode 100644 index 0000000000..493242d3af --- /dev/null +++ b/.github/workflows/cmake-config.yml @@ -0,0 +1,100 @@ +# GitHub Actions workflow to check CMake config. +name: "CMake Check" + +on: + push: {} + pull_request: {} + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +jobs: + check: + name: "${{ matrix.os }}" + runs-on: "${{ matrix.os }}" + strategy: + fail-fast: true + matrix: + os: [ "windows-2022", "macos-14", "ubuntu-24.04" ] + defaults: + run: + shell: "bash" + permissions: + contents: read + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Setup Windows dependencies" + if: runner.os == 'Windows' + uses: msys2/setup-msys2@66cd2cce69caa17b53920067426061ca1de3a884 # v2.32.0 + with: + update: true + install: >- + autoconf + automake + diffutils + libtool + gcc + git + patch + perl + + - name: "Setup macOS dependencies" + if: runner.os == 'macOS' + run: brew install automake libtool + + - name: "Prepare source tree for build (Windows)" + if: runner.os == 'Windows' + shell: "msys2 {0}" + run: ./autogen.sh + + - name: "Prepare source tree for build (Unix)" + if: runner.os != 'Windows' + run: ./autogen.sh + + - name: "Configure" + run: | + cmake -S . \ + -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/../local + + - name: "Build" + run: cmake --build build --config Release --verbose + + - name: "Install" + run: cmake --install build --config Release + + - name: "Consume from the build directory - Configure" + run: | + cmake -S tests/cmake \ + -B consumer-build \ + -D CMAKE_BUILD_TYPE=Release \ + -D LibreSSL_DIR=$GITHUB_WORKSPACE/build + + - name: "Consume from the build directory - Build" + run: cmake --build consumer-build --config Release --verbose + + - name: "Consume from the install directory (CMAKE_PREFIX_PATH) - Configure" + run: | + cmake -S tests/cmake \ + -B consumer-install-prefix \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/../local + + - name: "Consume from the install directory (CMAKE_PREFIX_PATH) - Build" + run: cmake --build consumer-install-prefix --config Release --verbose + + - name: "Consume from the install directory (LibreSSL_DIR) - Configure" + run: | + cmake -S tests/cmake \ + -B consumer-install-dir \ + -D CMAKE_BUILD_TYPE=Release \ + -D LibreSSL_DIR=$GITHUB_WORKSPACE/../local/lib/cmake/LibreSSL + + - name: "Consume from the install directory (LibreSSL_DIR) - Build" + run: cmake --build consumer-install-dir --config Release --verbose diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml new file mode 100644 index 0000000000..33aba2ef31 --- /dev/null +++ b/.github/workflows/coverity.yml @@ -0,0 +1,74 @@ +# GitHub Actions workflow to run Coverity scans. +name: "Coverity" + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" # At 00:00 daily. + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +jobs: + scan: + name: "Scan" + environment: + name: "coverity" + deployment: false + runs-on: "ubuntu-24.04" + if: github.repository_owner == 'libressl' # Prevent running on forks + permissions: + contents: read + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Install dependencies" + run: | + sudo apt-get update + sudo apt-get install -y cmake ninja-build + + - name: "Download Coverity build tool" + env: + PROJECT: "libressl-portable%2Fportable" + COVERITY_SCAN_TOKEN: "${{ secrets.COVERITY_SCAN_TOKEN }}" + run: | + wget -nv https://scan.coverity.com/download/linux64 --post-data "token=$COVERITY_SCAN_TOKEN&project=$PROJECT" -O coverity_tool.tar.gz + mkdir coverity_tool + tar xzf coverity_tool.tar.gz --strip 1 -C coverity_tool + + - name: "Setup" + run: | + ./autogen.sh + ./configure + make dist + tar zxf libressl-*.tar.gz + rm libressl-*.tar.gz + cd libressl-* + mkdir build-static + mkdir build-shared + cmake -GNinja -DBUILD_SHARED_LIBS=ON .. + + - name: "Build with Coverity build tool" + run: | + export PATH=`pwd`/coverity_tool/bin:$PATH + cd libressl-* + cov-build --dir cov-int ninja + + - name: "Submit build result to Coverity Scan" + env: + EMAIL: "libressl-security@openbsd.org" + PROJECT: "libressl-portable%2Fportable" + COVERITY_SCAN_TOKEN: "${{ secrets.COVERITY_SCAN_TOKEN }}" + run: | + cd libressl-* + tar czvf cov.tar.gz cov-int + curl --form token=$COVERITY_SCAN_TOKEN \ + --form email=$EMAIL \ + --form file=@cov.tar.gz \ + --form version="Commit $GITHUB_SHA" \ + --form description="Build submitted via CI" \ + https://scan.coverity.com/builds?project=$PROJECT diff --git a/.github/workflows/cross_test.yml b/.github/workflows/cross_test.yml deleted file mode 100644 index c5b6b25ebf..0000000000 --- a/.github/workflows/cross_test.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: cross_ci - -on: [push, pull_request] - -jobs: - build-other: - strategy: - matrix: - os: [ubuntu-18.04, ubuntu-20.04] - arch: [mingw32, mingw64, arm32, arm64] - runs-on: ${{ matrix.os }} - continue-on-error: false - env: - CC: gcc - ARCH: ${{ matrix.arch }} - name: ${{ matrix.arch }} - ${{ matrix.os }} - steps: - - uses: actions/checkout@v2 - - name: Run CI script - run: ./scripts/test diff --git a/.github/workflows/emscripten.yml b/.github/workflows/emscripten.yml new file mode 100644 index 0000000000..ba0eb021f5 --- /dev/null +++ b/.github/workflows/emscripten.yml @@ -0,0 +1,87 @@ +# GitHub Actions workflow to run for Emscripten. +name: "Emscripten" + +on: + push: {} + pull_request: {} + schedule: + - cron: "0 0 * * *" # At 00:00 daily. + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + +jobs: + test: + name: "Emscripten" + runs-on: "ubuntu-24.04" + if: ${{ github.repository_owner == 'libressl' || github.event_name != 'schedule' }} + permissions: + contents: read + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Install test dependencies" + run: | + sudo apt-get update + sudo apt-get install -y libio-socket-ssl-perl + perl -MIO::Socket::SSL::Utils -e 1 + + - name: "Setup emsdk" + uses: mymindstorm/setup-emsdk@4528d102f7230f0e7b276855c01ea1159be0e984 # v16 + with: + version: "3.1.60" + + - name: "Prepare repository" + run: ./autogen.sh + + - name: "Configure CMake" + run: emcmake cmake -Bbuild + + - name: "Build" + run: cmake --build build --config Release --parallel 4 + + - name: "Test" + run: ctest --test-dir build -C Release --parallel --output-on-failure + + # Test ASAN with and without ASM enabled. + test-asan: + name: "ASAN (no-asm)" + runs-on: "ubuntu-24.04" + if: ${{ github.repository_owner == 'libressl' || github.event_name != 'schedule' }} + permissions: + contents: read + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Install test dependencies" + run: | + sudo apt-get update + sudo apt-get install -y libio-socket-ssl-perl + perl -MIO::Socket::SSL::Utils -e 1 + + - name: "Setup emsdk" + uses: mymindstorm/setup-emsdk@4528d102f7230f0e7b276855c01ea1159be0e984 # v16 + with: + version: "3.1.60" + + - name: "Prepare repository" + run: ./autogen.sh + + - name: "Configure CMake" + run: emcmake cmake -Bbuild + env: + CFLAGS: "-gsource-map -fsanitize=address" + LDFLAGS: "-fsanitize=address" + + - name: "Build" + run: cmake --build build --config Release --parallel 4 + + - name: "Test" + run: ctest --test-dir build -C Release --parallel --output-on-failure diff --git a/.github/workflows/fedora-rawhide.yml b/.github/workflows/fedora-rawhide.yml new file mode 100644 index 0000000000..4ae9158561 --- /dev/null +++ b/.github/workflows/fedora-rawhide.yml @@ -0,0 +1,42 @@ +name: Fedora/Rawhide + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build_and_test: + strategy: + matrix: + cc: [ gcc, clang ] + name: ${{ matrix.cc }} + runs-on: ubuntu-24.04 + if: ${{ github.repository_owner == 'libressl' || github.event_name != 'schedule' }} + container: + image: fedora:rawhide@sha256:0c1f63ed8fb818fad16cf6ae091598c410a21d2e1a9adf183beb93189299bfba + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - name: Install dependencies + run: | + dnf -y install git make clang cmake ninja-build autoconf automake libtool diffutils patch gawk perl-IO-Socket-SSL + perl -MIO::Socket::SSL::Utils -e 1 + - name: Pull upstream source + run: | + ./update.sh + - name: Build + run: | + CC=${{ matrix.cc }} cmake -GNinja -DBUILD_SHARED_LIBS=ON . + ninja + - name: Test + run: | + CTEST_PARALLEL_LEVEL="" ninja test diff --git a/.github/workflows/freebsd.yml b/.github/workflows/freebsd.yml new file mode 100644 index 0000000000..ecf705e323 --- /dev/null +++ b/.github/workflows/freebsd.yml @@ -0,0 +1,77 @@ +# GitHub Actions workflow to run tests on a FreeBSD VM. +name: "FreeBSD" + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" # At 00:00 daily. + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +env: + FREEBSD_VERSION: "14.1" + +jobs: + autoconf: + name: "autoconf" + runs-on: ubuntu-24.04 + if: github.repository_owner == 'libressl' || github.event_name != 'schedule' + permissions: + contents: read + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Setup" + run: | + sudo apt-get update + sudo apt-get install -y automake autoconf libtool + ./autogen.sh + + - name: "Build on VM" + uses: vmactions/freebsd-vm@f0552d3b69211736abd97f02ff3d4674c56b73b1 # v1.5.5 + with: + release: "${{ env.FREEBSD_VERSION }}" + copyback: false + prepare: | + pkg install -y autoconf automake libtool p5-IO-Socket-SSL + run: | + perl -MIO::Socket::SSL::Utils -e 1 + ./configure + make -j2 check || (cat tests/test-suite.log && exit 1) + + cmake: + name: "cmake" + runs-on: ubuntu-24.04 + if: github.repository_owner == 'libressl' || github.event_name != 'schedule' + permissions: + contents: read + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Setup" + run: | + sudo apt-get update + sudo apt-get install -y automake autoconf libtool + ./autogen.sh + + - name: "Build on VM" + uses: vmactions/freebsd-vm@f0552d3b69211736abd97f02ff3d4674c56b73b1 # v1.5.5 + with: + release: "${{ env.FREEBSD_VERSION }}" + copyback: false + prepare: | + pkg install -y cmake ninja p5-IO-Socket-SSL + run: | + perl -MIO::Socket::SSL::Utils -e 1 + export CTEST_OUTPUT_ON_FAILURE=1 + cmake -G Ninja -B build + ninja -C build + ninja -C build test diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 0000000000..06dda17674 --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,122 @@ +# GitHub Actions workflow to run tests on Linux. +name: "Linux" + +on: + push: {} + pull_request: {} + schedule: + - cron: "0 0 * * *" # At 00:00 daily. + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +jobs: + # Test against all supported architectures. + test: + name: "${{ matrix.os }}/${{ matrix.arch }} (${{ matrix.compiler }})" + runs-on: "${{ matrix.os }}" + if: ${{ github.repository_owner == 'libressl' || github.event_name != 'schedule' }} + permissions: + contents: read + strategy: + fail-fast: false + matrix: + os: ["ubuntu-22.04", "ubuntu-24.04"] + arch: ["native", "arm32", "arm64", "mingw32", "mingw64", "mips32", "mips64"] + compiler: ["gcc"] + include: + - os: "ubuntu-22.04" + arch: "native" + compiler: "clang" + - os: "ubuntu-24.04" + arch: "native" + compiler: "clang" + - os: "ubuntu-24.04" # loong64 + arch: "loong64" + compiler: "gcc" + - os: "ubuntu-24.04" + arch: "riscv64" + compiler: "gcc" + - os: "ubuntu-24.04-arm" + arch: "native" + compiler: "gcc" + - os: "ubuntu-24.04-arm" + arch: "native" + compiler: "clang" + + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Install test dependencies" + run: | + packages=(cmake ninja-build libio-socket-ssl-perl) + case "${{ matrix.arch }}" in + mingw32|mingw64) + packages+=(mingw-w64) + ;; + arm32) + packages+=(qemu-user-static binfmt-support g++-arm-linux-gnueabihf) + ;; + arm64) + packages+=(qemu-user-static binfmt-support g++-aarch64-linux-gnu) + ;; + loong64) + packages+=(qemu-user-static binfmt-support g++-14-loongarch64-linux-gnu) + ;; + mips32) + packages+=(qemu-user-static binfmt-support g++-mipsel-linux-gnu) + ;; + mips64) + packages+=(qemu-user-static binfmt-support g++-mips64el-linux-gnuabi64) + ;; + riscv64) + packages+=(qemu-user-static binfmt-support g++-riscv64-linux-gnu) + ;; + esac + sudo apt-get update + sudo apt-get install -y "${packages[@]}" + perl -MIO::Socket::SSL::Utils -e 1 + + - name: "Run tests" + run: ./scripts/test || (status=$?; cat tests/test-suite.log; exit $status) + env: + ARCH: "${{ matrix.arch }}" + CC: "${{ matrix.compiler }}" + + # Test ASAN with and without ASM enabled. + test-asan: + name: "${{ matrix.os }} - ASAN (${{ matrix.asm == 'ON' && 'asm' || 'no-asm' }})" + runs-on: "${{ matrix.os }}" + if: ${{ github.repository_owner == 'libressl' || github.event_name != 'schedule' }} + permissions: + contents: read + strategy: + fail-fast: false + matrix: + asm: [ON, OFF] + os: ["ubuntu-24.04", "ubuntu-24.04-arm"] + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Install test dependencies" + run: | + sudo apt-get update + sudo apt-get install -y cmake ninja-build libio-socket-ssl-perl + perl -MIO::Socket::SSL::Utils -e 1 + + - name: "Run tests" + run: ./scripts/test + env: + ARCH: "native" + CC: "clang" + CFLAGS: "-ggdb -fsanitize=address" + LDFLAGS: "-fsanitize=address" + ENABLE_ASM: "${{ matrix.asm }}" + CTEST_OUTPUT_ON_FAILURE: 1 diff --git a/.github/workflows/linux_test.yml b/.github/workflows/linux_test.yml deleted file mode 100644 index 028c1a4041..0000000000 --- a/.github/workflows/linux_test.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: linux_ci - -on: [push, pull_request] - -jobs: - build-native: - strategy: - matrix: - os: [ubuntu-18.04, ubuntu-20.04] - compiler: [clang, gcc] - runs-on: ${{ matrix.os }} - continue-on-error: false - env: - CC: ${{ matrix.compiler }} - ARCH: native - name: ${{ matrix.compiler }} - ${{ matrix.os }} - steps: - - uses: actions/checkout@v2 - - name: Run CI script - run: ./scripts/test diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml new file mode 100644 index 0000000000..1aabcd8180 --- /dev/null +++ b/.github/workflows/macos.yml @@ -0,0 +1,44 @@ +# GitHub Actions workflow to run tests on macOS. +name: "macOS" + +on: + push: {} + pull_request: {} + schedule: + - cron: "0 0 * * 0" # At 00:00 weekly on Sunday. + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +jobs: + test: + name: "${{ matrix.os }}/${{ matrix.arch }}" + runs-on: "${{ matrix.os }}" + if: ${{ github.repository_owner == 'libressl' || github.event_name != 'schedule' }} + permissions: + contents: read + strategy: + fail-fast: false + matrix: + os: ["macos-26", "macos-15", "macos-14"] + arch: ["arm64", "x86_64"] + steps: + - name: "Install required packages" + run: | + brew install automake libtool perl cpanminus + PERL="$(brew --prefix perl)/bin/perl" + "$PERL" "$(command -v cpanm)" --notest IO::Socket::SSL + echo "$(brew --prefix perl)/bin" >> "$GITHUB_PATH" + "$PERL" -MIO::Socket::SSL::Utils -e 1 + + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Run tests" + run: ./scripts/test + env: + ARCH: "${{ matrix.arch }}" + OS: "${{ matrix.os }}" diff --git a/.github/workflows/macos_test.yml b/.github/workflows/macos_test.yml deleted file mode 100644 index 29e6cdc953..0000000000 --- a/.github/workflows/macos_test.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: macos_ci - -on: [push, pull_request] - -jobs: - build-native: - strategy: - matrix: - os: [macos-latest] - compiler: [clang, gcc] - runs-on: ${{ matrix.os }} - continue-on-error: false - env: - CC: ${{ matrix.compiler }} - ARCH: native - name: ${{ matrix.compiler }} - ${{ matrix.os }} - steps: - - name: Install packages for macos - run: brew install automake - - uses: actions/checkout@v2 - - name: Run CI script - run: ./scripts/test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..86023cf4a9 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,107 @@ +# GitHub Actions workflow to create releases from tags. +name: "Release" + +on: + push: + tags: [ "v*" ] + workflow_dispatch: + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: false + +permissions: {} + +jobs: + release: + name: "Release" + runs-on: "ubuntu-24.04" + permissions: + contents: write # Required to create release. + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Generate version changelog" + run: .github/scripts/changelog.sh "$VERSION" > release-changelog.txt + env: + VERSION: "${{ github.ref_name }}" + + - name: "Create draft GitHub release" + env: + GH_TOKEN: "${{ github.token }}" + VERSION: "${{ github.ref_name }}" + run: | + gh release create "$VERSION" \ + --repo "$GITHUB_REPOSITORY" \ + --title "$VERSION" \ + --notes-file release-changelog.txt \ + --draft + + build-windows: + name: "${{ matrix.os }}/${{ matrix.arch }}" + runs-on: "${{ matrix.os }}" + needs: ["release"] + permissions: + contents: write # Required to upload release assets. + strategy: + matrix: + os: [ "windows-2022" ] + arch: [ "Win32", "x64", "ARM64" ] + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Setup MSYS2" + uses: msys2/setup-msys2@66cd2cce69caa17b53920067426061ca1de3a884 # v2.32.0 + with: + update: true + install: >- + autoconf + automake + diffutils + libtool + gcc + git + patch + perl + + - name: "Run autogen" + shell: msys2 {0} + run: ./autogen.sh + + - name: "Configure" + shell: pwsh + env: + ARCH: "${{ matrix.arch }}" + run: cmake -Bbuild -G "Visual Studio 17 2022" -A "${env:ARCH}" -DCMAKE_INSTALL_PREFIX=local + + - name: "Build" + shell: pwsh + run: cmake --build build --config Release + + - name: "Install" + shell: pwsh + run: cmake --install build --config Release + + - name: "Package release artifact" + shell: pwsh + env: + VERSION: "${{ github.ref_name }}" + ARCH: "${{ matrix.arch }}" + run: Compress-Archive -Path local\* "libressl_${env:VERSION}_windows_${env:ARCH}.zip" + + - name: "Upload release artifact" + shell: bash + env: + GH_TOKEN: "${{ github.token }}" + VERSION: "${{ github.ref_name }}" + ARCH: "${{ matrix.arch }}" + run: | + gh release upload "$VERSION" \ + --repo "$GITHUB_REPOSITORY" \ + "libressl_${VERSION}_windows_${ARCH}.zip" diff --git a/.github/workflows/rust-openssl.yml b/.github/workflows/rust-openssl.yml new file mode 100644 index 0000000000..600d15a655 --- /dev/null +++ b/.github/workflows/rust-openssl.yml @@ -0,0 +1,49 @@ +# GitHub Actions workflow to run rust-openssl regress tests. +name: "rust-openssl" + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" # At 00:00 daily. + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +jobs: + test: + name: "Test" + runs-on: "ubuntu-24.04" + if: ${{ github.repository_owner == 'libressl' || github.event_name != 'schedule' }} + permissions: + contents: read + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Build LibreSSL" + run: | + ./autogen.sh + ./configure --prefix="${HOME}/opt" + make all install + + - name: "Clone rust-openssl" + run: | + git clone https://github.com/sfackler/rust-openssl.git + + - name: "Run rust-openssl tests" + run: | + cd rust-openssl + # instead of erroring use the last supported version + ed -s openssl-sys/build/main.rs <<-EOF + /_ => version_error/-1 + .t. + s/(.*=/_ = + +1d + w + q + EOF + export OPENSSL_DIR=${HOME}/opt LD_LIBRARY_PATH=${HOME}/opt/lib + cargo test --verbose diff --git a/.github/workflows/solaris.yml b/.github/workflows/solaris.yml new file mode 100644 index 0000000000..0241051ec2 --- /dev/null +++ b/.github/workflows/solaris.yml @@ -0,0 +1,41 @@ +# GitHub Actions workflow to run tests on a Solaris VM. +name: "Solaris" + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" # At 00:00 daily. + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +jobs: + test: + name: "Solaris" + runs-on: ubuntu-24.04 + if: ${{ github.repository_owner == 'libressl' || github.event_name != 'schedule' }} + permissions: + contents: read + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Setup" + run: | + sudo apt-get update + sudo apt-get install -y automake autoconf libtool + ./autogen.sh + + - name: "Build on VM" + uses: vmactions/solaris-vm@96d8d976f9e67d82ec6c7e8ce9c1060731f9e21c # v1.3.9 + with: + prepare: | + pkg install gcc make + PERL_MM_USE_DEFAULT=1 cpan -T IO::Socket::SSL + run: | + perl -MIO::Socket::SSL::Utils -e 1 + MAKE=gmake ./configure + gmake -j2 check || (cat tests/test-suite.log && exit 1) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 0000000000..719921415a --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,100 @@ +# GitHub Actions workflow to run tests on Windows. +name: "Windows" + +on: + push: {} + pull_request: {} + schedule: + - cron: "0 0 * * 0" # At 00:00 weekly on Sunday. + +concurrency: + group: "${{ github.workflow }}-${{ github.event.number || github.ref }}" + cancel-in-progress: true + +jobs: + test: + name: "${{ matrix.os }}/${{ matrix.arch }} (${{ matrix.shared == 'ON' && 'shared' || 'static' }})" + runs-on: "${{ matrix.os }}" + if: ${{ github.repository_owner == 'libressl' || github.event_name != 'schedule' }} + permissions: + contents: read + strategy: + fail-fast: false + matrix: + os: ["windows-2022", "windows-2025"] + arch: ["x64", "Win32"] + shared: ["ON", "OFF"] + include: + - os: "windows-11-vs2026-arm" + arch: "ARM64" + shared: "ON" + - os: "windows-11-vs2026-arm" + arch: "ARM64" + shared: "OFF" + steps: + - name: "Checkout repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Setup MSYS2" + id: msys2 + uses: msys2/setup-msys2@66cd2cce69caa17b53920067426061ca1de3a884 # v2.32.0 + with: + update: true + install: >- + diffutils + gcc + git + patch + perl + perl-IO-Socket-SSL + + - name: "Update" + shell: msys2 {0} + run: ./update.sh + + - name: "Configure CMake" + shell: pwsh + run: | + $perl = Join-Path '${{ steps.msys2.outputs.msys2-location }}' 'usr\bin\perl.exe' + & $perl -MIO::Socket::SSL::Utils -e 1 + if ($LASTEXITCODE -ne 0) { + throw "IO::Socket::SSL::Utils is unavailable" + } + + $vswhere = Join-Path ${env:ProgramFiles(x86)} 'Microsoft Visual Studio\Installer\vswhere.exe' + $component = if ('${{ matrix.arch }}' -eq 'ARM64') { + 'Microsoft.VisualStudio.Component.VC.Tools.ARM64' + } else { + 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64' + } + $version = & $vswhere -latest -products * -requires $component -property installationVersion + if (-not $version) { + throw "No Visual Studio installation with $component found" + } + $major = $version.Split('.')[0] + $generator = cmake --help | + Select-String "^\s*\*?\s*(Visual Studio $major \d+)" | + Select-Object -First 1 | + ForEach-Object { $_.Matches[0].Groups[1].Value } + if (-not $generator) { + throw "No CMake generator found for Visual Studio $major" + } + Write-Host "Using generator: $generator" + cmake -Bbuild -G "$generator" -A ${{ matrix.arch }} -D BUILD_SHARED_LIBS=${{ matrix.shared }} -D CMAKE_INSTALL_PREFIX=../local "-DPERL_EXECUTABLE=$perl" + + - name: "Build" + shell: cmd + run: cmake --build build --config Release + + - name: "Test" + shell: cmd + run: ctest --test-dir build -C Release --parallel --output-on-failure + + - name: "Upload build artifacts" + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: "${{ matrix.os }}-${{ matrix.arch }}${{ matrix.shared == 'ON' && '-shared' || '' }}-build-results" + path: "build" diff --git a/.gitignore b/.gitignore index 04cfc1e66f..d85df81568 100644 --- a/.gitignore +++ b/.gitignore @@ -27,12 +27,20 @@ *.gcov *.gcda +# mandoc stuff +links +mandoc.db + # Autotools stuff .deps .dirstamp Makefile Makefile.in +# CMake stuff +build* +cmake-build-debug/ + # Libtool stuff .libs *.lo @@ -52,52 +60,123 @@ openssl.cnf x509v3.cnf # tests +tap-driver.sh test-driver *.log *.trs +tests/*.crl tests/aes_wrap* tests/arc4random_fork* +tests/asn1api* +tests/asn1basic* +tests/asn1complex* tests/asn1evp* +tests/asn1object* +tests/asn1oct* +tests/asn1string_copy* +tests/asn1_string_to_utf8* tests/asn1time* +tests/asn1x509* +tests/bio_asn1* +tests/bio_chain* +tests/bio_dump* +tests/bio_host* +tests/bio_mem* tests/bnaddsub* +tests/bn_add_sub* +tests/bn_bits* +tests/bn_cmp* +tests/bn_convert* +tests/bn_ffdh* +tests/bn_gcd* +tests/bn_isqrt* +tests/bn_mod_exp* +tests/bn_mod_exp_zero* +tests/bn_mod_exp2_mont* +tests/bn_mod_inverse* +tests/bn_mod_sqrt* +tests/bn_mont* +tests/bn_primes* +tests/bn_print* tests/bn_rand_interval* +tests/bn_shift* tests/bn_to_string* +tests/bn_unit* +tests/bn_word* +tests/callback* tests/cipher* tests/constraints* +tests/crypto_test* +tests/ctlog.conf +tests/*.crt +tests/ec_arithmetic* tests/ec_point_conversion* +tests/ecc_cdh* +tests/evp_pkey_cleanup* tests/explicit_bzero* tests/freenull* tests/gost2814789t* tests/key_schedule* +tests/lhash_test* +tests/mlkem* tests/mont* +tests/parse* +tests/policy* +tests/renegotiation_test* +tests/rfc3779* tests/rfc5280time* tests/ssl_get_shared_ciphers* +tests/ssl_kex* tests/ssl_methods* +tests/ssl_set_alpn_protos* +tests/ssl_verify_param* tests/ssl_versions* tests/timingsafe* tests/tls_ext_alpn* tests/tls_prf* tests/*test tests/tests.h +tests/test.h tests/*test.c tests/pbkdf2* tests/*.pem +tests/certs/ +tests/create-libressl-test-certs.pl +tests/make-dir-roots.pl tests/testssl tests/*.txt tests/compat/*.c +tests/ssl_verify.c tests/verify* +tests/x509_verify* +!tests/x509_verify.sh +tests/x509_algor* +tests/x509_asn1* +tests/x509_crl* +tests/x509_extensions_test* tests/x509_info* +tests/x509_name_test* tests/x509attribute* tests/x509name* +tests/x509req_ext* !tests/optionstest.c !tests/*.test tests/client.c tests/init_pledge.c tests/server.c -tests/util.c +tests/*util.c tests/valid_handshakes_terminate* tests/handshake_table* +# benchmarks, tests with external dependencies +tests/bn_general* +tests/bn_mul_div* +tests/expirecallback* +tests/wycheproof-primes* + +# update.sh creates this for some reason +tests/empty.c + # ctags stuff TAGS @@ -105,7 +184,6 @@ autom4te.cache # Libtool adds these, at least sometimes INSTALL -/COPYING !m4/check*.m4 m4/l* @@ -128,6 +206,7 @@ stamp-h1 stamp-h2 include/openssl/Makefile.am +include/arch VERSION crypto/VERSION @@ -135,10 +214,14 @@ ssl/VERSION tls/VERSION libtls-standalone/VERSION +crypto/*.mk +ssl/hidden ssl/*.c ssl/*.h +ssl/*.mk tls/*.c tls/*.h +tls/*.mk include/pqueue.h include/tls.h include/openssl/*.h @@ -165,33 +248,96 @@ include/openssl/*.h !/apps/openssl/apps_win.c !/apps/openssl/certhash_win.c -/crypto/* -!/crypto/Makefile.am.* -!/crypto/compat/arc4random.h -!/crypto/compat/b_win.c -!/crypto/compat/explicit_bzero_win.c -!/crypto/compat/freezero.c -!/crypto/compat/getpagesize.c -!/crypto/compat/posix_win.c -!/crypto/compat/bsd_asprintf.c -!/crypto/compat/timegm.c -!/crypto/compat/ui_openssl_win.c -!/crypto/compat/crypto_lock_win.c -!/crypto/CMakeLists.txt - -!/libtls-standalone/compat/Makefile.am -/libtls-standalone/include/*.h -/libtls-standalone/src/*.c -/libtls-standalone/src/*.h -/libtls-standalone/src -/libtls-standalone/tests/test -/libtls-standalone/compat -/libtls-standalone/VERSION -/libtls-standalone/m4 -/libtls-standalone/man +/crypto/*.c +/crypto/*.h +/crypto/aes/ +/crypto/arch/aarch64/crypto_arch.h +/crypto/arch/aarch64/crypto_cpu_caps.c +/crypto/arch/alpha/ +/crypto/arch/amd64/ +/crypto/arch/arm/ +/crypto/arch/hppa/ +/crypto/arch/i386/ +/crypto/arch/m88k/ +/crypto/arch/mips64/ +/crypto/arch/powerpc/ +/crypto/arch/powerpc64/ +/crypto/arch/riscv64/ +/crypto/arch/sh/ +/crypto/arch/sparc64/ +/crypto/asn1/ +/crypto/bf/ +/crypto/bio/ +/crypto/bn/*.c +/crypto/bn/*.h +/crypto/bn/arch/aarch64/ +/crypto/bn/arch/alpha/ +/crypto/bn/arch/amd64/ +/crypto/bn/arch/arm/ +/crypto/bn/arch/hppa/ +/crypto/bn/arch/i386/ +/crypto/bn/arch/m88k/ +/crypto/bn/arch/mips64/ +/crypto/bn/arch/powerpc/ +/crypto/bn/arch/powerpc64/ +/crypto/bn/arch/riscv64/ +/crypto/bn/arch/sh/ +/crypto/bn/arch/sparc64/ +/crypto/buffer/ +/crypto/bytestring/ +/crypto/camellia/ +/crypto/cast/ +/crypto/chacha/ +/crypto/cmac/ +/crypto/cms/ +/crypto/conf/ +/crypto/ct/ +/crypto/curve25519/ +/crypto/des/ +/crypto/dh/ +/crypto/dsa/ +/crypto/ec/ +/crypto/ecdh/ +/crypto/ecdsa/ +/crypto/engine/ +/crypto/err/ +/crypto/evp/ +/crypto/hidden/ +/crypto/hkdf/ +/crypto/hmac/ +/crypto/idea/ +/crypto/kdf/ +/crypto/lhash/ +/crypto/md4/ +/crypto/md5/ +/crypto/mlkem/ +/crypto/modes/ +/crypto/objects/ +/crypto/ocsp/ +/crypto/pem/ +/crypto/pkcs12/ +/crypto/pkcs7/ +/crypto/poly1305/ +/crypto/rand/ +/crypto/rc2/ +/crypto/rc4/ +/crypto/ripemd/ +/crypto/rsa/ +/crypto/sha/ +/crypto/sm3/ +/crypto/sm4/ +/crypto/stack/ +/crypto/ts/ +/crypto/txt_db/ +/crypto/ui/ +/crypto/x509/ openbsd/ *.tar.gz man/Makefile.am man/mandoc.db + +# JetBrains IDEs +.idea/ +*.iml diff --git a/CMakeLists.txt b/CMakeLists.txt index f1616532b3..269038cb8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,27 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +cmake_minimum_required (VERSION 3.16.4) + if(MSVC) - cmake_minimum_required (VERSION 3.16.4) cmake_policy(SET CMP0091 NEW) -else() - cmake_minimum_required (VERSION 3.0) endif() -project (LibreSSL C ASM) +project(LibreSSL LANGUAGES C ASM) +include(CheckCSourceCompiles) include(CheckFunctionExists) include(CheckSymbolExists) include(CheckLibraryExists) @@ -18,6 +33,16 @@ include(cmake_export_symbol) include(GNUInstallDirs) enable_testing() +find_program(PERL_EXECUTABLE perl perl5) +set(HAVE_PERL_IO_SOCKET_SSL_UTILS FALSE) +if(PERL_EXECUTABLE) + execute_process(COMMAND ${PERL_EXECUTABLE} -MIO::Socket::SSL::Utils -e 1 + RESULT_VARIABLE PERL_IO_SOCKET_SSL_UTILS_RESULT + OUTPUT_QUIET ERROR_QUIET) + if(PERL_IO_SOCKET_SSL_UTILS_RESULT EQUAL 0) + set(HAVE_PERL_IO_SOCKET_SSL_UTILS TRUE) + endif() +endif() file(READ ${CMAKE_CURRENT_SOURCE_DIR}/ssl/VERSION SSL_VERSION) string(STRIP ${SSL_VERSION} SSL_VERSION) @@ -41,6 +66,8 @@ option(ENABLE_ASM "Enable assembly" ON) option(ENABLE_EXTRATESTS "Enable extra tests that may be unreliable on some platforms" OFF) option(ENABLE_NC "Enable installing TLS-enabled nc(1)" OFF) set(OPENSSLDIR ${OPENSSLDIR} CACHE PATH "Set the default openssl directory" FORCE) +set(TLS_DEFAULT_CA_FILE ${TLS_DEFAULT_CA_FILE} CACHE PATH "Set the default CA file for libtls" FORCE) +set(LIBRESSL_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/LibreSSL" CACHE STRING "Installation directory for the CMake targets") option(USE_STATIC_MSVC_RUNTIMES "Use /MT instead of /MD in MSVC" OFF) if(USE_STATIC_MSVC_RUNTIMES) @@ -51,13 +78,28 @@ if(NOT LIBRESSL_SKIP_INSTALL) set( ENABLE_LIBRESSL_INSTALL ON ) endif(NOT LIBRESSL_SKIP_INSTALL) +# Set a default build type if none was specified +set(default_build_type "Release") -set(BUILD_NC true) - -if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - add_definitions(-fno-common) +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to '${default_build_type}' as none was specified.") + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE + STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY + STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() +# Do not disable assertions based on CMAKE_BUILD_TYPE +foreach(_build_type "Release" "MinSizeRel" "RelWithDebInfo") + foreach(_lang C CXX) + string(TOUPPER "CMAKE_${_lang}_FLAGS_${_build_type}" _var) + string(REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " " ${_var} "${${_var}}") + endforeach() +endforeach() + +set(BUILD_NC true) + if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD") add_definitions(-DHAVE_ATTRIBUTE__BOUNDED__) add_definitions(-DHAVE_ATTRIBUTE__DEAD__) @@ -71,15 +113,19 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux") set(PLATFORM_LIBS ${PLATFORM_LIBS} pthread) endif() -if(WIN32 OR (CMAKE_SYSTEM_NAME MATCHES "MINGW")) - set(BUILD_NC false) - add_definitions(-D_GNU_SOURCE) - add_definitions(-D_POSIX) - add_definitions(-D_POSIX_SOURCE) - add_definitions(-D__USE_MINGW_ANSI_STDIO) +if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + set(PLATFORM_LIBS ${PLATFORM_LIBS} pthread) endif() -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -Wall") +if(WIN32) + set(BUILD_NC false) + if(MINGW) + add_definitions(-D_GNU_SOURCE) + add_definitions(-D_POSIX) + add_definitions(-D_POSIX_SOURCE) + add_definitions(-D__USE_MINGW_ANSI_STDIO) + endif() +endif() if(CMAKE_SYSTEM_NAME MATCHES "HP-UX") if(CMAKE_C_COMPILER MATCHES "gcc") @@ -93,12 +139,13 @@ if(CMAKE_SYSTEM_NAME MATCHES "HP-UX") endif() if(CMAKE_SYSTEM_NAME MATCHES "SunOS") + set(SOLARIS TRUE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -fno-strict-aliasing") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__EXTENSIONS__") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=600") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBSD_COMP") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic") - set(PLATFORM_LIBS ${PLATFORM_LIBS} nsl socket) + set(PLATFORM_LIBS ${PLATFORM_LIBS} dl md nsl socket) endif() add_definitions(-DLIBRESSL_INTERNAL) @@ -109,43 +156,149 @@ add_definitions(-D__END_HIDDEN_DECLS=) set(CMAKE_POSITION_INDEPENDENT_CODE true) if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") - add_definitions(-Wno-pointer-sign) + add_compile_options($<$:-Wno-pointer-sign>) +endif() + +# Exploit-mitigation flags, matching the default-on hardening the autotools +# build applies (m4/check-hardening-options.m4). The CMake build shipped none +# of these, so a cmake-built libcrypto/libssl/libtls and openssl(1) had no +# stack protector, no _FORTIFY_SOURCE, no RELRO/BIND_NOW and no CET, and the +# mingw DLLs missed the DEP/ASLR opt-ins. MSVC is left to its own toolchain +# defaults, exactly as that m4 (which only drives gcc/clang/mingw flags) does. +# Every flag is probed before use so unsupported targets simply skip it. +option(ENABLE_HARDENING + "Enable options to frustrate memory corruption exploits" ON) +option(ENABLE_WINDOWS_SSP + "Build stack smashing protection on Windows (requires libssp)" OFF) + +if(ENABLE_HARDENING AND NOT MSVC AND + (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")) + include(CheckCCompilerFlag) + + macro(add_harden_cflag _flag _var) + check_c_compiler_flag("${_flag}" ${_var}) + if(${_var}) + add_compile_options($<$:${_flag}>) + endif() + endmacro() + + # CMake 3.16 predates check_linker_flag, so probe link flags by linking. + macro(add_harden_ldflag _flag _var) + set(_saved_link_options "${CMAKE_REQUIRED_LINK_OPTIONS}") + set(CMAKE_REQUIRED_LINK_OPTIONS "${_flag}") + check_c_source_compiles("int main(void){return 0;}" ${_var}) + set(CMAKE_REQUIRED_LINK_OPTIONS "${_saved_link_options}") + if(${_var}) + add_link_options("${_flag}") + endif() + endmacro() + + # Do not optimize based on signed arithmetic overflow. + add_harden_cflag(-fno-strict-overflow HAVE_CFLAG_FNO_STRICT_OVERFLOW) + + if(NOT WIN32) + # _FORTIFY_SOURCE needs an optimizing build and warns without one, + # so probe it at -O2 and only apply it to non-Debug C compiles. + set(_saved_req_flags "${CMAKE_REQUIRED_FLAGS}") + set(CMAKE_REQUIRED_FLAGS + "-O2 -Werror -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") + check_c_source_compiles("#include +int main(void){char b[8];const char *s=\"x\";strcpy(b,s);return b[0];}" + HAVE_CFLAG_FORTIFY_SOURCE) + set(CMAKE_REQUIRED_FLAGS "${_saved_req_flags}") + if(HAVE_CFLAG_FORTIFY_SOURCE) + add_compile_options( + "$<$,$>>:-U_FORTIFY_SOURCE>" + "$<$,$>>:-D_FORTIFY_SOURCE=2>") + endif() + + # Read-only relocations, resolved at load time. wasm has no + # ELF loader and wasm-ld only warns about unknown -z values, + # so the probe false-positives on Emscripten; skip it there. + if(NOT EMSCRIPTEN) + add_harden_ldflag(-Wl,-z,relro HAVE_LDFLAG_Z_RELRO) + add_harden_ldflag(-Wl,-z,now HAVE_LDFLAG_Z_NOW) + endif() + else() + # Windows (mingw) DEP, ASLR and high-entropy ASLR opt-ins. + add_harden_ldflag(-Wl,--nxcompat HAVE_LDFLAG_NXCOMPAT) + add_harden_ldflag(-Wl,--dynamicbase HAVE_LDFLAG_DYNAMICBASE) + add_harden_ldflag(-Wl,--high-entropy-va HAVE_LDFLAG_HIGH_ENTROPY_VA) + endif() + + # Stack smashing protection. On Windows this pulls in libssp, so it is + # opt-in there, mirroring --enable-windows-ssp. Emscripten accepts the + # flag (and the frameless probe links), but its libc has no + # __stack_chk_guard/__stack_chk_fail, so any protected frame fails to + # link; it provides its own stack checks (-sSTACK_OVERFLOW_CHECK). + if(NOT EMSCRIPTEN AND (NOT WIN32 OR ENABLE_WINDOWS_SSP)) + check_c_compiler_flag(-fstack-protector-strong + HAVE_CFLAG_STACK_PROTECTOR_STRONG) + if(HAVE_CFLAG_STACK_PROTECTOR_STRONG) + add_compile_options( + $<$:-fstack-protector-strong>) + else() + add_harden_cflag(-fstack-protector-all + HAVE_CFLAG_STACK_PROTECTOR_ALL) + endif() + if(WIN32) + set(PLATFORM_LIBS ${PLATFORM_LIBS} ssp) + endif() + endif() + + # Control-flow integrity (Intel CET); unsupported on Darwin. + if(NOT APPLE) + add_harden_cflag(-fcf-protection=full HAVE_CFLAG_CF_PROTECTION) + endif() endif() if(WIN32) add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-D_CRT_DEPRECATED_NO_WARNINGS) add_definitions(-D_REENTRANT -D_POSIX_THREAD_SAFE_FUNCTIONS) - add_definitions(-DCPPFLAGS -DNO_SYSLOG -DNO_CRYPT) + add_definitions(-DNO_SYSLOG) add_definitions(-DWIN32_LEAN_AND_MEAN) if(NOT CMAKE_SYSTEM_NAME MATCHES "WindowsStore") add_definitions(-D_WIN32_WINNT=0x0600) endif() - set(PLATFORM_LIBS ${PLATFORM_LIBS} ws2_32 bcrypt) + set(PLATFORM_LIBS ${PLATFORM_LIBS} ws2_32 ntdll bcrypt) endif() if(MSVC) add_definitions(-Dinline=__inline) message(STATUS "Using [${CMAKE_C_COMPILER_ID}] compiler") + + include(TestBigEndian) + TEST_BIG_ENDIAN(HAVE_BIG_ENDIAN) + if(HAVE_BIG_ENDIAN) + add_definitions(-DHAVE_BIG_ENDIAN) + else() + add_definitions(-DHAVE_LITTLE_ENDIAN) + endif() + if(CMAKE_C_COMPILER_ID MATCHES "MSVC" OR CMAKE_C_COMPILER_ID MATCHES "Clang") set(MSVC_DISABLED_WARNINGS_LIST "C4018" # 'expression' : signed/unsigned mismatch "C4057" # 'operator' : 'identifier1' indirection to - # slightly different base types from 'identifier2' + # slightly different base types from 'identifier2' "C4100" # 'identifier' : unreferenced formal parameter "C4127" # conditional expression is constant + "C4132" # 'object' : const object should be initialized "C4146" # unary minus operator applied to unsigned type, - # result still unsigned + # result still unsigned + "C4206" # nonstandard extension used : translation unit is empty "C4244" # 'argument' : conversion from 'type1' to 'type2', - # possible loss of data + # possible loss of data "C4245" # 'conversion' : conversion from 'type1' to 'type2', - # signed/unsigned mismatch + # signed/unsigned mismatch "C4267" # 'var' : conversion from 'size_t' to 'type', - # possible loss of data + # possible loss of data + "C4295" # 'array' : array is too small to include a terminating + # null character "C4389" # 'operator' : signed/unsigned mismatch "C4706" # assignment within conditional expression "C4996" # The POSIX name for this item is deprecated. - # Instead, use the ISO C and C++ conformant name + # Instead, use the ISO C and C++ conformant name ) elseif(CMAKE_C_COMPILER_ID MATCHES "Intel") add_definitions(-D_CRT_SUPPRESS_RESTRICT) @@ -169,34 +322,61 @@ if(MSVC) ${MSVC_DISABLED_WARNINGS_LIST}) string(REGEX REPLACE "[/-]W[1234][ ]?" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -MP -W4 ${MSVC_DISABLED_WARNINGS_STR}") +else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") endif() +# XXX - needs _GNU_SOURCE on linux check_function_exists(asprintf HAVE_ASPRINTF) if(HAVE_ASPRINTF) add_definitions(-DHAVE_ASPRINTF) endif() -check_function_exists(reallocarray HAVE_REALLOCARRAY) +check_symbol_exists(ftruncate "unistd.h" HAVE_FTRUNCATE) +if(HAVE_FTRUNCATE) + add_definitions(-DHAVE_FTRUNCATE) +endif() + +check_symbol_exists(getdelim "stdio.h" HAVE_GETDELIM) +if(HAVE_GETDELIM) + add_definitions(-DHAVE_GETDELIM) +endif() + +check_symbol_exists(getline "stdio.h" HAVE_GETLINE) +if(HAVE_GETLINE) + add_definitions(-DHAVE_GETLINE) +endif() + +check_symbol_exists(getopt "unistd.h" HAVE_GETOPT) +if(HAVE_GETOPT) + add_definitions(-DHAVE_GETOPT) +endif() + +check_symbol_exists(reallocarray "stdlib.h" HAVE_REALLOCARRAY) if(HAVE_REALLOCARRAY) add_definitions(-DHAVE_REALLOCARRAY) endif() +# XXX strcasecmp() is in strings.h which isn't available everywhere check_function_exists(strcasecmp HAVE_STRCASECMP) if(HAVE_STRCASECMP) add_definitions(-DHAVE_STRCASECMP) endif() -check_function_exists(strlcat HAVE_STRLCAT) -if(HAVE_STRLCAT) - add_definitions(-DHAVE_STRLCAT) -endif() +# Emscripten's strlcat and strlcpy triggers ASAN errors +if(NOT EMSCRIPTEN) + check_symbol_exists(strlcat "string.h" HAVE_STRLCAT) + if(HAVE_STRLCAT) + add_definitions(-DHAVE_STRLCAT) + endif() -check_function_exists(strlcpy HAVE_STRLCPY) -if(HAVE_STRLCPY) - add_definitions(-DHAVE_STRLCPY) + check_symbol_exists(strlcpy "string.h" HAVE_STRLCPY) + if(HAVE_STRLCPY) + add_definitions(-DHAVE_STRLCPY) + endif() endif() -check_function_exists(strndup HAVE_STRNDUP) +check_symbol_exists(strndup "string.h" HAVE_STRNDUP) if(HAVE_STRNDUP) add_definitions(-DHAVE_STRNDUP) endif() @@ -205,108 +385,348 @@ if(WIN32) set(HAVE_STRNLEN true) add_definitions(-DHAVE_STRNLEN) else() - check_function_exists(strnlen HAVE_STRNLEN) + check_symbol_exists(strnlen "string.h" HAVE_STRNLEN) if(HAVE_STRNLEN) add_definitions(-DHAVE_STRNLEN) endif() endif() -check_function_exists(strsep HAVE_STRSEP) +check_symbol_exists(strsep "string.h" HAVE_STRSEP) if(HAVE_STRSEP) add_definitions(-DHAVE_STRSEP) endif() -check_function_exists(timegm HAVE_TIMEGM) -if(HAVE_TIMEGM) - add_definitions(-DHAVE_TIMEGM) +check_symbol_exists(strtonum "stdlib.h" HAVE_STRTONUM) +if(HAVE_STRTONUM) + add_definitions(-DHAVE_STRTONUM) +endif() + +# +# arc4random on these platform versions falls back to a weak seed when it +# cannot open /dev/random, so the builtin one is used there instead. Same +# versions as the USE_BUILTIN_ARC4RANDOM checks in m4/check-os-options.m4. +# +set(USE_BUILTIN_ARC4RANDOM FALSE) +if(APPLE) + # getentropy(2) arrived in 10.12 but is not tagged as introduced + # there, so the deployment target has to be tested directly. + check_c_source_compiles(" + #include + #include + #include + #ifndef MAC_OS_X_VERSION_10_12 + #define MAC_OS_X_VERSION_10_12 101200 + #endif + #if defined(MAC_OS_X_VERSION_MIN_REQUIRED) + #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12 + #error \"Targeting Mac OS X 10.11 or earlier\" + #endif + #endif + int main(void) { char buf[1]; return getentropy(buf, 1); }" + HAVE_MACOS_GETENTROPY) + if(NOT HAVE_MACOS_GETENTROPY) + set(USE_BUILTIN_ARC4RANDOM TRUE) + endif() +elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + check_c_source_compiles(" + #include + #if __FreeBSD_version < 1200000 + #error \"FreeBSD 11 or earlier\" + #endif + int main(void) { return 0; }" + HAVE_FREEBSD_ARC4RANDOM) + if(NOT HAVE_FREEBSD_ARC4RANDOM) + set(USE_BUILTIN_ARC4RANDOM TRUE) + endif() +elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") + check_c_source_compiles(" + #include + #if __NetBSD_Version__ < 700000001 + #error \"NetBSD 6 or earlier\" + #endif + int main(void) { return 0; }" + HAVE_NETBSD_ARC4RANDOM) + if(NOT HAVE_NETBSD_ARC4RANDOM) + set(USE_BUILTIN_ARC4RANDOM TRUE) + endif() endif() -check_function_exists(arc4random_buf HAVE_ARC4RANDOM_BUF) +check_symbol_exists(arc4random_buf "stdlib.h" HAVE_ARC4RANDOM_BUF) +if(USE_BUILTIN_ARC4RANDOM) + set(HAVE_ARC4RANDOM_BUF FALSE) +endif() if(HAVE_ARC4RANDOM_BUF) add_definitions(-DHAVE_ARC4RANDOM_BUF) endif() -check_function_exists(arc4random_uniform HAVE_ARC4RANDOM_UNIFORM) +check_symbol_exists(arc4random_uniform "stdlib.h" HAVE_ARC4RANDOM_UNIFORM) if(HAVE_ARC4RANDOM_UNIFORM) add_definitions(-DHAVE_ARC4RANDOM_UNIFORM) endif() -check_function_exists(explicit_bzero HAVE_EXPLICIT_BZERO) +check_symbol_exists(explicit_bzero "string.h" HAVE_EXPLICIT_BZERO) if(HAVE_EXPLICIT_BZERO) add_definitions(-DHAVE_EXPLICIT_BZERO) endif() -check_function_exists(getauxval HAVE_GETAUXVAL) +check_symbol_exists(getauxval "sys/auxv.h" HAVE_GETAUXVAL) if(HAVE_GETAUXVAL) add_definitions(-DHAVE_GETAUXVAL) endif() +# XXX macos fails to find getentropy with check_symbol_exists() check_function_exists(getentropy HAVE_GETENTROPY) +if(APPLE AND NOT HAVE_MACOS_GETENTROPY) + # Weakly linked against the SDK, but absent at runtime before 10.12. + set(HAVE_GETENTROPY FALSE) +endif() if(HAVE_GETENTROPY) add_definitions(-DHAVE_GETENTROPY) endif() -check_symbol_exists(getpagesize unistd.h HAVE_GETPAGESIZE) +check_symbol_exists(getpagesize "unistd.h" HAVE_GETPAGESIZE) if(HAVE_GETPAGESIZE) add_definitions(-DHAVE_GETPAGESIZE) endif() -check_function_exists(getprogname HAVE_GETPROGNAME) +check_symbol_exists(getprogname "stdlib.h" HAVE_GETPROGNAME) if(HAVE_GETPROGNAME) add_definitions(-DHAVE_GETPROGNAME) endif() -check_function_exists(syslog_r HAVE_SYSLOG_R) +check_symbol_exists(pledge "unistd.h" HAVE_PLEDGE) +if(HAVE_PLEDGE) + add_definitions(-DHAVE_PLEDGE) +endif() + +check_symbol_exists(unveil "unistd.h" HAVE_UNVEIL) +if(HAVE_UNVEIL) + add_definitions(-DHAVE_UNVEIL) +endif() + +check_symbol_exists(syslog_r "syslog.h;stdarg.h" HAVE_SYSLOG_R) if(HAVE_SYSLOG_R) add_definitions(-DHAVE_SYSLOG_R) endif() +# XXX - needs _GNU_SOURCE on linux check_function_exists(syslog HAVE_SYSLOG) if(HAVE_SYSLOG) add_definitions(-DHAVE_SYSLOG) endif() +check_function_exists(vsyslog HAVE_VSYSLOG) +if(HAVE_VSYSLOG) + add_definitions(-DHAVE_VSYSLOG) +endif() + check_symbol_exists(timespecsub sys/time.h HAVE_TIMESPECSUB) if(HAVE_TIMESPECSUB) add_definitions(-DHAVE_TIMESPECSUB) endif() -check_function_exists(timingsafe_bcmp HAVE_TIMINGSAFE_BCMP) +check_symbol_exists(timingsafe_bcmp "string.h" HAVE_TIMINGSAFE_BCMP) if(HAVE_TIMINGSAFE_BCMP) add_definitions(-DHAVE_TIMINGSAFE_BCMP) endif() -check_function_exists(timingsafe_memcmp HAVE_TIMINGSAFE_MEMCMP) -if(HAVE_MEMCMP) - add_definitions(-DHAVE_MEMCMP) +check_symbol_exists(timingsafe_memcmp "string.h" HAVE_TIMINGSAFE_MEMCMP) +if(HAVE_TIMINGSAFE_MEMCMP) + add_definitions(-DHAVE_TIMINGSAFE_MEMCMP) endif() +# XXX - needs _GNU_SOURCE on linux check_function_exists(memmem HAVE_MEMMEM) if(HAVE_MEMMEM) add_definitions(-DHAVE_MEMMEM) endif() +check_include_files(endian.h HAVE_ENDIAN_H) +if(HAVE_ENDIAN_H) + add_definitions(-DHAVE_ENDIAN_H) +endif() + +check_include_files(machine/endian.h HAVE_MACHINE_ENDIAN_H) +if(HAVE_MACHINE_ENDIAN_H) + add_definitions(-DHAVE_MACHINE_ENDIAN_H) +endif() + check_include_files(err.h HAVE_ERR_H) if(HAVE_ERR_H) add_definitions(-DHAVE_ERR_H) endif() +check_include_files("sys/types.h;arpa/inet.h;netinet/ip.h" HAVE_NETINET_IP_H) +if(HAVE_NETINET_IP_H) + add_definitions(-DHAVE_NETINET_IP_H) +endif() + +check_include_files(resolv.h HAVE_RESOLV_H) +if(HAVE_RESOLV_H) + add_definitions(-DHAVE_RESOLV_H) +endif() + +check_include_files(arpa/nameser.h HAVE_ARPA_NAMESER_H) +if(HAVE_ARPA_NAMESER_H) + add_definitions(-DHAVE_ARPA_NAMESER_H) +endif() + +# This isn't ready for universal binaries yet, since we do conditional +# compilation based on the architecture, but this makes cross compiling for a +# single architecture work on macOS at least. +# +# Don't set CMAKE_OSX_ARCHITECTURES to more than a single value for now. +if(APPLE AND (NOT CMAKE_OSX_ARCHITECTURES STREQUAL "")) + set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_OSX_ARCHITECTURES}") +endif() + +# CMAKE_SYSTEM_PROCESSOR is not consistently set to the target architecture. +# https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_PROCESSOR.html +if (WIN32 AND (NOT CMAKE_GENERATOR_PLATFORM STREQUAL "")) + message("CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") + message("CMAKE_GENERATOR_PLATFORM: ${CMAKE_GENERATOR_PLATFORM}") + set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_GENERATOR_PLATFORM}") +endif() + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "(aarch64|arm64|ARM64)") + set(HOST_AARCH64 true) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm") + set(HOST_ARM true) + if(APPLE) + set(ENABLE_ASM false) + endif() +elseif(SOLARIS AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386") + set(HOST_X86_64 true) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|x64|amd64|AMD64)") + set(HOST_X86_64 true) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(i[3-6]86|[xX]86|Win32)") + set(ENABLE_ASM false) + set(HOST_I386 true) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "loongarch64") + set(HOST_LOONGARCH64 true) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips64") + set(HOST_MIPS64 true) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips") + set(HOST_MIPS true) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "powerpc") + set(HOST_POWERPC true) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64") + set(HOST_POWERPC64 true) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "riscv64") + set(HOST_RISCV64 true) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "sparc64") + set(HOST_SPARC64 true) +else() + set(ENABLE_ASM false) +endif() + +if(MSVC AND HOST_AARCH64 AND NOT CMAKE_CROSSCOMPILING AND + CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "(aarch64|arm64|ARM64)") + set(BN_CT_TEST_SOURCE "${CMAKE_CURRENT_BINARY_DIR}/bn_ct_test.c") + file(WRITE "${BN_CT_TEST_SOURCE}" [=[ +#include +#include +#include + +typedef uint64_t BN_ULONG; + +#define BN_BITS2 64 + +static __inline int +bn_ct_ne_zero(BN_ULONG w) +{ + return (w | ~(w - 1)) >> (BN_BITS2 - 1); +} + +static __inline void +bn_addw(BN_ULONG a, BN_ULONG b, BN_ULONG *out_r1, BN_ULONG *out_r0) +{ + BN_ULONG c1, c2, r1, r0; + + c1 = a | b; + c2 = a & b; + r0 = a + b; + r1 = ((c1 & ~r0) | c2) >> (BN_BITS2 - 1); + + *out_r1 = r1; + *out_r0 = r0; +} + +static __inline void +bn_addw_addw(BN_ULONG a, BN_ULONG b, BN_ULONG c, BN_ULONG *out_r1, + BN_ULONG *out_r0) +{ + BN_ULONG carry, r1, r0; + + bn_addw(a, b, &r1, &r0); + bn_addw(r0, c, &carry, &r0); + r1 += carry; + + *out_r1 = r1; + *out_r0 = r0; +} + +static BN_ULONG +make_mask(BN_ULONG a, BN_ULONG b, BN_ULONG c, BN_ULONG borrow) +{ + BN_ULONG carry, ignored; + + bn_addw_addw(a, b, c, &carry, &ignored); + + return bn_ct_ne_zero(carry) - borrow; +} + +static volatile BN_ULONG input_a = UINT64_MAX; +static volatile BN_ULONG input_b = 1; +static volatile BN_ULONG input_c = 0; +static volatile BN_ULONG input_borrow = 0; + +int +main(void) +{ + BN_ULONG actual, expected = 1; + + actual = make_mask(input_a, input_b, input_c, input_borrow); + if (actual != expected) { + printf("FAIL: expected 0x%016" PRIx64 ", got 0x%016" PRIx64 "\n", + expected, actual); + return 1; + } + + return 0; +} +]=]) + set(BN_CT_SAVED_CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}") + set(CMAKE_TRY_COMPILE_CONFIGURATION Release) + try_run(BN_CT_RUN_RESULT BN_CT_COMPILED + "${CMAKE_CURRENT_BINARY_DIR}" + "${BN_CT_TEST_SOURCE}") + set(CMAKE_TRY_COMPILE_CONFIGURATION "${BN_CT_SAVED_CONFIGURATION}") + if(BN_CT_COMPILED AND BN_CT_RUN_RESULT EQUAL 0) + message(STATUS "MSVC ARM64 optimizer check passed; workaround disabled") + add_definitions(-DMSVC_ARM64_BN_CT_NE_ZERO_WORKS) + else() + message(STATUS "MSVC ARM64 optimizer check failed; workaround enabled " + "(compiled=${BN_CT_COMPILED}, result=${BN_CT_RUN_RESULT})") + endif() +endif() + if(ENABLE_ASM) - if("${CMAKE_C_COMPILER_ABI}" STREQUAL "ELF") - if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "(x86_64|amd64)") + if(CMAKE_C_COMPILER_ABI STREQUAL "ELF") + if(HOST_AARCH64) + set(HOST_ASM_ELF_AARCH64 true) + elseif(HOST_X86_64) set(HOST_ASM_ELF_X86_64 true) - elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm") - set(HOST_ASM_ELF_ARMV4 true) - elseif(CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i386") + elseif(SOLARIS AND HOST_I386) set(HOST_ASM_ELF_X86_64 true) endif() add_definitions(-DHAVE_GNU_STACK) - elseif(APPLE AND "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") + elseif(APPLE AND HOST_X86_64) set(HOST_ASM_MACOSX_X86_64 true) - elseif(MSVC AND ("${CMAKE_GENERATOR}" MATCHES "Win64" OR "${CMAKE_GENERATOR_PLATFORM}" STREQUAL "x64")) + elseif(MSVC AND (CMAKE_GENERATOR MATCHES "Win64" OR CMAKE_GENERATOR_PLATFORM STREQUAL "x64")) set(HOST_ASM_MASM_X86_64 true) ENABLE_LANGUAGE(ASM_MASM) - elseif(CMAKE_SYSTEM_NAME MATCHES "MINGW" AND "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") + elseif(MINGW AND HOST_X86_64) set(HOST_ASM_MINGW64_X86_64 true) endif() endif() @@ -332,18 +752,42 @@ if(SIZEOF_TIME_T STREQUAL "4") message(WARNING " ** Warning, this system is unable to represent times past 2038\n" " ** It will behave incorrectly when handling valid RFC5280 dates") endif() -add_definitions(-DSIZEOF_TIME_T=${SIZEOF_TIME_T}) set(OPENSSL_LIBS ssl crypto ${PLATFORM_LIBS}) set(LIBTLS_LIBS tls ${PLATFORM_LIBS}) +# libraries for regression test +if(BUILD_SHARED_LIBS) + set(OPENSSL_TEST_LIBS ssl-static crypto-static ${PLATFORM_LIBS} compat_obj) + set(LIBTLS_TEST_LIBS tls-static ${OPENSSL_TEST_LIBS} tls_compat_obj) +else() + set(OPENSSL_TEST_LIBS ssl crypto ${PLATFORM_LIBS} compat_obj) + set(LIBTLS_TEST_LIBS tls ${PLATFORM_LIBS} compat_obj tls_compat_obj) +endif() + +if(OPENSSLDIR STREQUAL "") + if(WIN32) + set(OPENSSLDIR "C:/Windows/libressl/ssl") + else() + set(OPENSSLDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/ssl") + endif() + + set(CONF_DIR "${CMAKE_INSTALL_SYSCONFDIR}/ssl") +else() + set(CONF_DIR "${OPENSSLDIR}") +endif() + +if(TLS_DEFAULT_CA_FILE STREQUAL "") + set(TLS_DEFAULT_CA_FILE "${OPENSSLDIR}/cert.pem") +endif() + +add_subdirectory(include) add_subdirectory(crypto) add_subdirectory(ssl) if(LIBRESSL_APPS) add_subdirectory(apps) endif() add_subdirectory(tls) -add_subdirectory(include) if(NOT MSVC) add_subdirectory(man) endif() @@ -352,43 +796,87 @@ if(LIBRESSL_APPS AND LIBRESSL_TESTS) add_subdirectory(tests) endif() -if(NOT MSVC) - # Create pkgconfig files. - set(prefix ${CMAKE_INSTALL_PREFIX}) - set(exec_prefix \${prefix}) - set(libdir \${exec_prefix}/${CMAKE_INSTALL_LIBDIR}) - set(includedir \${prefix}/include) - if(PLATFORM_LIBS) - string(REGEX REPLACE ";" " -l" PLATFORM_LDADD ";${PLATFORM_LIBS}") - endif() - file(STRINGS "VERSION" VERSION LIMIT_COUNT 1) - file(GLOB OPENSSL_PKGCONFIGS "*.pc.in") - foreach(file ${OPENSSL_PKGCONFIGS}) - get_filename_component(filename ${file} NAME) - string(REPLACE ".in" "" new_file "${filename}") - configure_file(${filename} pkgconfig/${new_file} @ONLY) - endforeach() - install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig - DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif() - -if(NOT "${OPENSSLDIR}" STREQUAL "") - set(CONF_DIR "${OPENSSLDIR}") -else() - set(CONF_DIR "${CMAKE_INSTALL_PREFIX}/etc/ssl") -endif() +if (BUILD_APPLE_XCFRAMEWORK) + # Create the super library from object libraries + add_library(LibreSSL_xcframework + $ $ $) + set_target_properties(LibreSSL_xcframework PROPERTIES + OUTPUT_NAME ressl) + + if(ENABLE_LIBRESSL_INSTALL) + install(TARGETS LibreSSL_xcframework + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + endif(ENABLE_LIBRESSL_INSTALL) +endif(BUILD_APPLE_XCFRAMEWORK) + +file(STRINGS "VERSION" VERSION LIMIT_COUNT 1) +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "LibreSSLConfigVersion.cmake" + VERSION "${VERSION}" + COMPATIBILITY SameMajorVersion +) + +set(INCLUDE_DIRECTORY "${CMAKE_BINARY_DIR}/include") +configure_package_config_file( + "${CMAKE_CURRENT_LIST_DIR}/LibreSSLConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/LibreSSLConfig.cmake" + PATH_VARS INCLUDE_DIRECTORY + INSTALL_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}" + INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}" +) if(ENABLE_LIBRESSL_INSTALL) + set(INCLUDE_DIRECTORY "${CMAKE_INSTALL_INCLUDEDIR}") + configure_package_config_file( + "${CMAKE_CURRENT_LIST_DIR}/LibreSSLConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/install-config/LibreSSLConfig.cmake" + PATH_VARS INCLUDE_DIRECTORY + INSTALL_DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}" + ) + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/install-config/LibreSSLConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/LibreSSLConfigVersion.cmake" + DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}" + ) + + if(NOT MSVC) + # Create pkgconfig files. + set(prefix ${CMAKE_INSTALL_PREFIX}) + set(exec_prefix \${prefix}) + if(IS_ABSOLUTE ${CMAKE_INSTALL_LIBDIR}) + set(libdir ${CMAKE_INSTALL_LIBDIR}) + else() + set(libdir \${exec_prefix}/${CMAKE_INSTALL_LIBDIR}) + endif() + if(IS_ABSOLUTE ${CMAKE_INSTALL_INCLUDEDIR}) + set(includedir ${CMAKE_INSTALL_INCLUDEDIR}) + else() + set(includedir \${prefix}/${CMAKE_INSTALL_INCLUDEDIR}) + endif() + if(PLATFORM_LIBS) + string(REGEX REPLACE ";" " -l" PLATFORM_LDADD ";${PLATFORM_LIBS}") + endif() + file(GLOB OPENSSL_PKGCONFIGS "*.pc.in") + foreach(file ${OPENSSL_PKGCONFIGS}) + get_filename_component(filename ${file} NAME) + string(REPLACE ".in" "" new_file "${filename}") + configure_file(${filename} pkgconfig/${new_file} @ONLY) + endforeach() + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig + DESTINATION ${CMAKE_INSTALL_LIBDIR}) + endif() + install(FILES cert.pem openssl.cnf x509v3.cnf DESTINATION ${CONF_DIR}) install(DIRECTORY DESTINATION ${CONF_DIR}/certs) -endif(ENABLE_LIBRESSL_INSTALL) -if(NOT TARGET uninstall) - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" - IMMEDIATE @ONLY) + if(NOT TARGET uninstall) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) - add_custom_target(uninstall - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) + add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) + endif() endif() diff --git a/COPYING b/COPYING new file mode 100644 index 0000000000..c41ff4d1ca --- /dev/null +++ b/COPYING @@ -0,0 +1,133 @@ + + LibreSSL files are retained under the copyright of the authors. New + additions are ISC licensed as per OpenBSD's normal licensing policy, + or are placed in the public domain. + + The OpenSSL code is distributed under the terms of the original OpenSSL + licenses which follow: + + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a dual license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. In case of any license issues + related to OpenSSL please contact openssl-core@openssl.org. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + diff --git a/ChangeLog b/ChangeLog index 83a8946a99..8446188a85 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,33 +1,1319 @@ Because this project is maintained both in the OpenBSD tree using CVS and in Git, it can be confusing following all of the changes. -Most of the libssl and libcrypto source code is is here in OpenBSD CVS: +Most of the libssl and libcrypto source code is here in OpenBSD CVS: - http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libssl/ + https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libssl/ Some of the libcrypto and OS-compatibility files for entropy and random number generation are here: - http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libcrypto/ + https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libcrypto/ A simplified TLS wrapper library is here: - http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libtls/ + https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libtls/ The LibreSSL Portable project copies these portions of the OpenBSD tree, along with relevant portions of the C library, to a Git repository. This makes it easier to follow all of the relevant changes to the upstream project in a single place: - https://github.com/libressl-portable/openbsd + https://github.com/libressl/openbsd The portable bits of the project are largely maintained out-of-tree, and their history is also available from Git. - https://github.com/libressl-portable/portable + https://github.com/libressl/portable LibreSSL Portable Release Notes: +4.4.0 - In Development + + * Internal improvements + - Minor code cleanup for PKCS#7. + - Clear unused bits for the maximum of RFC 3779 IP address ranges. + - Cleanup passes over the DTLS code, avoiding many contortions. + * Compatibility changes + * New features + * Bug fixes + - Fix PKCS7_set_{un,}signed_attributes() to allow caller to free + on failure rather than risking a double free. + * Testing and proactive security + - Improved test coverage for DTLS. + +4.3.1 - Development Release + + * Portable Changes + - Add missing to fix build on some OS. + +4.3.0 - Development Release + + * Internal improvements + - Remove the unused sequence number from X509_REVOKED. + - Replace a call to atoi() with strtonum() in nc(1) and replace a + misleading use of ntohs() with htons(). + - openssl(1) speed now uses HMAC-SHA256 for its hmac benchmark. + - Reimplemented only use of ASN1_PRINTABLE_type() in openssl(1) ca. + The API will be removed in an upcoming release. + - Add curve NID to EC_POINT objects so the library has a clue on which + curve a given EC_POINT is supposed to live. + - Use curve NID to check for compatibility between group and points + in various EC API. This isn't 100% failsafe but good enough for sane + uses. + - Require SSE in order to use gcm_{gmult,ghash}_4bit_mmx(). + On rare i386 machines suporting MMX but not SSE this could result + in an illegal instruction. + - Cleaned up asn1t.h to make it somewhat readable and more robust by + using C99 initializers in particular. + - Further assembly macro improvements for -portable. + - Add fast path for well-known DH primes in DH_check() (including + those from RFC 7919). Some projects still fiddle with this in 2025. + - Rewrite ec_point_cmp() for readability and robustness. + - Improve EVP_{Open,Seal}Init() internals. This is legacy API that + cannot be removed since one scripting language still exposes it. + - ASN1_BIT_STRING_set_bit() now trims trailing zero bits itself rather + than relying on i2c_ASN1_BIT_STRING() to do that when encoding. + - Fix and add workarounds to libtls to improve const correctness and + to avoid warnings when compiling with OpenSSL 4. + - Prefix EC_KEY methods with ec_key_ to avoid problems in some static + links. + - Remove mac_packet, a leftover from accepting SSLv2 ClientHellos. + - Remove ssl_server_legacy_first_packet(). + - In addition to what was done in LibreSSL 4.0 for the version + handling, disable TLSv1.1 and lower also on the method level. + - Remove workaround for SSL 3.0/TLS 1.0 CBC vulnerability. + - Refactor ocsp_find_signer_sk() to avoid neglecting the ASN.1's + semantics by direct reaching into deeply nested OCSP structures. + * Compatibility changes + - Expose X509_VERIFY_PARAM_set_hostflags() as a public symbol. + - Provide SSL_SESSION_dup(). + - BIGNUMs now use the C99 types uint64_t/uint32_t for the word width. + Fixes long-standing issues with 32-bit longs on 64-bit Windows. + - Many unused BN_* macros with incomprehensible names were removed: + BN_LONG, BN_BITS{,4}, BN_MASK2{,l,h,h1}, BN_TBIT, BN_DEC_CONV, + BN_{DEC,HEX}_FMT{1,2}, ... + - openssl(1) cms no longer accepts the unsupported -compress and + -uncompress switches. + - Added PKCS7_NO_DUAL_CONTENT flag/behavior. This is incorrect legacy + behavior but some language bindings decided to rely on it in 2025. + - Remove STABLE_FLAGS_MALLOC but keep STABLE_NO_MASK because there is + still one user... + - Fix ASN1_ADB_END macro to have compatible signature with OpenSSL. + The adb_cb() argument is currently ignored. + - Unexport ASN1_LONG_UNDEF. + * New features + - Support for MLKEM768_X25519 keyshare in TLS. + https://datatracker.ietf.org/doc/draft-ietf-tls-ecdhe-mlkem/ + - Added ML-KEM benchmarks to openssl(1) speed. + - Added support for starttls protocol sieve. + - Add support for RSASSA-PSS with pubkey OID RSASSA-PSS to libssl. + * Bug fixes + - Ensure the group selected by a TLSv1.3 server for a + HelloRetryRequest is not one for which the client has + already sent a key share. + - Plug memory leak in CMS_EncryptedData_encrypt(). + - Plug possible memory leak and double free in nref_nos(). + - Removed always zero test results for some no longer available + legacy primitives in openssl(1) speed. + - List SHA-3 digests in openssl(1) help output. + - Fix encoding of bit strings with trailing zeroes on which + ASN1_STRING_FLAG_BITS_LEFT is not set. + - Add missing NULL pointer check to PKCS12_item_decrypt_d2i(). + - Avoid type confusion leading to 1-byte read at address 0x00-0xff + in PKCS#12 parsing. + - Fix type confusion in timestamp response parsing for v2 signing + certs. + - Fix EVP_SealInit() to return 0 on error, not -1. + - Replace incorrect strncmp() with strcmp() in CRL distribution point + config parsing. + - openssl x509 -text writes its output to the file specified by -out + like all other openssl(1) subcommands. + - Stop Delta CRL processing in the verifier if the cRLNumber is + missing. This is flagged on deserialization, but nothing checks + that flag. This can lead to a NULL dereference if the verification + has enabled Delta CRL checking by setting X509_V_FLAG_USE_DELTAS. + - Fix NULL dereference that can be triggered with malformed OAEP + parameter encoding for CMS decryption. + - Add missing length checks before BIO_new_mem_buf() in libtls. + - Improve libtls error reporting consistency, avoid reporting + unrelated errnos. + - Fix SAN dNSName constraints: instead of substring matching, + match exactly and allow zero or more components in front of + the candidate. + * Reliability fix + - Fix off-by-one error in the X.509 verifier depth checking. This can + lead to a 4-byte overwrite on heap allocated memory for clients + talking to a malicious server or for servers that have client + certificate verification enabled. In addition, the maximum depth + must be set to the maximum allowed value of 32. + Thanks to Calif.io in collaboration with Claude and Anthropic + Research, for reporting the issue. + * Testing and proactive security + - Port Wycheproof tests to testvectors_v1 and improve coverage + and correctness. Add tests for ML-KEM in particular. + +4.2.0 - Stable release + + * Portable changes + - Added explicit OpenBSD/ISC license to build system / scripts. + - Fixed compilation on more CPU targets by removing architecture-specific + definitions from header files. + - Fixed builds in deep paths by using relative paths for linking. + - Fixed Windows builds with Clang and CMake. + - Fixed Windows error handling accepting connections with nc. + - Fixed 32-bit ARM builds on Darwin. + * Internal improvements + - Cleaned up code implementing block cipher modes of operation. + Includes untangling a horrible #ifdef mess and removing a few + instances of undefined behavior. + - Removed assembly implementations of AES using bit slicing (BS-AES) + and vector permutation (VP-AES). + - Removed OPENSSL_SMALL_FOOTPRINT and OPENSSL_FIPSAPI. + - Implemented constant time EC field element operations to allow + elliptic curve operations without bignum arithmetic. + - Implemented an EC method using homogeneous projective coordinates. + This will allow exception-free elliptic curve arithmetic in + constant time in future releases. + - Started cleaning up the openssl speed implementation. + - The last SIGILL-based CPU capability detection was removed. + Instead, capabilities are now detected using a constructor on + library load, which improves the incomplete coverage by calls + to OPENSSL_init_crypto() on various entry points. + - Rework and simplify AES handling in EVP. In particular, AES-NI + is now handled in the AES internal code and no longer requires + the use of EVP. + - Added a public API for ML-KEM. This is not yet documented in a + manpage and may not be in its final form. This will be used to + support X25519MLKEM768 in libssl. + * Compatibility changes + - Removed the -msie_hack option from the openssl(1) ca subcommand. + - Removed parameters of the 239-bit prime curves from X9.62, H.5.2: + prime239v1, prime239v2, prime239v3. + - Increased default MAC salt length used by PKCS12_set_mac(3) to 16 + per recommendation of NIST SP 800-132. + - Encrypted PKCS#8 key files now use a default password-based key + derivation function that is acceptable in the present millenium. + - const corrected EVP_PKEY_get{0,1}_{DH,DSA,EC_KEY,RSA}(). + - X509_CRL_verify() now checks that the AlgorithmIdentifiers in the + signature and the tbsCertList are identical. + - Of the old *err() only PEMerr(), RSAerr(), and SSLerr() remain. + - Removed BIO_s_log(), X509_PKEY_{new,free}(), PEM_X509_INFO_read() + and PEM_X509_INFO_write_bio(). + - Re-expose the ASN.1 Boolean template items. + - opensslconf.h is now machine-independent. + * New features + - Allow specifying ALPN in nc(1) via -Talpn="http/1.1,http:/1.0". + * Bug fixes + - Avoid pointer arithmetic on NULL for memory BIOs. + - Fix leaks and use-after-frees in PKCS7 attribute handling. + - Ensure p and q in RSA private key have a minimum distance of + 2^(bits/2 - 100) as specified in NIST SP 800-56B Revision 2. + * Security fixes + - Fix out-of-bounds read and write, memory leaks and incorrect + error check for CMS enveloped data. + * Documentation + - Rewrote most of the EC documentation from scratch to be at least + somewhat accurate and intelligible. + - Updated documentation for SMIME_{read,write}* to match reality. + * Testing and proactive security + - Added a testing framework that will help deduplicating lots of + ad-hoc code in the regression tests. + - Converted the Wycheproof testing framework to use testvectors_v1. + This in combination with a few new tests significantly increases + regress coverage. + +4.1.0 - Stable release + + * Portable changes + - Added initial experimental support for loongarch64. + - Fixed compilation for mips32 and reenable CI. + - Fixed CMake builds on FreeBSD. + - Fixed the --prefix option for cmake --install. + - Fixed tests for MinGW due to missing sh(1). + * Internal improvements + - Cleaned up the error implementation. + - Many bug fixes and simplifications in the EC ASN.1 code. + - Corrected DER encoding for EC keys and parameters. + - Polished EC_POINT_{oct2point,point2oct}() internals. + - Rewrote the wNAF code for fast ECDSA verification. + - Improved the code setting compressed coordinates for EC points. + - Reworked CPU capabilities detection for amd64 and aarch64. + - New SHA-1, SHA-256 and SHA-512 assembly implementations for amd64. + These make use of the SHA-NI instruction if it is available and + replace the perl-generated assembly optimized for museum pieces. + These are not yet enabled in libressl-portable. + - New SHA-256 and SHA-512 assembly implementations for aarch64 + making use of the ARM Cryptographic Extension (CE). Not yet + enabled in libressl-portable. + - New simplified, readable MD5 implementation for amd64. + - Rewrote BN_bn2binpad() and its lebin siblings. + - The BIGNUMs in EC_GROUP and EC_POINT are now heap allocated. + - Rewrote TS_ASN1_INTEGER_print_bio(). + - Improved bit counter handling in MD5. + - Simplified and cleaned up the BN_RECP_CTX internals. + - Improved SM4 to match other symmetric ciphers more closely. + - Rewrote X509_NAME_oneline() and X509_NAME_print() using CBS/CBB. + - CRLs are now cached in the issuer cache like certificates. + - Replaced combinations of BN_MONT_CTX_new/set with an internal + BN_MONT_CTX_create(). + - Replaced BN_bn2hex() reimplementation in openssl(1) ca with + a proper API call. + - Fixed integer overflows due to signed shift in obj_dat.c. + - Improved some X509_VERIFY_PARAM internals and avoid an out of + bounds read from public API. + - Imported ML-KEM 768 and 1024 from BoringSSL (not yet public API). + * Compatibility changes + - Added an OPENSSL_INIT_NO_ATEXIT flag for OPENSSL_init_crypto(). + It has no effect since LibreSSL doesn't call atexit(). + - Elliptic curve parameters are only accepted if they encode a + built-in curve. + - EC_METHOD is no longer public and the API exposing it has been + removed. This includes EC_GROUP_new(), EC_GFp_mont_method(), + EC_GROUP_method_of() and EC_METHOD_get_field_type(). + - The precomputation stubs for EC_GROUP were removed. + - The API setting Jacobian projective coordinates for a point was + removed as were EC_POINTs_{mul,make_affine}(). + - All elliptic curves over fields with less than 224 bits and a + few more were removed from the built-in curves. This includes + all WTLS curves and P-192. + - It is no longer necessary to set RSA_FLAG_SIGN_VER to use the + sign and verify handlers set with RSA_meth_set_{sign,verify}. + - Removed the -C option to generate "C code" from the openssl(1) + dh, dhparam, dsaparam, ecparam, and x509 subcommands. + - Removed #error in headers when OPENSSL_NO_* is defined. + - CRYPTO_set_mem_functions() now matches OpenSSL 1.1 and + CRYPTO_set_mem_ex_functions() was removed. + - The tls_session_secret_cb_fn type now matches OpenSSL 1.1. + - Unexport X509_NAME_print() and X509_OBJECT_up_ref_count(). + - const corrected UI_OpenSSL() and BN_MONT_CTX_copy(). + - Support OPENSSL_NO_FILENAMES. + - Support SSL_OP_NO_RENEGOTIATION and SSL_OP_ALLOW_CLIENT_RENEGOTIATION. + - Export PKCS12_key_gen_uni() again. + * New features + - libtls has a new tls_peer_cert_common_name() API call to retrieve + the peer's common name without having to inspect the PEM. + * Bug fixes + - Plugged a leak in eckey_compute_pubkey(). + - Again allow the magic values -1, -2 and -3 for the salt length + of an RSA-PSS key in the EVP_PKEY_CTX_ctrl_str() interface. + - Fixed a few memory leaks in legacy code. + * Documentation + - The remaining undocumented public EVP API is now documented. + - Reorganization of existing documentation for clarity and accuracy. + * Testing and proactive security + - Improved regress coverage of the EC code. + +4.0.0 - Stable release + + * Portable changes + - Added initial Emscripten support in CMake builds. + - Removed timegm() compatibility layer since all uses were replaced + with OPENSSL_timegm(). Cleaned up the corresponding test harness. + - The mips32 platform is no longer actively supported. + - Fixed Windows support for dates beyond 2038. + * Internal improvements + - Cleaned up parts of the conf directory. Simplified some logic, + fixed memory leaks. + - Simplified X509_check_trust() internals to be somewhat readable. + - Removed last internal uses of gmtime() and timegm() and replaced + them with BoringSSL's posix time conversion API. + - Removed unnecessary stat calls in by_dir. + - Split parsing and processing of TLS extensions to ensure that + extension callbacks are called in a predefined order. + - Cleaned up the MD4 and MD5 implementations. + - Assembly functions are no longer exposed in the public API, they + are all wrapped by C functions. + - Removed assembly implementations of legacy ciphers on legacy + architectures. + - Merged most multi-file implementations of ciphers into one or two + C files. + - Removed the cache of certificate validity. This was added for + performance reasons which no longer apply since BoringSSL's time + conversion API isn't slow. Also, a recently added error check led + to obscure, undesirable validation failures. + - Stopped calling OPENSSL_cpuid_setup() from the .init section on + amd64 and i386. + - Rewrote various BN conversion functions. + - Improved certification request internals. + - Removed unused DSA methods. + - Improved X.509v3 extension internals. Fixed various bugs and leaks + in X509V3_add1_i2d() and X509V3_get_d2i(). Their implementations + now vaguely resemble code. + - Rewrote BN_bn2mpi() using CBB. + - Made most error string tables const. + - Removed handling for SSLv2 client hello messages. + - Improvements in the openssl(1) speed app's signal handler. + - Cleaned up various X509v3_* extension API. + - Unified the X.509v3 extension methods. + - Cleaned up cipher handling in SSL_SESSION. + - Removed get_cipher from SSL_METHOD. + - Rewrote CRYPTO_EX_DATA from scratch. The only intentional change of + behavior is that there is now a hard limit on the number of indexes + that can be allocated. + - Removed bogus connect() call from netcat. + - Uses of atoi() and strtol() in libcrypto were replaced with + strtonum(). + - Introduced crypto_arch.h which will contain the architecture + dependent code and defines rather than the public opensslconf.h. + - OPENSSL_cpu_caps() is now architecture independent. + - Reorganized the DES implementation to use fewer files and removed + optimizations for ancient processors and compilers. + * New features + - Added CRLfile option to the cms command of openssl(1) to specify + additional CRLs for use during verification. + * Documentation improvements + - Removed documentation of no longer existing API. + - Unified the description of the obsolete ENGINE parameter that + needs to remain in many functions and should always be NULL. + * Testing and proactive security + - Switched the remaining tests to new certs. + * Compatibility changes + - Protocol parsing in libtls was changed. The unsupported TLSv1.1 + and TLSv1.0 protocols are ignored and no longer enable or disable + TLSv1.2 in surprising ways. + - The dangerous EVP_PKEY*_check(3) family of functions was removed. + The openssl(1) pkey and pkeyparam commands no longer support the + -check and -pubcheck flags. + - The one-step hashing functions, MD4(), MD5(), RIPEMD160(), SHA1(), + all SHA-2, and HMAC() no longer support returning a static buffer. + Callers must pass in a correctly sized buffer. + - Support for Whirlpool was removed. Applications still using this + should honor OPENSSL_NO_WHIRLPOOL. + - Removed workaround for F5 middle boxes. + - Removed the useless pem2.h, a public header that was added since + it was too hard to add a single prototype to one file. + - Removed conf_api.h and the public API therein. + - Removed ssl2.h, ssl23.h and ui_compat.h. + - Numerous conf and attribute functions were removed. Some unused + types were removed, others were made opaque. + - Removed the deprecated HMAC_Init() function. + - Removed OPENSSL_load_builtin_modules(). + - Removed X509_REQ_{get,set}_extension_nids(). + - X509_check_trust() and was removed, X509_VAL was made opaque. + - Only specified versions can be set on certs, CRLs and CSRs. + - Removed unused PEM_USER and PEM_CTX types from pem.h. + - Removed typdefs for COMP_CTX, COMP_METHOD, X509_CRL_METHOD, STORE, + STORE_METHOD, and SSL_AEAD_CTX. + - i2d_ASN1_OBJECT() now returns -1 on error like most other i2d_*. + - SPKAC support was removed from openssl(1). + - Added TLS1-PRF support to the EVP interface. + - Support for attributes in EVP_PKEYs was removed. + - The X509at_* API is no longer public. + - SSL_CTX_set1_cert_store() and SSL_CIPHER_get_handshake_digest() + were added to libssl. + - The completely broken UI_UTIL password API was removed. + - The OpenSSL pkcs12 command and PKCS12_create() no longer support + setting the Microsoft-specific Local Key Set and Cryptographic + Service Provider attributes. + * Bug fixes + - Made ASN1_TIME_set_string() and ASN1_TIME_set_string_X509() match + their documentation. They always set an RFC 5280 conformant time. + - Improved standards compliance for supported groups and key shares + extensions: + - Duplicate key shares are disallowed. + - Duplicate supported groups are disallowed. + - Key shares must be sent in the order of supported groups. + - Key shares will only be selected if they match the most + preferred supported group by client preference order. + - Fixed signed integer overflow in bnrand(). + - Prevent negative zero from being created via BN_clear_bit() and + BN_mask_bits(). Avoids a one byte overread in BN_bn2mpi(). + - Add guard to avoid contracting the number linear hash buckets + to zero, which could lead to a crash due to accessing a zero + sized allocation. + - Fixed i2d_ASN1_OBJECT() with an output buffer pointing to NULL. + - Implemented RSA key exchange in constant time. This is done by + decrypting with RSA_NO_PADDING and checking the padding in libssl + in constant time. This is possible because the pre-master secret + is of known length based on the size of the RSA key. + - Rewrote SSL_select_next_proto() using CBS, also fixing a buffer + overread that wasn't reachable when used as intended from an + ALPN callback. + - Avoid pushing a spurious error onto the error stack in + ssl_sigalg_select(). + - Made fatal alerts fatal in QUIC. + +3.9.2 - Stable release + + * Bugfixes + - OpenBSD 7.5 errata 003. A missing bounds check could lead to a crash + due to dereferencing a zero-sized allocation. + +3.9.1 - Stable release + + * Portable changes + - Updated tests with expiring certificates + - CET-related build fixes for Windows and macOS targets + - update libtls linker script to include libssl and libcrypto again + +3.9.0 - Development release + + * Portable changes + - libcrypto no longer exports compat symbols in cmake builds. + - Most compatibility symbols are prefixed with libressl_ to avoid + symbol clashes in static links. + - Fixed various warnings on Windows. + - Removed assert pop-ups with Windows debug builds. + - Fixed crashes and hangs in Windows ARM64 builds. + - Improved control-flow enforcement (CET) support. + * Internal improvements + - Converted uses of OBJ_bsearch_() to standard bsearch(). + - Greatly simplified by_file_ctrl(). + - Simplified and cleaned up the OBJ_ API. + - Cleaned up the EVP_Cipher{Init,Update,Final}() implementations. + - Removed unused function pointers from X.509 stores and contexts. + - A lot of cleanup and reorganization in EVP. + - Removed all remaining ENGINE tentacles. + - Simplified internals of X509_TRUST handling. + - Made deletion from a lhash doall callback safe. + - Rewrote BIO_dump*(3) internals to be less bad. + * Documentation improvements + - ENGINE documentation was updated to reflect reality. + - Made EVP API documentation more accurate and less incoherent. + - Call out some shortcomings of the EC_KEY_set_* API explicitly. + * Testing and proactive security + - Bug fixes and simplifications in the Wycheproof tests. + * Compatibility changes + - Added ChaCha20 and chacha20 aliases for ChaCha. + - SSL_library_init() now has the same effect as OPENSSL_init_ssl(). + - EVP_add_{cipher,digest}() were removed. From the OBJ_NAME API, + only OBJ_NAME_do_all*() remain. In particular, it is no longer + possible to add aliases for ciphers and digests. + - The thread unsafe global tables are no longer supported. It is no + longer possible to add aliases for ciphers and digests, custom ASN.1 + strings table entries, ASN.1 methods, PKEY methods, digest methods, + CRL methods, purpose and trust identifiers, or X.509 extensions. + - Removed the _cb() and _fp() versions of BIO_dump{,_indent}(). + - BIO_set() was removed. + - BIO_{sn,v,vsn}printf() were removed. + - Turn the long dysfunctional openssl(1) s_client -pause into a noop. + - openssl(1) x509 now supports -new -force_pubkey, -multivalue-rdn, + -set_issuer, -set_subject, and -utf8. + - Support ECDSA with SHA-3 signature algorithms. + - Support HMAC with truncated SHA-2 and SHA-3 as PBE PRF. + - GOST and STREEBOG support was removed. + - CRYPTO_THREADID, _LHASH, _STACK, X509_PURPOSE are now opaque, + X509_CERT_AUX and X509_TRUST were removed from the public API. + - ASN1_STRING_TABLE_get() and X509_PURPOSE_get0*() now return const + pointers. + - EVP_{CIPHER,MD}_CTX_init()'s signatures and semantics now match + OpenSSL's behavior. + - sk_find_ex() and OBJ_bsearch_() were removed. + - CRYPTO_malloc() was fixed to use size_t argument. CRYPTO_malloc() + and CRYPTO_free() now accept file and line arguments. + - A lot of decrepit CRYPTO memory API was removed. + * Bug fixes + - Fixed aliasing issues in BN_mod_exp_simple() and BN_mod_exp_recp(). + - Fixed numerous misuses of X509_ALGOR_set0() resulting in leaks and + potentially incorrect encodings. + - Fixed potential double free in X509v3_asid_add_id_or_range(). + - Stopped using ASN1_time_parse() outside of libcrypto. + - Prepared OPENSSL_gmtime() and OPENSSL_timegm() as public API + wrappers of internal functions compatible with BoringSSL API. + - Removed print_bin() to avoid overwriting the stack with 5 bytes + of ' ' when ECPK parameters are printed with large indentation. + - Avoid a NULL dereference after memory allocation failure during TLS + version downgrade. + - Fixed various bugs in CMAC internals. + - Fixed 4-byte overreads in GHASH assembly on amd64 and i386. + - Fixed various NULL dereferences in PKCS #12 code due to mishandling + of OPTIONAL content in PKCS #7 ContentInfo. + - Aligned SSL_shutdown() behavior in TLSv1.3 with the legacy stack. + - Fixed the new X.509 verifier to find trust anchors in the trusted + stack. + - Made in-place decryption work for EVP_chacha20_poly1305(). + +3.8.4 - Stable release + + * Portable changes + - Updated tests with expiring certificates + - CET-related build fixes for Windows and macOS targets + - update libtls linker script to include libssl and libcrypto again + +3.8.3 - Stable release + + * Portable changes + - Removed assert pop-ups with Windows debug builds. + - Fixed crashes and hangs in Windows ARM64 builds. + - Improved control-flow enforcement (CET) support. + +3.8.2 - Stable release + + * Portable changes + - Fixed processor detection for CMake targets. + Thanks to @jiegec from github. + - Enabled building oscpcheck with MSVC. + Thanks to @FtZPetruska from github. + - Improve CMake package detection and installation. + Thanks to @mark-groundctl from github. + - Fixed assembly optimizations on x64 Windows targets. + - Allow disabling warnings about WINCRYPT overrides. + - Use system arc4random on FreeBSD 12 and newer. + * Documentation improvements + - Documented the RFC 3779 API. + * Compatibility changes + - Restrict the RFC 3779 code to IPv4 and IPv6. It was not written + to be able to deal with anything else. + - Fixed EVP_CIPHER_CTX_iv_length() to return what was set with + EVP_CTRL_AEAD_SET_IVLEN or one of its aliases. + * Bug fixes + - Fixed EVP_PKEY_get{0,1}_RSA for RSA-PSS. + - Plug a potential memory leak in ASN1_TIME_normalize(). + - Avoid memory leak in EVP_CipherInit(). + - Redirect EVP_PKEY_get1_* through their get0 siblings. + - Fixed a use of uninitialized in i2r_IPAddrBlocks(). + - Rewrote CMS_SignerInfo_{sign,verify}(). + - Further cleanup and refactoring in the EC code. + - Allow IP addresses to be specified in a URI. + - Fixed a copy-paste error in ASN1_TIME_compare() that could lead + to two UTCTimes or two GeneralizedTimes incorrectly being compared + as equal. + +3.8.1 - Development release + + * Portable changes + - Applications bundled as part of the LibreSSL package internally, + nc(1) and openssl(1), now are linked statically if static libraries + are built. + - Internal compatibility function symbols are no longer exported from + libcrypto. Instead, the libcompat library is linked to libcrypto, + libssl, and libtls separately. This increases size a little, but + ensures that the libraries are not exporting symbols to programs + unintentionally. + - Selective removal of CET implementation on platforms where it is + not supported (macOS). + - Integrated four more tests. + - Added Windows ARM64 architecture to tested platforms. + - Removed Solaris 10 support, fixed Solaris 11. + - libtls no longer links statically to libcrypto / libssl unless + '--enable-libtls-only' is specified at configure time. + - Improved Windows compatibility library, namely handling of files vs + sockets, correcting an exception when operating on a closed socket. + - CMake builds no longer hardcode '-O2' into the compiler flags, instead + using flags from the CMake build type instead. + - Set the CMake default build type to 'Release'. This can be overridden + during configuration. + - Fixed broken ASM support with MinGW builds. + * Internal improvements + - Fixed alignment handling in SHA-512. + - Moved the verified_chain to the correct internal struct. + - Improved checks for commonName in libtls. + - Fixed error check for X509_get_ext_d2i() failure in libtls. + - Improved BIGNUM internals and performance. + - Significantly improved Montgomery multiplication performance. + - Initial cleanup passes for SHA-256 internals. + - Converted more libcrypto internals API using CBB and CBS. + - Removed code guarded by #ifdef ZLIB. + - Changed ASN1_item_sign_ctx() and ASN1_item_verify() to work with + Ed25519 and fixed a few bugs in there. + - Fixed various issues with EVP_PKEY_CTX_{new,dup}(). + - Improved X.509 certificate version checks. + - Cleaned up handling of elliptic curve cofactors. + - Made BN_num_bits() independent of bn->top. + - Rewrote and simplified bn_sqr(). + - Removed EC_GROUP precomp machinery. + - Ensure no X.509v3 extensions appear more than once in certificates. + - Cleaned up various ECDH, ECDSA and EC internals. + - Replaced ASN1_bn_print with a cleaner internal implementation. + - Simplified ASN1_item_sign_ctx(). + - Rewrote OBJ_find_sigid_algs() and OBJ_find_sigid_by_algs(). + - Various improvements in the 'simple' EC code. + - Fix OPENSSL_cpuid_setup() invocations on arm/aarch64. + - Reduced the dependency of hash implementations on many layers of + macros. This results in significant speedups since modern compilers + are now less confused. + - Significantly simplified the BN_BLINDING internals used in RSA. + * New features + * Compatibility changes + - X509_NAME_get_text_by_{NID,OBJ}() now only succeed if they contain + valid UTF-8 without embedded NUL. + - Moved libtls from ECDSA_METHOD to EC_KEY_METHOD. + - Removed support for ECDH_METHOD and ECDSA_METHOD. + - BN_is_prime{,_fasttest}_ex() refuse to check numbers larger than + 32 kbits for primality. This mitigates various DoS vectors. + - Comp was removed. + - Dynamic loading of conf modules is no longer supported. + - DSO was removed and OPENSSL_NO_DSO is defined. + - ENGINE support was removed and OPENSSL_NO_ENGINE is set. In spite + of this, some stub functions are provided to avoid patching some + applications that do not honor OPENSSL_NO_ENGINE. + - It is no longer possible to make the library use your own error + stack or ex_data implementation. + * Bug fixes + - Fixed aliasing issue in BN_mod_inverse(). + - Made CRYPTO_get_ex_new_index() not return 0 to allow applications + to use *_{get,set}_app_data() and *_{get,set}_ex_data() alongside + each other. + - Made EVP_PKEY_set1_hkdf_key() fail on a NULL key. + - Plugged leaks in BIO_chain_dup(). + - Fixed numerous leaks and other minor bugs in RSA, DH, DSA and EC + ASN.1 methods. Unified the coding style. + - On socket errors in the poll loop, netcat could issue system calls + on invalidated file descriptors. + * Documentation improvements + - Made it very explicit that the verify callback should not be used. + - Called out that the CRL lastUpdate is standardized as thisUpdate. + * Testing and Proactive Security + - As always, new test coverage is added as bugs are fixed and subsystems + are cleaned up. + * Security fixes + - Disabled TLSv1.0 and TLSv1.1 in libssl so that they may no longer + be selected for use. + +3.8.0 - Development release + + * Portable changes + - Extended the endian.h compat header with hto* and *toh macros. + - Adapted more tests to the portable framework. + - Internal tools are now statically linked. + * Internal improvements + - Improved sieve of Eratosthenes script used for generating a table + of small primes. + - Started cleaning up and rewriting SHA internals. + - Replace internal use of BN_copy() with bn_copy() for consistency. + - Rewrote and improved BN_exp() and BN_copy(). + - Add branch target information (BTI) support to arm64 assembly. + - Replaced BN_mod_sqrt() with a new implementation. + - Removed incomplete and dangerous BN_RECURSION code. + - Added endbr64 instructions to amd64 assembly. + - Imported RFC 5280 policy checking code from BoringSSL and used it + to replace the old exponential time code. + - Converted more of libcrypto to use CBB/CBS. + - Cleaned up and simplified the code dealing with builtin curves. + * New features + - Added support for truncated SHA-2 and for SHA-3. + - The BPSW primality test performs additional Miller-Rabin rounds + with random bases to reduce the likelihood of composites passing. + - Allow testing of ciphers and digests using badly aligned buffers + in openssl speed. + - Added a workaround for a poorly thought-out change in OpenSSL 3 that + broke privilege separation support in libtls. + * Compatibility changes + - Support for GF2m was removed: BIGNUM no longer supports binary extension + field arithmetic and all binary elliptic builtin curves were removed. + - Removed dangerous, "fast" NIST prime and elliptic curve implementations. + In particular, EC_GFp_nist_method() is no longer available. + - Removed most public symbols that were deprecated in OpenSSL 0.9.8. + - Removed the public X9.31 API (RSA_X931_PADDING is still available). + - Removed Cipher Text Stealing mode. + - Removed SXNET and NETSCAPE_CERT_SEQUENCE support including the + openssl(1) nseq command. + - Dropped proxy certificate (RFC 3820) support. + - The POLICY_TREE and its related structures and API were removed. + - The explicitText user notice uses UTF8String instead of VisibleString + to reduce the risk of emitting certificates with invalid DER-encoding. + - Initial fixes for RSA-PSS support to make the TLSv1.3 stack more + compliant with RFC 8446. + * Bug fixes + - Correctly handle negative input to various BIGNUM functions. + - Ensure ERR_load_ERR_strings() does not set errno unexpectedly. + - Fix error checking of i2d_ECDSA_SIG() in ossl_ecdsa_sign(). + - Fixed detection of extended operations (XOP) on AMD hardware. + - Ensure Montgomery exponentiation is used for the initial RSA blinding. + - Policy is always checked in X509 validation. Critical policy extensions + are no longer silently ignored. + - Fixed error handling in tls_check_common_name(). + - Add missing pointer invalidation in SSL_free(). + - Fixed X509err() and X509V3err() and their internal versions. + - Ensure that OBJ_obj2txt() always returns a C string again. + - In X509_VERIFY_PARAM_inherit() copy hostflags independently of the + host list. + * Documentation improvements + - Improved documentation of BIO_ctrl(3), BIO_set_info_callback(3), + BIO_get_info_callback(3), BIO_method_type(3), and BIO_method_name(3). + - Marked BIO_CB_return(), BIO_cb_pre(), and BIO_cb_post() as intentionally + undocumented. + * Testing and Proactive Security + - Significantly improved test coverage of BN_mod_sqrt() and GCD. + - As always, new test coverage is added as bugs are fixed and subsystems + are cleaned up. + +3.7.3 - Bug and reliability fixes + + * Bug fix + - Hostflags in the verify parameters would not propagate from an + SSL_CTX to newly created SSL. + * Reliability fix + - A double free or use after free could occur after SSL_clear(3). + +3.7.2 - Stable release + + * Portable changes + - Moved official Github project to https://github.com/libressl/. + - Build support for Apple Silicon. + - Installed opensslconf.h is now architecture-specific. + - Removed internal defines from opensslconf.h. + - Support reproducible builds on tagged commits in main branch. + +3.7.1 - Development release + + * Internal improvements + - Initial overhaul of the BIGNUM code: + - Added a new framework that allows architecture-dependent + replacement implementations for bignum primitives. + - Imported various s2n-bignum's constant time assembly primitives + and switched amd64 to them. + - Lots of cleanup, simplification and bug fixes. + - Changed Perl assembly generators to move constants into .rodata, + allowing code to run with execute-only permissions. + - Capped the number of iterations in DSA and ECDSA signing (avoiding + infinite loops), added additional sanity checks to DSA. + - ASN.1 parsing improvements. + - Made UI_destroy_method() NULL safe. + - Various improvements to nc(1). + - Always clear EC groups and points on free. + - Cleanup and improvements in EC code. + - Various openssl(1) improvements. + * Bug fixes + - Fixed a memory leak, a double free and various other issues in + BIO_new_NDEF(). + - Fixed various crashes in the openssl(1) testing utility. + - Do not check policies by default in the new X.509 verifier. + - Added missing error checking in PKCS7. + - Call CRYPTO_cleanup_all_ex_data() from OPENSSL_cleanup(). + * New features + - Added UI_null() + - Added X509_STORE_*check_issued() + - Added X509_CRL_get0_tbs_sigalg() and X509_get0_uids() accessors. + - Added EVP_CIPHER_meth_*() setter API. + * Documentation improvements + - Marked BIO_s_log(3) BIO_nread0(3), BIO_nread(3), BIO_nwrite0(3), BIO_nwrite(3), + BIO_dump_cb(3) and BIO_dump_indent_cb(3) as intentionally undocumented. + - Document BIO_number_read(3), BIO_number_written(3), + BIO_set_retry_read(3), BIO_set_retry_write(3), + BIO_set_retry_special(3), BIO_clear_retry_flags(3), + BIO_get_retry_flags(3), BIO_dup_chain(3), BIO_set_flags(3), + BIO_clear_flags(3), BIO_test_flags(3), BIO_get_flags(3). + BIO_callback_fn_ex(3), BIO_set_callback_ex(3), BIO_get_callback_ex(3), + BIO_callback_fn(3), and the BIO_FLAGS_* constants + - Correct the prototypes of BIO_get_conn_ip(3) and BIO_get_conn_int_port(3). + - Document ED25519_keypair(3), ED25519_sign(3), and ED25519_verify(3). + - Document EVP_PKEY_new_raw_private_key(3), + EVP_PKEY_new_raw_public_key(3), EVP_PKEY_get_raw_private_key(3), and + EVP_PKEY_get_raw_public_key(3). + - Document ASN1_buf_print(3). + - Document DH_get0_*, DSA_get0_*, ECDSA_SIG_get0_{r,s}() and RSA_get0_*. + - Merged documentation of UI_null() from OpenSSL 1.1 + - Various spelling and other documentation improvements. + * Testing and Proactive Security + - As always, new test coverage is added as bugs are fixed and subsystems + are cleaned up. + - New Wycheproof tests added. + - OpenSSL 3.0 Interop tests added. + - Many old tests rewritten, cleaned up and extended. + * Security fixes + - A malicious certificate revocation list or timestamp response token + would allow an attacker to read arbitrary memory. + +3.7.0 - Development release + + * Internal improvements + - Remove dependency on system timegm() and gmtime() by replacing + traditional Julian date conversion with POSIX epoch-seconds date + conversion from BoringSSL. + - Clean old and unused BN code dealing with primes. + - Start rewriting name constraints code using CBS. + - Remove support for the HMAC PRIVATE KEY. + - Rework DSA signing and verifying internals. + - First few passes on cleaning up the BN code. + - Internal headers coming from OpenSSL are all called *_local.h now. + - Rewrite TLSv1.2 key exporter. + - Cleaned up and refactored various aspects of the legacy TLS stack. + * Compatibility changes + - BIO_read() and BIO_write() now behave more closely to OpenSSL 3 in + various corner cases. More work is needed here. + * Bug fixes + - Add EVP_chacha20_poly1305() to the list of all ciphers. + - Fix potential leaks of EVP_PKEY in various printing functions + - Fix potential leak in OBJ_NAME_add(). + - Avoid signed overflow in i2c_ASN1_BIT_STRING(). + - Clean up EVP_PKEY_ASN1_METHOD related tables and code. + - Fix long standing bugs BN_GF2m_poly2arr() and BN_GF2m_mod(). + - Fix segfaults in BN_{dec,hex}2bn(). + - Fix NULL dereference in x509_constraints_uri_host() reachable only + in the process of generating certificates. + - Fixed a variety of memory corruption issues in BIO chains coming + from poor old and new API: BIO_push(), BIO_pop(), BIO_set_next(). + - Avoid potential divide by zero in BIO_dump_indent_cb() + * Documentation improvements + - Numerous improvements and additions for ASN.1, BIO, BN, and X.509. + - The BN documentation is now considered to be complete. + * Testing and Proactive Security + - As always, new test coverage is added as bugs are fixed and + subsystems are cleaned up. + - Many old tests rewritten, cleaned up and extended. + * New features + - Added Ed25519 support both as a primitive and via OpenSSL's EVP + interfaces. + - X25519 is now also supported via EVP. + - The OpenSSL 1.1 raw public and private key API is available with + support for EVP_PKEY_ED25519, EVP_PKEY_HMAC and EVP_PKEY_X25519. + Poly1305 is not currently supported via this interface. + +3.6.3 - Bug and reliability fixes + + * Bug fix + - Hostflags in the verify parameters would not propagate from an + SSL_CTX to newly created SSL. + * Reliability fix + - A double free or use after free could occur after SSL_clear(3). + +3.6.2 - Security release + + * Security fix + - A malicious certificate revocation list or timestamp response token + would allow an attacker to read arbitrary memory. + +3.6.1 - Stable release + + * Bug fixes + - Custom verification callbacks could cause the X.509 verifier to + fail to store errors resulting from leaf certificate verification. + Reported by Ilya Shipitsin. + - Unbreak ASN.1 indefinite length encoding. + Reported by Niklas Hallqvist. + +3.6.0 - Development release + + * Internal improvements + - Avoid expensive RFC 3779 checks during cert verification. + - The templated ASN.1 decoder has been cleaned up, refactored, + modernized with parts rewritten using CBB and CBS. + - The ASN.1 time parser has been rewritten. + - Rewrite and fix ASN1_STRING_to_UTF8(). + - Use asn1_abs_set_unused_bits() rather than inlining it. + - Simplify ec_asn1_group2curve(). + - First pass at a clean up of ASN1_item_sign_ctx() + - ssl_txt.c was cleaned up. + - Internal function arguments and struct member have been changed + to size_t. + - Lots of missing error checks of EVP API were added. + - Clean up and clarify BN_kronecker(). + - Simplify ASN1_INTEGER_cmp() + - Rewrite ASN1_INTEGER_{get,set}() using CBS and CBB and reuse + the ASN1_INTEGER functions for ASN1_ENUMERATED. + - Use ASN1_INTEGER to parse and build {Z,}LONG_it + - Refactored and cleaned up group (elliptic curve) handling in + t1_lib.c. + - Simplify certificate list handling code in the legacy server. + - Make CBB_finish() fail if *out_data is not NULL. + - Remove tls_buffer_set_data() and remove/revise callers. + - Rewrite SSL{_CTX,}_set_alpn_protos() using CBS. + - Simplify tlsext_supported_groups_server_parse(). + - Remove redundant length checks in tlsext parse functions. + - Simplify tls13_server_encrypted_extensions_recv(). + - Add read and write support to tls_buffer. + - Convert TLS transcript from BUF_MEM to tls_buffer. + - Clear key on exit in PKCS12_gen_mac(). + - Minor fixes in PKCS12_parse(). + - Provide and use a primitive clear function for BIGNUM_it. + - Use ASN1_INTEGER to encode/decode BIGNUM_it. + - Add stack frames to AES-NI x86_64 assembly. + - Use named initialisers for BIGNUMs. + - Tidy up some of BN_nist_mod_*. + - Expand BLOCK_CIPHER_* and related macros. + - Avoid shadowing the cbs function parameter in + tlsext_alpn_server_parse() + - Deduplicate peer certificate chain processing code. + - Make it possible to signal an error from an i2c_* function. + - Rewrite i2c_ASN1_INTEGER() using CBB/CBS. + - Remove UINT32_MAX limitation on ChaCha() and CRYPTO_chacha_20(). + - Remove bogus length checks from EVP_aead_chacha20_poly1305(). + - Reworked DSA_size() and ECDSA_size(). + - Stop using CBIGNUM_it internal to libcrypto. + - Provide c2i_ASN1_ENUMERATED_cbs() and call it from + asn1_c2i_primitive(). + - Ensure ASN.1 types are appropriately encoded. + - Avoid recycling ASN1_STRINGs when decoding ASN.1. + - Tidy up asn1_c2i_primitive() slightly. + - Mechanically expand IMPLEMENT_BLOCK_CIPHER, IMPLEMENT_CFBR, + BLOCK_CIPHER and the looney M_do_cipher macros. + - Use correct length for EVP CFB mode ciphers. + - Provide a version of ssl_msg_callback() that takes a CBS. + - Use CBS to parse TLS alerts in the legacy stack. + - Increment the input and output position for EVP AES CFB1. + - Ensure there is no trailing data for a CCS received by the + TLSv1.3 stack. + - Use CBS when procesing a CCS message in the legacy stack. + - Be stricter with middlebox compatibility mode in the TLSv1.3 + server. + * Compatibility changes + - The ASN.1 time parser has been refactored and rewritten using CBS. + It has been made stricter in that it now enforces the rules from + RFC 5280. + - ASN1_AFLG_BROKEN was removed. + - Error check tls_session_secret_cb() like OpenSSL. + - Added ASN1_INTEGER_{get,set}_{u,}int64() + - Move leaf certificate checks to the last thing after chain + validation. + - Added -s option to openssl(1) ciphers that only shows the ciphers + supported by the specified protocol. + - Use TLS_client_method() instead of TLSv1_client_method() in + the openssl(1) ciphers command. + - Validate the protocols in SSL{_CTX,}_set_alpn_protos(). + - Made TS and PKCS12 opaque. + - Per RFC 7292, safeContentsBag is a SEQUENCE OF, not a SET OF. + - Align PKCS12_key_gen_uni() with OpenSSL + - Various PKCS12 and TS accessors were added. In particular, the + TS_RESP_CTX_set_time_cb() function was added back. + - Allow a NULL header in PEM_write{,_bio}() + - Allow empty attribute sets in CSRs. + - Adjust signatures of BIO_ctrl functions. + - Provide additional defines for EVP AEAD. + - Provide OPENSSL_cleanup(). + - Make BIO_info_cb() identical to bio_info_cb(). + * Bug fixes + - Avoid use of uninitialized in BN_mod_exp_recp(). + - Fix X509_get_extension_flags() by ensuring that EXFLAG_INVALID is + set on X509_get_purpose() failure. + - Fix HMAC() with NULL key. + - Add ERR_load_{COMP,CT,KDF}_strings() to ERR_load_crypto_strings(). + - Avoid strict aliasing violations in BN_nist_mod_*(). + - Do not return X509_V_ERR_UNSPECIFIED from X509_check_ca(). + No return value of X509_check_ca() indicates failure. Application + code should therefore issue a checked call to X509_check_purpose() + before calling X509_check_ca(). + - Rewrite and fix X509v3_asid_subset() to avoid segfaults on some + valid input. + - Call the ASN1_OP_D2I_PRE callback after ASN1_item_ex_new(). + - Fix d2i_ASN1_OBJECT to advance the *der_in pointer correctly. + - Avoid use of uninitialized in ASN1_STRING_to_UTF8(). + - Do not pass uninitialized pointer to ASN1_STRING_to_UTF8(). + - Do not refuse valid IPv6 addresses in nc(1)'s HTTP CONNECT proxy. + - Do not reject primes in trial divisions. + - Error out on negative shifts in BN_{r,l}shift() instead of + accessing arrays out of bounds. + - Fix URI name constraints, allow for URI's with no host part. + - Fix the legacy verifier callback behaviour for untrusted certs. + - Correct serfver-side handling of TLSv1.3 key updates. + - Plug leak in PKCS12_setup_mac(). + - Plug leak in X509V3_add1_i2d(). + - Only print X.509 versions we know about. + - Avoid signed integer overflow due to unary negation + - Initialize readbytes in BIO_gets(). + - Plug memory leak in CMS_add_simple_smimecap(). + - Plug memory leak in X509_REQ_print_ex(). + - Check HMAC() return value to avoid a later use of uninitialized. + - Avoid potential NULL dereference in ssl_set_pkey(). + - Check return values in ssl_print_tmp_key(). + - Switch loop bounds from size_t to int in check_hosts(). + - Avoid division by zero if no connection was made in s_time.c. + - Check sk_SSL_CIPHER_push() return value + - Avoid out-of-bounds read in ssl_cipher_process_rulestr(). + - Use LONG_MAX as the limit for ciphers with long based APIs. + * New features + - EVP API for HKDF ported from OpenSSL and subsequently cleaned up. + - The security level API (SSL_{,CTX}_{get,set}_security_level()) is + now available. Callbacks and ex_data are not supported. Sane + software will not be using this. + - Experimental support for the BoringSSL QUIC API. + - Add initial support for TS ESSCertIDv2 verification. + - LibreSSL now uses the Baillie-PSW primality test instead of + Miller-Rabin . + +3.5.3 - Reliability fix + + * Fix d2i_ASN1_OBJECT(). A confusion of two CBS resulted in advancing + the passed *der_in pointer incorrectly. Thanks to Aram Sargsyan for + reporting the issue and testing the fix. + +3.5.2 - Stable release + + * Bug fixes + - Avoid single byte overread in asn1_parse2(). + - Allow name constraints with a leading dot. From Alex Wilson. + - Relax a check in x509_constraints_dirname() to allow prefixes. + From Alex Wilson. + - Fix NULL dereferences in openssl(1) cms option parsing. + - Do not zero the computed cofactor on ec_guess_cofactor() success. + - Bound cofactor in EC_GROUP_set_generator() to reduce the number of + bogus groups that can be described with nonsensical parameters. + - Avoid various potential segfaults in EVP_PKEY_CTX_free() in low + memory conditions. Reported for HMAC by Masaru Masuda. + - Plug leak in ASN1_TIME_adj_internal(). + - Avoid infinite loop for custom curves of order 1. + Issue reported by Hanno Boeck, comments by David Benjamin. + - Avoid an infinite loop on parsing DSA private keys by validating + that the provided parameters conform to FIPS 186-4. + Issue reported by Hanno Boeck, comments by David Benjamin. + * Compatibility improvements + - Allow non-standard name constraints of the form @domain.com. + * Internal improvements + - Limit OID text conversion to 64 bits per arc. + - Clean up and simplify memory BIO code. + - Reduce number of memmove() calls in memory BIOs. + - Factor out alert handling code in the legacy stack. + - Add sanity checks on p and q in old_dsa_priv_decode() + - Cache the SHA-512 hash instead of the SHA-1 for CRLs. + - Suppress various compiler warnings for old gcc versions. + - Remove free_cont from asn1_d2i_ex_primitive()/asn1_ex_c2i(). + - Rework ownership handling in x509_constraints_validate(). + - Rework ASN1_STRING_set(). + - Remove const from tls1_transcript_hash_value(). + - Clean up and simplify ssl3_renegotiate{,_check}(). + - Rewrite legacy TLS and DTLS unexpected handshake message handling. + - Simplify SSL_do_handshake(). + - Rewrite ASCII/text to ASN.1 object conversion. + - Provide t2i_ASN1_OBJECT_internal() and use it for OBJ_txt2obj(). + - Split armv7 and aarch64 code into separate locations. + - Rewrote openssl(1) ts to use the new option handling and cleaned + up the C code. + - Provide asn1_get_primitive(). + - Convert {c2i,d2i}_ASN1_OBJECT() to CBS. + - Remove the minimum record length checks from dtls1_read_bytes(). + - Clean up {dtls1,ssl3}_read_bytes(). + - Be more careful with embedded and terminating NULs in the new + name constraints code. + - Check EVP_Digest* return codes in openssl(1) ts + - Various minor code cleanup in openssl(1) pkcs12 + - Use calloc() in pkey_hmac_init(). + - Simplify priv_key handling in d2i_ECPrivateKey(). + * Documentation improvements + - Update d2i_ASN1_OBJECT(3) documentation to reflect reality after + refactoring and bug fixes. + - Fixed numerous minor grammar, spelling, wording, and punctuation + issues. + +3.5.1 - Security release + + * A malicious certificate can cause an infinite loop. + Reported by and fix from Tavis Ormandy and David Benjamin, Google. + +3.5.0 - Development release + + * New Features + - The RFC 3779 API was ported from OpenSSL. Many bugs were fixed, + regression tests were added and the code was cleaned up. + - Certificate Transparency was ported from OpenSSL. Many internal + improvements were made, resulting in cleaner and safer code. + Regress coverage was added. libssl does not yet make use of it. + * Portable Improvements + - Fixed various POSIX compliance and other portability issues + found by the port to the Sortix operating system. + - Add libmd as platform specific libraries for Solaris. + Issue reported from (ihsan opencsw org) on libressl ML. + - Set IA-64 compiler flag only if it is HP-UX with IA-64. + Suggested from Larkin Nickle (me larbob org) by libressl ML. + - Enabled and scheduled Coverity scan. + Contributed by Ilya Shipitsin (chipitsine gmail com> on github. + * Compatibility Changes + - Most structs that were previously defined in the following headers + are now opaque as they are in OpenSSL 1.1: + bio.h, bn.h, comp.h, dh.h, dsa.h, evp.h, hmac.h, ocsp.h, rsa.h, + x509.h, x509v3.h, x509_vfy.h + - Switch TLSv1.3 cipher names from AEAD- to OpenSSL's TLS_ + OpenSSL added the TLSv1.3 ciphersuites with "RFC names" instead + of using something consistent with the previous naming. Various + test suites expect these names (instead of checking for the much + more sensible cipher numbers). The old names are still accepted + as aliases. + - Subject alternative names and name constraints are now validated + when they are added to certificates. Various interoperability + problems with stacks that validate certificates more strictly + than OpenSSL can be avoided this way. + - Attempt to opportunistically use the host name for SNI in s_client + * Bug fixes + - In some situations, the verifier would discard the error on an + unvalidated certificate chain. This would happen when the + verification callback was in use, instructing the verifier to + continue unconditionally. This could lead to incorrect decisions + being made in software. + - Avoid an infinite loop in SSL_shutdown() + - Fix another return 0 bug in SSL_shutdown() + - Handle zero byte reads/writes that trigger handshakes in the + TLSv1.3 stack + - A long standing memleak in libtls CRL handling was fixed + * Internal Improvements + - Cache the SHA-512 hash instead of the SHA-1 hash and cache + notBefore and notAfter times when X.509 certificates are parsed. + - The X.509 lookup code has been simplified and cleaned up. + - Fixed numerous issues flagged by coverity and the cryptofuzz + project + - Increased the number of Miller-Rabin checks in DH and DSA + key/parameter generation + - Started using the bytestring API in libcrypto for cleaner and + safer code + - Convert {i2d,d2i}_{,EC_,DSA_,RSA_}PUBKEY{,_bio,_fp}() to templated + ASN1 + - Convert ASN1_OBJECT_new() to calloc() + - Convert ASN1_STRING_type_new() to calloc() + - Rewrite ASN1_STRING_cmp() + - Use calloc() for X509_CRL_METHOD_new() instead of malloc() + - Convert ASN1_PCTX_new() to calloc() + - Replace asn1_tlc_clear and asn1_tlc_clear_nc macros with a + function + - Consolidate {d2i,i2d}_{pr,pu}.c + - Remove handling of a NULL BUF_MEM from asn1_collect() + - Pull the recursion depth check up to the top of asn1_collect() + - Inline collect_data() in asn1_collect() + - Convert asn1_d2i_ex_primitive()/asn1_collect() from BUF_MEM to CBB + - Clean up d2i_ASN1_BOOLEAN() and i2d_ASN1_BOOLEAN() + - Consolidate ASN.1 universal tag type data + - Rewrite ASN.1 identifier/length parsing in CBS + - Make OBJ_obj2nid() work correctly with NID_undef + - tlsext_tick_lifetime_hint is now an uint32_t + - Untangle ssl3_get_message() return values + - Rename tls13_buffer to tls_buffer + - Fold DTLS_STATE_INTERNAL into DTLS1_STATE + - Provide a way to determine our maximum legacy version + - Mop up enc_read_ctx and read_hash + - Fold SSL_SESSION_INTERNAL into SSL_SESSION + - Use ssl_force_want_read in the DTLS code + - Add record processing limit to DTLS code + - Add explicit CBS_contains_zero_byte() check in CBS_strdup() + - Improve SNI hostname validation + - Ensure SSL_set_tlsext_host_name() is given a valid hostname + - Fix a strange check in the auto DH codepath + - Factor out/rewrite DHE key exchange + - Convert server serialisation of DHE parameters/public key to new + functions + - Check DH public key in ssl_kex_peer_public_dhe() + - Move the minimum DHE key size check into ssl_kex_peer_params_dhe() + - Clean up and refactor server side DHE key exchange + - Provide CBS_get_last_u8() + - Provide CBS_get_u64() + - Provide CBS_add_u64() + - Provide various CBS_peek_* functions + - Use CBS_get_last_u8() to find the content type in TLSv1.3 records + - unifdef TLS13_USE_LEGACY_CLIENT_AUTH + - Correct SSL_get_peer_cert_chain() when used with the TLSv1.3 stack + - Only allow zero length key shares when we know we're doing HRR + - Pull key share group/length CBB code up from + tls13_key_share_public() + - Refactor ssl3_get_server_kex_ecdhe() to separate parsing and + validation + - Return 0 on failure from send/get kex functions in the legacy + stack + - Rename tls13_key_share to tls_key_share + - Allocate and free the EVP_AEAD_CTX struct in + tls13_record_protection + - Convert legacy TLS client to tls_key_share + - Convert legacy TLS server to tls_key_share + - Stop attempting to duplicate the public and private key of dh_tmp + - Rename dh_tmp to dhe_params + - Rename CERT to SSL_CERT and CERT_PKEY to SSL_CERT_PKEY + - Clean up pkey handling in ssl3_get_server_key_exchange() + - Fix GOST skip certificate verify handling + - Simplify tlsext_keyshare_server_parse() + - Plumb decode errors through key share parsing code + - Simplify SSL_get_peer_certificate() + - Cleanup/simplify ssl_cert_type() + - The S3I macro was removed + - The openssl(1) cms and smime subcommands option handling was + converted and the C source was cleaned up. + * Documentation improvements + - 45 new manual pages, most of which were written from scratch. + Documentation coverage of ASN.1 and X.509 code has been + significantly improved. + * API additions and removals + - libssl + API additions + SSL_get0_verified_chain SSL_peek_ex SSL_read_ex SSL_write_ex + API stubs for compatibility + SSL_CTX_get_keylog_callback SSL_CTX_get_num_tickets + SSL_CTX_set_keylog_callback SSL_CTX_set_num_tickets + SSL_get_num_tickets SSL_set_num_tickets + - libcrypto + added API (some of these were previously available as macros): + ASIdOrRange_free ASIdOrRange_new ASIdentifierChoice_free + ASIdentifierChoice_new ASIdentifiers_free ASIdentifiers_new + ASN1_TIME_diff ASRange_free ASRange_new BIO_get_callback_ex + BIO_get_init BIO_set_callback_ex BIO_set_next + BIO_set_retry_reason BN_GENCB_set BN_GENCB_set_old + BN_abs_is_word BN_get_flags BN_is_negative + BN_is_odd BN_is_one BN_is_word BN_is_zero BN_set_flags + BN_to_montgomery BN_with_flags BN_zero_ex CTLOG_STORE_free + CTLOG_STORE_get0_log_by_id CTLOG_STORE_load_default_file + CTLOG_STORE_load_file CTLOG_STORE_new CTLOG_free + CTLOG_get0_log_id CTLOG_get0_name CTLOG_get0_public_key + CTLOG_new CTLOG_new_from_base64 CT_POLICY_EVAL_CTX_free + CT_POLICY_EVAL_CTX_get0_cert CT_POLICY_EVAL_CTX_get0_issuer + CT_POLICY_EVAL_CTX_get0_log_store CT_POLICY_EVAL_CTX_get_time + CT_POLICY_EVAL_CTX_new CT_POLICY_EVAL_CTX_set1_cert + CT_POLICY_EVAL_CTX_set1_issuer + CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE + CT_POLICY_EVAL_CTX_set_time DH_get0_g DH_get0_p DH_get0_priv_key + DH_get0_pub_key DH_get0_q DH_get_length DSA_bits DSA_get0_g + DSA_get0_p DSA_get0_priv_key DSA_get0_pub_key DSA_get0_q + ECDSA_SIG_get0_r ECDSA_SIG_get0_s EVP_AEAD_CTX_free + EVP_AEAD_CTX_new EVP_CIPHER_CTX_buf_noconst + EVP_CIPHER_CTX_get_cipher_data EVP_CIPHER_CTX_set_cipher_data + EVP_MD_CTX_md_data EVP_MD_CTX_pkey_ctx EVP_MD_CTX_set_pkey_ctx + EVP_MD_meth_dup EVP_MD_meth_free EVP_MD_meth_new + EVP_MD_meth_set_app_datasize EVP_MD_meth_set_cleanup + EVP_MD_meth_set_copy EVP_MD_meth_set_ctrl EVP_MD_meth_set_final + EVP_MD_meth_set_flags EVP_MD_meth_set_init + EVP_MD_meth_set_input_blocksize EVP_MD_meth_set_result_size + EVP_MD_meth_set_update EVP_PKEY_asn1_set_check + EVP_PKEY_asn1_set_param_check EVP_PKEY_asn1_set_public_check + EVP_PKEY_check EVP_PKEY_meth_set_check + EVP_PKEY_meth_set_param_check EVP_PKEY_meth_set_public_check + EVP_PKEY_param_check EVP_PKEY_public_check FIPS_mode + FIPS_mode_set IPAddressChoice_free IPAddressChoice_new + IPAddressFamily_free IPAddressFamily_new IPAddressOrRange_free + IPAddressOrRange_new IPAddressRange_free IPAddressRange_new + OBJ_get0_data OBJ_length OCSP_resp_get0_certs OCSP_resp_get0_id + OCSP_resp_get0_produced_at OCSP_resp_get0_respdata + OCSP_resp_get0_signature OCSP_resp_get0_signer + OCSP_resp_get0_tbs_sigalg PEM_write_bio_PrivateKey_traditional + RSA_get0_d RSA_get0_dmp1 RSA_get0_dmq1 RSA_get0_e RSA_get0_iqmp + RSA_get0_n RSA_get0_p RSA_get0_pss_params RSA_get0_q + SCT_LIST_free SCT_LIST_print SCT_LIST_validate SCT_free + SCT_get0_extensions SCT_get0_log_id SCT_get0_signature + SCT_get_log_entry_type SCT_get_signature_nid SCT_get_source + SCT_get_timestamp SCT_get_validation_status SCT_get_version + SCT_new SCT_new_from_base64 SCT_print SCT_set0_extensions + SCT_set0_log_id SCT_set0_signature SCT_set1_extensions + SCT_set1_log_id SCT_set1_signature SCT_set_log_entry_type + SCT_set_signature_nid SCT_set_source SCT_set_timestamp + SCT_set_version SCT_validate SCT_validation_status_string + X509_OBJECT_free X509_OBJECT_new X509_REQ_get0_pubkey + X509_SIG_get0 X509_SIG_getm X509_STORE_CTX_get_by_subject + X509_STORE_CTX_get_num_untrusted + X509_STORE_CTX_get_obj_by_subject X509_STORE_CTX_get_verify + X509_STORE_CTX_get_verify_cb X509_STORE_CTX_set0_verified_chain + X509_STORE_CTX_set_current_cert X509_STORE_CTX_set_error_depth + X509_STORE_CTX_set_verify X509_STORE_get_verify + X509_STORE_get_verify_cb X509_STORE_set_verify + X509_get_X509_PUBKEY X509_get_extended_key_usage + X509_get_extension_flags X509_get_key_usage + X509v3_addr_add_inherit X509v3_addr_add_prefix + X509v3_addr_add_range X509v3_addr_canonize X509v3_addr_get_afi + X509v3_addr_get_range X509v3_addr_inherits + X509v3_addr_is_canonical X509v3_addr_subset + X509v3_addr_validate_path X509v3_addr_validate_resource_set + X509v3_asid_add_id_or_range X509v3_asid_add_inherit + X509v3_asid_canonize X509v3_asid_inherits + X509v3_asid_is_canonical X509v3_asid_subset + X509v3_asid_validate_path X509v3_asid_validate_resource_set + d2i_ASIdOrRange d2i_ASIdentifierChoice d2i_ASIdentifiers + d2i_ASRange d2i_IPAddressChoice d2i_IPAddressFamily + d2i_IPAddressOrRange d2i_IPAddressRange d2i_SCT_LIST + i2d_ASIdOrRange i2d_ASIdentifierChoice i2d_ASIdentifiers + i2d_ASRange i2d_IPAddressChoice i2d_IPAddressFamily + i2d_IPAddressOrRange i2d_IPAddressRange i2d_SCT_LIST + i2d_re_X509_CRL_tbs i2d_re_X509_REQ_tbs i2d_re_X509_tbs i2o_SCT + i2o_SCT_LIST o2i_SCT o2i_SCT_LIST + removed API: + ASN1_check_infinite_end ASN1_const_check_infinite_end EVP_dss + EVP_dss1 EVP_ecdsa HMAC_CTX_cleanup HMAC_CTX_init + NETSCAPE_ENCRYPTED_PKEY_free NETSCAPE_ENCRYPTED_PKEY_new + NETSCAPE_PKEY_free NETSCAPE_PKEY_new NETSCAPE_X509_free + NETSCAPE_X509_new OBJ_bsearch_ex_ PEM_SealFinal PEM_SealInit + PEM_SealUpdate PEM_read_X509_CERT_PAIR + PEM_read_bio_X509_CERT_PAIR PEM_write_X509_CERT_PAIR + PEM_write_bio_X509_CERT_PAIR X509_CERT_PAIR_free + X509_CERT_PAIR_new X509_OBJECT_free_contents asn1_do_adb + asn1_do_lock asn1_enc_free asn1_enc_init asn1_enc_restore + asn1_enc_save asn1_ex_c2i asn1_get_choice_selector + asn1_get_field_ptr asn1_set_choice_selector check_defer + d2i_ASN1_BOOLEAN d2i_NETSCAPE_ENCRYPTED_PKEY d2i_NETSCAPE_PKEY + d2i_NETSCAPE_X509 d2i_Netscape_RSA d2i_RSA_NET + d2i_X509_CERT_PAIR i2d_ASN1_BOOLEAN i2d_NETSCAPE_ENCRYPTED_PKEY + i2d_NETSCAPE_PKEY i2d_NETSCAPE_X509 i2d_Netscape_RSA i2d_RSA_NET + i2d_X509_CERT_PAIR name_cmp obj_cleanup_defer + 3.4.1 - Stable release * New Features @@ -2108,7 +3394,7 @@ LibreSSL Portable Release Notes: * Address POODLE attack by disabling SSLv3 by default * Fix Eliptical Curve cipher selection bug - (https://github.com/libressl-portable/portable/issues/35) + (https://github.com/libressl/portable/issues/35) 2.1.0 - First release from the OpenBSD 5.7 tree * Added support for automatic ephemeral EC keys diff --git a/FindLibreSSL.cmake b/FindLibreSSL.cmake index 6bdc069d36..67793710df 100644 --- a/FindLibreSSL.cmake +++ b/FindLibreSSL.cmake @@ -81,6 +81,11 @@ if (WIN32) "${_programfiles}/LibreSSL" ) unset(_programfiles) +elseif(APPLE) + # Homebrew installs LibreSSL here + set(_LIBRESSL_ROOT_PATHS + "/usr/local/opt/libressl" + ) else() set(_LIBRESSL_ROOT_PATHS "/usr/local/" diff --git a/LibreSSLConfig.cmake.in b/LibreSSLConfig.cmake.in new file mode 100644 index 0000000000..6c5cdd8327 --- /dev/null +++ b/LibreSSLConfig.cmake.in @@ -0,0 +1,36 @@ +@PACKAGE_INIT@ + +set(LIBRESSL_VERSION @VERSION@) +set_and_check(LIBRESSL_INCLUDE_DIR @PACKAGE_INCLUDE_DIRECTORY@) + +if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/LibreSSL-Crypto.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/LibreSSL-Crypto.cmake") + set(LIBRESSL_CRYPTO_LIBRARY LibreSSL::Crypto) + set(LibreSSL_Crypto_FOUND TRUE) +endif() + +if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/LibreSSL-SSL.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/LibreSSL-SSL.cmake") + set(LIBRESSL_SSL_LIBRARY LibreSSL::SSL) + set(LibreSSL_SSL_FOUND TRUE) +endif() + +if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/LibreSSL-TLS.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/LibreSSL-TLS.cmake") + set(LIBRESSL_TLS_LIBRARY LibreSSL::TLS) + set(LibreSSL_TLS_FOUND TRUE) +endif() + +set(LIBRESSL_LIBRARIES + ${LIBRESSL_CRYPTO_LIBRARY} + ${LIBRESSL_SSL_LIBRARY} + ${LIBRESSL_TLS_LIBRARY} +) + +check_required_components(LibreSSL) + +if(DEFINED LibreSSL_FOUND) + set(LIBRESSL_FOUND ${LibreSSL_FOUND}) +else() + set(LIBRESSL_FOUND TRUE) +endif() diff --git a/Makefile.am b/Makefile.am index ed59df0bf5..eca5a278ed 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,19 @@ -SUBDIRS = crypto ssl tls include apps man +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +SUBDIRS = include crypto ssl tls apps man if ENABLE_TESTS SUBDIRS += tests endif @@ -10,8 +25,8 @@ if !ENABLE_LIBTLS_ONLY pkgconfig_DATA += libcrypto.pc libssl.pc openssl.pc endif -EXTRA_DIST = README.md README.windows VERSION config scripts -EXTRA_DIST += CMakeLists.txt cmake_export_symbol.cmake cmake_uninstall.cmake.in FindLibreSSL.cmake +EXTRA_DIST = README.md README.mingw.md VERSION config scripts +EXTRA_DIST += CMakeLists.txt cmake_export_symbol.cmake cmake_uninstall.cmake.in FindLibreSSL.cmake LibreSSLConfig.cmake.in EXTRA_DIST += cert.pem openssl.cnf x509v3.cnf .PHONY: install_sw diff --git a/Makefile.am.common b/Makefile.am.common index 87aa807031..4257cf8b05 100644 --- a/Makefile.am.common +++ b/Makefile.am.common @@ -1,3 +1,20 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + AM_CFLAGS = -AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL +AM_CPPFLAGS = -I$(top_srcdir)/include +AM_CPPFLAGS += -I$(abs_top_builddir)/include +AM_CPPFLAGS += -I$(top_srcdir)/include/compat -DLIBRESSL_INTERNAL AM_CPPFLAGS += -D__BEGIN_HIDDEN_DECLS= -D__END_HIDDEN_DECLS= diff --git a/README.md b/README.md index 31c122dc52..598188cc27 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,26 @@ ![LibreSSL image](https://www.libressl.org/images/libressl.jpg) -## Official portable version of [LibreSSL](https://www.libressl.org) ## -[![Linux Build Status](https://github.com/libressl-portable/portable/actions/workflows/linux_test.yml/badge.svg)](https://github.com/libressl-portable/portable/actions/workflows/linux_test.yml) -[![macOS Build Status](https://github.com/libressl-portable/portable/actions/workflows/macos_test.yml/badge.svg)](https://github.com/libressl-portable/portable/actions/workflows/macos_test.yml) -[![Android_Build Status](https://github.com/libressl-portable/portable/actions/workflows/android_test.yml/badge.svg)](https://github.com/libressl-portable/portable/actions/workflows/android_test.yml) -[![Cross_Build Status](https://github.com/libressl-portable/portable/actions/workflows/cross_test.yml/badge.svg)](https://github.com/libressl-portable/portable/actions/workflows/cross_test.yml) +## Official portable version of [LibreSSL](https://www.libressl.org) + +[![Linux Build Status](https://github.com/libressl/portable/actions/workflows/linux.yml/badge.svg)](https://github.com/libressl/portable/actions/workflows/linux.yml) +[![macOS Build Status](https://github.com/libressl/portable/actions/workflows/macos.yml/badge.svg)](https://github.com/libressl/portable/actions/workflows/macos.yml) +[![Windows Build Status](https://github.com/libressl/portable/actions/workflows/windows.yml/badge.svg)](https://github.com/libressl/portable/actions/workflows/windows.yml) +[![Android Build Status](https://github.com/libressl/portable/actions/workflows/android.yml/badge.svg)](https://github.com/libressl/portable/actions/workflows/android.yml) +[![Solaris Build Status](https://github.com/libressl/portable/actions/workflows/solaris.yml/badge.svg)](https://github.com/libressl/portable/actions/workflows/solaris.yml) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/libressl.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:libressl) LibreSSL is a fork of [OpenSSL](https://www.openssl.org) 1.0.1g developed by the [OpenBSD](https://www.openbsd.org) project. Our goal is to modernize the codebase, improve security, and apply best practice development processes from OpenBSD. -## Compatibility with OpenSSL: ## +## Compatibility with OpenSSL -LibreSSL is API compatible with OpenSSL 1.0.1, but does not yet include all -new APIs from OpenSSL 1.0.2 and later. LibreSSL also includes APIs not yet -present in OpenSSL. The current common API subset is OpenSSL 1.0.1. +LibreSSL provides much of the OpenSSL 1.1 API. The OpenSSL 3 API is not currently +supported. Incompatibilities between the projects exist and are unavoidable since +both evolve with different goals and priorities. Important incompatibilities will +be addressed if possible and as long as they are not too detrimental to LibreSSL's +goals of simplicity, security and sanity. We do not add new features, ciphers and +API without a solid reason and require that new code be clean and of high quality. LibreSSL is not ABI compatible with any release of OpenSSL, or necessarily earlier releases of LibreSSL. You will need to relink your programs to @@ -23,7 +28,7 @@ LibreSSL in order to use it, just as in moving between major versions of OpenSSL LibreSSL's installed library version numbers are incremented to account for ABI and API changes. -## Compatibility with other operating systems: ## +## Compatibility with other operating systems While primarily developed on and taking advantage of APIs available on OpenBSD, the LibreSSL portable project attempts to provide working alternatives for @@ -36,14 +41,16 @@ At the time of this writing, LibreSSL is known to build and work on: * FreeBSD (tested with 9.2 and later) * NetBSD (7.0 or later recommended) * HP-UX (11i) -* Solaris (11 and later preferred) +* Solaris 11 and later * Mac OS X (tested with 10.8 and later) * AIX (5.3 and later) +* Emscripten (3.1.44 and later) LibreSSL also supports the following Windows environments: + * Microsoft Windows (Windows 7 / Windows Server 2008r2 or later, x86 and x64) * Wine (32-bit and 64-bit) -* Mingw-w64, Cygwin, and Visual Studio +* MinGW-w64, Cygwin, and Visual Studio Official release tarballs are available at your friendly neighborhood OpenBSD mirror in directory @@ -51,34 +58,35 @@ OpenBSD mirror in directory although we suggest that you use a [mirror](https://www.openbsd.org/ftp.html). The LibreSSL portable build framework is also -[mirrored](https://github.com/libressl-portable/portable) in Github. +[mirrored](https://github.com/libressl/portable) on GitHub. Please report bugs either to the public libressl@openbsd.org mailing list, -or to the github -[issue tracker](https://github.com/libressl-portable/portable/issues) +or to the GitHub +[issue tracker](https://github.com/libressl/portable/issues) Severe vulnerabilities or bugs requiring coordination with OpenSSL can be sent to the core team at libressl-security@openbsd.org. -# Building LibreSSL # +# Building LibreSSL -## Prerequisites when building from a Git checkout ## +## Building from a Git checkout -If you have checked this source using Git, or have downloaded a source tarball -from Github, follow these initial steps to prepare the source tree for -building. _Note: Your build will fail if you do not follow these instructions! If you cannot follow these instructions (e.g. Windows system using CMake) or cannot meet these prerequistes, please download an official release distribution from https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/ instead. Using official releases is strongly advised if you are not a developer._ +If you have checked out this source using Git, or have downloaded a source +tarball from GitHub, follow these initial steps to prepare the source tree for +building. _Note: Your build will fail if you do not follow these instructions! +If you cannot follow these instructions or cannot meet these prerequisites, +please download an official release distribution from +https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/ instead. Using official +releases is strongly advised if you are not a developer._ -1. Ensure you have the following packages installed: - automake, autoconf, git, libtool, perl -2. Run `./autogen.sh` to prepare the source tree for building or - run `./dist.sh` to prepare a tarball. +1. Ensure that you have a bash shell. This is also required on Windows. +2. Ensure that you have the following packages installed: + automake, autoconf, git, libtool, perl. +3. Run `./autogen.sh` to prepare the source tree for building. -## Steps that apply to all builds ## +## Build steps using configure -Once you have a source tree, either by downloaded using git and having -run the `autogen.sh` script above, or by downloading a release distribution from -an OpenBSD mirror, run these commands to build and install the package on most -systems: +Once you have the source tree prepared, run these commands to build and install: ```sh ./configure # see ./configure --help for configuration options @@ -86,7 +94,11 @@ make check # runs builtin unit tests make install # set DESTDIR= to install to an alternate location ``` -If you wish to use the CMake build system, use these commands: +Alternatively, it is possible to run `./dist.sh` to prepare a tarball. + +## Build steps using CMake + +Once you have the source tree prepared, run these commands to build and install: ```sh mkdir build @@ -96,7 +108,7 @@ make make test ``` -For faster builds, you can use Ninja as well: +For faster builds, you can use Ninja: ```sh mkdir build-ninja @@ -106,9 +118,30 @@ ninja ninja test ``` -### OS specific build information: ### +Or another supported build system like Visual Studio: + +```sh +mkdir build-vs2022 +cd build-vs2022 +cmake -G"Visual Studio 17 2022" .. +``` -#### HP-UX (11i) #### +#### Additional CMake Options + +| Option Name | Default | Description | +|-------------------------|--------:|-----------------------------------------------------------------------------------------------------------------| +| `LIBRESSL_SKIP_INSTALL` | `OFF` | allows skipping install() rules. Can be specified from command line using
```-DLIBRESSL_SKIP_INSTALL=ON``` | +| `LIBRESSL_APPS` | `ON` | allows skipping application builds. Apps are required to run tests | +| `LIBRESSL_TESTS` | `ON` | allows skipping of tests. Tests are only available in static builds | +| `BUILD_SHARED_LIBS` | `OFF` | CMake option for building shared libraries. | +| `ENABLE_ASM` | `ON` | builds assembly optimized rules. | +| `ENABLE_EXTRATESTS` | `OFF` | Enable extra tests that may be unreliable on some platforms | +| `ENABLE_NC` | `OFF` | Enable installing TLS-enabled nc(1) | +| `OPENSSLDIR` | Blank | Set the default openssl directory. Can be specified from command line using
```-DOPENSSLDIR=``` | + +## Build information for specific systems + +### HP-UX (11i) Set the UNIX_STD environment variable to `2003` before running `configure` in order to build with the HP C/aC++ compiler. See the "standards(5)" man @@ -120,64 +153,53 @@ export UNIX_STD=2003 make ``` -#### Windows - Mingw-w64 #### +### MinGW-w64 - Windows -LibreSSL builds against relatively recent versions of Mingw-w64, not to be -confused with the original mingw.org project. Mingw-w64 3.2 or later -should work. See README.windows for more information +LibreSSL builds against relatively recent versions of [MinGW-w64](https://www.mingw-w64.org/), not to be +confused with the original mingw.org project. MinGW-w64 3.2 or later +should work. See [README.mingw.md](README.mingw.md) for more information. -#### Windows - Visual Studio #### +### Emscripten -LibreSSL builds using the CMake target "Visual Studio 12 2013" and newer. To -generate a Visual Studio project, install CMake, enter the LibreSSL source -directory and run: +When configuring LibreSSL for use with Emscripten, make sure to prepend +`emcmake` to your `cmake` configuration command. Once configured, you can +proceed with your usual `cmake` commands. For example: ```sh - mkdir build-vs2013 - cd build-vs2013 - cmake -G"Visual Studio 12 2013" .. +emcmake cmake . -Bbuild +cmake --build build --config Release +ctest --test-dir build -C Release --output-on-failure ``` -Replace "Visual Studio 12 2013" with whatever version of Visual Studio you -have installed. This will generate a LibreSSL.sln file that you can incorporate -into other projects or build by itself. - -#### Cmake - Additional Options #### - -| Option Name | Default | Description -| ------------ | -----: | ------ -| LIBRESSL_SKIP_INSTALL | OFF | allows skipping install() rules. Can be specified from command line using
```-DLIBRESSL_SKIP_INSTALL=ON``` | -| LIBRESSL_APPS | ON | allows skipping application builds. Apps are required to run tests | -| LIBRESSL_TESTS | ON | allows skipping of tests. Tests are only available in static builds | -| BUILD_SHARED_LIBS | OFF | CMake option for building shared libraries. | -| ENABLE_ASM | ON | builds assembly optimized rules. | -| ENABLE_EXTRATESTS | OFF | Enable extra tests that may be unreliable on some platforms | -| ENABLE_NC | OFF | Enable installing TLS-enabled nc(1) | -| OPENSSLDIR | Blank | Set the default openssl directory. Can be specified from command line using
```-DOPENSSLDIR=``` | - -# Using LibreSSL # +# Using LibreSSL -## CMake ## +## CMake -Make a new folder in your project root (where your main CMakeLists.txt file is located) called CMake. Copy the FindLibreSSL.cmake file to that folder, and add the following line to your main CMakeLists.txt: +Make a new folder in your project root (where your main `CMakeLists.txt` file is +located) called CMake. Copy the `FindLibreSSL.cmake` file to that folder, and +add the following line to your main `CMakeLists.txt`: ```cmake set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") ``` -After your **add_executable** or **add_library** line in your CMakeLists.txt file add the following: +After your `add_executable` or `add_library` line in your `CMakeLists.txt` file +add the following: ```cmake find_package(LibreSSL REQUIRED) ``` -It will tell CMake to find LibreSSL and if found will let you use the following 3 interfaces in your CMakeLists.txt file: +It will tell CMake to find LibreSSL and if found will let you use the following +3 interfaces in your `CMakeLists.txt` file: * LibreSSL::Crypto * LibreSSL::SSL * LibreSSL::TLS -If you for example want to use the LibreSSL TLS library in your test program, include it like so (SSL and Cryto are required by TLS and included automatically too): +If you for example want to use the LibreSSL TLS library in your test program, +include it like so (SSL and Crypto are required by TLS and included +automatically too): ```cmake target_link_libraries(test LibreSSL::TLS) @@ -199,10 +221,18 @@ find_package(LibreSSL REQUIRED) target_link_libraries(test LibreSSL::TLS) ``` -#### Linux #### +#### Linux -Following the guide in the sections above to compile LibreSSL using make and running "sudo make install" will install LibreSSL to the /usr/local/ folder, and will found automatically by find_package. If your system installs it to another location or you have placed them yourself in a different location, you can set the CMake variable LIBRESSL_ROOT_DIR to the correct path, to help CMake find the library. +Following the guide in the sections above to compile LibreSSL using make and +running `sudo make install` will install LibreSSL to the `/usr/local/` folder, +and will be found automatically by find_package. If your system installs it to +another location, or you have placed them yourself in a different location, you +can set the CMake variable `LIBRESSL_ROOT_DIR` to the correct path, to help +CMake find the library. -#### Windows #### +#### Windows -Placing the library files in C:/Program Files/LibreSSL/lib and the include files in C:/Program Files/LibreSSL/include should let CMake find them automatically, but it is recommended that you use CMake-GUI to set the paths. It is more convenient as you can have the files in any folder you choose. +Placing the library files in `C:/Program Files/LibreSSL/lib` and the include +files in `C:/Program Files/LibreSSL/include` should let CMake find them +automatically, but it is recommended that you use CMake-GUI to set the paths. +It is more convenient as you can have the files in any folder you choose. diff --git a/README.mingw.md b/README.mingw.md new file mode 100644 index 0000000000..a90de5f32c --- /dev/null +++ b/README.mingw.md @@ -0,0 +1,43 @@ +## Building with MinGW-w64 for 32- and 64-bit + +For Windows systems, LibreSSL supports the MinGW-w64 toolchain, which can use +GCC or Clang as the compiler. Contrary to its name, MinGW-w64 supports both +32-bit and 64-bit build environments. If your project already uses MinGW-w64, +then LibreSSL should integrate very nicely. Old versions of the MinGW-w64 +toolchain, such as the one packaged with Ubuntu 12.04, may have trouble +building LibreSSL. Please try it with a recent toolchain if you encounter +troubles. Cygwin provides an easy method of installing the latest MinGW-w64 +cross-compilers on Windows. + +To configure and build LibreSSL for a 32-bit system, use the following +build steps: + + CC=i686-w64-mingw32-gcc CPPFLAGS=-D__MINGW_USE_VC2005_COMPAT \ + ./configure --host=i686-w64-mingw32 + make + make check + +For 64-bit builds, use these instead: + + CC=x86_64-w64-mingw32-gcc ./configure --host=x86_64-w64-mingw32 + make + make check + +### Why the -D__MINGW_USE_VC2005_COMPAT flag on 32-bit systems? + +An ABI change introduced with Microsoft Visual C++ 2005 (also known as +Visual C++ 8.0) switched time_t from 32-bit to 64-bit. It is important to +build LibreSSL with 64-bit time_t whenever possible, because 32-bit time_t +is unable to represent times past 2038 (this is commonly known as the +Y2K38 problem). + +If LibreSSL is built with 32-bit time_t, when verifying a certificate whose +expiry date is set past 19 January 2038, it will be unable to tell if the +certificate has expired or not, and thus take the safe stance and reject it. + +In order to avoid this, you need to build LibreSSL (and everything that links +with it) with the -D__MINGW_USE_VC2005_COMPAT flag. This tells MinGW-w64 to +use the new ABI. + +64-bit systems always have a 64-bit time_t and are not affected by this +problem. diff --git a/README.windows b/README.windows deleted file mode 100644 index a88ddc9cf2..0000000000 --- a/README.windows +++ /dev/null @@ -1,65 +0,0 @@ -# Building - -For Windows systems, LibreSSL supports the mingw-w64 toolchain, which can use -GCC or Clang as the compiler. Contrary to its name, mingw-w64 supports both -32-bit and 64-bit build environments. If your project already uses mingw-w64, -then LibreSSL should integrate very nicely. Old versions of the mingw-w64 -toolchain, such as the one packaged with Ubuntu 12.04, may have trouble -building LibreSSL. Please try it with a recent toolchain if you encounter -troubles. Cygwin provides an easy method of installing the latest mingw-w64 -cross compilers on Windows. - -To configure and build LibreSSL for a 32-bit system, use the following -build steps: - - CC=i686-w64-mingw32-gcc CPPFLAGS=-D__MINGW_USE_VC2005_COMPAT \ - ./configure --host=i686-w64-mingw32 - make - make check - -For 64-bit builds, use these instead: - - CC=x86_64-w64-mingw32-gcc ./configure --host=x86_64-w64-mingw32 - make - make check - -# Why the -D__MINGW_USE_VC2005_COMPAT flag on 32-bit systems? - -An ABI change introduced with Microsoft Visual C++ 2005 (also known as -Visual C++ 8.0) switched time_t from 32-bit to 64-bit. It is important to -build LibreSSL with 64-bit time_t whenever possible, because 32-bit time_t -is unable to represent times past 2038 (this is commonly known as the -Y2K38 problem). - -If LibreSSL is built with 32-bit time_t, when verifying a certificate whose -expiry date is set past 19 January 2038, it will be unable to tell if the -certificate has expired or not, and thus take the safe stance and reject it. - -In order to avoid this, you need to build LibreSSL (and everything that links -with it) with the -D__MINGW_USE_VC2005_COMPAT flag. This tells mingw-w64 to -use the new ABI. - -64-bit systems always have a 64-bit time_t and are not affected by this -problem. - -# Using Libressl with Visual Studio - -A script for generating ready-to-use .DLL and static .LIB files is included in -the source repository at -https://github.com/libressl-portable/portable/blob/master/dist-win.sh - -This script uses mingw-w64 to build LibreSSL and then uses Visual Studio tools -to generate compatible library import files ready-to-use with Visual -Studio projects. Static and dynamic libraries are included. The script uses -cv2pdb to generate Visual Studio and windbg compatible debug files. cv2pdb is a -tool developed for the D language and can be found here: -https://github.com/rainers/cv2pdb - -Pre-built Windows binaries are available with LibreSSL releases if you do not -have a mingw-w64 build environment. Mingw-w64 code is largely, but not 100%, -compatible with code built from Visual Studio. Notably, FILE * pointers cannot -be shared between code built for Mingw-w64 and Visual Studio. - -As of LibreSSL 2.2.2, Visual Studio Native builds can be produced using CMake. -This produces ABI-compatible libraries for linking with native code generated -by Visual Studio. diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 08a5a41e0f..754990ae08 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -1,3 +1,18 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + add_subdirectory(ocspcheck) add_subdirectory(openssl) add_subdirectory(nc) diff --git a/apps/nc/CMakeLists.txt b/apps/nc/CMakeLists.txt index a241637d5e..b1eed1b0ba 100644 --- a/apps/nc/CMakeLists.txt +++ b/apps/nc/CMakeLists.txt @@ -1,3 +1,18 @@ +# +# Copyright (c) 2016 Kinichiro Inoguchi +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + if(BUILD_NC) set( @@ -22,30 +37,25 @@ else() set(NC_SRC ${NC_SRC} compat/accept4.c) endif() -check_function_exists(readpassphrase HAVE_READPASSPHRASE) +check_symbol_exists(readpassphrase "readpassphrase.h" HAVE_READPASSPHRASE) if(HAVE_READPASSPHRASE) add_definitions(-DHAVE_READPASSPHRASE) else() set(NC_SRC ${NC_SRC} compat/readpassphrase.c) endif() -check_function_exists(strtonum HAVE_STRTONUM) -if(HAVE_STRTONUM AND CMAKE_SYSTEM_NAME MATCHES "Darwin" AND - CMAKE_HOST_SYSTEM_VERSION VERSION_GREATER_EQUAL 20) - add_definitions(-DHAVE_STRTONUM) -else() - set(NC_SRC ${NC_SRC} compat/strtonum.c) -endif() - -if(NOT "${OPENSSLDIR}" STREQUAL "") - add_definitions(-DDEFAULT_CA_FILE=\"${OPENSSLDIR}/cert.pem\") -else() - add_definitions(-DDEFAULT_CA_FILE=\"${CMAKE_INSTALL_PREFIX}/etc/ssl/cert.pem\") -endif() +add_definitions(-DDEFAULT_CA_FILE=\"${OPENSSLDIR}/cert.pem\") add_executable(nc ${NC_SRC}) -target_include_directories(nc PRIVATE . ./compat ../../include/compat) -target_link_libraries(nc ${LIBTLS_LIBS}) +target_include_directories(nc + PRIVATE + . + ./compat + ../../include/compat + PUBLIC + ../../include + ${CMAKE_BINARY_DIR}/include) +target_link_libraries(nc ${LIBTLS_LIBS} compat_obj) if(ENABLE_NC) if(ENABLE_LIBRESSL_INSTALL) diff --git a/apps/nc/Makefile.am b/apps/nc/Makefile.am index 58b5c01188..a3911a2af1 100644 --- a/apps/nc/Makefile.am +++ b/apps/nc/Makefile.am @@ -1,6 +1,23 @@ +# +# Copyright (c) 2015 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + include $(top_srcdir)/Makefile.am.common -include $(abs_top_builddir)/crypto/libcrypto_la_objects.mk +-include $(abs_top_builddir)/ssl/libssl_la_objects.mk +-include $(abs_top_builddir)/tls/libtls_la_objects.mk if BUILD_NC @@ -14,12 +31,13 @@ endif EXTRA_DIST = nc.1 EXTRA_DIST += CMakeLists.txt -nc_LDADD = $(abs_top_builddir)/tls/libtls.la -nc_LDADD += $(PLATFORM_LDADD) $(PROG_LDADD) - -nc_LDADD += $(libcrypto_la_objects) +nc_LDADD = $(libcrypto_la_objects) nc_LDADD += $(libcompat_la_objects) nc_LDADD += $(libcompatnoopt_la_objects) +nc_LDADD += $(libssl_la_objects) +nc_LDADD += $(libtls_la_objects) + +nc_LDADD += $(PLATFORM_LDADD) $(PROG_LDADD) AM_CPPFLAGS += -I$(top_srcdir)/apps/nc/compat @@ -43,8 +61,4 @@ if !HAVE_READPASSPHRASE nc_SOURCES += compat/readpassphrase.c endif -if !HAVE_STRTONUM -nc_SOURCES += compat/strtonum.c -endif - endif diff --git a/apps/nc/compat/accept4.c b/apps/nc/compat/accept4.c index 278198baad..7818bc0ab4 100644 --- a/apps/nc/compat/accept4.c +++ b/apps/nc/compat/accept4.c @@ -5,12 +5,18 @@ int accept4(int s, struct sockaddr *addr, socklen_t *addrlen, int flags) { int rets = accept(s, addr, addrlen); + int fl; if (rets == -1) - return s; + return rets; if (flags & SOCK_CLOEXEC) { - flags = fcntl(s, F_GETFD); - fcntl(rets, F_SETFD, flags | FD_CLOEXEC); + fl = fcntl(rets, F_GETFD); + fcntl(rets, F_SETFD, fl | FD_CLOEXEC); + } + + if (flags & SOCK_NONBLOCK) { + fl = fcntl(rets, F_GETFL); + fcntl(rets, F_SETFL, fl | O_NONBLOCK); } return rets; diff --git a/apps/nc/compat/readpassphrase.c b/apps/nc/compat/readpassphrase.c index f3aa24868e..2a1e9ef1fb 100644 --- a/apps/nc/compat/readpassphrase.c +++ b/apps/nc/compat/readpassphrase.c @@ -94,6 +94,8 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags) } input = STDIN_FILENO; output = STDERR_FILENO; + } else { + (void)fcntl(input, F_SETFD, FD_CLOEXEC); } /* diff --git a/apps/nc/compat/sys/socket.h b/apps/nc/compat/sys/socket.h index 13eb380b42..2c7ee4fc1f 100644 --- a/apps/nc/compat/sys/socket.h +++ b/apps/nc/compat/sys/socket.h @@ -6,8 +6,7 @@ #ifndef _WIN32 #include_next -#if !defined(SOCK_NONBLOCK) || !defined(SOCK_CLOEXEC) -#define NEED_SOCKET_FLAGS +#if defined(NEED_SOCKET_FLAGS) int _socket(int domain, int type, int protocol); #ifndef SOCKET_FLAGS_PRIV #define socket(d, t, p) _socket(d, t, p) diff --git a/apps/ocspcheck/CMakeLists.txt b/apps/ocspcheck/CMakeLists.txt index 43b091a5e5..ed2ec1b49c 100644 --- a/apps/ocspcheck/CMakeLists.txt +++ b/apps/ocspcheck/CMakeLists.txt @@ -1,4 +1,17 @@ -if(NOT MSVC) +# +# Copyright (c) 2017 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. set( OCSPCHECK_SRC @@ -8,33 +21,24 @@ set( check_function_exists(memmem HAVE_MEMMEM) if(HAVE_MEMMEM) - add_definitions(-DHAVE_MEMMEM) + add_definitions(-DHAVE_MEMMEM) else() - set(OCSPCHECK_SRC ${OCSPCHECK_SRC} compat/memmem.c) + set(OCSPCHECK_SRC ${OCSPCHECK_SRC} compat/memmem.c) endif() -check_function_exists(strtonum HAVE_STRTONUM) -if(HAVE_STRTONUM AND CMAKE_SYSTEM_NAME MATCHES "Darwin" AND - CMAKE_HOST_SYSTEM_VERSION VERSION_GREATER_EQUAL 20) - add_definitions(-DHAVE_STRTONUM) -else() - set(OCSPCHECK_SRC ${OCSPCHECK_SRC} compat/strtonum.c) -endif() - -if(NOT "${OPENSSLDIR}" STREQUAL "") - add_definitions(-DDEFAULT_CA_FILE=\"${OPENSSLDIR}/cert.pem\") -else() - add_definitions(-DDEFAULT_CA_FILE=\"${CMAKE_INSTALL_PREFIX}/etc/ssl/cert.pem\") -endif() +add_definitions(-DDEFAULT_CA_FILE=\"${OPENSSLDIR}/cert.pem\") add_executable(ocspcheck ${OCSPCHECK_SRC}) -target_include_directories(ocspcheck PRIVATE . ./compat ../../include/compat) -target_link_libraries(ocspcheck tls ${OPENSSL_LIBS}) +target_include_directories(ocspcheck + PRIVATE + ../../include/compat + PUBLIC + ../../include + ${CMAKE_BINARY_DIR}/include) +target_link_libraries(ocspcheck tls ${OPENSSL_LIBS} compat_obj tls_compat_obj) if(ENABLE_LIBRESSL_INSTALL) install(TARGETS ocspcheck DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ocspcheck.8 DESTINATION ${CMAKE_INSTALL_MANDIR}/man8) endif(ENABLE_LIBRESSL_INSTALL) - -endif() diff --git a/apps/ocspcheck/Makefile.am b/apps/ocspcheck/Makefile.am index 71a73ea4f6..554bd5c171 100644 --- a/apps/ocspcheck/Makefile.am +++ b/apps/ocspcheck/Makefile.am @@ -1,5 +1,24 @@ +# +# Copyright (c) 2017 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + include $(top_srcdir)/Makefile.am.common +-include $(abs_top_builddir)/crypto/libcrypto_la_objects.mk +-include $(abs_top_builddir)/ssl/libssl_la_objects.mk +-include $(abs_top_builddir)/tls/libtls_la_objects.mk + if !ENABLE_LIBTLS_ONLY bin_PROGRAMS = ocspcheck dist_man_MANS = ocspcheck.8 @@ -10,9 +29,11 @@ endif EXTRA_DIST = ocspcheck.8 EXTRA_DIST += CMakeLists.txt -ocspcheck_LDADD = $(abs_top_builddir)/crypto/libcrypto.la -ocspcheck_LDADD += $(abs_top_builddir)/ssl/libssl.la -ocspcheck_LDADD += $(abs_top_builddir)/tls/libtls.la +ocspcheck_LDADD = $(libcrypto_la_objects) +ocspcheck_LDADD += $(libcompat_la_objects) +ocspcheck_LDADD += $(libcompatnoopt_la_objects) +ocspcheck_LDADD += $(libssl_la_objects) +ocspcheck_LDADD += $(libtls_la_objects) ocspcheck_LDADD += $(PLATFORM_LDADD) $(PROG_LDADD) ocspcheck_SOURCES = http.c @@ -22,7 +43,3 @@ noinst_HEADERS = http.h if !HAVE_MEMMEM ocspcheck_SOURCES += compat/memmem.c endif - -if !HAVE_STRTONUM -ocspcheck_SOURCES += compat/strtonum.c -endif diff --git a/apps/openssl/CMakeLists.txt b/apps/openssl/CMakeLists.txt index c5cfbe2383..3040d01b2c 100644 --- a/apps/openssl/CMakeLists.txt +++ b/apps/openssl/CMakeLists.txt @@ -1,3 +1,18 @@ +# +# Copyright (c) 2016 Kinichiro Inoguchi +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set( OPENSSL_SRC apps.c @@ -20,7 +35,6 @@ set( gendsa.c genpkey.c genrsa.c - nseq.c ocsp.c openssl.c passwd.c @@ -43,7 +57,6 @@ set( sess_id.c smime.c speed.c - spkac.c ts.c verify.c version.c @@ -61,24 +74,22 @@ if(WIN32) set(OPENSSL_SRC ${OPENSSL_SRC} compat/poll_win.c) endif() -check_function_exists(strtonum HAVE_STRTONUM) -if(HAVE_STRTONUM AND CMAKE_SYSTEM_NAME MATCHES "Darwin" AND - CMAKE_HOST_SYSTEM_VERSION VERSION_GREATER_EQUAL 20) - add_definitions(-DHAVE_STRTONUM) -else() - set(OPENSSL_SRC ${OPENSSL_SRC} compat/strtonum.c) -endif() - if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - check_function_exists(clock_gettime HAVE_CLOCK_GETTIME) - if(NOT HAVE_CLOCK_GETTIME) - set(OPENSSL_SRC ${OPENSSL_SRC} compat/clock_gettime_osx.c) - endif() + check_function_exists(clock_gettime HAVE_CLOCK_GETTIME) + if(NOT HAVE_CLOCK_GETTIME) + set(OPENSSL_SRC ${OPENSSL_SRC} compat/clock_gettime_osx.c) + endif() endif() add_executable(openssl ${OPENSSL_SRC}) -target_include_directories(openssl PRIVATE . ../../include/compat) -target_link_libraries(openssl ${OPENSSL_LIBS}) +target_include_directories(openssl + PRIVATE + . + ../../include/compat + PUBLIC + ../../include + ${CMAKE_BINARY_DIR}/include) +target_link_libraries(openssl ${OPENSSL_LIBS} compat_obj) if(ENABLE_LIBRESSL_INSTALL) install(TARGETS openssl DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/apps/openssl/Makefile.am b/apps/openssl/Makefile.am index b98e08db1a..40804c506d 100644 --- a/apps/openssl/Makefile.am +++ b/apps/openssl/Makefile.am @@ -1,5 +1,23 @@ +# +# Copyright (c) 2015 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + include $(top_srcdir)/Makefile.am.common +-include $(abs_top_builddir)/crypto/libcrypto_la_objects.mk +-include $(abs_top_builddir)/ssl/libssl_la_objects.mk + if !ENABLE_LIBTLS_ONLY bin_PROGRAMS = openssl dist_man_MANS = openssl.1 @@ -7,8 +25,10 @@ else noinst_PROGRAMS = openssl endif -openssl_LDADD = $(abs_top_builddir)/ssl/libssl.la -openssl_LDADD += $(abs_top_builddir)/crypto/libcrypto.la +openssl_LDADD = $(libcrypto_la_objects) +openssl_LDADD += $(libcompat_la_objects) +openssl_LDADD += $(libcompatnoopt_la_objects) +openssl_LDADD += $(libssl_la_objects) openssl_LDADD += $(PLATFORM_LDADD) $(PROG_LDADD) openssl_SOURCES = apps.c @@ -31,7 +51,6 @@ openssl_SOURCES += gendh.c openssl_SOURCES += gendsa.c openssl_SOURCES += genpkey.c openssl_SOURCES += genrsa.c -openssl_SOURCES += nseq.c openssl_SOURCES += ocsp.c openssl_SOURCES += openssl.c openssl_SOURCES += passwd.c @@ -54,7 +73,6 @@ openssl_SOURCES += s_time.c openssl_SOURCES += sess_id.c openssl_SOURCES += smime.c openssl_SOURCES += speed.c -openssl_SOURCES += spkac.c openssl_SOURCES += ts.c openssl_SOURCES += verify.c openssl_SOURCES += version.c @@ -84,16 +102,7 @@ openssl_SOURCES += compat/clock_gettime_osx.c endif endif -if !HAVE_STRTONUM -openssl_SOURCES += compat/strtonum.c -endif - noinst_HEADERS = apps.h -noinst_HEADERS += progs.h -noinst_HEADERS += s_apps.h -noinst_HEADERS += testdsa.h -noinst_HEADERS += testrsa.h -noinst_HEADERS += timeouts.h EXTRA_DIST = CMakeLists.txt diff --git a/apps/openssl/compat/poll_win.c b/apps/openssl/compat/poll_win.c index c9422b9103..1e3021a9cc 100644 --- a/apps/openssl/compat/poll_win.c +++ b/apps/openssl/compat/poll_win.c @@ -152,6 +152,9 @@ wsa_select_errno(int err) case WSAENETDOWN: errno = ENOMEM; break; + default: + errno = EIO; + break; } return -1; } @@ -166,6 +169,7 @@ poll(struct pollfd *pfds, nfds_t nfds, int timeout_ms) * select machinery */ fd_set rfds, wfds, efds; + fd_set rfds_in, wfds_in, efds_in; int rc; int num_sockets; @@ -248,16 +252,37 @@ poll(struct pollfd *pfds, nfds_t nfds, int timeout_ms) timespent_ms = 0; wait_rc = WAIT_FAILED; - if (timeout_ms < 0) - timeout_ms = INFINITE; - looptime_ms = timeout_ms > 100 ? 100 : timeout_ms; + looptime_ms = (timeout_ms > 100 || timeout_ms == -1) ? 100 : timeout_ms; + + /* + * select() clears every descriptor that is not ready from the + * fd_sets, so a pass that times out leaves them empty. Keep a + * pristine copy and restore it before each select(), otherwise the + * next pass hands select() three empty sets and Windows fails it with + * WSAEINVAL instead of waiting out the remaining timeout. + */ + rfds_in = rfds; + wfds_in = wfds; + efds_in = efds; do { - struct timeval tv; + TIMEVAL tv; + + /* + * Cap the wait at the time remaining so the final pass + * does not overshoot the requested timeout. + */ + if (timeout_ms != -1 && timeout_ms - timespent_ms < looptime_ms) + looptime_ms = timeout_ms - timespent_ms; + tv.tv_sec = 0; tv.tv_usec = looptime_ms * 1000; int handle_signaled = 0; + rfds = rfds_in; + wfds = wfds_in; + efds = efds_in; + /* * Check if any file handles have signaled */ @@ -280,7 +305,7 @@ poll(struct pollfd *pfds, nfds_t nfds, int timeout_ms) /* * If we signaled on a file handle, don't wait on the sockets. */ - if (wait_rc >= WAIT_OBJECT_0 && + if (num_handles && wait_rc >= WAIT_OBJECT_0 && (wait_rc <= WAIT_OBJECT_0 + num_handles - 1)) { tv.tv_usec = 0; handle_signaled = 1; @@ -298,7 +323,7 @@ poll(struct pollfd *pfds, nfds_t nfds, int timeout_ms) timespent_ms += looptime_ms; - } while (timespent_ms < timeout_ms); + } while (timeout_ms == -1 || timespent_ms < timeout_ms); rc = 0; num_handles = 0; diff --git a/appveyor.yml b/appveyor.yml index 6c6ba16296..59238d76c0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -30,7 +30,7 @@ init: # update mysy2 - C:\msys64\usr\bin\bash -lc "pacman --needed --noconfirm -Sy pacman-mirrors" - C:\msys64\usr\bin\bash -lc "pacman --noconfirm -Syu" - - C:\msys64\usr\bin\bash -lc "pacman --noconfirm -Sy autoconf perl git" + - C:\msys64\usr\bin\bash -lc "pacman --noconfirm -Sy autoconf perl git automake libtool" before_build: - bash autogen.sh @@ -49,6 +49,5 @@ on_failure: - appveyor PushArtifact Testing.zip artifacts: - - path: build\Testing - name: Testing + - path: build type: zip diff --git a/check-release.sh b/check-release.sh index bdafa0840c..723a05118c 100755 --- a/check-release.sh +++ b/check-release.sh @@ -1,4 +1,19 @@ #!/bin/sh +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e ver=$1 @@ -26,7 +41,7 @@ if [ ! -e releases/$tarball ]; then mkdir -p releases rm -f $tarball if [ -z "$LIBRESSL_SSH" ]; then - $download http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/$tarball releases/ + $download https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/$tarball releases/ mv $tarball releases else scp $LIBRESSL_SSH/$tarball releases diff --git a/cmake_export_symbol.cmake b/cmake_export_symbol.cmake index 088300191c..9fe61f2c83 100644 --- a/cmake_export_symbol.cmake +++ b/cmake_export_symbol.cmake @@ -1,3 +1,18 @@ +# +# Copyright (c) 2017 Kinichiro Inoguchi +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + macro(export_symbol TARGET SYMBOLS_PATH) set(FLAG "") diff --git a/cmake_uninstall.cmake.in b/cmake_uninstall.cmake.in index bb8055d818..2887382e26 100644 --- a/cmake_uninstall.cmake.in +++ b/cmake_uninstall.cmake.in @@ -1,3 +1,18 @@ +# +# Copyright (c) 2016 Kinichiro Inoguchi +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") diff --git a/configure.ac b/configure.ac index fdf72eeb0c..7c6ac98034 100644 --- a/configure.ac +++ b/configure.ac @@ -1,3 +1,4 @@ +# # Copyright (c) 2014-2015 Brent Cook # # Permission to use, copy, modify, and distribute this software for any @@ -12,7 +13,7 @@ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -AC_INIT([libressl], m4_esyscmd([tr -d '\n' < VERSION])) +AC_INIT([libressl], m4_esyscmd(tr -d '\n' < VERSION)) AC_SUBST([LIBCRYPTO_VERSION], m4_esyscmd([tr -d '\n' < crypto/VERSION])) AC_SUBST([LIBSSL_VERSION], m4_esyscmd([tr -d '\n' < ssl/VERSION])) AC_SUBST([LIBTLS_VERSION], m4_esyscmd([tr -d '\n' < tls/VERSION])) @@ -25,12 +26,26 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) # This must be saved before AC_PROG_CC USER_CFLAGS="$CFLAGS" +USER_LDFLAGS="$LDFLAGS" AC_PROG_CC([cc gcc]) -AC_PROG_CC_STDC AM_PROG_CC_C_O LT_INIT([pic-only]) +AC_CHECK_PROGS([PERL], [perl perl5]) +AM_CONDITIONAL([HAVE_PERL], [test "x$PERL" != x]) +AC_CACHE_CHECK([for IO::Socket::SSL::Utils], + [ac_cv_perl_io_socket_ssl_utils], + [if test "x$PERL" = x; then + ac_cv_perl_io_socket_ssl_utils=no + elif "$PERL" -MIO::Socket::SSL::Utils -e 1 >/dev/null 2>&1; then + ac_cv_perl_io_socket_ssl_utils=yes + else + ac_cv_perl_io_socket_ssl_utils=no + fi]) +AM_CONDITIONAL([HAVE_PERL_IO_SOCKET_SSL_UTILS], + [test "x$ac_cv_perl_io_socket_ssl_utils" = xyes]) + CHECK_OS_OPTIONS CHECK_C_HARDENING_OPTIONS @@ -75,13 +90,30 @@ AC_ARG_ENABLE([tests], AM_CONDITIONAL([ENABLE_TESTS], [test "x$enable_tests" = xyes]) AS_CASE([$host_cpu], + [arm64], [host_cpu=aarch64], [*arm*], [host_cpu=arm], [*amd64*], [host_cpu=x86_64 HOSTARCH=intel], - [i?86], [HOSTARCH=intel], + [i?86], [host_cpu=i386 HOSTARCH=intel enable_asm=no], + [mips64*], [host_cpu=mips64 enable_asm=${enable_asm-no}], + [mips*], [host_cpu=mips enable_asm=${enable_asm-no}], + [powerpc*], [host_cpu=powerpc], + [ppc64*], [host_cpu=powerpc64], [x86_64], [HOSTARCH=intel] ) AM_CONDITIONAL([HOST_CPU_IS_INTEL], [test "x$HOSTARCH" = "xintel"]) +AM_CONDITIONAL([HOST_AARCH64], [test "$host_cpu" = "aarch64"]) +AM_CONDITIONAL([HOST_ARM], [test "$host_cpu" = "arm"]) +AM_CONDITIONAL([HOST_I386], [test "$host_cpu" = "i386"]) +AM_CONDITIONAL([HOST_LOONGARCH64], [test "$host_cpu" = "loongarch64"]) +AM_CONDITIONAL([HOST_MIPS], [test "$host_cpu" = "mips"]) +AM_CONDITIONAL([HOST_MIPS64], [test "$host_cpu" = "mips64"]) +AM_CONDITIONAL([HOST_POWERPC], [test "$host_cpu" = "powerpc"]) +AM_CONDITIONAL([HOST_POWERPC64], [test "$host_cpu" = "ppc64"]) +AM_CONDITIONAL([HOST_RISCV64], [test "$host_cpu" = "riscv64"]) +AM_CONDITIONAL([HOST_SPARC64], [test "$host_cpu" = "sparc64"]) +AM_CONDITIONAL([HOST_X86_64], [test "$host_cpu" = "x86_64"]) + AC_MSG_CHECKING([if .gnu.warning accepts long strings]) AC_LINK_IFELSE([AC_LANG_SOURCE([[ extern void SSLv3_method(); @@ -94,13 +126,18 @@ int main() {return 0;} AC_MSG_RESULT(no) ]) -AC_ARG_ENABLE([asm], - AS_HELP_STRING([--disable-asm], [Disable assembly])) +AC_ARG_ENABLE([asm], AS_HELP_STRING([--disable-asm], [Disable assembly])) AM_CONDITIONAL([OPENSSL_NO_ASM], [test "x$enable_asm" = "xno"]) # Conditionally enable assembly by default -AM_CONDITIONAL([HOST_ASM_ELF_ARM], - [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "arm" -a "x$enable_asm" != "xno"]) +AM_CONDITIONAL([HOST_ASM_ELF_AARCH64], + [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "aarch64" -a "x$enable_asm" != "xno"]) +AM_CONDITIONAL([HOST_ASM_ELF_MIPS], + [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "mips" -a "x$enable_asm" != "xno"]) +AM_CONDITIONAL([HOST_ASM_ELF_MIPS64], + [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "mips64" -a "x$enable_asm" != "xno"]) +AM_CONDITIONAL([HOST_ASM_ELF_RISCV64], + [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "riscv64" -a "x$enable_asm" != "xno"]) AM_CONDITIONAL([HOST_ASM_ELF_X86_64], [test "x$HOST_ABI" = "xelf" -a "$host_cpu" = "x86_64" -a "x$enable_asm" != "xno"]) AM_CONDITIONAL([HOST_ASM_MACOSX_X86_64], @@ -141,3 +178,7 @@ AM_CONDITIONAL([ENABLE_LIBTLS_ONLY], [test "x$enable_libtls_only" = xyes]) AC_REQUIRE_AUX_FILE([tap-driver.sh]) AC_OUTPUT + +if test "$HOST_OS" = "unsupported"; then + AC_MSG_WARN([unsupported platform: $host_os]) +fi diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index b1ded85bdb..0698ab44ce 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -1,292 +1,244 @@ -if(HOST_ASM_ELF_ARMV4) +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +add_definitions(-DLIBRESSL_CRYPTO_INTERNAL) + +if(HOST_ASM_ELF_AARCH64) + set(CRYPTO_SRC ${CRYPTO_SRC} sha/sha1_aarch64.c sha/sha256_aarch64.c sha/sha512_aarch64.c) + set( - ASM_ARMV4_ELF_SRC - aes/aes-elf-armv4.S - bn/gf2m-elf-armv4.S - bn/mont-elf-armv4.S - sha/sha1-elf-armv4.S - sha/sha512-elf-armv4.S - sha/sha256-elf-armv4.S - modes/ghash-elf-armv4.S - armv4cpuid.S - armcap.c + ASM_AARCH64_ELF_SRC + sha/sha1_aarch64_ce.S + sha/sha256_aarch64_ce.S + sha/sha512_aarch64_ce.S ) - add_definitions(-DAES_ASM) - add_definitions(-DOPENSSL_BN_ASM_MONT) - add_definitions(-DOPENSSL_BN_ASM_GF2m) - add_definitions(-DGHASH_ASM) - add_definitions(-DSHA1_ASM) - add_definitions(-DSHA256_ASM) - add_definitions(-DSHA512_ASM) - add_definitions(-DOPENSSL_CPUID_OBJ) - set_property(SOURCE ${ASM_ARMV4_ELF_SRC} PROPERTY LANGUAGE C) - set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_ARMV4_ELF_SRC}) + add_definitions(-DLIBRESSL_USE_SHA_ASSEMBLY) + set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_AARCH64_ELF_SRC}) endif() if(HOST_ASM_ELF_X86_64) + set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c) + set(CRYPTO_SRC ${CRYPTO_SRC} bn/arch/amd64/bn_arch.c) + set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c) + set(CRYPTO_SRC ${CRYPTO_SRC} sha/sha1_amd64.c sha/sha256_amd64.c sha/sha512_amd64.c) + set( ASM_X86_64_ELF_SRC aes/aes-elf-x86_64.S - aes/bsaes-elf-x86_64.S - aes/vpaes-elf-x86_64.S aes/aesni-elf-x86_64.S - aes/aesni-sha1-elf-x86_64.S bn/modexp512-elf-x86_64.S bn/mont-elf-x86_64.S bn/mont5-elf-x86_64.S - bn/gf2m-elf-x86_64.S - camellia/cmll-elf-x86_64.S - md5/md5-elf-x86_64.S modes/ghash-elf-x86_64.S rc4/rc4-elf-x86_64.S - rc4/rc4-md5-elf-x86_64.S - sha/sha1-elf-x86_64.S - sha/sha256-elf-x86_64.S - sha/sha512-elf-x86_64.S - whrlpool/wp-elf-x86_64.S - cpuid-elf-x86_64.S + + bn/arch/amd64/bignum_add.S + bn/arch/amd64/bignum_cmadd.S + bn/arch/amd64/bignum_cmul.S + bn/arch/amd64/bignum_modadd.S + bn/arch/amd64/bignum_modsub.S + bn/arch/amd64/bignum_mul.S + bn/arch/amd64/bignum_mul_4_8.S + bn/arch/amd64/bignum_mul_4_8_alt.S + bn/arch/amd64/bignum_mul_6_12.S + bn/arch/amd64/bignum_mul_6_12_alt.S + bn/arch/amd64/bignum_mul_8_16.S + bn/arch/amd64/bignum_mul_8_16_alt.S + bn/arch/amd64/bignum_sqr.S + bn/arch/amd64/bignum_sqr_4_8.S + bn/arch/amd64/bignum_sqr_4_8_alt.S + bn/arch/amd64/bignum_sqr_6_12.S + bn/arch/amd64/bignum_sqr_6_12_alt.S + bn/arch/amd64/bignum_sqr_8_16.S + bn/arch/amd64/bignum_sqr_8_16_alt.S + bn/arch/amd64/bignum_sub.S + bn/arch/amd64/word_clz.S + + sha/sha1_amd64_shani.S + sha/sha1_amd64_generic.S + sha/sha256_amd64_generic.S + sha/sha256_amd64_shani.S + sha/sha512_amd64_generic.S ) - add_definitions(-DAES_ASM) - add_definitions(-DBSAES_ASM) - add_definitions(-DVPAES_ASM) - add_definitions(-DOPENSSL_IA32_SSE2) + add_definitions(-DLIBRESSL_USE_AES_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_BN_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_GCM_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_RC4_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_SHA_ASSEMBLY) add_definitions(-DOPENSSL_BN_ASM_MONT) add_definitions(-DOPENSSL_BN_ASM_MONT5) - add_definitions(-DOPENSSL_BN_ASM_GF2m) - add_definitions(-DMD5_ASM) - add_definitions(-DGHASH_ASM) - add_definitions(-DRSA_ASM) - add_definitions(-DSHA1_ASM) - add_definitions(-DSHA256_ASM) - add_definitions(-DSHA512_ASM) - add_definitions(-DWHIRLPOOL_ASM) - add_definitions(-DOPENSSL_CPUID_OBJ) set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_X86_64_ELF_SRC}) - set_property(SOURCE ${ASM_X86_64_ELF_SRC} PROPERTY LANGUAGE C) endif() if(HOST_ASM_MACOSX_X86_64) + set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c) + set(CRYPTO_SRC ${CRYPTO_SRC} bn/arch/amd64/bn_arch.c) + set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c) + set( ASM_X86_64_MACOSX_SRC aes/aes-macosx-x86_64.S - aes/bsaes-macosx-x86_64.S - aes/vpaes-macosx-x86_64.S aes/aesni-macosx-x86_64.S - aes/aesni-sha1-macosx-x86_64.S bn/modexp512-macosx-x86_64.S bn/mont-macosx-x86_64.S bn/mont5-macosx-x86_64.S - bn/gf2m-macosx-x86_64.S - camellia/cmll-macosx-x86_64.S - md5/md5-macosx-x86_64.S modes/ghash-macosx-x86_64.S rc4/rc4-macosx-x86_64.S - rc4/rc4-md5-macosx-x86_64.S - sha/sha1-macosx-x86_64.S - sha/sha256-macosx-x86_64.S - sha/sha512-macosx-x86_64.S - whrlpool/wp-macosx-x86_64.S - cpuid-macosx-x86_64.S + + bn/arch/amd64/bignum_add.S + bn/arch/amd64/bignum_cmadd.S + bn/arch/amd64/bignum_cmul.S + bn/arch/amd64/bignum_modadd.S + bn/arch/amd64/bignum_modsub.S + bn/arch/amd64/bignum_mul.S + bn/arch/amd64/bignum_mul_4_8.S + bn/arch/amd64/bignum_mul_4_8_alt.S + bn/arch/amd64/bignum_mul_6_12.S + bn/arch/amd64/bignum_mul_6_12_alt.S + bn/arch/amd64/bignum_mul_8_16.S + bn/arch/amd64/bignum_mul_8_16_alt.S + bn/arch/amd64/bignum_sqr.S + bn/arch/amd64/bignum_sqr_4_8.S + bn/arch/amd64/bignum_sqr_4_8_alt.S + bn/arch/amd64/bignum_sqr_6_12.S + bn/arch/amd64/bignum_sqr_6_12_alt.S + bn/arch/amd64/bignum_sqr_8_16.S + bn/arch/amd64/bignum_sqr_8_16_alt.S + bn/arch/amd64/bignum_sub.S + bn/arch/amd64/word_clz.S ) - add_definitions(-DAES_ASM) - add_definitions(-DBSAES_ASM) - add_definitions(-DVPAES_ASM) - add_definitions(-DOPENSSL_IA32_SSE2) + add_definitions(-DLIBRESSL_USE_AES_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_BN_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_GCM_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_RC4_ASSEMBLY) add_definitions(-DOPENSSL_BN_ASM_MONT) add_definitions(-DOPENSSL_BN_ASM_MONT5) - add_definitions(-DOPENSSL_BN_ASM_GF2m) - add_definitions(-DMD5_ASM) - add_definitions(-DGHASH_ASM) - add_definitions(-DRSA_ASM) - add_definitions(-DSHA1_ASM) - add_definitions(-DSHA256_ASM) - add_definitions(-DSHA512_ASM) - add_definitions(-DWHIRLPOOL_ASM) - add_definitions(-DOPENSSL_CPUID_OBJ) set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_X86_64_MACOSX_SRC}) - set_property(SOURCE ${ASM_X86_64_MACOSX_SRC} PROPERTY LANGUAGE C) set_property(SOURCE ${ASM_X86_64_MACOSX_SRC} PROPERTY XCODE_EXPLICIT_FILE_TYPE "sourcecode.asm") endif() if(HOST_ASM_MASM_X86_64) + set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c) + set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c) + set( ASM_X86_64_MASM_SRC aes/aes-masm-x86_64.S - aes/bsaes-masm-x86_64.S - aes/vpaes-masm-x86_64.S aes/aesni-masm-x86_64.S - aes/aesni-sha1-masm-x86_64.S #bn/modexp512-masm-x86_64.S #bn/mont-masm-x86_64.S #bn/mont5-masm-x86_64.S - #bn/gf2m-masm-x86_64.S - camellia/cmll-masm-x86_64.S - md5/md5-masm-x86_64.S modes/ghash-masm-x86_64.S rc4/rc4-masm-x86_64.S - rc4/rc4-md5-masm-x86_64.S - sha/sha1-masm-x86_64.S - sha/sha256-masm-x86_64.S - sha/sha512-masm-x86_64.S - whrlpool/wp-masm-x86_64.S - cpuid-masm-x86_64.S ) - add_definitions(-DAES_ASM) - add_definitions(-DBSAES_ASM) - add_definitions(-DVPAES_ASM) - add_definitions(-DOPENSSL_IA32_SSE2) + add_definitions(-Dendbr64=) + add_definitions(-DLIBRESSL_USE_AES_ASSEMBLY) + #add_definitions(-DLIBRESSL_USE_BN_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_GCM_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_RC4_ASSEMBLY) #add_definitions(-DOPENSSL_BN_ASM_MONT) #add_definitions(-DOPENSSL_BN_ASM_MONT5) - #add_definitions(-DOPENSSL_BN_ASM_GF2m) - add_definitions(-DMD5_ASM) - add_definitions(-DGHASH_ASM) - add_definitions(-DRSA_ASM) - add_definitions(-DSHA1_ASM) - add_definitions(-DSHA256_ASM) - add_definitions(-DSHA512_ASM) - add_definitions(-DWHIRLPOOL_ASM) - add_definitions(-DOPENSSL_CPUID_OBJ) set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_X86_64_MASM_SRC}) set_property(SOURCE ${ASM_X86_64_MASM_SRC} PROPERTY LANGUAGE ASM_MASM) endif() if(HOST_ASM_MINGW64_X86_64) + set(CRYPTO_SRC ${CRYPTO_SRC} aes/aes_amd64.c) + set(CRYPTO_SRC ${CRYPTO_SRC} modes/gcm128_amd64.c) + set( ASM_X86_64_MINGW64_SRC aes/aes-mingw64-x86_64.S - aes/bsaes-mingw64-x86_64.S - aes/vpaes-mingw64-x86_64.S aes/aesni-mingw64-x86_64.S - aes/aesni-sha1-mingw64-x86_64.S #bn/modexp512-mingw64-x86_64.S #bn/mont-mingw64-x86_64.S #bn/mont5-mingw64-x86_64.S - #bn/gf2m-mingw64-x86_64.S - camellia/cmll-mingw64-x86_64.S - md5/md5-mingw64-x86_64.S modes/ghash-mingw64-x86_64.S rc4/rc4-mingw64-x86_64.S - rc4/rc4-md5-mingw64-x86_64.S - sha/sha1-mingw64-x86_64.S - sha/sha256-mingw64-x86_64.S - sha/sha512-mingw64-x86_64.S - whrlpool/wp-mingw64-x86_64.S - cpuid-mingw64-x86_64.S ) - add_definitions(-DAES_ASM) - add_definitions(-DBSAES_ASM) - add_definitions(-DVPAES_ASM) - add_definitions(-DOPENSSL_IA32_SSE2) + add_definitions(-Dendbr32=endbr64) + add_definitions(-DLIBRESSL_USE_AES_ASSEMBLY) + #add_definitions(-DLIBRESSL_USE_BN_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_GCM_ASSEMBLY) + add_definitions(-DLIBRESSL_USE_RC4_ASSEMBLY) #add_definitions(-DOPENSSL_BN_ASM_MONT) #add_definitions(-DOPENSSL_BN_ASM_MONT5) - #add_definitions(-DOPENSSL_BN_ASM_GF2m) - add_definitions(-DMD5_ASM) - add_definitions(-DGHASH_ASM) - add_definitions(-DRSA_ASM) - add_definitions(-DSHA1_ASM) - add_definitions(-DSHA256_ASM) - add_definitions(-DSHA512_ASM) - add_definitions(-DWHIRLPOOL_ASM) - add_definitions(-DOPENSSL_CPUID_OBJ) set(CRYPTO_SRC ${CRYPTO_SRC} ${ASM_X86_64_MINGW64_SRC}) - set_property(SOURCE ${ASM_X86_64_MINGW64_SRC} PROPERTY LANGUAGE C) endif() -if((NOT HOST_ASM_ELF_X86_64) AND - (NOT HOST_ASM_MACOSX_X86_64) AND - (NOT HOST_ASM_MASM_X86_64) AND - (NOT HOST_ASM_MINGW64_X86_64) AND - (NOT HOST_ASM_ELF_ARMV4)) - set( - CRYPTO_SRC - ${CRYPTO_SRC} - aes/aes_core.c - ) -endif() - -if((NOT HOST_ASM_ELF_X86_64) AND - (NOT HOST_ASM_MACOSX_X86_64) AND - (NOT HOST_ASM_MASM_X86_64) AND - (NOT HOST_ASM_MINGW64_X86_64)) - set( - CRYPTO_SRC - ${CRYPTO_SRC} - aes/aes_cbc.c - camellia/camellia.c - camellia/cmll_cbc.c - rc4/rc4_enc.c - rc4/rc4_skey.c - whrlpool/wp_block.c - ) +if(HOST_AARCH64) + if(APPLE) + set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_darwin.c) + elseif(LINUX) + set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_linux.c) + elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") + set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps.c) + elseif(WIN32) + set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_windows.c) + else() + set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_none.c) + endif() +elseif(HOST_X86_64) + set(CRYPTO_SRC ${CRYPTO_SRC} arch/amd64/crypto_cpu_caps.c) +elseif(HOST_I386) + set(CRYPTO_SRC ${CRYPTO_SRC} arch/i386/crypto_cpu_caps.c) endif() set( CRYPTO_SRC ${CRYPTO_SRC} - cpt_err.c - cryptlib.c + crypto_err.c + crypto_ex_data.c crypto_init.c - cversion.c - ex_data.c - malloc-wrapper.c - mem_clr.c - mem_dbg.c - o_init.c - o_str.c - o_time.c - aes/aes_cfb.c - aes/aes_ctr.c - aes/aes_ecb.c - aes/aes_ige.c - aes/aes_misc.c - aes/aes_ofb.c - aes/aes_wrap.c + crypto_legacy.c + crypto_memory.c + aes/aes.c + aes/aes_core.c asn1/a_bitstr.c - asn1/a_bool.c - asn1/a_d2i_fp.c - asn1/a_digest.c - asn1/a_dup.c asn1/a_enum.c - asn1/a_i2d_fp.c asn1/a_int.c asn1/a_mbstr.c asn1/a_object.c asn1/a_octet.c + asn1/a_pkey.c asn1/a_print.c - asn1/a_sign.c + asn1/a_pubkey.c asn1/a_strex.c + asn1/a_string.c asn1/a_strnid.c asn1/a_time.c + asn1/a_time_posix.c asn1/a_time_tm.c asn1/a_type.c asn1/a_utf8.c - asn1/a_verify.c - asn1/ameth_lib.c asn1/asn1_err.c asn1/asn1_gen.c + asn1/asn1_item.c asn1/asn1_lib.c + asn1/asn1_old.c + asn1/asn1_old_lib.c asn1/asn1_par.c + asn1/asn1_types.c asn1/asn_mime.c asn1/asn_moid.c - asn1/asn_pack.c asn1/bio_asn1.c asn1/bio_ndef.c - asn1/d2i_pr.c - asn1/d2i_pu.c - asn1/evp_asn1.c - asn1/f_enum.c - asn1/f_int.c - asn1/f_string.c - asn1/i2d_pr.c - asn1/i2d_pu.c - asn1/n_pkey.c - asn1/nsseq.c asn1/p5_pbe.c asn1/p5_pbev2.c asn1/p8_pkey.c - asn1/t_bitst.c asn1/t_crl.c - asn1/t_pkey.c asn1/t_req.c asn1/t_spki.c asn1/t_x509.c @@ -303,11 +255,8 @@ set( asn1/x_bignum.c asn1/x_crl.c asn1/x_exten.c - asn1/x_info.c asn1/x_long.c asn1/x_name.c - asn1/x_nx509.c - asn1/x_pkey.c asn1/x_pubkey.c asn1/x_req.c asn1/x_sig.c @@ -315,11 +264,7 @@ set( asn1/x_val.c asn1/x_x509.c asn1/x_x509a.c - bf/bf_cfb64.c - bf/bf_ecb.c - bf/bf_enc.c - bf/bf_ofb64.c - bf/bf_skey.c + bf/blowfish.c bio/b_dump.c bio/b_print.c bio/b_sock.c @@ -340,53 +285,45 @@ set( bio/bss_null.c bio/bss_sock.c bn/bn_add.c - bn/bn_asm.c - bn/bn_blind.c + bn/bn_add_sub.c + bn/bn_bpsw.c bn/bn_const.c + bn/bn_convert.c bn/bn_ctx.c - bn/bn_depr.c bn/bn_div.c bn/bn_err.c bn/bn_exp.c - bn/bn_exp2.c bn/bn_gcd.c - bn/bn_gf2m.c + bn/bn_isqrt.c bn/bn_kron.c bn/bn_lib.c bn/bn_mod.c + bn/bn_mod_sqrt.c + bn/bn_mod_words.c bn/bn_mont.c - bn/bn_mpi.c bn/bn_mul.c - bn/bn_nist.c bn/bn_prime.c + bn/bn_primitives.c bn/bn_print.c bn/bn_rand.c bn/bn_recp.c bn/bn_shift.c + bn/bn_small_primes.c bn/bn_sqr.c - bn/bn_sqrt.c bn/bn_word.c - bn/bn_x931p.c buffer/buf_err.c - buffer/buf_str.c buffer/buffer.c - camellia/cmll_cfb.c - camellia/cmll_ctr.c - camellia/cmll_ecb.c - camellia/cmll_misc.c - camellia/cmll_ofb.c - cast/c_cfb64.c - cast/c_ecb.c - cast/c_enc.c - cast/c_ofb64.c - cast/c_skey.c + bytestring/bs_ber.c + bytestring/bs_cbb.c + bytestring/bs_cbs.c + camellia/camellia.c + cast/cast.c chacha/chacha.c cmac/cm_ameth.c cmac/cm_pmeth.c cmac/cmac.c cms/cms_asn1.c cms/cms_att.c - cms/cms_cd.c cms/cms_dd.c cms/cms_enc.c cms/cms_env.c @@ -398,54 +335,39 @@ set( cms/cms_pwri.c cms/cms_sd.c cms/cms_smime.c - comp/c_rle.c - comp/c_zlib.c - comp/comp_err.c - comp/comp_lib.c conf/conf_api.c conf/conf_def.c conf/conf_err.c conf/conf_lib.c - conf/conf_mall.c conf/conf_mod.c conf/conf_sap.c + ct/ct_b64.c + ct/ct_err.c + ct/ct_log.c + ct/ct_oct.c + ct/ct_policy.c + ct/ct_prn.c + ct/ct_sct.c + ct/ct_sct_ctx.c + ct/ct_vfy.c + ct/ct_x509v3.c curve25519/curve25519-generic.c curve25519/curve25519.c - des/cbc_cksm.c - des/cbc_enc.c - des/cfb64ede.c - des/cfb64enc.c - des/cfb_enc.c + des/des.c + des/des_cksum.c des/des_enc.c - des/ecb3_enc.c - des/ecb_enc.c - des/ede_cbcm_enc.c - des/enc_read.c - des/enc_writ.c - des/fcrypt.c - des/fcrypt_b.c - des/ofb64ede.c - des/ofb64enc.c - des/ofb_enc.c - des/pcbc_enc.c - des/qud_cksm.c - des/rand_key.c - des/set_key.c - des/str2key.c - des/xcbc_enc.c + des/des_fcrypt.c + des/des_key.c dh/dh_ameth.c dh/dh_asn1.c dh/dh_check.c - dh/dh_depr.c dh/dh_err.c dh/dh_gen.c dh/dh_key.c dh/dh_lib.c dh/dh_pmeth.c - dh/dh_prn.c dsa/dsa_ameth.c dsa/dsa_asn1.c - dsa/dsa_depr.c dsa/dsa_err.c dsa/dsa_gen.c dsa/dsa_key.c @@ -454,78 +376,30 @@ set( dsa/dsa_ossl.c dsa/dsa_pmeth.c dsa/dsa_prn.c - dsa/dsa_sign.c - dsa/dsa_vrf.c - dso/dso_dlfcn.c - dso/dso_err.c - dso/dso_lib.c - dso/dso_null.c - dso/dso_openssl.c - ec/ec2_mult.c - ec/ec2_oct.c - ec/ec2_smpl.c ec/ec_ameth.c ec/ec_asn1.c - ec/ec_check.c + ec/ec_convert.c ec/ec_curve.c - ec/ec_cvt.c ec/ec_err.c + ec/ec_field.c ec/ec_key.c - ec/ec_kmeth.c ec/ec_lib.c ec/ec_mult.c - ec/ec_oct.c ec/ec_pmeth.c - ec/ec_print.c ec/eck_prn.c - ec/ecp_mont.c - ec/ecp_nist.c - ec/ecp_oct.c - ec/ecp_smpl.c - ecdh/ecdh_kdf.c - ecdh/ech_err.c - ecdh/ech_key.c - ecdh/ech_lib.c - ecdsa/ecs_asn1.c - ecdsa/ecs_err.c - ecdsa/ecs_lib.c - ecdsa/ecs_ossl.c - ecdsa/ecs_sign.c - ecdsa/ecs_vrf.c - engine/eng_all.c - engine/eng_cnf.c - engine/eng_ctrl.c - engine/eng_dyn.c - engine/eng_err.c - engine/eng_fat.c - engine/eng_init.c - engine/eng_lib.c - engine/eng_list.c - engine/eng_openssl.c - engine/eng_pkey.c - engine/eng_table.c - engine/tb_asnmth.c - engine/tb_cipher.c - engine/tb_dh.c - engine/tb_digest.c - engine/tb_dsa.c - engine/tb_ecdh.c - engine/tb_ecdsa.c - engine/tb_eckey.c - engine/tb_pkmeth.c - engine/tb_rand.c - engine/tb_rsa.c - engine/tb_store.c + ec/ecp_hp_methods.c + ec/ecp_methods.c + ec/ecx_methods.c + ecdh/ecdh.c + ecdsa/ecdsa.c + engine/engine_stubs.c err/err.c err/err_all.c err/err_prn.c evp/bio_b64.c evp/bio_enc.c evp/bio_md.c - evp/c_all.c - evp/digest.c evp/e_aes.c - evp/e_aes_cbc_hmac_sha1.c evp/e_bf.c evp/e_camellia.c evp/e_cast.c @@ -533,89 +407,58 @@ set( evp/e_chacha20poly1305.c evp/e_des.c evp/e_des3.c - evp/e_gost2814789.c evp/e_idea.c evp/e_null.c - evp/e_old.c evp/e_rc2.c evp/e_rc4.c - evp/e_rc4_hmac_md5.c evp/e_sm4.c evp/e_xcbc_d.c - evp/encode.c evp/evp_aead.c - evp/evp_enc.c + evp/evp_cipher.c + evp/evp_digest.c + evp/evp_encode.c evp/evp_err.c evp/evp_key.c - evp/evp_lib.c + evp/evp_names.c evp/evp_pbe.c evp/evp_pkey.c - evp/m_dss.c - evp/m_dss1.c - evp/m_ecdsa.c - evp/m_gost2814789.c - evp/m_gostr341194.c evp/m_md4.c evp/m_md5.c evp/m_md5_sha1.c evp/m_null.c evp/m_ripemd.c evp/m_sha1.c + evp/m_sha3.c evp/m_sigver.c - evp/m_streebog.c evp/m_sm3.c - evp/m_wp.c - evp/names.c - evp/p5_crpt.c - evp/p5_crpt2.c - evp/p_dec.c - evp/p_enc.c + evp/p_legacy.c evp/p_lib.c - evp/p_open.c - evp/p_seal.c evp/p_sign.c evp/p_verify.c evp/pmeth_fn.c evp/pmeth_gn.c evp/pmeth_lib.c - gost/gost2814789.c - gost/gost89_keywrap.c - gost/gost89_params.c - gost/gost89imit_ameth.c - gost/gost89imit_pmeth.c - gost/gost_asn1.c - gost/gost_err.c - gost/gostr341001.c - gost/gostr341001_ameth.c - gost/gostr341001_key.c - gost/gostr341001_params.c - gost/gostr341001_pmeth.c - gost/gostr341194.c - gost/streebog.c hkdf/hkdf.c hmac/hm_ameth.c hmac/hm_pmeth.c hmac/hmac.c - idea/i_cbc.c - idea/i_cfb64.c - idea/i_ecb.c - idea/i_ofb64.c - idea/i_skey.c - lhash/lh_stats.c + idea/idea.c + kdf/hkdf_evp.c + kdf/kdf_err.c + kdf/tls1_prf.c lhash/lhash.c - md4/md4_dgst.c - md4/md4_one.c - md5/md5_dgst.c - md5/md5_one.c + md4/md4.c + md5/md5.c + mlkem/mlkem.c + mlkem/mlkem_internal.c + mlkem/mlkem_key.c modes/cbc128.c modes/ccm128.c modes/cfb128.c modes/ctr128.c - modes/cts128.c modes/gcm128.c modes/ofb128.c modes/xts128.c - objects/o_names.c objects/obj_dat.c objects/obj_err.c objects/obj_lib.c @@ -636,7 +479,6 @@ set( pem/pem_oth.c pem/pem_pk8.c pem/pem_pkey.c - pem/pem_seal.c pem/pem_sign.c pem/pem_x509.c pem/pem_xaux.c @@ -644,7 +486,6 @@ set( pkcs12/p12_add.c pkcs12/p12_asn.c pkcs12/p12_attr.c - pkcs12/p12_crpt.c pkcs12/p12_crt.c pkcs12/p12_decr.c pkcs12/p12_init.c @@ -654,9 +495,9 @@ set( pkcs12/p12_npas.c pkcs12/p12_p8d.c pkcs12/p12_p8e.c + pkcs12/p12_sbag.c pkcs12/p12_utl.c pkcs12/pk12err.c - pkcs7/bio_pk7.c pkcs7/pk7_asn1.c pkcs7/pk7_attr.c pkcs7/pk7_doit.c @@ -668,18 +509,13 @@ set( rand/rand_err.c rand/rand_lib.c rand/randfile.c - rc2/rc2_cbc.c - rc2/rc2_ecb.c - rc2/rc2_skey.c - rc2/rc2cfb64.c - rc2/rc2ofb64.c - ripemd/rmd_dgst.c - ripemd/rmd_one.c + rc2/rc2.c + rc4/rc4.c + ripemd/ripemd.c rsa/rsa_ameth.c rsa/rsa_asn1.c + rsa/rsa_blinding.c rsa/rsa_chk.c - rsa/rsa_crpt.c - rsa/rsa_depr.c rsa/rsa_eay.c rsa/rsa_err.c rsa/rsa_gen.c @@ -694,9 +530,9 @@ set( rsa/rsa_saos.c rsa/rsa_sign.c rsa/rsa_x931.c - sha/sha1_one.c - sha/sha1dgst.c + sha/sha1.c sha/sha256.c + sha/sha3.c sha/sha512.c sm3/sm3.c sm4/sm4.c @@ -715,20 +551,15 @@ set( txt_db/txt_db.c ui/ui_err.c ui/ui_lib.c - ui/ui_util.c - whrlpool/wp_dgst.c + ui/ui_null.c x509/by_dir.c x509/by_file.c x509/by_mem.c - x509/pcy_cache.c - x509/pcy_data.c - x509/pcy_lib.c - x509/pcy_map.c - x509/pcy_node.c - x509/pcy_tree.c + x509/x509_addr.c x509/x509_akey.c x509/x509_akeya.c x509/x509_alt.c + x509/x509_asid.c x509/x509_att.c x509/x509_bcons.c x509/x509_bitst.c @@ -739,7 +570,6 @@ set( x509/x509_crld.c x509/x509_d2.c x509/x509_def.c - x509/x509_enum.c x509/x509_err.c x509/x509_ext.c x509/x509_extku.c @@ -753,18 +583,17 @@ set( x509/x509_ncons.c x509/x509_obj.c x509/x509_ocsp.c - x509/x509_pci.c - x509/x509_pcia.c x509/x509_pcons.c x509/x509_pku.c x509/x509_pmaps.c + x509/x509_policy.c x509/x509_prn.c x509/x509_purp.c x509/x509_r2x.c x509/x509_req.c x509/x509_set.c + x509/x509_siginfo.c x509/x509_skey.c - x509/x509_sxnet.c x509/x509_trs.c x509/x509_txt.c x509/x509_utl.c @@ -780,157 +609,139 @@ set( x509/x_all.c ) +set(COMPAT_SRC empty.c) + +set(CRYPTO_UNEXPORT ${CRYPTO_UNEXPORT} BIO_s_log) + if(UNIX) set(CRYPTO_SRC ${CRYPTO_SRC} crypto_lock.c) set(CRYPTO_SRC ${CRYPTO_SRC} bio/b_posix.c) - set(CRYPTO_SRC ${CRYPTO_SRC} bio/bss_log.c) set(CRYPTO_SRC ${CRYPTO_SRC} ui/ui_openssl.c) endif() if(WIN32) set(CRYPTO_SRC ${CRYPTO_SRC} compat/crypto_lock_win.c) set(CRYPTO_SRC ${CRYPTO_SRC} bio/b_win.c) - set(CRYPTO_UNEXPORT ${CRYPTO_UNEXPORT} BIO_s_log) set(CRYPTO_SRC ${CRYPTO_SRC} ui/ui_openssl_win.c) endif() if(WIN32) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/posix_win.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} gettimeofday) - set(EXTRA_EXPORT ${EXTRA_EXPORT} getuid) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_perror) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_fopen) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_fgets) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_open) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_rename) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_connect) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_close) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_read) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_write) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_getsockopt) - set(EXTRA_EXPORT ${EXTRA_EXPORT} posix_setsockopt) + set(COMPAT_SRC ${COMPAT_SRC} compat/posix_win.c) endif() if(NOT HAVE_ASPRINTF) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/bsd-asprintf.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} asprintf) - set(EXTRA_EXPORT ${EXTRA_EXPORT} vasprintf) + set(COMPAT_SRC ${COMPAT_SRC} compat/bsd-asprintf.c) endif() if(NOT HAVE_FREEZERO) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/freezero.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} freezero) + set(COMPAT_SRC ${COMPAT_SRC} compat/freezero.c) +endif() + +if(NOT HAVE_GETDELIM) + set(COMPAT_SRC ${COMPAT_SRC} compat/getdelim.c) +endif() + +if(NOT HAVE_GETLINE) + set(COMPAT_SRC ${COMPAT_SRC} compat/getline.c) +endif() + +if(NOT HAVE_GETOPT) + set(COMPAT_SRC ${COMPAT_SRC} compat/getopt_long.c) endif() if(NOT HAVE_GETPAGESIZE) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getpagesize.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getpagesize.c) endif() if(NOT HAVE_GETPROGNAME) if(WIN32) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getprogname_windows.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getprogname_windows.c) elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getprogname_linux.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getprogname_linux.c) else() - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getprogname_unimpl.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getprogname_unimpl.c) endif() endif() if(NOT HAVE_REALLOCARRAY) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/reallocarray.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} reallocarray) + set(COMPAT_SRC ${COMPAT_SRC} compat/reallocarray.c) endif() if(NOT HAVE_RECALLOCARRAY) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/recallocarray.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} recallocarray) + set(COMPAT_SRC ${COMPAT_SRC} compat/recallocarray.c) endif() if(NOT HAVE_STRCASECMP) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/strcasecmp.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strcasecmp) + set(COMPAT_SRC ${COMPAT_SRC} compat/strcasecmp.c) endif() if(NOT HAVE_STRLCAT) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/strlcat.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strlcat) + set(COMPAT_SRC ${COMPAT_SRC} compat/strlcat.c) endif() if(NOT HAVE_STRLCPY) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/strlcpy.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strlcpy) + set(COMPAT_SRC ${COMPAT_SRC} compat/strlcpy.c) endif() if(NOT HAVE_STRNDUP) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/strndup.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strndup) + set(COMPAT_SRC ${COMPAT_SRC} compat/strndup.c) if(NOT HAVE_STRNLEN) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/strnlen.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strnlen) + set(COMPAT_SRC ${COMPAT_SRC} compat/strnlen.c) endif() endif() if(NOT HAVE_STRSEP) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/strsep.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strsep) + set(COMPAT_SRC ${COMPAT_SRC} compat/strsep.c) endif() -if(NOT HAVE_SYSLOG_R) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/syslog_r.c) +if(NOT HAVE_STRTONUM) + set(COMPAT_SRC ${COMPAT_SRC} compat/strtonum.c) endif() -if(NOT HAVE_TIMEGM) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/timegm.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} timegm) +if(NOT HAVE_SYSLOG_R) + set(COMPAT_SRC ${COMPAT_SRC} compat/syslog_r.c) endif() if(NOT HAVE_EXPLICIT_BZERO) if(WIN32) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/explicit_bzero_win.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/explicit_bzero_win.c) else() - set(CRYPTO_SRC ${CRYPTO_SRC} compat/explicit_bzero.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/explicit_bzero.c) set_source_files_properties(compat/explicit_bzero.c PROPERTIES COMPILE_FLAGS -O0) endif() - set(EXTRA_EXPORT ${EXTRA_EXPORT} explicit_bzero) endif() if(NOT HAVE_ARC4RANDOM_BUF) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/arc4random.c) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/arc4random_uniform.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} arc4random) - set(EXTRA_EXPORT ${EXTRA_EXPORT} arc4random_buf) - set(EXTRA_EXPORT ${EXTRA_EXPORT} arc4random_uniform) + set(COMPAT_SRC ${COMPAT_SRC} compat/arc4random.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/arc4random_uniform.c) if(NOT HAVE_GETENTROPY) if(WIN32) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_win.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getentropy_win.c) elseif(CMAKE_SYSTEM_NAME MATCHES "AIX") - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_aix.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getentropy_aix.c) elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_freebsd.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getentropy_freebsd.c) elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX") - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_hpux.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getentropy_hpux.c) elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_linux.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getentropy_linux.c) elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_netbsd.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getentropy_netbsd.c) elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_osx.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getentropy_osx.c) elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") - set(CRYPTO_SRC ${CRYPTO_SRC} compat/getentropy_solaris.c) + set(COMPAT_SRC ${COMPAT_SRC} compat/getentropy_solaris.c) endif() - set(EXTRA_EXPORT ${EXTRA_EXPORT} getentropy) endif() endif() if(NOT HAVE_TIMINGSAFE_BCMP) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_bcmp.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} timingsafe_bcmp) + set(COMPAT_SRC ${COMPAT_SRC} compat/timingsafe_bcmp.c) endif() if(NOT HAVE_TIMINGSAFE_MEMCMP) - set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_memcmp.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} timingsafe_memcmp) + set(COMPAT_SRC ${COMPAT_SRC} compat/timingsafe_memcmp.c) endif() if(NOT ENABLE_ASM) @@ -941,77 +752,139 @@ else() (NOT "${CMAKE_GENERATOR_PLATFORM}" STREQUAL "x64")) add_definitions(-DOPENSSL_NO_ASM) endif() - elseif(WIN32) + elseif(WIN32 AND NOT MINGW) add_definitions(-DOPENSSL_NO_ASM) endif() endif() -if(NOT "${OPENSSLDIR}" STREQUAL "") - add_definitions(-DOPENSSLDIR=\"${OPENSSLDIR}\") -else() - if(WIN32) - add_definitions(-DOPENSSLDIR=\"C:/Windows/libressl/ssl\") - else() - add_definitions(-DOPENSSLDIR=\"${CMAKE_INSTALL_PREFIX}/etc/ssl\") - endif() -endif() +add_definitions(-DOPENSSLDIR=\"${OPENSSLDIR}\") file(READ ${CMAKE_CURRENT_SOURCE_DIR}/crypto.sym SYMS) foreach(SYM IN LISTS CRYPTO_UNEXPORT) string(REPLACE "${SYM}\n" "" SYMS ${SYMS}) endforeach() file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/crypto_p.sym ${SYMS}) -if(EXTRA_EXPORT) - list(SORT EXTRA_EXPORT) - foreach(SYM IN LISTS EXTRA_EXPORT) - file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/crypto_p.sym "${SYM}\n") - endforeach() -endif() -set(LIBTLS_EXTRA_EXPORT ${EXTRA_EXPORT} PARENT_SCOPE) - -add_library(crypto_obj OBJECT ${CRYPTO_SRC}) -target_include_directories(crypto_obj +add_library(compat_obj OBJECT ${COMPAT_SRC}) +target_include_directories(compat_obj PRIVATE - . - asn1 - bn - dsa - ec - ecdh - ecdsa - evp - modes ../include/compat PUBLIC - ../include) + ../include + ${CMAKE_BINARY_DIR}/include) -add_library(crypto $) -target_include_directories(crypto +add_library(crypto_obj OBJECT ${CRYPTO_SRC}) +target_include_directories(crypto_obj PRIVATE . + aes asn1 + bio bn + bytestring + conf + dh dsa + curve25519 ec ecdh ecdsa + err evp + hidden + hmac + lhash + mlkem modes + ocsp + pkcs12 + rsa + sha + stack + x509 ../include/compat PUBLIC - ../include) + ../include + ${CMAKE_BINARY_DIR}/include) + +if(HOST_AARCH64) + target_include_directories(crypto_obj PRIVATE arch/aarch64/) + target_include_directories(crypto_obj PRIVATE bn/arch/aarch64/) +elseif(HOST_ARM) + target_include_directories(crypto_obj PRIVATE arch/arm/) + target_include_directories(crypto_obj PRIVATE bn/arch/arm/) +elseif(HOST_I386) + target_include_directories(crypto_obj PRIVATE arch/i386/) + target_include_directories(crypto_obj PRIVATE bn/arch/i386/) +elseif(HOST_LOONGARCH64) + target_include_directories(crypto_obj PRIVATE arch/loongarch64) + target_include_directories(crypto_obj PRIVATE bn/arch/loongarch64) +elseif(HOST_MIPS64) + target_include_directories(crypto_obj PRIVATE arch/mips64) + target_include_directories(crypto_obj PRIVATE bn/arch/mips64) +elseif(HOST_MIPS) + target_include_directories(crypto_obj PRIVATE arch/mips) + target_include_directories(crypto_obj PRIVATE bn/arch/mips) +elseif(HOST_POWERPC) + target_include_directories(crypto_obj PRIVATE arch/powerpc) + target_include_directories(crypto_obj PRIVATE bn/arch/powerpc) +elseif(HOST_POWERPC64) + target_include_directories(crypto_obj PRIVATE arch/powerpc64) + target_include_directories(crypto_obj PRIVATE bn/arch/powerpc64) +elseif(HOST_RISCV64) + target_include_directories(crypto_obj PRIVATE arch/riscv64) + target_include_directories(crypto_obj PRIVATE bn/arch/riscv64) +elseif(HOST_SPARC64) + target_include_directories(crypto_obj PRIVATE arch/sparc64) + target_include_directories(crypto_obj PRIVATE bn/arch/sparc64) +elseif(HOST_X86_64) + target_include_directories(crypto_obj PRIVATE arch/amd64) + target_include_directories(crypto_obj PRIVATE bn/arch/amd64) +endif() + +if(MSVC) + # "C4701" - Potentially uninitialized local variable 'name' used + set_source_files_properties(bn/bn_convert.c pem/pem_lib.c PROPERTIES + COMPILE_OPTIONS /wd4701 + ) + # "C4702" - unreachable code + set_source_files_properties(pkcs7/pk7_doit.c PROPERTIES + COMPILE_OPTIONS /wd4702 + ) +endif() + +add_library(crypto $ $ empty.c) export_symbol(crypto ${CMAKE_CURRENT_BINARY_DIR}/crypto_p.sym) target_link_libraries(crypto ${PLATFORM_LIBS}) -if (WIN32) - set(CRYPTO_POSTFIX -${CRYPTO_MAJOR_VERSION}) -endif() set_target_properties(crypto PROPERTIES - OUTPUT_NAME crypto${CRYPTO_POSTFIX} - ARCHIVE_OUTPUT_NAME crypto${CRYPTO_POSTFIX}) -set_target_properties(crypto PROPERTIES VERSION - ${CRYPTO_VERSION} SOVERSION ${CRYPTO_MAJOR_VERSION}) + OUTPUT_NAME crypto + ARCHIVE_OUTPUT_NAME crypto + EXPORT_NAME Crypto + VERSION ${CRYPTO_VERSION} + SOVERSION ${CRYPTO_MAJOR_VERSION} +) +if(NOT CMAKE_VERSION VERSION_LESS 3.27.0) + set_target_properties(crypto PROPERTIES DLL_NAME_WITH_SOVERSION TRUE) +endif() + +target_include_directories( + crypto + PUBLIC + $ + $ +) + +install( + TARGETS crypto + EXPORT Crypto-target +) + +export( + EXPORT Crypto-target + FILE "${LibreSSL_BINARY_DIR}/LibreSSL-Crypto.cmake" + NAMESPACE LibreSSL:: +) if(ENABLE_LIBRESSL_INSTALL) install( @@ -1020,4 +893,16 @@ if(ENABLE_LIBRESSL_INSTALL) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) + install( + EXPORT Crypto-target + FILE "LibreSSL-Crypto.cmake" + NAMESPACE LibreSSL:: + DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}" + ) endif(ENABLE_LIBRESSL_INSTALL) + +# build static library for regression test +if(BUILD_SHARED_LIBS) + add_library(crypto-static STATIC $) + target_link_libraries(crypto-static ${PLATFORM_LIBS}) +endif() diff --git a/crypto/Makefile.am b/crypto/Makefile.am index 4030eaebe2..a4a717d1cf 100644 --- a/crypto/Makefile.am +++ b/crypto/Makefile.am @@ -1,12 +1,45 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + include $(top_srcdir)/Makefile.am.common +AM_CPPFLAGS += -DLIBRESSL_CRYPTO_INTERNAL +AM_CPPFLAGS += -I$(top_srcdir)/crypto/aes AM_CPPFLAGS += -I$(top_srcdir)/crypto/asn1 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/bio AM_CPPFLAGS += -I$(top_srcdir)/crypto/bn +AM_CPPFLAGS += -I$(top_srcdir)/crypto/bytestring +AM_CPPFLAGS += -I$(top_srcdir)/crypto/conf +AM_CPPFLAGS += -I$(top_srcdir)/crypto/curve25519 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/dh +AM_CPPFLAGS += -I$(top_srcdir)/crypto/dsa AM_CPPFLAGS += -I$(top_srcdir)/crypto/ec AM_CPPFLAGS += -I$(top_srcdir)/crypto/ecdh AM_CPPFLAGS += -I$(top_srcdir)/crypto/ecdsa +AM_CPPFLAGS += -I$(top_srcdir)/crypto/err AM_CPPFLAGS += -I$(top_srcdir)/crypto/evp +AM_CPPFLAGS += -I$(top_srcdir)/crypto/hmac +AM_CPPFLAGS += -I$(top_srcdir)/crypto/lhash +AM_CPPFLAGS += -I$(top_srcdir)/crypto/mlkem AM_CPPFLAGS += -I$(top_srcdir)/crypto/modes +AM_CPPFLAGS += -I$(top_srcdir)/crypto/ocsp +AM_CPPFLAGS += -I$(top_srcdir)/crypto/pkcs12 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/rsa +AM_CPPFLAGS += -I$(top_srcdir)/crypto/sha +AM_CPPFLAGS += -I$(top_srcdir)/crypto/stack +AM_CPPFLAGS += -I$(top_srcdir)/crypto/x509 AM_CPPFLAGS += -I$(top_srcdir)/crypto noinst_LTLIBRARIES = libcompat.la @@ -20,9 +53,11 @@ endif EXTRA_DIST = VERSION EXTRA_DIST += CMakeLists.txt EXTRA_DIST += crypto.sym +EXTRA_DIST += empty.c # needed for a CMake target EXTRA_DIST += compat/strcasecmp.c +EXTRA_DIST += compat/getopt_long.c BUILT_SOURCES = crypto_portable.sym CLEANFILES = crypto_portable.sym @@ -32,83 +67,18 @@ crypto_portable.sym: crypto.sym Makefile -echo "generating crypto_portable.sym ..." -cp $(top_srcdir)/crypto/crypto.sym crypto_portable.sym -chmod u+w crypto_portable.sym -if !HAVE_ARC4RANDOM_BUF - -echo arc4random >> crypto_portable.sym - -echo arc4random_buf >> crypto_portable.sym - -echo arc4random_uniform >> crypto_portable.sym -if !HAVE_GETENTROPY - -echo getentropy >> crypto_portable.sym -endif -endif -if !HAVE_ASPRINTF - -echo asprintf >> crypto_portable.sym - -echo vasprintf >> crypto_portable.sym -endif -if !HAVE_EXPLICIT_BZERO - -echo explicit_bzero >> crypto_portable.sym -endif -if !HAVE_FREEZERO - -echo freezero >> crypto_portable.sym -endif -if !HAVE_REALLOCARRAY - -echo reallocarray >> crypto_portable.sym -endif -if !HAVE_RECALLOCARRAY - -echo recallocarray >> crypto_portable.sym -endif -if !HAVE_STRLCAT - -echo strlcat >> crypto_portable.sym -endif -if !HAVE_STRLCPY - -echo strlcpy >> crypto_portable.sym -endif -if !HAVE_STRNDUP - -echo strndup >> crypto_portable.sym -endif -if !HAVE_STRNLEN - -echo strnlen >> crypto_portable.sym -endif -if !HAVE_STRSEP - -echo strsep >> crypto_portable.sym -endif -if !HAVE_TIMEGM - -echo timegm >> crypto_portable.sym -endif -if !HAVE_TIMINGSAFE_BCMP - -echo timingsafe_bcmp >> crypto_portable.sym -endif -if !HAVE_TIMINGSAFE_MEMCMP - -echo timingsafe_memcmp >> crypto_portable.sym -endif -if HOST_CPU_IS_INTEL - -echo OPENSSL_ia32cap_P >> crypto_portable.sym -endif -if HOST_WIN - -echo posix_perror >> crypto_portable.sym - -echo posix_fopen >> crypto_portable.sym - -echo posix_fgets >> crypto_portable.sym - -echo posix_open >> crypto_portable.sym - -echo posix_rename >> crypto_portable.sym - -echo posix_connect >> crypto_portable.sym - -echo posix_close >> crypto_portable.sym - -echo posix_read >> crypto_portable.sym - -echo posix_write >> crypto_portable.sym - -echo posix_getsockopt >> crypto_portable.sym - -echo posix_setsockopt >> crypto_portable.sym - -echo getuid >> crypto_portable.sym -grep -v BIO_s_log crypto_portable.sym > crypto_portable.sym.tmp -mv crypto_portable.sym.tmp crypto_portable.sym -endif libcrypto_la_objects.mk: Makefile @echo "libcrypto_la_objects= $(libcrypto_la_OBJECTS)" \ - | sed 's/ */ $$\(abs_top_builddir\)\/crypto\//g' \ + | sed 's/ */ $$\(top_builddir\)\/crypto\//g' \ > libcrypto_la_objects.mk @echo "libcompat_la_objects= $(libcompat_la_OBJECTS)" \ - | sed 's/compat\// $$\(abs_top_builddir\)\/crypto\/&/g' \ + | sed 's/compat\// $$\(top_builddir\)\/crypto\/&/g' \ >> libcrypto_la_objects.mk @echo "libcompatnoopt_la_objects= $(libcompatnoopt_la_OBJECTS)" \ - | sed 's/compat\// $$\(abs_top_builddir\)\/crypto\/&/g' \ + | sed 's/compat\// $$\(top_builddir\)\/crypto\/&/g' \ >> libcrypto_la_objects.mk libcrypto_la_LDFLAGS = -version-info @LIBCRYPTO_VERSION@ -no-undefined -export-symbols crypto_portable.sym @@ -118,13 +88,9 @@ libcrypto_la_LIBADD = libcompat.la if !HAVE_EXPLICIT_BZERO libcrypto_la_LIBADD += libcompatnoopt.la endif -libcrypto_la_CPPFLAGS = $(AM_CPPFLAGS) +libcrypto_la_CPPFLAGS = -I$(top_srcdir)/crypto/hidden ${AM_CPPFLAGS} libcrypto_la_CPPFLAGS += -DLIBRESSL_INTERNAL libcrypto_la_CPPFLAGS += -DOPENSSL_NO_HW_PADLOCK -if OPENSSL_NO_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_NO_ASM -else -endif if OPENSSLDIR_DEFINED libcrypto_la_CPPFLAGS += -DOPENSSLDIR=\"@OPENSSLDIR@\" @@ -170,6 +136,10 @@ if !HAVE_STRSEP libcompat_la_SOURCES += compat/strsep.c endif +if !HAVE_STRTONUM +libcompat_la_SOURCES += compat/strtonum.c +endif + if !HAVE_ASPRINTF libcompat_la_SOURCES += compat/bsd-asprintf.c endif @@ -178,6 +148,14 @@ if !HAVE_FREEZERO libcompat_la_SOURCES += compat/freezero.c endif +if !HAVE_GETDELIM +libcompat_la_SOURCES += compat/getdelim.c +endif + +if !HAVE_GETLINE +libcompat_la_SOURCES += compat/getline.c +endif + if !HAVE_GETPAGESIZE libcompat_la_SOURCES += compat/getpagesize.c endif @@ -194,10 +172,6 @@ endif endif endif -if !HAVE_TIMEGM -libcompat_la_SOURCES += compat/timegm.c -endif - if !HAVE_REALLOCARRAY libcompat_la_SOURCES += compat/reallocarray.c endif @@ -227,110 +201,114 @@ include Makefile.am.arc4random libcrypto_la_SOURCES = EXTRA_libcrypto_la_SOURCES = -include Makefile.am.elf-arm +include Makefile.am.elf-aarch64 +include Makefile.am.elf-mips +include Makefile.am.elf-mips64 include Makefile.am.elf-x86_64 include Makefile.am.macosx-x86_64 include Makefile.am.masm-x86_64 include Makefile.am.mingw64-x86_64 -if !HOST_ASM_ELF_ARM +if !HOST_ASM_ELF_AARCH64 +if !HOST_ASM_ELF_MIPS +if !HOST_ASM_ELF_MIPS64 +if !HOST_ASM_ELF_RISCV64 if !HOST_ASM_ELF_X86_64 if !HOST_ASM_MACOSX_X86_64 if !HOST_ASM_MASM_X86_64 if !HOST_ASM_MINGW64_X86_64 -libcrypto_la_SOURCES += aes/aes_cbc.c -libcrypto_la_SOURCES += aes/aes_core.c -libcrypto_la_SOURCES += camellia/camellia.c -libcrypto_la_SOURCES += camellia/cmll_cbc.c -libcrypto_la_SOURCES += rc4/rc4_enc.c -libcrypto_la_SOURCES += rc4/rc4_skey.c -libcrypto_la_SOURCES += whrlpool/wp_block.c +libcrypto_la_CPPFLAGS += -DOPENSSL_NO_ASM +endif +endif +endif endif endif endif endif endif -libcrypto_la_SOURCES += cpt_err.c -libcrypto_la_SOURCES += cryptlib.c +if HOST_AARCH64 +if HOST_DARWIN +libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_darwin.c +else +if HOST_LINUX +libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_linux.c +else +if HOST_WIN +libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_windows.c +else +if HOST_OPENBSD +libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps.c +else +libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_none.c +endif +endif +endif +endif +endif + +if HOST_X86_64 +libcrypto_la_SOURCES += arch/amd64/crypto_cpu_caps.c +endif +if HOST_I386 +libcrypto_la_SOURCES += arch/i386/crypto_cpu_caps.c +endif + +libcrypto_la_SOURCES += crypto_err.c +libcrypto_la_SOURCES += crypto_ex_data.c libcrypto_la_SOURCES += crypto_init.c +libcrypto_la_SOURCES += crypto_legacy.c if !HOST_WIN libcrypto_la_SOURCES += crypto_lock.c else libcrypto_la_SOURCES += compat/crypto_lock_win.c endif -libcrypto_la_SOURCES += cversion.c -libcrypto_la_SOURCES += ex_data.c -libcrypto_la_SOURCES += malloc-wrapper.c -libcrypto_la_SOURCES += mem_clr.c -libcrypto_la_SOURCES += mem_dbg.c -libcrypto_la_SOURCES += o_init.c -libcrypto_la_SOURCES += o_str.c -libcrypto_la_SOURCES += o_time.c -noinst_HEADERS += arm_arch.h -noinst_HEADERS += constant_time_locl.h -noinst_HEADERS += cryptlib.h -noinst_HEADERS += md32_common.h -noinst_HEADERS += o_time.h +libcrypto_la_SOURCES += crypto_memory.c +noinst_HEADERS += constant_time.h +noinst_HEADERS += crypto_assembly.h +noinst_HEADERS += crypto_internal.h +noinst_HEADERS += crypto_local.h noinst_HEADERS += x86_arch.h # aes -libcrypto_la_SOURCES += aes/aes_cfb.c -libcrypto_la_SOURCES += aes/aes_ctr.c -libcrypto_la_SOURCES += aes/aes_ecb.c -libcrypto_la_SOURCES += aes/aes_ige.c -libcrypto_la_SOURCES += aes/aes_misc.c -libcrypto_la_SOURCES += aes/aes_ofb.c -libcrypto_la_SOURCES += aes/aes_wrap.c -noinst_HEADERS += aes/aes_locl.h +libcrypto_la_SOURCES += aes/aes.c +libcrypto_la_SOURCES += aes/aes_core.c +noinst_HEADERS += aes/aes_local.h # asn1 libcrypto_la_SOURCES += asn1/a_bitstr.c -libcrypto_la_SOURCES += asn1/a_bool.c -libcrypto_la_SOURCES += asn1/a_d2i_fp.c -libcrypto_la_SOURCES += asn1/a_digest.c -libcrypto_la_SOURCES += asn1/a_dup.c libcrypto_la_SOURCES += asn1/a_enum.c -libcrypto_la_SOURCES += asn1/a_i2d_fp.c libcrypto_la_SOURCES += asn1/a_int.c libcrypto_la_SOURCES += asn1/a_mbstr.c libcrypto_la_SOURCES += asn1/a_object.c libcrypto_la_SOURCES += asn1/a_octet.c +libcrypto_la_SOURCES += asn1/a_pkey.c libcrypto_la_SOURCES += asn1/a_print.c -libcrypto_la_SOURCES += asn1/a_sign.c +libcrypto_la_SOURCES += asn1/a_pubkey.c libcrypto_la_SOURCES += asn1/a_strex.c +libcrypto_la_SOURCES += asn1/a_string.c libcrypto_la_SOURCES += asn1/a_strnid.c libcrypto_la_SOURCES += asn1/a_time.c +libcrypto_la_SOURCES += asn1/a_time_posix.c libcrypto_la_SOURCES += asn1/a_time_tm.c libcrypto_la_SOURCES += asn1/a_type.c libcrypto_la_SOURCES += asn1/a_utf8.c -libcrypto_la_SOURCES += asn1/a_verify.c -libcrypto_la_SOURCES += asn1/ameth_lib.c libcrypto_la_SOURCES += asn1/asn1_err.c libcrypto_la_SOURCES += asn1/asn1_gen.c +libcrypto_la_SOURCES += asn1/asn1_item.c libcrypto_la_SOURCES += asn1/asn1_lib.c +libcrypto_la_SOURCES += asn1/asn1_old.c +libcrypto_la_SOURCES += asn1/asn1_old_lib.c libcrypto_la_SOURCES += asn1/asn1_par.c +libcrypto_la_SOURCES += asn1/asn1_types.c libcrypto_la_SOURCES += asn1/asn_mime.c libcrypto_la_SOURCES += asn1/asn_moid.c -libcrypto_la_SOURCES += asn1/asn_pack.c libcrypto_la_SOURCES += asn1/bio_asn1.c libcrypto_la_SOURCES += asn1/bio_ndef.c -libcrypto_la_SOURCES += asn1/d2i_pr.c -libcrypto_la_SOURCES += asn1/d2i_pu.c -libcrypto_la_SOURCES += asn1/evp_asn1.c -libcrypto_la_SOURCES += asn1/f_enum.c -libcrypto_la_SOURCES += asn1/f_int.c -libcrypto_la_SOURCES += asn1/f_string.c -libcrypto_la_SOURCES += asn1/i2d_pr.c -libcrypto_la_SOURCES += asn1/i2d_pu.c -libcrypto_la_SOURCES += asn1/n_pkey.c -libcrypto_la_SOURCES += asn1/nsseq.c libcrypto_la_SOURCES += asn1/p5_pbe.c libcrypto_la_SOURCES += asn1/p5_pbev2.c libcrypto_la_SOURCES += asn1/p8_pkey.c -libcrypto_la_SOURCES += asn1/t_bitst.c libcrypto_la_SOURCES += asn1/t_crl.c -libcrypto_la_SOURCES += asn1/t_pkey.c libcrypto_la_SOURCES += asn1/t_req.c libcrypto_la_SOURCES += asn1/t_spki.c libcrypto_la_SOURCES += asn1/t_x509.c @@ -347,11 +325,8 @@ libcrypto_la_SOURCES += asn1/x_attrib.c libcrypto_la_SOURCES += asn1/x_bignum.c libcrypto_la_SOURCES += asn1/x_crl.c libcrypto_la_SOURCES += asn1/x_exten.c -libcrypto_la_SOURCES += asn1/x_info.c libcrypto_la_SOURCES += asn1/x_long.c libcrypto_la_SOURCES += asn1/x_name.c -libcrypto_la_SOURCES += asn1/x_nx509.c -libcrypto_la_SOURCES += asn1/x_pkey.c libcrypto_la_SOURCES += asn1/x_pubkey.c libcrypto_la_SOURCES += asn1/x_req.c libcrypto_la_SOURCES += asn1/x_sig.c @@ -359,17 +334,12 @@ libcrypto_la_SOURCES += asn1/x_spki.c libcrypto_la_SOURCES += asn1/x_val.c libcrypto_la_SOURCES += asn1/x_x509.c libcrypto_la_SOURCES += asn1/x_x509a.c -noinst_HEADERS += asn1/asn1_locl.h +noinst_HEADERS += asn1/asn1_local.h noinst_HEADERS += asn1/charmap.h # bf -libcrypto_la_SOURCES += bf/bf_cfb64.c -libcrypto_la_SOURCES += bf/bf_ecb.c -libcrypto_la_SOURCES += bf/bf_enc.c -libcrypto_la_SOURCES += bf/bf_ofb64.c -libcrypto_la_SOURCES += bf/bf_skey.c -noinst_HEADERS += bf/bf_locl.h -noinst_HEADERS += bf/bf_pi.h +libcrypto_la_SOURCES += bf/blowfish.c +noinst_HEADERS += bf/bf_local.h # bio libcrypto_la_SOURCES += bio/b_dump.c @@ -394,67 +364,140 @@ libcrypto_la_SOURCES += bio/bss_conn.c libcrypto_la_SOURCES += bio/bss_dgram.c libcrypto_la_SOURCES += bio/bss_fd.c libcrypto_la_SOURCES += bio/bss_file.c -if !HOST_WIN -libcrypto_la_SOURCES += bio/bss_log.c -endif libcrypto_la_SOURCES += bio/bss_mem.c libcrypto_la_SOURCES += bio/bss_null.c libcrypto_la_SOURCES += bio/bss_sock.c +noinst_HEADERS += bio/bio_local.h # bn libcrypto_la_SOURCES += bn/bn_add.c -libcrypto_la_SOURCES += bn/bn_asm.c -libcrypto_la_SOURCES += bn/bn_blind.c +libcrypto_la_SOURCES += bn/bn_add_sub.c +libcrypto_la_SOURCES += bn/bn_bpsw.c libcrypto_la_SOURCES += bn/bn_const.c +libcrypto_la_SOURCES += bn/bn_convert.c libcrypto_la_SOURCES += bn/bn_ctx.c -libcrypto_la_SOURCES += bn/bn_depr.c libcrypto_la_SOURCES += bn/bn_div.c libcrypto_la_SOURCES += bn/bn_err.c libcrypto_la_SOURCES += bn/bn_exp.c -libcrypto_la_SOURCES += bn/bn_exp2.c libcrypto_la_SOURCES += bn/bn_gcd.c -libcrypto_la_SOURCES += bn/bn_gf2m.c +libcrypto_la_SOURCES += bn/bn_isqrt.c libcrypto_la_SOURCES += bn/bn_kron.c libcrypto_la_SOURCES += bn/bn_lib.c libcrypto_la_SOURCES += bn/bn_mod.c +libcrypto_la_SOURCES += bn/bn_mod_sqrt.c +libcrypto_la_SOURCES += bn/bn_mod_words.c libcrypto_la_SOURCES += bn/bn_mont.c -libcrypto_la_SOURCES += bn/bn_mpi.c libcrypto_la_SOURCES += bn/bn_mul.c -libcrypto_la_SOURCES += bn/bn_nist.c libcrypto_la_SOURCES += bn/bn_prime.c +libcrypto_la_SOURCES += bn/bn_primitives.c libcrypto_la_SOURCES += bn/bn_print.c libcrypto_la_SOURCES += bn/bn_rand.c libcrypto_la_SOURCES += bn/bn_recp.c libcrypto_la_SOURCES += bn/bn_shift.c +libcrypto_la_SOURCES += bn/bn_small_primes.c libcrypto_la_SOURCES += bn/bn_sqr.c -libcrypto_la_SOURCES += bn/bn_sqrt.c libcrypto_la_SOURCES += bn/bn_word.c -libcrypto_la_SOURCES += bn/bn_x931p.c -noinst_HEADERS += bn/bn_lcl.h +noinst_HEADERS += bn/bn_internal.h +noinst_HEADERS += bn/bn_local.h noinst_HEADERS += bn/bn_prime.h +noinst_HEADERS += bn/s2n_bignum.h +noinst_HEADERS += bn/s2n_bignum_internal.h + +# arch, bn/arch +if HOST_AARCH64 +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/aarch64/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/aarch64/ +endif +noinst_HEADERS += arch/aarch64/crypto_arch.h +noinst_HEADERS += bn/arch/aarch64/bn_arch.h + +if HOST_ARM +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/arm/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/arm/ +endif +noinst_HEADERS += arch/arm/crypto_arch.h +noinst_HEADERS += bn/arch/arm/bn_arch.h + +if HOST_I386 +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/i386/ +endif +noinst_HEADERS += arch/i386/crypto_arch.h +noinst_HEADERS += bn/arch/i386/bn_arch.h + +if HOST_LOONGARCH64 +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/loongarch64/ +endif +noinst_HEADERS += arch/loongarch64/crypto_arch.h +noinst_HEADERS += bn/arch/loongarch64/bn_arch.h + +if HOST_MIPS +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips/ +endif +noinst_HEADERS += arch/mips/crypto_arch.h +noinst_HEADERS += bn/arch/mips/bn_arch.h + +if HOST_MIPS64 +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips64/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/mips64/ +endif +noinst_HEADERS += arch/mips64/crypto_arch.h +noinst_HEADERS += bn/arch/mips64/bn_arch.h + +if HOST_POWERPC +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/powerpc/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/powerpc/ +endif +noinst_HEADERS += arch/powerpc/crypto_arch.h +noinst_HEADERS += bn/arch/powerpc/bn_arch.h + +if HOST_POWERPC64 +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/powerpc64/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/powerpc64/ +endif +noinst_HEADERS += arch/powerpc64/crypto_arch.h +noinst_HEADERS += bn/arch/powerpc64/bn_arch.h + +if HOST_RISCV64 +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/riscv64/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/riscv64/ +endif +noinst_HEADERS += arch/riscv64/crypto_arch.h +noinst_HEADERS += bn/arch/riscv64/bn_arch.h + +if HOST_SPARC64 +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/sparc64/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/sparc64/ +endif +noinst_HEADERS += arch/sparc64/crypto_arch.h +noinst_HEADERS += bn/arch/sparc64/bn_arch.h + +if HOST_X86_64 +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/amd64/ +libcrypto_la_CPPFLAGS += -I$(top_srcdir)/crypto/bn/arch/amd64/ +endif +noinst_HEADERS += arch/amd64/crypto_arch.h +noinst_HEADERS += bn/arch/amd64/bn_arch.h # buffer libcrypto_la_SOURCES += buffer/buf_err.c -libcrypto_la_SOURCES += buffer/buf_str.c libcrypto_la_SOURCES += buffer/buffer.c +noinst_HEADERS += bytestring/bytestring.h + +# bytestring +libcrypto_la_SOURCES += bytestring/bs_ber.c +libcrypto_la_SOURCES += bytestring/bs_cbb.c +libcrypto_la_SOURCES += bytestring/bs_cbs.c # camellia -libcrypto_la_SOURCES += camellia/cmll_cfb.c -libcrypto_la_SOURCES += camellia/cmll_ctr.c -libcrypto_la_SOURCES += camellia/cmll_ecb.c -libcrypto_la_SOURCES += camellia/cmll_misc.c -libcrypto_la_SOURCES += camellia/cmll_ofb.c +libcrypto_la_SOURCES += camellia/camellia.c noinst_HEADERS += camellia/camellia.h -noinst_HEADERS += camellia/cmll_locl.h # cast -libcrypto_la_SOURCES += cast/c_cfb64.c -libcrypto_la_SOURCES += cast/c_ecb.c -libcrypto_la_SOURCES += cast/c_enc.c -libcrypto_la_SOURCES += cast/c_ofb64.c -libcrypto_la_SOURCES += cast/c_skey.c -noinst_HEADERS += cast/cast_lcl.h -noinst_HEADERS += cast/cast_s.h +libcrypto_la_SOURCES += cast/cast.c +noinst_HEADERS += cast/cast_local.h # chacha EXTRA_libcrypto_la_SOURCES += chacha/chacha-merged.c @@ -468,7 +511,6 @@ libcrypto_la_SOURCES += cmac/cmac.c # cms libcrypto_la_SOURCES += cms/cms_asn1.c libcrypto_la_SOURCES += cms/cms_att.c -libcrypto_la_SOURCES += cms/cms_cd.c libcrypto_la_SOURCES += cms/cms_dd.c libcrypto_la_SOURCES += cms/cms_enc.c libcrypto_la_SOURCES += cms/cms_env.c @@ -480,23 +522,30 @@ libcrypto_la_SOURCES += cms/cms_lib.c libcrypto_la_SOURCES += cms/cms_pwri.c libcrypto_la_SOURCES += cms/cms_sd.c libcrypto_la_SOURCES += cms/cms_smime.c -noinst_HEADERS += cms/cms_lcl.h - -# comp -libcrypto_la_SOURCES += comp/c_rle.c -libcrypto_la_SOURCES += comp/c_zlib.c -libcrypto_la_SOURCES += comp/comp_err.c -libcrypto_la_SOURCES += comp/comp_lib.c +noinst_HEADERS += cms/cms_local.h # conf libcrypto_la_SOURCES += conf/conf_api.c libcrypto_la_SOURCES += conf/conf_def.c libcrypto_la_SOURCES += conf/conf_err.c libcrypto_la_SOURCES += conf/conf_lib.c -libcrypto_la_SOURCES += conf/conf_mall.c libcrypto_la_SOURCES += conf/conf_mod.c libcrypto_la_SOURCES += conf/conf_sap.c noinst_HEADERS += conf/conf_def.h +noinst_HEADERS += conf/conf_local.h + +# ct +libcrypto_la_SOURCES += ct/ct_b64.c +libcrypto_la_SOURCES += ct/ct_err.c +libcrypto_la_SOURCES += ct/ct_log.c +libcrypto_la_SOURCES += ct/ct_oct.c +libcrypto_la_SOURCES += ct/ct_policy.c +libcrypto_la_SOURCES += ct/ct_prn.c +libcrypto_la_SOURCES += ct/ct_sct.c +libcrypto_la_SOURCES += ct/ct_sct_ctx.c +libcrypto_la_SOURCES += ct/ct_vfy.c +libcrypto_la_SOURCES += ct/ct_x509v3.c +noinst_HEADERS += ct/ct_local.h # curve25519 libcrypto_la_SOURCES += curve25519/curve25519-generic.c @@ -505,48 +554,27 @@ noinst_HEADERS += curve25519/curve25519_internal.h # des -libcrypto_la_SOURCES += des/cbc_cksm.c -libcrypto_la_SOURCES += des/cbc_enc.c -libcrypto_la_SOURCES += des/cfb64ede.c -libcrypto_la_SOURCES += des/cfb64enc.c -libcrypto_la_SOURCES += des/cfb_enc.c +libcrypto_la_SOURCES += des/des.c +libcrypto_la_SOURCES += des/des_cksum.c libcrypto_la_SOURCES += des/des_enc.c -libcrypto_la_SOURCES += des/ecb3_enc.c -libcrypto_la_SOURCES += des/ecb_enc.c -libcrypto_la_SOURCES += des/ede_cbcm_enc.c -libcrypto_la_SOURCES += des/enc_read.c -libcrypto_la_SOURCES += des/enc_writ.c -libcrypto_la_SOURCES += des/fcrypt.c -libcrypto_la_SOURCES += des/fcrypt_b.c -EXTRA_libcrypto_la_SOURCES += des/ncbc_enc.c -libcrypto_la_SOURCES += des/ofb64ede.c -libcrypto_la_SOURCES += des/ofb64enc.c -libcrypto_la_SOURCES += des/ofb_enc.c -libcrypto_la_SOURCES += des/pcbc_enc.c -libcrypto_la_SOURCES += des/qud_cksm.c -libcrypto_la_SOURCES += des/rand_key.c -libcrypto_la_SOURCES += des/set_key.c -libcrypto_la_SOURCES += des/str2key.c -libcrypto_la_SOURCES += des/xcbc_enc.c -noinst_HEADERS += des/des_locl.h -noinst_HEADERS += des/spr.h +libcrypto_la_SOURCES += des/des_fcrypt.c +libcrypto_la_SOURCES += des/des_key.c +noinst_HEADERS += des/des_local.h # dh libcrypto_la_SOURCES += dh/dh_ameth.c libcrypto_la_SOURCES += dh/dh_asn1.c libcrypto_la_SOURCES += dh/dh_check.c -libcrypto_la_SOURCES += dh/dh_depr.c libcrypto_la_SOURCES += dh/dh_err.c libcrypto_la_SOURCES += dh/dh_gen.c libcrypto_la_SOURCES += dh/dh_key.c libcrypto_la_SOURCES += dh/dh_lib.c libcrypto_la_SOURCES += dh/dh_pmeth.c -libcrypto_la_SOURCES += dh/dh_prn.c +noinst_HEADERS += dh/dh_local.h # dsa libcrypto_la_SOURCES += dsa/dsa_ameth.c libcrypto_la_SOURCES += dsa/dsa_asn1.c -libcrypto_la_SOURCES += dsa/dsa_depr.c libcrypto_la_SOURCES += dsa/dsa_err.c libcrypto_la_SOURCES += dsa/dsa_gen.c libcrypto_la_SOURCES += dsa/dsa_key.c @@ -555,97 +583,46 @@ libcrypto_la_SOURCES += dsa/dsa_meth.c libcrypto_la_SOURCES += dsa/dsa_ossl.c libcrypto_la_SOURCES += dsa/dsa_pmeth.c libcrypto_la_SOURCES += dsa/dsa_prn.c -libcrypto_la_SOURCES += dsa/dsa_sign.c -libcrypto_la_SOURCES += dsa/dsa_vrf.c -noinst_HEADERS += dsa/dsa_locl.h - -# dso -libcrypto_la_SOURCES += dso/dso_dlfcn.c -libcrypto_la_SOURCES += dso/dso_err.c -libcrypto_la_SOURCES += dso/dso_lib.c -libcrypto_la_SOURCES += dso/dso_null.c -libcrypto_la_SOURCES += dso/dso_openssl.c +noinst_HEADERS += dsa/dsa_local.h # ec -libcrypto_la_SOURCES += ec/ec2_mult.c -libcrypto_la_SOURCES += ec/ec2_oct.c -libcrypto_la_SOURCES += ec/ec2_smpl.c libcrypto_la_SOURCES += ec/ec_ameth.c libcrypto_la_SOURCES += ec/ec_asn1.c -libcrypto_la_SOURCES += ec/ec_check.c +libcrypto_la_SOURCES += ec/ec_convert.c libcrypto_la_SOURCES += ec/ec_curve.c -libcrypto_la_SOURCES += ec/ec_cvt.c libcrypto_la_SOURCES += ec/ec_err.c +libcrypto_la_SOURCES += ec/ec_field.c libcrypto_la_SOURCES += ec/ec_key.c -libcrypto_la_SOURCES += ec/ec_kmeth.c libcrypto_la_SOURCES += ec/ec_lib.c libcrypto_la_SOURCES += ec/ec_mult.c -libcrypto_la_SOURCES += ec/ec_oct.c libcrypto_la_SOURCES += ec/ec_pmeth.c -libcrypto_la_SOURCES += ec/ec_print.c libcrypto_la_SOURCES += ec/eck_prn.c -libcrypto_la_SOURCES += ec/ecp_mont.c -libcrypto_la_SOURCES += ec/ecp_nist.c -libcrypto_la_SOURCES += ec/ecp_oct.c -libcrypto_la_SOURCES += ec/ecp_smpl.c -noinst_HEADERS += ec/ec_lcl.h +libcrypto_la_SOURCES += ec/ecp_hp_methods.c +libcrypto_la_SOURCES += ec/ecp_methods.c +libcrypto_la_SOURCES += ec/ecx_methods.c +noinst_HEADERS += ec/ec_internal.h +noinst_HEADERS += ec/ec_local.h # ecdh -libcrypto_la_SOURCES += ecdh/ecdh_kdf.c -libcrypto_la_SOURCES += ecdh/ech_err.c -libcrypto_la_SOURCES += ecdh/ech_key.c -libcrypto_la_SOURCES += ecdh/ech_lib.c -noinst_HEADERS += ecdh/ech_locl.h +libcrypto_la_SOURCES += ecdh/ecdh.c # ecdsa -libcrypto_la_SOURCES += ecdsa/ecs_asn1.c -libcrypto_la_SOURCES += ecdsa/ecs_err.c -libcrypto_la_SOURCES += ecdsa/ecs_lib.c -libcrypto_la_SOURCES += ecdsa/ecs_ossl.c -libcrypto_la_SOURCES += ecdsa/ecs_sign.c -libcrypto_la_SOURCES += ecdsa/ecs_vrf.c -noinst_HEADERS += ecdsa/ecs_locl.h +libcrypto_la_SOURCES += ecdsa/ecdsa.c # engine -libcrypto_la_SOURCES += engine/eng_all.c -libcrypto_la_SOURCES += engine/eng_cnf.c -libcrypto_la_SOURCES += engine/eng_ctrl.c -libcrypto_la_SOURCES += engine/eng_dyn.c -libcrypto_la_SOURCES += engine/eng_err.c -libcrypto_la_SOURCES += engine/eng_fat.c -libcrypto_la_SOURCES += engine/eng_init.c -libcrypto_la_SOURCES += engine/eng_lib.c -libcrypto_la_SOURCES += engine/eng_list.c -libcrypto_la_SOURCES += engine/eng_openssl.c -libcrypto_la_SOURCES += engine/eng_pkey.c -libcrypto_la_SOURCES += engine/eng_table.c -libcrypto_la_SOURCES += engine/tb_asnmth.c -libcrypto_la_SOURCES += engine/tb_cipher.c -libcrypto_la_SOURCES += engine/tb_dh.c -libcrypto_la_SOURCES += engine/tb_digest.c -libcrypto_la_SOURCES += engine/tb_dsa.c -libcrypto_la_SOURCES += engine/tb_ecdh.c -libcrypto_la_SOURCES += engine/tb_ecdsa.c -libcrypto_la_SOURCES += engine/tb_eckey.c -libcrypto_la_SOURCES += engine/tb_pkmeth.c -libcrypto_la_SOURCES += engine/tb_rand.c -libcrypto_la_SOURCES += engine/tb_rsa.c -libcrypto_la_SOURCES += engine/tb_store.c -noinst_HEADERS += engine/eng_int.h +libcrypto_la_SOURCES += engine/engine_stubs.c # err libcrypto_la_SOURCES += err/err.c libcrypto_la_SOURCES += err/err_all.c libcrypto_la_SOURCES += err/err_prn.c +noinst_HEADERS += err/err_local.h # evp libcrypto_la_SOURCES += evp/bio_b64.c libcrypto_la_SOURCES += evp/bio_enc.c libcrypto_la_SOURCES += evp/bio_md.c -libcrypto_la_SOURCES += evp/c_all.c -libcrypto_la_SOURCES += evp/digest.c libcrypto_la_SOURCES += evp/e_aes.c -libcrypto_la_SOURCES += evp/e_aes_cbc_hmac_sha1.c libcrypto_la_SOURCES += evp/e_bf.c libcrypto_la_SOURCES += evp/e_camellia.c libcrypto_la_SOURCES += evp/e_cast.c @@ -653,70 +630,94 @@ libcrypto_la_SOURCES += evp/e_chacha.c libcrypto_la_SOURCES += evp/e_chacha20poly1305.c libcrypto_la_SOURCES += evp/e_des.c libcrypto_la_SOURCES += evp/e_des3.c -libcrypto_la_SOURCES += evp/e_gost2814789.c libcrypto_la_SOURCES += evp/e_idea.c libcrypto_la_SOURCES += evp/e_null.c -libcrypto_la_SOURCES += evp/e_old.c libcrypto_la_SOURCES += evp/e_rc2.c libcrypto_la_SOURCES += evp/e_rc4.c -libcrypto_la_SOURCES += evp/e_rc4_hmac_md5.c libcrypto_la_SOURCES += evp/e_sm4.c libcrypto_la_SOURCES += evp/e_xcbc_d.c -libcrypto_la_SOURCES += evp/encode.c libcrypto_la_SOURCES += evp/evp_aead.c -libcrypto_la_SOURCES += evp/evp_enc.c +libcrypto_la_SOURCES += evp/evp_cipher.c +libcrypto_la_SOURCES += evp/evp_digest.c +libcrypto_la_SOURCES += evp/evp_encode.c libcrypto_la_SOURCES += evp/evp_err.c libcrypto_la_SOURCES += evp/evp_key.c -libcrypto_la_SOURCES += evp/evp_lib.c +libcrypto_la_SOURCES += evp/evp_names.c libcrypto_la_SOURCES += evp/evp_pbe.c libcrypto_la_SOURCES += evp/evp_pkey.c -libcrypto_la_SOURCES += evp/m_dss.c -libcrypto_la_SOURCES += evp/m_dss1.c -libcrypto_la_SOURCES += evp/m_ecdsa.c -libcrypto_la_SOURCES += evp/m_gost2814789.c -libcrypto_la_SOURCES += evp/m_gostr341194.c libcrypto_la_SOURCES += evp/m_md4.c libcrypto_la_SOURCES += evp/m_md5.c libcrypto_la_SOURCES += evp/m_md5_sha1.c libcrypto_la_SOURCES += evp/m_null.c libcrypto_la_SOURCES += evp/m_ripemd.c libcrypto_la_SOURCES += evp/m_sha1.c +libcrypto_la_SOURCES += evp/m_sha3.c libcrypto_la_SOURCES += evp/m_sigver.c -libcrypto_la_SOURCES += evp/m_streebog.c libcrypto_la_SOURCES += evp/m_sm3.c -libcrypto_la_SOURCES += evp/m_wp.c -libcrypto_la_SOURCES += evp/names.c -libcrypto_la_SOURCES += evp/p5_crpt.c -libcrypto_la_SOURCES += evp/p5_crpt2.c -libcrypto_la_SOURCES += evp/p_dec.c -libcrypto_la_SOURCES += evp/p_enc.c +libcrypto_la_SOURCES += evp/p_legacy.c libcrypto_la_SOURCES += evp/p_lib.c -libcrypto_la_SOURCES += evp/p_open.c -libcrypto_la_SOURCES += evp/p_seal.c libcrypto_la_SOURCES += evp/p_sign.c libcrypto_la_SOURCES += evp/p_verify.c libcrypto_la_SOURCES += evp/pmeth_fn.c libcrypto_la_SOURCES += evp/pmeth_gn.c libcrypto_la_SOURCES += evp/pmeth_lib.c -noinst_HEADERS += evp/evp_locl.h - -# gost -libcrypto_la_SOURCES += gost/gost2814789.c -libcrypto_la_SOURCES += gost/gost89_keywrap.c -libcrypto_la_SOURCES += gost/gost89_params.c -libcrypto_la_SOURCES += gost/gost89imit_ameth.c -libcrypto_la_SOURCES += gost/gost89imit_pmeth.c -libcrypto_la_SOURCES += gost/gost_asn1.c -libcrypto_la_SOURCES += gost/gost_err.c -libcrypto_la_SOURCES += gost/gostr341001.c -libcrypto_la_SOURCES += gost/gostr341001_ameth.c -libcrypto_la_SOURCES += gost/gostr341001_key.c -libcrypto_la_SOURCES += gost/gostr341001_params.c -libcrypto_la_SOURCES += gost/gostr341001_pmeth.c -libcrypto_la_SOURCES += gost/gostr341194.c -libcrypto_la_SOURCES += gost/streebog.c -noinst_HEADERS += gost/gost_asn1.h -noinst_HEADERS += gost/gost_locl.h +noinst_HEADERS += evp/evp_local.h + +# hidden +noinst_HEADERS += hidden/crypto_namespace.h +noinst_HEADERS += hidden/openssl/aes.h +noinst_HEADERS += hidden/openssl/asn1.h +noinst_HEADERS += hidden/openssl/asn1t.h +noinst_HEADERS += hidden/openssl/bio.h +noinst_HEADERS += hidden/openssl/blowfish.h +noinst_HEADERS += hidden/openssl/bn.h +noinst_HEADERS += hidden/openssl/buffer.h +noinst_HEADERS += hidden/openssl/camellia.h +noinst_HEADERS += hidden/openssl/cast.h +noinst_HEADERS += hidden/openssl/chacha.h +noinst_HEADERS += hidden/openssl/cmac.h +noinst_HEADERS += hidden/openssl/cms.h +noinst_HEADERS += hidden/openssl/conf.h +noinst_HEADERS += hidden/openssl/crypto.h +noinst_HEADERS += hidden/openssl/ct.h +noinst_HEADERS += hidden/openssl/curve25519.h +noinst_HEADERS += hidden/openssl/des.h +noinst_HEADERS += hidden/openssl/dh.h +noinst_HEADERS += hidden/openssl/dsa.h +noinst_HEADERS += hidden/openssl/ec.h +noinst_HEADERS += hidden/openssl/engine.h +noinst_HEADERS += hidden/openssl/err.h +noinst_HEADERS += hidden/openssl/evp.h +noinst_HEADERS += hidden/openssl/hkdf.h +noinst_HEADERS += hidden/openssl/hmac.h +noinst_HEADERS += hidden/openssl/idea.h +noinst_HEADERS += hidden/openssl/lhash.h +noinst_HEADERS += hidden/openssl/md4.h +noinst_HEADERS += hidden/openssl/md5.h +noinst_HEADERS += hidden/openssl/mlkem.h +noinst_HEADERS += hidden/openssl/modes.h +noinst_HEADERS += hidden/openssl/objects.h +noinst_HEADERS += hidden/openssl/ocsp.h +noinst_HEADERS += hidden/openssl/pem.h +noinst_HEADERS += hidden/openssl/pkcs12.h +noinst_HEADERS += hidden/openssl/pkcs7.h +noinst_HEADERS += hidden/openssl/poly1305.h +noinst_HEADERS += hidden/openssl/posix_time.h +noinst_HEADERS += hidden/openssl/rand.h +noinst_HEADERS += hidden/openssl/rc2.h +noinst_HEADERS += hidden/openssl/rc4.h +noinst_HEADERS += hidden/openssl/ripemd.h +noinst_HEADERS += hidden/openssl/rsa.h +noinst_HEADERS += hidden/openssl/sha.h +noinst_HEADERS += hidden/openssl/sm3.h +noinst_HEADERS += hidden/openssl/sm4.h +noinst_HEADERS += hidden/openssl/stack.h +noinst_HEADERS += hidden/openssl/ts.h +noinst_HEADERS += hidden/openssl/txt_db.h +noinst_HEADERS += hidden/openssl/ui.h +noinst_HEADERS += hidden/openssl/x509.h +noinst_HEADERS += hidden/openssl/x509_vfy.h +noinst_HEADERS += hidden/openssl/x509v3.h # hkdf libcrypto_la_SOURCES += hkdf/hkdf.c @@ -725,48 +726,48 @@ libcrypto_la_SOURCES += hkdf/hkdf.c libcrypto_la_SOURCES += hmac/hm_ameth.c libcrypto_la_SOURCES += hmac/hm_pmeth.c libcrypto_la_SOURCES += hmac/hmac.c +noinst_HEADERS += hmac/hmac_local.h # idea -libcrypto_la_SOURCES += idea/i_cbc.c -libcrypto_la_SOURCES += idea/i_cfb64.c -libcrypto_la_SOURCES += idea/i_ecb.c -libcrypto_la_SOURCES += idea/i_ofb64.c -libcrypto_la_SOURCES += idea/i_skey.c -noinst_HEADERS += idea/idea_lcl.h +libcrypto_la_SOURCES += idea/idea.c +noinst_HEADERS += idea/idea_local.h + +# kdf +libcrypto_la_SOURCES += kdf/hkdf_evp.c +libcrypto_la_SOURCES += kdf/kdf_err.c +libcrypto_la_SOURCES += kdf/tls1_prf.c # lhash -libcrypto_la_SOURCES += lhash/lh_stats.c libcrypto_la_SOURCES += lhash/lhash.c # md4 -libcrypto_la_SOURCES += md4/md4_dgst.c -libcrypto_la_SOURCES += md4/md4_one.c -noinst_HEADERS += md4/md4_locl.h +libcrypto_la_SOURCES += md4/md4.c # md5 -libcrypto_la_SOURCES += md5/md5_dgst.c -libcrypto_la_SOURCES += md5/md5_one.c -noinst_HEADERS += md5/md5_locl.h +libcrypto_la_SOURCES += md5/md5.c + +# mlkem +libcrypto_la_SOURCES += mlkem/mlkem.c +libcrypto_la_SOURCES += mlkem/mlkem_internal.c +libcrypto_la_SOURCES += mlkem/mlkem_key.c +noinst_HEADERS += mlkem/mlkem_internal.h # modes libcrypto_la_SOURCES += modes/cbc128.c libcrypto_la_SOURCES += modes/ccm128.c libcrypto_la_SOURCES += modes/cfb128.c libcrypto_la_SOURCES += modes/ctr128.c -libcrypto_la_SOURCES += modes/cts128.c libcrypto_la_SOURCES += modes/gcm128.c libcrypto_la_SOURCES += modes/ofb128.c libcrypto_la_SOURCES += modes/xts128.c -noinst_HEADERS += modes/modes_lcl.h +noinst_HEADERS += modes/modes_local.h # objects -libcrypto_la_SOURCES += objects/o_names.c libcrypto_la_SOURCES += objects/obj_dat.c libcrypto_la_SOURCES += objects/obj_err.c libcrypto_la_SOURCES += objects/obj_lib.c libcrypto_la_SOURCES += objects/obj_xref.c noinst_HEADERS += objects/obj_dat.h -noinst_HEADERS += objects/obj_xref.h # ocsp libcrypto_la_SOURCES += ocsp/ocsp_asn.c @@ -778,6 +779,7 @@ libcrypto_la_SOURCES += ocsp/ocsp_lib.c libcrypto_la_SOURCES += ocsp/ocsp_prn.c libcrypto_la_SOURCES += ocsp/ocsp_srv.c libcrypto_la_SOURCES += ocsp/ocsp_vfy.c +noinst_HEADERS += ocsp/ocsp_local.h # pem libcrypto_la_SOURCES += pem/pem_all.c @@ -787,7 +789,6 @@ libcrypto_la_SOURCES += pem/pem_lib.c libcrypto_la_SOURCES += pem/pem_oth.c libcrypto_la_SOURCES += pem/pem_pk8.c libcrypto_la_SOURCES += pem/pem_pkey.c -libcrypto_la_SOURCES += pem/pem_seal.c libcrypto_la_SOURCES += pem/pem_sign.c libcrypto_la_SOURCES += pem/pem_x509.c libcrypto_la_SOURCES += pem/pem_xaux.c @@ -797,7 +798,6 @@ libcrypto_la_SOURCES += pem/pvkfmt.c libcrypto_la_SOURCES += pkcs12/p12_add.c libcrypto_la_SOURCES += pkcs12/p12_asn.c libcrypto_la_SOURCES += pkcs12/p12_attr.c -libcrypto_la_SOURCES += pkcs12/p12_crpt.c libcrypto_la_SOURCES += pkcs12/p12_crt.c libcrypto_la_SOURCES += pkcs12/p12_decr.c libcrypto_la_SOURCES += pkcs12/p12_init.c @@ -807,11 +807,12 @@ libcrypto_la_SOURCES += pkcs12/p12_mutl.c libcrypto_la_SOURCES += pkcs12/p12_npas.c libcrypto_la_SOURCES += pkcs12/p12_p8d.c libcrypto_la_SOURCES += pkcs12/p12_p8e.c +libcrypto_la_SOURCES += pkcs12/p12_sbag.c libcrypto_la_SOURCES += pkcs12/p12_utl.c libcrypto_la_SOURCES += pkcs12/pk12err.c +noinst_HEADERS += pkcs12/pkcs12_local.h # pkcs7 -libcrypto_la_SOURCES += pkcs7/bio_pk7.c libcrypto_la_SOURCES += pkcs7/pk7_asn1.c libcrypto_la_SOURCES += pkcs7/pk7_attr.c libcrypto_la_SOURCES += pkcs7/pk7_doit.c @@ -830,28 +831,20 @@ libcrypto_la_SOURCES += rand/rand_lib.c libcrypto_la_SOURCES += rand/randfile.c # rc2 -libcrypto_la_SOURCES += rc2/rc2_cbc.c -libcrypto_la_SOURCES += rc2/rc2_ecb.c -libcrypto_la_SOURCES += rc2/rc2_skey.c -libcrypto_la_SOURCES += rc2/rc2cfb64.c -libcrypto_la_SOURCES += rc2/rc2ofb64.c -noinst_HEADERS += rc2/rc2_locl.h +libcrypto_la_SOURCES += rc2/rc2.c +noinst_HEADERS += rc2/rc2_local.h # rc4 -noinst_HEADERS += rc4/rc4_locl.h +libcrypto_la_SOURCES += rc4/rc4.c # ripemd -libcrypto_la_SOURCES += ripemd/rmd_dgst.c -libcrypto_la_SOURCES += ripemd/rmd_one.c -noinst_HEADERS += ripemd/rmd_locl.h -noinst_HEADERS += ripemd/rmdconst.h +libcrypto_la_SOURCES += ripemd/ripemd.c # rsa libcrypto_la_SOURCES += rsa/rsa_ameth.c libcrypto_la_SOURCES += rsa/rsa_asn1.c +libcrypto_la_SOURCES += rsa/rsa_blinding.c libcrypto_la_SOURCES += rsa/rsa_chk.c -libcrypto_la_SOURCES += rsa/rsa_crpt.c -libcrypto_la_SOURCES += rsa/rsa_depr.c libcrypto_la_SOURCES += rsa/rsa_eay.c libcrypto_la_SOURCES += rsa/rsa_err.c libcrypto_la_SOURCES += rsa/rsa_gen.c @@ -866,24 +859,25 @@ libcrypto_la_SOURCES += rsa/rsa_pss.c libcrypto_la_SOURCES += rsa/rsa_saos.c libcrypto_la_SOURCES += rsa/rsa_sign.c libcrypto_la_SOURCES += rsa/rsa_x931.c -noinst_HEADERS += rsa/rsa_locl.h +noinst_HEADERS += rsa/rsa_local.h # sha -libcrypto_la_SOURCES += sha/sha1_one.c -libcrypto_la_SOURCES += sha/sha1dgst.c +libcrypto_la_SOURCES += sha/sha1.c libcrypto_la_SOURCES += sha/sha256.c +libcrypto_la_SOURCES += sha/sha3.c libcrypto_la_SOURCES += sha/sha512.c -noinst_HEADERS += sha/sha_locl.h +noinst_HEADERS += sha/sha_internal.h +noinst_HEADERS += sha/sha3_internal.h # sm3 libcrypto_la_SOURCES += sm3/sm3.c -noinst_HEADERS += sm3/sm3_locl.h # sm4 libcrypto_la_SOURCES += sm4/sm4.c # stack libcrypto_la_SOURCES += stack/stack.c +noinst_HEADERS += stack/stack_local.h # ts libcrypto_la_SOURCES += ts/ts_asn1.c @@ -897,6 +891,7 @@ libcrypto_la_SOURCES += ts/ts_rsp_sign.c libcrypto_la_SOURCES += ts/ts_rsp_utils.c libcrypto_la_SOURCES += ts/ts_rsp_verify.c libcrypto_la_SOURCES += ts/ts_verify_ctx.c +noinst_HEADERS += ts/ts_local.h # txt_db libcrypto_la_SOURCES += txt_db/txt_db.c @@ -904,29 +899,19 @@ libcrypto_la_SOURCES += txt_db/txt_db.c # ui libcrypto_la_SOURCES += ui/ui_err.c libcrypto_la_SOURCES += ui/ui_lib.c +libcrypto_la_SOURCES += ui/ui_null.c if !HOST_WIN libcrypto_la_SOURCES += ui/ui_openssl.c endif if HOST_WIN libcrypto_la_SOURCES += ui/ui_openssl_win.c endif -libcrypto_la_SOURCES += ui/ui_util.c -noinst_HEADERS += ui/ui_locl.h - -# whrlpool -libcrypto_la_SOURCES += whrlpool/wp_dgst.c -noinst_HEADERS += whrlpool/wp_locl.h +noinst_HEADERS += ui/ui_local.h # x509 libcrypto_la_SOURCES += x509/by_dir.c libcrypto_la_SOURCES += x509/by_file.c libcrypto_la_SOURCES += x509/by_mem.c -libcrypto_la_SOURCES += x509/pcy_cache.c -libcrypto_la_SOURCES += x509/pcy_data.c -libcrypto_la_SOURCES += x509/pcy_lib.c -libcrypto_la_SOURCES += x509/pcy_map.c -libcrypto_la_SOURCES += x509/pcy_node.c -libcrypto_la_SOURCES += x509/pcy_tree.c libcrypto_la_SOURCES += x509/x509_addr.c libcrypto_la_SOURCES += x509/x509_akey.c libcrypto_la_SOURCES += x509/x509_akeya.c @@ -942,7 +927,6 @@ libcrypto_la_SOURCES += x509/x509_cpols.c libcrypto_la_SOURCES += x509/x509_crld.c libcrypto_la_SOURCES += x509/x509_d2.c libcrypto_la_SOURCES += x509/x509_def.c -libcrypto_la_SOURCES += x509/x509_enum.c libcrypto_la_SOURCES += x509/x509_err.c libcrypto_la_SOURCES += x509/x509_ext.c libcrypto_la_SOURCES += x509/x509_extku.c @@ -956,18 +940,17 @@ libcrypto_la_SOURCES += x509/x509_lu.c libcrypto_la_SOURCES += x509/x509_ncons.c libcrypto_la_SOURCES += x509/x509_obj.c libcrypto_la_SOURCES += x509/x509_ocsp.c -libcrypto_la_SOURCES += x509/x509_pci.c -libcrypto_la_SOURCES += x509/x509_pcia.c libcrypto_la_SOURCES += x509/x509_pcons.c libcrypto_la_SOURCES += x509/x509_pku.c +libcrypto_la_SOURCES += x509/x509_policy.c libcrypto_la_SOURCES += x509/x509_pmaps.c libcrypto_la_SOURCES += x509/x509_prn.c libcrypto_la_SOURCES += x509/x509_purp.c libcrypto_la_SOURCES += x509/x509_r2x.c libcrypto_la_SOURCES += x509/x509_req.c libcrypto_la_SOURCES += x509/x509_set.c +libcrypto_la_SOURCES += x509/x509_siginfo.c libcrypto_la_SOURCES += x509/x509_skey.c -libcrypto_la_SOURCES += x509/x509_sxnet.c libcrypto_la_SOURCES += x509/x509_trs.c libcrypto_la_SOURCES += x509/x509_txt.c libcrypto_la_SOURCES += x509/x509_utl.c @@ -981,9 +964,7 @@ libcrypto_la_SOURCES += x509/x509rset.c libcrypto_la_SOURCES += x509/x509spki.c libcrypto_la_SOURCES += x509/x509type.c libcrypto_la_SOURCES += x509/x_all.c -noinst_HEADERS += x509/ext_dat.h -noinst_HEADERS += x509/pcy_int.h -noinst_HEADERS += x509/vpm_int.h noinst_HEADERS += x509/x509_internal.h noinst_HEADERS += x509/x509_issuer_cache.h -noinst_HEADERS += x509/x509_lcl.h +noinst_HEADERS += x509/x509_local.h +noinst_HEADERS += x509/x509_verify.h diff --git a/crypto/Makefile.am.elf-aarch64 b/crypto/Makefile.am.elf-aarch64 new file mode 100644 index 0000000000..650e6c6538 --- /dev/null +++ b/crypto/Makefile.am.elf-aarch64 @@ -0,0 +1,15 @@ +ASM_AARCH64_ELF = sha/sha1_aarch64_ce.S +ASM_AARCH64_ELF += sha/sha256_aarch64_ce.S +ASM_AARCH64_ELF += sha/sha512_aarch64_ce.S + +EXTRA_DIST += $(ASM_AARCH64_ELF) + +if HOST_ASM_ELF_AARCH64 +libcrypto_la_SOURCES += sha/sha1_aarch64.c +libcrypto_la_SOURCES += sha/sha256_aarch64.c +libcrypto_la_SOURCES += sha/sha512_aarch64.c + +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_SHA_ASSEMBLY + +libcrypto_la_SOURCES += $(ASM_AARCH64_ELF) +endif diff --git a/crypto/Makefile.am.elf-arm b/crypto/Makefile.am.elf-arm deleted file mode 100644 index a77c4d3b24..0000000000 --- a/crypto/Makefile.am.elf-arm +++ /dev/null @@ -1,30 +0,0 @@ -ASM_ARM_ELF = aes/aes-elf-armv4.S -ASM_ARM_ELF += bn/gf2m-elf-armv4.S -ASM_ARM_ELF += bn/mont-elf-armv4.S -ASM_ARM_ELF += sha/sha1-elf-armv4.S -ASM_ARM_ELF += sha/sha512-elf-armv4.S -ASM_ARM_ELF += sha/sha256-elf-armv4.S -ASM_ARM_ELF += modes/ghash-elf-armv4.S -ASM_ARM_ELF += armv4cpuid.S -ASM_ARM_ELF += armcap.c - -ASM_ARM_ELF += aes/aes_cbc.c -ASM_ARM_ELF += camellia/camellia.c -ASM_ARM_ELF += camellia/cmll_cbc.c -ASM_ARM_ELF += rc4/rc4_enc.c -ASM_ARM_ELF += rc4/rc4_skey.c -ASM_ARM_ELF += whrlpool/wp_block.c - -EXTRA_DIST += $(ASM_ARM_ELF) - -if HOST_ASM_ELF_ARM -libcrypto_la_CPPFLAGS += -DAES_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT -libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_GF2m -libcrypto_la_CPPFLAGS += -DGHASH_ASM -libcrypto_la_CPPFLAGS += -DSHA1_ASM -libcrypto_la_CPPFLAGS += -DSHA256_ASM -libcrypto_la_CPPFLAGS += -DSHA512_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_CPUID_OBJ -libcrypto_la_SOURCES += $(ASM_ARM_ELF) -endif diff --git a/crypto/Makefile.am.elf-mips b/crypto/Makefile.am.elf-mips new file mode 100644 index 0000000000..682fb5e1d3 --- /dev/null +++ b/crypto/Makefile.am.elf-mips @@ -0,0 +1,17 @@ +ASM_MIPS_ELF = aes/aes-mips.S +ASM_MIPS_ELF += bn/bn-mips.S +ASM_MIPS_ELF += bn/mont-mips.S +ASM_MIPS_ELF += sha/sha1-mips.S +ASM_MIPS_ELF += sha/sha256-mips.S + +EXTRA_DIST += $(ASM_MIPS_ELF) + +if HOST_ASM_ELF_MIPS +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_AES_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_BN_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_SHA_ASSEMBLY + +libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT + +libcrypto_la_SOURCES += $(ASM_MIPS_ELF) +endif diff --git a/crypto/Makefile.am.elf-mips64 b/crypto/Makefile.am.elf-mips64 new file mode 100644 index 0000000000..7269d6e922 --- /dev/null +++ b/crypto/Makefile.am.elf-mips64 @@ -0,0 +1,18 @@ +ASM_MIPS64_ELF = aes/aes-mips64.S +ASM_MIPS64_ELF += bn/bn-mips64.S +ASM_MIPS64_ELF += bn/mont-mips64.S +ASM_MIPS64_ELF += sha/sha1-mips64.S +ASM_MIPS64_ELF += sha/sha512-mips64.S +ASM_MIPS64_ELF += sha/sha256-mips64.S + +EXTRA_DIST += $(ASM_MIPS64_ELF) + +if HOST_ASM_ELF_MIPS64 +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_AES_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_BN_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_SHA_ASSEMBLY + +libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT + +libcrypto_la_SOURCES += $(ASM_MIPS64_ELF) +endif diff --git a/crypto/Makefile.am.elf-x86_64 b/crypto/Makefile.am.elf-x86_64 index 4cd34e2530..450e96ac8c 100644 --- a/crypto/Makefile.am.elf-x86_64 +++ b/crypto/Makefile.am.elf-x86_64 @@ -1,41 +1,58 @@ ASM_X86_64_ELF = aes/aes-elf-x86_64.S -ASM_X86_64_ELF += aes/bsaes-elf-x86_64.S -ASM_X86_64_ELF += aes/vpaes-elf-x86_64.S ASM_X86_64_ELF += aes/aesni-elf-x86_64.S -ASM_X86_64_ELF += aes/aesni-sha1-elf-x86_64.S ASM_X86_64_ELF += bn/modexp512-elf-x86_64.S ASM_X86_64_ELF += bn/mont-elf-x86_64.S ASM_X86_64_ELF += bn/mont5-elf-x86_64.S -ASM_X86_64_ELF += bn/gf2m-elf-x86_64.S -ASM_X86_64_ELF += camellia/cmll-elf-x86_64.S -ASM_X86_64_ELF += md5/md5-elf-x86_64.S ASM_X86_64_ELF += modes/ghash-elf-x86_64.S ASM_X86_64_ELF += rc4/rc4-elf-x86_64.S -ASM_X86_64_ELF += rc4/rc4-md5-elf-x86_64.S -ASM_X86_64_ELF += sha/sha1-elf-x86_64.S -ASM_X86_64_ELF += sha/sha256-elf-x86_64.S -ASM_X86_64_ELF += sha/sha512-elf-x86_64.S -ASM_X86_64_ELF += whrlpool/wp-elf-x86_64.S -ASM_X86_64_ELF += cpuid-elf-x86_64.S + +ASM_X86_64_ELF += bn/arch/amd64/bignum_add.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_cmadd.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_cmul.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_modadd.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_modsub.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_mul.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_4_8.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_4_8_alt.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_6_12.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_6_12_alt.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_8_16.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_mul_8_16_alt.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_4_8.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_4_8_alt.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_6_12.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_6_12_alt.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_8_16.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_sqr_8_16_alt.S +ASM_X86_64_ELF += bn/arch/amd64/bignum_sub.S +ASM_X86_64_ELF += bn/arch/amd64/word_clz.S + +ASM_X86_64_ELF += sha/sha1_amd64_generic.S +ASM_X86_64_ELF += sha/sha1_amd64_shani.S +ASM_X86_64_ELF += sha/sha256_amd64_generic.S +ASM_X86_64_ELF += sha/sha256_amd64_shani.S +ASM_X86_64_ELF += sha/sha512_amd64_generic.S EXTRA_DIST += $(ASM_X86_64_ELF) if HOST_ASM_ELF_X86_64 -libcrypto_la_CPPFLAGS += -DAES_ASM -libcrypto_la_CPPFLAGS += -DBSAES_ASM -libcrypto_la_CPPFLAGS += -DVPAES_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_IA32_SSE2 +libcrypto_la_SOURCES += aes/aes_amd64.c +libcrypto_la_SOURCES += bn/arch/amd64/bn_arch.c +libcrypto_la_SOURCES += modes/gcm128_amd64.c +libcrypto_la_SOURCES += sha/sha1_amd64.c +libcrypto_la_SOURCES += sha/sha256_amd64.c +libcrypto_la_SOURCES += sha/sha512_amd64.c + +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_AES_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_BN_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_GCM_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_RC4_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_SHA_ASSEMBLY + libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT5 -libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_GF2m -libcrypto_la_CPPFLAGS += -DMD5_ASM -libcrypto_la_CPPFLAGS += -DGHASH_ASM -libcrypto_la_CPPFLAGS += -DRSA_ASM -libcrypto_la_CPPFLAGS += -DSHA1_ASM -libcrypto_la_CPPFLAGS += -DSHA256_ASM -libcrypto_la_CPPFLAGS += -DSHA512_ASM -libcrypto_la_CPPFLAGS += -DWHIRLPOOL_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_CPUID_OBJ + libcrypto_la_SOURCES += $(ASM_X86_64_ELF) endif diff --git a/crypto/Makefile.am.macosx-x86_64 b/crypto/Makefile.am.macosx-x86_64 index 211815643a..7a26649b2b 100644 --- a/crypto/Makefile.am.macosx-x86_64 +++ b/crypto/Makefile.am.macosx-x86_64 @@ -1,41 +1,48 @@ ASM_X86_64_MACOSX = aes/aes-macosx-x86_64.S -ASM_X86_64_MACOSX += aes/bsaes-macosx-x86_64.S -ASM_X86_64_MACOSX += aes/vpaes-macosx-x86_64.S ASM_X86_64_MACOSX += aes/aesni-macosx-x86_64.S -ASM_X86_64_MACOSX += aes/aesni-sha1-macosx-x86_64.S ASM_X86_64_MACOSX += bn/modexp512-macosx-x86_64.S ASM_X86_64_MACOSX += bn/mont-macosx-x86_64.S ASM_X86_64_MACOSX += bn/mont5-macosx-x86_64.S -ASM_X86_64_MACOSX += bn/gf2m-macosx-x86_64.S -ASM_X86_64_MACOSX += camellia/cmll-macosx-x86_64.S -ASM_X86_64_MACOSX += md5/md5-macosx-x86_64.S ASM_X86_64_MACOSX += modes/ghash-macosx-x86_64.S ASM_X86_64_MACOSX += rc4/rc4-macosx-x86_64.S -ASM_X86_64_MACOSX += rc4/rc4-md5-macosx-x86_64.S -ASM_X86_64_MACOSX += sha/sha1-macosx-x86_64.S -ASM_X86_64_MACOSX += sha/sha256-macosx-x86_64.S -ASM_X86_64_MACOSX += sha/sha512-macosx-x86_64.S -ASM_X86_64_MACOSX += whrlpool/wp-macosx-x86_64.S -ASM_X86_64_MACOSX += cpuid-macosx-x86_64.S + +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_add.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_cmadd.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_cmul.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_modadd.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_modsub.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_4_8.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_4_8_alt.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_6_12.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_6_12_alt.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_8_16.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_mul_8_16_alt.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_4_8.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_4_8_alt.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_6_12.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_6_12_alt.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_8_16.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sqr_8_16_alt.S +ASM_X86_64_MACOSX += bn/arch/amd64/bignum_sub.S +ASM_X86_64_MACOSX += bn/arch/amd64/word_clz.S EXTRA_DIST += $(ASM_X86_64_MACOSX) if HOST_ASM_MACOSX_X86_64 -libcrypto_la_CPPFLAGS += -DAES_ASM -libcrypto_la_CPPFLAGS += -DBSAES_ASM -libcrypto_la_CPPFLAGS += -DVPAES_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_IA32_SSE2 +libcrypto_la_SOURCES += aes/aes_amd64.c +libcrypto_la_SOURCES += bn/arch/amd64/bn_arch.c +libcrypto_la_SOURCES += modes/gcm128_amd64.c + +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_AES_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_BN_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_GCM_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_RC4_ASSEMBLY + libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT5 -libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_GF2m -libcrypto_la_CPPFLAGS += -DMD5_ASM -libcrypto_la_CPPFLAGS += -DGHASH_ASM -libcrypto_la_CPPFLAGS += -DRSA_ASM -libcrypto_la_CPPFLAGS += -DSHA1_ASM -libcrypto_la_CPPFLAGS += -DSHA256_ASM -libcrypto_la_CPPFLAGS += -DSHA512_ASM -libcrypto_la_CPPFLAGS += -DWHIRLPOOL_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_CPUID_OBJ + libcrypto_la_SOURCES += $(ASM_X86_64_MACOSX) endif diff --git a/crypto/Makefile.am.masm-x86_64 b/crypto/Makefile.am.masm-x86_64 index 27094c0ba9..249f86bef8 100644 --- a/crypto/Makefile.am.masm-x86_64 +++ b/crypto/Makefile.am.masm-x86_64 @@ -1,41 +1,25 @@ ASM_X86_64_MASM = aes/aes-masm-x86_64.S -ASM_X86_64_MASM += aes/bsaes-masm-x86_64.S -ASM_X86_64_MASM += aes/vpaes-masm-x86_64.S ASM_X86_64_MASM += aes/aesni-masm-x86_64.S -ASM_X86_64_MASM += aes/aesni-sha1-masm-x86_64.S ASM_X86_64_MASM += bn/modexp512-masm-x86_64.S ASM_X86_64_MASM += bn/mont-masm-x86_64.S ASM_X86_64_MASM += bn/mont5-masm-x86_64.S -ASM_X86_64_MASM += bn/gf2m-masm-x86_64.S -ASM_X86_64_MASM += camellia/cmll-masm-x86_64.S -ASM_X86_64_MASM += md5/md5-masm-x86_64.S ASM_X86_64_MASM += modes/ghash-masm-x86_64.S ASM_X86_64_MASM += rc4/rc4-masm-x86_64.S -ASM_X86_64_MASM += rc4/rc4-md5-masm-x86_64.S -ASM_X86_64_MASM += sha/sha1-masm-x86_64.S -ASM_X86_64_MASM += sha/sha256-masm-x86_64.S -ASM_X86_64_MASM += sha/sha512-masm-x86_64.S -ASM_X86_64_MASM += whrlpool/wp-masm-x86_64.S -ASM_X86_64_MASM += cpuid-masm-x86_64.S EXTRA_DIST += $(ASM_X86_64_MASM) if HOST_ASM_MASM_X86_64 -libcrypto_la_CPPFLAGS += -DAES_ASM -libcrypto_la_CPPFLAGS += -DBSAES_ASM -libcrypto_la_CPPFLAGS += -DVPAES_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_IA32_SSE2 +libcrypto_la_SOURCES += aes/aes_amd64.c +libcrypto_la_SOURCES += modes/gcm128_amd64.c + +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_AES_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_BN_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_GCM_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_RC4_ASSEMBLY + libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT5 -libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_GF2m -libcrypto_la_CPPFLAGS += -DMD5_ASM -libcrypto_la_CPPFLAGS += -DGHASH_ASM -libcrypto_la_CPPFLAGS += -DRSA_ASM -libcrypto_la_CPPFLAGS += -DSHA1_ASM -libcrypto_la_CPPFLAGS += -DSHA256_ASM -libcrypto_la_CPPFLAGS += -DSHA512_ASM -libcrypto_la_CPPFLAGS += -DWHIRLPOOL_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_CPUID_OBJ + libcrypto_la_SOURCES += $(ASM_X86_64_MASM) endif diff --git a/crypto/Makefile.am.mingw64-x86_64 b/crypto/Makefile.am.mingw64-x86_64 index bce854b27e..e725a05012 100644 --- a/crypto/Makefile.am.mingw64-x86_64 +++ b/crypto/Makefile.am.mingw64-x86_64 @@ -1,41 +1,27 @@ ASM_X86_64_MINGW64 = aes/aes-mingw64-x86_64.S -ASM_X86_64_MINGW64 += aes/bsaes-mingw64-x86_64.S -ASM_X86_64_MINGW64 += aes/vpaes-mingw64-x86_64.S ASM_X86_64_MINGW64 += aes/aesni-mingw64-x86_64.S -ASM_X86_64_MINGW64 += aes/aesni-sha1-mingw64-x86_64.S #ASM_X86_64_MINGW64 += bn/modexp512-mingw64-x86_64.S #ASM_X86_64_MINGW64 += bn/mont-mingw64-x86_64.S #ASM_X86_64_MINGW64 += bn/mont5-mingw64-x86_64.S -#ASM_X86_64_MINGW64 += bn/gf2m-mingw64-x86_64.S -ASM_X86_64_MINGW64 += camellia/cmll-mingw64-x86_64.S -ASM_X86_64_MINGW64 += md5/md5-mingw64-x86_64.S ASM_X86_64_MINGW64 += modes/ghash-mingw64-x86_64.S ASM_X86_64_MINGW64 += rc4/rc4-mingw64-x86_64.S -ASM_X86_64_MINGW64 += rc4/rc4-md5-mingw64-x86_64.S -ASM_X86_64_MINGW64 += sha/sha1-mingw64-x86_64.S -ASM_X86_64_MINGW64 += sha/sha256-mingw64-x86_64.S -ASM_X86_64_MINGW64 += sha/sha512-mingw64-x86_64.S -ASM_X86_64_MINGW64 += whrlpool/wp-mingw64-x86_64.S -ASM_X86_64_MINGW64 += cpuid-mingw64-x86_64.S EXTRA_DIST += $(ASM_X86_64_MINGW64) if HOST_ASM_MINGW64_X86_64 -libcrypto_la_CPPFLAGS += -DAES_ASM -libcrypto_la_CPPFLAGS += -DBSAES_ASM -libcrypto_la_CPPFLAGS += -DVPAES_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_IA32_SSE2 +libcrypto_la_SOURCES += aes/aes_amd64.c +libcrypto_la_SOURCES += modes/gcm128_amd64.c + +libcrypto_la_CPPFLAGS += -Dendbr32=endbr64 + +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_AES_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_BN_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_GCM_ASSEMBLY +libcrypto_la_CPPFLAGS += -DLIBRESSL_USE_RC4_ASSEMBLY + #libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT #libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_MONT5 -#libcrypto_la_CPPFLAGS += -DOPENSSL_BN_ASM_GF2m -libcrypto_la_CPPFLAGS += -DMD5_ASM -libcrypto_la_CPPFLAGS += -DGHASH_ASM -libcrypto_la_CPPFLAGS += -DRSA_ASM -libcrypto_la_CPPFLAGS += -DSHA1_ASM -libcrypto_la_CPPFLAGS += -DSHA256_ASM -libcrypto_la_CPPFLAGS += -DSHA512_ASM -libcrypto_la_CPPFLAGS += -DWHIRLPOOL_ASM -libcrypto_la_CPPFLAGS += -DOPENSSL_CPUID_OBJ + libcrypto_la_SOURCES += $(ASM_X86_64_MINGW64) endif diff --git a/crypto/arch/aarch64/crypto_cpu_caps_darwin.c b/crypto/arch/aarch64/crypto_cpu_caps_darwin.c new file mode 100644 index 0000000000..1dd91b20a8 --- /dev/null +++ b/crypto/arch/aarch64/crypto_cpu_caps_darwin.c @@ -0,0 +1,60 @@ +/* $OpenBSD: crypto_cpu_caps.c,v 1.2 2024/11/12 13:52:31 jsing Exp $ */ +/* + * Copyright (c) 2025 Brent Cook + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include "crypto_arch.h" + +/* Machine dependent CPU capabilities. */ +uint64_t crypto_cpu_caps_aarch64; + +static uint64_t +check_cpu_cap(const char *cap_name, uint64_t cap_flag) +{ + int has_cap = 0; + size_t len = sizeof(has_cap); + + sysctlbyname(cap_name, &has_cap, &len, NULL, 0); + + return has_cap ? cap_flag : 0; +} + +void +crypto_cpu_caps_init(void) +{ + crypto_cpu_caps_aarch64 = 0; + + /* from https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3918855 */ + + crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_AES", + CRYPTO_CPU_CAPS_AARCH64_AES); + + crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_PMULL", + CRYPTO_CPU_CAPS_AARCH64_PMULL); + + crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_SHA1", + CRYPTO_CPU_CAPS_AARCH64_SHA1); + + crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_SHA256", + CRYPTO_CPU_CAPS_AARCH64_SHA2); + + crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_SHA512", + CRYPTO_CPU_CAPS_AARCH64_SHA512); + + crypto_cpu_caps_aarch64 |= check_cpu_cap("hw.optional.arm.FEAT_SHA3", + CRYPTO_CPU_CAPS_AARCH64_SHA3); +} diff --git a/crypto/arch/aarch64/crypto_cpu_caps_linux.c b/crypto/arch/aarch64/crypto_cpu_caps_linux.c new file mode 100644 index 0000000000..ae28120bb8 --- /dev/null +++ b/crypto/arch/aarch64/crypto_cpu_caps_linux.c @@ -0,0 +1,62 @@ +/* $OpenBSD: crypto_cpu_caps.c,v 1.2 2024/11/12 13:52:31 jsing Exp $ */ +/* + * Copyright (c) 2025 Brent Cook + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +/* from arch/arm64/include/uapi/asm/hwcap.h */ +#define HWCAP_AES (1 << 3) +#define HWCAP_PMULL (1 << 4) +#define HWCAP_SHA1 (1 << 5) +#define HWCAP_SHA2 (1 << 6) +#define HWCAP_CRC32 (1 << 7) +#define HWCAP_SHA3 (1 << 17) +#define HWCAP_SHA512 (1 << 21) + +#include "crypto_arch.h" + +/* Machine dependent CPU capabilities. */ +uint64_t crypto_cpu_caps_aarch64; + +static uint64_t +check_cpu_cap(unsigned long hwcap, uint64_t cap_flag) +{ + return (getauxval(AT_HWCAP) & hwcap) ? cap_flag : 0; +} + +void +crypto_cpu_caps_init(void) +{ + crypto_cpu_caps_aarch64 = 0; + + crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_AES, + CRYPTO_CPU_CAPS_AARCH64_AES); + + crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_PMULL, + CRYPTO_CPU_CAPS_AARCH64_PMULL); + + crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA1, + CRYPTO_CPU_CAPS_AARCH64_SHA1); + + crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA2, + CRYPTO_CPU_CAPS_AARCH64_SHA2); + + crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA512, + CRYPTO_CPU_CAPS_AARCH64_SHA512); + + crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA3, + CRYPTO_CPU_CAPS_AARCH64_SHA3); +} diff --git a/crypto/arch/aarch64/crypto_cpu_caps_none.c b/crypto/arch/aarch64/crypto_cpu_caps_none.c new file mode 100644 index 0000000000..dcd96b7ef3 --- /dev/null +++ b/crypto/arch/aarch64/crypto_cpu_caps_none.c @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2025 Brent Cook + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "crypto_arch.h" + +/* Machine dependent CPU capabilities. */ +uint64_t crypto_cpu_caps_aarch64; + +void +crypto_cpu_caps_init(void) +{ + crypto_cpu_caps_aarch64 = 0; +} diff --git a/crypto/arch/aarch64/crypto_cpu_caps_windows.c b/crypto/arch/aarch64/crypto_cpu_caps_windows.c new file mode 100644 index 0000000000..e7cddedfc1 --- /dev/null +++ b/crypto/arch/aarch64/crypto_cpu_caps_windows.c @@ -0,0 +1,36 @@ +/* $OpenBSD: crypto_cpu_caps.c,v 1.2 2024/11/12 13:52:31 jsing Exp $ */ +/* + * Copyright (c) 2025 Brent Cook + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include "crypto_arch.h" + +/* Machine dependent CPU capabilities. */ +uint64_t crypto_cpu_caps_aarch64; + +void +crypto_cpu_caps_init(void) +{ + crypto_cpu_caps_aarch64 = 0; + + if (IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE)) { + crypto_cpu_caps_aarch64 |= CRYPTO_CPU_CAPS_AARCH64_AES; + crypto_cpu_caps_aarch64 |= CRYPTO_CPU_CAPS_AARCH64_PMULL; + crypto_cpu_caps_aarch64 |= CRYPTO_CPU_CAPS_AARCH64_SHA1; + crypto_cpu_caps_aarch64 |= CRYPTO_CPU_CAPS_AARCH64_SHA2; + } +} diff --git a/crypto/arch/loongarch64/crypto_arch.h b/crypto/arch/loongarch64/crypto_arch.h new file mode 100644 index 0000000000..a3dd98d0ce --- /dev/null +++ b/crypto/arch/loongarch64/crypto_arch.h @@ -0,0 +1,21 @@ +/* $OpenBSD: crypto_arch.h,v 1.1 2024/08/11 13:02:39 jsing Exp $ */ +/* + * Copyright (c) 2024 Joel Sing + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef HEADER_CRYPTO_ARCH_H +#define HEADER_CRYPTO_ARCH_H + +#endif diff --git a/crypto/arch/mips/crypto_arch.h b/crypto/arch/mips/crypto_arch.h new file mode 100644 index 0000000000..2407503b3b --- /dev/null +++ b/crypto/arch/mips/crypto_arch.h @@ -0,0 +1,39 @@ +/* $OpenBSD$ */ +/* + * Copyright (c) 2024 Joel Sing + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef HEADER_CRYPTO_ARCH_H +#define HEADER_CRYPTO_ARCH_H + +#ifndef OPENSSL_NO_ASM + +#ifdef LIBRESSL_USE_AES_ASSEMBLY +#define HAVE_AES_SET_ENCRYPT_KEY_INTERNAL +#define HAVE_AES_SET_DECRYPT_KEY_INTERNAL +#define HAVE_AES_ENCRYPT_INTERNAL +#define HAVE_AES_DECRYPT_INTERNAL +#endif + +#ifdef LIBRESSL_USE_SHA_ASSEMBLY +#define HAVE_SHA1_BLOCK_DATA_ORDER +#define HAVE_SHA1_BLOCK_GENERIC +#define HAVE_SHA256_BLOCK_DATA_ORDER +#define HAVE_SHA256_BLOCK_GENERIC +#endif + +#endif + +#endif diff --git a/crypto/bn/arch/loongarch64/bn_arch.h b/crypto/bn/arch/loongarch64/bn_arch.h new file mode 100644 index 0000000000..672ac12028 --- /dev/null +++ b/crypto/bn/arch/loongarch64/bn_arch.h @@ -0,0 +1,23 @@ +/* $OpenBSD: bn_arch.h,v 1.7 2023/07/09 10:37:32 jsing Exp $ */ +/* + * Copyright (c) 2023 Joel Sing + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#ifndef HEADER_BN_ARCH_H +#define HEADER_BN_ARCH_H + +#endif diff --git a/crypto/bn/arch/mips/bn_arch.h b/crypto/bn/arch/mips/bn_arch.h new file mode 100644 index 0000000000..a14b83bf20 --- /dev/null +++ b/crypto/bn/arch/mips/bn_arch.h @@ -0,0 +1,43 @@ +/* $OpenBSD: bn_arch.h,v 1.1 2023/01/20 10:04:34 jsing Exp $ */ +/* + * Copyright (c) 2023 Joel Sing + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef HEADER_BN_ARCH_H +#define HEADER_BN_ARCH_H + +#ifndef OPENSSL_NO_ASM + +#ifdef LIBRESSL_USE_BN_ASSEMBLY + +#define HAVE_BN_ADD_WORDS + +#define HAVE_BN_DIV_WORDS +#define HAVE_BN_DIV_3_WORDS + +#define HAVE_BN_MUL_COMBA4 +#define HAVE_BN_MUL_COMBA8 +#define HAVE_BN_MULW_ADD_WORDS +#define HAVE_BN_MULW_WORDS + +#define HAVE_BN_SQR_COMBA4 +#define HAVE_BN_SQR_COMBA8 + +#define HAVE_BN_SUB_WORDS + +#endif + +#endif +#endif diff --git a/crypto/compat/.gitignore b/crypto/compat/.gitignore new file mode 100644 index 0000000000..7f050493ca --- /dev/null +++ b/crypto/compat/.gitignore @@ -0,0 +1,31 @@ +arc4random.c +arc4random_aix.h +arc4random_freebsd.h +arc4random_hpux.h +arc4random_linux.h +arc4random_netbsd.h +arc4random_osx.h +arc4random_solaris.h +arc4random_uniform.c +arc4random_win.h +chacha_private.h +explicit_bzero.c +getentropy_aix.c +getentropy_freebsd.c +getentropy_hpux.c +getentropy_linux.c +getentropy_netbsd.c +getentropy_osx.c +getentropy_solaris.c +getentropy_win.c +reallocarray.c +recallocarray.c +strcasecmp.c +strlcat.c +strlcpy.c +strndup.c +strnlen.c +strsep.c +strtonum.c +timingsafe_bcmp.c +timingsafe_memcmp.c diff --git a/crypto/compat/arc4random.h b/crypto/compat/arc4random.h index ffa32398d9..fbf2dce5de 100644 --- a/crypto/compat/arc4random.h +++ b/crypto/compat/arc4random.h @@ -30,6 +30,9 @@ #elif defined(_WIN32) #include "arc4random_win.h" +#elif defined(__EMSCRIPTEN__) +#include "arc4random_linux.h" + #else #error "No arc4random hooks defined for this platform." diff --git a/crypto/compat/b_win.c b/crypto/compat/b_win.c index e261cd2c42..45af8397ad 100644 --- a/crypto/compat/b_win.c +++ b/crypto/compat/b_win.c @@ -8,7 +8,8 @@ #include #include -#include + +#include "err_local.h" int BIO_sock_init(void) @@ -29,7 +30,7 @@ BIO_sock_init(void) } wsa_init_done = 1; } - return (1); + return (1); } void diff --git a/crypto/compat/getdelim.c b/crypto/compat/getdelim.c new file mode 100644 index 0000000000..bf4889f4ac --- /dev/null +++ b/crypto/compat/getdelim.c @@ -0,0 +1,86 @@ +/*- + * Copyright (c) 2011 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Christos Zoulas. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include + +#ifndef HAVE_GETDELIM + +ssize_t +getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp) +{ + char *ptr, *eptr, *nbuf; + size_t nbufsiz; + + + if (*buf == NULL || *bufsiz < 2) { + nbufsiz = BUFSIZ; + if ((nbuf = realloc(*buf, nbufsiz)) == NULL) + return -1; + *buf = nbuf; + *bufsiz = nbufsiz; + } + + for (ptr = *buf, eptr = *buf + *bufsiz;;) { + int c = fgetc(fp); + if (c == -1) { + if (feof(fp)) { + ssize_t diff = (ssize_t)(ptr - *buf); + if (diff != 0) { + *ptr = '\0'; + return diff; + } + } + return -1; + } + *ptr++ = c; + if (c == delimiter) { + *ptr = '\0'; + return ptr - *buf; + } + if (ptr + 2 >= eptr) { + ssize_t d = ptr - *buf; + if (*bufsiz > SIZE_MAX / 2) { + errno = EOVERFLOW; + return -1; + } + nbufsiz = *bufsiz * 2; + if ((nbuf = realloc(*buf, nbufsiz)) == NULL) + return -1; + *buf = nbuf; + *bufsiz = nbufsiz; + eptr = nbuf + nbufsiz; + ptr = nbuf + d; + } + } +} + +#endif /* HAVE_GETDELIM */ diff --git a/crypto/compat/getline.c b/crypto/compat/getline.c new file mode 100644 index 0000000000..e6ecde02bb --- /dev/null +++ b/crypto/compat/getline.c @@ -0,0 +1,40 @@ +/*- + * Copyright (c) 2011 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Christos Zoulas. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#ifndef HAVE_GETLINE + +ssize_t +getline(char **buf, size_t *bufsiz, FILE *fp) +{ + return getdelim(buf, bufsiz, '\n', fp); +} + +#endif /* HAVE_GETLINE */ diff --git a/crypto/compat/getopt_long.c b/crypto/compat/getopt_long.c new file mode 100644 index 0000000000..546c541b4c --- /dev/null +++ b/crypto/compat/getopt_long.c @@ -0,0 +1,528 @@ +/* $OpenBSD: getopt_long.c,v 1.32 2020/05/27 22:25:09 schwarze Exp $ */ +/* $NetBSD: getopt_long.c,v 1.15 2002/01/31 22:43:40 tv Exp $ */ + +/* + * Copyright (c) 2002 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Sponsored in part by the Defense Advanced Research Projects + * Agency (DARPA) and Air Force Research Laboratory, Air Force + * Materiel Command, USAF, under agreement number F39502-99-1-0512. + */ +/*- + * Copyright (c) 2000 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dieter Baron and Thomas Klausner. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +struct option { + /* name of long option */ + const char *name; + /* + * one of no_argument, required_argument, and optional_argument: + * whether option takes an argument + */ + int has_arg; + /* if not NULL, set *flag to val when option found */ + int *flag; + /* if flag not NULL, value to set *flag to; else return value */ + int val; +}; + +int opterr = 1; /* if error message should be printed */ +int optind = 1; /* index into parent argv vector */ +int optopt = '?'; /* character checked for validity */ +int optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ + +#if 0 +/* DEF_* only work on initialized (non-COMMON) variables */ +#endif + +#define PRINT_ERROR ((opterr) && (*options != ':')) + +#define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */ +#define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */ +#define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */ + +/* return values */ +#define BADCH (int)'?' +#define BADARG ((*options == ':') ? (int)':' : (int)'?') +#define INORDER (int)1 + +#define EMSG "" + +static int getopt_internal(int, char * const *, const char *, + const struct option *, int *, int); +static int parse_long_options(char * const *, const char *, + const struct option *, int *, int, int); +static int gcd(int, int); +static void permute_args(int, int, int, char * const *); + +static char *place = EMSG; /* option letter processing */ + +/* XXX: set optreset to 1 rather than these two */ +static int nonopt_start = -1; /* first non option argument (for permute) */ +static int nonopt_end = -1; /* first option after non options (for permute) */ + +/* Error messages */ +static const char recargchar[] = "option requires an argument -- %c"; +static const char recargstring[] = "option requires an argument -- %s"; +static const char ambig[] = "ambiguous option -- %.*s"; +static const char noarg[] = "option doesn't take an argument -- %.*s"; +static const char illoptchar[] = "unknown option -- %c"; +static const char illoptstring[] = "unknown option -- %s"; + +/* + * Compute the greatest common divisor of a and b. + */ +static int +gcd(int a, int b) +{ + int c; + + c = a % b; + while (c != 0) { + a = b; + b = c; + c = a % b; + } + + return (b); +} + +/* + * Exchange the block from nonopt_start to nonopt_end with the block + * from nonopt_end to opt_end (keeping the same order of arguments + * in each block). + */ +static void +permute_args(int panonopt_start, int panonopt_end, int opt_end, + char * const *nargv) +{ + int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos; + char *swap; + + /* + * compute lengths of blocks and number and size of cycles + */ + nnonopts = panonopt_end - panonopt_start; + nopts = opt_end - panonopt_end; + ncycle = gcd(nnonopts, nopts); + cyclelen = (opt_end - panonopt_start) / ncycle; + + for (i = 0; i < ncycle; i++) { + cstart = panonopt_end+i; + pos = cstart; + for (j = 0; j < cyclelen; j++) { + if (pos >= panonopt_end) + pos -= nnonopts; + else + pos += nopts; + swap = nargv[pos]; + ((char **)nargv)[pos] = nargv[cstart]; + ((char **)nargv)[cstart] = swap; + } + } +} + +/* + * parse_long_options -- + * Parse long options in argc/argv argument vector. + * Returns -1 if short_too is set and the option does not match long_options. + */ +static int +parse_long_options(char * const *nargv, const char *options, + const struct option *long_options, int *idx, int short_too, int flags) +{ + char *current_argv, *has_equal; + size_t current_argv_len; + int i, match, exact_match, second_partial_match; + + current_argv = place; + match = -1; + exact_match = 0; + second_partial_match = 0; + + optind++; + + if ((has_equal = strchr(current_argv, '=')) != NULL) { + /* argument found (--option=arg) */ + current_argv_len = has_equal - current_argv; + has_equal++; + } else + current_argv_len = strlen(current_argv); + + for (i = 0; long_options[i].name; i++) { + /* find matching long option */ + if (strncmp(current_argv, long_options[i].name, + current_argv_len)) + continue; + + if (strlen(long_options[i].name) == current_argv_len) { + /* exact match */ + match = i; + exact_match = 1; + break; + } + /* + * If this is a known short option, don't allow + * a partial match of a single character. + */ + if (short_too && current_argv_len == 1) + continue; + + if (match == -1) /* first partial match */ + match = i; + else if ((flags & FLAG_LONGONLY) || + long_options[i].has_arg != long_options[match].has_arg || + long_options[i].flag != long_options[match].flag || + long_options[i].val != long_options[match].val) + second_partial_match = 1; + } + if (!exact_match && second_partial_match) { + /* ambiguous abbreviation */ + if (PRINT_ERROR) + warnx(ambig, (int)current_argv_len, current_argv); + optopt = 0; + return (BADCH); + } + if (match != -1) { /* option found */ + if (long_options[match].has_arg == no_argument + && has_equal) { + if (PRINT_ERROR) + warnx(noarg, (int)current_argv_len, + current_argv); + /* + * XXX: GNU sets optopt to val regardless of flag + */ + if (long_options[match].flag == NULL) + optopt = long_options[match].val; + else + optopt = 0; + return (BADARG); + } + if (long_options[match].has_arg == required_argument || + long_options[match].has_arg == optional_argument) { + if (has_equal) + optarg = has_equal; + else if (long_options[match].has_arg == + required_argument) { + /* + * optional argument doesn't use next nargv + */ + optarg = nargv[optind++]; + } + } + if ((long_options[match].has_arg == required_argument) + && (optarg == NULL)) { + /* + * Missing argument; leading ':' indicates no error + * should be generated. + */ + if (PRINT_ERROR) + warnx(recargstring, + current_argv); + /* + * XXX: GNU sets optopt to val regardless of flag + */ + if (long_options[match].flag == NULL) + optopt = long_options[match].val; + else + optopt = 0; + --optind; + return (BADARG); + } + } else { /* unknown option */ + if (short_too) { + --optind; + return (-1); + } + if (PRINT_ERROR) + warnx(illoptstring, current_argv); + optopt = 0; + return (BADCH); + } + if (idx) + *idx = match; + if (long_options[match].flag) { + *long_options[match].flag = long_options[match].val; + return (0); + } else + return (long_options[match].val); +} + +/* + * getopt_internal -- + * Parse argc/argv argument vector. Called by user level routines. + */ +static int +getopt_internal(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx, int flags) +{ + char *oli; /* option letter list index */ + int optchar, short_too; + static int posixly_correct = -1; + + if (options == NULL) + return (-1); + + /* + * XXX Some GNU programs (like cvs) set optind to 0 instead of + * XXX using optreset. Work around this braindamage. + */ + if (optind == 0) + optind = optreset = 1; + + /* + * Disable GNU extensions if POSIXLY_CORRECT is set or options + * string begins with a '+'. + */ + if (posixly_correct == -1 || optreset) + posixly_correct = (getenv("POSIXLY_CORRECT") != NULL); + if (*options == '-') + flags |= FLAG_ALLARGS; + else if (posixly_correct || *options == '+') + flags &= ~FLAG_PERMUTE; + if (*options == '+' || *options == '-') + options++; + + optarg = NULL; + if (optreset) + nonopt_start = nonopt_end = -1; +start: + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc) { /* end of argument vector */ + place = EMSG; + if (nonopt_end != -1) { + /* do permutation, if we have to */ + permute_args(nonopt_start, nonopt_end, + optind, nargv); + optind -= nonopt_end - nonopt_start; + } + else if (nonopt_start != -1) { + /* + * If we skipped non-options, set optind + * to the first of them. + */ + optind = nonopt_start; + } + nonopt_start = nonopt_end = -1; + return (-1); + } + if (*(place = nargv[optind]) != '-' || + (place[1] == '\0' && strchr(options, '-') == NULL)) { + place = EMSG; /* found non-option */ + if (flags & FLAG_ALLARGS) { + /* + * GNU extension: + * return non-option as argument to option 1 + */ + optarg = nargv[optind++]; + return (INORDER); + } + if (!(flags & FLAG_PERMUTE)) { + /* + * If no permutation wanted, stop parsing + * at first non-option. + */ + return (-1); + } + /* do permutation */ + if (nonopt_start == -1) + nonopt_start = optind; + else if (nonopt_end != -1) { + permute_args(nonopt_start, nonopt_end, + optind, nargv); + nonopt_start = optind - + (nonopt_end - nonopt_start); + nonopt_end = -1; + } + optind++; + /* process next argument */ + goto start; + } + if (nonopt_start != -1 && nonopt_end == -1) + nonopt_end = optind; + + /* + * If we have "-" do nothing, if "--" we are done. + */ + if (place[1] != '\0' && *++place == '-' && place[1] == '\0') { + optind++; + place = EMSG; + /* + * We found an option (--), so if we skipped + * non-options, we have to permute. + */ + if (nonopt_end != -1) { + permute_args(nonopt_start, nonopt_end, + optind, nargv); + optind -= nonopt_end - nonopt_start; + } + nonopt_start = nonopt_end = -1; + return (-1); + } + } + + /* + * Check long options if: + * 1) we were passed some + * 2) the arg is not just "-" + * 3) either the arg starts with -- we are getopt_long_only() + */ + if (long_options != NULL && place != nargv[optind] && + (*place == '-' || (flags & FLAG_LONGONLY))) { + short_too = 0; + if (*place == '-') + place++; /* --foo long option */ + else if (*place != ':' && strchr(options, *place) != NULL) + short_too = 1; /* could be short option too */ + + optchar = parse_long_options(nargv, options, long_options, + idx, short_too, flags); + if (optchar != -1) { + place = EMSG; + return (optchar); + } + } + + if ((optchar = (int)*place++) == (int)':' || + (oli = strchr(options, optchar)) == NULL) { + if (!*place) + ++optind; + if (PRINT_ERROR) + warnx(illoptchar, optchar); + optopt = optchar; + return (BADCH); + } + if (long_options != NULL && optchar == 'W' && oli[1] == ';') { + /* -W long-option */ + if (*place) /* no space */ + /* NOTHING */; + else if (++optind >= nargc) { /* no arg */ + place = EMSG; + if (PRINT_ERROR) + warnx(recargchar, optchar); + optopt = optchar; + return (BADARG); + } else /* white space */ + place = nargv[optind]; + optchar = parse_long_options(nargv, options, long_options, + idx, 0, flags); + place = EMSG; + return (optchar); + } + if (*++oli != ':') { /* doesn't take argument */ + if (!*place) + ++optind; + } else { /* takes (optional) argument */ + optarg = NULL; + if (*place) /* no white space */ + optarg = place; + else if (oli[1] != ':') { /* arg not optional */ + if (++optind >= nargc) { /* no arg */ + place = EMSG; + if (PRINT_ERROR) + warnx(recargchar, optchar); + optopt = optchar; + return (BADARG); + } else + optarg = nargv[optind]; + } + place = EMSG; + ++optind; + } + /* dump back option letter */ + return (optchar); +} + +/* + * getopt -- + * Parse argc/argv argument vector. + */ +int +getopt(int nargc, char * const *nargv, const char *options) +{ + + /* + * We don't pass FLAG_PERMUTE to getopt_internal() since + * the BSD getopt(3) (unlike GNU) has never done this. + * + * Furthermore, since many privileged programs call getopt() + * before dropping privileges it makes sense to keep things + * as simple (and bug-free) as possible. + */ + return (getopt_internal(nargc, nargv, options, NULL, NULL, 0)); +} + +/* + * getopt_long -- + * Parse argc/argv argument vector. + */ +int +getopt_long(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx) +{ + + return (getopt_internal(nargc, nargv, options, long_options, idx, + FLAG_PERMUTE)); +} + +/* + * getopt_long_only -- + * Parse argc/argv argument vector. + */ +int +getopt_long_only(int nargc, char * const *nargv, const char *options, + const struct option *long_options, int *idx) +{ + + return (getopt_internal(nargc, nargv, options, long_options, idx, + FLAG_PERMUTE|FLAG_LONGONLY)); +} diff --git a/crypto/compat/getprogname_windows.c b/crypto/compat/getprogname_windows.c index eb04ec0551..9de3cabcee 100644 --- a/crypto/compat/getprogname_windows.c +++ b/crypto/compat/getprogname_windows.c @@ -7,7 +7,8 @@ getprogname(void) { static char progname[MAX_PATH + 1]; DWORD length = GetModuleFileName(NULL, progname, sizeof (progname) - 1); - if (length < 0) + if (length == 0) return "?"; + progname[length] = '\0'; return progname; } diff --git a/crypto/compat/posix_win.c b/crypto/compat/posix_win.c index 30c93cd126..60b2896adf 100644 --- a/crypto/compat/posix_win.c +++ b/crypto/compat/posix_win.c @@ -9,8 +9,10 @@ #define NO_REDEF_POSIX_FUNCTIONS -#include +#include + #include +#include #include #include @@ -20,6 +22,25 @@ #include #include +#include + +static int +is_socket(int fd) +{ + // Border case: Don't break std* file descriptors + if (fd < 3) + return 0; + + // All locally-allocated file descriptors will have the high bit set + return (fd & 0x80000000) == 0; +} + +static int +get_real_fd(int fd) +{ + return (fd & 0x7fffffff); +} + void posix_perror(const char *s) { @@ -41,6 +62,20 @@ posix_fopen(const char *path, const char *mode) return fopen(path, mode); } +int +libressl_fstat(int fd, struct stat *statbuf) +{ + return fstat(get_real_fd(fd), statbuf); +} + +#ifndef HAVE_FTRUNCATE +int +ftruncate(int fd, off_t length) +{ + return _chsize(get_real_fd(fd), length); +} +#endif + int posix_open(const char *path, ...) { @@ -60,7 +95,14 @@ posix_open(const char *path, ...) flags |= O_NOINHERIT; } flags &= ~O_NONBLOCK; - return open(path, flags, mode); + + const int fh = open(path, flags, mode); + if (fh == -1) { + return fh; + } + + // Set high bit to mark file descriptor as a file handle + return fh + 0x80000000; } char * @@ -144,6 +186,9 @@ wsa_errno(int err) case WSAETIMEDOUT: errno = EPIPE; break; + default: + errno = EIO; + break; } return -1; } @@ -160,24 +205,29 @@ posix_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) int posix_close(int fd) { - if (closesocket(fd) == SOCKET_ERROR) { - int err = WSAGetLastError(); - return (err == WSAENOTSOCK || err == WSAEBADF || - err == WSANOTINITIALISED) ? - close(fd) : wsa_errno(err); + int rc; + if (is_socket(fd)) { + if ((rc = closesocket(fd)) == SOCKET_ERROR) { + int err = WSAGetLastError(); + rc = wsa_errno(err); + } + } else { + rc = close(get_real_fd(fd)); } - return 0; + return rc; } ssize_t posix_read(int fd, void *buf, size_t count) { - ssize_t rc = recv(fd, buf, count, 0); - if (rc == SOCKET_ERROR) { - int err = WSAGetLastError(); - return (err == WSAENOTSOCK || err == WSAEBADF || - err == WSANOTINITIALISED) ? - read(fd, buf, count) : wsa_errno(err); + ssize_t rc; + if (is_socket(fd)) { + if ((rc = recv(fd, buf, count, 0)) == SOCKET_ERROR) { + int err = WSAGetLastError(); + rc = wsa_errno(err); + } + } else { + rc = read(get_real_fd(fd), buf, count); } return rc; } @@ -185,12 +235,13 @@ posix_read(int fd, void *buf, size_t count) ssize_t posix_write(int fd, const void *buf, size_t count) { - ssize_t rc = send(fd, buf, count, 0); - if (rc == SOCKET_ERROR) { - int err = WSAGetLastError(); - return (err == WSAENOTSOCK || err == WSAEBADF || - err == WSANOTINITIALISED) ? - write(fd, buf, count) : wsa_errno(err); + ssize_t rc; + if (is_socket(fd)) { + if ((rc = send(fd, buf, count, 0)) == SOCKET_ERROR) { + rc = wsa_errno(WSAGetLastError()); + } + } else { + rc = write(get_real_fd(fd), buf, count); } return rc; } @@ -199,17 +250,32 @@ int posix_getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen) { - int rc = getsockopt(sockfd, level, optname, (char *)optval, optlen); - return rc == 0 ? 0 : wsa_errno(WSAGetLastError()); - + int rc; + if (is_socket(sockfd)) { + rc = getsockopt(sockfd, level, optname, (char *)optval, optlen); + if (rc != 0) { + rc = wsa_errno(WSAGetLastError()); + } + } else { + rc = -1; + } + return rc; } int posix_setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen) { - int rc = setsockopt(sockfd, level, optname, (char *)optval, optlen); - return rc == 0 ? 0 : wsa_errno(WSAGetLastError()); + int rc; + if (is_socket(sockfd)) { + rc = setsockopt(sockfd, level, optname, (char *)optval, optlen); + if (rc != 0) { + rc = wsa_errno(WSAGetLastError()); + } + } else { + rc = -1; + } + return rc; } uid_t getuid(void) @@ -220,7 +286,7 @@ uid_t getuid(void) #ifdef _MSC_VER struct timezone; -int gettimeofday(struct timeval * tp, struct timezone * tzp) +int gettimeofday(struct timeval *tp, void *tzp) { /* * Note: some broken versions only have 8 trailing zero's, the correct @@ -237,9 +303,8 @@ int gettimeofday(struct timeval * tp, struct timezone * tzp) time = ((uint64_t)file_time.dwLowDateTime); time += ((uint64_t)file_time.dwHighDateTime) << 32; - tp->tv_sec = (long)((time - EPOCH) / 10000000L); + tp->tv_sec = (long long)((time - EPOCH) / 10000000L); tp->tv_usec = (long)(system_time.wMilliseconds * 1000); return 0; } - #endif diff --git a/crypto/compat/syslog_r.c b/crypto/compat/syslog_r.c index d68169ddd7..30841c1b70 100644 --- a/crypto/compat/syslog_r.c +++ b/crypto/compat/syslog_r.c @@ -1,3 +1,5 @@ +#include +#include #include void @@ -14,6 +16,15 @@ void vsyslog_r(int pri, struct syslog_data *data, const char *fmt, va_list ap) { #ifdef HAVE_SYSLOG +#ifdef HAVE_VSYSLOG vsyslog(pri, fmt, ap); +#else + char *msg = NULL; + + if (vasprintf(&msg, fmt, ap) == -1) + return; + syslog(pri, "%s", msg); + free(msg); +#endif #endif } diff --git a/crypto/compat/timegm.c b/crypto/compat/timegm.c deleted file mode 100644 index 2658445fce..0000000000 --- a/crypto/compat/timegm.c +++ /dev/null @@ -1,220 +0,0 @@ -/* - * ---------------------------------------------------------------------- - * Copyright © 2005-2014 Rich Felker, et al. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * ---------------------------------------------------------------------- - */ - -#include -#include -#include - -/* 2000-03-01 (mod 400 year, immediately after feb29 */ -#define LEAPOCH (946684800LL + 86400*(31+29)) - -#define DAYS_PER_400Y (365*400 + 97) -#define DAYS_PER_100Y (365*100 + 24) -#define DAYS_PER_4Y (365*4 + 1) - -static int __month_to_secs(int month, int is_leap) -{ - static const int secs_through_month[] = { - 0, 31*86400, 59*86400, 90*86400, - 120*86400, 151*86400, 181*86400, 212*86400, - 243*86400, 273*86400, 304*86400, 334*86400 }; - int t = secs_through_month[month]; - if (is_leap && month >= 2) t+=86400; - return t; -} - -static long long __year_to_secs(long long year, int *is_leap) -{ - if (year-2ULL <= 136) { - int y = year; - int leaps = (y-68)>>2; - if (!((y-68)&3)) { - leaps--; - if (is_leap) *is_leap = 1; - } else if (is_leap) *is_leap = 0; - return 31536000*(y-70) + 86400*leaps; - } - - int cycles, centuries, leaps, rem; - - if (!is_leap) is_leap = &(int){0}; - cycles = (year-100) / 400; - rem = (year-100) % 400; - if (rem < 0) { - cycles--; - rem += 400; - } - if (!rem) { - *is_leap = 1; - centuries = 0; - leaps = 0; - } else { - if (rem >= 200) { - if (rem >= 300) centuries = 3, rem -= 300; - else centuries = 2, rem -= 200; - } else { - if (rem >= 100) centuries = 1, rem -= 100; - else centuries = 0; - } - if (!rem) { - *is_leap = 0; - leaps = 0; - } else { - leaps = rem / 4U; - rem %= 4U; - *is_leap = !rem; - } - } - - leaps += 97*cycles + 24*centuries - *is_leap; - - return (year-100) * 31536000LL + leaps * 86400LL + 946684800 + 86400; -} - -static long long __tm_to_secs(const struct tm *tm) -{ - int is_leap; - long long year = tm->tm_year; - int month = tm->tm_mon; - if (month >= 12 || month < 0) { - int adj = month / 12; - month %= 12; - if (month < 0) { - adj--; - month += 12; - } - year += adj; - } - long long t = __year_to_secs(year, &is_leap); - t += __month_to_secs(month, is_leap); - t += 86400LL * (tm->tm_mday-1); - t += 3600LL * tm->tm_hour; - t += 60LL * tm->tm_min; - t += tm->tm_sec; - return t; -} - -static int __secs_to_tm(long long t, struct tm *tm) -{ - long long days, secs; - int remdays, remsecs, remyears; - int qc_cycles, c_cycles, q_cycles; - int years, months; - int wday, yday, leap; - static const char days_in_month[] = {31,30,31,30,31,31,30,31,30,31,31,29}; - - /* Reject time_t values whose year would overflow int */ - if (t < INT_MIN * 31622400LL || t > INT_MAX * 31622400LL) - return -1; - - secs = t - LEAPOCH; - days = secs / 86400; - remsecs = secs % 86400; - if (remsecs < 0) { - remsecs += 86400; - days--; - } - - wday = (3+days)%7; - if (wday < 0) wday += 7; - - qc_cycles = days / DAYS_PER_400Y; - remdays = days % DAYS_PER_400Y; - if (remdays < 0) { - remdays += DAYS_PER_400Y; - qc_cycles--; - } - - c_cycles = remdays / DAYS_PER_100Y; - if (c_cycles == 4) c_cycles--; - remdays -= c_cycles * DAYS_PER_100Y; - - q_cycles = remdays / DAYS_PER_4Y; - if (q_cycles == 25) q_cycles--; - remdays -= q_cycles * DAYS_PER_4Y; - - remyears = remdays / 365; - if (remyears == 4) remyears--; - remdays -= remyears * 365; - - leap = !remyears && (q_cycles || !c_cycles); - yday = remdays + 31 + 28 + leap; - if (yday >= 365+leap) yday -= 365+leap; - - years = remyears + 4*q_cycles + 100*c_cycles + 400*qc_cycles; - - for (months=0; days_in_month[months] <= remdays; months++) - remdays -= days_in_month[months]; - - if (years+100 > INT_MAX || years+100 < INT_MIN) - return -1; - - tm->tm_year = years + 100; - tm->tm_mon = months + 2; - if (tm->tm_mon >= 12) { - tm->tm_mon -=12; - tm->tm_year++; - } - tm->tm_mday = remdays + 1; - tm->tm_wday = wday; - tm->tm_yday = yday; - - tm->tm_hour = remsecs / 3600; - tm->tm_min = remsecs / 60 % 60; - tm->tm_sec = remsecs % 60; - - return 0; -} - -#ifdef _WIN32 -struct tm *__gmtime_r(const time_t *t, struct tm *tm) -{ - if (__secs_to_tm(*t, tm) < 0) { - errno = EOVERFLOW; - return 0; - } - tm->tm_isdst = 0; - return tm; -} -#endif - -time_t timegm(struct tm *tm) -{ - struct tm new; - long long t = __tm_to_secs(tm); - if (__secs_to_tm(t, &new) < 0) { - errno = EOVERFLOW; - return -1; - } -#if SIZEOF_TIME_T != 8 - if (t > (long long)INT_MAX || t < (long long)INT_MIN) { - errno = EOVERFLOW; - return -1; - } -#endif - *tm = new; - tm->tm_isdst = 0; - return t; -} diff --git a/crypto/compat/ui_openssl_win.c b/crypto/compat/ui_openssl_win.c index ad9e91569d..4ae2c5dbc6 100644 --- a/crypto/compat/ui_openssl_win.c +++ b/crypto/compat/ui_openssl_win.c @@ -20,7 +20,7 @@ * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * for use in the OpenSSL Toolkit. (https://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without @@ -34,7 +34,7 @@ * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * for use in the OpenSSL Toolkit (https://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -124,24 +124,18 @@ #include #include -#include "ui_locl.h" +#include "ui_local.h" #ifndef NX509_SIG #define NX509_SIG 32 #endif -/* Define globals. They are protected by a lock */ -static void (*savsig[NX509_SIG])(int ); - DWORD console_mode; static FILE *tty_in, *tty_out; static int is_a_tty; /* Declare static functions */ static int read_till_nl(FILE *); -static void recsig(int); -static void pushsig(void); -static void popsig(void); static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl); static int read_string(UI *ui, UI_STRING *uis); @@ -152,7 +146,7 @@ static int echo_console(UI *ui); static int noecho_console(UI *ui); static int close_console(UI *ui); -static UI_METHOD ui_openssl = { +static const UI_METHOD ui_openssl = { .name = "OpenSSL default user interface", .ui_open_session = open_console, .ui_write_string = write_string, @@ -161,7 +155,7 @@ static UI_METHOD ui_openssl = { }; /* The method with all the built-in thingies */ -UI_METHOD * +const UI_METHOD * UI_OpenSSL(void) { return &ui_openssl; @@ -236,8 +230,6 @@ read_till_nl(FILE *in) return 1; } -static volatile sig_atomic_t intr_signal; - static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) { @@ -247,12 +239,9 @@ read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) int maxsize = BUFSIZ - 1; char *p; - intr_signal = 0; ok = 0; ps = 0; - pushsig(); - ps = 1; if (!echo && !noecho_console(ui)) @@ -276,16 +265,11 @@ read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) ok = 1; error: - if (intr_signal == SIGINT) - ok = -1; if (!echo) fprintf(tty_out, "\n"); if (ps >= 2 && !echo && !echo_console(ui)) ok = 0; - if (ps >= 1) - popsig(); - explicit_bzero(result, BUFSIZ); return ok; } @@ -348,32 +332,3 @@ close_console(UI *ui) return 1; } - -/* Internal functions to handle signals and act on them */ -static void -pushsig(void) -{ - savsig[SIGABRT] = signal(SIGABRT, recsig); - savsig[SIGFPE] = signal(SIGFPE, recsig); - savsig[SIGILL] = signal(SIGILL, recsig); - savsig[SIGINT] = signal(SIGINT, recsig); - savsig[SIGSEGV] = signal(SIGSEGV, recsig); - savsig[SIGTERM] = signal(SIGTERM, recsig); -} - -static void -popsig(void) -{ - signal(SIGABRT, savsig[SIGABRT]); - signal(SIGFPE, savsig[SIGFPE]); - signal(SIGILL, savsig[SIGILL]); - signal(SIGINT, savsig[SIGINT]); - signal(SIGSEGV, savsig[SIGSEGV]); - signal(SIGTERM, savsig[SIGTERM]); -} - -static void -recsig(int i) -{ - intr_signal = i; -} diff --git a/dist-win.sh b/dist-win.sh deleted file mode 100755 index e4e0fd025d..0000000000 --- a/dist-win.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -set -e -#set -x - -export PATH=/cygdrive/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio\ 12.0/VC/bin:$PATH -VERSION=`cat VERSION` -DIST=libressl-$VERSION-windows - -rm -fr $DIST -mkdir -p $DIST -autoreconf -i - -for ARCH in X86 X64; do - - if [ $ARCH = X86 ]; then - HOST=i686-w64-mingw32 - ARCHDIR=x86 - else - HOST=x86_64-w64-mingw32 - ARCHDIR=x64 - fi - - echo Building for $HOST - - CC=$HOST-gcc ./configure --host=$HOST --with-openssldir=c:/libressl/ssl - make clean - PATH=$PATH:/usr/$HOST/sys-root/mingw/bin \ - make -j 4 check - make -j 4 install DESTDIR=`pwd`/stage-$ARCHDIR - - mkdir -p $DIST/$ARCHDIR - if [ ! -e $DIST/include ]; then - cp -r stage-$ARCHDIR/usr/local/include $DIST - fi - - cp stage-$ARCHDIR/usr/local/bin/* $DIST/$ARCHDIR - - for i in libcrypto libssl libtls; do - DLL=$(basename `ls -1 $DIST/$ARCHDIR/$i*.dll`|cut -d. -f1) - echo EXPORTS > $DLL.def - dumpbin /exports $DIST/$ARCHDIR/$DLL.dll | \ - awk '{print $4}' | awk 'NF' |tail -n +9 >> $DLL.def - lib /MACHINE:$ARCH /def:$DLL.def /out:$DIST/$ARCHDIR/$DLL.lib - cv2pdb $DIST/$ARCHDIR/$DLL.dll - done -done - -zip -r $DIST.zip $DIST diff --git a/dist.sh b/dist.sh index 9a2f0010a2..9c4d35d433 100755 --- a/dist.sh +++ b/dist.sh @@ -1,7 +1,22 @@ #!/bin/sh +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# set -e rm -f man/*.[35] include/openssl/*.h ./autogen.sh ./configure -make -j2 distcheck +make -j4 distcheck diff --git a/gen-coverage-report.sh b/gen-coverage-report.sh index b11f3f9de5..6453ecbf19 100755 --- a/gen-coverage-report.sh +++ b/gen-coverage-report.sh @@ -1,3 +1,18 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# #!/bin/sh VERSION=$(cat VERSION) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 1d1a15932e..4802d13ad9 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,3 +1,18 @@ +# +# Copyright (c) 2016 Jeff Davey +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + if(ENABLE_LIBRESSL_INSTALL) install(DIRECTORY . DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} @@ -6,3 +21,11 @@ if(ENABLE_LIBRESSL_INSTALL) PATTERN "pqueue.h" EXCLUDE PATTERN "Makefile*" EXCLUDE) endif(ENABLE_LIBRESSL_INSTALL) + +file(COPY . + DESTINATION "${CMAKE_BINARY_DIR}/include" + PATTERN "CMakeLists.txt" EXCLUDE + PATTERN "compat" EXCLUDE + PATTERN "pqueue.h" EXCLUDE + PATTERN "Makefile*" EXCLUDE + PATTERN "arch" EXCLUDE) diff --git a/include/Makefile.am b/include/Makefile.am index 4184cf8814..04c9ea2e08 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1,3 +1,18 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + include $(top_srcdir)/Makefile.am.common EXTRA_DIST = CMakeLists.txt @@ -7,14 +22,17 @@ SUBDIRS = openssl noinst_HEADERS = pqueue.h noinst_HEADERS += compat/dirent.h noinst_HEADERS += compat/dirent_msvc.h +noinst_HEADERS += compat/endian.h noinst_HEADERS += compat/err.h noinst_HEADERS += compat/fcntl.h +noinst_HEADERS += compat/getopt.h noinst_HEADERS += compat/limits.h noinst_HEADERS += compat/netdb.h noinst_HEADERS += compat/poll.h noinst_HEADERS += compat/pthread.h noinst_HEADERS += compat/readpassphrase.h noinst_HEADERS += compat/resolv.h +noinst_HEADERS += compat/stdint.h noinst_HEADERS += compat/stdio.h noinst_HEADERS += compat/stdlib.h noinst_HEADERS += compat/string.h @@ -26,8 +44,6 @@ noinst_HEADERS += compat/win32netcompat.h noinst_HEADERS += compat/arpa/inet.h noinst_HEADERS += compat/arpa/nameser.h -noinst_HEADERS += compat/machine/endian.h - noinst_HEADERS += compat/netinet/in.h noinst_HEADERS += compat/netinet/ip.h noinst_HEADERS += compat/netinet/tcp.h diff --git a/include/compat/arpa/nameser.h b/include/compat/arpa/nameser.h index 0126a604a5..eff3b0d90b 100644 --- a/include/compat/arpa/nameser.h +++ b/include/compat/arpa/nameser.h @@ -4,7 +4,9 @@ */ #ifndef _WIN32 +#ifdef HAVE_ARPA_NAMESER_H #include_next +#endif #else #include diff --git a/include/compat/cet.h b/include/compat/cet.h new file mode 100644 index 0000000000..bb845deb6f --- /dev/null +++ b/include/compat/cet.h @@ -0,0 +1,19 @@ +/* + * Public domain + * cet.h compatibility shim + */ + +#ifndef LIBCOMPAT_CET_H +#define LIBCOMPAT_CET_H + +#ifndef _MSC_VER + +#ifdef __CET__ +# include_next +#else +# define _CET_ENDBR +#endif + +#endif + +#endif diff --git a/include/compat/dirent_msvc.h b/include/compat/dirent_msvc.h index 67f295f197..2689399aaf 100644 --- a/include/compat/dirent_msvc.h +++ b/include/compat/dirent_msvc.h @@ -47,6 +47,7 @@ #include #include +#include /* Indicates that d_type field is available in dirent structure */ #define _DIRENT_HAVE_D_TYPE @@ -154,7 +155,7 @@ _wopendir(const wchar_t *dirname) /* Allocate new _WDIR structure */ dirp =(_WDIR*) malloc(sizeof(struct _WDIR)); if (dirp != NULL) { - DWORD n; + DWORD n, len; /* Reset _WDIR structure */ dirp->handle = INVALID_HANDLE_VALUE; @@ -165,7 +166,8 @@ _wopendir(const wchar_t *dirname) n = GetFullPathNameW(dirname, 0, NULL, NULL); /* Allocate room for absolute directory name and search pattern */ - dirp->patt =(wchar_t*) malloc(sizeof(wchar_t) * n + 16); + if (n <= (SIZE_MAX - 16) / sizeof(wchar_t)) + dirp->patt =(wchar_t*) malloc(sizeof(wchar_t) * n + 16); if (dirp->patt) { /* @@ -173,12 +175,12 @@ _wopendir(const wchar_t *dirname) * allows rewinddir() to function correctly even when current * working directory is changed between opendir() and rewinddir(). */ - n = GetFullPathNameW(dirname, n, dirp->patt, NULL); - if (n > 0) { + len = GetFullPathNameW(dirname, n, dirp->patt, NULL); + if (len > 0 && len < n) { wchar_t *p; /* Append search pattern \* to the directory name */ - p = dirp->patt + n; + p = dirp->patt + len; if (dirp->patt < p) { switch(p[-1]) { case '\\': @@ -214,6 +216,7 @@ _wopendir(const wchar_t *dirname) } else { /* Cannot allocate memory for search pattern */ + _set_errno(ENOMEM); error = 1; } diff --git a/include/compat/endian.h b/include/compat/endian.h new file mode 100644 index 0000000000..8022e0ed8e --- /dev/null +++ b/include/compat/endian.h @@ -0,0 +1,228 @@ +/* + * Public domain + * endian.h compatibility shim + */ + +#ifndef LIBCRYPTOCOMPAT_BYTE_ORDER_H_ +#define LIBCRYPTOCOMPAT_BYTE_ORDER_H_ + +#if defined(_WIN32) + +#define LITTLE_ENDIAN 1234 +#define BIG_ENDIAN 4321 +#define PDP_ENDIAN 3412 + +/* + * Use GCC compiler defines to determine endianness. + */ +#if defined(__BYTE_ORDER__) +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define BYTE_ORDER LITTLE_ENDIAN +#else +#define BYTE_ORDER BIG_ENDIAN +#endif +#endif + +/* + * Use build system defines to determine endianness. + */ +#if !defined(BYTE_ORDER) +#if defined(HAVE_LITTLE_ENDIAN) +#define BYTE_ORDER LITTLE_ENDIAN +#elif defined(HAVE_BIG_ENDIAN) +#define BYTE_ORDER BIG_ENDIAN +#else +#error "Could not detect endianness." +#endif +#endif + +#elif defined(HAVE_ENDIAN_H) +#include_next + +#elif defined(HAVE_MACHINE_ENDIAN_H) +#include_next + +#elif defined(__sun) || defined(_AIX) || defined(__hpux) +#include +#include + +#elif defined(__sgi) +#include +#include + +#endif + +#ifndef __STRICT_ALIGNMENT +#define __STRICT_ALIGNMENT +#if defined(__i386) || defined(__i386__) || defined(__x86_64) || \ + defined(__x86_64__) || defined(__s390__) || defined(__s390x__) || \ + defined(__aarch64__) || \ + ((defined(__arm__) || defined(__arm)) && __ARM_ARCH >= 6) +#undef __STRICT_ALIGNMENT +#endif +#endif + +#if defined(__APPLE__) +#include +#define be16toh(x) OSSwapBigToHostInt16((x)) +#define htobe16(x) OSSwapHostToBigInt16((x)) +#define le32toh(x) OSSwapLittleToHostInt32((x)) +#define be32toh(x) OSSwapBigToHostInt32((x)) +#define htole32(x) OSSwapHostToLittleInt32(x) +#define htobe32(x) OSSwapHostToBigInt32(x) +#define htole64(x) OSSwapHostToLittleInt64(x) +#define htobe64(x) OSSwapHostToBigInt64(x) +#define le64toh(x) OSSwapLittleToHostInt64(x) +#define be64toh(x) OSSwapBigToHostInt64(x) +#endif /* __APPLE__ */ + +#if defined(_WIN32) && !defined(HAVE_ENDIAN_H) +#include + +#define be16toh(x) ntohs((x)) +#define htobe16(x) htons((x)) +#define le32toh(x) (x) +#define be32toh(x) ntohl((x)) +#define htole32(x) (x) +#define htobe32(x) ntohl((x)) +#define be64toh(x) ntohll((x)) + +#if !defined(ntohll) +#define ntohll(x) \ + ((1 == htonl(1)) \ + ? (x) \ + : ((uint64_t)ntohl((x)&0xFFFFFFFF) << 32) | ntohl((x) >> 32)) +#endif +#if !defined(htonll) +#define htonll(x) \ + ((1 == ntohl(1)) \ + ? (x) \ + : ((uint64_t)htonl((x)&0xFFFFFFFF) << 32) | htonl((x) >> 32)) +#endif + +#define htobe64(x) ntohll((x)) +#define htole64(x) (x) +#define le64toh(x) (x) +#endif /* _WIN32 && !HAVE_ENDIAN_H */ + +#ifdef __linux__ +#if !defined(betoh16) +#define betoh16(x) be16toh(x) +#endif +#if !defined(betoh32) +#define betoh32(x) be32toh(x) +#endif +#if !defined(betoh64) +#define betoh64(x) be64toh(x) +#endif +#endif /* __linux__ */ + +#if defined(__FreeBSD__) +#if !defined(HAVE_ENDIAN_H) +#include +#endif +#if !defined(betoh16) +#define betoh16(x) be16toh(x) +#endif +#if !defined(betoh32) +#define betoh32(x) be32toh(x) +#endif +#if !defined(betoh64) +#define betoh64(x) be64toh(x) +#endif +#endif + +#if defined(__NetBSD__) +#if !defined(betoh16) +#define betoh16(x) be16toh(x) +#endif +#if !defined(betoh32) +#define betoh32(x) be32toh(x) +#endif +#if !defined(betoh64) +#define betoh64(x) be64toh(x) +#endif +#endif + +#if defined(__sun) +#include +#define be16toh(x) BE_16(x) +#define htobe16(x) BE_16(x) +#define le32toh(x) LE_32(x) +#define be32toh(x) BE_32(x) +#define htole32(x) LE_32(x) +#define htobe32(x) BE_32(x) +#define be64toh(x) BE_64(x) +#define le64toh(x) LE_64(x) +#define htole64(x) LE_64(x) +#define htobe64(x) BE_64(x) +#endif + +#ifdef _AIX /* AIX is always big endian */ +#include +#include + +static inline uint64_t htole64(uint64_t x) { +#ifdef __BYTE_ORDER__ +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + return x; +#else + return ((uint64_t)x << 56) | + (((uint64_t)x & 0xFF00ULL) << 40) | + (((uint64_t)x & 0xFF0000ULL) << 24) | + (((uint64_t)x & 0xFF000000ULL) << 8) | + (((uint64_t)x & 0xFF00000000ULL) >> 8) | + (((uint64_t)x & 0xFF0000000000ULL) >> 24) | + (((uint64_t)x & 0xFF000000000000ULL) >> 40) | + ((uint64_t)x >> 56); +#endif +#else + /* Fallback for systems without __BYTE_ORDER__ */ + union { + uint64_t u64; + unsigned char bytes[8]; + } val; + val.bytes[0] = (unsigned char)x; + val.bytes[1] = (unsigned char)(x >> 8); + val.bytes[2] = (unsigned char)(x >> 16); + val.bytes[3] = (unsigned char)(x >> 24); + val.bytes[4] = (unsigned char)(x >> 32); + val.bytes[5] = (unsigned char)(x >> 40); + val.bytes[6] = (unsigned char)(x >> 48); + val.bytes[7] = (unsigned char)(x >> 56); + return val.u64; +#endif +} + +#define be64toh(x) (x) +#define be32toh(x) (x) +#define be16toh(x) (x) +#define le32toh(x) \ + ((((x) & 0xff) << 24) | \ + (((x) & 0xff00) << 8) | \ + (((x) & 0xff0000) >> 8) | \ + (((x) & 0xff000000) >> 24)) +#define le64toh(x) \ + ((((x) & 0x00000000000000ffL) << 56) | \ + (((x) & 0x000000000000ff00L) << 40) | \ + (((x) & 0x0000000000ff0000L) << 24) | \ + (((x) & 0x00000000ff000000L) << 8) | \ + (((x) & 0x000000ff00000000L) >> 8) | \ + (((x) & 0x0000ff0000000000L) >> 24) | \ + (((x) & 0x00ff000000000000L) >> 40) | \ + (((x) & 0xff00000000000000L) >> 56)) +#ifndef htobe64 +#define htobe64(x) be64toh(x) +#endif +#ifndef htobe32 +#define htobe32(x) be32toh(x) +#endif +#ifndef htobe16 +#define htobe16(x) be16toh(x) +#endif +#ifndef htole32 +#define htole32(x) le32toh(x) +#endif +#endif + +#endif diff --git a/include/compat/err.h b/include/compat/err.h index 8b5b635742..945a75d61d 100644 --- a/include/compat/err.h +++ b/include/compat/err.h @@ -72,16 +72,22 @@ warn(const char *fmt, ...) fprintf(stderr, "%s\n", strerror(sverrno)); } +static inline void +vwarnx(const char *fmt, va_list args) +{ + if (fmt != NULL) + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); +} + static inline void warnx(const char *fmt, ...) { va_list ap; va_start(ap, fmt); - if (fmt != NULL) - vfprintf(stderr, fmt, ap); + vwarnx(fmt, ap); va_end(ap); - fprintf(stderr, "\n"); } #endif diff --git a/include/compat/getopt.h b/include/compat/getopt.h new file mode 100644 index 0000000000..8cc3207f38 --- /dev/null +++ b/include/compat/getopt.h @@ -0,0 +1,50 @@ +/* $OpenBSD: getopt.h,v 1.3 2013/11/22 21:32:49 millert Exp $ */ +/* $NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $ */ + +/*- + * Copyright (c) 2000 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dieter Baron and Thomas Klausner. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_GETOPT + +#include_next + +#else + +#ifndef _GETOPT_DEFINED_ +#define _GETOPT_DEFINED_ +int getopt(int, char * const *, const char *); + +extern char *optarg; /* getopt(3) external variables */ +extern int opterr; +extern int optind; +extern int optopt; +extern int optreset; +#endif + +#endif /* HAVE_GETOPT */ diff --git a/include/compat/machine/endian.h b/include/compat/machine/endian.h deleted file mode 100644 index 4dcb60d37a..0000000000 --- a/include/compat/machine/endian.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Public domain - * machine/endian.h compatibility shim - */ - -#ifndef LIBCRYPTOCOMPAT_BYTE_ORDER_H_ -#define LIBCRYPTOCOMPAT_BYTE_ORDER_H_ - -#if defined(_WIN32) - -#define LITTLE_ENDIAN 1234 -#define BIG_ENDIAN 4321 -#define PDP_ENDIAN 3412 - -/* - * Use GCC and Visual Studio compiler defines to determine endian. - */ -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -#define BYTE_ORDER LITTLE_ENDIAN -#else -#define BYTE_ORDER BIG_ENDIAN -#endif - -#elif defined(__linux__) || defined(__midipix__) -#include - -#elif defined(__sun) || defined(_AIX) || defined(__hpux) -#include -#include - -#elif defined(__sgi) -#include -#include - -#else -#include_next - -#endif - -#ifndef __STRICT_ALIGNMENT -#define __STRICT_ALIGNMENT -#if defined(__i386) || defined(__i386__) || \ - defined(__x86_64) || defined(__x86_64__) || \ - defined(__s390__) || defined(__s390x__) || \ - defined(__aarch64__) || \ - ((defined(__arm__) || defined(__arm)) && __ARM_ARCH >= 6) -#undef __STRICT_ALIGNMENT -#endif -#endif - -#endif diff --git a/include/compat/netinet/ip.h b/include/compat/netinet/ip.h index 6019f7dcd1..100e00665c 100644 --- a/include/compat/netinet/ip.h +++ b/include/compat/netinet/ip.h @@ -8,7 +8,9 @@ #endif #ifndef _WIN32 +#ifdef HAVE_NETINET_IP_H #include_next +#endif #else #include #endif @@ -42,6 +44,10 @@ #define IPTOS_DSCP_AF43 0x98 #endif +#ifndef IPTOS_DSCP_VA +#define IPTOS_DSCP_VA 0xb0 +#endif + #ifndef IPTOS_DSCP_EF #define IPTOS_DSCP_EF 0xb8 #endif diff --git a/include/compat/pthread.h b/include/compat/pthread.h old mode 100755 new mode 100644 index 1ab011c396..7702dcd543 --- a/include/compat/pthread.h +++ b/include/compat/pthread.h @@ -30,20 +30,25 @@ struct pthread_once { }; typedef struct pthread_once pthread_once_t; +struct _pthread_win32_cb_arg { + void (*cb)(void); +}; + static inline BOOL CALLBACK _pthread_once_win32_cb(PINIT_ONCE once, PVOID param, PVOID *context) { - void (*cb) (void) = param; - cb(); + struct _pthread_win32_cb_arg *arg = param; + arg->cb(); return TRUE; } static inline int pthread_once(pthread_once_t *once, void (*cb) (void)) { - BOOL rc = InitOnceExecuteOnce(&once->once, _pthread_once_win32_cb, cb, NULL); + struct _pthread_win32_cb_arg arg = { .cb = cb }; + BOOL rc = InitOnceExecuteOnce(&once->once, _pthread_once_win32_cb, &arg, NULL); if (rc == 0) - return -1; + return EINVAL; else return 0; } @@ -105,8 +110,11 @@ pthread_mutex_unlock(pthread_mutex_t *mutex) static inline int pthread_mutex_destroy(pthread_mutex_t *mutex) { - DeleteCriticalSection(mutex->lock); - free(mutex->lock); + if (mutex->lock != NULL) { + DeleteCriticalSection(mutex->lock); + free(mutex->lock); + mutex->lock = NULL; + } return 0; } diff --git a/include/compat/resolv.h b/include/compat/resolv.h index 42dec07b64..b8044605c1 100644 --- a/include/compat/resolv.h +++ b/include/compat/resolv.h @@ -12,7 +12,7 @@ #else #include <../include/resolv.h> #endif -#else +#elif defined(HAVE_RESOLV_H) #include_next #endif diff --git a/include/compat/stdint.h b/include/compat/stdint.h index 282915187f..dbe3539c5d 100644 --- a/include/compat/stdint.h +++ b/include/compat/stdint.h @@ -16,4 +16,16 @@ #include #endif +#if !defined(HAVE_ATTRIBUTE__BOUNDED__) && !defined(__bounded__) +# define __bounded__(x, y, z) +#endif + +#if !defined(HAVE_ATTRIBUTE__DEAD) && !defined(__dead) +#ifdef _MSC_VER +#define __dead __declspec(noreturn) +#else +#define __dead __attribute__((__noreturn__)) +#endif +#endif + #endif diff --git a/include/compat/stdio.h b/include/compat/stdio.h index d5725c9ac9..d9b87253d2 100644 --- a/include/compat/stdio.h +++ b/include/compat/stdio.h @@ -18,9 +18,23 @@ #include_next #endif +#ifndef HAVE_GETDELIM +#include +#define getdelim libressl_getdelim +ssize_t getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp); +#endif + +#ifndef HAVE_GETLINE +#include +#define getline libressl_getline +ssize_t getline(char **buf, size_t *bufsiz, FILE *fp); +#endif + #ifndef HAVE_ASPRINTF #include +#define vasprintf libressl_vasprintf int vasprintf(char **str, const char *fmt, va_list ap); +#define asprintf libressl_asprintf int asprintf(char **str, const char *fmt, ...); #endif @@ -42,8 +56,26 @@ int posix_rename(const char *oldpath, const char *newpath); #define rename(oldpath, newpath) posix_rename(oldpath, newpath) #endif -#ifdef _MSC_VER -#define snprintf _snprintf +#if defined(_MSC_VER) && _MSC_VER < 1900 +#include + +static inline int +libressl_snprintf(char *str, size_t size, const char *format, ...) +{ + va_list ap; + int ret; + + va_start(ap, format); + ret = _vsnprintf(str, size, format, ap); + va_end(ap); + + /* _vsnprintf does not NUL-terminate when the output is truncated. */ + if (size != 0) + str[size - 1] = '\0'; + + return ret; +} +#define snprintf libressl_snprintf #endif #endif diff --git a/include/compat/stdlib.h b/include/compat/stdlib.h index 2eaea244c0..76dc07c35a 100644 --- a/include/compat/stdlib.h +++ b/include/compat/stdlib.h @@ -20,26 +20,36 @@ #include #ifndef HAVE_ARC4RANDOM_BUF +#define arc4random libressl_arc4random uint32_t arc4random(void); +#define arc4random_buf libressl_arc4random_buf void arc4random_buf(void *_buf, size_t n); +#define arc4random_uniform libressl_arc4random_uniform uint32_t arc4random_uniform(uint32_t upper_bound); #endif #ifndef HAVE_FREEZERO +#define freezero libressl_freezero void freezero(void *ptr, size_t sz); #endif #ifndef HAVE_GETPROGNAME +#define getprogname libressl_getprogname const char * getprogname(void); #endif +#ifndef HAVE_REALLOCARRAY +#define reallocarray libressl_reallocarray void *reallocarray(void *, size_t, size_t); +#endif #ifndef HAVE_RECALLOCARRAY +#define recallocarray libressl_recallocarray void *recallocarray(void *, size_t, size_t, size_t); #endif #ifndef HAVE_STRTONUM +#define strtonum libressl_strtonum long long strtonum(const char *nptr, long long minval, long long maxval, const char **errstr); #endif diff --git a/include/compat/string.h b/include/compat/string.h index 4bf7519b5b..6a82793f62 100644 --- a/include/compat/string.h +++ b/include/compat/string.h @@ -27,43 +27,54 @@ #endif #ifndef HAVE_STRCASECMP +#define strcasecmp libressl_strcasecmp int strcasecmp(const char *s1, const char *s2); +#define strncasecmp libressl_strncasecmp int strncasecmp(const char *s1, const char *s2, size_t len); #endif #ifndef HAVE_STRLCPY +#define strlcpy libressl_strlcpy size_t strlcpy(char *dst, const char *src, size_t siz); #endif #ifndef HAVE_STRLCAT +#define strlcat libressl_strlcat size_t strlcat(char *dst, const char *src, size_t siz); #endif #ifndef HAVE_STRNDUP +#define strndup libressl_strndup char * strndup(const char *str, size_t maxlen); /* the only user of strnlen is strndup, so only build it if needed */ #ifndef HAVE_STRNLEN +#define strnlen libressl_strnlen size_t strnlen(const char *str, size_t maxlen); #endif #endif #ifndef HAVE_STRSEP +#define strsep libressl_strsep char *strsep(char **stringp, const char *delim); #endif #ifndef HAVE_EXPLICIT_BZERO +#define explicit_bzero libressl_explicit_bzero void explicit_bzero(void *, size_t); #endif #ifndef HAVE_TIMINGSAFE_BCMP +#define timingsafe_bcmp libressl_timingsafe_bcmp int timingsafe_bcmp(const void *b1, const void *b2, size_t n); #endif #ifndef HAVE_TIMINGSAFE_MEMCMP +#define timingsafe_memcmp libressl_timingsafe_memcmp int timingsafe_memcmp(const void *b1, const void *b2, size_t len); #endif #ifndef HAVE_MEMMEM +#define memmem libressl_memmem void * memmem(const void *big, size_t big_len, const void *little, size_t little_len); #endif diff --git a/include/compat/sys/socket.h b/include/compat/sys/socket.h index 10eb05f672..2f0b197b35 100644 --- a/include/compat/sys/socket.h +++ b/include/compat/sys/socket.h @@ -10,6 +10,7 @@ #endif #if !defined(SOCK_NONBLOCK) || !defined(SOCK_CLOEXEC) +#define NEED_SOCKET_FLAGS #define SOCK_CLOEXEC 0x8000 /* set FD_CLOEXEC */ #define SOCK_NONBLOCK 0x4000 /* set O_NONBLOCK */ int bsd_socketpair(int domain, int type, int protocol, int socket_vector[2]); diff --git a/include/compat/sys/stat.h b/include/compat/sys/stat.h index b88da1d565..57aa5215ab 100644 --- a/include/compat/sys/stat.h +++ b/include/compat/sys/stat.h @@ -118,4 +118,12 @@ #endif +#ifdef _WIN32 +int libressl_fstat(int fd, struct stat *statbuf); + +#ifndef NO_REDEF_POSIX_FUNCTIONS +#define fstat(fd, statbuf) libressl_fstat(fd, statbuf) +#endif +#endif + #endif diff --git a/include/compat/sys/time.h b/include/compat/sys/time.h index 76428c190d..2448969862 100644 --- a/include/compat/sys/time.h +++ b/include/compat/sys/time.h @@ -8,6 +8,15 @@ #ifdef _MSC_VER #include + +#define timeval libressl_timeval +#define gettimeofday libressl_gettimeofday + +struct timeval { + long long tv_sec; + long tv_usec; +}; + int gettimeofday(struct timeval *tp, void *tzp); #else #include_next diff --git a/include/compat/sys/types.h b/include/compat/sys/types.h index 49678439b2..59664bcf9b 100644 --- a/include/compat/sys/types.h +++ b/include/compat/sys/types.h @@ -45,18 +45,6 @@ typedef SSIZE_T ssize_t; #endif -#if !defined(HAVE_ATTRIBUTE__BOUNDED__) && !defined(__bounded__) -# define __bounded__(x, y, z) -#endif - -#if !defined(HAVE_ATTRIBUTE__DEAD) && !defined(__dead) -#ifdef _MSC_VER -#define __dead __declspec(noreturn) -#else -#define __dead __attribute__((__noreturn__)) -#endif -#endif - #ifdef _WIN32 #define __warn_references(sym,msg) #else diff --git a/include/compat/syslog.h b/include/compat/syslog.h index f400ff66d5..c7a2608bdc 100644 --- a/include/compat/syslog.h +++ b/include/compat/syslog.h @@ -15,6 +15,7 @@ #include #ifdef _WIN32 +#define LOG_CONS LOG_INFO #define LOG_INFO 6 /* informational */ #define LOG_USER (1<<3) /* random user-level messages */ #define LOG_LOCAL2 (18<<3) /* reserved for local use */ diff --git a/include/compat/time.h b/include/compat/time.h index 540807dd88..a0f6d298a3 100644 --- a/include/compat/time.h +++ b/include/compat/time.h @@ -3,6 +3,14 @@ * sys/time.h compatibility shim */ +#ifndef SIZEOF_TIME_T +#ifdef SMALL_TIME_T +#define SIZEOF_TIME_T 4 +#else +#define SIZEOF_TIME_T 8 +#endif +#endif + #ifdef _MSC_VER #if _MSC_VER >= 1900 #include <../ucrt/time.h> @@ -16,15 +24,6 @@ #ifndef LIBCRYPTOCOMPAT_TIME_H #define LIBCRYPTOCOMPAT_TIME_H -#ifdef _WIN32 -struct tm *__gmtime_r(const time_t * t, struct tm * tm); -#define gmtime_r(tp, tm) __gmtime_r(tp, tm) -#endif - -#ifndef HAVE_TIMEGM -time_t timegm(struct tm *tm); -#endif - #ifndef CLOCK_MONOTONIC #define CLOCK_MONOTONIC CLOCK_REALTIME #endif diff --git a/include/compat/unistd.h b/include/compat/unistd.h index 5e6ab1d8b3..0ce66dde1a 100644 --- a/include/compat/unistd.h +++ b/include/compat/unistd.h @@ -23,6 +23,7 @@ ssize_t pwrite(int d, const void *buf, size_t nbytes, off_t offset); #include #include +#define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2 @@ -44,6 +45,8 @@ static inline unsigned int sleep(unsigned int seconds) Sleep(seconds * 1000); return seconds; } + +int mkstemp(char *template); #endif int ftruncate(int fd, off_t length); @@ -64,12 +67,21 @@ int getentropy(void *buf, size_t buflen); #endif #endif +#ifndef HAVE_GETOPT +#include "getopt.h" +#endif + #ifndef HAVE_GETPAGESIZE int getpagesize(void); #endif +#ifndef HAVE_PLEDGE #define pledge(request, paths) 0 +#endif + +#ifndef HAVE_UNVEIL #define unveil(path, permissions) 0 +#endif #ifndef HAVE_PIPE2 int pipe2(int fildes[2], int flags); diff --git a/libcrypto.pc.in b/libcrypto.pc.in index 11d7ef033b..c11fbd309e 100644 --- a/libcrypto.pc.in +++ b/libcrypto.pc.in @@ -1,3 +1,18 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# #libcrypto pkg-config source file prefix=@prefix@ diff --git a/libssl.pc.in b/libssl.pc.in index 512ec1cbef..9d0d641bb1 100644 --- a/libssl.pc.in +++ b/libssl.pc.in @@ -1,3 +1,18 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# #libssl pkg-config source file prefix=@prefix@ diff --git a/libtls.pc.in b/libtls.pc.in index d1769299ad..19c813469e 100644 --- a/libtls.pc.in +++ b/libtls.pc.in @@ -1,3 +1,18 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# #libtls pkg-config source file prefix=@prefix@ @@ -9,5 +24,5 @@ Name: LibreSSL-libtls Description: Secure communications using the TLS socket protocol. Version: @VERSION@ Libs: -L${libdir} -ltls -Libs.private: @LIBS@ @PLATFORM_LDADD@ +Libs.private: @LIBS@ @PLATFORM_LDADD@ -lssl -lcrypto Cflags: -I${includedir} diff --git a/m4/check-hardening-options.m4 b/m4/check-hardening-options.m4 index c8ab12ea49..401b7e46b0 100644 --- a/m4/check-hardening-options.m4 +++ b/m4/check-hardening-options.m4 @@ -3,34 +3,28 @@ AC_DEFUN([CHECK_CFLAG], [ AC_LANG_ASSERT(C) AC_MSG_CHECKING([if $saved_CC supports "$1"]) old_cflags="$CFLAGS" - CFLAGS="$1 -Wall -Werror" - AC_TRY_LINK([ - #include - ], - [printf("Hello")], - AC_MSG_RESULT([yes]) + CFLAGS="$USER_CFLAGS $1 -Wall -Werror" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[printf("Hello")]])], + [AC_MSG_RESULT([yes]) CFLAGS=$old_cflags - HARDEN_CFLAGS="$HARDEN_CFLAGS $1", - AC_MSG_RESULT([no]) + HARDEN_CFLAGS="$HARDEN_CFLAGS $1"], + [AC_MSG_RESULT([no]) CFLAGS=$old_cflags - [$2]) + [$2]]) ]) AC_DEFUN([CHECK_LDFLAG], [ AC_LANG_ASSERT(C) AC_MSG_CHECKING([if $saved_LD supports "$1"]) old_ldflags="$LDFLAGS" - LDFLAGS="$1 -Wall -Werror" - AC_TRY_LINK([ - #include - ], - [printf("Hello")], - AC_MSG_RESULT([yes]) + LDFLAGS="$USER_LDFLAGS $1 -Wall -Werror" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[printf("Hello")]])], + [AC_MSG_RESULT([yes]) LDFLAGS=$old_ldflags - HARDEN_LDFLAGS="$HARDEN_LDFLAGS $1", - AC_MSG_RESULT([no]) + HARDEN_LDFLAGS="$HARDEN_LDFLAGS $1"], + [AC_MSG_RESULT([no]) LDFLAGS=$old_ldflags - [$2]) + [$2]]) ]) AC_DEFUN([DISABLE_AS_EXECUTABLE_STACK], [ @@ -100,6 +94,11 @@ AC_DEFUN([CHECK_C_HARDENING_OPTIONS], [ AC_SEARCH_LIBS([__stack_chk_guard],[ssp]) ]) ]) + + # Check for control-flow integrity support + AS_IF([test "x$HOST_OS" != "xdarwin"], [ + CHECK_CFLAG([[-fcf-protection=full]]) + ]) ]) # Restore CC, LD diff --git a/m4/check-libc.m4 b/m4/check-libc.m4 index e511f6d0db..7ac1a103e6 100644 --- a/m4/check-libc.m4 +++ b/m4/check-libc.m4 @@ -1,18 +1,35 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + AC_DEFUN([CHECK_LIBC_COMPAT], [ # Check for libc headers -AC_CHECK_HEADERS([err.h readpassphrase.h]) +AC_CHECK_HEADERS([endian.h machine/endian.h err.h readpassphrase.h]) +AC_CHECK_HEADERS([netinet/ip.h], [], [], +[#include +#include +]) +AC_HEADER_RESOLV # Check for general libc functions -AC_CHECK_FUNCS([asprintf freezero memmem]) +AC_CHECK_FUNCS([asprintf freezero ftruncate getdelim getline memmem]) AC_CHECK_FUNCS([readpassphrase reallocarray recallocarray]) -AC_CHECK_FUNCS([strlcat strlcpy strndup strnlen strsep strtonum]) +AC_CHECK_FUNCS([strcasecmp strlcat strlcpy strndup strnlen strsep strtonum]) AC_CHECK_FUNCS([timegm _mkgmtime timespecsub]) -AC_CHECK_FUNCS([getprogname syslog syslog_r]) +AC_CHECK_FUNCS([getopt getprogname syslog syslog_r vsyslog]) AC_CACHE_CHECK([for getpagesize], ac_cv_func_getpagesize, [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ -// Since Android NDK v16 getpagesize is defined as inline inside unistd.h -#ifdef __ANDROID__ -# include -#endif +#include ]], [[ getpagesize(); ]])], @@ -22,25 +39,28 @@ AC_CACHE_CHECK([for getpagesize], ac_cv_func_getpagesize, [ ]) AM_CONDITIONAL([HAVE_ASPRINTF], [test "x$ac_cv_func_asprintf" = xyes]) AM_CONDITIONAL([HAVE_FREEZERO], [test "x$ac_cv_func_freezero" = xyes]) +AM_CONDITIONAL([HAVE_GETDELIM], [test "x$ac_cv_func_getdelim" = xyes]) +AM_CONDITIONAL([HAVE_GETLINE], [test "x$ac_cv_func_getline" = xyes]) AM_CONDITIONAL([HAVE_GETPAGESIZE], [test "x$ac_cv_func_getpagesize" = xyes]) +AM_CONDITIONAL([HAVE_GETOPT], [test "x$ac_cv_func_getopt" = xyes]) AM_CONDITIONAL([HAVE_MEMMEM], [test "x$ac_cv_func_memmem" = xyes]) AM_CONDITIONAL([HAVE_READPASSPHRASE], [test "x$ac_cv_func_readpassphrase" = xyes]) AM_CONDITIONAL([HAVE_REALLOCARRAY], [test "x$ac_cv_func_reallocarray" = xyes]) AM_CONDITIONAL([HAVE_RECALLOCARRAY], [test "x$ac_cv_func_recallocarray" = xyes]) +AM_CONDITIONAL([HAVE_STRCASECMP], [test "x$ac_cv_func_strcasecmp" = xyes]) AM_CONDITIONAL([HAVE_STRLCAT], [test "x$ac_cv_func_strlcat" = xyes]) AM_CONDITIONAL([HAVE_STRLCPY], [test "x$ac_cv_func_strlcpy" = xyes]) AM_CONDITIONAL([HAVE_STRNDUP], [test "x$ac_cv_func_strndup" = xyes]) AM_CONDITIONAL([HAVE_STRNLEN], [test "x$ac_cv_func_strnlen" = xyes]) AM_CONDITIONAL([HAVE_STRSEP], [test "x$ac_cv_func_strsep" = xyes]) AM_CONDITIONAL([HAVE_STRTONUM], [test "x$ac_cv_func_strtonum" = xyes]) -AM_CONDITIONAL([HAVE_TIMEGM], [test "x$ac_cv_func_timegm" = xyes]) AM_CONDITIONAL([HAVE_GETPROGNAME], [test "x$ac_cv_func_getprogname" = xyes]) AM_CONDITIONAL([HAVE_SYSLOG], [test "x$ac_cv_func_syslog" = xyes]) AM_CONDITIONAL([HAVE_SYSLOG_R], [test "x$ac_cv_func_syslog_r" = xyes]) ]) AC_DEFUN([CHECK_SYSCALL_COMPAT], [ -AC_CHECK_FUNCS([accept4 pipe2 pledge poll socketpair]) +AC_CHECK_FUNCS([accept4 pipe2 pledge poll socketpair unveil]) AM_CONDITIONAL([HAVE_ACCEPT4], [test "x$ac_cv_func_accept4" = xyes]) AM_CONDITIONAL([HAVE_PIPE2], [test "x$ac_cv_func_pipe2" = xyes]) AM_CONDITIONAL([HAVE_PLEDGE], [test "x$ac_cv_func_pledge" = xyes]) diff --git a/m4/check-os-options.m4 b/m4/check-os-options.m4 index 644bf714a6..99f142e7c3 100644 --- a/m4/check-os-options.m4 +++ b/m4/check-os-options.m4 @@ -1,3 +1,18 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + AC_DEFUN([CHECK_OS_OPTIONS], [ CFLAGS="$CFLAGS -Wall -std=gnu99 -fno-strict-aliasing" @@ -22,7 +37,7 @@ case $host_os in # Don't use arc4random on systems before 10.12 because of # weak seed on failure to open /dev/random, based on latest # public source: - # http://www.opensource.apple.com/source/Libc/Libc-997.90.3/gen/FreeBSD/arc4random.c + # https://www.opensource.apple.com/source/Libc/Libc-997.90.3/gen/FreeBSD/arc4random.c # # We use the presence of getentropy() to detect 10.12. The # following check take into account that: @@ -61,17 +76,28 @@ char buf[1]; getentropy(buf, 1); *freebsd*) HOST_OS=freebsd HOST_ABI=elf - # fork detection missing, weak seed on failure - # https://svnweb.freebsd.org/base/head/lib/libc/gen/arc4random.c?revision=268642&view=markup - USE_BUILTIN_ARC4RANDOM=yes + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +#if __FreeBSD_version < 1200000 + undefined +#endif + ]], [[]])], + [ USE_BUILTIN_ARC4RANDOM=no ], + [ USE_BUILTIN_ARC4RANDOM=yes ] + ) AC_SUBST([PROG_LDADD], ['-lthr']) ;; *hpux*) HOST_OS=hpux; - if test "`echo $CC | cut -d ' ' -f 1`" = "gcc" ; then - CFLAGS="$CFLAGS -mlp64" - else - CFLAGS="-g -O2 +DD64 +Otype_safety=off $USER_CFLAGS" + if test "`echo $host_os | cut -c 1-4`" = "ia64" ; then + if test "`echo $CC | cut -d ' ' -f 1`" = "gcc" ; then + CFLAGS="$CFLAGS -mlp64" + else + CFLAGS="+DD64" + fi + fi + if ! test "`echo $CC | cut -d ' ' -f 1`" = "gcc" ; then + CFLAGS="-g -O2 +Otype_safety=off $CFLAGS $USER_CFLAGS" fi CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=600 -D__STRICT_ALIGNMENT" ;; @@ -98,7 +124,7 @@ char buf[1]; getentropy(buf, 1); ) CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE" ;; - *openbsd* | *bitrig*) + *openbsd*) HOST_OS=openbsd HOST_ABI=elf AC_DEFINE([HAVE_ATTRIBUTE__BOUNDED__], [1], [OpenBSD gcc has bounded]) @@ -118,9 +144,12 @@ char buf[1]; getentropy(buf, 1); HOST_OS=solaris HOST_ABI=elf CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__ -D_XOPEN_SOURCE=600 -DBSD_COMP" - AC_SUBST([PLATFORM_LDADD], ['-ldl -lnsl -lsocket']) + AC_SUBST([PLATFORM_LDADD], ['-ldl -lmd -lnsl -lsocket']) + ;; + *) + HOST_OS=unsupported + HOST_ABI=elf ;; - *) ;; esac # Check if time_t is sized correctly @@ -134,7 +163,7 @@ if test "$ac_cv_sizeof_time_t" = "4"; then if test "$host_os" = "mingw32" ; then echo " **" echo " ** You can solve this by adjusting the build flags in your" - echo " ** mingw-w64 toolchain. Refer to README.windows for details." + echo " ** mingw-w64 toolchain. Refer to README.mingw.md for details." fi fi diff --git a/m4/disable-compiler-warnings.m4 b/m4/disable-compiler-warnings.m4 index 2792722111..052e8ab0a3 100644 --- a/m4/disable-compiler-warnings.m4 +++ b/m4/disable-compiler-warnings.m4 @@ -1,3 +1,18 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + AC_DEFUN([DISABLE_COMPILER_WARNINGS], [ # Clang throws a lot of warnings when it does not understand a flag. Disable # this warning for now so other warnings are visible. diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index 462a831612..8f1121e017 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -1,3 +1,18 @@ +# +# Copyright (c) 2015 Jeff Davey +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + if(ENABLE_LIBRESSL_INSTALL) install(DIRECTORY . DESTINATION ${CMAKE_INSTALL_MANDIR}/man3 diff --git a/man/links b/man/links index 44f6a59b38..d08694b0ba 100644 --- a/man/links +++ b/man/links @@ -6,26 +6,40 @@ AES_encrypt.3,AES_cbc_encrypt.3 AES_encrypt.3,AES_decrypt.3 AES_encrypt.3,AES_set_decrypt_key.3 AES_encrypt.3,AES_set_encrypt_key.3 +ASIdentifiers_new.3,ASIdentifiers_free.3 +ASIdentifiers_new.3,d2i_ASIdentifiers.3 +ASIdentifiers_new.3,i2d_ASIdentifiers.3 +ASN1_BIT_STRING_set.3,ASN1_BIT_STRING_get_bit.3 +ASN1_BIT_STRING_set.3,ASN1_BIT_STRING_set_bit.3 ASN1_INTEGER_get.3,ASN1_ENUMERATED_get.3 +ASN1_INTEGER_get.3,ASN1_ENUMERATED_get_int64.3 ASN1_INTEGER_get.3,ASN1_ENUMERATED_set.3 +ASN1_INTEGER_get.3,ASN1_ENUMERATED_set_int64.3 ASN1_INTEGER_get.3,ASN1_ENUMERATED_to_BN.3 +ASN1_INTEGER_get.3,ASN1_INTEGER_cmp.3 +ASN1_INTEGER_get.3,ASN1_INTEGER_dup.3 +ASN1_INTEGER_get.3,ASN1_INTEGER_get_int64.3 +ASN1_INTEGER_get.3,ASN1_INTEGER_get_uint64.3 ASN1_INTEGER_get.3,ASN1_INTEGER_set.3 +ASN1_INTEGER_get.3,ASN1_INTEGER_set_int64.3 +ASN1_INTEGER_get.3,ASN1_INTEGER_set_uint64.3 ASN1_INTEGER_get.3,ASN1_INTEGER_to_BN.3 ASN1_INTEGER_get.3,BN_to_ASN1_ENUMERATED.3 ASN1_INTEGER_get.3,BN_to_ASN1_INTEGER.3 -ASN1_INTEGER_get.3,i2a_ASN1_INTEGER.3 +ASN1_NULL_new.3,ASN1_NULL_free.3 +ASN1_OBJECT_new.3,ASN1_OBJECT_create.3 ASN1_OBJECT_new.3,ASN1_OBJECT_free.3 -ASN1_STRING_TABLE_add.3,ASN1_STRING_TABLE_cleanup.3 -ASN1_STRING_TABLE_add.3,ASN1_STRING_TABLE_get.3 ASN1_STRING_length.3,ASN1_OCTET_STRING_cmp.3 ASN1_STRING_length.3,ASN1_OCTET_STRING_dup.3 ASN1_STRING_length.3,ASN1_OCTET_STRING_set.3 ASN1_STRING_length.3,ASN1_STRING_cmp.3 +ASN1_STRING_length.3,ASN1_STRING_copy.3 ASN1_STRING_length.3,ASN1_STRING_data.3 ASN1_STRING_length.3,ASN1_STRING_dup.3 ASN1_STRING_length.3,ASN1_STRING_get0_data.3 ASN1_STRING_length.3,ASN1_STRING_length_set.3 ASN1_STRING_length.3,ASN1_STRING_set.3 +ASN1_STRING_length.3,ASN1_STRING_set0.3 ASN1_STRING_length.3,ASN1_STRING_to_UTF8.3 ASN1_STRING_length.3,ASN1_STRING_type.3 ASN1_STRING_new.3,ASN1_BIT_STRING_free.3 @@ -76,20 +90,34 @@ ASN1_TIME_set.3,ASN1_GENERALIZEDTIME_set.3 ASN1_TIME_set.3,ASN1_GENERALIZEDTIME_set_string.3 ASN1_TIME_set.3,ASN1_TIME_adj.3 ASN1_TIME_set.3,ASN1_TIME_check.3 +ASN1_TIME_set.3,ASN1_TIME_cmp_time_t.3 +ASN1_TIME_set.3,ASN1_TIME_compare.3 +ASN1_TIME_set.3,ASN1_TIME_diff.3 +ASN1_TIME_set.3,ASN1_TIME_normalize.3 ASN1_TIME_set.3,ASN1_TIME_print.3 ASN1_TIME_set.3,ASN1_TIME_set_string.3 +ASN1_TIME_set.3,ASN1_TIME_set_string_X509.3 ASN1_TIME_set.3,ASN1_TIME_to_generalizedtime.3 +ASN1_TIME_set.3,ASN1_TIME_to_tm.3 ASN1_TIME_set.3,ASN1_UTCTIME_adj.3 ASN1_TIME_set.3,ASN1_UTCTIME_check.3 ASN1_TIME_set.3,ASN1_UTCTIME_cmp_time_t.3 ASN1_TIME_set.3,ASN1_UTCTIME_print.3 ASN1_TIME_set.3,ASN1_UTCTIME_set.3 ASN1_TIME_set.3,ASN1_UTCTIME_set_string.3 +ASN1_TIME_set.3,OPENSSL_gmtime.3 +ASN1_TIME_set.3,OPENSSL_posix_to_tm.3 +ASN1_TIME_set.3,OPENSSL_timegm.3 +ASN1_TIME_set.3,OPENSSL_tm_to_posix.3 ASN1_TYPE_get.3,ASN1_TYPE_cmp.3 ASN1_TYPE_get.3,ASN1_TYPE_free.3 +ASN1_TYPE_get.3,ASN1_TYPE_get_int_octetstring.3 +ASN1_TYPE_get.3,ASN1_TYPE_get_octetstring.3 ASN1_TYPE_get.3,ASN1_TYPE_new.3 ASN1_TYPE_get.3,ASN1_TYPE_set.3 ASN1_TYPE_get.3,ASN1_TYPE_set1.3 +ASN1_TYPE_get.3,ASN1_TYPE_set_int_octetstring.3 +ASN1_TYPE_get.3,ASN1_TYPE_set_octetstring.3 ASN1_generate_nconf.3,ASN1_generate_v3.3 ASN1_item_d2i.3,ASN1_item_d2i_bio.3 ASN1_item_d2i.3,ASN1_item_d2i_fp.3 @@ -101,10 +129,28 @@ ASN1_item_d2i.3,ASN1_item_print.3 ASN1_item_d2i.3,d2i_ASN1_TYPE.3 ASN1_item_d2i.3,i2d_ASN1_TYPE.3 ASN1_item_new.3,ASN1_item_free.3 +ASN1_item_pack.3,ASN1_item_unpack.3 +ASN1_item_sign.3,ASN1_item_sign_ctx.3 +ASN1_mbstring_copy.3,ASN1_STRING_get_default_mask.3 +ASN1_mbstring_copy.3,ASN1_STRING_set_by_NID.3 +ASN1_mbstring_copy.3,ASN1_STRING_set_default_mask.3 +ASN1_mbstring_copy.3,ASN1_STRING_set_default_mask_asc.3 +ASN1_mbstring_copy.3,ASN1_mbstring_ncopy.3 +ASN1_mbstring_copy.3,ASN1_tag2bit.3 ASN1_parse_dump.3,ASN1_parse.3 +ASN1_put_object.3,ASN1_object_size.3 ASN1_put_object.3,ASN1_put_eoc.3 -ASN1_time_parse.3,ASN1_TIME_set_tm.3 -ASN1_time_parse.3,ASN1_time_tm_cmp.3 +ASRange_new.3,ASIdOrRange_free.3 +ASRange_new.3,ASIdOrRange_new.3 +ASRange_new.3,ASIdentifierChoice_free.3 +ASRange_new.3,ASIdentifierChoice_new.3 +ASRange_new.3,ASRange_free.3 +ASRange_new.3,d2i_ASIdOrRange.3 +ASRange_new.3,d2i_ASIdentifierChoice.3 +ASRange_new.3,d2i_ASRange.3 +ASRange_new.3,i2d_ASIdOrRange.3 +ASRange_new.3,i2d_ASIdentifierChoice.3 +ASRange_new.3,i2d_ASRange.3 AUTHORITY_KEYID_new.3,AUTHORITY_KEYID_free.3 BASIC_CONSTRAINTS_new.3,BASIC_CONSTRAINTS_free.3 BF_set_key.3,BF_cbc_encrypt.3 @@ -113,7 +159,14 @@ BF_set_key.3,BF_decrypt.3 BF_set_key.3,BF_ecb_encrypt.3 BF_set_key.3,BF_encrypt.3 BF_set_key.3,BF_ofb64_encrypt.3 -BF_set_key.3,BF_options.3 +BIO_accept.3,BIO_get_accept_socket.3 +BIO_accept.3,BIO_get_host_ip.3 +BIO_accept.3,BIO_get_port.3 +BIO_accept.3,BIO_set_tcp_ndelay.3 +BIO_accept.3,BIO_sock_error.3 +BIO_accept.3,BIO_sock_non_fatal_error.3 +BIO_accept.3,BIO_sock_should_retry.3 +BIO_accept.3,BIO_socket_nbio.3 BIO_ctrl.3,BIO_callback_ctrl.3 BIO_ctrl.3,BIO_ctrl_pending.3 BIO_ctrl.3,BIO_ctrl_wpending.3 @@ -121,6 +174,7 @@ BIO_ctrl.3,BIO_eof.3 BIO_ctrl.3,BIO_flush.3 BIO_ctrl.3,BIO_get_close.3 BIO_ctrl.3,BIO_get_info_callback.3 +BIO_ctrl.3,BIO_info_cb.3 BIO_ctrl.3,BIO_int_ctrl.3 BIO_ctrl.3,BIO_pending.3 BIO_ctrl.3,BIO_ptr_ctrl.3 @@ -131,9 +185,8 @@ BIO_ctrl.3,BIO_set_info_callback.3 BIO_ctrl.3,BIO_tell.3 BIO_ctrl.3,BIO_wpending.3 BIO_ctrl.3,bio_info_cb.3 -BIO_dump.3,BIO_dump_fp.3 BIO_dump.3,BIO_dump_indent.3 -BIO_dump.3,BIO_dump_indent_fp.3 +BIO_dup_chain.3,BIO_dup_state.3 BIO_f_buffer.3,BIO_get_buffer_num_lines.3 BIO_f_buffer.3,BIO_set_buffer_read_data.3 BIO_f_buffer.3,BIO_set_buffer_size.3 @@ -145,6 +198,7 @@ BIO_f_cipher.3,BIO_set_cipher.3 BIO_f_md.3,BIO_get_md.3 BIO_f_md.3,BIO_get_md_ctx.3 BIO_f_md.3,BIO_set_md.3 +BIO_f_md.3,BIO_set_md_ctx.3 BIO_f_ssl.3,BIO_do_handshake.3 BIO_f_ssl.3,BIO_get_num_renegotiates.3 BIO_f_ssl.3,BIO_get_ssl.3 @@ -157,28 +211,35 @@ BIO_f_ssl.3,BIO_set_ssl_renegotiate_bytes.3 BIO_f_ssl.3,BIO_set_ssl_renegotiate_timeout.3 BIO_f_ssl.3,BIO_ssl_copy_session_id.3 BIO_f_ssl.3,BIO_ssl_shutdown.3 +BIO_find_type.3,BIO_method_name.3 BIO_find_type.3,BIO_method_type.3 BIO_find_type.3,BIO_next.3 +BIO_get_data.3,BIO_clear_flags.3 +BIO_get_data.3,BIO_clear_retry_flags.3 +BIO_get_data.3,BIO_copy_next_retry.3 +BIO_get_data.3,BIO_get_flags.3 +BIO_get_data.3,BIO_get_init.3 +BIO_get_data.3,BIO_get_retry_flags.3 BIO_get_data.3,BIO_get_shutdown.3 BIO_get_data.3,BIO_set_data.3 +BIO_get_data.3,BIO_set_flags.3 BIO_get_data.3,BIO_set_init.3 +BIO_get_data.3,BIO_set_retry_read.3 +BIO_get_data.3,BIO_set_retry_special.3 +BIO_get_data.3,BIO_set_retry_write.3 BIO_get_data.3,BIO_set_shutdown.3 +BIO_get_data.3,BIO_test_flags.3 +BIO_get_ex_new_index.3,BIO_get_app_data.3 BIO_get_ex_new_index.3,BIO_get_ex_data.3 +BIO_get_ex_new_index.3,BIO_set_app_data.3 BIO_get_ex_new_index.3,BIO_set_ex_data.3 -BIO_get_ex_new_index.3,ECDH_get_ex_data.3 -BIO_get_ex_new_index.3,ECDH_get_ex_new_index.3 -BIO_get_ex_new_index.3,ECDH_set_ex_data.3 -BIO_get_ex_new_index.3,ECDSA_get_ex_data.3 -BIO_get_ex_new_index.3,ECDSA_get_ex_new_index.3 -BIO_get_ex_new_index.3,ECDSA_set_ex_data.3 BIO_get_ex_new_index.3,EC_KEY_get_ex_data.3 BIO_get_ex_new_index.3,EC_KEY_get_ex_new_index.3 BIO_get_ex_new_index.3,EC_KEY_set_ex_data.3 -BIO_get_ex_new_index.3,ENGINE_get_ex_data.3 -BIO_get_ex_new_index.3,ENGINE_get_ex_new_index.3 -BIO_get_ex_new_index.3,ENGINE_set_ex_data.3 +BIO_get_ex_new_index.3,TYPE_get_app_data.3 BIO_get_ex_new_index.3,TYPE_get_ex_data.3 BIO_get_ex_new_index.3,TYPE_get_ex_new_index.3 +BIO_get_ex_new_index.3,TYPE_set_app_data.3 BIO_get_ex_new_index.3,TYPE_set_ex_data.3 BIO_get_ex_new_index.3,UI_get_ex_data.3 BIO_get_ex_new_index.3,UI_get_ex_new_index.3 @@ -209,11 +270,12 @@ BIO_new.3,BIO_free_all.3 BIO_new.3,BIO_set.3 BIO_new.3,BIO_up_ref.3 BIO_new.3,BIO_vfree.3 -BIO_printf.3,BIO_snprintf.3 -BIO_printf.3,BIO_vprintf.3 -BIO_printf.3,BIO_vsnprintf.3 BIO_push.3,BIO_pop.3 +BIO_push.3,BIO_set_next.3 BIO_read.3,BIO_gets.3 +BIO_read.3,BIO_indent.3 +BIO_read.3,BIO_number_read.3 +BIO_read.3,BIO_number_written.3 BIO_read.3,BIO_puts.3 BIO_read.3,BIO_write.3 BIO_s_accept.3,BIO_do_accept.3 @@ -246,6 +308,16 @@ BIO_s_connect.3,BIO_set_conn_int_port.3 BIO_s_connect.3,BIO_set_conn_ip.3 BIO_s_connect.3,BIO_set_conn_port.3 BIO_s_connect.3,BIO_set_nbio.3 +BIO_s_datagram.3,BIO_ctrl_dgram_connect.3 +BIO_s_datagram.3,BIO_ctrl_set_connected.3 +BIO_s_datagram.3,BIO_dgram_get_peer.3 +BIO_s_datagram.3,BIO_dgram_non_fatal_error.3 +BIO_s_datagram.3,BIO_dgram_recv_timedout.3 +BIO_s_datagram.3,BIO_dgram_send_timedout.3 +BIO_s_datagram.3,BIO_dgram_set_peer.3 +BIO_s_datagram.3,BIO_new_dgram.3 +BIO_s_fd.3,BIO_fd_non_fatal_error.3 +BIO_s_fd.3,BIO_fd_should_retry.3 BIO_s_fd.3,BIO_get_fd.3 BIO_s_fd.3,BIO_new_fd.3 BIO_s_fd.3,BIO_set_fd.3 @@ -264,30 +336,21 @@ BIO_s_mem.3,BIO_set_mem_buf.3 BIO_s_mem.3,BIO_set_mem_eof_return.3 BIO_s_socket.3,BIO_new_socket.3 BIO_set_callback.3,BIO_callback_fn.3 +BIO_set_callback.3,BIO_callback_fn_ex.3 BIO_set_callback.3,BIO_debug_callback.3 BIO_set_callback.3,BIO_get_callback.3 BIO_set_callback.3,BIO_get_callback_arg.3 +BIO_set_callback.3,BIO_get_callback_ex.3 BIO_set_callback.3,BIO_set_callback_arg.3 +BIO_set_callback.3,BIO_set_callback_ex.3 BIO_should_retry.3,BIO_get_retry_BIO.3 BIO_should_retry.3,BIO_get_retry_reason.3 BIO_should_retry.3,BIO_retry_type.3 +BIO_should_retry.3,BIO_set_retry_reason.3 BIO_should_retry.3,BIO_should_io_special.3 BIO_should_retry.3,BIO_should_read.3 BIO_should_retry.3,BIO_should_write.3 -BN_BLINDING_new.3,BN_BLINDING_convert.3 -BN_BLINDING_new.3,BN_BLINDING_convert_ex.3 -BN_BLINDING_new.3,BN_BLINDING_create_param.3 -BN_BLINDING_new.3,BN_BLINDING_free.3 -BN_BLINDING_new.3,BN_BLINDING_get_flags.3 -BN_BLINDING_new.3,BN_BLINDING_get_thread_id.3 -BN_BLINDING_new.3,BN_BLINDING_invert.3 -BN_BLINDING_new.3,BN_BLINDING_invert_ex.3 -BN_BLINDING_new.3,BN_BLINDING_set_flags.3 -BN_BLINDING_new.3,BN_BLINDING_set_thread_id.3 -BN_BLINDING_new.3,BN_BLINDING_thread_id.3 -BN_BLINDING_new.3,BN_BLINDING_update.3 BN_CTX_new.3,BN_CTX_free.3 -BN_CTX_new.3,BN_CTX_init.3 BN_CTX_start.3,BN_CTX_end.3 BN_CTX_start.3,BN_CTX_get.3 BN_add.3,BN_div.3 @@ -295,14 +358,22 @@ BN_add.3,BN_exp.3 BN_add.3,BN_gcd.3 BN_add.3,BN_mod.3 BN_add.3,BN_mod_add.3 +BN_add.3,BN_mod_add_quick.3 BN_add.3,BN_mod_exp.3 +BN_add.3,BN_mod_lshift.3 +BN_add.3,BN_mod_lshift1.3 +BN_add.3,BN_mod_lshift1_quick.3 +BN_add.3,BN_mod_lshift_quick.3 BN_add.3,BN_mod_mul.3 BN_add.3,BN_mod_sqr.3 BN_add.3,BN_mod_sub.3 +BN_add.3,BN_mod_sub_quick.3 BN_add.3,BN_mul.3 BN_add.3,BN_nnmod.3 BN_add.3,BN_sqr.3 BN_add.3,BN_sub.3 +BN_add.3,BN_uadd.3 +BN_add.3,BN_usub.3 BN_add_word.3,BN_div_word.3 BN_add_word.3,BN_mod_word.3 BN_add_word.3,BN_mul_word.3 @@ -320,6 +391,7 @@ BN_bn2bin.3,BN_lebin2bn.3 BN_bn2bin.3,BN_mpi2bn.3 BN_bn2bin.3,BN_print.3 BN_bn2bin.3,BN_print_fp.3 +BN_cmp.3,BN_abs_is_word.3 BN_cmp.3,BN_is_odd.3 BN_cmp.3,BN_is_one.3 BN_cmp.3,BN_is_word.3 @@ -334,30 +406,25 @@ BN_generate_prime.3,BN_GENCB_new.3 BN_generate_prime.3,BN_GENCB_set.3 BN_generate_prime.3,BN_GENCB_set_old.3 BN_generate_prime.3,BN_generate_prime_ex.3 -BN_generate_prime.3,BN_is_prime.3 BN_generate_prime.3,BN_is_prime_ex.3 -BN_generate_prime.3,BN_is_prime_fasttest.3 BN_generate_prime.3,BN_is_prime_fasttest_ex.3 -BN_get0_nist_prime_521.3,BN_get0_nist_prime_192.3 -BN_get0_nist_prime_521.3,BN_get0_nist_prime_224.3 -BN_get0_nist_prime_521.3,BN_get0_nist_prime_256.3 -BN_get0_nist_prime_521.3,BN_get0_nist_prime_384.3 +BN_get_rfc3526_prime_8192.3,BN_get_rfc2409_prime_1024.3 +BN_get_rfc3526_prime_8192.3,BN_get_rfc2409_prime_768.3 +BN_get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_1536.3 +BN_get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_2048.3 +BN_get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_3072.3 +BN_get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_4096.3 +BN_get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_6144.3 BN_mod_mul_montgomery.3,BN_MONT_CTX_copy.3 BN_mod_mul_montgomery.3,BN_MONT_CTX_free.3 -BN_mod_mul_montgomery.3,BN_MONT_CTX_init.3 BN_mod_mul_montgomery.3,BN_MONT_CTX_new.3 BN_mod_mul_montgomery.3,BN_MONT_CTX_set.3 +BN_mod_mul_montgomery.3,BN_MONT_CTX_set_locked.3 BN_mod_mul_montgomery.3,BN_from_montgomery.3 BN_mod_mul_montgomery.3,BN_to_montgomery.3 -BN_mod_mul_reciprocal.3,BN_RECP_CTX_free.3 -BN_mod_mul_reciprocal.3,BN_RECP_CTX_init.3 -BN_mod_mul_reciprocal.3,BN_RECP_CTX_new.3 -BN_mod_mul_reciprocal.3,BN_RECP_CTX_set.3 -BN_mod_mul_reciprocal.3,BN_div_recp.3 BN_new.3,BN_clear.3 BN_new.3,BN_clear_free.3 BN_new.3,BN_free.3 -BN_new.3,BN_init.3 BN_num_bytes.3,BN_num_bits.3 BN_num_bytes.3,BN_num_bits_word.3 BN_rand.3,BN_pseudo_rand.3 @@ -372,6 +439,7 @@ BN_set_bit.3,BN_rshift.3 BN_set_bit.3,BN_rshift1.3 BN_set_flags.3,BN_get_flags.3 BN_set_negative.3,BN_is_negative.3 +BN_swap.3,BN_consttime_swap.3 BN_zero.3,BN_get_word.3 BN_zero.3,BN_one.3 BN_zero.3,BN_set_word.3 @@ -379,8 +447,6 @@ BN_zero.3,BN_value_one.3 BUF_MEM_new.3,BUF_MEM_free.3 BUF_MEM_new.3,BUF_MEM_grow.3 BUF_MEM_new.3,BUF_MEM_grow_clean.3 -BUF_MEM_new.3,BUF_reverse.3 -BUF_MEM_new.3,BUF_strdup.3 CMAC_Init.3,CMAC_CTX_cleanup.3 CMAC_Init.3,CMAC_CTX_copy.3 CMAC_Init.3,CMAC_CTX_free.3 @@ -388,7 +454,6 @@ CMAC_Init.3,CMAC_CTX_get0_cipher_ctx.3 CMAC_Init.3,CMAC_CTX_new.3 CMAC_Init.3,CMAC_Final.3 CMAC_Init.3,CMAC_Update.3 -CMAC_Init.3,CMAC_resume.3 CMS_ContentInfo_new.3,CMS_ContentInfo_free.3 CMS_ContentInfo_new.3,CMS_ContentInfo_print_ctx.3 CMS_ContentInfo_new.3,CMS_ReceiptRequest_free.3 @@ -414,28 +479,39 @@ CMS_get0_RecipientInfos.3,CMS_RecipientInfo_type.3 CMS_get0_SignerInfos.3,CMS_SignerInfo_cert_cmp.3 CMS_get0_SignerInfos.3,CMS_SignerInfo_get0_signature.3 CMS_get0_SignerInfos.3,CMS_SignerInfo_get0_signer_id.3 +CMS_get0_SignerInfos.3,CMS_SignerInfo_get_version.3 CMS_get0_SignerInfos.3,CMS_SignerInfo_set1_signer_cert.3 CMS_get0_type.3,CMS_get0_content.3 CMS_get0_type.3,CMS_get0_eContentType.3 +CMS_get0_type.3,CMS_get_version.3 CMS_get0_type.3,CMS_set1_eContentType.3 CMS_get1_ReceiptRequest.3,CMS_ReceiptRequest_create0.3 CMS_get1_ReceiptRequest.3,CMS_ReceiptRequest_get0_values.3 CMS_get1_ReceiptRequest.3,CMS_add1_ReceiptRequest.3 +CMS_signed_add1_attr.3,CMS_signed_add1_attr_by_NID.3 +CMS_signed_add1_attr.3,CMS_signed_add1_attr_by_OBJ.3 +CMS_signed_add1_attr.3,CMS_signed_add1_attr_by_txt.3 +CMS_signed_add1_attr.3,CMS_signed_delete_attr.3 +CMS_signed_add1_attr.3,CMS_signed_get0_data_by_OBJ.3 +CMS_signed_add1_attr.3,CMS_signed_get_attr.3 +CMS_signed_add1_attr.3,CMS_signed_get_attr_by_NID.3 +CMS_signed_add1_attr.3,CMS_signed_get_attr_by_OBJ.3 +CMS_signed_add1_attr.3,CMS_signed_get_attr_count.3 +CMS_signed_add1_attr.3,CMS_unsigned_add1_attr.3 +CMS_signed_add1_attr.3,CMS_unsigned_add1_attr_by_NID.3 +CMS_signed_add1_attr.3,CMS_unsigned_add1_attr_by_OBJ.3 +CMS_signed_add1_attr.3,CMS_unsigned_add1_attr_by_txt.3 +CMS_signed_add1_attr.3,CMS_unsigned_delete_attr.3 +CMS_signed_add1_attr.3,CMS_unsigned_get0_data_by_OBJ.3 +CMS_signed_add1_attr.3,CMS_unsigned_get_attr.3 +CMS_signed_add1_attr.3,CMS_unsigned_get_attr_by_NID.3 +CMS_signed_add1_attr.3,CMS_unsigned_get_attr_by_OBJ.3 +CMS_signed_add1_attr.3,CMS_unsigned_get_attr_count.3 CMS_verify.3,CMS_get0_signers.3 CONF_modules_free.3,CONF_modules_finish.3 CONF_modules_free.3,CONF_modules_unload.3 CONF_modules_load_file.3,CONF_modules_load.3 CONF_modules_load_file.3,X509_get_default_cert_area.3 -CRYPTO_get_mem_functions.3,CRYPTO_MEM_LEAK_CB.3 -CRYPTO_get_mem_functions.3,CRYPTO_mem_ctrl.3 -CRYPTO_get_mem_functions.3,CRYPTO_mem_leaks.3 -CRYPTO_get_mem_functions.3,CRYPTO_mem_leaks_cb.3 -CRYPTO_get_mem_functions.3,CRYPTO_mem_leaks_fp.3 -CRYPTO_get_mem_functions.3,CRYPTO_set_mem_functions.3 -CRYPTO_lock.3,CRYPTO_THREADID_cmp.3 -CRYPTO_lock.3,CRYPTO_THREADID_cpy.3 -CRYPTO_lock.3,CRYPTO_THREADID_current.3 -CRYPTO_lock.3,CRYPTO_THREADID_hash.3 CRYPTO_lock.3,CRYPTO_add.3 CRYPTO_lock.3,CRYPTO_r_lock.3 CRYPTO_lock.3,CRYPTO_r_unlock.3 @@ -444,10 +520,16 @@ CRYPTO_lock.3,CRYPTO_w_unlock.3 CRYPTO_set_ex_data.3,CRYPTO_EX_dup.3 CRYPTO_set_ex_data.3,CRYPTO_EX_free.3 CRYPTO_set_ex_data.3,CRYPTO_EX_new.3 +CRYPTO_set_ex_data.3,CRYPTO_cleanup_all_ex_data.3 CRYPTO_set_ex_data.3,CRYPTO_free_ex_data.3 CRYPTO_set_ex_data.3,CRYPTO_get_ex_data.3 CRYPTO_set_ex_data.3,CRYPTO_get_ex_new_index.3 CRYPTO_set_ex_data.3,CRYPTO_new_ex_data.3 +CRYPTO_set_mem_functions.3,CRYPTO_MEM_LEAK_CB.3 +CRYPTO_set_mem_functions.3,CRYPTO_mem_ctrl.3 +CRYPTO_set_mem_functions.3,CRYPTO_mem_leaks.3 +CRYPTO_set_mem_functions.3,CRYPTO_mem_leaks_cb.3 +CRYPTO_set_mem_functions.3,CRYPTO_mem_leaks_fp.3 ChaCha.3,CRYPTO_chacha_20.3 ChaCha.3,CRYPTO_hchacha_20.3 ChaCha.3,CRYPTO_xchacha_20.3 @@ -467,8 +549,6 @@ DES_set_key.3,DES_ede3_cbc_encrypt.3 DES_set_key.3,DES_ede3_cbcm_encrypt.3 DES_set_key.3,DES_ede3_cfb64_encrypt.3 DES_set_key.3,DES_ede3_ofb64_encrypt.3 -DES_set_key.3,DES_enc_read.3 -DES_set_key.3,DES_enc_write.3 DES_set_key.3,DES_fcrypt.3 DES_set_key.3,DES_is_weak_key.3 DES_set_key.3,DES_key_sched.3 @@ -486,10 +566,16 @@ DES_set_key.3,DES_string_to_key.3 DES_set_key.3,DES_xcbc_encrypt.3 DH_generate_key.3,DH_compute_key.3 DH_generate_parameters.3,DH_check.3 +DH_generate_parameters.3,DH_check_pub_key.3 DH_generate_parameters.3,DH_generate_parameters_ex.3 DH_get0_pqg.3,DH_clear_flags.3 DH_get0_pqg.3,DH_get0_engine.3 +DH_get0_pqg.3,DH_get0_g.3 DH_get0_pqg.3,DH_get0_key.3 +DH_get0_pqg.3,DH_get0_p.3 +DH_get0_pqg.3,DH_get0_priv_key.3 +DH_get0_pqg.3,DH_get0_pub_key.3 +DH_get0_pqg.3,DH_get0_q.3 DH_get0_pqg.3,DH_set0_key.3 DH_get0_pqg.3,DH_set0_pqg.3 DH_get0_pqg.3,DH_set_flags.3 @@ -515,10 +601,14 @@ DSA_SIG_new.3,DSA_SIG_free.3 DSA_SIG_new.3,DSA_SIG_get0.3 DSA_SIG_new.3,DSA_SIG_set0.3 DSA_do_sign.3,DSA_do_verify.3 -DSA_generate_parameters.3,DSA_generate_parameters_ex.3 DSA_get0_pqg.3,DSA_clear_flags.3 DSA_get0_pqg.3,DSA_get0_engine.3 +DSA_get0_pqg.3,DSA_get0_g.3 DSA_get0_pqg.3,DSA_get0_key.3 +DSA_get0_pqg.3,DSA_get0_p.3 +DSA_get0_pqg.3,DSA_get0_priv_key.3 +DSA_get0_pqg.3,DSA_get0_pub_key.3 +DSA_get0_pqg.3,DSA_get0_q.3 DSA_get0_pqg.3,DSA_set0_key.3 DSA_get0_pqg.3,DSA_set0_pqg.3 DSA_get0_pqg.3,DSA_set_flags.3 @@ -527,6 +617,8 @@ DSA_get_ex_new_index.3,DSA_get_ex_data.3 DSA_get_ex_new_index.3,DSA_set_ex_data.3 DSA_meth_new.3,DSA_meth_dup.3 DSA_meth_new.3,DSA_meth_free.3 +DSA_meth_new.3,DSA_meth_get0_name.3 +DSA_meth_new.3,DSA_meth_set1_name.3 DSA_meth_new.3,DSA_meth_set_finish.3 DSA_meth_new.3,DSA_meth_set_sign.3 DSA_new.3,DSA_free.3 @@ -537,66 +629,47 @@ DSA_set_method.3,DSA_new_method.3 DSA_set_method.3,DSA_set_default_method.3 DSA_sign.3,DSA_sign_setup.3 DSA_sign.3,DSA_verify.3 +DSA_size.3,DSA_bits.3 ECDH_compute_key.3,ECDH_size.3 -ECDSA_SIG_new.3,ECDSA_OpenSSL.3 ECDSA_SIG_new.3,ECDSA_SIG_free.3 ECDSA_SIG_new.3,ECDSA_SIG_get0.3 +ECDSA_SIG_new.3,ECDSA_SIG_get0_r.3 +ECDSA_SIG_new.3,ECDSA_SIG_get0_s.3 ECDSA_SIG_new.3,ECDSA_SIG_set0.3 ECDSA_SIG_new.3,ECDSA_do_sign.3 -ECDSA_SIG_new.3,ECDSA_do_sign_ex.3 ECDSA_SIG_new.3,ECDSA_do_verify.3 -ECDSA_SIG_new.3,ECDSA_get_default_method.3 -ECDSA_SIG_new.3,ECDSA_set_default_method.3 -ECDSA_SIG_new.3,ECDSA_set_method.3 ECDSA_SIG_new.3,ECDSA_sign.3 -ECDSA_SIG_new.3,ECDSA_sign_ex.3 -ECDSA_SIG_new.3,ECDSA_sign_setup.3 ECDSA_SIG_new.3,ECDSA_size.3 ECDSA_SIG_new.3,ECDSA_verify.3 ECDSA_SIG_new.3,d2i_ECDSA_SIG.3 ECDSA_SIG_new.3,i2d_ECDSA_SIG.3 -EC_GFp_simple_method.3,EC_GF2m_simple_method.3 -EC_GFp_simple_method.3,EC_GFp_mont_method.3 -EC_GFp_simple_method.3,EC_GFp_nist_method.3 -EC_GFp_simple_method.3,EC_GFp_nistp224_method.3 -EC_GFp_simple_method.3,EC_GFp_nistp256_method.3 -EC_GFp_simple_method.3,EC_GFp_nistp521_method.3 -EC_GFp_simple_method.3,EC_METHOD_get_field_type.3 -EC_GROUP_copy.3,EC_GROUP_check.3 -EC_GROUP_copy.3,EC_GROUP_check_discriminant.3 -EC_GROUP_copy.3,EC_GROUP_cmp.3 -EC_GROUP_copy.3,EC_GROUP_dup.3 -EC_GROUP_copy.3,EC_GROUP_get0_generator.3 -EC_GROUP_copy.3,EC_GROUP_get0_seed.3 -EC_GROUP_copy.3,EC_GROUP_get_asn1_flag.3 -EC_GROUP_copy.3,EC_GROUP_get_basis_type.3 -EC_GROUP_copy.3,EC_GROUP_get_cofactor.3 -EC_GROUP_copy.3,EC_GROUP_get_curve_name.3 -EC_GROUP_copy.3,EC_GROUP_get_degree.3 -EC_GROUP_copy.3,EC_GROUP_get_order.3 -EC_GROUP_copy.3,EC_GROUP_get_pentanomial_basis.3 -EC_GROUP_copy.3,EC_GROUP_get_point_conversion_form.3 -EC_GROUP_copy.3,EC_GROUP_get_seed_len.3 -EC_GROUP_copy.3,EC_GROUP_get_trinomial_basis.3 -EC_GROUP_copy.3,EC_GROUP_method_of.3 -EC_GROUP_copy.3,EC_GROUP_order_bits.3 -EC_GROUP_copy.3,EC_GROUP_set_asn1_flag.3 -EC_GROUP_copy.3,EC_GROUP_set_curve_name.3 -EC_GROUP_copy.3,EC_GROUP_set_generator.3 -EC_GROUP_copy.3,EC_GROUP_set_point_conversion_form.3 -EC_GROUP_copy.3,EC_GROUP_set_seed.3 -EC_GROUP_new.3,EC_GROUP_clear_free.3 -EC_GROUP_new.3,EC_GROUP_free.3 -EC_GROUP_new.3,EC_GROUP_get_curve.3 -EC_GROUP_new.3,EC_GROUP_get_curve_GF2m.3 -EC_GROUP_new.3,EC_GROUP_get_curve_GFp.3 -EC_GROUP_new.3,EC_GROUP_new_by_curve_name.3 -EC_GROUP_new.3,EC_GROUP_new_curve_GF2m.3 -EC_GROUP_new.3,EC_GROUP_new_curve_GFp.3 -EC_GROUP_new.3,EC_GROUP_set_curve.3 -EC_GROUP_new.3,EC_GROUP_set_curve_GF2m.3 -EC_GROUP_new.3,EC_GROUP_set_curve_GFp.3 -EC_GROUP_new.3,EC_get_builtin_curves.3 +EC_GROUP_check.3,EC_GROUP_check_discriminant.3 +EC_GROUP_get_curve_name.3,EC_GROUP_get0_seed.3 +EC_GROUP_get_curve_name.3,EC_GROUP_get_asn1_flag.3 +EC_GROUP_get_curve_name.3,EC_GROUP_get_basis_type.3 +EC_GROUP_get_curve_name.3,EC_GROUP_get_point_conversion_form.3 +EC_GROUP_get_curve_name.3,EC_GROUP_get_seed_len.3 +EC_GROUP_get_curve_name.3,EC_GROUP_set_asn1_flag.3 +EC_GROUP_get_curve_name.3,EC_GROUP_set_curve_name.3 +EC_GROUP_get_curve_name.3,EC_GROUP_set_point_conversion_form.3 +EC_GROUP_get_curve_name.3,EC_GROUP_set_seed.3 +EC_GROUP_new_by_curve_name.3,EC_GROUP_cmp.3 +EC_GROUP_new_by_curve_name.3,EC_GROUP_dup.3 +EC_GROUP_new_by_curve_name.3,EC_GROUP_free.3 +EC_GROUP_new_by_curve_name.3,EC_curve_nid2nist.3 +EC_GROUP_new_by_curve_name.3,EC_curve_nist2nid.3 +EC_GROUP_new_by_curve_name.3,EC_get_builtin_curves.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_clear_free.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_get0_generator.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_get_cofactor.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_get_curve.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_get_curve_GFp.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_get_degree.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_get_order.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_order_bits.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_set_curve.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_set_curve_GFp.3 +EC_GROUP_new_curve_GFp.3,EC_GROUP_set_generator.3 EC_KEY_METHOD_new.3,EC_KEY_METHOD_free.3 EC_KEY_METHOD_new.3,EC_KEY_METHOD_get_compute_key.3 EC_KEY_METHOD_new.3,EC_KEY_METHOD_get_init.3 @@ -626,8 +699,6 @@ EC_KEY_new.3,EC_KEY_get0_public_key.3 EC_KEY_new.3,EC_KEY_get_conv_form.3 EC_KEY_new.3,EC_KEY_get_enc_flags.3 EC_KEY_new.3,EC_KEY_get_flags.3 -EC_KEY_new.3,EC_KEY_get_key_method_data.3 -EC_KEY_new.3,EC_KEY_insert_key_method_data.3 EC_KEY_new.3,EC_KEY_new_by_curve_name.3 EC_KEY_new.3,EC_KEY_precompute_mult.3 EC_KEY_new.3,EC_KEY_print.3 @@ -641,8 +712,6 @@ EC_KEY_new.3,EC_KEY_set_private_key.3 EC_KEY_new.3,EC_KEY_set_public_key.3 EC_KEY_new.3,EC_KEY_set_public_key_affine_coordinates.3 EC_KEY_new.3,EC_KEY_up_ref.3 -EC_POINT_add.3,EC_GROUP_have_precompute_mult.3 -EC_POINT_add.3,EC_GROUP_precompute_mult.3 EC_POINT_add.3,EC_POINT_cmp.3 EC_POINT_add.3,EC_POINT_dbl.3 EC_POINT_add.3,EC_POINT_invert.3 @@ -650,129 +719,39 @@ EC_POINT_add.3,EC_POINT_is_at_infinity.3 EC_POINT_add.3,EC_POINT_is_on_curve.3 EC_POINT_add.3,EC_POINT_make_affine.3 EC_POINT_add.3,EC_POINT_mul.3 -EC_POINT_add.3,EC_POINTs_make_affine.3 -EC_POINT_add.3,EC_POINTs_mul.3 -EC_POINT_new.3,EC_POINT_bn2point.3 +EC_POINT_get_affine_coordinates.3,EC_POINT_get_affine_coordinates_GFp.3 +EC_POINT_get_affine_coordinates.3,EC_POINT_set_affine_coordinates.3 +EC_POINT_get_affine_coordinates.3,EC_POINT_set_affine_coordinates_GFp.3 +EC_POINT_get_affine_coordinates.3,EC_POINT_set_compressed_coordinates.3 +EC_POINT_get_affine_coordinates.3,EC_POINT_set_compressed_coordinates_GFp.3 +EC_POINT_get_affine_coordinates.3,EC_POINT_set_to_infinity.3 EC_POINT_new.3,EC_POINT_clear_free.3 EC_POINT_new.3,EC_POINT_copy.3 EC_POINT_new.3,EC_POINT_dup.3 EC_POINT_new.3,EC_POINT_free.3 -EC_POINT_new.3,EC_POINT_get_Jprojective_coordinates_GFp.3 -EC_POINT_new.3,EC_POINT_get_affine_coordinates.3 -EC_POINT_new.3,EC_POINT_get_affine_coordinates_GF2m.3 -EC_POINT_new.3,EC_POINT_get_affine_coordinates_GFp.3 -EC_POINT_new.3,EC_POINT_hex2point.3 -EC_POINT_new.3,EC_POINT_method_of.3 -EC_POINT_new.3,EC_POINT_oct2point.3 -EC_POINT_new.3,EC_POINT_point2bn.3 -EC_POINT_new.3,EC_POINT_point2hex.3 -EC_POINT_new.3,EC_POINT_point2oct.3 -EC_POINT_new.3,EC_POINT_set_Jprojective_coordinates_GFp.3 -EC_POINT_new.3,EC_POINT_set_affine_coordinates.3 -EC_POINT_new.3,EC_POINT_set_affine_coordinates_GF2m.3 -EC_POINT_new.3,EC_POINT_set_affine_coordinates_GFp.3 -EC_POINT_new.3,EC_POINT_set_compressed_coordinates.3 -EC_POINT_new.3,EC_POINT_set_compressed_coordinates_GF2m.3 -EC_POINT_new.3,EC_POINT_set_compressed_coordinates_GFp.3 -EC_POINT_new.3,EC_POINT_set_to_infinity.3 -ENGINE_add.3,ENGINE_by_id.3 -ENGINE_add.3,ENGINE_cleanup.3 -ENGINE_add.3,ENGINE_get_first.3 -ENGINE_add.3,ENGINE_get_id.3 -ENGINE_add.3,ENGINE_get_last.3 -ENGINE_add.3,ENGINE_get_name.3 -ENGINE_add.3,ENGINE_get_next.3 -ENGINE_add.3,ENGINE_get_prev.3 -ENGINE_add.3,ENGINE_remove.3 -ENGINE_add.3,ENGINE_set_id.3 -ENGINE_add.3,ENGINE_set_name.3 -ENGINE_ctrl.3,ENGINE_CTRL_FUNC_PTR.3 -ENGINE_ctrl.3,ENGINE_cmd_is_executable.3 -ENGINE_ctrl.3,ENGINE_ctrl_cmd.3 -ENGINE_ctrl.3,ENGINE_ctrl_cmd_string.3 -ENGINE_ctrl.3,ENGINE_get_cmd_defns.3 -ENGINE_ctrl.3,ENGINE_get_ctrl_function.3 -ENGINE_ctrl.3,ENGINE_set_cmd_defns.3 -ENGINE_ctrl.3,ENGINE_set_ctrl_function.3 -ENGINE_get_default_RSA.3,ENGINE_get_cipher_engine.3 -ENGINE_get_default_RSA.3,ENGINE_get_default_DH.3 -ENGINE_get_default_RSA.3,ENGINE_get_default_DSA.3 -ENGINE_get_default_RSA.3,ENGINE_get_default_ECDH.3 -ENGINE_get_default_RSA.3,ENGINE_get_default_ECDSA.3 -ENGINE_get_default_RSA.3,ENGINE_get_default_RAND.3 -ENGINE_get_default_RSA.3,ENGINE_get_digest_engine.3 -ENGINE_get_default_RSA.3,ENGINE_get_table_flags.3 -ENGINE_get_default_RSA.3,ENGINE_set_table_flags.3 -ENGINE_init.3,ENGINE_GEN_INT_FUNC_PTR.3 -ENGINE_init.3,ENGINE_finish.3 -ENGINE_init.3,ENGINE_get_finish_function.3 -ENGINE_init.3,ENGINE_get_init_function.3 -ENGINE_init.3,ENGINE_set_finish_function.3 -ENGINE_init.3,ENGINE_set_init_function.3 -ENGINE_new.3,ENGINE_GEN_INT_FUNC_PTR.3 +EC_POINT_point2oct.3,EC_POINT_bn2point.3 +EC_POINT_point2oct.3,EC_POINT_hex2point.3 +EC_POINT_point2oct.3,EC_POINT_oct2point.3 +EC_POINT_point2oct.3,EC_POINT_point2bn.3 +EC_POINT_point2oct.3,EC_POINT_point2hex.3 +ENGINE_new.3,ENGINE_by_id.3 +ENGINE_new.3,ENGINE_cleanup.3 +ENGINE_new.3,ENGINE_ctrl_cmd.3 +ENGINE_new.3,ENGINE_ctrl_cmd_string.3 +ENGINE_new.3,ENGINE_finish.3 ENGINE_new.3,ENGINE_free.3 -ENGINE_new.3,ENGINE_get_destroy_function.3 -ENGINE_new.3,ENGINE_set_destroy_function.3 -ENGINE_new.3,ENGINE_up_ref.3 -ENGINE_register_RSA.3,ENGINE_register_DH.3 -ENGINE_register_RSA.3,ENGINE_register_DSA.3 -ENGINE_register_RSA.3,ENGINE_register_ECDH.3 -ENGINE_register_RSA.3,ENGINE_register_ECDSA.3 -ENGINE_register_RSA.3,ENGINE_register_RAND.3 -ENGINE_register_RSA.3,ENGINE_register_STORE.3 -ENGINE_register_RSA.3,ENGINE_register_ciphers.3 -ENGINE_register_RSA.3,ENGINE_register_complete.3 -ENGINE_register_RSA.3,ENGINE_register_digests.3 -ENGINE_register_all_RSA.3,ENGINE_load_builtin_engines.3 -ENGINE_register_all_RSA.3,ENGINE_load_dynamic.3 -ENGINE_register_all_RSA.3,ENGINE_register_all_DH.3 -ENGINE_register_all_RSA.3,ENGINE_register_all_DSA.3 -ENGINE_register_all_RSA.3,ENGINE_register_all_ECDH.3 -ENGINE_register_all_RSA.3,ENGINE_register_all_ECDSA.3 -ENGINE_register_all_RSA.3,ENGINE_register_all_RAND.3 -ENGINE_register_all_RSA.3,ENGINE_register_all_STORE.3 -ENGINE_register_all_RSA.3,ENGINE_register_all_ciphers.3 -ENGINE_register_all_RSA.3,ENGINE_register_all_complete.3 -ENGINE_register_all_RSA.3,ENGINE_register_all_digests.3 -ENGINE_set_RSA.3,ENGINE_CIPHERS_PTR.3 -ENGINE_set_RSA.3,ENGINE_DIGESTS_PTR.3 -ENGINE_set_RSA.3,ENGINE_get_DH.3 -ENGINE_set_RSA.3,ENGINE_get_DSA.3 -ENGINE_set_RSA.3,ENGINE_get_ECDH.3 -ENGINE_set_RSA.3,ENGINE_get_ECDSA.3 -ENGINE_set_RSA.3,ENGINE_get_RAND.3 -ENGINE_set_RSA.3,ENGINE_get_RSA.3 -ENGINE_set_RSA.3,ENGINE_get_STORE.3 -ENGINE_set_RSA.3,ENGINE_get_cipher.3 -ENGINE_set_RSA.3,ENGINE_get_ciphers.3 -ENGINE_set_RSA.3,ENGINE_get_digest.3 -ENGINE_set_RSA.3,ENGINE_get_digests.3 -ENGINE_set_RSA.3,ENGINE_set_DH.3 -ENGINE_set_RSA.3,ENGINE_set_DSA.3 -ENGINE_set_RSA.3,ENGINE_set_ECDH.3 -ENGINE_set_RSA.3,ENGINE_set_ECDSA.3 -ENGINE_set_RSA.3,ENGINE_set_RAND.3 -ENGINE_set_RSA.3,ENGINE_set_STORE.3 -ENGINE_set_RSA.3,ENGINE_set_ciphers.3 -ENGINE_set_RSA.3,ENGINE_set_digests.3 -ENGINE_set_default.3,ENGINE_set_default_DH.3 -ENGINE_set_default.3,ENGINE_set_default_DSA.3 -ENGINE_set_default.3,ENGINE_set_default_ECDH.3 -ENGINE_set_default.3,ENGINE_set_default_ECDSA.3 -ENGINE_set_default.3,ENGINE_set_default_RAND.3 -ENGINE_set_default.3,ENGINE_set_default_RSA.3 -ENGINE_set_default.3,ENGINE_set_default_ciphers.3 -ENGINE_set_default.3,ENGINE_set_default_digests.3 -ENGINE_set_default.3,ENGINE_set_default_string.3 -ENGINE_set_flags.3,ENGINE_get_flags.3 -ENGINE_unregister_RSA.3,ENGINE_unregister_DH.3 -ENGINE_unregister_RSA.3,ENGINE_unregister_DSA.3 -ENGINE_unregister_RSA.3,ENGINE_unregister_ECDH.3 -ENGINE_unregister_RSA.3,ENGINE_unregister_ECDSA.3 -ENGINE_unregister_RSA.3,ENGINE_unregister_RAND.3 -ENGINE_unregister_RSA.3,ENGINE_unregister_STORE.3 -ENGINE_unregister_RSA.3,ENGINE_unregister_ciphers.3 -ENGINE_unregister_RSA.3,ENGINE_unregister_digests.3 +ENGINE_new.3,ENGINE_get_default_RSA.3 +ENGINE_new.3,ENGINE_get_id.3 +ENGINE_new.3,ENGINE_get_name.3 +ENGINE_new.3,ENGINE_init.3 +ENGINE_new.3,ENGINE_load_builtin_engines.3 +ENGINE_new.3,ENGINE_load_dynamic.3 +ENGINE_new.3,ENGINE_load_openssl.3 +ENGINE_new.3,ENGINE_load_private_key.3 +ENGINE_new.3,ENGINE_load_public_key.3 +ENGINE_new.3,ENGINE_register_all_complete.3 +ENGINE_new.3,ENGINE_set_default.3 +ENGINE_new.3,ENGINE_set_default_RSA.3 ERR_GET_LIB.3,ERR_FATAL_ERROR.3 ERR_GET_LIB.3,ERR_GET_FUNC.3 ERR_GET_LIB.3,ERR_GET_REASON.3 @@ -794,8 +773,6 @@ ERR_load_strings.3,ERR_PACK.3 ERR_load_strings.3,ERR_get_next_error_library.3 ERR_print_errors.3,ERR_print_errors_cb.3 ERR_print_errors.3,ERR_print_errors_fp.3 -ERR_put_error.3,ERR_add_error_data.3 -ERR_put_error.3,ERR_add_error_vdata.3 ERR_remove_state.3,ERR_remove_thread_state.3 ERR_set_mark.3,ERR_pop_to_mark.3 ESS_SIGNING_CERT_new.3,ESS_CERT_ID_free.3 @@ -804,6 +781,8 @@ ESS_SIGNING_CERT_new.3,ESS_ISSUER_SERIAL_free.3 ESS_SIGNING_CERT_new.3,ESS_ISSUER_SERIAL_new.3 ESS_SIGNING_CERT_new.3,ESS_SIGNING_CERT_free.3 EVP_AEAD_CTX_init.3,EVP_AEAD_CTX_cleanup.3 +EVP_AEAD_CTX_init.3,EVP_AEAD_CTX_free.3 +EVP_AEAD_CTX_init.3,EVP_AEAD_CTX_new.3 EVP_AEAD_CTX_init.3,EVP_AEAD_CTX_open.3 EVP_AEAD_CTX_init.3,EVP_AEAD_CTX_seal.3 EVP_AEAD_CTX_init.3,EVP_AEAD_key_length.3 @@ -814,44 +793,77 @@ EVP_AEAD_CTX_init.3,EVP_aead_aes_128_gcm.3 EVP_AEAD_CTX_init.3,EVP_aead_aes_256_gcm.3 EVP_AEAD_CTX_init.3,EVP_aead_chacha20_poly1305.3 EVP_AEAD_CTX_init.3,EVP_aead_xchacha20_poly1305.3 +EVP_CIPHER_CTX_ctrl.3,EVP_CIPHER_CTX_get_iv.3 +EVP_CIPHER_CTX_ctrl.3,EVP_CIPHER_CTX_iv_length.3 +EVP_CIPHER_CTX_ctrl.3,EVP_CIPHER_CTX_key_length.3 +EVP_CIPHER_CTX_ctrl.3,EVP_CIPHER_CTX_set_iv.3 +EVP_CIPHER_CTX_ctrl.3,EVP_CIPHER_CTX_set_key_length.3 +EVP_CIPHER_CTX_ctrl.3,EVP_CIPHER_CTX_set_padding.3 +EVP_CIPHER_CTX_ctrl.3,EVP_CIPHER_iv_length.3 +EVP_CIPHER_CTX_ctrl.3,EVP_CIPHER_key_length.3 +EVP_CIPHER_CTX_get_cipher_data.3,EVP_CIPHER_CTX_buf_noconst.3 +EVP_CIPHER_CTX_get_cipher_data.3,EVP_CIPHER_CTX_set_cipher_data.3 +EVP_CIPHER_CTX_init.3,EVP_CIPHER_CTX_cleanup.3 +EVP_CIPHER_CTX_init.3,EVP_Cipher.3 +EVP_CIPHER_CTX_set_flags.3,EVP_CIPHER_CTX_clear_flags.3 +EVP_CIPHER_CTX_set_flags.3,EVP_CIPHER_CTX_get_app_data.3 +EVP_CIPHER_CTX_set_flags.3,EVP_CIPHER_CTX_rand_key.3 +EVP_CIPHER_CTX_set_flags.3,EVP_CIPHER_CTX_set_app_data.3 +EVP_CIPHER_CTX_set_flags.3,EVP_CIPHER_CTX_test_flags.3 +EVP_CIPHER_CTX_set_flags.3,EVP_CIPHER_asn1_to_param.3 +EVP_CIPHER_CTX_set_flags.3,EVP_CIPHER_param_to_asn1.3 +EVP_CIPHER_do_all.3,EVP_CIPHER_do_all_sorted.3 +EVP_CIPHER_do_all.3,EVP_MD_do_all.3 +EVP_CIPHER_do_all.3,EVP_MD_do_all_sorted.3 +EVP_CIPHER_do_all.3,OBJ_NAME_do_all.3 +EVP_CIPHER_do_all.3,OBJ_NAME_do_all_sorted.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_dup.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_free.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_set_cleanup.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_set_ctrl.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_set_do_cipher.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_set_flags.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_set_get_asn1_params.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_set_impl_ctx_size.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_set_init.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_set_iv_length.3 +EVP_CIPHER_meth_new.3,EVP_CIPHER_meth_set_set_asn1_params.3 +EVP_CIPHER_nid.3,EVP_CIPHER_CTX_block_size.3 +EVP_CIPHER_nid.3,EVP_CIPHER_CTX_flags.3 +EVP_CIPHER_nid.3,EVP_CIPHER_CTX_mode.3 +EVP_CIPHER_nid.3,EVP_CIPHER_CTX_nid.3 +EVP_CIPHER_nid.3,EVP_CIPHER_CTX_type.3 +EVP_CIPHER_nid.3,EVP_CIPHER_block_size.3 +EVP_CIPHER_nid.3,EVP_CIPHER_flags.3 +EVP_CIPHER_nid.3,EVP_CIPHER_mode.3 +EVP_CIPHER_nid.3,EVP_CIPHER_name.3 +EVP_CIPHER_nid.3,EVP_CIPHER_type.3 EVP_DigestInit.3,EVP_Digest.3 EVP_DigestInit.3,EVP_DigestFinal.3 EVP_DigestInit.3,EVP_DigestFinal_ex.3 EVP_DigestInit.3,EVP_DigestInit_ex.3 EVP_DigestInit.3,EVP_DigestUpdate.3 -EVP_DigestInit.3,EVP_MAX_MD_SIZE.3 -EVP_DigestInit.3,EVP_MD_CTX_block_size.3 EVP_DigestInit.3,EVP_MD_CTX_cleanup.3 EVP_DigestInit.3,EVP_MD_CTX_copy.3 EVP_DigestInit.3,EVP_MD_CTX_copy_ex.3 EVP_DigestInit.3,EVP_MD_CTX_create.3 -EVP_DigestInit.3,EVP_MD_CTX_ctrl.3 EVP_DigestInit.3,EVP_MD_CTX_destroy.3 EVP_DigestInit.3,EVP_MD_CTX_free.3 EVP_DigestInit.3,EVP_MD_CTX_init.3 EVP_DigestInit.3,EVP_MD_CTX_md.3 EVP_DigestInit.3,EVP_MD_CTX_new.3 EVP_DigestInit.3,EVP_MD_CTX_reset.3 -EVP_DigestInit.3,EVP_MD_CTX_size.3 -EVP_DigestInit.3,EVP_MD_CTX_type.3 -EVP_DigestInit.3,EVP_MD_block_size.3 -EVP_DigestInit.3,EVP_MD_pkey_type.3 -EVP_DigestInit.3,EVP_MD_size.3 -EVP_DigestInit.3,EVP_MD_type.3 -EVP_DigestInit.3,EVP_dss.3 -EVP_DigestInit.3,EVP_dss1.3 EVP_DigestInit.3,EVP_get_digestbyname.3 EVP_DigestInit.3,EVP_get_digestbynid.3 EVP_DigestInit.3,EVP_get_digestbyobj.3 -EVP_DigestInit.3,EVP_md5.3 -EVP_DigestInit.3,EVP_md5_sha1.3 EVP_DigestInit.3,EVP_md_null.3 EVP_DigestInit.3,EVP_ripemd160.3 -EVP_DigestInit.3,EVP_sha1.3 EVP_DigestInit.3,EVP_sha224.3 EVP_DigestInit.3,EVP_sha256.3 EVP_DigestInit.3,EVP_sha384.3 EVP_DigestInit.3,EVP_sha512.3 +EVP_DigestInit.3,EVP_sha512_224.3 +EVP_DigestInit.3,EVP_sha512_256.3 EVP_DigestSignInit.3,EVP_DigestSign.3 EVP_DigestSignInit.3,EVP_DigestSignFinal.3 EVP_DigestSignInit.3,EVP_DigestSignUpdate.3 @@ -867,40 +879,12 @@ EVP_EncodeInit.3,EVP_ENCODE_CTX_new.3 EVP_EncodeInit.3,EVP_EncodeBlock.3 EVP_EncodeInit.3,EVP_EncodeFinal.3 EVP_EncodeInit.3,EVP_EncodeUpdate.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_block_size.3 EVP_EncryptInit.3,EVP_CIPHER_CTX_cipher.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_cleanup.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_clear_flags.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_ctrl.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_flags.3 +EVP_EncryptInit.3,EVP_CIPHER_CTX_copy.3 +EVP_EncryptInit.3,EVP_CIPHER_CTX_encrypting.3 EVP_EncryptInit.3,EVP_CIPHER_CTX_free.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_get_app_data.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_get_iv.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_init.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_iv_length.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_key_length.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_mode.3 EVP_EncryptInit.3,EVP_CIPHER_CTX_new.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_nid.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_rand_key.3 EVP_EncryptInit.3,EVP_CIPHER_CTX_reset.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_set_app_data.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_set_flags.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_set_iv.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_set_key_length.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_set_padding.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_test_flags.3 -EVP_EncryptInit.3,EVP_CIPHER_CTX_type.3 -EVP_EncryptInit.3,EVP_CIPHER_asn1_to_param.3 -EVP_EncryptInit.3,EVP_CIPHER_block_size.3 -EVP_EncryptInit.3,EVP_CIPHER_flags.3 -EVP_EncryptInit.3,EVP_CIPHER_iv_length.3 -EVP_EncryptInit.3,EVP_CIPHER_key_length.3 -EVP_EncryptInit.3,EVP_CIPHER_mode.3 -EVP_EncryptInit.3,EVP_CIPHER_nid.3 -EVP_EncryptInit.3,EVP_CIPHER_param_to_asn1.3 -EVP_EncryptInit.3,EVP_CIPHER_type.3 -EVP_EncryptInit.3,EVP_Cipher.3 EVP_EncryptInit.3,EVP_CipherFinal.3 EVP_EncryptInit.3,EVP_CipherFinal_ex.3 EVP_EncryptInit.3,EVP_CipherInit.3 @@ -925,7 +909,6 @@ EVP_EncryptInit.3,EVP_cast5_cfb.3 EVP_EncryptInit.3,EVP_cast5_cfb64.3 EVP_EncryptInit.3,EVP_cast5_ecb.3 EVP_EncryptInit.3,EVP_cast5_ofb.3 -EVP_EncryptInit.3,EVP_chacha20.3 EVP_EncryptInit.3,EVP_enc_null.3 EVP_EncryptInit.3,EVP_get_cipherbyname.3 EVP_EncryptInit.3,EVP_get_cipherbynid.3 @@ -935,15 +918,24 @@ EVP_EncryptInit.3,EVP_idea_cfb.3 EVP_EncryptInit.3,EVP_idea_cfb64.3 EVP_EncryptInit.3,EVP_idea_ecb.3 EVP_EncryptInit.3,EVP_idea_ofb.3 -EVP_EncryptInit.3,EVP_rc2_40_cbc.3 -EVP_EncryptInit.3,EVP_rc2_64_cbc.3 -EVP_EncryptInit.3,EVP_rc2_cbc.3 -EVP_EncryptInit.3,EVP_rc2_cfb.3 -EVP_EncryptInit.3,EVP_rc2_cfb64.3 -EVP_EncryptInit.3,EVP_rc2_ecb.3 -EVP_EncryptInit.3,EVP_rc2_ofb.3 +EVP_MD_CTX_ctrl.3,EVP_MD_CTX_clear_flags.3 +EVP_MD_CTX_ctrl.3,EVP_MD_CTX_md_data.3 +EVP_MD_CTX_ctrl.3,EVP_MD_CTX_pkey_ctx.3 +EVP_MD_CTX_ctrl.3,EVP_MD_CTX_set_flags.3 +EVP_MD_CTX_ctrl.3,EVP_MD_CTX_set_pkey_ctx.3 +EVP_MD_CTX_ctrl.3,EVP_MD_CTX_test_flags.3 +EVP_MD_nid.3,EVP_MD_CTX_block_size.3 +EVP_MD_nid.3,EVP_MD_CTX_size.3 +EVP_MD_nid.3,EVP_MD_CTX_type.3 +EVP_MD_nid.3,EVP_MD_block_size.3 +EVP_MD_nid.3,EVP_MD_flags.3 +EVP_MD_nid.3,EVP_MD_name.3 +EVP_MD_nid.3,EVP_MD_pkey_type.3 +EVP_MD_nid.3,EVP_MD_size.3 +EVP_MD_nid.3,EVP_MD_type.3 EVP_OpenInit.3,EVP_OpenFinal.3 EVP_OpenInit.3,EVP_OpenUpdate.3 +EVP_PKCS82PKEY.3,EVP_PKEY2PKCS8.3 EVP_PKEY_CTX_ctrl.3,EVP_PKEY_CTX_ctrl_str.3 EVP_PKEY_CTX_ctrl.3,EVP_PKEY_CTX_get0_ecdh_kdf_ukm.3 EVP_PKEY_CTX_ctrl.3,EVP_PKEY_CTX_get1_id.3 @@ -965,60 +957,47 @@ EVP_PKEY_CTX_ctrl.3,EVP_PKEY_CTX_set_ecdh_kdf_md.3 EVP_PKEY_CTX_ctrl.3,EVP_PKEY_CTX_set_ecdh_kdf_outlen.3 EVP_PKEY_CTX_ctrl.3,EVP_PKEY_CTX_set_ecdh_kdf_type.3 EVP_PKEY_CTX_ctrl.3,EVP_PKEY_CTX_set_signature_md.3 +EVP_PKEY_CTX_get_operation.3,EVP_PKEY_CTX_get0_pkey.3 EVP_PKEY_CTX_new.3,EVP_PKEY_CTX_dup.3 EVP_PKEY_CTX_new.3,EVP_PKEY_CTX_free.3 EVP_PKEY_CTX_new.3,EVP_PKEY_CTX_new_id.3 +EVP_PKEY_CTX_set_hkdf_md.3,EVP_PKEY_CTX_add1_hkdf_info.3 +EVP_PKEY_CTX_set_hkdf_md.3,EVP_PKEY_CTX_hkdf_mode.3 +EVP_PKEY_CTX_set_hkdf_md.3,EVP_PKEY_CTX_set1_hkdf_key.3 +EVP_PKEY_CTX_set_hkdf_md.3,EVP_PKEY_CTX_set1_hkdf_salt.3 +EVP_PKEY_CTX_set_tls1_prf_md.3,EVP_PKEY_CTX_add1_tls1_prf_seed.3 +EVP_PKEY_CTX_set_tls1_prf_md.3,EVP_PKEY_CTX_set1_tls1_prf_secret.3 EVP_PKEY_asn1_get_count.3,EVP_PKEY_asn1_find.3 EVP_PKEY_asn1_get_count.3,EVP_PKEY_asn1_find_str.3 EVP_PKEY_asn1_get_count.3,EVP_PKEY_asn1_get0.3 EVP_PKEY_asn1_get_count.3,EVP_PKEY_asn1_get0_info.3 EVP_PKEY_asn1_get_count.3,EVP_PKEY_get0_asn1.3 -EVP_PKEY_asn1_new.3,EVP_PKEY_asn1_add0.3 -EVP_PKEY_asn1_new.3,EVP_PKEY_asn1_add_alias.3 -EVP_PKEY_asn1_new.3,EVP_PKEY_asn1_copy.3 -EVP_PKEY_asn1_new.3,EVP_PKEY_asn1_free.3 -EVP_PKEY_asn1_new.3,EVP_PKEY_asn1_set_ctrl.3 -EVP_PKEY_asn1_new.3,EVP_PKEY_asn1_set_free.3 -EVP_PKEY_asn1_new.3,EVP_PKEY_asn1_set_param.3 -EVP_PKEY_asn1_new.3,EVP_PKEY_asn1_set_private.3 -EVP_PKEY_asn1_new.3,EVP_PKEY_asn1_set_public.3 EVP_PKEY_cmp.3,EVP_PKEY_cmp_parameters.3 EVP_PKEY_cmp.3,EVP_PKEY_copy_parameters.3 EVP_PKEY_cmp.3,EVP_PKEY_missing_parameters.3 EVP_PKEY_decrypt.3,EVP_PKEY_decrypt_init.3 +EVP_PKEY_derive.3,EVP_PKEY_CTX_get0_peerkey.3 EVP_PKEY_derive.3,EVP_PKEY_derive_init.3 EVP_PKEY_derive.3,EVP_PKEY_derive_set_peer.3 EVP_PKEY_encrypt.3,EVP_PKEY_encrypt_init.3 EVP_PKEY_keygen.3,EVP_PKEY_CTX_get_app_data.3 EVP_PKEY_keygen.3,EVP_PKEY_CTX_get_cb.3 +EVP_PKEY_keygen.3,EVP_PKEY_CTX_get_data.3 EVP_PKEY_keygen.3,EVP_PKEY_CTX_get_keygen_info.3 +EVP_PKEY_keygen.3,EVP_PKEY_CTX_set0_keygen_info.3 EVP_PKEY_keygen.3,EVP_PKEY_CTX_set_app_data.3 EVP_PKEY_keygen.3,EVP_PKEY_CTX_set_cb.3 +EVP_PKEY_keygen.3,EVP_PKEY_CTX_set_data.3 EVP_PKEY_keygen.3,EVP_PKEY_gen_cb.3 EVP_PKEY_keygen.3,EVP_PKEY_keygen_init.3 EVP_PKEY_keygen.3,EVP_PKEY_paramgen.3 EVP_PKEY_keygen.3,EVP_PKEY_paramgen_init.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_add0.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_copy.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_find.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_free.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_cleanup.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_copy.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_ctrl.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_decrypt.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_derive.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_encrypt.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_init.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_keygen.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_paramgen.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_sign.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_signctx.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_verify.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_verify_recover.3 -EVP_PKEY_meth_new.3,EVP_PKEY_meth_set_verifyctx.3 EVP_PKEY_new.3,EVP_PKEY_free.3 -EVP_PKEY_new.3,EVP_PKEY_new_CMAC_key.3 +EVP_PKEY_new.3,EVP_PKEY_get_raw_private_key.3 +EVP_PKEY_new.3,EVP_PKEY_get_raw_public_key.3 EVP_PKEY_new.3,EVP_PKEY_new_mac_key.3 +EVP_PKEY_new.3,EVP_PKEY_new_raw_private_key.3 +EVP_PKEY_new.3,EVP_PKEY_new_raw_public_key.3 EVP_PKEY_new.3,EVP_PKEY_up_ref.3 EVP_PKEY_print_private.3,EVP_PKEY_print_params.3 EVP_PKEY_print_private.3,EVP_PKEY_print_public.3 @@ -1026,7 +1005,6 @@ EVP_PKEY_set1_RSA.3,EVP_PKEY_assign.3 EVP_PKEY_set1_RSA.3,EVP_PKEY_assign_DH.3 EVP_PKEY_set1_RSA.3,EVP_PKEY_assign_DSA.3 EVP_PKEY_set1_RSA.3,EVP_PKEY_assign_EC_KEY.3 -EVP_PKEY_set1_RSA.3,EVP_PKEY_assign_GOST.3 EVP_PKEY_set1_RSA.3,EVP_PKEY_assign_RSA.3 EVP_PKEY_set1_RSA.3,EVP_PKEY_base_id.3 EVP_PKEY_set1_RSA.3,EVP_PKEY_get0.3 @@ -1044,14 +1022,15 @@ EVP_PKEY_set1_RSA.3,EVP_PKEY_set1_DH.3 EVP_PKEY_set1_RSA.3,EVP_PKEY_set1_DSA.3 EVP_PKEY_set1_RSA.3,EVP_PKEY_set1_EC_KEY.3 EVP_PKEY_set1_RSA.3,EVP_PKEY_set_type.3 +EVP_PKEY_set1_RSA.3,EVP_PKEY_set_type_str.3 EVP_PKEY_set1_RSA.3,EVP_PKEY_type.3 EVP_PKEY_sign.3,EVP_PKEY_sign_init.3 +EVP_PKEY_size.3,EVP_PKEY_bits.3 +EVP_PKEY_size.3,EVP_PKEY_security_bits.3 EVP_PKEY_verify.3,EVP_PKEY_verify_init.3 EVP_PKEY_verify_recover.3,EVP_PKEY_verify_recover_init.3 EVP_SealInit.3,EVP_SealFinal.3 EVP_SealInit.3,EVP_SealUpdate.3 -EVP_SignInit.3,EVP_PKEY_bits.3 -EVP_SignInit.3,EVP_PKEY_size.3 EVP_SignInit.3,EVP_SignFinal.3 EVP_SignInit.3,EVP_SignInit_ex.3 EVP_SignInit.3,EVP_SignUpdate.3 @@ -1059,41 +1038,39 @@ EVP_VerifyInit.3,EVP_VerifyFinal.3 EVP_VerifyInit.3,EVP_VerifyInit_ex.3 EVP_VerifyInit.3,EVP_VerifyUpdate.3 EVP_aes_128_cbc.3,EVP_aes_128_cbc_hmac_sha1.3 -EVP_aes_128_cbc.3,EVP_aes_128_ccm.3 EVP_aes_128_cbc.3,EVP_aes_128_cfb.3 EVP_aes_128_cbc.3,EVP_aes_128_cfb1.3 EVP_aes_128_cbc.3,EVP_aes_128_cfb128.3 EVP_aes_128_cbc.3,EVP_aes_128_cfb8.3 EVP_aes_128_cbc.3,EVP_aes_128_ctr.3 EVP_aes_128_cbc.3,EVP_aes_128_ecb.3 -EVP_aes_128_cbc.3,EVP_aes_128_gcm.3 EVP_aes_128_cbc.3,EVP_aes_128_ofb.3 EVP_aes_128_cbc.3,EVP_aes_128_wrap.3 EVP_aes_128_cbc.3,EVP_aes_128_xts.3 EVP_aes_128_cbc.3,EVP_aes_192_cbc.3 -EVP_aes_128_cbc.3,EVP_aes_192_ccm.3 EVP_aes_128_cbc.3,EVP_aes_192_cfb.3 EVP_aes_128_cbc.3,EVP_aes_192_cfb1.3 EVP_aes_128_cbc.3,EVP_aes_192_cfb128.3 EVP_aes_128_cbc.3,EVP_aes_192_cfb8.3 EVP_aes_128_cbc.3,EVP_aes_192_ctr.3 EVP_aes_128_cbc.3,EVP_aes_192_ecb.3 -EVP_aes_128_cbc.3,EVP_aes_192_gcm.3 EVP_aes_128_cbc.3,EVP_aes_192_ofb.3 EVP_aes_128_cbc.3,EVP_aes_192_wrap.3 EVP_aes_128_cbc.3,EVP_aes_256_cbc.3 EVP_aes_128_cbc.3,EVP_aes_256_cbc_hmac_sha1.3 -EVP_aes_128_cbc.3,EVP_aes_256_ccm.3 EVP_aes_128_cbc.3,EVP_aes_256_cfb.3 EVP_aes_128_cbc.3,EVP_aes_256_cfb1.3 EVP_aes_128_cbc.3,EVP_aes_256_cfb128.3 EVP_aes_128_cbc.3,EVP_aes_256_cfb8.3 EVP_aes_128_cbc.3,EVP_aes_256_ctr.3 EVP_aes_128_cbc.3,EVP_aes_256_ecb.3 -EVP_aes_128_cbc.3,EVP_aes_256_gcm.3 EVP_aes_128_cbc.3,EVP_aes_256_ofb.3 EVP_aes_128_cbc.3,EVP_aes_256_wrap.3 EVP_aes_128_cbc.3,EVP_aes_256_xts.3 +EVP_aes_128_ccm.3,EVP_aes_192_ccm.3 +EVP_aes_128_ccm.3,EVP_aes_256_ccm.3 +EVP_aes_128_gcm.3,EVP_aes_192_gcm.3 +EVP_aes_128_gcm.3,EVP_aes_256_gcm.3 EVP_camellia_128_cbc.3,EVP_camellia_128_cfb.3 EVP_camellia_128_cbc.3,EVP_camellia_128_cfb1.3 EVP_camellia_128_cbc.3,EVP_camellia_128_cfb128.3 @@ -1114,6 +1091,7 @@ EVP_camellia_128_cbc.3,EVP_camellia_256_cfb128.3 EVP_camellia_128_cbc.3,EVP_camellia_256_cfb8.3 EVP_camellia_128_cbc.3,EVP_camellia_256_ecb.3 EVP_camellia_128_cbc.3,EVP_camellia_256_ofb.3 +EVP_chacha20.3,EVP_chacha20_poly1305.3 EVP_des_cbc.3,EVP_des_cfb.3 EVP_des_cbc.3,EVP_des_cfb1.3 EVP_des_cbc.3,EVP_des_cfb64.3 @@ -1135,8 +1113,20 @@ EVP_des_cbc.3,EVP_des_ede_ecb.3 EVP_des_cbc.3,EVP_des_ede_ofb.3 EVP_des_cbc.3,EVP_des_ofb.3 EVP_des_cbc.3,EVP_desx_cbc.3 +EVP_rc2_cbc.3,EVP_rc2_40_cbc.3 +EVP_rc2_cbc.3,EVP_rc2_64_cbc.3 +EVP_rc2_cbc.3,EVP_rc2_cfb.3 +EVP_rc2_cbc.3,EVP_rc2_cfb64.3 +EVP_rc2_cbc.3,EVP_rc2_ecb.3 +EVP_rc2_cbc.3,EVP_rc2_ofb.3 EVP_rc4.3,EVP_rc4_40.3 EVP_rc4.3,EVP_rc4_hmac_md5.3 +EVP_sha1.3,EVP_md4.3 +EVP_sha1.3,EVP_md5.3 +EVP_sha1.3,EVP_md5_sha1.3 +EVP_sha3_224.3,EVP_sha3_256.3 +EVP_sha3_224.3,EVP_sha3_384.3 +EVP_sha3_224.3,EVP_sha3_512.3 EVP_sm4_cbc.3,EVP_sm4_cfb.3 EVP_sm4_cbc.3,EVP_sm4_cfb128.3 EVP_sm4_cbc.3,EVP_sm4_ctr.3 @@ -1150,20 +1140,31 @@ GENERAL_NAME_new.3,GENERAL_NAMES_new.3 GENERAL_NAME_new.3,GENERAL_NAME_free.3 GENERAL_NAME_new.3,OTHERNAME_free.3 GENERAL_NAME_new.3,OTHERNAME_new.3 -HMAC.3,HMAC_CTX_cleanup.3 HMAC.3,HMAC_CTX_copy.3 HMAC.3,HMAC_CTX_free.3 HMAC.3,HMAC_CTX_get_md.3 -HMAC.3,HMAC_CTX_init.3 HMAC.3,HMAC_CTX_new.3 HMAC.3,HMAC_CTX_reset.3 HMAC.3,HMAC_CTX_set_flags.3 HMAC.3,HMAC_Final.3 -HMAC.3,HMAC_Init.3 HMAC.3,HMAC_Init_ex.3 HMAC.3,HMAC_Update.3 -HMAC.3,HMAC_cleanup.3 HMAC.3,HMAC_size.3 +IPAddressRange_new.3,IPAddressChoice_free.3 +IPAddressRange_new.3,IPAddressChoice_new.3 +IPAddressRange_new.3,IPAddressFamily_free.3 +IPAddressRange_new.3,IPAddressFamily_new.3 +IPAddressRange_new.3,IPAddressOrRange_free.3 +IPAddressRange_new.3,IPAddressOrRange_new.3 +IPAddressRange_new.3,IPAddressRange_free.3 +IPAddressRange_new.3,d2i_IPAddressChoice.3 +IPAddressRange_new.3,d2i_IPAddressFamily.3 +IPAddressRange_new.3,d2i_IPAddressOrRange.3 +IPAddressRange_new.3,d2i_IPAddressRange.3 +IPAddressRange_new.3,i2d_IPAddressChoice.3 +IPAddressRange_new.3,i2d_IPAddressFamily.3 +IPAddressRange_new.3,i2d_IPAddressOrRange.3 +IPAddressRange_new.3,i2d_IPAddressRange.3 MD5.3,MD4.3 MD5.3,MD4_Final.3 MD5.3,MD4_Init.3 @@ -1174,9 +1175,11 @@ MD5.3,MD5_Update.3 NAME_CONSTRAINTS_new.3,GENERAL_SUBTREE_free.3 NAME_CONSTRAINTS_new.3,GENERAL_SUBTREE_new.3 NAME_CONSTRAINTS_new.3,NAME_CONSTRAINTS_free.3 -OBJ_nid2obj.3,OBJ_cleanup.3 +OBJ_create.3,OBJ_cleanup.3 +OBJ_create.3,OBJ_create_objects.3 +OBJ_create.3,OBJ_new_nid.3 +OBJ_find_sigid_algs.3,OBJ_find_sigid_by_algs.3 OBJ_nid2obj.3,OBJ_cmp.3 -OBJ_nid2obj.3,OBJ_create.3 OBJ_nid2obj.3,OBJ_dup.3 OBJ_nid2obj.3,OBJ_ln2nid.3 OBJ_nid2obj.3,OBJ_nid2ln.3 @@ -1254,21 +1257,17 @@ OPENSSL_VERSION_NUMBER.3,OpenSSL_version_num.3 OPENSSL_VERSION_NUMBER.3,SSLeay.3 OPENSSL_VERSION_NUMBER.3,SSLeay_version.3 OPENSSL_config.3,OPENSSL_no_config.3 +OPENSSL_init_crypto.3,OPENSSL_cleanup.3 OPENSSL_init_crypto.3,OPENSSL_init.3 -OPENSSL_load_builtin_modules.3,ASN1_add_oid_module.3 -OPENSSL_load_builtin_modules.3,ENGINE_add_conf_module.3 OPENSSL_malloc.3,CRYPTO_free.3 OPENSSL_malloc.3,CRYPTO_malloc.3 -OPENSSL_malloc.3,CRYPTO_realloc.3 OPENSSL_malloc.3,CRYPTO_strdup.3 OPENSSL_malloc.3,OPENSSL_free.3 -OPENSSL_malloc.3,OPENSSL_realloc.3 OPENSSL_malloc.3,OPENSSL_strdup.3 OPENSSL_sk_new.3,sk_delete.3 OPENSSL_sk_new.3,sk_delete_ptr.3 OPENSSL_sk_new.3,sk_dup.3 OPENSSL_sk_new.3,sk_find.3 -OPENSSL_sk_new.3,sk_find_ex.3 OPENSSL_sk_new.3,sk_free.3 OPENSSL_sk_new.3,sk_insert.3 OPENSSL_sk_new.3,sk_is_sorted.3 @@ -1288,9 +1287,9 @@ OPENSSL_sk_new.3,sk_zero.3 OpenSSL_add_all_algorithms.3,EVP_cleanup.3 OpenSSL_add_all_algorithms.3,OpenSSL_add_all_ciphers.3 OpenSSL_add_all_algorithms.3,OpenSSL_add_all_digests.3 +OpenSSL_add_all_algorithms.3,SSLeay_add_all_algorithms.3 PEM_ASN1_read.3,PEM_ASN1_read_bio.3 PEM_ASN1_read.3,d2i_of_void.3 -PEM_X509_INFO_read.3,PEM_X509_INFO_read_bio.3 PEM_read.3,PEM_def_callback.3 PEM_read.3,PEM_do_header.3 PEM_read.3,PEM_get_EVP_CIPHER_INFO.3 @@ -1309,7 +1308,6 @@ PEM_read_bio_PrivateKey.3,PEM_read_DSAparams.3 PEM_read_bio_PrivateKey.3,PEM_read_ECPKParameters.3 PEM_read_bio_PrivateKey.3,PEM_read_ECPrivateKey.3 PEM_read_bio_PrivateKey.3,PEM_read_EC_PUBKEY.3 -PEM_read_bio_PrivateKey.3,PEM_read_NETSCAPE_CERT_SEQUENCE.3 PEM_read_bio_PrivateKey.3,PEM_read_PKCS7.3 PEM_read_bio_PrivateKey.3,PEM_read_PKCS8.3 PEM_read_bio_PrivateKey.3,PEM_read_PKCS8_PRIV_KEY_INFO.3 @@ -1330,7 +1328,6 @@ PEM_read_bio_PrivateKey.3,PEM_read_bio_DSAparams.3 PEM_read_bio_PrivateKey.3,PEM_read_bio_ECPKParameters.3 PEM_read_bio_PrivateKey.3,PEM_read_bio_ECPrivateKey.3 PEM_read_bio_PrivateKey.3,PEM_read_bio_EC_PUBKEY.3 -PEM_read_bio_PrivateKey.3,PEM_read_bio_NETSCAPE_CERT_SEQUENCE.3 PEM_read_bio_PrivateKey.3,PEM_read_bio_PKCS7.3 PEM_read_bio_PrivateKey.3,PEM_read_bio_PKCS8.3 PEM_read_bio_PrivateKey.3,PEM_read_bio_PKCS8_PRIV_KEY_INFO.3 @@ -1350,7 +1347,6 @@ PEM_read_bio_PrivateKey.3,PEM_write_DSAparams.3 PEM_read_bio_PrivateKey.3,PEM_write_ECPKParameters.3 PEM_read_bio_PrivateKey.3,PEM_write_ECPrivateKey.3 PEM_read_bio_PrivateKey.3,PEM_write_EC_PUBKEY.3 -PEM_read_bio_PrivateKey.3,PEM_write_NETSCAPE_CERT_SEQUENCE.3 PEM_read_bio_PrivateKey.3,PEM_write_PKCS7.3 PEM_read_bio_PrivateKey.3,PEM_write_PKCS8.3 PEM_read_bio_PrivateKey.3,PEM_write_PKCS8PrivateKey.3 @@ -1374,7 +1370,6 @@ PEM_read_bio_PrivateKey.3,PEM_write_bio_DSAparams.3 PEM_read_bio_PrivateKey.3,PEM_write_bio_ECPKParameters.3 PEM_read_bio_PrivateKey.3,PEM_write_bio_ECPrivateKey.3 PEM_read_bio_PrivateKey.3,PEM_write_bio_EC_PUBKEY.3 -PEM_read_bio_PrivateKey.3,PEM_write_bio_NETSCAPE_CERT_SEQUENCE.3 PEM_read_bio_PrivateKey.3,PEM_write_bio_PKCS7.3 PEM_read_bio_PrivateKey.3,PEM_write_bio_PKCS8.3 PEM_read_bio_PrivateKey.3,PEM_write_bio_PKCS8PrivateKey.3 @@ -1429,6 +1424,9 @@ PKCS7_set_content.3,PKCS7_content_new.3 PKCS7_set_type.3,PKCS7_set0_type_other.3 PKCS7_verify.3,PKCS7_get0_signers.3 PKCS8_PRIV_KEY_INFO_new.3,PKCS8_PRIV_KEY_INFO_free.3 +PKCS8_pkey_set0.3,PKCS8_pkey_add1_attr_by_NID.3 +PKCS8_pkey_set0.3,PKCS8_pkey_get0.3 +PKCS8_pkey_set0.3,PKCS8_pkey_get0_attrs.3 PKEY_USAGE_PERIOD_new.3,PKEY_USAGE_PERIOD_free.3 POLICYINFO_new.3,CERTIFICATEPOLICIES_free.3 POLICYINFO_new.3,CERTIFICATEPOLICIES_new.3 @@ -1443,9 +1441,6 @@ POLICYINFO_new.3,POLICY_MAPPING_free.3 POLICYINFO_new.3,POLICY_MAPPING_new.3 POLICYINFO_new.3,USERNOTICE_free.3 POLICYINFO_new.3,USERNOTICE_new.3 -PROXY_POLICY_new.3,PROXY_CERT_INFO_EXTENSION_free.3 -PROXY_POLICY_new.3,PROXY_CERT_INFO_EXTENSION_new.3 -PROXY_POLICY_new.3,PROXY_POLICY_free.3 RAND_add.3,RAND_cleanup.3 RAND_add.3,RAND_poll.3 RAND_add.3,RAND_seed.3 @@ -1455,6 +1450,12 @@ RAND_load_file.3,RAND_file_name.3 RAND_load_file.3,RAND_write_file.3 RAND_set_rand_method.3,RAND_SSLeay.3 RAND_set_rand_method.3,RAND_get_rand_method.3 +RC2_encrypt.3,RC2_cbc_encrypt.3 +RC2_encrypt.3,RC2_cfb64_encrypt.3 +RC2_encrypt.3,RC2_decrypt.3 +RC2_encrypt.3,RC2_ecb_encrypt.3 +RC2_encrypt.3,RC2_ofb64_encrypt.3 +RC2_encrypt.3,RC2_set_key.3 RC4.3,RC4_set_key.3 RIPEMD160.3,RIPEMD160_Final.3 RIPEMD160.3,RIPEMD160_Init.3 @@ -1464,15 +1465,20 @@ RSA_blinding_on.3,RSA_blinding_off.3 RSA_generate_key.3,RSA_generate_key_ex.3 RSA_get0_key.3,RSA_clear_flags.3 RSA_get0_key.3,RSA_get0_crt_params.3 +RSA_get0_key.3,RSA_get0_d.3 +RSA_get0_key.3,RSA_get0_dmp1.3 +RSA_get0_key.3,RSA_get0_dmq1.3 +RSA_get0_key.3,RSA_get0_e.3 RSA_get0_key.3,RSA_get0_factors.3 +RSA_get0_key.3,RSA_get0_iqmp.3 +RSA_get0_key.3,RSA_get0_n.3 +RSA_get0_key.3,RSA_get0_p.3 +RSA_get0_key.3,RSA_get0_q.3 RSA_get0_key.3,RSA_set0_crt_params.3 RSA_get0_key.3,RSA_set0_factors.3 RSA_get0_key.3,RSA_set0_key.3 RSA_get0_key.3,RSA_set_flags.3 RSA_get0_key.3,RSA_test_flags.3 -RSA_get_ex_new_index.3,CRYPTO_EX_dup.3 -RSA_get_ex_new_index.3,CRYPTO_EX_free.3 -RSA_get_ex_new_index.3,CRYPTO_EX_new.3 RSA_get_ex_new_index.3,RSA_get_ex_data.3 RSA_get_ex_new_index.3,RSA_set_ex_data.3 RSA_meth_new.3,RSA_meth_dup.3 @@ -1539,7 +1545,12 @@ RSA_print.3,DSAparams_print.3 RSA_print.3,DSAparams_print_fp.3 RSA_print.3,RSA_print_fp.3 RSA_private_encrypt.3,RSA_public_decrypt.3 +RSA_public_encrypt.3,EVP_PKEY_decrypt_old.3 +RSA_public_encrypt.3,EVP_PKEY_encrypt_old.3 RSA_public_encrypt.3,RSA_private_decrypt.3 +RSA_security_bits.3,BN_security_bits.3 +RSA_security_bits.3,DH_security_bits.3 +RSA_security_bits.3,DSA_security_bits.3 RSA_set_method.3,RSA_PKCS1_SSLeay.3 RSA_set_method.3,RSA_flags.3 RSA_set_method.3,RSA_get_default_method.3 @@ -1574,6 +1585,7 @@ SSL_CIPHER_get_name.3,SSL_CIPHER_get_auth_nid.3 SSL_CIPHER_get_name.3,SSL_CIPHER_get_bits.3 SSL_CIPHER_get_name.3,SSL_CIPHER_get_cipher_nid.3 SSL_CIPHER_get_name.3,SSL_CIPHER_get_digest_nid.3 +SSL_CIPHER_get_name.3,SSL_CIPHER_get_handshake_digest.3 SSL_CIPHER_get_name.3,SSL_CIPHER_get_id.3 SSL_CIPHER_get_name.3,SSL_CIPHER_get_kx_nid.3 SSL_CIPHER_get_name.3,SSL_CIPHER_get_version.3 @@ -1662,6 +1674,7 @@ SSL_CTX_set_alpn_select_cb.3,SSL_get0_alpn_selected.3 SSL_CTX_set_alpn_select_cb.3,SSL_select_next_proto.3 SSL_CTX_set_alpn_select_cb.3,SSL_set_alpn_protos.3 SSL_CTX_set_cert_store.3,SSL_CTX_get_cert_store.3 +SSL_CTX_set_cert_store.3,SSL_CTX_set1_cert_store.3 SSL_CTX_set_cipher_list.3,SSL_set_cipher_list.3 SSL_CTX_set_client_CA_list.3,SSL_CTX_add_client_CA.3 SSL_CTX_set_client_CA_list.3,SSL_add_client_CA.3 @@ -1671,13 +1684,14 @@ SSL_CTX_set_client_cert_cb.3,client_cert_cb.3 SSL_CTX_set_default_passwd_cb.3,SSL_CTX_get_default_passwd_cb.3 SSL_CTX_set_default_passwd_cb.3,SSL_CTX_get_default_passwd_cb_userdata.3 SSL_CTX_set_default_passwd_cb.3,SSL_CTX_set_default_passwd_cb_userdata.3 -SSL_CTX_set_default_passwd_cb.3,pem_password_cb.3 SSL_CTX_set_generate_session_id.3,GEN_SESSION_CB.3 SSL_CTX_set_generate_session_id.3,SSL_has_matching_session_id.3 SSL_CTX_set_generate_session_id.3,SSL_set_generate_session_id.3 SSL_CTX_set_info_callback.3,SSL_CTX_get_info_callback.3 SSL_CTX_set_info_callback.3,SSL_get_info_callback.3 SSL_CTX_set_info_callback.3,SSL_set_info_callback.3 +SSL_CTX_set_keylog_callback.3,SSL_CTX_get_keylog_callback.3 +SSL_CTX_set_keylog_callback.3,SSL_CTX_keylog_cb_func.3 SSL_CTX_set_max_cert_list.3,SSL_CTX_get_max_cert_list.3 SSL_CTX_set_max_cert_list.3,SSL_get_max_cert_list.3 SSL_CTX_set_max_cert_list.3,SSL_set_max_cert_list.3 @@ -1696,6 +1710,9 @@ SSL_CTX_set_mode.3,SSL_set_mode.3 SSL_CTX_set_msg_callback.3,SSL_CTX_set_msg_callback_arg.3 SSL_CTX_set_msg_callback.3,SSL_set_msg_callback.3 SSL_CTX_set_msg_callback.3,SSL_set_msg_callback_arg.3 +SSL_CTX_set_num_tickets.3,SSL_CTX_get_num_tickets.3 +SSL_CTX_set_num_tickets.3,SSL_get_num_tickets.3 +SSL_CTX_set_num_tickets.3,SSL_set_num_tickets.3 SSL_CTX_set_options.3,SSL_CTX_clear_options.3 SSL_CTX_set_options.3,SSL_CTX_get_options.3 SSL_CTX_set_options.3,SSL_clear_options.3 @@ -1709,6 +1726,9 @@ SSL_CTX_set_read_ahead.3,SSL_CTX_get_default_read_ahead.3 SSL_CTX_set_read_ahead.3,SSL_CTX_get_read_ahead.3 SSL_CTX_set_read_ahead.3,SSL_get_read_ahead.3 SSL_CTX_set_read_ahead.3,SSL_set_read_ahead.3 +SSL_CTX_set_security_level.3,SSL_CTX_get_security_level.3 +SSL_CTX_set_security_level.3,SSL_get_security_level.3 +SSL_CTX_set_security_level.3,SSL_set_security_level.3 SSL_CTX_set_session_cache_mode.3,SSL_CTX_get_session_cache_mode.3 SSL_CTX_set_session_id_context.3,SSL_set_session_id_context.3 SSL_CTX_set_ssl_version.3,SSL_CTX_get_ssl_method.3 @@ -1775,6 +1795,7 @@ SSL_SESSION_get_time.3,SSL_get_timeout.3 SSL_SESSION_get_time.3,SSL_set_time.3 SSL_SESSION_get_time.3,SSL_set_timeout.3 SSL_SESSION_has_ticket.3,SSL_SESSION_get_ticket_lifetime_hint.3 +SSL_SESSION_new.3,SSL_SESSION_dup.3 SSL_SESSION_print.3,SSL_SESSION_print_fp.3 SSL_SESSION_set1_id_context.3,SSL_SESSION_get0_id_context.3 SSL_alert_type_string.3,SSL_alert_desc_string.3 @@ -1816,6 +1837,8 @@ SSL_new.3,SSL_up_ref.3 SSL_num_renegotiations.3,SSL_clear_num_renegotiations.3 SSL_num_renegotiations.3,SSL_total_renegotiations.3 SSL_read.3,SSL_peek.3 +SSL_read.3,SSL_peek_ex.3 +SSL_read.3,SSL_read_ex.3 SSL_read_early_data.3,SSL_CTX_get_max_early_data.3 SSL_read_early_data.3,SSL_CTX_set_max_early_data.3 SSL_read_early_data.3,SSL_SESSION_get_max_early_data.3 @@ -1837,6 +1860,7 @@ SSL_set_connect_state.3,SSL_set_accept_state.3 SSL_set_fd.3,SSL_set_rfd.3 SSL_set_fd.3,SSL_set_wfd.3 SSL_set_max_send_fragment.3,SSL_CTX_set_max_send_fragment.3 +SSL_set_psk_use_session_callback.3,SSL_psk_use_session_cb_func.3 SSL_set_shutdown.3,SSL_get_shutdown.3 SSL_set_tmp_ecdh.3,SSL_CTX_set_ecdh_auto.3 SSL_set_tmp_ecdh.3,SSL_CTX_set_tmp_ecdh.3 @@ -1848,13 +1872,7 @@ SSL_want.3,SSL_want_nothing.3 SSL_want.3,SSL_want_read.3 SSL_want.3,SSL_want_write.3 SSL_want.3,SSL_want_x509_lookup.3 -SXNET_new.3,SXNETID_free.3 -SXNET_new.3,SXNETID_new.3 -SXNET_new.3,SXNET_free.3 -SXNET_new.3,d2i_SXNET.3 -SXNET_new.3,d2i_SXNETID.3 -SXNET_new.3,i2d_SXNET.3 -SXNET_new.3,i2d_SXNETID.3 +SSL_write.3,SSL_write_ex.3 TS_REQ_new.3,TS_ACCURACY_free.3 TS_REQ_new.3,TS_ACCURACY_new.3 TS_REQ_new.3,TS_MSG_IMPRINT_free.3 @@ -1866,7 +1884,6 @@ TS_REQ_new.3,TS_STATUS_INFO_free.3 TS_REQ_new.3,TS_STATUS_INFO_new.3 TS_REQ_new.3,TS_TST_INFO_free.3 TS_REQ_new.3,TS_TST_INFO_new.3 -UI_UTIL_read_pw.3,UI_UTIL_read_pw_string.3 UI_create_method.3,UI_destroy_method.3 UI_create_method.3,UI_method_get_closer.3 UI_create_method.3,UI_method_get_flusher.3 @@ -1908,10 +1925,16 @@ UI_new.3,UI_get0_user_data.3 UI_new.3,UI_get_default_method.3 UI_new.3,UI_get_method.3 UI_new.3,UI_new_method.3 +UI_new.3,UI_null.3 UI_new.3,UI_process.3 UI_new.3,UI_set_default_method.3 UI_new.3,UI_set_method.3 +X25519.3,ED25519_keypair.3 +X25519.3,ED25519_sign.3 +X25519.3,ED25519_verify.3 X25519.3,X25519_keypair.3 +X509V3_EXT_get_nid.3,X509V3_EXT_get.3 +X509V3_EXT_print.3,X509V3_EXT_print_fp.3 X509V3_get_d2i.3,X509V3_EXT_d2i.3 X509V3_get_d2i.3,X509V3_EXT_i2d.3 X509V3_get_d2i.3,X509V3_add1_i2d.3 @@ -1923,14 +1946,24 @@ X509V3_get_d2i.3,X509_REVOKED_get0_extensions.3 X509V3_get_d2i.3,X509_REVOKED_get_ext_d2i.3 X509V3_get_d2i.3,X509_add1_ext_i2d.3 X509V3_get_d2i.3,X509_get0_extensions.3 +X509V3_get_d2i.3,X509_get0_uids.3 X509V3_get_d2i.3,X509_get_ext_d2i.3 +X509V3_parse_list.3,X509V3_conf_free.3 X509_ALGOR_dup.3,X509_ALGOR_cmp.3 X509_ALGOR_dup.3,X509_ALGOR_free.3 X509_ALGOR_dup.3,X509_ALGOR_get0.3 X509_ALGOR_dup.3,X509_ALGOR_new.3 X509_ALGOR_dup.3,X509_ALGOR_set0.3 -X509_ALGOR_dup.3,X509_ALGOR_set_md.3 +X509_ATTRIBUTE_get0_object.3,X509_ATTRIBUTE_count.3 +X509_ATTRIBUTE_get0_object.3,X509_ATTRIBUTE_get0_data.3 +X509_ATTRIBUTE_get0_object.3,X509_ATTRIBUTE_get0_type.3 +X509_ATTRIBUTE_new.3,X509_ATTRIBUTE_create.3 +X509_ATTRIBUTE_new.3,X509_ATTRIBUTE_dup.3 X509_ATTRIBUTE_new.3,X509_ATTRIBUTE_free.3 +X509_ATTRIBUTE_set1_object.3,X509_ATTRIBUTE_create_by_NID.3 +X509_ATTRIBUTE_set1_object.3,X509_ATTRIBUTE_create_by_OBJ.3 +X509_ATTRIBUTE_set1_object.3,X509_ATTRIBUTE_create_by_txt.3 +X509_ATTRIBUTE_set1_object.3,X509_ATTRIBUTE_set1_data.3 X509_CINF_new.3,X509_CERT_AUX_free.3 X509_CINF_new.3,X509_CERT_AUX_new.3 X509_CINF_new.3,X509_CINF_free.3 @@ -1948,6 +1981,7 @@ X509_CRL_new.3,X509_CRL_up_ref.3 X509_CRL_print.3,X509_CRL_print_fp.3 X509_EXTENSION_set_object.3,X509_EXTENSION_create_by_NID.3 X509_EXTENSION_set_object.3,X509_EXTENSION_create_by_OBJ.3 +X509_EXTENSION_set_object.3,X509_EXTENSION_dup.3 X509_EXTENSION_set_object.3,X509_EXTENSION_free.3 X509_EXTENSION_set_object.3,X509_EXTENSION_get_critical.3 X509_EXTENSION_set_object.3,X509_EXTENSION_get_data.3 @@ -1955,23 +1989,15 @@ X509_EXTENSION_set_object.3,X509_EXTENSION_get_object.3 X509_EXTENSION_set_object.3,X509_EXTENSION_new.3 X509_EXTENSION_set_object.3,X509_EXTENSION_set_critical.3 X509_EXTENSION_set_object.3,X509_EXTENSION_set_data.3 +X509_EXTENSION_set_object.3,X509_supported_extension.3 X509_INFO_new.3,X509_INFO_free.3 X509_LOOKUP_hash_dir.3,X509_LOOKUP_file.3 X509_LOOKUP_hash_dir.3,X509_LOOKUP_mem.3 -X509_LOOKUP_hash_dir.3,X509_load_cert_crl_file.3 -X509_LOOKUP_hash_dir.3,X509_load_cert_file.3 -X509_LOOKUP_hash_dir.3,X509_load_crl_file.3 X509_LOOKUP_new.3,X509_LOOKUP_add_dir.3 X509_LOOKUP_new.3,X509_LOOKUP_add_mem.3 -X509_LOOKUP_new.3,X509_LOOKUP_by_alias.3 -X509_LOOKUP_new.3,X509_LOOKUP_by_fingerprint.3 -X509_LOOKUP_new.3,X509_LOOKUP_by_issuer_serial.3 -X509_LOOKUP_new.3,X509_LOOKUP_by_subject.3 X509_LOOKUP_new.3,X509_LOOKUP_ctrl.3 X509_LOOKUP_new.3,X509_LOOKUP_free.3 -X509_LOOKUP_new.3,X509_LOOKUP_init.3 X509_LOOKUP_new.3,X509_LOOKUP_load_file.3 -X509_LOOKUP_new.3,X509_LOOKUP_shutdown.3 X509_LOOKUP_new.3,X509_get_default_cert_dir.3 X509_LOOKUP_new.3,X509_get_default_cert_dir_env.3 X509_LOOKUP_new.3,X509_get_default_cert_file.3 @@ -2001,15 +2027,14 @@ X509_NAME_hash.3,X509_subject_name_hash.3 X509_NAME_hash.3,X509_subject_name_hash_old.3 X509_NAME_new.3,X509_NAME_free.3 X509_NAME_print_ex.3,X509_NAME_oneline.3 -X509_NAME_print_ex.3,X509_NAME_print.3 X509_NAME_print_ex.3,X509_NAME_print_ex_fp.3 -X509_OBJECT_get0_X509.3,X509_OBJECT_free_contents.3 +X509_OBJECT_get0_X509.3,X509_OBJECT_free.3 X509_OBJECT_get0_X509.3,X509_OBJECT_get0_X509_CRL.3 X509_OBJECT_get0_X509.3,X509_OBJECT_get_type.3 X509_OBJECT_get0_X509.3,X509_OBJECT_idx_by_subject.3 +X509_OBJECT_get0_X509.3,X509_OBJECT_new.3 X509_OBJECT_get0_X509.3,X509_OBJECT_retrieve_by_subject.3 X509_OBJECT_get0_X509.3,X509_OBJECT_retrieve_match.3 -X509_OBJECT_get0_X509.3,X509_OBJECT_up_ref_count.3 X509_PUBKEY_new.3,X509_PUBKEY_free.3 X509_PUBKEY_new.3,X509_PUBKEY_get.3 X509_PUBKEY_new.3,X509_PUBKEY_get0.3 @@ -2019,9 +2044,11 @@ X509_PUBKEY_new.3,X509_PUBKEY_set0_param.3 X509_PUBKEY_new.3,d2i_PUBKEY.3 X509_PUBKEY_new.3,d2i_PUBKEY_bio.3 X509_PUBKEY_new.3,d2i_PUBKEY_fp.3 +X509_PUBKEY_new.3,d2i_X509_PUBKEY.3 X509_PUBKEY_new.3,i2d_PUBKEY.3 X509_PUBKEY_new.3,i2d_PUBKEY_bio.3 X509_PUBKEY_new.3,i2d_PUBKEY_fp.3 +X509_PUBKEY_new.3,i2d_X509_PUBKEY.3 X509_PURPOSE_set.3,X509_PURPOSE_add.3 X509_PURPOSE_set.3,X509_PURPOSE_cleanup.3 X509_PURPOSE_set.3,X509_PURPOSE_get0.3 @@ -2032,27 +2059,45 @@ X509_PURPOSE_set.3,X509_PURPOSE_get_by_sname.3 X509_PURPOSE_set.3,X509_PURPOSE_get_count.3 X509_PURPOSE_set.3,X509_PURPOSE_get_id.3 X509_PURPOSE_set.3,X509_PURPOSE_get_trust.3 +X509_REQ_add1_attr.3,X509_REQ_add1_attr_by_NID.3 +X509_REQ_add1_attr.3,X509_REQ_add1_attr_by_OBJ.3 +X509_REQ_add1_attr.3,X509_REQ_add1_attr_by_txt.3 +X509_REQ_add1_attr.3,X509_REQ_delete_attr.3 +X509_REQ_add1_attr.3,X509_REQ_get_attr.3 +X509_REQ_add1_attr.3,X509_REQ_get_attr_by_NID.3 +X509_REQ_add1_attr.3,X509_REQ_get_attr_by_OBJ.3 +X509_REQ_add1_attr.3,X509_REQ_get_attr_count.3 +X509_REQ_add_extensions.3,X509_REQ_add_extensions_nid.3 +X509_REQ_add_extensions.3,X509_REQ_extension_nid.3 +X509_REQ_add_extensions.3,X509_REQ_get_extensions.3 X509_REQ_new.3,X509_REQ_INFO_free.3 X509_REQ_new.3,X509_REQ_INFO_new.3 +X509_REQ_new.3,X509_REQ_dup.3 X509_REQ_new.3,X509_REQ_free.3 +X509_REQ_new.3,X509_to_X509_REQ.3 +X509_REQ_print_ex.3,X509_REQ_print.3 +X509_REQ_print_ex.3,X509_REQ_print_fp.3 X509_REVOKED_new.3,X509_REVOKED_dup.3 X509_REVOKED_new.3,X509_REVOKED_free.3 X509_REVOKED_new.3,X509_REVOKED_get0_revocationDate.3 X509_REVOKED_new.3,X509_REVOKED_get0_serialNumber.3 X509_REVOKED_new.3,X509_REVOKED_set_revocationDate.3 X509_REVOKED_new.3,X509_REVOKED_set_serialNumber.3 +X509_SIG_get0.3,X509_SIG_getm.3 X509_SIG_new.3,X509_SIG_free.3 X509_STORE_CTX_get_error.3,X509_STORE_CTX_get0_chain.3 X509_STORE_CTX_get_error.3,X509_STORE_CTX_get0_current_crl.3 X509_STORE_CTX_get_error.3,X509_STORE_CTX_get0_current_issuer.3 X509_STORE_CTX_get_error.3,X509_STORE_CTX_get0_parent_ctx.3 -X509_STORE_CTX_get_error.3,X509_STORE_CTX_get0_policy_tree.3 X509_STORE_CTX_get_error.3,X509_STORE_CTX_get1_chain.3 X509_STORE_CTX_get_error.3,X509_STORE_CTX_get_chain.3 X509_STORE_CTX_get_error.3,X509_STORE_CTX_get_current_cert.3 X509_STORE_CTX_get_error.3,X509_STORE_CTX_get_error_depth.3 -X509_STORE_CTX_get_error.3,X509_STORE_CTX_get_explicit_policy.3 +X509_STORE_CTX_get_error.3,X509_STORE_CTX_get_num_untrusted.3 +X509_STORE_CTX_get_error.3,X509_STORE_CTX_set0_verified_chain.3 +X509_STORE_CTX_get_error.3,X509_STORE_CTX_set_current_cert.3 X509_STORE_CTX_get_error.3,X509_STORE_CTX_set_error.3 +X509_STORE_CTX_get_error.3,X509_STORE_CTX_set_error_depth.3 X509_STORE_CTX_get_error.3,X509_verify_cert_error_string.3 X509_STORE_CTX_get_ex_new_index.3,X509_STORE_CTX_get_app_data.3 X509_STORE_CTX_get_ex_new_index.3,X509_STORE_CTX_get_ex_data.3 @@ -2071,14 +2116,28 @@ X509_STORE_CTX_new.3,X509_STORE_CTX_set_cert.3 X509_STORE_CTX_new.3,X509_STORE_CTX_set_chain.3 X509_STORE_CTX_new.3,X509_STORE_CTX_trusted_stack.3 X509_STORE_CTX_set_flags.3,X509_STORE_CTX_get0_param.3 -X509_STORE_CTX_set_flags.3,X509_STORE_CTX_purpose_inherit.3 X509_STORE_CTX_set_flags.3,X509_STORE_CTX_set0_param.3 X509_STORE_CTX_set_flags.3,X509_STORE_CTX_set_default.3 X509_STORE_CTX_set_flags.3,X509_STORE_CTX_set_depth.3 X509_STORE_CTX_set_flags.3,X509_STORE_CTX_set_purpose.3 X509_STORE_CTX_set_flags.3,X509_STORE_CTX_set_time.3 X509_STORE_CTX_set_flags.3,X509_STORE_CTX_set_trust.3 +X509_STORE_CTX_set_verify.3,X509_STORE_CTX_check_issued_fn.3 +X509_STORE_CTX_set_verify.3,X509_STORE_CTX_get_check_issued.3 +X509_STORE_CTX_set_verify.3,X509_STORE_CTX_get_verify.3 +X509_STORE_CTX_set_verify.3,X509_STORE_CTX_verify_fn.3 +X509_STORE_CTX_set_verify.3,X509_STORE_get_check_issued.3 +X509_STORE_CTX_set_verify.3,X509_STORE_get_verify.3 +X509_STORE_CTX_set_verify.3,X509_STORE_set_check_issued.3 +X509_STORE_CTX_set_verify.3,X509_STORE_set_verify.3 +X509_STORE_CTX_set_verify.3,X509_STORE_set_verify_func.3 +X509_STORE_CTX_set_verify_cb.3,X509_STORE_CTX_get_verify_cb.3 +X509_STORE_CTX_set_verify_cb.3,X509_STORE_CTX_verify_cb.3 +X509_STORE_get_by_subject.3,X509_STORE_CTX_get1_certs.3 +X509_STORE_get_by_subject.3,X509_STORE_CTX_get1_crls.3 X509_STORE_get_by_subject.3,X509_STORE_CTX_get1_issuer.3 +X509_STORE_get_by_subject.3,X509_STORE_CTX_get_by_subject.3 +X509_STORE_get_by_subject.3,X509_STORE_CTX_get_obj_by_subject.3 X509_STORE_get_by_subject.3,X509_STORE_get1_certs.3 X509_STORE_get_by_subject.3,X509_STORE_get1_crls.3 X509_STORE_load_locations.3,X509_STORE_add_lookup.3 @@ -2090,6 +2149,7 @@ X509_STORE_set1_param.3,X509_STORE_add_cert.3 X509_STORE_set1_param.3,X509_STORE_add_crl.3 X509_STORE_set1_param.3,X509_STORE_get0_objects.3 X509_STORE_set1_param.3,X509_STORE_get0_param.3 +X509_STORE_set1_param.3,X509_STORE_get1_objects.3 X509_STORE_set1_param.3,X509_STORE_get_ex_data.3 X509_STORE_set1_param.3,X509_STORE_get_ex_new_index.3 X509_STORE_set1_param.3,X509_STORE_set_depth.3 @@ -2097,41 +2157,37 @@ X509_STORE_set1_param.3,X509_STORE_set_ex_data.3 X509_STORE_set1_param.3,X509_STORE_set_flags.3 X509_STORE_set1_param.3,X509_STORE_set_purpose.3 X509_STORE_set1_param.3,X509_STORE_set_trust.3 +X509_STORE_set_verify_cb_func.3,X509_STORE_get_verify_cb.3 X509_STORE_set_verify_cb_func.3,X509_STORE_set_verify_cb.3 -X509_STORE_set_verify_cb_func.3,X509_STORE_set_verify_func.3 -X509_TRUST_set.3,X509_TRUST_add.3 -X509_TRUST_set.3,X509_TRUST_cleanup.3 -X509_TRUST_set.3,X509_TRUST_get0.3 -X509_TRUST_set.3,X509_TRUST_get0_name.3 -X509_TRUST_set.3,X509_TRUST_get_by_id.3 -X509_TRUST_set.3,X509_TRUST_get_count.3 -X509_TRUST_set.3,X509_TRUST_get_flags.3 -X509_TRUST_set.3,X509_TRUST_get_trust.3 +X509_VERIFY_PARAM_new.3,X509_VERIFY_PARAM_add0_table.3 +X509_VERIFY_PARAM_new.3,X509_VERIFY_PARAM_free.3 +X509_VERIFY_PARAM_new.3,X509_VERIFY_PARAM_get0.3 +X509_VERIFY_PARAM_new.3,X509_VERIFY_PARAM_get_count.3 +X509_VERIFY_PARAM_new.3,X509_VERIFY_PARAM_inherit.3 +X509_VERIFY_PARAM_new.3,X509_VERIFY_PARAM_lookup.3 +X509_VERIFY_PARAM_new.3,X509_VERIFY_PARAM_set1.3 +X509_VERIFY_PARAM_new.3,X509_VERIFY_PARAM_table_cleanup.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_add0_policy.3 -X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_add0_table.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_add1_host.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_clear_flags.3 -X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_free.3 -X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_get0.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_get0_name.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_get0_peername.3 -X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_get_count.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_get_depth.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_get_flags.3 -X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_lookup.3 -X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_new.3 +X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_get_hostflags.3 +X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_get_time.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set1_email.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set1_host.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set1_ip.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set1_ip_asc.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set1_name.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set1_policies.3 +X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set_auth_level.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set_depth.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set_hostflags.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set_purpose.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set_time.3 X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_set_trust.3 -X509_VERIFY_PARAM_set_flags.3,X509_VERIFY_PARAM_table_cleanup.3 X509_add1_trust_object.3,X509_add1_reject_object.3 X509_add1_trust_object.3,X509_reject_clear.3 X509_add1_trust_object.3,X509_trust_clear.3 @@ -2146,6 +2202,7 @@ X509_cmp.3,X509_issuer_and_serial_cmp.3 X509_cmp.3,X509_issuer_name_cmp.3 X509_cmp.3,X509_subject_name_cmp.3 X509_cmp_time.3,X509_cmp_current_time.3 +X509_cmp_time.3,X509_gmtime_adj.3 X509_cmp_time.3,X509_time_adj.3 X509_cmp_time.3,X509_time_adj_ex.3 X509_digest.3,PKCS7_ISSUER_AND_SERIAL_digest.3 @@ -2172,15 +2229,20 @@ X509_get0_notBefore.3,X509_set1_notBefore.3 X509_get0_notBefore.3,X509_set_notAfter.3 X509_get0_notBefore.3,X509_set_notBefore.3 X509_get0_signature.3,X509_CRL_get0_signature.3 +X509_get0_signature.3,X509_CRL_get0_tbs_sigalg.3 X509_get0_signature.3,X509_CRL_get_signature_nid.3 X509_get0_signature.3,X509_REQ_get0_signature.3 X509_get0_signature.3,X509_REQ_get_signature_nid.3 X509_get0_signature.3,X509_get0_tbs_sigalg.3 +X509_get0_signature.3,X509_get_signature_info.3 X509_get0_signature.3,X509_get_signature_nid.3 X509_get0_signature.3,X509_get_signature_type.3 X509_get1_email.3,X509_email_free.3 X509_get1_email.3,X509_get1_ocsp.3 +X509_get_extension_flags.3,X509_get_extended_key_usage.3 +X509_get_extension_flags.3,X509_get_key_usage.3 X509_get_pubkey.3,X509_REQ_extract_key.3 +X509_get_pubkey.3,X509_REQ_get0_pubkey.3 X509_get_pubkey.3,X509_REQ_get_pubkey.3 X509_get_pubkey.3,X509_REQ_set_pubkey.3 X509_get_pubkey.3,X509_extract_key.3 @@ -2205,17 +2267,13 @@ X509_get_version.3,X509_set_version.3 X509_keyid_set1.3,X509_alias_get0.3 X509_keyid_set1.3,X509_alias_set1.3 X509_keyid_set1.3,X509_keyid_get0.3 +X509_load_cert_file.3,X509_load_cert_crl_file.3 +X509_load_cert_file.3,X509_load_crl_file.3 +X509_new.3,X509_REQ_to_X509.3 X509_new.3,X509_chain_up_ref.3 X509_new.3,X509_dup.3 X509_new.3,X509_free.3 X509_new.3,X509_up_ref.3 -X509_policy_check.3,X509_policy_tree_free.3 -X509_policy_tree_level_count.3,X509_policy_level_get0_node.3 -X509_policy_tree_level_count.3,X509_policy_level_node_count.3 -X509_policy_tree_level_count.3,X509_policy_node_get0_parent.3 -X509_policy_tree_level_count.3,X509_policy_node_get0_policy.3 -X509_policy_tree_level_count.3,X509_policy_node_get0_qualifiers.3 -X509_policy_tree_level_count.3,X509_policy_tree_get0_level.3 X509_print_ex.3,X509_CERT_AUX_print.3 X509_print_ex.3,X509_print.3 X509_print_ex.3,X509_print_ex_fp.3 @@ -2229,6 +2287,19 @@ X509_sign.3,X509_REQ_verify.3 X509_sign.3,X509_sign_ctx.3 X509_sign.3,X509_verify.3 X509_signature_dump.3,X509_signature_print.3 +X509v3_addr_add_inherit.3,X509v3_addr_add_prefix.3 +X509v3_addr_add_inherit.3,X509v3_addr_add_range.3 +X509v3_addr_add_inherit.3,X509v3_addr_canonize.3 +X509v3_addr_add_inherit.3,X509v3_addr_is_canonical.3 +X509v3_addr_get_range.3,X509v3_addr_get_afi.3 +X509v3_addr_inherits.3,X509v3_asid_inherits.3 +X509v3_addr_subset.3,X509v3_asid_subset.3 +X509v3_addr_validate_path.3,X509v3_addr_validate_resource_set.3 +X509v3_addr_validate_path.3,X509v3_asid_validate_path.3 +X509v3_addr_validate_path.3,X509v3_asid_validate_resource_set.3 +X509v3_asid_add_id_or_range.3,X509v3_asid_add_inherit.3 +X509v3_asid_add_id_or_range.3,X509v3_asid_canonize.3 +X509v3_asid_add_id_or_range.3,X509v3_asid_is_canonical.3 X509v3_get_ext_by_NID.3,X509_CRL_add_ext.3 X509v3_get_ext_by_NID.3,X509_CRL_delete_ext.3 X509v3_get_ext_by_NID.3,X509_CRL_get_ext.3 @@ -2256,37 +2327,11 @@ X509v3_get_ext_by_NID.3,X509v3_get_ext.3 X509v3_get_ext_by_NID.3,X509v3_get_ext_by_OBJ.3 X509v3_get_ext_by_NID.3,X509v3_get_ext_by_critical.3 X509v3_get_ext_by_NID.3,X509v3_get_ext_count.3 -bn_dump.3,bn_add_words.3 -bn_dump.3,bn_check_top.3 -bn_dump.3,bn_cmp_words.3 -bn_dump.3,bn_div_words.3 -bn_dump.3,bn_expand.3 -bn_dump.3,bn_expand2.3 -bn_dump.3,bn_fix_top.3 -bn_dump.3,bn_mul_add_words.3 -bn_dump.3,bn_mul_comba4.3 -bn_dump.3,bn_mul_comba8.3 -bn_dump.3,bn_mul_high.3 -bn_dump.3,bn_mul_low_normal.3 -bn_dump.3,bn_mul_low_recursive.3 -bn_dump.3,bn_mul_normal.3 -bn_dump.3,bn_mul_part_recursive.3 -bn_dump.3,bn_mul_recursive.3 -bn_dump.3,bn_mul_words.3 -bn_dump.3,bn_set_high.3 -bn_dump.3,bn_set_low.3 -bn_dump.3,bn_set_max.3 -bn_dump.3,bn_sqr_comba4.3 -bn_dump.3,bn_sqr_comba8.3 -bn_dump.3,bn_sqr_normal.3 -bn_dump.3,bn_sqr_recursive.3 -bn_dump.3,bn_sqr_words.3 -bn_dump.3,bn_sub_words.3 -bn_dump.3,bn_wexpand.3 -bn_dump.3,mul.3 -bn_dump.3,mul_add.3 -bn_dump.3,sqr.3 +a2i_ipadd.3,a2i_IPADDRESS.3 +a2i_ipadd.3,a2i_IPADDRESS_NC.3 d2i_ASN1_NULL.3,i2d_ASN1_NULL.3 +d2i_ASN1_OBJECT.3,OBJ_get0_data.3 +d2i_ASN1_OBJECT.3,OBJ_length.3 d2i_ASN1_OBJECT.3,i2d_ASN1_OBJECT.3 d2i_ASN1_OCTET_STRING.3,d2i_ASN1_BIT_STRING.3 d2i_ASN1_OCTET_STRING.3,d2i_ASN1_BMPSTRING.3 @@ -2464,7 +2509,6 @@ d2i_PKCS7.3,i2d_PKCS7_ENCRYPT.3 d2i_PKCS7.3,i2d_PKCS7_ENC_CONTENT.3 d2i_PKCS7.3,i2d_PKCS7_ENVELOPE.3 d2i_PKCS7.3,i2d_PKCS7_ISSUER_AND_SERIAL.3 -d2i_PKCS7.3,i2d_PKCS7_NDEF.3 d2i_PKCS7.3,i2d_PKCS7_RECIP_INFO.3 d2i_PKCS7.3,i2d_PKCS7_SIGNED.3 d2i_PKCS7.3,i2d_PKCS7_SIGNER_INFO.3 @@ -2491,9 +2535,6 @@ d2i_POLICYINFO.3,i2d_NOTICEREF.3 d2i_POLICYINFO.3,i2d_POLICYINFO.3 d2i_POLICYINFO.3,i2d_POLICYQUALINFO.3 d2i_POLICYINFO.3,i2d_USERNOTICE.3 -d2i_PROXY_POLICY.3,d2i_PROXY_CERT_INFO_EXTENSION.3 -d2i_PROXY_POLICY.3,i2d_PROXY_CERT_INFO_EXTENSION.3 -d2i_PROXY_POLICY.3,i2d_PROXY_POLICY.3 d2i_PrivateKey.3,d2i_AutoPrivateKey.3 d2i_PrivateKey.3,d2i_PrivateKey_bio.3 d2i_PrivateKey.3,d2i_PrivateKey_fp.3 @@ -2501,6 +2542,8 @@ d2i_PrivateKey.3,d2i_PublicKey.3 d2i_PrivateKey.3,i2d_PKCS8PrivateKeyInfo_bio.3 d2i_PrivateKey.3,i2d_PKCS8PrivateKeyInfo_fp.3 d2i_PrivateKey.3,i2d_PrivateKey.3 +d2i_PrivateKey.3,i2d_PrivateKey_bio.3 +d2i_PrivateKey.3,i2d_PrivateKey_fp.3 d2i_PrivateKey.3,i2d_PublicKey.3 d2i_RSAPublicKey.3,d2i_Netscape_RSA.3 d2i_RSAPublicKey.3,d2i_RSAPrivateKey.3 @@ -2564,7 +2607,12 @@ d2i_X509.3,i2d_X509_CINF.3 d2i_X509.3,i2d_X509_VAL.3 d2i_X509.3,i2d_X509_bio.3 d2i_X509.3,i2d_X509_fp.3 +d2i_X509.3,i2d_re_X509_CRL_tbs.3 +d2i_X509.3,i2d_re_X509_REQ_tbs.3 +d2i_X509.3,i2d_re_X509_tbs.3 +d2i_X509_ALGOR.3,d2i_X509_ALGORS.3 d2i_X509_ALGOR.3,i2d_X509_ALGOR.3 +d2i_X509_ALGOR.3,i2d_X509_ALGORS.3 d2i_X509_ATTRIBUTE.3,i2d_X509_ATTRIBUTE.3 d2i_X509_CRL.3,d2i_X509_CRL_INFO.3 d2i_X509_CRL.3,d2i_X509_CRL_bio.3 @@ -2597,37 +2645,20 @@ d2i_X509_SIG.3,d2i_PKCS8_fp.3 d2i_X509_SIG.3,i2d_PKCS8_bio.3 d2i_X509_SIG.3,i2d_PKCS8_fp.3 d2i_X509_SIG.3,i2d_X509_SIG.3 +des_read_pw.3,EVP_get_pw_prompt.3 des_read_pw.3,EVP_read_pw_string.3 des_read_pw.3,EVP_read_pw_string_min.3 -des_read_pw.3,des_read_pw_string.3 -get_rfc3526_prime_8192.3,BN_get_rfc2409_prime_1024.3 -get_rfc3526_prime_8192.3,BN_get_rfc2409_prime_768.3 -get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_1536.3 -get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_2048.3 -get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_3072.3 -get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_4096.3 -get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_6144.3 -get_rfc3526_prime_8192.3,BN_get_rfc3526_prime_8192.3 -get_rfc3526_prime_8192.3,get_rfc2409_prime_1024.3 -get_rfc3526_prime_8192.3,get_rfc2409_prime_768.3 -get_rfc3526_prime_8192.3,get_rfc3526_prime_1536.3 -get_rfc3526_prime_8192.3,get_rfc3526_prime_2048.3 -get_rfc3526_prime_8192.3,get_rfc3526_prime_3072.3 -get_rfc3526_prime_8192.3,get_rfc3526_prime_4096.3 -get_rfc3526_prime_8192.3,get_rfc3526_prime_6144.3 +des_read_pw.3,EVP_set_pw_prompt.3 +i2a_ASN1_STRING.3,a2i_ASN1_ENUMERATED.3 +i2a_ASN1_STRING.3,a2i_ASN1_INTEGER.3 +i2a_ASN1_STRING.3,a2i_ASN1_STRING.3 +i2a_ASN1_STRING.3,i2a_ASN1_ENUMERATED.3 +i2a_ASN1_STRING.3,i2a_ASN1_INTEGER.3 lh_new.3,DECLARE_LHASH_OF.3 lh_new.3,LHASH_COMP_FN_TYPE.3 lh_new.3,LHASH_DOALL_ARG_FN_TYPE.3 lh_new.3,LHASH_DOALL_FN_TYPE.3 lh_new.3,LHASH_HASH_FN_TYPE.3 -lh_new.3,lh__delete.3 -lh_new.3,lh__doall.3 -lh_new.3,lh__doall_arg.3 -lh_new.3,lh__error.3 -lh_new.3,lh__free.3 -lh_new.3,lh__insert.3 -lh_new.3,lh__new.3 -lh_new.3,lh__retrieve.3 lh_new.3,lh_delete.3 lh_new.3,lh_doall.3 lh_new.3,lh_doall_arg.3 @@ -2635,11 +2666,12 @@ lh_new.3,lh_error.3 lh_new.3,lh_free.3 lh_new.3,lh_insert.3 lh_new.3,lh_retrieve.3 -lh_stats.3,lh_node_stats.3 -lh_stats.3,lh_node_stats_bio.3 -lh_stats.3,lh_node_usage_stats.3 -lh_stats.3,lh_node_usage_stats_bio.3 -lh_stats.3,lh_stats_bio.3 +lh_new.3,lh_strhash.3 +s2i_ASN1_INTEGER.3,i2s_ASN1_ENUMERATED.3 +s2i_ASN1_INTEGER.3,i2s_ASN1_ENUMERATED_TABLE.3 +s2i_ASN1_INTEGER.3,i2s_ASN1_INTEGER.3 +s2i_ASN1_INTEGER.3,i2s_ASN1_OCTET_STRING.3 +s2i_ASN1_INTEGER.3,s2i_ASN1_OCTET_STRING.3 tls_accept_socket.3,tls_accept_cbs.3 tls_accept_socket.3,tls_accept_fds.3 tls_client.3,tls_configure.3 @@ -2665,6 +2697,7 @@ tls_conn_version.3,tls_conn_cipher_strength.3 tls_conn_version.3,tls_conn_servername.3 tls_conn_version.3,tls_conn_session_resumed.3 tls_conn_version.3,tls_peer_cert_chain_pem.3 +tls_conn_version.3,tls_peer_cert_common_name.3 tls_conn_version.3,tls_peer_cert_contains_name.3 tls_conn_version.3,tls_peer_cert_hash.3 tls_conn_version.3,tls_peer_cert_issuer.3 @@ -2715,8 +2748,8 @@ tls_ocsp_process_response.3,tls_peer_ocsp_url.3 tls_read.3,tls_close.3 tls_read.3,tls_error.3 tls_read.3,tls_handshake.3 -tls_read.3,tls_reset.3 tls_read.3,tls_write.3 +v2i_ASN1_BIT_STRING.3,i2v_ASN1_BIT_STRING.3 x509_verify.3,x509_verify_ctx_chain.3 x509_verify.3,x509_verify_ctx_error_depth.3 x509_verify.3,x509_verify_ctx_error_string.3 diff --git a/man/update_links.sh b/man/update_links.sh index e72f03d8a1..088eb2b807 100755 --- a/man/update_links.sh +++ b/man/update_links.sh @@ -21,4 +21,5 @@ echo "# This is an auto-generated file by $0" > links /usr/src/regress/usr.bin/mandoc/db/mlinks/obj/mlinks mandoc.db | \ grep -v OCSP_crlID_new | \ grep -v bn_print | \ + grep -v "" | \ sort >> links diff --git a/patches/aeadtest.c.patch b/patches/aeadtest.c.patch deleted file mode 100644 index 4f7319d89b..0000000000 --- a/patches/aeadtest.c.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- tests/aeadtest.c.orig Sat Jan 26 12:39:05 2019 -+++ tests/aeadtest.c Fri Sep 4 04:04:26 2020 -@@ -79,6 +79,12 @@ - - #define BUF_MAX 1024 - -+#ifdef _MSC_VER -+#ifdef IN -+#undef IN -+#endif -+#endif -+ - /* These are the different types of line that are found in the input file. */ - enum { - AEAD = 0, /* name of the AEAD algorithm. */ diff --git a/patches/bio.h.patch b/patches/bio.h.patch deleted file mode 100644 index e726e20d03..0000000000 --- a/patches/bio.h.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- include/openssl/bio.h.orig 2018-07-24 21:59:17.000000000 -0500 -+++ include/openssl/bio.h 2018-11-07 18:44:43.000000000 -0600 -@@ -713,6 +713,22 @@ - - /*long BIO_ghbn_ctrl(int cmd,int iarg,char *parg);*/ - -+#ifdef __MINGW_PRINTF_FORMAT -+int -+BIO_printf(BIO *bio, const char *format, ...) -+ __attribute__((__format__(__MINGW_PRINTF_FORMAT, 2, 3), __nonnull__(2))); -+int -+BIO_vprintf(BIO *bio, const char *format, va_list args) -+ __attribute__((__format__(__MINGW_PRINTF_FORMAT, 2, 0), __nonnull__(2))); -+int -+BIO_snprintf(char *buf, size_t n, const char *format, ...) -+ __attribute__((__deprecated__, __format__(__MINGW_PRINTF_FORMAT, 3, 4), -+ __nonnull__(3))); -+int -+BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) -+ __attribute__((__deprecated__, __format__(__MINGW_PRINTF_FORMAT, 3, 0), -+ __nonnull__(3))); -+#else - int - BIO_printf(BIO *bio, const char *format, ...) - __attribute__((__format__(__printf__, 2, 3), __nonnull__(2))); -@@ -727,6 +743,8 @@ - BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) - __attribute__((__deprecated__, __format__(__printf__, 3, 0), - __nonnull__(3))); -+#endif -+ - - /* BEGIN ERROR CODES */ - /* The following lines are auto generated by the script mkerr.pl. Any changes diff --git a/patches/bn_div.c.patch b/patches/bn_div.c.patch deleted file mode 100644 index 9989e8d0cc..0000000000 --- a/patches/bn_div.c.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- openbsd/src/lib/libcrypto/bn/bn_div.c 2018-08-03 22:40:06.596555542 -0500 -+++ crypto/bn/bn_div.c 2019-01-20 19:26:37.891450640 -0600 -@@ -89,7 +89,7 @@ - q; \ - }) - # define REMAINDER_IS_ALREADY_CALCULATED --# elif defined(__x86_64) -+# elif defined(__x86_64) && defined(_LP64) - /* - * Same story here, but it's 128-bit by 64-bit division. Wow! - * diff --git a/patches/bn_lcl.h.patch b/patches/bn_lcl.h.patch deleted file mode 100644 index 184bbd7b9c..0000000000 --- a/patches/bn_lcl.h.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./openbsd/src/lib/libcrypto/bn/bn_lcl.h 2018-12-17 06:59:43.067523154 -0600 -+++ ./crypto/bn/bn_lcl.h 2019-01-20 19:43:53.679717457 -0600 -@@ -239,7 +239,7 @@ - : "r"(a), "r"(b)); \ - ret; }) - # endif /* compiler */ --# elif defined(__x86_64) || defined(__x86_64__) -+# elif (defined(__x86_64) || defined(__x86_64__)) && defined(_LP64) - # if defined(__GNUC__) && __GNUC__>=2 - # define BN_UMULT_HIGH(a,b) ({ \ - BN_ULONG ret,discard; \ diff --git a/patches/bn_shift.patch b/patches/bn_shift.patch new file mode 100644 index 0000000000..dd1fb9b35a --- /dev/null +++ b/patches/bn_shift.patch @@ -0,0 +1,34 @@ +--- tests/bn_shift.c.orig 2023-02-13 20:06:27.295678033 -0600 ++++ tests/bn_shift.c 2023-02-13 20:08:08.335677654 -0600 +@@ -355,6 +355,8 @@ + return failed; + } + ++#if 0 ++ + static void + benchmark_bn_lshift1(BIGNUM *bn) + { +@@ -620,9 +622,12 @@ + BN_free(bn); + } + ++#endif ++ + static void + benchmark_bn_shift(void) + { ++#if 0 + const struct benchmark *bm; + size_t i; + +@@ -630,6 +635,9 @@ + bm = &benchmarks[i]; + benchmark_run(bm, 5); + } ++#else ++ return; ++#endif + } + + int diff --git a/patches/cms.h.patch b/patches/cms.h.patch new file mode 100644 index 0000000000..5d403cdb8e --- /dev/null +++ b/patches/cms.h.patch @@ -0,0 +1,16 @@ +--- include/openssl/cms.h.orig 2026-02-20 16:35:58 ++++ include/openssl/cms.h 2026-02-20 16:36:09 +@@ -67,6 +67,13 @@ + extern "C" { + #endif + ++#ifdef _MSC_VER ++#ifndef LIBRESSL_INTERNAL ++#include ++typedef SSIZE_T ssize_t; ++#endif ++#endif ++ + typedef struct CMS_ContentInfo_st CMS_ContentInfo; + typedef struct CMS_SignerInfo_st CMS_SignerInfo; + typedef struct CMS_CertificateChoices CMS_CertificateChoices; diff --git a/patches/handshake_table.c.patch b/patches/handshake_table.c.patch deleted file mode 100644 index b0a9f5bcc2..0000000000 --- a/patches/handshake_table.c.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- tests/handshake_table.c.orig Sat Aug 22 18:51:52 2020 -+++ tests/handshake_table.c Fri Sep 4 04:04:26 2020 -@@ -479,6 +479,7 @@ - unsigned int depth = 0; - int ch, graphviz = 0, print = 0; - -+#ifndef _MSC_VER - while ((ch = getopt(argc, argv, "Cg")) != -1) { - switch (ch) { - case 'C': -@@ -496,6 +497,7 @@ - - if (argc != 0) - usage(); -+#endif - - if (graphviz && print) - usage(); diff --git a/patches/modes_lcl.h.patch b/patches/modes_lcl.h.patch deleted file mode 100644 index 330d4d0448..0000000000 --- a/patches/modes_lcl.h.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- crypto/modes/modes_lcl.h.orig Tue Nov 14 10:25:15 2017 -+++ crypto/modes/modes_lcl.h Sat Jan 19 22:19:23 2019 -@@ -45,14 +45,16 @@ - asm ("bswapl %0" \ - : "+r"(ret)); ret; }) - # elif (defined(__arm__) || defined(__arm)) && !defined(__STRICT_ALIGNMENT) --# define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \ -+# if (__ARM_ARCH >= 6) -+# define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \ - asm ("rev %0,%0; rev %1,%1" \ - : "+r"(hi),"+r"(lo)); \ - (u64)hi<<32|lo; }) --# define BSWAP4(x) ({ u32 ret; \ -+# define BSWAP4(x) ({ u32 ret; \ - asm ("rev %0,%1" \ - : "=r"(ret) : "r"((u32)(x))); \ - ret; }) -+# endif - # endif - #endif - #endif diff --git a/patches/netcat.c.patch b/patches/netcat.c.patch index 7d82aca1e5..216debc460 100644 --- a/patches/netcat.c.patch +++ b/patches/netcat.c.patch @@ -1,6 +1,6 @@ ---- apps/nc/netcat.c.orig Sat Feb 15 11:04:42 2020 -+++ apps/nc/netcat.c Sat Feb 15 11:24:38 2020 -@@ -93,9 +93,13 @@ +--- apps/nc/netcat.c.orig Fri Mar 13 09:08:38 2026 ++++ apps/nc/netcat.c Fri Mar 13 09:08:46 2026 +@@ -93,9 +93,13 @@ int zflag; /* Port Scan Flag */ int Dflag; /* sodebug */ int Iflag; /* TCP receive buffer size */ int Oflag; /* TCP send buffer size */ @@ -14,7 +14,7 @@ int usetls; /* use TLS */ const char *Cflag; /* Public cert file */ -@@ -269,12 +273,14 @@ +@@ -271,12 +275,14 @@ main(int argc, char *argv[]) case 'u': uflag = 1; break; @@ -29,7 +29,7 @@ case 'v': vflag = 1; break; -@@ -321,9 +327,11 @@ +@@ -323,9 +329,11 @@ main(int argc, char *argv[]) case 'o': oflag = optarg; break; @@ -41,7 +41,7 @@ case 'T': errstr = NULL; errno = 0; -@@ -347,9 +355,11 @@ +@@ -349,9 +357,11 @@ main(int argc, char *argv[]) argc -= optind; argv += optind; @@ -53,7 +53,7 @@ /* Cruft to make sure options are clean, and used properly. */ if (argc == 1 && family == AF_UNIX) { -@@ -947,7 +957,10 @@ +@@ -930,7 +940,10 @@ remote_connect(const char *host, const char *port, str char *ipaddr) { struct addrinfo *res, *res0; @@ -65,7 +65,7 @@ if ((error = getaddrinfo(host, port, &hints, &res0))) errx(1, "getaddrinfo for host \"%s\" port %s: %s", host, -@@ -962,8 +975,10 @@ +@@ -945,8 +958,10 @@ remote_connect(const char *host, const char *port, str if (sflag || pflag) { struct addrinfo ahints, *ares; @@ -76,7 +76,7 @@ memset(&ahints, 0, sizeof(struct addrinfo)); ahints.ai_family = res->ai_family; ahints.ai_socktype = uflag ? SOCK_DGRAM : SOCK_STREAM; -@@ -1055,7 +1070,10 @@ +@@ -1038,7 +1053,10 @@ int local_listen(const char *host, const char *port, struct addrinfo hints) { struct addrinfo *res, *res0; @@ -88,7 +88,7 @@ int error; /* Allow nodename to be null. */ -@@ -1076,9 +1094,11 @@ +@@ -1059,9 +1077,11 @@ local_listen(const char *host, const char *port, struc res->ai_protocol)) == -1) continue; @@ -100,21 +100,21 @@ set_common_sockopts(s, res->ai_family); -@@ -1548,11 +1568,13 @@ +@@ -1571,11 +1591,13 @@ set_common_sockopts(int s, int af) { int x = 1; +#ifdef TCP_MD5SIG if (Sflag) { if (setsockopt(s, IPPROTO_TCP, TCP_MD5SIG, - &x, sizeof(x)) == -1) + &x, sizeof(x)) == -1) err(1, NULL); } +#endif if (Dflag) { if (setsockopt(s, SOL_SOCKET, SO_DEBUG, - &x, sizeof(x)) == -1) -@@ -1563,9 +1585,16 @@ + &x, sizeof(x)) == -1) +@@ -1586,9 +1608,16 @@ set_common_sockopts(int s, int af) IP_TOS, &Tflag, sizeof(Tflag)) == -1) err(1, "set IP ToS"); @@ -131,7 +131,7 @@ } if (Iflag) { if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, -@@ -1589,13 +1618,17 @@ +@@ -1612,13 +1641,23 @@ set_common_sockopts(int s, int af) } if (minttl != -1) { @@ -139,6 +139,9 @@ if (af == AF_INET && setsockopt(s, IPPROTO_IP, IP_MINTTL, &minttl, sizeof(minttl))) err(1, "set IP min TTL"); ++#else ++ if (af == AF_INET) ++ errx(1, "set IP min TTL not supported"); +#endif - else if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6, @@ -146,11 +149,14 @@ + if (af == AF_INET6 && setsockopt(s, IPPROTO_IPV6, IPV6_MINHOPCOUNT, &minttl, sizeof(minttl))) err(1, "set IPv6 min hop count"); ++#else ++ if (af == AF_INET6) ++ errx(1, "set IPv6 min hop count not supported"); +#endif } } -@@ -1820,15 +1853,19 @@ +@@ -1849,15 +1888,19 @@ help(void) \t-P proxyuser\tUsername for proxy authentication\n\ \t-p port\t Specify local port for remote connects\n\ \t-R CAfile CA bundle\n\ @@ -175,4 +181,4 @@ + "\t-v Verbose\n\ \t-W recvlimit Terminate after receiving a number of packets\n\ \t-w timeout Timeout for connects and final net reads\n\ - \t-X proto Proxy protocol: \"4\", \"5\" (SOCKS) or \"connect\"\n\ + \t-X proto Proxy protocol: \"4\", \"4A\", \"5\" (SOCKS) or \"connect\"\n\ diff --git a/patches/ocsp_test.c.patch b/patches/ocsp_test.c.patch deleted file mode 100644 index 39f1326780..0000000000 --- a/patches/ocsp_test.c.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- tests/ocsp_test.c.orig 2018-07-24 21:59:17.000000000 -0500 -+++ tests/ocsp_test.c 2018-11-07 18:44:43.000000000 -0600 -@@ -35,6 +35,11 @@ - hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_STREAM; - -+#ifdef _MSC_VER -+ if (BIO_sock_init() != 1) -+ exit(-1); -+#endif -+ - error = getaddrinfo(host, port, &hints, &res); - if (error != 0) { - perror("getaddrinfo()"); diff --git a/patches/openssl.c.patch b/patches/openssl.c.patch index 2c2a3dac6e..078b3ae07d 100644 --- a/patches/openssl.c.patch +++ b/patches/openssl.c.patch @@ -1,6 +1,6 @@ ---- apps/openssl/openssl.c.orig Thu Nov 7 18:19:01 2019 -+++ apps/openssl/openssl.c Fri Sep 4 04:04:26 2020 -@@ -360,7 +360,9 @@ +--- apps/openssl/openssl.c.orig Fri Mar 13 09:08:38 2026 ++++ apps/openssl/openssl.c Fri Mar 13 09:08:46 2026 +@@ -345,7 +345,9 @@ BIO *bio_err = NULL; static void openssl_startup(void) { diff --git a/patches/opensslfeatures.h.patch b/patches/opensslfeatures.h.patch new file mode 100644 index 0000000000..d370b32859 --- /dev/null +++ b/patches/opensslfeatures.h.patch @@ -0,0 +1,49 @@ +--- include/openssl/opensslfeatures.h.orig Fri Jul 28 06:04:42 2023 ++++ include/openssl/opensslfeatures.h Fri Jul 28 06:09:00 2023 +@@ -8,6 +8,13 @@ + #define LIBRESSL_HAS_TLS1_3 + #define LIBRESSL_HAS_DTLS1_2 + ++/* ++ * Used for compatibility with compilers lacking __attribute__ ++ */ ++#if defined(_MSC_VER) && !defined(__clang__) && !defined(__attribute__) ++#define __attribute__(a) ++#endif ++ + #define OPENSSL_THREADS + + #define OPENSSL_NO_BUF_FREELISTS +--- crypto/crypto_internal.h.orig Sat Dec 14 14:15:39 2024 ++++ crypto/crypto_internal.h Sat Dec 14 14:15:52 2024 +@@ -15,6 +15,8 @@ + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + ++#include ++ + #include + #include + #include +--- tests/parse_test_file.h.orig Thu Dec 26 01:13:00 2024 ++++ tests/parse_test_file.h Thu Dec 26 01:13:27 2024 +@@ -22,6 +22,8 @@ + #include + #include + ++#include ++ + #include "bytestring.h" + + #if defined(__cplusplus) +--- tests/test.h.orig Sat May 31 04:48:09 2025 ++++ tests/test.h Sat May 31 04:48:31 2025 +@@ -18,6 +18,8 @@ + #ifndef HEADER_TEST_H + #define HEADER_TEST_H + ++#include ++ + #include + #include + diff --git a/patches/opensslv.h b/patches/opensslv.h new file mode 100644 index 0000000000..20a9261520 --- /dev/null +++ b/patches/opensslv.h @@ -0,0 +1,18 @@ +/* $OpenBSD: opensslv.h,v 1.82 2026/04/08 05:30:20 tb Exp $ */ +#ifndef HEADER_OPENSSLV_H +#define HEADER_OPENSSLV_H + +/* These will change with each release of LibreSSL-portable */ +#define LIBRESSL_VERSION_NUMBER 0x4030100fL +/* ^ Patch starts here */ +#define LIBRESSL_VERSION_TEXT "LibreSSL 4.3.1" + +/* These will never change */ +#define OPENSSL_VERSION_NUMBER 0x20000000L +#define OPENSSL_VERSION_TEXT LIBRESSL_VERSION_TEXT +#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT + +#define SHLIB_VERSION_HISTORY "" +#define SHLIB_VERSION_NUMBER "1.0.0" + +#endif /* HEADER_OPENSSLV_H */ diff --git a/patches/patch-amd64-crypto-cpu-caps.c.patch b/patches/patch-amd64-crypto-cpu-caps.c.patch new file mode 100644 index 0000000000..5fd7524d2d --- /dev/null +++ b/patches/patch-amd64-crypto-cpu-caps.c.patch @@ -0,0 +1,20 @@ +--- crypto/arch/amd64/crypto_cpu_caps.c.orig Sat Dec 14 13:45:16 2024 ++++ crypto/arch/amd64/crypto_cpu_caps.c Sat Dec 14 13:54:06 2024 +@@ -37,7 +37,7 @@ cpuid(uint32_t eax, uint32_t *out_eax, uint32_t *out_e + { + uint32_t ebx = 0, ecx = 0, edx = 0; + +-#ifndef OPENSSL_NO_ASM ++#if defined(__GNUC__) && !defined(OPENSSL_NO_ASM) + __asm__ ("cpuid": "+a"(eax), "+b"(ebx), "+c"(ecx), "+d"(edx)); + #else + eax = 0; +@@ -58,7 +58,7 @@ xgetbv(uint32_t ecx, uint32_t *out_eax, uint32_t *out_ + { + uint32_t eax = 0, edx = 0; + +-#ifndef OPENSSL_NO_ASM ++#if defined(__GNUC__) && !defined(OPENSSL_NO_ASM) + __asm__ ("xgetbv": "+a"(eax), "+c"(ecx), "+d"(edx)); + #endif + diff --git a/patches/patch-i386-crypto-cpu-caps.c.patch b/patches/patch-i386-crypto-cpu-caps.c.patch new file mode 100644 index 0000000000..0642582f72 --- /dev/null +++ b/patches/patch-i386-crypto-cpu-caps.c.patch @@ -0,0 +1,20 @@ +--- crypto/arch/i386/crypto_cpu_caps.c.orig Mon Jun 16 10:38:27 2025 ++++ crypto/arch/i386/crypto_cpu_caps.c Mon Jun 16 10:38:39 2025 +@@ -37,7 +37,7 @@ cpuid(uint32_t eax, uint32_t *out_eax, uint32_t *out_e + { + uint32_t ebx = 0, ecx = 0, edx = 0; + +-#ifndef OPENSSL_NO_ASM ++#if defined(__GNUC__) && !defined(OPENSSL_NO_ASM) + __asm__ ("cpuid": "+a"(eax), "+b"(ebx), "+c"(ecx), "+d"(edx)); + #else + eax = 0; +@@ -58,7 +58,7 @@ xgetbv(uint32_t ecx, uint32_t *out_eax, uint32_t *out_ + { + uint32_t eax = 0, edx = 0; + +-#ifndef OPENSSL_NO_ASM ++#if defined(__GNUC__) && !defined(OPENSSL_NO_ASM) + __asm__ ("xgetbv": "+a"(eax), "+c"(ecx), "+d"(edx)); + #endif + diff --git a/patches/rfc5280.c.patch b/patches/rfc5280.c.patch deleted file mode 100644 index 92621836fa..0000000000 --- a/patches/rfc5280.c.patch +++ /dev/null @@ -1,82 +0,0 @@ ---- tests/rfc5280time.c.orig Mon Nov 2 20:00:31 2015 -+++ tests/rfc5280time.c Mon Nov 2 20:03:12 2015 -@@ -91,6 +91,7 @@ - .data = "20150923032700Z", - .time = 1442978820, - }, -+#if SIZEOF_TIME_T == 8 - { - /* (times before 2050 must be UTCTIME) Per RFC 5280 4.1.2.5 */ - .str = "00000101000000Z", -@@ -103,6 +104,7 @@ - .data = "20491231235959Z", - .time = 2524607999LL, - }, -+#endif - { - /* (times before 2050 must be UTCTIME) Per RFC 5280 4.1.2.5 */ - .str = "19500101000000Z", -@@ -112,6 +114,7 @@ - }; - - struct rfc5280_time_test rfc5280_gentime_tests[] = { -+#if SIZEOF_TIME_T == 8 - { - /* Biggest RFC 5280 time */ - .str = "99991231235959Z", -@@ -129,6 +132,7 @@ - .data = "20500101000000Z", - .time = 2524608000LL, - }, -+#endif - }; - struct rfc5280_time_test rfc5280_utctime_tests[] = { - { -@@ -141,11 +145,13 @@ - .data = "540226230640Z", - .time = -500000000, - }, -+#if SIZEOF_TIME_T == 8 - { - .str = "491231235959Z", - .data = "491231235959Z", - .time = 2524607999LL, - }, -+#endif - { - .str = "700101000000Z", - .data = "700101000000Z", -@@ -273,14 +279,14 @@ - - if ((i = X509_cmp_time(gt, &att->time)) != -1) { - fprintf(stderr, "FAIL: test %i - X509_cmp_time failed - returned %d compared to %lld\n", -- test_no, i, att->time); -+ test_no, i, (long long)att->time); - goto done; - } - - att->time--; - if ((i = X509_cmp_time(gt, &att->time)) != 1) { - fprintf(stderr, "FAIL: test %i - X509_cmp_time failed - returned %d compared to %lld\n", -- test_no, i, att->time); -+ test_no, i, (long long)att->time); - goto done; - } - att->time++; -@@ -325,14 +331,14 @@ - - if ((i = X509_cmp_time(ut, &att->time)) != -1) { - fprintf(stderr, "FAIL: test %i - X509_cmp_time failed - returned %d compared to %lld\n", -- test_no, i, att->time); -+ test_no, i, (long long)att->time); - goto done; - } - - att->time--; - if ((i = X509_cmp_time(ut, &att->time)) != 1) { - fprintf(stderr, "FAIL: test %i - X509_cmp_time failed - returned %d compared to %lld\n", -- test_no, i, att->time); -+ test_no, i, (long long)att->time); - goto done; - } - att->time++; diff --git a/patches/speed.c.patch b/patches/speed.c.patch index 28b060bc15..4efc65c0db 100644 --- a/patches/speed.c.patch +++ b/patches/speed.c.patch @@ -1,9 +1,9 @@ ---- apps/openssl/speed.c.orig Tue Jul 2 21:58:28 2019 -+++ apps/openssl/speed.c Sun Jul 14 19:39:44 2019 -@@ -159,7 +159,16 @@ static void - pkey_print_message(const char *str, const char *str2, - long num, int bits, int sec); +--- apps/openssl/speed.c.orig 2026-05-05 10:50:46 ++++ apps/openssl/speed.c 2026-05-05 10:51:24 +@@ -158,7 +158,16 @@ static double speed_timer_stop(int s); static void print_result(int alg, int run_no, int count, double time_used); + static void speed_timer_start(int s); + static double speed_timer_stop(int s); +#ifndef _WIN32 static int do_multi(int multi); +#else @@ -15,46 +15,62 @@ +#define alarm(seconds) speed_alarm((seconds)) +#endif - #define ALGOR_NUM 32 #define SIZE_NUM 5 -@@ -466,8 +475,10 @@ speed_main(int argc, char **argv) + #define MAX_ECDH_SIZE 256 +@@ -1005,7 +1014,15 @@ speed_timer_stop(int s) + static double + speed_timer_stop(int s) + { ++#ifndef _WIN32 + return time_f(s); ++#else ++ double elapsed; ++ ++ elapsed = time_f(s); ++ speed_alarm_free(run); ++ return elapsed; ++#endif + } + + static const int KDF1_SHA1_len = 20; +@@ -1123,8 +1140,10 @@ speed_main(int argc, char **argv) const EVP_CIPHER *evp_cipher = NULL; const EVP_MD *evp_md = NULL; int decrypt = 0; +#ifndef _WIN32 int multi = 0; - const char *errstr = NULL; + struct sigaction sa; +#endif + const char *errstr = NULL; - if (single_execution) { - if (pledge("stdio proc", NULL) == -1) { -@@ -544,6 +555,7 @@ speed_main(int argc, char **argv) + if (pledge("stdio proc", NULL) == -1) { +@@ -1200,6 +1219,7 @@ speed_main(int argc, char **argv) + decrypt = 1; j--; /* Otherwise, -decrypt gets confused with an * algorithm. */ - } +#ifndef _WIN32 - else if ((argc > 0) && (strcmp(*argv, "-multi") == 0)) { + } else if (argc > 0 && strcmp(*argv, "-multi") == 0) { argc--; argv++; -@@ -559,6 +571,7 @@ speed_main(int argc, char **argv) +@@ -1214,6 +1234,7 @@ speed_main(int argc, char **argv) + } j--; /* Otherwise, -multi gets confused with an * algorithm. */ - } +#endif - else if (argc > 0 && !strcmp(*argv, "-mr")) { - mr = 1; - j--; /* Otherwise, -mr gets confused with an -@@ -921,7 +934,9 @@ speed_main(int argc, char **argv) + } else if (argc > 0 && strcmp(*argv, "-unaligned") == 0) { + argc--; + argv++; +@@ -1537,7 +1558,9 @@ speed_main(int argc, char **argv) BIO_printf(bio_err, "-evp e use EVP e.\n"); BIO_printf(bio_err, "-decrypt time decryption instead of encryption (only EVP).\n"); BIO_printf(bio_err, "-mr produce machine readable output.\n"); +#ifndef _WIN32 BIO_printf(bio_err, "-multi n run n benchmarks in parallel.\n"); +#endif + BIO_printf(bio_err, "-unaligned n use buffers with offset n from proper alignment.\n"); goto end; } - argc--; -@@ -929,8 +944,10 @@ speed_main(int argc, char **argv) +@@ -1546,8 +1569,10 @@ speed_main(int argc, char **argv) j++; } @@ -65,25 +81,33 @@ if (j == 0) { for (i = 0; i < ALGOR_NUM; i++) { -@@ -1771,7 +1788,9 @@ speed_main(int argc, char **argv) - ecdh_doit[j] = 0; - } +@@ -1620,11 +1645,15 @@ speed_main(int argc, char **argv) + #define COND (run && count<0x7fffffff) + #define COUNT(d) (count) + ++#ifndef _WIN32 + memset(&sa, 0, sizeof(sa)); + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sa.sa_handler = sig_done; + sigaction(SIGALRM, &sa, NULL); ++#else ++ signal(SIGALRM, sig_done); ++#endif + + #ifndef OPENSSL_NO_MD4 + if (doit[D_MD4]) { +@@ -2526,7 +2555,9 @@ speed_main(int argc, char **argv) + free(ss); } + +#ifndef _WIN32 - show_res: + show_res: +#endif if (!mr) { fprintf(stdout, "%s\n", SSLeay_version(SSLEAY_VERSION)); fprintf(stdout, "%s\n", SSLeay_version(SSLEAY_BUILT_ON)); -@@ -1944,11 +1963,15 @@ pkey_print_message(const char *str, const char *str2, - static void - print_result(int alg, int run_no, int count, double time_used) - { -+#ifdef _WIN32 -+ speed_alarm_free(run); -+#endif - BIO_printf(bio_err, mr ? "+R:%d:%s:%f\n" - : "%d %s's in %.2fs\n", count, names[alg], time_used); +@@ -2711,6 +2742,7 @@ print_result(int alg, int run_no, int count, double ti results[alg][run_no] = ((double) count) / time_used * lengths[run_no]; } @@ -91,9 +115,10 @@ static char * sstrsep(char **string, const char *delim) { -@@ -2155,4 +2178,5 @@ do_multi(int multi) +@@ -2911,5 +2943,6 @@ do_multi(int multi) free(fds); return 1; } +#endif - #endif + + #endif /* OPENSSL_NO_SPEED */ diff --git a/patches/ssl_txt.c.patch b/patches/ssl_txt.c.patch deleted file mode 100644 index 6f3535fd8a..0000000000 --- a/patches/ssl_txt.c.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- ssl/ssl_txt.orig Sun Jul 17 17:26:59 2016 -+++ ssl/ssl_txt.c Sun Jul 17 17:35:44 2016 -@@ -82,6 +82,7 @@ - * OTHERWISE. - */ - -+#include - #include - - #include -@@ -163,7 +164,7 @@ - } - - if (x->time != 0) { -- if (BIO_printf(bp, "\n Start Time: %lld", (long long)x->time) <= 0) -+ if (BIO_printf(bp, "\n Start Time: %"PRId64, (int64_t)x->time) <= 0) - goto err; - } - if (x->timeout != 0L) { diff --git a/patches/test.c.patch b/patches/test.c.patch new file mode 100644 index 0000000000..7e80e1f1d1 --- /dev/null +++ b/patches/test.c.patch @@ -0,0 +1,11 @@ +--- tests/test.c.orig 2025-10-07 09:57:42.853015505 -0500 ++++ tests/test.c 2025-10-07 09:58:08.872499852 -0500 +@@ -67,7 +67,7 @@ + return t; + + /* Create a temporary file for logging in non-verbose mode */ +- if ((tmp_file = strdup("/tmp/libressl-test.XXXXXXXX")) == NULL) ++ if ((tmp_file = strdup("libressl-test.XXXXXXXX")) == NULL) + err(1, "strdup"); + if ((out_fd = mkstemp(tmp_file)) == -1) + err(1, "mkstemp"); diff --git a/patches/tls_config.c.patch b/patches/tls_config.c.patch new file mode 100644 index 0000000000..1342a60962 --- /dev/null +++ b/patches/tls_config.c.patch @@ -0,0 +1,15 @@ +uid_t can be 64-bit + +--- tls/tls_config.c.orig 2024-11-02 21:19:47.090322191 +0100 ++++ tls/tls_config.c 2024-11-02 21:38:22.527071689 +0100 +@@ -742,8 +742,8 @@ + + if (sb.st_uid != getuid()) { + tls_config_set_errorx(config, TLS_ERROR_UNKNOWN, +- "session file has incorrect owner (uid %u != %u)", +- sb.st_uid, getuid()); ++ "session file has incorrect owner (uid %llu != %llu)", ++ (unsigned long long)sb.st_uid, (unsigned long long)getuid()); + return (-1); + } + mugo = sb.st_mode & (S_IRWXU|S_IRWXG|S_IRWXO); diff --git a/patches/tlsexttest.c.patch b/patches/tlsexttest.c.patch deleted file mode 100644 index f81c196e51..0000000000 --- a/patches/tlsexttest.c.patch +++ /dev/null @@ -1,76 +0,0 @@ ---- tests/tlsexttest.c.orig Mon Apr 5 01:40:26 2021 -+++ tests/tlsexttest.c Thu Apr 8 04:17:13 2021 -@@ -1658,7 +1658,9 @@ - }; - - static unsigned char tlsext_sni_server[] = { -+ 0x00 - }; -+const size_t sizeof_tlsext_sni_server = 0; - - static int - test_tlsext_sni_client(void) -@@ -1821,9 +1823,9 @@ - if (!CBB_finish(&cbb, &data, &dlen)) - errx(1, "failed to finish CBB"); - -- if (dlen != sizeof(tlsext_sni_server)) { -+ if (dlen != sizeof_tlsext_sni_server) { - FAIL("got server SNI with length %zu, " -- "want length %zu\n", dlen, sizeof(tlsext_sni_server)); -+ "want length %zu\n", dlen, sizeof_tlsext_sni_server); - goto err; - } - -@@ -1832,14 +1834,14 @@ - fprintf(stderr, "received:\n"); - hexdump(data, dlen); - fprintf(stderr, "test data:\n"); -- hexdump(tlsext_sni_server, sizeof(tlsext_sni_server)); -+ hexdump(tlsext_sni_server, sizeof_tlsext_sni_server); - goto err; - } - - free(ssl->session->tlsext_hostname); - ssl->session->tlsext_hostname = NULL; - -- CBS_init(&cbs, tlsext_sni_server, sizeof(tlsext_sni_server)); -+ CBS_init(&cbs, tlsext_sni_server, sizeof_tlsext_sni_server); - if (!tlsext_sni_client_parse(ssl, SSL_TLSEXT_MSG_SH, &cbs, &alert)) { - FAIL("failed to parse server SNI\n"); - goto err; -@@ -2723,7 +2725,10 @@ - 0x04, 0x03, 0x02, 0x01, 0x02, 0x03, - }; - --unsigned char tlsext_clienthello_disabled[] = {}; -+unsigned char tlsext_clienthello_disabled[] = { -+ 0x00 -+}; -+const size_t sizeof_tlsext_clienthello_disabled = 0; - - static int - test_tlsext_clienthello_build(void) -@@ -2791,18 +2796,18 @@ - if (!CBB_finish(&cbb, &data, &dlen)) - errx(1, "failed to finish CBB"); - -- if (dlen != sizeof(tlsext_clienthello_disabled)) { -+ if (dlen != sizeof_tlsext_clienthello_disabled) { - FAIL("got clienthello extensions with length %zu, " - "want length %zu\n", dlen, -- sizeof(tlsext_clienthello_disabled)); -+ sizeof_tlsext_clienthello_disabled); - compare_data(data, dlen, tlsext_clienthello_disabled, -- sizeof(tlsext_clienthello_disabled)); -+ sizeof_tlsext_clienthello_disabled); - goto err; - } - if (memcmp(data, tlsext_clienthello_disabled, dlen) != 0) { - FAIL("clienthello extensions differs:\n"); - compare_data(data, dlen, tlsext_clienthello_disabled, -- sizeof(tlsext_clienthello_disabled)); -+ sizeof_tlsext_clienthello_disabled); - goto err; - } - diff --git a/patches/win32_amd64_bn_arch.h.patch b/patches/win32_amd64_bn_arch.h.patch new file mode 100644 index 0000000000..a6a5ee9c53 --- /dev/null +++ b/patches/win32_amd64_bn_arch.h.patch @@ -0,0 +1,28 @@ +We should consider a OPENSSL_NO_BN_ASM if we can't figure +out how to fix BIGNUM on this OS + +--- crypto/bn/arch/amd64/bn_arch.h.orig Fri Oct 24 07:06:10 2025 ++++ crypto/bn/arch/amd64/bn_arch.h Fri Oct 24 07:06:22 2025 +@@ -20,8 +20,14 @@ + #ifndef HEADER_BN_ARCH_H + #define HEADER_BN_ARCH_H + ++#ifdef _WIN32 + #ifndef OPENSSL_NO_ASM ++#define OPENSSL_NO_ASM ++#endif ++#else + ++#ifndef OPENSSL_NO_ASM ++ + #define HAVE_BN_ADD + #define HAVE_BN_ADD_WORDS + +@@ -110,6 +116,7 @@ bn_subw(BN_ULONG a, BN_ULONG b, BN_ULONG *out_borrow, + } + + #endif /* __GNUC__ */ ++#endif /* _WIN32 */ + + #endif + #endif diff --git a/patches/win32_arm64_bn_arch.h.patch b/patches/win32_arm64_bn_arch.h.patch new file mode 100644 index 0000000000..c8071a84e4 --- /dev/null +++ b/patches/win32_arm64_bn_arch.h.patch @@ -0,0 +1,23 @@ +--- crypto/bn/arch/aarch64/bn_arch.h.orig ++++ crypto/bn/arch/aarch64/bn_arch.h +@@ -20,4 +20,19 @@ + #ifndef HEADER_BN_ARCH_H + #define HEADER_BN_ARCH_H +- ++/* See pull/1355. */ ++#if defined(_MSC_VER) && defined(_M_ARM64) && \ ++ !defined(MSVC_ARM64_BN_CT_NE_ZERO_WORKS) ++ ++#include ++ ++#define HAVE_BN_CT_NE_ZERO ++ ++static inline int ++bn_ct_ne_zero(BN_ULONG w) ++{ ++ return 1U ^ (_CountLeadingZeros64((unsigned __int64)w) >> 6); ++} ++ ++#endif ++ + #ifndef OPENSSL_NO_ASM diff --git a/patches/windows_headers.patch b/patches/windows_headers.patch index 49e2a9738d..2e257be1aa 100644 --- a/patches/windows_headers.patch +++ b/patches/windows_headers.patch @@ -1,40 +1,25 @@ -diff -u include/openssl.orig/dtls1.h include/openssl/dtls1.h ---- include/openssl.orig/dtls1.h Mon Dec 7 07:58:32 2015 -+++ include/openssl/dtls1.h Mon Dec 7 07:56:14 2015 +--- include/openssl/dtls1.h.orig Wed Nov 1 13:15:36 2023 ++++ include/openssl/dtls1.h Wed Nov 1 13:15:54 2023 @@ -60,7 +60,11 @@ #ifndef HEADER_DTLS1_H #define HEADER_DTLS1_H - + +#if defined(_WIN32) +#include +#else #include +#endif - + #include #include ---- include/openssl/opensslconf.h.orig Sat Nov 5 08:36:25 2016 -+++ include/openssl/opensslconf.h Mon Jul 17 06:06:58 2017 -@@ -1,6 +1,10 @@ - #include - /* crypto/opensslconf.h.in */ - -+#if defined(_MSC_VER) && !defined(__attribute__) -+#define __attribute__(a) -+#endif -+ - #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR) - #define OPENSSLDIR "/etc/ssl" - #endif -diff -u include/openssl.orig/ossl_typ.h include/openssl/ossl_typ.h ---- include/openssl.orig/ossl_typ.h Mon Dec 7 07:58:32 2015 -+++ include/openssl/ossl_typ.h Mon Dec 7 07:56:14 2015 -@@ -80,6 +80,22 @@ +--- include/openssl/ossl_typ.h.orig Wed Nov 1 13:15:36 2023 ++++ include/openssl/ossl_typ.h Wed Nov 1 13:18:23 2023 +@@ -82,6 +82,21 @@ typedef struct asn1_object_st ASN1_OBJECT; typedef struct ASN1_ITEM_st ASN1_ITEM; typedef struct asn1_pctx_st ASN1_PCTX; - + +#if defined(_WIN32) && defined(__WINCRYPT_H__) -+#ifndef LIBRESSL_INTERNAL ++#if !defined(LIBRESSL_INTERNAL) && !defined(LIBRESSL_DISABLE_OVERRIDE_WINCRYPT_DEFINES_WARNING) +#ifdef _MSC_VER +#pragma message("Warning, overriding WinCrypt defines") +#else @@ -42,7 +27,6 @@ diff -u include/openssl.orig/ossl_typ.h include/openssl/ossl_typ.h +#endif +#endif +#undef X509_NAME -+#undef X509_CERT_PAIR +#undef X509_EXTENSIONS +#undef OCSP_REQUEST +#undef OCSP_RESPONSE @@ -52,15 +36,14 @@ diff -u include/openssl.orig/ossl_typ.h include/openssl/ossl_typ.h #ifdef BIGNUM #undef BIGNUM #endif -diff -u include/openssl.orig/pkcs7.h include/openssl/pkcs7.h ---- include/openssl.orig/pkcs7.h Mon Dec 7 07:58:32 2015 -+++ include/openssl/pkcs7.h Mon Dec 7 07:56:14 2015 +--- include/openssl/pkcs7.h.orig Wed Nov 1 13:15:36 2023 ++++ include/openssl/pkcs7.h Wed Nov 1 13:17:58 2023 @@ -69,6 +69,18 @@ extern "C" { #endif - + +#if defined(_WIN32) && defined(__WINCRYPT_H__) -+#ifndef LIBRESSL_INTERNAL ++#if !defined(LIBRESSL_INTERNAL) && !defined(LIBRESSL_DISABLE_OVERRIDE_WINCRYPT_DEFINES_WARNING) +#ifdef _MSC_VER +#pragma message("Warning, overriding WinCrypt defines") +#else @@ -74,15 +57,14 @@ diff -u include/openssl.orig/pkcs7.h include/openssl/pkcs7.h /* Encryption_ID DES-CBC Digest_ID MD5 -diff -u include/openssl.orig/x509.h include/openssl/x509.h ---- include/openssl.orig/x509.h Mon Dec 7 07:58:32 2015 -+++ include/openssl/x509.h Mon Dec 7 07:56:14 2015 -@@ -112,6 +112,19 @@ +--- include/openssl/x509.h.orig Wed Nov 1 13:15:36 2023 ++++ include/openssl/x509.h Wed Nov 1 13:18:44 2023 +@@ -100,6 +100,18 @@ extern "C" { #endif - + +#if defined(_WIN32) && defined(__WINCRYPT_H__) -+#ifndef LIBRESSL_INTERNAL ++#if !defined(LIBRESSL_INTERNAL) && !defined(LIBRESSL_DISABLE_OVERRIDE_WINCRYPT_DEFINES_WARNING) +#ifdef _MSC_VER +#pragma message("Warning, overriding WinCrypt defines") +#else @@ -90,7 +72,6 @@ diff -u include/openssl.orig/x509.h include/openssl/x509.h +#endif +#endif +#undef X509_NAME -+#undef X509_CERT_PAIR +#undef X509_EXTENSIONS +#endif + diff --git a/scripts/config.guess b/scripts/config.guess index b82ee23159..980b020838 100644 --- a/scripts/config.guess +++ b/scripts/config.guess @@ -1,12 +1,14 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2015 Free Software Foundation, Inc. +# Copyright 1992-2022 Free Software Foundation, Inc. -timestamp='2015-12-14' +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2022-09-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -15,7 +17,7 @@ timestamp='2015-12-14' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -27,11 +29,19 @@ timestamp='2015-12-14' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + + me=`echo "$0" | sed -e 's,.*/,,'` usage="\ @@ -39,7 +49,7 @@ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -50,7 +60,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2015 Free Software Foundation, Inc. +Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -84,7 +94,8 @@ if test $# != 0; then exit 1 fi -trap 'exit 1' 1 2 15 +# Just in case it came from the environment. +GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires @@ -96,66 +107,90 @@ trap 'exit 1' 1 2 15 # Portable tmp directory creation inspired by the Autoconf team. -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039,SC3028 + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD=$driver + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then +if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "${UNAME_SYSTEM}" in +case $UNAME_SYSTEM in Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu + LIBC=unknown - eval $set_cc_for_build - cat <<-EOF > $dummy.c + set_cc_for_build + cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc - #else + #elif defined(__GLIBC__) LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "$cc_set_libc" + + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu + fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in +case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -167,29 +202,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - /sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` - case "${UNAME_MACHINE_ARCH}" in + case $UNAME_MACHINE_ARCH in + aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) - arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build + # to ELF recently (or will in the future) and ABI. + case $UNAME_MACHINE_ARCH in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -205,10 +243,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # Determine ABI tags. - case "${UNAME_MACHINE_ARCH}" in + case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release @@ -216,43 +254,68 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in + case $UNAME_VERSION in Debian*) release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}${abi}" - exit ;; + GUESS=$machine-${os}${release}${abi-} + ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE + ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE + ;; + *:SecBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE + ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE + ;; + *:MidnightBSD:*:*) + GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE + ;; *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE + ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE + ;; + *:OS108:*:*) + GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE + ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; + GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE + ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE + ;; *:Sortix:*:*) - echo ${UNAME_MACHINE}-unknown-sortix - exit ;; + GUESS=$UNAME_MACHINE-unknown-sortix + ;; + *:Twizzler:*:*) + GUESS=$UNAME_MACHINE-unknown-twizzler + ;; + *:Redox:*:*) + GUESS=$UNAME_MACHINE-unknown-redox + ;; + mips:OSF1:*.*) + GUESS=mips-dec-osf1 + ;; alpha:OSF1:*:*) + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` @@ -266,163 +329,158 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in + case $ALPHA_CPU_TYPE in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; + OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + GUESS=$UNAME_MACHINE-dec-osf$OSF_REL + ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; + GUESS=m68k-unknown-sysv4 + ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; + GUESS=$UNAME_MACHINE-unknown-amigaos + ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; + GUESS=$UNAME_MACHINE-unknown-morphos + ;; *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; + GUESS=i370-ibm-openedition + ;; *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; + GUESS=s390-ibm-zvmoe + ;; *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; + GUESS=powerpc-ibm-os400 + ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; + GUESS=arm-acorn-riscix$UNAME_RELEASE + ;; arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; + GUESS=arm-unknown-riscos + ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; + GUESS=hppa1.1-hitachi-hiuxmpp + ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; + case `(/bin/universe) 2>/dev/null` in + att) GUESS=pyramid-pyramid-sysv3 ;; + *) GUESS=pyramid-pyramid-bsd ;; + esac + ;; NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; + GUESS=pyramid-pyramid-svr4 + ;; DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; + GUESS=sparc-icl-nx6 + ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; + sparc) GUESS=sparc-icl-nx7 ;; + esac + ;; s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL + ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-hal-solaris2$SUN_REL + ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris2$SUN_REL + ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; + GUESS=i386-pc-auroraux$UNAME_RELEASE + ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" + set_cc_for_build + SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$SUN_ARCH-pc-solaris2$SUN_REL + ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris3$SUN_REL + ;; sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in + case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` + GUESS=sparc-sun-sunos$SUN_REL + ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; + GUESS=m68k-sun-sunos$UNAME_RELEASE + ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case `/bin/arch` in sun3) - echo m68k-sun-sunos${UNAME_RELEASE} + GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) - echo sparc-sun-sunos${UNAME_RELEASE} + GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac - exit ;; + ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; + GUESS=sparc-auspex-sunos$UNAME_RELEASE + ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor @@ -432,44 +490,44 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-milan-mint$UNAME_RELEASE + ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-hades-mint$UNAME_RELEASE + ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; + GUESS=m68k-unknown-mint$UNAME_RELEASE + ;; m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; + GUESS=m68k-apple-machten$UNAME_RELEASE + ;; powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; + GUESS=powerpc-apple-machten$UNAME_RELEASE + ;; RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; + GUESS=mips-dec-mach_bsd4.3 + ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; + GUESS=mips-dec-ultrix$UNAME_RELEASE + ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; + GUESS=vax-dec-ultrix$UNAME_RELEASE + ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; + GUESS=clipper-intergraph-clix$UNAME_RELEASE + ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { @@ -478,95 +536,96 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; + GUESS=mips-mips-riscos$UNAME_RELEASE + ;; Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; + GUESS=powerpc-motorola-powermax + ;; Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; + GUESS=powerpc-harris-powermax + ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; + GUESS=powerpc-harris-powermax + ;; Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; + GUESS=powerpc-harris-powerunix + ;; m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; + GUESS=m88k-harris-cxux7 + ;; m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; + GUESS=m88k-motorola-sysv4 + ;; m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; + GUESS=m88k-motorola-sysv3 + ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x then - echo m88k-dg-dgux${UNAME_RELEASE} + GUESS=m88k-dg-dgux$UNAME_RELEASE else - echo m88k-dg-dguxbcs${UNAME_RELEASE} + GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else - echo i586-dg-dgux${UNAME_RELEASE} + GUESS=i586-dg-dgux$UNAME_RELEASE fi - exit ;; + ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; + GUESS=m88k-dolphin-sysv3 + ;; M88*:*:R3*:*) # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; + GUESS=m88k-motorola-sysv3 + ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; + GUESS=m88k-tektronix-sysv3 + ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; + GUESS=m68k-tektronix-bsd + ;; *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; + IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` + GUESS=mips-sgi-irix$IRIX_REL + ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id + ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; + GUESS=i386-ibm-aix + ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then + if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; + GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV + ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include main() @@ -577,77 +636,77 @@ EOF exit(0); } EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then - echo "$SYSTEM_NAME" + GUESS=$SYSTEM_NAME else - echo rs6000-ibm-aix3.2.5 + GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 + GUESS=rs6000-ibm-aix3.2.4 else - echo rs6000-ibm-aix3.2 + GUESS=rs6000-ibm-aix3.2 fi - exit ;; + ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + if test -x /usr/bin/lslpp ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; + GUESS=$IBM_ARCH-ibm-aix$IBM_REV + ;; *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; + GUESS=rs6000-ibm-aix + ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + GUESS=romp-ibm-bsd4.4 + ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 + GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to + ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; + GUESS=rs6000-bull-bosx + ;; DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; + GUESS=m68k-bull-sysv3 + ;; 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; + GUESS=m68k-hp-bsd + ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; + GUESS=m68k-hp-bsd4.4 + ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + case $UNAME_MACHINE in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then + if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + case $sc_cpu_version in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + case $sc_kernel_bits in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + if test "$HP_ARCH" = ""; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include @@ -680,13 +739,13 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if test "$HP_ARCH" = hppa2.0w then - eval $set_cc_for_build + set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -697,23 +756,23 @@ EOF # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; + GUESS=$HP_ARCH-hp-hpux$HPUX_REV + ;; ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + GUESS=ia64-hp-hpux$HPUX_REV + ;; 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include int main () @@ -738,38 +797,38 @@ EOF exit (0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; + GUESS=unknown-hitachi-hiuxwe2 + ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + GUESS=hppa1.1-hp-bsd + ;; 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; + GUESS=hppa1.0-hp-bsd + ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; + GUESS=hppa1.0-hp-mpeix + ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + GUESS=hppa1.1-hp-osf + ;; hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; + GUESS=hppa1.0-hp-osf + ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk + if test -x /usr/sbin/sysversion ; then + GUESS=$UNAME_MACHINE-unknown-osf1mk else - echo ${UNAME_MACHINE}-unknown-osf1 + GUESS=$UNAME_MACHINE-unknown-osf1 fi - exit ;; + ;; parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; + GUESS=hppa1.1-hp-lites + ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; + GUESS=c1-convex-bsd + ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd @@ -777,139 +836,154 @@ EOF fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; + GUESS=c34-convex-bsd + ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; + GUESS=c38-convex-bsd + ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; + GUESS=c4-convex-bsd + ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=ymp-cray-unicos$CRAY_REL + ;; CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=t90-cray-unicos$CRAY_REL + ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=alphaev5-cray-unicosmk$CRAY_REL + ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=sv1-cray-unicos$CRAY_REL + ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=craynv-cray-unicosmp$CRAY_REL + ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` + GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE + ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; + GUESS=sparc-unknown-bsdi$UNAME_RELEASE + ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE + ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi + else + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf + fi + ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in + case $UNAME_PROCESSOR in amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; esac - exit ;; + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL + ;; i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; + GUESS=$UNAME_MACHINE-pc-cygwin + ;; *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 - exit ;; + GUESS=$UNAME_MACHINE-pc-mingw64 + ;; *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-mingw32 + ;; *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-msys + ;; i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-pw32 + ;; + *:SerenityOS:*:*) + GUESS=$UNAME_MACHINE-pc-serenity + ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case $UNAME_MACHINE in x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; + GUESS=i586-pc-interix$UNAME_RELEASE + ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; + GUESS=x86_64-unknown-interix$UNAME_RELEASE + ;; IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; + GUESS=ia64-unknown-interix$UNAME_RELEASE + ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; + GUESS=$UNAME_MACHINE-pc-uwin + ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; + GUESS=x86_64-pc-cygwin + ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=powerpcle-unknown-solaris2$SUN_REL + ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; + GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` + GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL + ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; + GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC + ;; + x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*) + GUESS="$UNAME_MACHINE-pc-managarm-mlibc" + ;; + *:[Mm]anagarm:*:*) + GUESS="$UNAME_MACHINE-unknown-managarm-mlibc" + ;; + *:Minix:*:*) + GUESS=$UNAME_MACHINE-unknown-minix + ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; @@ -919,178 +993,237 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; arm*:Linux:*:*) - eval $set_cc_for_build + set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi - exit ;; + ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; e2k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-pc-linux-$LIBC + ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; k1om:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' << EOF > "$dummy.c" #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el + MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} + MIPS_ENDIAN= #else - CPU= + MIPS_ENDIAN= #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` + eval "$cc_set_vars" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } + ;; + mips64el:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} - exit ;; + GUESS=or1k-unknown-linux-$LIBC + ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} - exit ;; + GUESS=sparc-unknown-linux-$LIBC + ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} - exit ;; + GUESS=hppa64-unknown-linux-$LIBC + ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; + PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; + PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; + *) GUESS=hppa-unknown-linux-$LIBC ;; esac - exit ;; + ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} - exit ;; + GUESS=powerpc64-unknown-linux-$LIBC + ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} - exit ;; + GUESS=powerpc-unknown-linux-$LIBC + ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} - exit ;; + GUESS=powerpc64le-unknown-linux-$LIBC + ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} - exit ;; + GUESS=powerpcle-unknown-linux-$LIBC + ;; + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-ibm-linux-$LIBC + ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-dec-linux-$LIBC + ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} - exit ;; + set_cc_for_build + CPU=$UNAME_MACHINE + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + ABI=64 + sed 's/^ //' << EOF > "$dummy.c" + #ifdef __i386__ + ABI=x86 + #else + #ifdef __ILP32__ + ABI=x32 + #endif + #endif +EOF + cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` + eval "$cc_set_abi" + case $ABI in + x86) CPU=i686 ;; + x32) LIBCABI=${LIBC}x32 ;; + esac + fi + GUESS=$CPU-pc-linux-$LIBCABI + ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; + GUESS=i386-sequent-sysv4 + ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; + GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION + ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; + GUESS=$UNAME_MACHINE-pc-os2-emx + ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; + GUESS=$UNAME_MACHINE-unknown-stop + ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; + GUESS=$UNAME_MACHINE-unknown-atheos + ;; i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; + GUESS=$UNAME_MACHINE-pc-syllable + ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; + GUESS=i386-unknown-lynxos$UNAME_RELEASE + ;; i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + GUESS=$UNAME_MACHINE-pc-msdosdjgpp + ;; + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi - exit ;; + ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in @@ -1098,12 +1231,12 @@ EOF *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; + GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1113,11 +1246,11 @@ EOF && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else - echo ${UNAME_MACHINE}-pc-sysv32 + GUESS=$UNAME_MACHINE-pc-sysv32 fi - exit ;; + ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about @@ -1125,31 +1258,31 @@ EOF # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; + GUESS=i586-pc-msdosdjgpp + ;; Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; + GUESS=i386-pc-mach3 + ;; paragon:*:*:*) - echo i860-intel-osf1 - exit ;; + GUESS=i860-intel-osf1 + ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi - exit ;; + ;; mini*:CTIX:SYS*5:*) # "miniframe" - echo m68010-convergent-sysv - exit ;; + GUESS=m68010-convergent-sysv + ;; mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; + GUESS=m68k-convergent-sysv + ;; M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; + GUESS=m68k-diab-dnix + ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) @@ -1157,9 +1290,9 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; @@ -1168,251 +1301,444 @@ EOF test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; + GUESS=m68k-unknown-lynxos$UNAME_RELEASE + ;; mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; + GUESS=m68k-atari-sysv4 + ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; + GUESS=sparc-unknown-lynxos$UNAME_RELEASE + ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; + GUESS=rs6000-unknown-lynxos$UNAME_RELEASE + ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; + GUESS=powerpc-unknown-lynxos$UNAME_RELEASE + ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; + GUESS=mips-dde-sysv$UNAME_RELEASE + ;; RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; + GUESS=mips-sni-sysv4 + ;; RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; + GUESS=mips-sni-sysv4 + ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 + GUESS=$UNAME_MACHINE-sni-sysv4 else - echo ns32k-sni-sysv + GUESS=ns32k-sni-sysv fi - exit ;; + ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says - echo i586-unisys-sysv4 - exit ;; + GUESS=i586-unisys-sysv4 + ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; + GUESS=hppa1.1-stratus-sysv4 + ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; + GUESS=i860-stratus-sysv4 + ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; + GUESS=$UNAME_MACHINE-stratus-vos + ;; *:VOS:*:*) # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; + GUESS=hppa1.1-stratus-vos + ;; mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; + GUESS=m68k-apple-aux$UNAME_RELEASE + ;; news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; + GUESS=mips-sony-newsos6 + ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + if test -d /usr/nec; then + GUESS=mips-nec-sysv$UNAME_RELEASE else - echo mips-unknown-sysv${UNAME_RELEASE} + GUESS=mips-unknown-sysv$UNAME_RELEASE fi - exit ;; + ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; + GUESS=powerpc-be-beos + ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; + GUESS=powerpc-apple-beos + ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; + GUESS=i586-pc-beos + ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; + GUESS=i586-pc-haiku + ;; + ppc:Haiku:*:*) # Haiku running on Apple PowerPC + GUESS=powerpc-apple-haiku + ;; + *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) + GUESS=$UNAME_MACHINE-unknown-haiku + ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx4-nec-superux$UNAME_RELEASE + ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx5-nec-superux$UNAME_RELEASE + ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx6-nec-superux$UNAME_RELEASE + ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx7-nec-superux$UNAME_RELEASE + ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx8-nec-superux$UNAME_RELEASE + ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; + GUESS=sx8r-nec-superux$UNAME_RELEASE + ;; + SX-ACE:SUPER-UX:*:*) + GUESS=sxace-nec-superux$UNAME_RELEASE + ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; + GUESS=powerpc-apple-rhapsody$UNAME_RELEASE + ;; *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE + ;; + arm64:Darwin:*:*) + GUESS=aarch64-apple-darwin$UNAME_RELEASE + ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc + UNAME_PROCESSOR=`uname -p` + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE + ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE + ;; *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; + GUESS=i386-pc-qnx + ;; + NEO-*:NONSTOP_KERNEL:*:*) + GUESS=neo-tandem-nsk$UNAME_RELEASE + ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; + GUESS=nse-tandem-nsk$UNAME_RELEASE + ;; + NSR-*:NONSTOP_KERNEL:*:*) + GUESS=nsr-tandem-nsk$UNAME_RELEASE + ;; + NSV-*:NONSTOP_KERNEL:*:*) + GUESS=nsv-tandem-nsk$UNAME_RELEASE + ;; + NSX-*:NONSTOP_KERNEL:*:*) + GUESS=nsx-tandem-nsk$UNAME_RELEASE + ;; *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; + GUESS=mips-compaq-nonstopux + ;; BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; + GUESS=bs2000-siemens-sysv + ;; DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; + GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE + ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "${cputype-}" = 386; then UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" + elif test "x${cputype-}" != x; then + UNAME_MACHINE=$cputype fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; + GUESS=$UNAME_MACHINE-unknown-plan9 + ;; *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; + GUESS=pdp10-unknown-tops10 + ;; *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; + GUESS=pdp10-unknown-tenex + ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; + GUESS=pdp10-dec-tops20 + ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; + GUESS=pdp10-xkl-tops20 + ;; *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; + GUESS=pdp10-unknown-tops20 + ;; *:ITS:*:*) - echo pdp10-unknown-its - exit ;; + GUESS=pdp10-unknown-its + ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; + GUESS=mips-sei-seiux$UNAME_RELEASE + ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; + DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL + ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; + case $UNAME_MACHINE in + A*) GUESS=alpha-dec-vms ;; + I*) GUESS=ia64-dec-vms ;; + V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; + GUESS=i386-pc-xenix + ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; + SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` + GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL + ;; i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; + GUESS=$UNAME_MACHINE-pc-rdos + ;; + i*86:Fiwix:*:*) + GUESS=$UNAME_MACHINE-pc-fiwix + ;; + *:AROS:*:*) + GUESS=$UNAME_MACHINE-unknown-aros + ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx - exit ;; + GUESS=$UNAME_MACHINE-unknown-esx + ;; amd64:Isilon\ OneFS:*:*) - echo x86_64-unknown-onefs - exit ;; + GUESS=x86_64-unknown-onefs + ;; + *:Unleashed:*:*) + GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE + ;; +esac + +# Do we have a guess based on uname results? +if test "x$GUESS" != x; then + echo "$GUESS" + exit +fi + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + +echo "$0: unable to guess system type" >&2 + +case $UNAME_MACHINE:$UNAME_SYSTEM in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 < in order to provide the needed -information to handle your system. +our_year=`echo $timestamp | sed 's,-.*,,'` +thisyear=`date +%Y` +# shellcheck disable=SC2003 +script_age=`expr "$thisyear" - "$our_year"` +if test "$script_age" -lt 3 ; then + cat >&2 </dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" EOF +fi exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/scripts/config.sub b/scripts/config.sub index 0cd701654c..baf1512b3c 100644 --- a/scripts/config.sub +++ b/scripts/config.sub @@ -1,12 +1,14 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2015 Free Software Foundation, Inc. +# Copyright 1992-2022 Free Software Foundation, Inc. -timestamp='2015-12-14' +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2022-09-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -15,7 +17,7 @@ timestamp='2015-12-14' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -33,7 +35,7 @@ timestamp='2015-12-14' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD +# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -50,6 +52,13 @@ timestamp='2015-12-14' # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + me=`echo "$0" | sed -e 's,.*/,,'` usage="\ @@ -57,7 +66,7 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -67,7 +76,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2015 Free Software Foundation, Inc. +Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -89,12 +98,12 @@ while test $# -gt 0 ; do - ) # Use stdin as input. break ;; -* ) - echo "$me: invalid option $1$help" + echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. - echo $1 + echo "$1" exit ;; * ) @@ -110,1234 +119,1186 @@ case $# in exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac +# Split fields of configuration type +# shellcheck disable=SC2162 +saved_IFS=$IFS +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova* | managarm-*) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac ;; - -psos*) - os=-psos + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + zephyr*) + basic_machine=$field1-unknown + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac ;; esac -# Decode aliases for certain CPU-COMPANY combinations. +# Decode 1-component or ad-hoc basic machines case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + op50n) + cpu=hppa1.1 + vendor=oki ;; - ms1) - basic_machine=mt-unknown + op60c) + cpu=hppa1.1 + vendor=oki ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown + ibm*) + cpu=i370 + vendor=ibm ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none + orion105) + cpu=clipper + vendor=highlevel ;; - xscaleeb) - basic_machine=armeb-unknown + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple ;; - - xscaleel) - basic_machine=armel-unknown + pmac | pmac-mpw) + cpu=powerpc + vendor=apple ;; - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att + cpu=m68000 + vendor=att ;; 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux + cpu=we32k + vendor=att ;; bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec + cpu=powerpc + vendor=ibm + basic_os=cnk ;; decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 + cpu=pdp10 + vendor=dec + basic_os=tops10 ;; decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 + cpu=pdp10 + vendor=dec + basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp + cpu=m68k + vendor=motorola ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd + dpx2*) + cpu=m68k + vendor=bull + basic_os=sysv3 ;; encore | umax | mmax) - basic_machine=ns32k-encore + cpu=ns32k + vendor=encore ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose + elxsi) + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} ;; fx2800) - basic_machine=i860-alliant + cpu=i860 + vendor=alliant ;; genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 + cpu=ns32k + vendor=ns ;; h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp + cpu=m68000 + vendor=hp ;; hp9k3[2-9][0-9]) - basic_machine=m68k-hp + cpu=m68k + vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm + cpu=hppa1.0 + vendor=hp ;; i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv32 ;; i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv4 ;; i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv ;; i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=solaris2 ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} ;; iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) + cpu=mips + vendor=sgi + case $basic_os in + irix*) ;; *) - os=-irix4 + basic_os=irix4 ;; esac ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + cpu=m68000 + vendor=convergent ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint ;; news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) + cpu=mips + vendor=sony + basic_os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) ;; - -ns2*) - os=-nextstep2 + ns2*) + basic_os=nextstep2 ;; *) - os=-nextstep3 + basic_os=nextstep3 ;; esac ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem + cpu=np1 + vendor=gould ;; op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k + cpu=hppa1.1 + vendor=oki + basic_os=proelf ;; pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; pbd) - basic_machine=sparc-tti + cpu=sparc + vendor=tti ;; pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc + cpu=m68k + vendor=tti ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + pc532) + cpu=ns32k + vendor=pc532 ;; pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + cpu=pn + vendor=gould ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + power) + cpu=power + vendor=ibm ;; ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff + cpu=i386 + vendor=ibm ;; rm[46]00) - basic_machine=mips-siemens + cpu=mips + vendor=siemens ;; rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm + cpu=romp + vendor=ibm ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} ;; - sb1) - basic_machine=mipsisa64sb1-unknown + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown + tower | tower-32) + cpu=m68k + vendor=ncr ;; - sde) - basic_machine=mipsisa32-sde - os=-elf + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu ;; - sei) - basic_machine=mips-sei - os=-seiux + w65) + cpu=w65 + vendor=wdc ;; - sequent) - basic_machine=i386-sequent + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf ;; - sh) - basic_machine=sh-hitachi - os=-hms + none) + cpu=none + vendor=none ;; - sh5el) - basic_machine=sh5le-unknown + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine ;; - sh64) - basic_machine=sh64-unknown + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks + + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read cpu vendor <&2 - exit 1 + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb | arc32 | arc64 \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bpf | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | loongarch32 | loongarch64 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64eb | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r3 | mipsisa32r3el \ + | mipsisa32r5 | mipsisa32r5el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r3 | mipsisa64r3el \ + | mipsisa64r5 | mipsisa64r5el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ + | rl78 | romp | rs6000 | rx \ + | s390 | s390x \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | thumbv7* \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | w65 \ + | wasm32 | wasm64 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + exit 1 + ;; + esac ;; esac # Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; @@ -1345,201 +1306,219 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if test x$basic_os != x then + +# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` + ;; + os2-emx) + kernel=os2 + os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` + ;; + nto-qnx*) + kernel=nto + os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` + ;; + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read kernel os <&2 - exit 1 + # No normalization, but not necessarily accepted, that comes below. ;; esac + else # Here we handle the default operating systems that come with various machines. @@ -1552,261 +1531,376 @@ else # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. -case $basic_machine in +kernel= +case $cpu-$vendor in score-*) - os=-elf + os=elf ;; spu-*) - os=-elf + os=elf ;; *-acorn) - os=-riscix1.2 + os=riscix1.2 ;; arm*-rebel) - os=-linux + kernel=linux + os=gnu ;; arm*-semi) - os=-aout + os=aout ;; c4x-* | tic4x-*) - os=-coff + os=coff ;; c8051-*) - os=-elf + os=elf + ;; + clipper-intergraph) + os=clix ;; hexagon-*) - os=-elf + os=elf ;; tic54x-*) - os=-coff + os=coff ;; tic55x-*) - os=-coff + os=coff ;; tic6x-*) - os=-coff + os=coff ;; # This must come before the *-dec entry. pdp10-*) - os=-tops20 + os=tops20 ;; pdp11-*) - os=-none + os=none ;; *-dec | vax-*) - os=-ultrix4.2 + os=ultrix4.2 ;; m68*-apollo) - os=-domain + os=domain ;; i386-sun) - os=-sunos4.0.2 + os=sunos4.0.2 ;; m68000-sun) - os=-sunos3 + os=sunos3 ;; m68*-cisco) - os=-aout + os=aout ;; mep-*) - os=-elf + os=elf ;; mips*-cisco) - os=-elf + os=elf ;; mips*-*) - os=-elf + os=elf ;; or32-*) - os=-coff + os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 + os=sysv3 ;; sparc-* | *-sun) - os=-sunos4.1.1 + os=sunos4.1.1 ;; - *-be) - os=-beos + pru-*) + os=elf ;; - *-haiku) - os=-haiku + *-be) + os=beos ;; *-ibm) - os=-aix + os=aix ;; *-knuth) - os=-mmixware + os=mmixware ;; *-wec) - os=-proelf + os=proelf ;; *-winbond) - os=-proelf + os=proelf ;; *-oki) - os=-proelf + os=proelf ;; *-hp) - os=-hpux + os=hpux ;; *-hitachi) - os=-hiux + os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv + os=sysv ;; *-cbm) - os=-amigaos + os=amigaos ;; *-dg) - os=-dgux + os=dgux ;; *-dolphin) - os=-sysv3 + os=sysv3 ;; m68k-ccur) - os=-rtu + os=rtu ;; m88k-omron*) - os=-luna + os=luna ;; - *-next ) - os=-nextstep + *-next) + os=nextstep ;; *-sequent) - os=-ptx + os=ptx ;; *-crds) - os=-unos + os=unos ;; *-ns) - os=-genix + os=genix ;; i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 + os=mvs ;; *-gould) - os=-sysv + os=sysv ;; *-highlevel) - os=-bsd + os=bsd ;; *-encore) - os=-bsd + os=bsd ;; *-sgi) - os=-irix + os=irix ;; *-siemens) - os=-sysv4 + os=sysv4 ;; *-masscomp) - os=-rtu + os=rtu ;; f30[01]-fujitsu | f700-fujitsu) - os=-uxpv + os=uxpv ;; *-rom68k) - os=-coff + os=coff ;; *-*bug) - os=-coff + os=coff ;; *-apple) - os=-macos + os=macos ;; *-atari*) - os=-mint + os=mint + ;; + *-wrs) + os=vxworks ;; *) - os=-none + os=none ;; esac + fi +# Now, validate our (potentially fixed-up) OS. +case $os in + # Sometimes we do "kernel-libc", so those need to count as OSes. + musl* | newlib* | relibc* | uclibc*) + ;; + # Likewise for "kernel-abi" + eabi* | gnueabi*) + ;; + # VxWorks passes extra cpu info in the 4th filed. + simlinux | simwindows | spe) + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ + | hiux* | abug | nacl* | netware* | windows* \ + | os9* | macos* | osx* | ios* \ + | mpw* | magic* | mmixware* | mon960* | lnews* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | mirbsd* | netbsd* | dicos* | openedition* | ose* \ + | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ + | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* | serenity* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | mint* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ + | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ + | fiwix* | mlibc* ) + ;; + # This one is extra strict with allowed versions + sco3.2v2 | sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + none) + ;; + kernel* ) + # Restricted further below + ;; + *) + echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ + | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* ) + ;; + uclinux-uclibc* ) + ;; + managarm-mlibc* | managarm-kernel* ) + ;; + -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + -kernel* ) + echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + *-kernel* ) + echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + vxworks-simlinux | vxworks-simwindows | vxworks-spe) + ;; + nto-qnx*) + ;; + os2-emx) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + exit 1 + ;; +esac + # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) vendor=acorn ;; - -sunos*) + *-sunos*) vendor=sun ;; - -cnk*|-aix*) + *-cnk* | *-aix*) vendor=ibm ;; - -beos*) + *-beos*) vendor=be ;; - -hpux*) + *-hpux*) vendor=hp ;; - -mpeix*) + *-mpeix*) vendor=hp ;; - -hiux*) + *-hiux*) vendor=hitachi ;; - -unos*) + *-unos*) vendor=crds ;; - -dgux*) + *-dgux*) vendor=dg ;; - -luna*) + *-luna*) vendor=omron ;; - -genix*) + *-genix*) vendor=ns ;; - -mvs* | -opened*) + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) vendor=ibm ;; - -os400*) + s390-* | s390x-*) vendor=ibm ;; - -ptx*) + *-ptx*) vendor=sequent ;; - -tpf*) + *-tpf*) vendor=ibm ;; - -vxsim* | -vxworks* | -windiss*) + *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; - -aux*) + *-aux*) vendor=apple ;; - -hms*) + *-hms*) vendor=hitachi ;; - -mpw* | -macos*) + *-mpw* | *-macos*) vendor=apple ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; - -vos*) + *-vos*) vendor=stratus ;; esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac -echo $basic_machine$os +echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/scripts/i686-w64-mingw32.cmake b/scripts/i686-w64-mingw32.cmake index 58efd58cf0..bad60db7ab 100644 --- a/scripts/i686-w64-mingw32.cmake +++ b/scripts/i686-w64-mingw32.cmake @@ -1,4 +1,5 @@ SET(CMAKE_SYSTEM_NAME Windows) +SET(CMAKE_SYSTEM_PROCESSOR i386) SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc) SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++) SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres) diff --git a/scripts/test b/scripts/test index 80fa988f2f..b3386a8b3e 100755 --- a/scripts/test +++ b/scripts/test @@ -1,105 +1,196 @@ #!/bin/sh set -e +set -x +if [ "$ARCH" = "" ]; then + ARCH=`uname -m` +fi + +if [ "$ARCH" = "mingw32" -o "$ARCH" = "mingw64" -o "$ARCH" = "arm32" ]; then + unset CC +fi + +ENABLE_ASM="${ENABLE_ASM:=ON}" +export CTEST_PARALLEL_LEVEL="${CTEST_PARALLEL_LEVEL-}" + +# setup_cross_compiler sets up environment variables for cross-compilation with the given prefix. +setup_cross_compiler() { + cross_prefix=$1 + + CC=${cross_prefix}-gcc + CXX=${cross_prefix}-g++ + AR=${cross_prefix}-ar + STRIP=${cross_prefix}-strip + RANLIB=${cross_prefix}-ranlib + + # If the unversioned symlink for gcc doesn't exist, find versioned binary. + if ! command -v "$CC" >/dev/null 2>&1; then + gcc_ver=$(find /usr/bin -name "${CC}-[0-9]*" -prune 2>/dev/null \ + | sed "s/.*${CC}-//" | sort -n | tail -n 1) + CC=${CC}-${gcc_ver} + CXX=${CXX}-${gcc_ver} + fi + + # Check all binaries actually exist. + for c in "$CC" "$CXX" "$AR" "$STRIP" "$RANLIB"; do + if ! command -v "$c" >/dev/null 2>&1; then + echo "##### Error: $c not found" + exit 1 + fi + done + + echo "##### Using $($CC --version | head -n 1)" +} + +# generate source tree ./autogen.sh -if [ "x$ARCH" = "xnative" ]; then +VERSION=`cat VERSION` + +# test macOS +if [ `uname` = "Darwin" ]; then # test autotools ./configure + + # make distribution make -j 4 distcheck + # test cmake + tar zxvf libressl-$VERSION.tar.gz + cd libressl-$VERSION + + ( + mkdir build-static + cd build-static + cmake -DCMAKE_OSX_ARCHITECTURES=$ARCH .. + make -j 4 + if [ "$ARCH" = "arm64" ] && [ "$OS" = "macos-12" ] || [ "$OS" = "macos-13" ]; then + echo "##### skip tests" + else + make test + fi + ) + + ( + mkdir build-shared + cd build-shared + cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_OSX_ARCHITECTURES=$ARCH .. + make -j 4 + if [ "$ARCH" = "arm64" ] && [ "$OS" = "macos-12" ] || [ "$OS" = "macos-13" ]; then + echo "##### skip tests" + else + make test + fi + ) + +# assuming Linux below +elif [ "$ARCH" = "native" ]; then + # test autotools + ./configure + # make distribution - make dist - tar zxvf libressl-*.tar.gz - cd libressl-* - mkdir build-static - mkdir build-shared + make -j 4 distcheck - cd build-static + tar zxvf libressl-$VERSION.tar.gz + cd libressl-$VERSION - # test cmake and ninja - if [ `uname` = "Darwin" ]; then - cmake .. - make - make test - - cd ../build-shared - cmake -DBUILD_SHARED_LIBS=ON .. - make - make test - else - sudo apt-get update - sudo apt-get install -y cmake ninja-build - cmake -GNinja .. + # test cmake and ninja + ( + mkdir build-static + cd build-static + cmake -GNinja -DENABLE_ASM=${ENABLE_ASM} .. ninja ninja test + ) - cd ../build-shared - cmake -GNinja -DBUILD_SHARED_LIBS=ON .. + ( + mkdir build-shared + cd build-shared + cmake -GNinja -DBUILD_SHARED_LIBS=ON -DENABLE_ASM=${ENABLE_ASM} .. ninja ninja test - fi - -elif [ "x$ARCH" = "xmingw32" -o "x$ARCH" = "xmingw64" ]; then - sudo apt-get update - sudo apt-get install -y cmake ninja-build + ) +elif [ "$ARCH" = "mingw32" ] || [ "$ARCH" = "mingw64" ]; then CPU=i686 - if [ "x$ARCH" = "xmingw64" ]; then + if [ "$ARCH" = "mingw64" ]; then CPU=x86_64 fi - export CC=$CPU-w64-mingw32-gcc - - if [ -z $(which $CC) ]; then - sudo apt-get update - sudo apt-get install -y mingw-w64 make - export PATH=$PATH:/opt/$ARCH/bin - fi ./configure --host=$CPU-w64-mingw32 - make -j + make -j 4 ( rm -fr build-static mkdir build-static cd build-static - cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=../scripts/$CPU-w64-mingw32.cmake .. - ninja + cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=../scripts/$CPU-w64-mingw32.cmake -DENABLE_ASM=${ENABLE_ASM} .. + ninja -j 4 ) ( rm -fr build-shared mkdir build-shared cd build-shared - cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=../scripts/$CPU-w64-mingw32.cmake -DBUILD_SHARED_LIBS=ON .. - ninja + cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=../scripts/$CPU-w64-mingw32.cmake -DBUILD_SHARED_LIBS=ON -DENABLE_ASM=${ENABLE_ASM} .. + ninja -j 4 ) -elif [ "x$ARCH" = "xarm32" -o "x$ARCH" = "xarm64" ]; then - sudo apt-get update - sudo apt-get install -y qemu-user-static binfmt-support +elif [ "$ARCH" = "arm32" ] || [ "$ARCH" = "arm64" ]; then + if [ "$ARCH" = "arm32" ]; then + sudo ln -sf /usr/arm-linux-gnueabihf/lib/ld-linux-armhf.so.3 /lib/ + setup_cross_compiler arm-linux-gnueabihf - if [ "x$ARCH" = "xarm32" ]; then - sudo apt-get install -y g++-arm-linux-gnueabihf - sudo ln -s /usr/arm-linux-gnueabihf/lib/ld-*.*.so /lib/ld-linux-armhf.so.3 - export LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib - export CC=arm-linux-gnueabihf-gcc - ./configure --host=arm-linux + ./configure --host=arm-linux-gnueabihf + LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib make -j 4 check else - sudo apt-get install -y g++-aarch64-linux-gnu - sudo ln -s /usr/aarch64-linux-gnu/lib/ld-*.*.so /lib/ld-linux-aarch64.so.1 - export LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib - export CC=aarch64-linux-gnu-gcc - ./configure --host=aarch64-linux + sudo ln -sf /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib/ + setup_cross_compiler aarch64-linux-gnu + + ./configure --host=aarch64-linux-gnu + LD_LIBRARY_PATH=/usr/aarch64-linux-gnu/lib make -j 4 check fi - make -j 4 check - file apps/openssl/.libs/openssl + file apps/openssl/openssl + +elif [ "$ARCH" = "loong64" ]; then + sudo ln -sf /usr/loongarch64-linux-gnu/lib64/ld-linux-loongarch-lp64d.so.1 /lib64 + setup_cross_compiler loongarch64-linux-gnu + + ./configure --host=loongarch64-linux-gnu + LD_LIBRARY_PATH=/usr/loongarch64-linux-gnu/lib make -j 4 check + + file apps/openssl/openssl + +elif [ "$ARCH" = "riscv64" ]; then + sudo ln -sf /usr/riscv64-linux-gnu/lib/ld-linux-riscv64-lp64d.so.1 /lib/ + setup_cross_compiler riscv64-linux-gnu + + ./configure --host=riscv64-linux-gnu + LD_LIBRARY_PATH=/usr/riscv64-linux-gnu/lib make -j 4 check + + file apps/openssl/openssl + +elif [ "$ARCH" = "mips32" ] || [ "$ARCH" = "mips64" ]; then + if [ "$ARCH" = "mips32" ]; then + sudo ln -sf /usr/mipsel-linux-gnu/lib/ld.so.1 /lib/ + setup_cross_compiler mipsel-linux-gnu + + # MIPS32 assembly is disabled by default, so enable it for CI coverage. + ./configure --host=mipsel-linux-gnu --enable-asm + LD_LIBRARY_PATH=/usr/mipsel-linux-gnu/lib make -j 4 check + else + sudo ln -sf /usr/mips64el-linux-gnuabi64/lib64/ld.so.1 /lib64 + setup_cross_compiler mips64el-linux-gnuabi64 + + # MIPS assembly is disabled by default, so enable it for CI coverage. + ./configure --host=mips64el-linux-gnuabi64 --enable-asm + LD_LIBRARY_PATH=/usr/mips64el-linux-gnuabi64/lib make -j 4 check + fi -elif [ "x$ARCH" = "xandroid" ]; then - sudo apt-get update - sudo apt-get install -y cmake ninja-build + file apps/openssl/openssl +elif [ "$ARCH" = "android" ]; then export TC_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake # set target API level and architecture @@ -125,14 +216,16 @@ elif [ "x$ARCH" = "xandroid" ]; then echo "##### Date: `date`, Native API level: $NAL, ABI: $ABI" ( - build_dir=build_$NAL_$ABI + build_dir=build-$NAL_$ABI rm -fr $build_dir mkdir $build_dir cd $build_dir + echo "##### cmake -GNinja -DCMAKE_MAKE_PROGRAM=ninja -DANDROID_NDK=$ANDROID_NDK_HOME -DCMAKE_TOOLCHAIN_FILE=$TC_FILE -DANDROID_ABI=$ABI -DANDROID_NATIVE_API_LEVEL=$NAL .." cmake -GNinja -DCMAKE_MAKE_PROGRAM=ninja \ -DANDROID_NDK=$ANDROID_NDK_HOME \ -DCMAKE_TOOLCHAIN_FILE=$TC_FILE \ - -DANDROID_ABI=$ABI -DANDROID_NATIVE_API_LEVEL=$NAL .. + -DANDROID_ABI=$ABI -DANDROID_NATIVE_API_LEVEL=$NAL \ + -DENABLE_ASM=${ENABLE_ASM} .. ninja -j 4 diff --git a/scripts/x86_64-w64-mingw32.cmake b/scripts/x86_64-w64-mingw32.cmake index c52b606514..df65165f8d 100644 --- a/scripts/x86_64-w64-mingw32.cmake +++ b/scripts/x86_64-w64-mingw32.cmake @@ -1,4 +1,5 @@ SET(CMAKE_SYSTEM_NAME Windows) +SET(CMAKE_SYSTEM_PROCESSOR amd64) SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) diff --git a/ssl/CMakeLists.txt b/ssl/CMakeLists.txt index a772d12294..424d63918c 100644 --- a/ssl/CMakeLists.txt +++ b/ssl/CMakeLists.txt @@ -1,17 +1,29 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set( SSL_SRC bio_ssl.c - bs_ber.c - bs_cbb.c - bs_cbs.c d1_both.c d1_lib.c d1_pkt.c d1_srtp.c + dtls12_handshake_msg.c pqueue.c s3_cbc.c s3_lib.c - ssl_algs.c ssl_asn1.c ssl_both.c ssl_cert.c @@ -23,9 +35,9 @@ set( ssl_kex.c ssl_lib.c ssl_methods.c - ssl_packet.c ssl_pkt.c ssl_rsa.c + ssl_seclevel.c ssl_sess.c ssl_sigalgs.c ssl_srvr.c @@ -36,50 +48,118 @@ set( ssl_versions.c t1_enc.c t1_lib.c + tls_buffer.c tls_content.c + tls_key_share.c + tls_lib.c tls12_key_schedule.c tls12_lib.c tls12_record_layer.c - tls13_buffer.c tls13_client.c tls13_error.c tls13_handshake.c tls13_handshake_msg.c tls13_key_schedule.c - tls13_key_share.c tls13_legacy.c tls13_lib.c + tls13_quic.c tls13_record.c tls13_record_layer.c tls13_server.c ) +set( + BS_SRC + bs_ber.c + bs_cbb.c + bs_cbs.c +) + add_library(ssl_obj OBJECT ${SSL_SRC}) target_include_directories(ssl_obj PRIVATE . + hidden + ../crypto + ../crypto/bio ../include/compat PUBLIC - ../include) + ../include + ${CMAKE_BINARY_DIR}/include) + +if(MSVC) + # "C4702" - unreachable code + set_source_files_properties(d1_pkt.c s3_cbc.c PROPERTIES + COMPILE_OPTIONS /wd4702 + ) +endif() -add_library(ssl $) -target_include_directories(ssl +add_library(bs_obj OBJECT ${BS_SRC}) +target_include_directories(bs_obj PRIVATE . - ../include/compat - PUBLIC - ../include) + ../include/compat) + +if(BUILD_SHARED_LIBS) + add_library(ssl $ $ $) +else() + add_library(ssl $ empty.c) +endif() export_symbol(ssl ${CMAKE_CURRENT_SOURCE_DIR}/ssl.sym) target_link_libraries(ssl crypto ${PLATFORM_LIBS}) -if (WIN32) - set(SSL_POSTFIX -${SSL_MAJOR_VERSION}) -endif() set_target_properties(ssl PROPERTIES - OUTPUT_NAME ssl${SSL_POSTFIX} - ARCHIVE_OUTPUT_NAME ssl${SSL_POSTFIX}) -set_target_properties(ssl PROPERTIES VERSION ${SSL_VERSION} - SOVERSION ${SSL_MAJOR_VERSION}) + OUTPUT_NAME ssl + ARCHIVE_OUTPUT_NAME ssl + EXPORT_NAME SSL + VERSION ${SSL_VERSION} + SOVERSION ${SSL_MAJOR_VERSION} +) +if(NOT CMAKE_VERSION VERSION_LESS 3.27.0) + set_target_properties(ssl PROPERTIES DLL_NAME_WITH_SOVERSION TRUE) +endif() + +target_include_directories( + ssl + PUBLIC + $ + $ +) + +if(HOST_AARCH64) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/aarch64/) +elseif(HOST_ARM) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/arm/) +elseif(HOST_I386) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/i386/) +elseif(HOST_LOONGARCH64) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/loongarch64) +elseif(HOST_MIPS64) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/mips64) +elseif(HOST_MIPS) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/mips) +elseif(HOST_POWERPC) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/powerpc) +elseif(HOST_POWERPC64) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/powerpc64) +elseif(HOST_RISCV64) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/riscv64) +elseif(HOST_SPARC64) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/sparc64) +elseif(HOST_X86_64) + target_include_directories(ssl_obj PRIVATE ../crypto/arch/amd64) +endif() + +install( + TARGETS ssl + EXPORT SSL-target +) + +export( + EXPORT SSL-target + FILE "${LibreSSL_BINARY_DIR}/LibreSSL-SSL.cmake" + NAMESPACE LibreSSL:: +) if(ENABLE_LIBRESSL_INSTALL) install( @@ -88,4 +168,16 @@ if(ENABLE_LIBRESSL_INSTALL) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) + install( + EXPORT SSL-target + FILE "LibreSSL-SSL.cmake" + NAMESPACE LibreSSL:: + DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}" + ) endif(ENABLE_LIBRESSL_INSTALL) + +# build static library for regression test +if(BUILD_SHARED_LIBS) + add_library(ssl-static STATIC $) + target_link_libraries(ssl-static crypto-static ${PLATFORM_LIBS}) +endif() diff --git a/ssl/Makefile.am b/ssl/Makefile.am index f266122057..2a1c848db6 100644 --- a/ssl/Makefile.am +++ b/ssl/Makefile.am @@ -1,14 +1,39 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + include $(top_srcdir)/Makefile.am.common +-include $(abs_top_builddir)/crypto/libcrypto_la_objects.mk + +AM_CPPFLAGS += -I$(top_srcdir)/crypto +AM_CPPFLAGS += -I$(top_srcdir)/crypto/bio + +noinst_LTLIBRARIES = libbs.la + if ENABLE_LIBTLS_ONLY -noinst_LTLIBRARIES = libssl.la +noinst_LTLIBRARIES += libssl.la else lib_LTLIBRARIES = libssl.la endif +noinst_DATA = remove_bs_objects + EXTRA_DIST = VERSION EXTRA_DIST += CMakeLists.txt EXTRA_DIST += ssl.sym +EXTRA_DIST += empty.c CLEANFILES = libssl_la_objects.mk @@ -16,24 +41,40 @@ EXTRA_libssl_la_DEPENDENCIES = libssl_la_objects.mk libssl_la_objects.mk: Makefile @echo "libssl_la_objects= $(libssl_la_OBJECTS)" \ - | sed 's/ */ $$\(abs_top_builddir\)\/ssl\//g' \ + | sed 's/ */ $$\(top_builddir\)\/ssl\//g' \ > libssl_la_objects.mk +.PHONY: remove_bs_objects +remove_bs_objects: libssl.la + -$(AR) dv $(abs_top_builddir)/ssl/.libs/libssl.a \ + bs_ber.o bs_cbb.o bs_cbs.o + +libssl_la_CPPFLAGS = -I$(top_srcdir)/ssl/hidden ${AM_CPPFLAGS} libssl_la_LDFLAGS = -version-info @LIBSSL_VERSION@ -no-undefined -export-symbols $(top_srcdir)/ssl/ssl.sym libssl_la_LIBADD = $(abs_top_builddir)/crypto/libcrypto.la $(PLATFORM_LDADD) +libssl_la_LIBADD += $(libcompat_la_objects) +libssl_la_LIBADD += $(libcompatnoopt_la_objects) +libssl_la_LIBADD += libbs.la + +libbs_la_SOURCES = bs_ber.c +libbs_la_SOURCES += bs_cbb.c +libbs_la_SOURCES += bs_cbs.c +noinst_HEADERS = bytestring.h + +noinst_HEADERS += hidden/ssl_namespace.h +noinst_HEADERS += hidden/openssl/srtp.h +noinst_HEADERS += hidden/openssl/tls1.h +noinst_HEADERS += hidden/openssl/ssl.h libssl_la_SOURCES = bio_ssl.c -libssl_la_SOURCES += bs_ber.c -libssl_la_SOURCES += bs_cbb.c -libssl_la_SOURCES += bs_cbs.c libssl_la_SOURCES += d1_both.c libssl_la_SOURCES += d1_lib.c libssl_la_SOURCES += d1_pkt.c libssl_la_SOURCES += d1_srtp.c +libssl_la_SOURCES += dtls12_handshake_msg.c libssl_la_SOURCES += pqueue.c libssl_la_SOURCES += s3_cbc.c libssl_la_SOURCES += s3_lib.c -libssl_la_SOURCES += ssl_algs.c libssl_la_SOURCES += ssl_asn1.c libssl_la_SOURCES += ssl_both.c libssl_la_SOURCES += ssl_cert.c @@ -45,9 +86,9 @@ libssl_la_SOURCES += ssl_init.c libssl_la_SOURCES += ssl_kex.c libssl_la_SOURCES += ssl_lib.c libssl_la_SOURCES += ssl_methods.c -libssl_la_SOURCES += ssl_packet.c libssl_la_SOURCES += ssl_pkt.c libssl_la_SOURCES += ssl_rsa.c +libssl_la_SOURCES += ssl_seclevel.c libssl_la_SOURCES += ssl_sess.c libssl_la_SOURCES += ssl_sigalgs.c libssl_la_SOURCES += ssl_srvr.c @@ -58,30 +99,90 @@ libssl_la_SOURCES += ssl_txt.c libssl_la_SOURCES += ssl_versions.c libssl_la_SOURCES += t1_enc.c libssl_la_SOURCES += t1_lib.c +libssl_la_SOURCES += tls_buffer.c libssl_la_SOURCES += tls_content.c +libssl_la_SOURCES += tls_key_share.c +libssl_la_SOURCES += tls_lib.c libssl_la_SOURCES += tls12_key_schedule.c libssl_la_SOURCES += tls12_lib.c libssl_la_SOURCES += tls12_record_layer.c -libssl_la_SOURCES += tls13_buffer.c libssl_la_SOURCES += tls13_client.c libssl_la_SOURCES += tls13_error.c libssl_la_SOURCES += tls13_handshake.c libssl_la_SOURCES += tls13_handshake_msg.c libssl_la_SOURCES += tls13_key_schedule.c -libssl_la_SOURCES += tls13_key_share.c libssl_la_SOURCES += tls13_legacy.c libssl_la_SOURCES += tls13_lib.c +libssl_la_SOURCES += tls13_quic.c libssl_la_SOURCES += tls13_record.c libssl_la_SOURCES += tls13_record_layer.c libssl_la_SOURCES += tls13_server.c -noinst_HEADERS = bytestring.h noinst_HEADERS += srtp.h -noinst_HEADERS += dtls_locl.h -noinst_HEADERS += ssl_locl.h +noinst_HEADERS += dtls12_internal.h +noinst_HEADERS += dtls_local.h +noinst_HEADERS += ssl_local.h noinst_HEADERS += ssl_sigalgs.h noinst_HEADERS += ssl_tlsext.h noinst_HEADERS += tls_content.h +noinst_HEADERS += tls_internal.h +noinst_HEADERS += tls12_internal.h noinst_HEADERS += tls13_internal.h noinst_HEADERS += tls13_handshake.h noinst_HEADERS += tls13_record.h + +# arch +if HOST_AARCH64 +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/aarch64/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/aarch64/crypto_arch.h + +if HOST_ARM +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/arm/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/arm/crypto_arch.h + +if HOST_I386 +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/i386/crypto_arch.h + +if HOST_LOONGARCH64 +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/loongarch64/crypto_arch.h + +if HOST_MIPS +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/mips/crypto_arch.h + +if HOST_MIPS64 +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips64/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/mips64/crypto_arch.h + +if HOST_POWERPC +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/powerpc/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/powerpc/crypto_arch.h + +if HOST_POWERPC64 +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/powerpc64/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/powerpc64/crypto_arch.h + +if HOST_RISCV64 +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/riscv64/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/riscv64/crypto_arch.h + +if HOST_SPARC64 +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/sparc64/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/sparc64/crypto_arch.h + +if HOST_X86_64 +libssl_la_CPPFLAGS += -I$(top_srcdir)/crypto/arch/amd64/ +endif +noinst_HEADERS += $(top_srcdir)/crypto/arch/amd64/crypto_arch.h diff --git a/tap-driver.sh b/tap-driver.sh deleted file mode 100755 index 0ca4903755..0000000000 --- a/tap-driver.sh +++ /dev/null @@ -1,651 +0,0 @@ -#! /bin/sh -# Copyright (C) 2011-2020 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -scriptversion=2013-12-23.17; # UTC - -# Make unconditional expansion of undefined variables an error. This -# helps a lot in preventing typo-related bugs. -set -u - -me=tap-driver.sh - -fatal () -{ - echo "$me: fatal: $*" >&2 - exit 1 -} - -usage_error () -{ - echo "$me: $*" >&2 - print_usage >&2 - exit 2 -} - -print_usage () -{ - cat < - # - trap : 1 3 2 13 15 - if test $merge -gt 0; then - exec 2>&1 - else - exec 2>&3 - fi - "$@" - echo $? - ) | LC_ALL=C ${AM_TAP_AWK-awk} \ - -v me="$me" \ - -v test_script_name="$test_name" \ - -v log_file="$log_file" \ - -v trs_file="$trs_file" \ - -v expect_failure="$expect_failure" \ - -v merge="$merge" \ - -v ignore_exit="$ignore_exit" \ - -v comments="$comments" \ - -v diag_string="$diag_string" \ -' -# TODO: the usages of "cat >&3" below could be optimized when using -# GNU awk, and/on on systems that supports /dev/fd/. - -# Implementation note: in what follows, `result_obj` will be an -# associative array that (partly) simulates a TAP result object -# from the `TAP::Parser` perl module. - -## ----------- ## -## FUNCTIONS ## -## ----------- ## - -function fatal(msg) -{ - print me ": " msg | "cat >&2" - exit 1 -} - -function abort(where) -{ - fatal("internal error " where) -} - -# Convert a boolean to a "yes"/"no" string. -function yn(bool) -{ - return bool ? "yes" : "no"; -} - -function add_test_result(result) -{ - if (!test_results_index) - test_results_index = 0 - test_results_list[test_results_index] = result - test_results_index += 1 - test_results_seen[result] = 1; -} - -# Whether the test script should be re-run by "make recheck". -function must_recheck() -{ - for (k in test_results_seen) - if (k != "XFAIL" && k != "PASS" && k != "SKIP") - return 1 - return 0 -} - -# Whether the content of the log file associated to this test should -# be copied into the "global" test-suite.log. -function copy_in_global_log() -{ - for (k in test_results_seen) - if (k != "PASS") - return 1 - return 0 -} - -function get_global_test_result() -{ - if ("ERROR" in test_results_seen) - return "ERROR" - if ("FAIL" in test_results_seen || "XPASS" in test_results_seen) - return "FAIL" - all_skipped = 1 - for (k in test_results_seen) - if (k != "SKIP") - all_skipped = 0 - if (all_skipped) - return "SKIP" - return "PASS"; -} - -function stringify_result_obj(result_obj) -{ - if (result_obj["is_unplanned"] || result_obj["number"] != testno) - return "ERROR" - - if (plan_seen == LATE_PLAN) - return "ERROR" - - if (result_obj["directive"] == "TODO") - return result_obj["is_ok"] ? "XPASS" : "XFAIL" - - if (result_obj["directive"] == "SKIP") - return result_obj["is_ok"] ? "SKIP" : COOKED_FAIL; - - if (length(result_obj["directive"])) - abort("in function stringify_result_obj()") - - return result_obj["is_ok"] ? COOKED_PASS : COOKED_FAIL -} - -function decorate_result(result) -{ - color_name = color_for_result[result] - if (color_name) - return color_map[color_name] "" result "" color_map["std"] - # If we are not using colorized output, or if we do not know how - # to colorize the given result, we should return it unchanged. - return result -} - -function report(result, details) -{ - if (result ~ /^(X?(PASS|FAIL)|SKIP|ERROR)/) - { - msg = ": " test_script_name - add_test_result(result) - } - else if (result == "#") - { - msg = " " test_script_name ":" - } - else - { - abort("in function report()") - } - if (length(details)) - msg = msg " " details - # Output on console might be colorized. - print decorate_result(result) msg - # Log the result in the log file too, to help debugging (this is - # especially true when said result is a TAP error or "Bail out!"). - print result msg | "cat >&3"; -} - -function testsuite_error(error_message) -{ - report("ERROR", "- " error_message) -} - -function handle_tap_result() -{ - details = result_obj["number"]; - if (length(result_obj["description"])) - details = details " " result_obj["description"] - - if (plan_seen == LATE_PLAN) - { - details = details " # AFTER LATE PLAN"; - } - else if (result_obj["is_unplanned"]) - { - details = details " # UNPLANNED"; - } - else if (result_obj["number"] != testno) - { - details = sprintf("%s # OUT-OF-ORDER (expecting %d)", - details, testno); - } - else if (result_obj["directive"]) - { - details = details " # " result_obj["directive"]; - if (length(result_obj["explanation"])) - details = details " " result_obj["explanation"] - } - - report(stringify_result_obj(result_obj), details) -} - -# `skip_reason` should be empty whenever planned > 0. -function handle_tap_plan(planned, skip_reason) -{ - planned += 0 # Avoid getting confused if, say, `planned` is "00" - if (length(skip_reason) && planned > 0) - abort("in function handle_tap_plan()") - if (plan_seen) - { - # Error, only one plan per stream is acceptable. - testsuite_error("multiple test plans") - return; - } - planned_tests = planned - # The TAP plan can come before or after *all* the TAP results; we speak - # respectively of an "early" or a "late" plan. If we see the plan line - # after at least one TAP result has been seen, assume we have a late - # plan; in this case, any further test result seen after the plan will - # be flagged as an error. - plan_seen = (testno >= 1 ? LATE_PLAN : EARLY_PLAN) - # If testno > 0, we have an error ("too many tests run") that will be - # automatically dealt with later, so do not worry about it here. If - # $plan_seen is true, we have an error due to a repeated plan, and that - # has already been dealt with above. Otherwise, we have a valid "plan - # with SKIP" specification, and should report it as a particular kind - # of SKIP result. - if (planned == 0 && testno == 0) - { - if (length(skip_reason)) - skip_reason = "- " skip_reason; - report("SKIP", skip_reason); - } -} - -function extract_tap_comment(line) -{ - if (index(line, diag_string) == 1) - { - # Strip leading `diag_string` from `line`. - line = substr(line, length(diag_string) + 1) - # And strip any leading and trailing whitespace left. - sub("^[ \t]*", "", line) - sub("[ \t]*$", "", line) - # Return what is left (if any). - return line; - } - return ""; -} - -# When this function is called, we know that line is a TAP result line, -# so that it matches the (perl) RE "^(not )?ok\b". -function setup_result_obj(line) -{ - # Get the result, and remove it from the line. - result_obj["is_ok"] = (substr(line, 1, 2) == "ok" ? 1 : 0) - sub("^(not )?ok[ \t]*", "", line) - - # If the result has an explicit number, get it and strip it; otherwise, - # automatically assign the next test number to it. - if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/) - { - match(line, "^[0-9]+") - # The final `+ 0` is to normalize numbers with leading zeros. - result_obj["number"] = substr(line, 1, RLENGTH) + 0 - line = substr(line, RLENGTH + 1) - } - else - { - result_obj["number"] = testno - } - - if (plan_seen == LATE_PLAN) - # No further test results are acceptable after a "late" TAP plan - # has been seen. - result_obj["is_unplanned"] = 1 - else if (plan_seen && testno > planned_tests) - result_obj["is_unplanned"] = 1 - else - result_obj["is_unplanned"] = 0 - - # Strip trailing and leading whitespace. - sub("^[ \t]*", "", line) - sub("[ \t]*$", "", line) - - # This will have to be corrected if we have a "TODO"/"SKIP" directive. - result_obj["description"] = line - result_obj["directive"] = "" - result_obj["explanation"] = "" - - if (index(line, "#") == 0) - return # No possible directive, nothing more to do. - - # Directives are case-insensitive. - rx = "[ \t]*#[ \t]*([tT][oO][dD][oO]|[sS][kK][iI][pP])[ \t]*" - - # See whether we have the directive, and if yes, where. - pos = match(line, rx "$") - if (!pos) - pos = match(line, rx "[^a-zA-Z0-9_]") - - # If there was no TAP directive, we have nothing more to do. - if (!pos) - return - - # Let`s now see if the TAP directive has been escaped. For example: - # escaped: ok \# SKIP - # not escaped: ok \\# SKIP - # escaped: ok \\\\\# SKIP - # not escaped: ok \ # SKIP - if (substr(line, pos, 1) == "#") - { - bslash_count = 0 - for (i = pos; i > 1 && substr(line, i - 1, 1) == "\\"; i--) - bslash_count += 1 - if (bslash_count % 2) - return # Directive was escaped. - } - - # Strip the directive and its explanation (if any) from the test - # description. - result_obj["description"] = substr(line, 1, pos - 1) - # Now remove the test description from the line, that has been dealt - # with already. - line = substr(line, pos) - # Strip the directive, and save its value (normalized to upper case). - sub("^[ \t]*#[ \t]*", "", line) - result_obj["directive"] = toupper(substr(line, 1, 4)) - line = substr(line, 5) - # Now get the explanation for the directive (if any), with leading - # and trailing whitespace removed. - sub("^[ \t]*", "", line) - sub("[ \t]*$", "", line) - result_obj["explanation"] = line -} - -function get_test_exit_message(status) -{ - if (status == 0) - return "" - if (status !~ /^[1-9][0-9]*$/) - abort("getting exit status") - if (status < 127) - exit_details = "" - else if (status == 127) - exit_details = " (command not found?)" - else if (status >= 128 && status <= 255) - exit_details = sprintf(" (terminated by signal %d?)", status - 128) - else if (status > 256 && status <= 384) - # We used to report an "abnormal termination" here, but some Korn - # shells, when a child process die due to signal number n, can leave - # in $? an exit status of 256+n instead of the more standard 128+n. - # Apparently, both behaviours are allowed by POSIX (2008), so be - # prepared to handle them both. See also Austing Group report ID - # 0000051 - exit_details = sprintf(" (terminated by signal %d?)", status - 256) - else - # Never seen in practice. - exit_details = " (abnormal termination)" - return sprintf("exited with status %d%s", status, exit_details) -} - -function write_test_results() -{ - print ":global-test-result: " get_global_test_result() > trs_file - print ":recheck: " yn(must_recheck()) > trs_file - print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file - for (i = 0; i < test_results_index; i += 1) - print ":test-result: " test_results_list[i] > trs_file - close(trs_file); -} - -BEGIN { - -## ------- ## -## SETUP ## -## ------- ## - -'"$init_colors"' - -# Properly initialized once the TAP plan is seen. -planned_tests = 0 - -COOKED_PASS = expect_failure ? "XPASS": "PASS"; -COOKED_FAIL = expect_failure ? "XFAIL": "FAIL"; - -# Enumeration-like constants to remember which kind of plan (if any) -# has been seen. It is important that NO_PLAN evaluates "false" as -# a boolean. -NO_PLAN = 0 -EARLY_PLAN = 1 -LATE_PLAN = 2 - -testno = 0 # Number of test results seen so far. -bailed_out = 0 # Whether a "Bail out!" directive has been seen. - -# Whether the TAP plan has been seen or not, and if yes, which kind -# it is ("early" is seen before any test result, "late" otherwise). -plan_seen = NO_PLAN - -## --------- ## -## PARSING ## -## --------- ## - -is_first_read = 1 - -while (1) - { - # Involutions required so that we are able to read the exit status - # from the last input line. - st = getline - if (st < 0) # I/O error. - fatal("I/O error while reading from input stream") - else if (st == 0) # End-of-input - { - if (is_first_read) - abort("in input loop: only one input line") - break - } - if (is_first_read) - { - is_first_read = 0 - nextline = $0 - continue - } - else - { - curline = nextline - nextline = $0 - $0 = curline - } - # Copy any input line verbatim into the log file. - print | "cat >&3" - # Parsing of TAP input should stop after a "Bail out!" directive. - if (bailed_out) - continue - - # TAP test result. - if ($0 ~ /^(not )?ok$/ || $0 ~ /^(not )?ok[^a-zA-Z0-9_]/) - { - testno += 1 - setup_result_obj($0) - handle_tap_result() - } - # TAP plan (normal or "SKIP" without explanation). - else if ($0 ~ /^1\.\.[0-9]+[ \t]*$/) - { - # The next two lines will put the number of planned tests in $0. - sub("^1\\.\\.", "") - sub("[^0-9]*$", "") - handle_tap_plan($0, "") - continue - } - # TAP "SKIP" plan, with an explanation. - else if ($0 ~ /^1\.\.0+[ \t]*#/) - { - # The next lines will put the skip explanation in $0, stripping - # any leading and trailing whitespace. This is a little more - # tricky in truth, since we want to also strip a potential leading - # "SKIP" string from the message. - sub("^[^#]*#[ \t]*(SKIP[: \t][ \t]*)?", "") - sub("[ \t]*$", ""); - handle_tap_plan(0, $0) - } - # "Bail out!" magic. - # Older versions of prove and TAP::Harness (e.g., 3.17) did not - # recognize a "Bail out!" directive when preceded by leading - # whitespace, but more modern versions (e.g., 3.23) do. So we - # emulate the latter, "more modern" behaviour. - else if ($0 ~ /^[ \t]*Bail out!/) - { - bailed_out = 1 - # Get the bailout message (if any), with leading and trailing - # whitespace stripped. The message remains stored in `$0`. - sub("^[ \t]*Bail out![ \t]*", ""); - sub("[ \t]*$", ""); - # Format the error message for the - bailout_message = "Bail out!" - if (length($0)) - bailout_message = bailout_message " " $0 - testsuite_error(bailout_message) - } - # Maybe we have too look for dianogtic comments too. - else if (comments != 0) - { - comment = extract_tap_comment($0); - if (length(comment)) - report("#", comment); - } - } - -## -------- ## -## FINISH ## -## -------- ## - -# A "Bail out!" directive should cause us to ignore any following TAP -# error, as well as a non-zero exit status from the TAP producer. -if (!bailed_out) - { - if (!plan_seen) - { - testsuite_error("missing test plan") - } - else if (planned_tests != testno) - { - bad_amount = testno > planned_tests ? "many" : "few" - testsuite_error(sprintf("too %s tests run (expected %d, got %d)", - bad_amount, planned_tests, testno)) - } - if (!ignore_exit) - { - # Fetch exit status from the last line. - exit_message = get_test_exit_message(nextline) - if (exit_message) - testsuite_error(exit_message) - } - } - -write_test_results() - -exit 0 - -} # End of "BEGIN" block. -' - -# TODO: document that we consume the file descriptor 3 :-( -} 3>"$log_file" - -test $? -eq 0 || fatal "I/O or internal error" - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index efe5126076..ac9c5baeea 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,315 +1,646 @@ +# +# Copyright (c) 2015 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +add_definitions(-DLIBRESSL_CRYPTO_INTERNAL) + include_directories( . - ../crypto/modes + ../crypto/ ../crypto/asn1 + ../crypto/bio + ../crypto/bn + ../crypto/bytestring + ../crypto/curve25519 + ../crypto/ec + ../crypto/evp + ../crypto/mlkem + ../crypto/modes + ../crypto/sha ../crypto/x509 ../ssl - ../tls ../apps/openssl ../apps/openssl/compat + ../include + ${CMAKE_BINARY_DIR}/include ../include/compat ) -add_definitions(-D_PATH_SSL_CA_FILE=\"${CMAKE_CURRENT_SOURCE_DIR}/../apps/openssl/cert.pem\") +if(HOST_AARCH64) + include_directories(../crypto/arch/aarch64/) +elseif(HOST_ARM) + include_directories(../crypto/arch/arm/) +elseif(HOST_I386) + include_directories(../crypto/arch/i386/) +elseif(HOST_LOONGARCH64) + include_directories(../crypto/arch/loongarch64) +elseif(HOST_MIPS64) + include_directories(../crypto/arch/mips64) +elseif(HOST_MIPS) + include_directories(../crypto/arch/mips) +elseif(HOST_POWERPC) + include_directories(../crypto/arch/powerpc) +elseif(HOST_POWERPC64) + include_directories(../crypto/arch/powerpc64) +elseif(HOST_RISCV64) + include_directories(../crypto/arch/riscv64) +elseif(HOST_SPARC64) + include_directories(../crypto/arch/sparc64) +elseif(HOST_X86_64) + include_directories(../crypto/arch/amd64) +endif() + +add_definitions(-D_PATH_SSL_CA_FILE=\"${CMAKE_CURRENT_SOURCE_DIR}/../cert.pem\") file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} TEST_SOURCE_DIR) +function(prepare_emscripten_test_target TARGET_NAME) + if(EMSCRIPTEN) + set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS + "-sALLOW_MEMORY_GROWTH --preload-file ${TEST_SOURCE_DIR} ") + endif() +endfunction() + +function(add_platform_test TEST_NAME) + if (EMSCRIPTEN) + add_test(NAME ${TEST_NAME} COMMAND node ${ARGN}) + else() + add_test(NAME ${TEST_NAME} COMMAND ${ARGN}) + endif() +endfunction() + +# XXX - should probably be in their own static lib +set(TEST_HELPER_SRC test.c test_util.c) +if(WIN32) + set(TEST_HELPER_SRC ${TEST_HELPER_SRC} compat/mkstemp.c) +endif() + # aeadtest add_executable(aeadtest aeadtest.c) -target_link_libraries(aeadtest ${OPENSSL_LIBS}) -add_test(aeadtest aeadtest ${CMAKE_CURRENT_SOURCE_DIR}/aeadtests.txt) +target_link_libraries(aeadtest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(aeadtest) +if(NOT WIN32) + add_test(NAME aeadtest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/aeadtest.sh) + set_tests_properties(aeadtest PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") +else() + add_platform_test(aeadtest aeadtest aead ${CMAKE_CURRENT_SOURCE_DIR}/aeadtests.txt) +endif() + +# aes_test +add_executable(aes_test aes_test.c) +target_link_libraries(aes_test ${OPENSSL_TEST_LIBS}) +add_platform_test(aes_test aes_test) # aes_wrap add_executable(aes_wrap aes_wrap.c) -target_link_libraries(aes_wrap ${OPENSSL_LIBS}) -add_test(aes_wrap aes_wrap) +target_link_libraries(aes_wrap ${OPENSSL_TEST_LIBS}) +add_platform_test(aes_wrap aes_wrap) + +# apitest +add_executable(apitest apitest.c) +target_link_libraries(apitest ${OPENSSL_TEST_LIBS}) +set_source_files_properties(apitest.c PROPERTIES COMPILE_FLAGS + -DCERTSDIR=\\"${CMAKE_CURRENT_SOURCE_DIR}\\") +prepare_emscripten_test_target(apitest) +add_platform_test(apitest apitest) # arc4randomforktest # Windows/mingw does not have fork, but Cygwin does. -if(NOT (WIN32 OR (CMAKE_SYSTEM_NAME MATCHES "MINGW"))) +# Emscripten does not have fork. +if(NOT (WIN32 OR (CMAKE_SYSTEM_NAME MATCHES "MINGW") OR EMSCRIPTEN)) add_executable(arc4randomforktest arc4randomforktest.c) - target_link_libraries(arc4randomforktest ${OPENSSL_LIBS}) + target_link_libraries(arc4randomforktest ${OPENSSL_TEST_LIBS}) add_test(arc4randomforktest ${CMAKE_CURRENT_SOURCE_DIR}/arc4randomforktest.sh) endif() +# asn1api +add_executable(asn1api asn1api.c) +target_link_libraries(asn1api ${OPENSSL_TEST_LIBS}) +add_platform_test(asn1api asn1api) + +# asn1basic +add_executable(asn1basic asn1basic.c) +target_link_libraries(asn1basic ${OPENSSL_TEST_LIBS}) +add_platform_test(asn1basic asn1basic) + +# asn1complex +add_executable(asn1complex asn1complex.c) +target_link_libraries(asn1complex ${OPENSSL_TEST_LIBS}) +add_platform_test(asn1complex asn1complex) + # asn1evp add_executable(asn1evp asn1evp.c) -target_link_libraries(asn1evp ${OPENSSL_LIBS}) -add_test(asn1evp asn1evp) +target_link_libraries(asn1evp ${OPENSSL_TEST_LIBS}) +add_platform_test(asn1evp asn1evp) + +# asn1object +add_executable(asn1object asn1object.c) +target_link_libraries(asn1object ${OPENSSL_TEST_LIBS}) +add_platform_test(asn1object asn1object) + +# asn1oct +add_executable(asn1oct asn1oct.c) +target_link_libraries(asn1oct ${OPENSSL_TEST_LIBS}) +add_platform_test(asn1oct asn1oct) + +# asn1string_copy +add_executable(asn1string_copy asn1string_copy.c) +target_link_libraries(asn1string_copy ${OPENSSL_TEST_LIBS}) +add_platform_test(asn1string_copy asn1string_copy) # asn1test add_executable(asn1test asn1test.c) -target_link_libraries(asn1test ${OPENSSL_LIBS}) -add_test(asn1test asn1test) +target_link_libraries(asn1test ${OPENSSL_TEST_LIBS}) +add_platform_test(asn1test asn1test) # asn1time add_executable(asn1time asn1time.c) -target_link_libraries(asn1time ${OPENSSL_LIBS}) -add_test(asn1time asn1time) +target_link_libraries(asn1time ${OPENSSL_TEST_LIBS}) +add_platform_test(asn1time asn1time) +if(SMALL_TIME_T) + set_property(TEST asn1time PROPERTY WILL_FAIL TRUE) +endif() -# base64test -add_executable(base64test base64test.c) -target_link_libraries(base64test ${OPENSSL_LIBS}) -add_test(base64test base64test) +# asn1x509 +add_executable(asn1x509 asn1x509.c) +target_link_libraries(asn1x509 ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(asn1x509) +add_platform_test(asn1x509 asn1x509) -# bftest -add_executable(bftest bftest.c) -target_link_libraries(bftest ${OPENSSL_LIBS}) -add_test(bftest bftest) +# asn1_string_to_utf8 +add_executable(asn1_string_to_utf8 asn1_string_to_utf8.c) +target_link_libraries(asn1_string_to_utf8 ${OPENSSL_TEST_LIBS}) +add_platform_test(asn1_string_to_utf8 asn1_string_to_utf8) -# biotest -# the BIO tests rely on resolver results that are OS and environment-specific +# base64test +add_executable(base64test base64test.c) +target_link_libraries(base64test ${OPENSSL_TEST_LIBS}) +add_platform_test(base64test base64test) + +# bf_test +add_executable(bf_test bf_test.c) +target_link_libraries(bf_test ${OPENSSL_TEST_LIBS}) +add_platform_test(bf_test bf_test) + +# bio_asn1 +add_executable(bio_asn1 bio_asn1.c) +target_link_libraries(bio_asn1 ${OPENSSL_TEST_LIBS}) +add_platform_test(bio_asn1 bio_asn1) + +# bio_chain +add_executable(bio_chain bio_chain.c) +target_link_libraries(bio_chain ${OPENSSL_TEST_LIBS}) +add_platform_test(bio_chain bio_chain) + +# bio_dump +add_executable(bio_dump bio_dump.c) +target_link_libraries(bio_dump ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(bio_dump) +add_platform_test(bio_dump bio_dump) + +# bio_host +# this test relies on resolver results that are OS and environment-specific if(ENABLE_EXTRATESTS) - add_executable(biotest biotest.c) - target_link_libraries(biotest ${OPENSSL_LIBS}) - add_test(biotest biotest) + add_executable(bio_host bio_host.c) + target_link_libraries(bio_host ${OPENSSL_TEST_LIBS}) + add_platform_test(bio_host bio_host) endif() -# bnaddsub -add_executable(bnaddsub bnaddsub.c) -target_link_libraries(bnaddsub ${OPENSSL_LIBS}) -add_test(bnaddsub bnaddsub) +# bio_mem +add_executable(bio_mem bio_mem.c) +target_link_libraries(bio_mem ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(bio_mem) +add_platform_test(bio_mem bio_mem) + +# bn_add_sub +add_executable(bn_add_sub bn_add_sub.c) +target_link_libraries(bn_add_sub ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_add_sub bn_add_sub) + +# bn_bits +add_executable(bn_bits bn_bits.c) +target_link_libraries(bn_bits ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_bits bn_bits) + +# bn_cmp +add_executable(bn_cmp bn_cmp.c) +target_link_libraries(bn_cmp ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_cmp bn_cmp) + +# bn_convert +add_executable(bn_convert bn_convert.c) +target_link_libraries(bn_convert ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_convert bn_convert) + +# bn_ffdh +add_executable(bn_ffdh bn_ffdh.c) +target_link_libraries(bn_ffdh ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_ffdh bn_ffdh) + +# bn_gcd +add_executable(bn_gcd bn_gcd.c) +target_link_libraries(bn_gcd ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_gcd bn_gcd) + +# bn_general is a benchmark + +# bn_isqrt +add_executable(bn_isqrt bn_isqrt.c) +target_link_libraries(bn_isqrt ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(bn_isqrt) +add_platform_test(bn_isqrt bn_isqrt) + +# bn_mod_exp +add_executable(bn_mod_exp bn_mod_exp.c) +set_source_files_properties(bn_mod_exp.c PROPERTIES COMPILE_FLAGS + -ULIBRESSL_INTERNAL) +target_link_libraries(bn_mod_exp ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_mod_exp bn_mod_exp) + +# bn_mod_inverse +add_executable(bn_mod_inverse bn_mod_inverse.c) +target_link_libraries(bn_mod_inverse ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_mod_inverse bn_mod_inverse) + +# bn_mod_sqrt +add_executable(bn_mod_sqrt bn_mod_sqrt.c) +target_link_libraries(bn_mod_sqrt ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_mod_sqrt bn_mod_sqrt) + +# bn_mont +add_executable(bn_mont bn_mont.c) +target_link_libraries(bn_mont ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_mont bn_mont) + +# bn_mul_div is mostly benchmark code with non-standard timing dependencies, +# while the non-benchmark test coverage is not worth the cross-platform fallout. +# # bn_mul_div +# if(NOT (WIN32 OR EMSCRIPTEN OR SOLARIS)) +# add_executable(bn_mul_div bn_mul_div.c) +# target_link_libraries(bn_mul_div ${OPENSSL_TEST_LIBS}) +# add_platform_test(bn_mul_div bn_mul_div) +# endif() + +# bn_primes +add_executable(bn_primes bn_primes.c) +target_link_libraries(bn_primes ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(bn_primes) +add_platform_test(bn_primes bn_primes) + +# bn_print +add_executable(bn_print bn_print.c) +target_link_libraries(bn_print ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_print bn_print) + +# bn_shift +add_executable(bn_shift bn_shift.c) +target_link_libraries(bn_shift ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(bn_shift) +add_platform_test(bn_shift bn_shift) + +# bn_test +add_executable(bn_test bn_test.c) +set_source_files_properties(bn_test.c PROPERTIES COMPILE_FLAGS + -ULIBRESSL_INTERNAL) +target_link_libraries(bn_test ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_test bn_test) -# bn_rand_interval -if(NOT BUILD_SHARED_LIBS) - add_executable(bn_rand_interval bn_rand_interval.c) - target_link_libraries(bn_rand_interval ${OPENSSL_LIBS}) - add_test(bn_rand_interval bn_rand_interval) -endif() +# bn_to_string +add_executable(bn_to_string bn_to_string.c) +target_link_libraries(bn_to_string ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_to_string bn_to_string) -# bntest -if(NOT BUILD_SHARED_LIBS) - add_executable(bntest bntest.c) - set_source_files_properties(bntest.c PROPERTIES COMPILE_FLAGS - -ULIBRESSL_INTERNAL) - target_link_libraries(bntest ${OPENSSL_LIBS}) - add_test(bntest bntest) -endif() +# bn_unit +add_executable(bn_unit bn_unit.c) +target_link_libraries(bn_unit ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(bn_unit) +add_platform_test(bn_unit bn_unit) -# bn_to_string -if(NOT BUILD_SHARED_LIBS) - add_executable(bn_to_string bn_to_string.c) - target_link_libraries(bn_to_string ${OPENSSL_LIBS}) - add_test(bn_to_string bn_to_string) -endif() +# bn_word +add_executable(bn_word bn_word.c) +target_link_libraries(bn_word ${OPENSSL_TEST_LIBS}) +add_platform_test(bn_word bn_word) # buffertest -if(NOT BUILD_SHARED_LIBS) - add_executable(buffertest buffertest.c) - target_link_libraries(buffertest ${OPENSSL_LIBS}) - add_test(buffertest buffertest) -endif() +add_executable(buffertest buffertest.c) +target_link_libraries(buffertest ${OPENSSL_TEST_LIBS}) +add_platform_test(buffertest buffertest) # bytestringtest -if(NOT BUILD_SHARED_LIBS) - add_executable(bytestringtest bytestringtest.c) - target_link_libraries(bytestringtest ${OPENSSL_LIBS}) - add_test(bytestringtest bytestringtest) +add_executable(bytestringtest bytestringtest.c) +target_link_libraries(bytestringtest ${OPENSSL_TEST_LIBS}) +add_platform_test(bytestringtest bytestringtest) + +# x509_callbacks +add_executable(callback callback.c) +target_link_libraries(callback ${OPENSSL_TEST_LIBS}) +add_executable(callbackfailures callbackfailures.c) +target_link_libraries(callbackfailures ${OPENSSL_TEST_LIBS}) +add_executable(expirecallback expirecallback.c) +target_link_libraries(expirecallback ${OPENSSL_TEST_LIBS}) +add_dependencies(callback openssl) +if(NOT WIN32 AND NOT EMSCRIPTEN AND PERL_EXECUTABLE) + add_test(NAME x509_callbacks COMMAND + ${CMAKE_CURRENT_SOURCE_DIR}/x509_callbacks.sh + $ + $ + $ + $) + set_tests_properties(x509_callbacks PROPERTIES + ENVIRONMENT "srcdir=${TEST_SOURCE_DIR};PERL=${PERL_EXECUTABLE}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + # These tests use the same certificate corpus as x509_verify and can + # exceed the range of a 32-bit time_t. + if(SMALL_TIME_T) + set_property(TEST x509_callbacks PROPERTY WILL_FAIL TRUE) + endif() endif() # casttest add_executable(casttest casttest.c) -target_link_libraries(casttest ${OPENSSL_LIBS}) -add_test(casttest casttest) +target_link_libraries(casttest ${OPENSSL_TEST_LIBS}) +add_platform_test(casttest casttest) # chachatest add_executable(chachatest chachatest.c) -target_link_libraries(chachatest ${OPENSSL_LIBS}) -add_test(chachatest chachatest) +target_link_libraries(chachatest ${OPENSSL_TEST_LIBS}) +add_platform_test(chachatest chachatest) # cipher_list -if(NOT BUILD_SHARED_LIBS) - add_executable(cipher_list cipher_list.c) - target_link_libraries(cipher_list ${OPENSSL_LIBS}) - add_test(cipher_list cipher_list) -endif() +add_executable(cipher_list cipher_list.c) +target_link_libraries(cipher_list ${OPENSSL_TEST_LIBS}) +add_platform_test(cipher_list cipher_list) -if(NOT BUILD_SHARED_LIBS) - # cipherstest - add_executable(cipherstest cipherstest.c) - target_link_libraries(cipherstest ${OPENSSL_LIBS}) - add_test(cipherstest cipherstest) -endif() +# cipherstest +add_executable(cipherstest cipherstest.c) +target_link_libraries(cipherstest ${OPENSSL_TEST_LIBS}) +add_platform_test(cipherstest cipherstest) -# clienttest +## clienttest add_executable(clienttest clienttest.c) -target_link_libraries(clienttest ${OPENSSL_LIBS}) -add_test(clienttest clienttest) +target_link_libraries(clienttest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(clienttest) +add_platform_test(clienttest clienttest) # cmstest add_executable(cmstest cmstest.c) -target_link_libraries(cmstest ${OPENSSL_LIBS}) -add_test(cmstest cmstest) +target_link_libraries(cmstest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(cmstest) +add_platform_test(cmstest cmstest) # configtest add_executable(configtest configtest.c) -target_link_libraries(configtest ${LIBTLS_LIBS}) -add_test(configtest configtest) +target_link_libraries(configtest ${LIBTLS_TEST_LIBS}) +add_platform_test(configtest configtest) # constraints -if(NOT BUILD_SHARED_LIBS) - add_executable(constraints constraints.c) - target_link_libraries(constraints ${OPENSSL_LIBS}) - add_test(constraints constraints) -endif() - -# cts128test -add_executable(cts128test cts128test.c) -target_link_libraries(cts128test ${OPENSSL_LIBS}) -add_test(cts128test cts128test) +add_executable(constraints constraints.c) +target_link_libraries(constraints ${OPENSSL_TEST_LIBS}) +add_platform_test(constraints constraints) + +# crypto_test +add_executable(crypto_test crypto_test.c) +target_link_libraries(crypto_test ${OPENSSL_TEST_LIBS}) +add_platform_test(crypto_test crypto_test) + +# cttest +add_executable(cttest cttest.c) +target_link_libraries(cttest ${OPENSSL_TEST_LIBS}) +set_source_files_properties(cttest.c PROPERTIES COMPILE_FLAGS + -DCTPATH=\\"${CMAKE_CURRENT_SOURCE_DIR}\\") +prepare_emscripten_test_target(cttest) +add_platform_test(cttest cttest) # destest add_executable(destest destest.c) -target_link_libraries(destest ${OPENSSL_LIBS}) -add_test(destest destest) +target_link_libraries(destest ${OPENSSL_TEST_LIBS}) +add_platform_test(destest destest) # dhtest add_executable(dhtest dhtest.c) -target_link_libraries(dhtest ${OPENSSL_LIBS}) -add_test(dhtest dhtest) +target_link_libraries(dhtest ${OPENSSL_TEST_LIBS}) +add_platform_test(dhtest dhtest) # dsatest add_executable(dsatest dsatest.c) -target_link_libraries(dsatest ${OPENSSL_LIBS}) -add_test(dsatest dsatest) - -# dtlstest -if(NOT BUILD_SHARED_LIBS AND NOT WIN32) - add_executable(dtlstest dtlstest.c) - target_link_libraries(dtlstest ${OPENSSL_LIBS}) - add_test(NAME dtlstest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/dtlstest.sh) - set_tests_properties(dtlstest PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") -endif() +target_link_libraries(dsatest ${OPENSSL_TEST_LIBS}) +add_platform_test(dsatest dsatest) + +# XXX This test is too flaky for CI. Disable it until it is fixed. +# # dtlstest +# if(NOT WIN32) +# add_executable(dtlstest dtlstest.c) +# target_link_libraries(dtlstest ${OPENSSL_TEST_LIBS}) +# add_test(NAME dtlstest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/dtlstest.sh) +# set_tests_properties(dtlstest PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") +# endif() + +# dtls_handshake_msg_test +add_executable(dtls_handshake_msg_test dtls_handshake_msg_test.c) +target_link_libraries(dtls_handshake_msg_test ${OPENSSL_TEST_LIBS}) +add_platform_test(dtls_handshake_msg_test dtls_handshake_msg_test) + +# dtls_wire_test +add_executable(dtls_wire_test dtls_wire_test.c) +target_link_libraries(dtls_wire_test ${OPENSSL_TEST_LIBS}) +add_platform_test(dtls_wire_test dtls_wire_test) + +# ecc_cdh +add_executable(ecc_cdh ecc_cdh.c) +target_link_libraries(ecc_cdh ${OPENSSL_TEST_LIBS}) +add_platform_test(ecc_cdh ecc_cdh) + +# ec_asn1_test +add_executable(ec_asn1_test ec_asn1_test.c) +target_link_libraries(ec_asn1_test ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(ec_asn1_test) +add_platform_test(ec_asn1_test ec_asn1_test) -if(NOT BUILD_SHARED_LIBS) # ec_point_conversion add_executable(ec_point_conversion ec_point_conversion.c) -target_link_libraries(ec_point_conversion ${OPENSSL_LIBS}) -add_test(ec_point_conversion ec_point_conversion) +target_link_libraries(ec_point_conversion ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(ec_point_conversion) +add_platform_test(ec_point_conversion ec_point_conversion) # ecdhtest add_executable(ecdhtest ecdhtest.c) -target_link_libraries(ecdhtest ${OPENSSL_LIBS}) -add_test(ecdhtest ecdhtest) +target_link_libraries(ecdhtest ${OPENSSL_TEST_LIBS}) +add_platform_test(ecdhtest ecdhtest) # ecdsatest add_executable(ecdsatest ecdsatest.c) -target_link_libraries(ecdsatest ${OPENSSL_LIBS}) -add_test(ecdsatest ecdsatest) +target_link_libraries(ecdsatest ${OPENSSL_TEST_LIBS}) +add_platform_test(ecdsatest ecdsatest) # ectest add_executable(ectest ectest.c) -target_link_libraries(ectest ${OPENSSL_LIBS}) -add_test(ectest ectest) -endif() +target_link_libraries(ectest ${OPENSSL_TEST_LIBS}) +add_platform_test(ectest ectest) + +# ed25519test +add_executable(ed25519test ed25519test.c) +target_link_libraries(ed25519test ${OPENSSL_TEST_LIBS}) +add_platform_test(ed25519test ed25519test) + +# err_test +add_executable(err_test err_test.c) +target_link_libraries(err_test ${OPENSSL_TEST_LIBS}) +add_platform_test(err_test err_test) -# enginetest -add_executable(enginetest enginetest.c) -target_link_libraries(enginetest ${OPENSSL_LIBS}) -add_test(enginetest enginetest) +# evp_ecx_test +add_executable(evp_ecx_test evp_ecx_test.c) +target_link_libraries(evp_ecx_test ${OPENSSL_TEST_LIBS}) +add_platform_test(evp_ecx_test evp_ecx_test) + +# evp_pkey_cleanup +add_executable(evp_pkey_cleanup evp_pkey_cleanup.c) +target_link_libraries(evp_pkey_cleanup ${OPENSSL_TEST_LIBS}) +add_platform_test(evp_pkey_cleanup evp_pkey_cleanup) # evptest add_executable(evptest evptest.c) -target_link_libraries(evptest ${OPENSSL_LIBS}) -add_test(evptest evptest ${CMAKE_CURRENT_SOURCE_DIR}/evptests.txt) +target_link_libraries(evptest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(evptest) +add_platform_test(evptest evptest ${CMAKE_CURRENT_SOURCE_DIR}/evptests.txt) + +# evp_test +add_executable(evp_test evp_test.c) +target_link_libraries(evp_test ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(evp_test) +add_platform_test(evp_test evp_test) + +# exdata_test +add_executable(exdata_test exdata_test.c) +target_link_libraries(exdata_test ${OPENSSL_TEST_LIBS}) +add_platform_test(exdata_test exdata_test) # explicit_bzero -# explicit_bzero relies on SA_ONSTACK, which is unavailable on Windows -if(NOT WIN32) +# SA_ONSTACK is unavailable on Windows, sigsuspend is unavailable on Emscripten +if(NOT (WIN32 OR EMSCRIPTEN)) if(HAVE_MEMMEM) add_executable(explicit_bzero explicit_bzero.c) else() add_executable(explicit_bzero explicit_bzero.c compat/memmem.c) endif() - target_link_libraries(explicit_bzero ${OPENSSL_LIBS}) + target_link_libraries(explicit_bzero ${OPENSSL_TEST_LIBS}) add_test(explicit_bzero explicit_bzero) endif() -# exptest -if(NOT BUILD_SHARED_LIBS) - add_executable(exptest exptest.c) - set_source_files_properties(exptest.c PROPERTIES COMPILE_FLAGS - -ULIBRESSL_INTERNAL) - target_link_libraries(exptest ${OPENSSL_LIBS}) - add_test(exptest exptest) -endif() +# exportertest +add_executable(exportertest exportertest.c) +target_link_libraries(exportertest ${OPENSSL_TEST_LIBS}) +add_platform_test(exportertest exportertest) # freenull add_executable(freenull freenull.c) -target_link_libraries(freenull ${OPENSSL_LIBS}) -add_test(freenull freenull) +set_source_files_properties(freenull.c PROPERTIES COMPILE_FLAGS + -ULIBRESSL_INTERNAL) +target_link_libraries(freenull ${OPENSSL_TEST_LIBS}) +add_platform_test(freenull freenull) # gcm128test add_executable(gcm128test gcm128test.c) -target_link_libraries(gcm128test ${OPENSSL_LIBS}) -add_test(gcm128test gcm128test) - -# gost2814789t -add_executable(gost2814789t gost2814789t.c) -target_link_libraries(gost2814789t ${OPENSSL_LIBS}) -add_test(gost2814789t gost2814789t) +target_link_libraries(gcm128test ${OPENSSL_TEST_LIBS}) +add_platform_test(gcm128test gcm128test) # handshake_table -if(NOT BUILD_SHARED_LIBS) - add_executable(handshake_table handshake_table.c) - target_link_libraries(handshake_table ${OPENSSL_LIBS}) - add_test(handshake_table handshake_table) -endif() +add_executable(handshake_table handshake_table.c) +target_link_libraries(handshake_table ${OPENSSL_TEST_LIBS}) +add_platform_test(handshake_table handshake_table) # hkdf_test add_executable(hkdf_test hkdf_test.c) -target_link_libraries(hkdf_test ${OPENSSL_LIBS}) -add_test(hkdf_test hkdf_test) +target_link_libraries(hkdf_test ${OPENSSL_TEST_LIBS}) +add_platform_test(hkdf_test hkdf_test) # hmactest add_executable(hmactest hmactest.c) -target_link_libraries(hmactest ${OPENSSL_LIBS}) -add_test(hmactest hmactest) +target_link_libraries(hmactest ${OPENSSL_TEST_LIBS}) +add_platform_test(hmactest hmactest) # ideatest add_executable(ideatest ideatest.c) -target_link_libraries(ideatest ${OPENSSL_LIBS}) -add_test(ideatest ideatest) +target_link_libraries(ideatest ${OPENSSL_TEST_LIBS}) +add_platform_test(ideatest ideatest) # igetest add_executable(igetest igetest.c) -target_link_libraries(igetest ${OPENSSL_LIBS}) -add_test(igetest igetest) - -# keypairtest -if(NOT BUILD_SHARED_LIBS) - add_executable(key_schedule key_schedule.c) - target_link_libraries(key_schedule ${OPENSSL_LIBS}) - add_test(key_schedule key_schedule) - - add_executable(keypairtest keypairtest.c) - target_link_libraries(keypairtest ${LIBTLS_LIBS}) - add_test(keypairtest keypairtest - ${CMAKE_CURRENT_SOURCE_DIR}/ca.pem - ${CMAKE_CURRENT_SOURCE_DIR}/server.pem - ${CMAKE_CURRENT_SOURCE_DIR}/server.pem) +target_link_libraries(igetest ${OPENSSL_TEST_LIBS}) +add_platform_test(igetest igetest) + +# init_pledge + +# key_schedule +add_executable(key_schedule key_schedule.c) +target_link_libraries(key_schedule ${OPENSSL_TEST_LIBS}) +add_platform_test(key_schedule key_schedule) + +# keypair +add_executable(keypairtest keypairtest.c) +target_link_libraries(keypairtest ${LIBTLS_TEST_LIBS}) +target_include_directories(keypairtest BEFORE PUBLIC ../tls) +prepare_emscripten_test_target(keypairtest) +add_platform_test(keypairtest keypairtest + ${CMAKE_CURRENT_SOURCE_DIR}/ca-root-rsa.pem + ${CMAKE_CURRENT_SOURCE_DIR}/server1-rsa.pem + ${CMAKE_CURRENT_SOURCE_DIR}/server1-rsa.pem) + +# lhash_test +add_executable(lhash_test lhash_test.c) +target_link_libraries(lhash_test ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(lhash_test) +add_platform_test(lhash_test lhash_test) + +# md_test +add_executable(md_test md_test.c ${TEST_HELPER_SRC}) +target_link_libraries(md_test ${OPENSSL_TEST_LIBS}) +add_platform_test(md_test md_test) + +# mlkem_tests +add_executable(mlkem_tests mlkem_tests.c parse_test_file.c) +target_link_libraries(mlkem_tests ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(mlkem_tests) +if(NOT MSVC) + add_test(NAME mlkem_tests COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mlkem_tests.sh) + set_tests_properties(mlkem_tests PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") +else() + add_test(NAME mlkem_tests COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mlkem_tests.bat $) endif() +set_tests_properties(mlkem_tests PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") -# md4test -add_executable(md4test md4test.c) -target_link_libraries(md4test ${OPENSSL_LIBS}) -add_test(md4test md4test) +# mlkem_iteration_tests +add_executable(mlkem_iteration_tests mlkem_iteration_tests.c mlkem_tests_util.c) +target_link_libraries(mlkem_iteration_tests ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(mlkem_iteration_tests) +add_platform_test(mlkem_iteration_tests mlkem_iteration_tests) -# md5test -add_executable(md5test md5test.c) -target_link_libraries(md5test ${OPENSSL_LIBS}) -add_test(md5test md5test) +# mlkem_unittest +add_executable(mlkem_unittest mlkem_unittest.c mlkem_tests_util.c) +target_link_libraries(mlkem_unittest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(mlkem_unittest) +add_platform_test(mlkem_unittest mlkem_unittest) -# mont -add_executable(mont mont.c) -target_link_libraries(mont ${OPENSSL_LIBS}) -add_test(mont mont) +# objectstest +add_executable(objectstest objectstest.c) +target_link_libraries(objectstest ${OPENSSL_TEST_LIBS}) +add_platform_test(objectstest objectstest) # ocsp_test if(ENABLE_EXTRATESTS) add_executable(ocsp_test ocsp_test.c) - target_link_libraries(ocsp_test ${OPENSSL_LIBS}) - if(NOT MSVC) + target_link_libraries(ocsp_test ${OPENSSL_TEST_LIBS}) + if(NOT WIN32) add_test(NAME ocsptest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/ocsptest.sh) else() add_test(NAME ocsptest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/ocsptest.bat $) @@ -318,203 +649,314 @@ endif() # optionstest add_executable(optionstest optionstest.c) -target_link_libraries(optionstest ${OPENSSL_LIBS}) -add_test(optionstest optionstest) +target_link_libraries(optionstest ${OPENSSL_TEST_LIBS}) +add_platform_test(optionstest optionstest) # pbkdf2 add_executable(pbkdf2 pbkdf2.c) -target_link_libraries(pbkdf2 ${OPENSSL_LIBS}) -add_test(pbkdf2 pbkdf2) +target_link_libraries(pbkdf2 ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(pbkdf2) +add_platform_test(pbkdf2 pbkdf2) # pidwraptest # pidwraptest relies on an OS-specific way to give out pids and is generally # awkward on systems with slow fork if(ENABLE_EXTRATESTS AND NOT MSVC) add_executable(pidwraptest pidwraptest.c) - target_link_libraries(pidwraptest ${OPENSSL_LIBS}) + target_link_libraries(pidwraptest ${OPENSSL_TEST_LIBS}) add_test(pidwraptest ${CMAKE_CURRENT_SOURCE_DIR}/pidwraptest.sh) endif() # pkcs7test add_executable(pkcs7test pkcs7test.c) -target_link_libraries(pkcs7test ${OPENSSL_LIBS}) -add_test(pkcs7test pkcs7test) +target_link_libraries(pkcs7test ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(pkcs7test) +add_platform_test(pkcs7test pkcs7test) # poly1305test add_executable(poly1305test poly1305test.c) -target_link_libraries(poly1305test ${OPENSSL_LIBS}) -add_test(poly1305test poly1305test) +target_link_libraries(poly1305test ${OPENSSL_TEST_LIBS}) +add_platform_test(poly1305test poly1305test) + +# policy +add_executable(policy policy.c) +set_source_files_properties(policy.c PROPERTIES COMPILE_FLAGS + -DCERTSDIR=\\"${CMAKE_CURRENT_SOURCE_DIR}\\") +target_link_libraries(policy ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(policy) +add_platform_test(policy policy) # pq_test -if(NOT BUILD_SHARED_LIBS) - add_executable(pq_test pq_test.c) - target_link_libraries(pq_test ${OPENSSL_LIBS}) - if(NOT MSVC) - add_test(NAME pq_test COMMAND - ${CMAKE_CURRENT_SOURCE_DIR}/pq_test.sh) - else() - add_test(NAME pq_test COMMAND - ${CMAKE_CURRENT_SOURCE_DIR}/pq_test.bat - $) - endif() - set_tests_properties(pq_test PROPERTIES ENVIRONMENT - "srcdir=${TEST_SOURCE_DIR}") +add_executable(pq_test pq_test.c) +target_link_libraries(pq_test ${OPENSSL_TEST_LIBS}) +add_platform_test(pq_test pq_test) + +# quictest +set(QUICTEST_SRC quictest.c) +add_executable(quictest ${QUICTEST_SRC}) +target_link_libraries(quictest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(quictest) +if(NOT WIN32) + add_test(NAME quictest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/quictest.sh) +else() + add_test(NAME quictest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/quictest.bat $) endif() +set_tests_properties(quictest PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") # randtest add_executable(randtest randtest.c) -target_link_libraries(randtest ${OPENSSL_LIBS}) -add_test(randtest randtest) +target_link_libraries(randtest ${OPENSSL_TEST_LIBS}) +add_platform_test(randtest randtest) -# rc2test -add_executable(rc2test rc2test.c) -target_link_libraries(rc2test ${OPENSSL_LIBS}) -add_test(rc2test rc2test) +# rc2_test +add_executable(rc2_test rc2_test.c) +target_link_libraries(rc2_test ${OPENSSL_TEST_LIBS}) +add_platform_test(rc2_test rc2_test) -# rc4test -add_executable(rc4test rc4test.c) -target_link_libraries(rc4test ${OPENSSL_LIBS}) -add_test(rc4test rc4test) +# rc4_test +add_executable(rc4_test rc4_test.c) +target_link_libraries(rc4_test ${OPENSSL_TEST_LIBS}) +add_platform_test(rc4_test rc4_test) # recordtest -if(NOT BUILD_SHARED_LIBS) - add_executable(recordtest recordtest.c) - target_link_libraries(recordtest ${OPENSSL_LIBS}) - add_test(recordtest recordtest) -endif() +add_executable(recordtest recordtest.c) +target_link_libraries(recordtest ${OPENSSL_TEST_LIBS}) +add_platform_test(recordtest recordtest) # record_layer_test -if(NOT BUILD_SHARED_LIBS) - add_executable(record_layer_test record_layer_test.c) - target_link_libraries(record_layer_test ${OPENSSL_LIBS}) - add_test(record_layer_test record_layer_test) +add_executable(record_layer_test record_layer_test.c) +target_link_libraries(record_layer_test ${OPENSSL_TEST_LIBS}) +add_platform_test(record_layer_test record_layer_test) + +# renegotiation_test +set(RENEGOTIATION_TEST_SRC renegotiation_test.c) +add_executable(renegotiation_test ${RENEGOTIATION_TEST_SRC}) +target_link_libraries(renegotiation_test ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(renegotiation_test) +if(NOT MSVC) + add_test(NAME renegotiation_test COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/renegotiation_test.sh) +else() + add_test(NAME renegotiation_test COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/renegotiation_test.bat $) endif() +set_tests_properties(renegotiation_test PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") + +# rfc3779 +add_executable(rfc3779 rfc3779.c) +target_link_libraries(rfc3779 ${OPENSSL_TEST_LIBS}) +add_platform_test(rfc3779 rfc3779) # rfc5280time add_executable(rfc5280time rfc5280time.c) -target_link_libraries(rfc5280time ${OPENSSL_LIBS}) +target_link_libraries(rfc5280time ${OPENSSL_TEST_LIBS}) +add_platform_test(rfc5280time rfc5280time) if(SMALL_TIME_T) - add_test(rfc5280time ${CMAKE_CURRENT_SOURCE_DIR}/rfc5280time_small.test) -else() - add_test(rfc5280time rfc5280time) + set_property(TEST rfc5280time PROPERTY WILL_FAIL TRUE) endif() -# rmdtest -add_executable(rmdtest rmdtest.c) -target_link_libraries(rmdtest ${OPENSSL_LIBS}) -add_test(rmdtest rmdtest) +# rmd_test +add_executable(rmd_test rmd_test.c) +target_link_libraries(rmd_test ${OPENSSL_TEST_LIBS}) +add_platform_test(rmd_test rmd_test) + +# rsa_method_test +add_executable(rsa_method_test rsa_method_test.c) +target_link_libraries(rsa_method_test ${OPENSSL_TEST_LIBS}) +add_platform_test(rsa_method_test rsa_method_test) + +# rsa_padding_test +add_executable(rsa_padding_test rsa_padding_test.c) +target_link_libraries(rsa_padding_test ${OPENSSL_TEST_LIBS}) +add_platform_test(rsa_padding_test rsa_padding_test) # rsa_test add_executable(rsa_test rsa_test.c) -target_link_libraries(rsa_test ${OPENSSL_LIBS}) -add_test(rsa_test rsa_test) +target_link_libraries(rsa_test ${OPENSSL_TEST_LIBS}) +add_platform_test(rsa_test rsa_test) + +# server.c # servertest -if(NOT BUILD_SHARED_LIBS) - add_executable(servertest servertest.c) - target_link_libraries(servertest ${OPENSSL_LIBS}) - if(NOT MSVC) - add_test(NAME servertest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/servertest.sh) - else() - add_test(NAME servertest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/servertest.bat $) - endif() - set_tests_properties(servertest PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") +add_executable(servertest servertest.c) +target_link_libraries(servertest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(servertest) +if(NOT WIN32) + add_test(NAME servertest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/servertest.sh) +else() + add_test(NAME servertest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/servertest.bat $) +endif() +set_tests_properties(servertest PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") + +# sha_test +add_executable(sha_test sha_test.c ${TEST_HELPER_SRC}) +target_link_libraries(sha_test ${OPENSSL_TEST_LIBS}) +add_platform_test(sha_test sha_test) + +# shutdowntest +set(SHUTDOWNTEST_SRC shutdowntest.c) +add_executable(shutdowntest ${SHUTDOWNTEST_SRC}) +target_link_libraries(shutdowntest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(shutdowntest) +if(NOT WIN32) + add_test(NAME shutdowntest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/shutdowntest.sh) +else() + add_test(NAME shutdowntest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/shutdowntest.bat $) endif() +set_tests_properties(shutdowntest PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") -# sha1test -add_executable(sha1test sha1test.c) -target_link_libraries(sha1test ${OPENSSL_LIBS}) -add_test(sha1test sha1test) +# signertest +# Emscripten does not support socketpair syscall. +if(NOT (CMAKE_SYSTEM_NAME MATCHES "WindowsStore" OR EMSCRIPTEN)) + set(SIGNERTEST_SRC signertest.c) + check_symbol_exists(pipe2 "fcntl.h;unistd.h" HAVE_PIPE2) + if(HAVE_PIPE2) + add_definitions(-DHAVE_PIPE2) + else() + set(SIGNERTEST_SRC ${SIGNERTEST_SRC} compat/pipe2.c) + endif() -# sha256test -add_executable(sha256test sha256test.c) -target_link_libraries(sha256test ${OPENSSL_LIBS}) -add_test(sha256test sha256test) + set_source_files_properties(signertest.c PROPERTIES COMPILE_FLAGS + -DCERTSDIR=\\"${CMAKE_CURRENT_SOURCE_DIR}\\") + add_executable(signertest ${SIGNERTEST_SRC}) + target_link_libraries(signertest ${LIBTLS_TEST_LIBS}) + target_include_directories(signertest BEFORE PUBLIC ../tls) + add_platform_test(signertest signertest) +endif() -# sha512test -add_executable(sha512test sha512test.c) -target_link_libraries(sha512test ${OPENSSL_LIBS}) -add_test(sha512test sha512test) +# sm2crypttest +# sm2evptest +# sm2sigtest # sm3test add_executable(sm3test sm3test.c) -target_link_libraries(sm3test ${OPENSSL_LIBS}) -add_test(sm3test sm3test) +target_link_libraries(sm3test ${OPENSSL_TEST_LIBS}) +add_platform_test(sm3test sm3test) # sm4test add_executable(sm4test sm4test.c) -target_link_libraries(sm4test ${OPENSSL_LIBS}) -add_test(sm4test sm4test) +target_link_libraries(sm4test ${OPENSSL_TEST_LIBS}) +add_platform_test(sm4test sm4test) # ssl_get_shared_ciphers add_executable(ssl_get_shared_ciphers ssl_get_shared_ciphers.c) set_source_files_properties(ssl_get_shared_ciphers.c PROPERTIES COMPILE_FLAGS -DCERTSDIR=\\"${CMAKE_CURRENT_SOURCE_DIR}\\") -target_link_libraries(ssl_get_shared_ciphers ${OPENSSL_LIBS}) -add_test(ssl_get_shared_ciphers ssl_get_shared_ciphers) +target_link_libraries(ssl_get_shared_ciphers ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(ssl_get_shared_ciphers) +add_platform_test(ssl_get_shared_ciphers ssl_get_shared_ciphers) + +# ssl_kex +add_executable(ssl_kex ssl_kex.c) +target_link_libraries(ssl_kex ${OPENSSL_TEST_LIBS}) +add_platform_test(ssl_kex ssl_kex) + +# ssl_methods +add_executable(ssl_methods ssl_methods.c) +target_link_libraries(ssl_methods ${OPENSSL_TEST_LIBS}) +add_platform_test(ssl_methods ssl_methods) + +# ssl_set_alpn_protos +add_executable(ssl_set_alpn_protos ssl_set_alpn_protos.c) +target_link_libraries(ssl_set_alpn_protos ${OPENSSL_TEST_LIBS}) +add_platform_test(ssl_set_alpn_protos ssl_set_alpn_protos) + +# ssl_verify_param +add_executable(ssl_verify_param ssl_verify_param.c) +target_link_libraries(ssl_verify_param ${OPENSSL_TEST_LIBS}) +add_platform_test(ssl_verify_param ssl_verify_param) + +# ssl_verify +add_executable(ssl_verify ssl_verify.c) +target_link_libraries(ssl_verify ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(ssl_verify) +if(HAVE_PERL_IO_SOCKET_SSL_UTILS) + if(WIN32) + add_test(NAME ssl_verify COMMAND + ${CMAKE_CURRENT_SOURCE_DIR}/ssl_verify.bat + $) + else() + add_test(NAME ssl_verify COMMAND + ${CMAKE_CURRENT_SOURCE_DIR}/ssl_verify.sh + $) + endif() + set_tests_properties(ssl_verify PROPERTIES + ENVIRONMENT "srcdir=${TEST_SOURCE_DIR};PERL=${PERL_EXECUTABLE}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +endif() # ssl_versions -if(NOT BUILD_SHARED_LIBS) - add_executable(ssl_versions ssl_versions.c) - target_link_libraries(ssl_versions ${OPENSSL_LIBS}) - add_test(ssl_versions ssl_versions) -endif() +add_executable(ssl_versions ssl_versions.c) +target_link_libraries(ssl_versions ${OPENSSL_TEST_LIBS}) +add_platform_test(ssl_versions ssl_versions) + +# ssl_tlstest +add_executable(ssl_tlstest ssl_tlstest.c) +target_link_libraries(ssl_tlstest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(ssl_tlstest) +add_platform_test(ssl_tlstest $ + ${CMAKE_CURRENT_SOURCE_DIR}/server1-rsa.pem + ${CMAKE_CURRENT_SOURCE_DIR}/server1-rsa-chain.pem + ${CMAKE_CURRENT_SOURCE_DIR}/ca-root-rsa.pem) # ssltest add_executable(ssltest ssltest.c) -target_link_libraries(ssltest ${OPENSSL_LIBS}) -if(NOT MSVC) +target_link_libraries(ssltest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(ssltest) +if(NOT WIN32) add_test(NAME ssltest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/ssltest.sh) else() add_test(NAME ssltest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/ssltest.bat $ $) endif() set_tests_properties(ssltest PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") -# testdsa -if(NOT MSVC) - add_test(NAME testdsa COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testdsa.sh) -else() - add_test(NAME testdsa COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testdsa.bat $) -endif() -set_tests_properties(testdsa PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") +# testdsa, testenc, testrsa don't have an executable instead they use openssl executable which +# access various files for IO. Adding such files to --preload-file is infeasible. +if(NOT EMSCRIPTEN) + # testdsa + if(NOT WIN32) + add_test(NAME testdsa COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testdsa.sh) + else() + add_test(NAME testdsa COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testdsa.bat $) + endif() + set_tests_properties(testdsa PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") -# testenc -if(NOT MSVC) - add_test(NAME testenc COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testenc.sh) -else() - add_test(NAME testenc COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testenc.bat $) -endif() -set_tests_properties(testenc PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") + # testenc + if(NOT WIN32) + add_test(NAME testenc COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testenc.sh) + else() + add_test(NAME testenc COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testenc.bat $) + endif() + set_tests_properties(testenc PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") -# testrsa -if(NOT MSVC) - add_test(NAME testrsa COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testrsa.sh) -else() - add_test(NAME testrsa COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testrsa.bat $) + # testrsa + if(NOT WIN32) + add_test(NAME testrsa COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testrsa.sh) + else() + add_test(NAME testrsa COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/testrsa.bat $) + endif() + set_tests_properties(testrsa PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") endif() -set_tests_properties(testrsa PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") # timingsafe add_executable(timingsafe timingsafe.c) -target_link_libraries(timingsafe ${OPENSSL_LIBS}) -add_test(timingsafe timingsafe) +target_link_libraries(timingsafe ${OPENSSL_TEST_LIBS}) +add_platform_test(timingsafe timingsafe) # tlsexttest -if(NOT BUILD_SHARED_LIBS) - add_executable(tlsexttest tlsexttest.c) - target_link_libraries(tlsexttest ${OPENSSL_LIBS}) - add_test(tlsexttest tlsexttest) -endif() +add_executable(tlsexttest tlsexttest.c) +target_link_libraries(tlsexttest ${OPENSSL_TEST_LIBS}) +add_platform_test(tlsexttest tlsexttest) # tlslegacytest add_executable(tlslegacytest tlslegacytest.c) -target_link_libraries(tlslegacytest ${OPENSSL_LIBS}) -add_test(tlslegacytest tlslegacytest) +target_link_libraries(tlslegacytest ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(tlslegacytest) +add_platform_test(tlslegacytest tlslegacytest) # tlstest -if(NOT CMAKE_SYSTEM_NAME MATCHES "WindowsStore") +# Emscripten does not support socketpair syscall. +if(NOT (CMAKE_SYSTEM_NAME MATCHES "WindowsStore" OR EMSCRIPTEN)) set(TLSTEST_SRC tlstest.c) - check_function_exists(pipe2 HAVE_PIPE2) + check_symbol_exists(pipe2 "fcntl.h;unistd.h" HAVE_PIPE2) if(HAVE_PIPE2) add_definitions(-DHAVE_PIPE2) else() @@ -522,8 +964,8 @@ if(NOT CMAKE_SYSTEM_NAME MATCHES "WindowsStore") endif() add_executable(tlstest ${TLSTEST_SRC}) - target_link_libraries(tlstest ${LIBTLS_LIBS}) - if(NOT MSVC) + target_link_libraries(tlstest ${LIBTLS_TEST_LIBS}) + if(NOT WIN32) add_test(NAME tlstest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tlstest.sh) else() add_test(NAME tlstest COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tlstest.bat $) @@ -532,67 +974,97 @@ if(NOT CMAKE_SYSTEM_NAME MATCHES "WindowsStore") endif() # tls_ext_alpn -if(NOT BUILD_SHARED_LIBS) - add_executable(tls_ext_alpn tls_ext_alpn.c) - target_link_libraries(tls_ext_alpn ${OPENSSL_LIBS}) - add_test(tls_ext_alpn tls_ext_alpn) -endif() +add_executable(tls_ext_alpn tls_ext_alpn.c) +target_link_libraries(tls_ext_alpn ${OPENSSL_TEST_LIBS}) +add_platform_test(tls_ext_alpn tls_ext_alpn) # tls_prf -if(NOT BUILD_SHARED_LIBS) - add_executable(tls_prf tls_prf.c) - target_link_libraries(tls_prf ${OPENSSL_LIBS}) - add_test(tls_prf tls_prf) -endif() +add_executable(tls_prf tls_prf.c) +target_link_libraries(tls_prf ${OPENSSL_TEST_LIBS}) +add_platform_test(tls_prf tls_prf) # utf8test -if(NOT BUILD_SHARED_LIBS) - add_executable(utf8test utf8test.c) - target_link_libraries(utf8test ${OPENSSL_LIBS}) - add_test(utf8test utf8test) -endif() +add_executable(utf8test utf8test.c) +target_link_libraries(utf8test ${OPENSSL_TEST_LIBS}) +add_platform_test(utf8test utf8test) # valid_handshakes_terminate -if(NOT BUILD_SHARED_LIBS) - add_executable(valid_handshakes_terminate valid_handshakes_terminate.c) - target_link_libraries(valid_handshakes_terminate ${OPENSSL_LIBS}) - add_test(valid_handshakes_terminate valid_handshakes_terminate) +add_executable(valid_handshakes_terminate valid_handshakes_terminate.c) +target_link_libraries(valid_handshakes_terminate ${OPENSSL_TEST_LIBS}) +add_platform_test(valid_handshakes_terminate valid_handshakes_terminate) + +# x509_verify +add_executable(x509_verify x509_verify.c) +target_link_libraries(x509_verify ${OPENSSL_TEST_LIBS}) +add_dependencies(x509_verify openssl) +if(NOT WIN32 AND NOT EMSCRIPTEN AND PERL_EXECUTABLE) + add_test(NAME x509_verify COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/x509_verify.sh + $ $) + set_tests_properties(x509_verify PROPERTIES + ENVIRONMENT "srcdir=${TEST_SOURCE_DIR};PERL=${PERL_EXECUTABLE}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + # This test depends on certificate times that can exceed 32-bit time_t + # range, so match the existing time tests and expect failure there. + if(SMALL_TIME_T) + set_property(TEST x509_verify PROPERTY WILL_FAIL TRUE) + endif() endif() # verifytest -if(NOT BUILD_SHARED_LIBS) - add_executable(verifytest verifytest.c) - target_link_libraries(verifytest ${LIBTLS_LIBS}) - add_test(verifytest verifytest) -endif() +add_executable(verifytest verifytest.c) +target_link_libraries(verifytest ${LIBTLS_TEST_LIBS}) +add_platform_test(verifytest verifytest) # x25519test add_executable(x25519test x25519test.c) -target_link_libraries(x25519test ${OPENSSL_LIBS}) -add_test(x25519test x25519test) +target_link_libraries(x25519test ${OPENSSL_TEST_LIBS}) +add_platform_test(x25519test x25519test) # x509attribute add_executable(x509attribute x509attribute.c) -target_link_libraries(x509attribute ${OPENSSL_LIBS}) -add_test(x509attribute x509attribute) +target_link_libraries(x509attribute ${OPENSSL_TEST_LIBS}) +add_platform_test(x509attribute x509attribute) + +# x509_algor +add_executable(x509_algor x509_algor.c) +target_link_libraries(x509_algor ${OPENSSL_TEST_LIBS}) +add_platform_test(x509_algor x509_algor) + +# x509_asn1 +add_executable(x509_asn1 x509_asn1.c) +target_link_libraries(x509_asn1 ${OPENSSL_TEST_LIBS}) +prepare_emscripten_test_target(x509_asn1) +add_platform_test(x509_asn1 x509_asn1) + +# x509_crl +add_executable(x509_crl x509_crl.c) +target_link_libraries(x509_crl ${OPENSSL_TEST_LIBS}) +add_platform_test(x509_crl x509_crl) + +# x509_extensions_test +add_executable(x509_extensions_test x509_extensions_test.c) +target_link_libraries(x509_extensions_test ${OPENSSL_TEST_LIBS}) +add_platform_test(x509_extensions_test x509_extensions_test) # x509_info add_executable(x509_info x509_info.c) -target_link_libraries(x509_info ${OPENSSL_LIBS}) -add_test(x509_info x509_info) - -# x509name -add_executable(x509name x509name.c) -target_link_libraries(x509name ${OPENSSL_LIBS}) -add_test(x509name x509name) - -if(BUILD_SHARED_LIBS) - add_custom_command(TARGET x25519test POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy - "$" - "$" - "$" - "${CMAKE_CURRENT_BINARY_DIR}" - COMMENT "Copying DLLs for regression tests") -endif() - +target_link_libraries(x509_info ${OPENSSL_TEST_LIBS}) +add_platform_test(x509_info x509_info) + +# x509_name_test +add_executable(x509_name_test x509_name_test.c) +target_link_libraries(x509_name_test ${OPENSSL_TEST_LIBS}) +add_platform_test(x509_name_test x509_name_test) + +# x509req_ext +add_executable(x509req_ext x509req_ext.c) +target_link_libraries(x509req_ext ${OPENSSL_TEST_LIBS}) +add_platform_test(x509req_ext x509req_ext) + +add_custom_command(TARGET x25519test POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy + "$" + "$" + "$" + "${CMAKE_CURRENT_BINARY_DIR}" + COMMENT "Copying DLLs for regression tests") diff --git a/tests/Makefile.am b/tests/Makefile.am index f43bd8580c..aec438bb21 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,41 +1,148 @@ +# +# Copyright (c) 2015 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + include $(top_srcdir)/Makefile.am.common -AM_CPPFLAGS += -I $(top_srcdir)/crypto/modes +-include $(abs_top_builddir)/crypto/libcrypto_la_objects.mk +-include $(abs_top_builddir)/ssl/libssl_la_objects.mk +-include $(abs_top_builddir)/tls/libtls_la_objects.mk + +AM_CPPFLAGS += -DLIBRESSL_CRYPTO_INTERNAL + +AM_CPPFLAGS += -I $(top_srcdir)/crypto/ AM_CPPFLAGS += -I $(top_srcdir)/crypto/asn1 +AM_CPPFLAGS += -I $(top_srcdir)/crypto/bio +AM_CPPFLAGS += -I $(top_srcdir)/crypto/bn +AM_CPPFLAGS += -I $(top_srcdir)/crypto/bytestring +AM_CPPFLAGS += -I $(top_srcdir)/crypto/curve25519 +AM_CPPFLAGS += -I $(top_srcdir)/crypto/ec +AM_CPPFLAGS += -I $(top_srcdir)/crypto/evp +AM_CPPFLAGS += -I $(top_srcdir)/crypto/mlkem +AM_CPPFLAGS += -I $(top_srcdir)/crypto/modes +AM_CPPFLAGS += -I $(top_srcdir)/crypto/sha AM_CPPFLAGS += -I $(top_srcdir)/crypto/x509 AM_CPPFLAGS += -I $(top_srcdir)/ssl -AM_CPPFLAGS += -I $(top_srcdir)/tls +AM_CPPFLAGS += -I $(top_srcdir)/tests AM_CPPFLAGS += -I $(top_srcdir)/apps/openssl AM_CPPFLAGS += -I $(top_srcdir)/apps/openssl/compat -AM_CPPFLAGS += -D_PATH_SSL_CA_FILE=\"$(top_srcdir)/apps/openssl/cert.pem\" - -LDADD = $(abs_top_builddir)/tls/.libs/libtls.a -LDADD += $(abs_top_builddir)/ssl/.libs/libssl.a -LDADD += $(abs_top_builddir)/crypto/.libs/libcrypto.a -LDADD += $(PLATFORM_LDADD) $(PROG_LDADD) -if HOST_ASM_MACOSX_X86_64 -LDADD += $(abs_top_builddir)/crypto/.libs/libcrypto_la-cpuid-macosx-x86_64.o +AM_CPPFLAGS += -D_PATH_SSL_CA_FILE=\"$(top_srcdir)/cert.pem\" + +# arch +if HOST_AARCH64 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/aarch64/ +endif + +if HOST_ARM +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/arm/ +endif + +if HOST_I386 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/i386/ +endif + +if HOST_LOONGARCH64 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/loongarch64/ +endif + +if HOST_MIPS +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips/ +endif + +if HOST_MIPS64 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/mips64/ +endif + +if HOST_POWERPC +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/powerpc/ +endif + +if HOST_POWERPC64 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/powerpc64/ +endif + +if HOST_RISCV64 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/riscv64/ +endif + +if HOST_SPARC64 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/sparc64/ +endif + +if HOST_X86_64 +AM_CPPFLAGS += -I$(top_srcdir)/crypto/arch/amd64/ endif +noinst_LTLIBRARIES = libtest.la +libtest_la_LIBADD = $(libcrypto_la_objects) +libtest_la_LIBADD += $(libcompat_la_objects) +libtest_la_LIBADD += $(libcompatnoopt_la_objects) +libtest_la_LIBADD += $(libssl_la_objects) +libtest_la_LIBADD += $(libtls_la_objects) +libtest_la_SOURCES = empty.c + +LDADD = libtest.la $(PLATFORM_LDADD) $(PROG_LDADD) + +TESTS_ENVIRONMENT = PERL='$(PERL)' TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh TESTS = +XFAIL_TESTS = check_PROGRAMS = EXTRA_DIST = CMakeLists.txt DISTCLEANFILES = pidwraptest.txt +distclean-local: + rm -rf ssl_verify-certs + rm -rf x509_callback-certs + rm -rf x509_verify-certs + +# XXX - should probably be in their own static lib +TEST_HELPER_SRC = test.c test_util.c +noinst_HEADERS = test.h +EXTRA_DIST += $(TEST_HELPER_SRC) +# Needed by test helper on MSVC +EXTRA_DIST += compat/mkstemp.c + # aeadtest TESTS += aeadtest.sh check_PROGRAMS += aeadtest aeadtest_SOURCES = aeadtest.c EXTRA_DIST += aeadtest.sh EXTRA_DIST += aeadtests.txt +EXTRA_DIST += aes_128_gcm_tests.txt +EXTRA_DIST += aes_192_gcm_tests.txt +EXTRA_DIST += aes_256_gcm_tests.txt +EXTRA_DIST += chacha20_poly1305_tests.txt +EXTRA_DIST += xchacha20_poly1305_tests.txt + +# aes +TESTS += aes_test +check_PROGRAMS += aes_test +aes_test_SOURCES = aes_test.c # aes_wrap TESTS += aes_wrap check_PROGRAMS += aes_wrap aes_wrap_SOURCES = aes_wrap.c +# apitest +TESTS += apitest +check_PROGRAMS += apitest +apitest_SOURCES = apitest.c +apitest_CPPFLAGS = $(AM_CPPFLAGS) -DCERTSDIR=\"$(srcdir)\" + # arc4randomforktest # Windows/mingw does not have fork, but Cygwin does. if !HOST_WIN @@ -45,63 +152,212 @@ arc4randomforktest_SOURCES = arc4randomforktest.c endif EXTRA_DIST += arc4randomforktest.sh +# asn1_string_to_utf8 +TESTS += asn1_string_to_utf8 +check_PROGRAMS += asn1_string_to_utf8 +asn1_string_to_utf8_SOURCES = asn1_string_to_utf8.c + +# asn1api +TESTS += asn1api +check_PROGRAMS += asn1api +asn1api_SOURCES = asn1api.c + +# asn1basic +TESTS += asn1basic +check_PROGRAMS += asn1basic +asn1basic_SOURCES = asn1basic.c + +# asn1complex +TESTS += asn1complex +check_PROGRAMS += asn1complex +asn1complex_SOURCES = asn1complex.c + # asn1evp TESTS += asn1evp check_PROGRAMS += asn1evp asn1evp_SOURCES = asn1evp.c +# asn1object +TESTS += asn1object +check_PROGRAMS += asn1object +asn1object_SOURCES = asn1object.c + +# asn1oct +TESTS += asn1oct +check_PROGRAMS += asn1oct +asn1oct_SOURCES = asn1oct.c + +# asn1string_copy +TESTS += asn1string_copy +check_PROGRAMS += asn1string_copy +asn1string_copy_SOURCES = asn1string_copy.c + # asn1test TESTS += asn1test check_PROGRAMS += asn1test asn1test_SOURCES = asn1test.c # asn1time -TESTS += asn1time check_PROGRAMS += asn1time asn1time_SOURCES = asn1time.c +if SMALL_TIME_T +TESTS += asn1time_small.test +XFAIL_TESTS += asn1time_small.test +else +TESTS += asn1time +endif +EXTRA_DIST += asn1time_small.test + +# asn1x509 +TESTS += asn1x509 +check_PROGRAMS += asn1x509 +asn1x509_SOURCES = asn1x509.c # base64test TESTS += base64test check_PROGRAMS += base64test base64test_SOURCES = base64test.c -# bftest -TESTS += bftest -check_PROGRAMS += bftest -bftest_SOURCES = bftest.c +# bf_test +TESTS += bf_test +check_PROGRAMS += bf_test +bf_test_SOURCES = bf_test.c -# biotest -# the BIO tests rely on resolver results that are OS and environment-specific -if ENABLE_EXTRATESTS -TESTS += biotest -check_PROGRAMS += biotest -biotest_SOURCES = biotest.c -endif +# bio_asn1 +TESTS += bio_asn1 +check_PROGRAMS += bio_asn1 +bio_asn1_SOURCES = bio_asn1.c + +# bio_chain +TESTS += bio_chain +check_PROGRAMS += bio_chain +bio_chain_SOURCES = bio_chain.c -# bnaddsub -TESTS += bnaddsub -check_PROGRAMS += bnaddsub -bnaddsub_SOURCES = bnaddsub.c +# bio_dump +TESTS += bio_dump +check_PROGRAMS += bio_dump +bio_dump_SOURCES = bio_dump.c -# bn_rand_interval -TESTS += bn_rand_interval -check_PROGRAMS += bn_rand_interval -bn_rand_interval_SOURCES = bn_rand_interval.c +# bio_host +# this test relies on resolver results that are OS and environment-specific +if ENABLE_EXTRATESTS +TESTS += bio_host +check_PROGRAMS += bio_host +bio_host_SOURCES = bio_host.c +endif -# bntest -TESTS += bntest -bntest_CPPFLAGS = $(AM_CPPFLAGS) -ULIBRESSL_INTERNAL -check_PROGRAMS += bntest -bntest_SOURCES = bntest.c +# bio_mem +TESTS += bio_mem +check_PROGRAMS += bio_mem +bio_mem_SOURCES = bio_mem.c + +# bn_add_sub +TESTS += bn_add_sub +check_PROGRAMS += bn_add_sub +bn_add_sub_SOURCES = bn_add_sub.c + +# bn_bits +TESTS += bn_bits +check_PROGRAMS += bn_bits +bn_bits_SOURCES = bn_bits.c + +# bn_cmp +TESTS += bn_cmp +check_PROGRAMS += bn_cmp +bn_cmp_SOURCES = bn_cmp.c + +# bn_convert +TESTS += bn_convert +check_PROGRAMS += bn_convert +bn_convert_SOURCES = bn_convert.c + +# bn_ffdh +TESTS += bn_ffdh +check_PROGRAMS += bn_ffdh +bn_ffdh_SOURCES = bn_ffdh.c + +# bn_gcd +TESTS += bn_gcd +check_PROGRAMS += bn_gcd +bn_gcd_SOURCES = bn_gcd.c + +# bn_general is a benchmark. + +# bn_isqrt +TESTS += bn_isqrt +check_PROGRAMS += bn_isqrt +bn_isqrt_SOURCES = bn_isqrt.c + +# bn_mod_exp +TESTS += bn_mod_exp +check_PROGRAMS += bn_mod_exp +bn_mod_exp_CPPFLAGS = $(AM_CPPFLAGS) -ULIBRESSL_INTERNAL +bn_mod_exp_SOURCES = bn_mod_exp.c + +# bn_mod_inverse +TESTS += bn_mod_inverse +check_PROGRAMS += bn_mod_inverse +bn_mod_inverse_SOURCES = bn_mod_inverse.c + +# bn_mod_sqrt +TESTS += bn_mod_sqrt +check_PROGRAMS += bn_mod_sqrt +bn_mod_sqrt_SOURCES = bn_mod_sqrt.c + +# bn_mont +TESTS += bn_mont +check_PROGRAMS += bn_mont +bn_mont_SOURCES = bn_mont.c + +# bn_mul_div is mostly benchmark code with non-standard timing dependencies, +# while the non-benchmark test coverage is not worth the cross-platform fallout. +## bn_mul_div +#if !HOST_WIN +#if !HOST_SOLARIS +#TESTS += bn_mul_div +#check_PROGRAMS += bn_mul_div +#bn_mul_div_SOURCES = bn_mul_div.c +#endif +#endif + +# bn_primes +TESTS += bn_primes +check_PROGRAMS += bn_primes +bn_primes_SOURCES = bn_primes.c + +# bn_print +TESTS += bn_print +check_PROGRAMS += bn_print +bn_print_SOURCES = bn_print.c + +# bn_shift +TESTS += bn_shift +check_PROGRAMS += bn_shift +bn_shift_SOURCES = bn_shift.c + +# bn_test +TESTS += bn_test +bn_test_CPPFLAGS = $(AM_CPPFLAGS) -ULIBRESSL_INTERNAL +check_PROGRAMS += bn_test +bn_test_SOURCES = bn_test.c # bn_to_string TESTS += bn_to_string check_PROGRAMS += bn_to_string bn_to_string_SOURCES = bn_to_string.c +# bn_unit +TESTS += bn_unit +check_PROGRAMS += bn_unit +bn_unit_SOURCES = bn_unit.c + +# bn_word +TESTS += bn_word +check_PROGRAMS += bn_word +bn_word_SOURCES = bn_word.c + # buffertest TESTS += buffertest -buffertest_CPPFLAGS = $(AM_CPPFLAGS) check_PROGRAMS += buffertest buffertest_SOURCES = buffertest.c @@ -110,6 +366,22 @@ TESTS += bytestringtest check_PROGRAMS += bytestringtest bytestringtest_SOURCES = bytestringtest.c +# x509_callbacks +if HAVE_PERL +# These tests use the same certificate corpus as x509_verify and can exceed +# the range of a 32-bit time_t. +if SMALL_TIME_T +XFAIL_TESTS += x509_callbacks.sh +endif +TESTS += x509_callbacks.sh +check_PROGRAMS += callback callbackfailures expirecallback +endif +callback_SOURCES = callback.c +callbackfailures_SOURCES = callbackfailures.c +expirecallback_SOURCES = expirecallback.c +EXTRA_DIST += x509_callbacks.sh +EXTRA_DIST += callback.pl + # casttest TESTS += casttest check_PROGRAMS += casttest @@ -124,14 +396,14 @@ chachatest_SOURCES = chachatest.c TESTS += cipher_list check_PROGRAMS += cipher_list cipher_list_SOURCES = cipher_list.c -noinst_HEADERS = tests.h +noinst_HEADERS += tests.h # cipherstest TESTS += cipherstest check_PROGRAMS += cipherstest cipherstest_SOURCES = cipherstest.c -# clienttest +## clienttest TESTS += clienttest check_PROGRAMS += clienttest clienttest_SOURCES = clienttest.c @@ -151,10 +423,19 @@ TESTS += constraints check_PROGRAMS += constraints constraints_SOURCES = constraints.c -# cts128test -TESTS += cts128test -check_PROGRAMS += cts128test -cts128test_SOURCES = cts128test.c +# crypto_test +TESTS += crypto_test +check_PROGRAMS += crypto_test +crypto_test_SOURCES = crypto_test.c + +# cttest +TESTS += cttest +check_PROGRAMS += cttest +cttest_SOURCES = cttest.c +cttest_CPPFLAGS = $(AM_CPPFLAGS) -DCTPATH=\"$(srcdir)\" +EXTRA_DIST += ctlog.conf +EXTRA_DIST += letsencrypt-r3.crt +EXTRA_DIST += libressl.org.crt # destest TESTS += destest @@ -171,13 +452,34 @@ TESTS += dsatest check_PROGRAMS += dsatest dsatest_SOURCES = dsatest.c -# dtlstest -if !HOST_WIN -TESTS += dtlstest.sh -check_PROGRAMS += dtlstest -dtlstest_SOURCES = dtlstest.c -endif -EXTRA_DIST += dtlstest.sh +# XXX this test is too flaky for CI. Disable it until it is fixed. +## dtlstest +#if !HOST_WIN +#TESTS += dtlstest.sh +#check_PROGRAMS += dtlstest +#dtlstest_SOURCES = dtlstest.c +#endif +#EXTRA_DIST += dtlstest.sh + +# dtls_handshake_msg_test +TESTS += dtls_handshake_msg_test +check_PROGRAMS += dtls_handshake_msg_test +dtls_handshake_msg_test_SOURCES = dtls_handshake_msg_test.c + +# dtls_wire_test +TESTS += dtls_wire_test +check_PROGRAMS += dtls_wire_test +dtls_wire_test_SOURCES = dtls_wire_test.c + +# ecc_cdh +TESTS += ecc_cdh +check_PROGRAMS += ecc_cdh +ecc_cdh_SOURCES = ecc_cdh.c + +# ec_asn1_test +TESTS += ec_asn1_test +check_PROGRAMS += ec_asn1_test +ec_asn1_test_SOURCES = ec_asn1_test.c # ec_point_conversion TESTS += ec_point_conversion @@ -199,10 +501,25 @@ TESTS += ectest check_PROGRAMS += ectest ectest_SOURCES = ectest.c -# enginetest -TESTS += enginetest -check_PROGRAMS += enginetest -enginetest_SOURCES = enginetest.c +# ed25519test +TESTS += ed25519test +check_PROGRAMS += ed25519test +ed25519test_SOURCES = ed25519test.c + +# err_test +TESTS += err_test +check_PROGRAMS += err_test +err_test_SOURCES = err_test.c + +# evp_ecx_test +TESTS += evp_ecx_test +check_PROGRAMS += evp_ecx_test +evp_ecx_test_SOURCES = evp_ecx_test.c + +# evp_pkey_cleanup +TESTS += evp_pkey_cleanup +check_PROGRAMS += evp_pkey_cleanup +evp_pkey_cleanup_SOURCES = evp_pkey_cleanup.c # evptest TESTS += evptest.sh @@ -211,6 +528,16 @@ evptest_SOURCES = evptest.c EXTRA_DIST += evptest.sh EXTRA_DIST += evptests.txt +# evp_test +TESTS += evp_test +check_PROGRAMS += evp_test +evp_test_SOURCES = evp_test.c + +# exdata_test +TESTS += exdata_test +check_PROGRAMS += exdata_test +exdata_test_SOURCES = exdata_test.c + # explicit_bzero # explicit_bzero relies on SA_ONSTACK, which is unavailable on Windows if !HOST_WIN @@ -224,14 +551,14 @@ endif endif endif -# exptest -TESTS += exptest -check_PROGRAMS += exptest -exptest_CPPFLAGS = $(AM_CPPFLAGS) -ULIBRESSL_INTERNAL -exptest_SOURCES = exptest.c +# exportertest +TESTS += exportertest +check_PROGRAMS += exportertest +exportertest_SOURCES = exportertest.c # freenull TESTS += freenull +freenull_CPPFLAGS = $(AM_CPPFLAGS) -ULIBRESSL_INTERNAL check_PROGRAMS += freenull freenull_SOURCES = freenull.c @@ -240,11 +567,6 @@ TESTS += gcm128test check_PROGRAMS += gcm128test gcm128test_SOURCES = gcm128test.c -# gost2814789t -TESTS += gost2814789t -check_PROGRAMS += gost2814789t -gost2814789t_SOURCES = gost2814789t.c - # handshake_table TESTS += handshake_table check_PROGRAMS += handshake_table @@ -270,31 +592,63 @@ TESTS += igetest check_PROGRAMS += igetest igetest_SOURCES = igetest.c -# keypairtest -TESTS += keypairtest.sh -check_PROGRAMS += keypairtest -keypairtest_SOURCES = keypairtest.c -EXTRA_DIST += keypairtest.sh +# init_pledge.c # key_schedule TESTS += key_schedule check_PROGRAMS += key_schedule key_schedule_SOURCES = key_schedule.c -# md4test -TESTS += md4test -check_PROGRAMS += md4test -md4test_SOURCES = md4test.c - -# md5test -TESTS += md5test -check_PROGRAMS += md5test -md5test_SOURCES = md5test.c +# keypairtest +TESTS += keypairtest.sh +keypairtest_CPPFLAGS = -I $(top_srcdir)/tls $(AM_CPPFLAGS) +check_PROGRAMS += keypairtest +keypairtest_SOURCES = keypairtest.c +EXTRA_DIST += keypairtest.sh -# mont -TESTS += mont -check_PROGRAMS += mont -mont_SOURCES = mont.c +# lhash_test +TESTS += lhash_test +check_PROGRAMS += lhash_test +lhash_test_SOURCES = lhash_test.c + +# md_test +TESTS += md_test +check_PROGRAMS += md_test +md_test_SOURCES = md_test.c $(TEST_HELPER_SRC) + +noinst_HEADERS += mlkem_tests_util.h +noinst_HEADERS += parse_test_file.h + +# mlkem_tests +TESTS += mlkem_tests.sh +check_PROGRAMS += mlkem_tests +mlkem_tests_SOURCES = mlkem_tests.c parse_test_file.c +EXTRA_DIST += mlkem_tests.sh mlkem_tests.bat +EXTRA_DIST += mlkem768_decap_tests.txt +EXTRA_DIST += mlkem768_encap_tests.txt +EXTRA_DIST += mlkem768_keygen_tests.txt +EXTRA_DIST += mlkem768_nist_decap_tests.txt +EXTRA_DIST += mlkem768_nist_keygen_tests.txt +EXTRA_DIST += mlkem1024_decap_tests.txt +EXTRA_DIST += mlkem1024_encap_tests.txt +EXTRA_DIST += mlkem1024_keygen_tests.txt +EXTRA_DIST += mlkem1024_nist_decap_tests.txt +EXTRA_DIST += mlkem1024_nist_keygen_tests.txt + +# mlkem_iteration_tests +TESTS += mlkem_iteration_tests +check_PROGRAMS += mlkem_iteration_tests +mlkem_iteration_tests_SOURCES = mlkem_iteration_tests.c mlkem_tests_util.c + +# mlkem_unittest +TESTS += mlkem_unittest +check_PROGRAMS += mlkem_unittest +mlkem_unittest_SOURCES = mlkem_unittest.c mlkem_tests_util.c + +# objectstest +TESTS += objectstest +check_PROGRAMS += objectstest +objectstest_SOURCES = objectstest.c # ocsp_test if ENABLE_EXTRATESTS @@ -334,27 +688,64 @@ TESTS += poly1305test check_PROGRAMS += poly1305test poly1305test_SOURCES = poly1305test.c +# policy +TESTS += policy +check_PROGRAMS += policy +policy_CPPFLAGS = $(AM_CPPFLAGS) -DCERTSDIR=\"$(srcdir)\" +policy_SOURCES = policy.c +EXTRA_DIST += policy_intermediate.pem +EXTRA_DIST += policy_intermediate_any.pem +EXTRA_DIST += policy_intermediate_duplicate.pem +EXTRA_DIST += policy_intermediate_invalid.pem +EXTRA_DIST += policy_intermediate_mapped.pem +EXTRA_DIST += policy_intermediate_mapped_any.pem +EXTRA_DIST += policy_intermediate_mapped_oid3.pem +EXTRA_DIST += policy_intermediate_require.pem +EXTRA_DIST += policy_intermediate_require1.pem +EXTRA_DIST += policy_intermediate_require2.pem +EXTRA_DIST += policy_intermediate_require_duplicate.pem +EXTRA_DIST += policy_intermediate_require_no_policies.pem +EXTRA_DIST += policy_leaf.pem +EXTRA_DIST += policy_leaf_any.pem +EXTRA_DIST += policy_leaf_duplicate.pem +EXTRA_DIST += policy_leaf_invalid.pem +EXTRA_DIST += policy_leaf_none.pem +EXTRA_DIST += policy_leaf_oid1.pem +EXTRA_DIST += policy_leaf_oid2.pem +EXTRA_DIST += policy_leaf_oid3.pem +EXTRA_DIST += policy_leaf_oid4.pem +EXTRA_DIST += policy_leaf_oid5.pem +EXTRA_DIST += policy_leaf_require.pem +EXTRA_DIST += policy_leaf_require1.pem +EXTRA_DIST += policy_root.pem +EXTRA_DIST += policy_root2.pem +EXTRA_DIST += policy_root_cross_inhibit_mapping.pem + # pq_test -TESTS += pq_test.sh +TESTS += pq_test check_PROGRAMS += pq_test pq_test_SOURCES = pq_test.c -EXTRA_DIST += pq_test.sh pq_test.bat -EXTRA_DIST += pq_expected.txt + +# quictest +TESTS += quictest.sh +check_PROGRAMS += quictest +quictest_SOURCES = quictest.c +EXTRA_DIST += quictest.sh quictest.bat # randtest TESTS += randtest check_PROGRAMS += randtest randtest_SOURCES = randtest.c -# rc2test -TESTS += rc2test -check_PROGRAMS += rc2test -rc2test_SOURCES = rc2test.c +# rc2_test +TESTS += rc2_test +check_PROGRAMS += rc2_test +rc2_test_SOURCES = rc2_test.c -# rc4test -TESTS += rc4test -check_PROGRAMS += rc4test -rc4test_SOURCES = rc4test.c +# rc4_test +TESTS += rc4_test +check_PROGRAMS += rc4_test +rc4_test_SOURCES = rc4_test.c # recordtest TESTS += recordtest @@ -366,46 +757,80 @@ TESTS += record_layer_test check_PROGRAMS += record_layer_test record_layer_test_SOURCES = record_layer_test.c +# renegotiation_test +TESTS += renegotiation_test.sh +check_PROGRAMS += renegotiation_test +renegotiation_test_SOURCES = renegotiation_test.c +EXTRA_DIST += renegotiation_test.sh renegotiation_test.bat + +# rfc3779 +TESTS += rfc3779 +rfc3779_CPPFLAGS = $(AM_CPPFLAGS) +check_PROGRAMS += rfc3779 +rfc3779_SOURCES = rfc3779.c + # rfc5280time check_PROGRAMS += rfc5280time rfc5280time_SOURCES = rfc5280time.c if SMALL_TIME_T TESTS += rfc5280time_small.test +XFAIL_TESTS += rfc5280time_small.test else TESTS += rfc5280time endif EXTRA_DIST += rfc5280time_small.test -# rmdtest -TESTS += rmdtest -check_PROGRAMS += rmdtest -rmdtest_SOURCES = rmdtest.c +# rmd_test +TESTS += rmd_test +check_PROGRAMS += rmd_test +rmd_test_SOURCES = rmd_test.c + +# rsa_method_test +TESTS += rsa_method_test +check_PROGRAMS += rsa_method_test +rsa_method_test_SOURCES = rsa_method_test.c + +# rsa_padding_test +TESTS += rsa_padding_test +check_PROGRAMS += rsa_padding_test +rsa_padding_test_SOURCES = rsa_padding_test.c # rsa_test TESTS += rsa_test check_PROGRAMS += rsa_test rsa_test_SOURCES = rsa_test.c +# server.c + # servertest TESTS += servertest.sh check_PROGRAMS += servertest servertest_SOURCES = servertest.c EXTRA_DIST += servertest.sh servertest.bat -# sha1test -TESTS += sha1test -check_PROGRAMS += sha1test -sha1test_SOURCES = sha1test.c - -# sha256test -TESTS += sha256test -check_PROGRAMS += sha256test -sha256test_SOURCES = sha256test.c +# sha_test +TESTS += sha_test +check_PROGRAMS += sha_test +sha_test_SOURCES = sha_test.c $(TEST_HELPER_SRC) + +# shutdowntest +TESTS += shutdowntest.sh +check_PROGRAMS += shutdowntest +shutdowntest_SOURCES = shutdowntest.c +EXTRA_DIST += shutdowntest.sh shutdowntest.bat + +# signertest +TESTS += signertest +check_PROGRAMS += signertest +signertest_CPPFLAGS = -I $(top_srcdir)/tls $(AM_CPPFLAGS) -DCERTSDIR=\"$(srcdir)\" +signertest_SOURCES = signertest.c +if !HAVE_PIPE2 +signertest_SOURCES += compat/pipe2.c +endif -# sha512test -TESTS += sha512test -check_PROGRAMS += sha512test -sha512test_SOURCES = sha512test.c +# sm2crypttest +# sm2evptest +# sm2sigtest # sm3test TESTS += sm3test @@ -423,22 +848,64 @@ ssl_get_shared_ciphers_CPPFLAGS = $(AM_CPPFLAGS) -DCERTSDIR=\"$(srcdir)\" check_PROGRAMS += ssl_get_shared_ciphers ssl_get_shared_ciphers_SOURCES = ssl_get_shared_ciphers.c +# ssl_kex +TESTS += ssl_kex +check_PROGRAMS += ssl_kex +ssl_kex_SOURCES = ssl_kex.c + # ssl_methods TESTS += ssl_methods check_PROGRAMS += ssl_methods ssl_methods_SOURCES = ssl_methods.c +# ssl_set_alpn_protos +TESTS += ssl_set_alpn_protos +check_PROGRAMS += ssl_set_alpn_protos +ssl_set_alpn_protos_SOURCES = ssl_set_alpn_protos.c + +# ssl_verify_param +TESTS += ssl_verify_param +check_PROGRAMS += ssl_verify_param +ssl_verify_param_SOURCES = ssl_verify_param.c + +# ssl_verify +if HAVE_PERL_IO_SOCKET_SSL_UTILS +TESTS += ssl_verify.sh +check_PROGRAMS += ssl_verify +endif +ssl_verify_SOURCES = ssl_verify.c +EXTRA_DIST += ssl_verify.sh +EXTRA_DIST += ssl_verify.bat +EXTRA_DIST += create-libressl-test-certs.pl + # ssl_versions TESTS += ssl_versions check_PROGRAMS += ssl_versions ssl_versions_SOURCES = ssl_versions.c +# ssl_tlstest +TESTS += ssl_tlstest.sh +check_PROGRAMS += ssl_tlstest +ssl_tlstest_SOURCES = ssl_tlstest.c +EXTRA_DIST += ssl_tlstest.sh + # ssltest TESTS += ssltest.sh check_PROGRAMS += ssltest ssltest_SOURCES = ssltest.c EXTRA_DIST += ssltest.sh ssltest.bat -EXTRA_DIST += testssl testssl.bat ca.pem server.pem +EXTRA_DIST += testssl testssl.bat +EXTRA_DIST += ca-int-ecdsa.crl ca-int-ecdsa.pem ca-int-rsa.crl ca-int-rsa.pem +EXTRA_DIST += ca-root-ecdsa.pem ca-root-rsa.pem +EXTRA_DIST += client1-ecdsa-chain.pem client1-ecdsa.pem client1-rsa-chain.pem +EXTRA_DIST += client1-rsa.pem client2-ecdsa-chain.pem client2-ecdsa.pem +EXTRA_DIST += client2-rsa-chain.pem client2-rsa.pem client3-ecdsa-chain.pem +EXTRA_DIST += client3-ecdsa.pem client3-rsa-chain.pem client3-rsa.pem +EXTRA_DIST += server1-ecdsa-chain.pem server1-ecdsa.pem +EXTRA_DIST += server1-rsa-chain.pem server1-rsa.pem server2-ecdsa-chain.pem +EXTRA_DIST += server2-ecdsa.pem server2-rsa-chain.pem server2-rsa.pem +EXTRA_DIST += server3-ecdsa-chain.pem server3-ecdsa.pem server3-rsa-chain.pem +EXTRA_DIST += server3-rsa.pem # testdsa TESTS += testdsa.sh @@ -497,6 +964,21 @@ TESTS += valid_handshakes_terminate check_PROGRAMS += valid_handshakes_terminate valid_handshakes_terminate_SOURCES = valid_handshakes_terminate.c +# x509_verify +if HAVE_PERL +# This test depends on certificate times that can exceed 32-bit time_t +# range, so match the existing time tests and expect failure there. +if SMALL_TIME_T +XFAIL_TESTS += x509_verify.sh +endif +TESTS += x509_verify.sh +check_PROGRAMS += x509_verify +endif +x509_verify_SOURCES = x509_verify.c +EXTRA_DIST += x509_verify.sh +EXTRA_DIST += make-dir-roots.pl +EXTRA_DIST += certs + # verifytest TESTS += verifytest check_PROGRAMS += verifytest @@ -512,12 +994,37 @@ TESTS += x509attribute check_PROGRAMS += x509attribute x509attribute_SOURCES = x509attribute.c +# x509_algor +TESTS += x509_algor +check_PROGRAMS += x509_algor +x509_algor_SOURCES = x509_algor.c + +# x509_asn1 +TESTS += x509_asn1 +check_PROGRAMS += x509_asn1 +x509_asn1_SOURCES = x509_asn1.c + +# x509_crl +TESTS += x509_crl +check_PROGRAMS += x509_crl +x509_crl_SOURCES = x509_crl.c + +# x509_extensions_test +TESTS += x509_extensions_test +check_PROGRAMS += x509_extensions_test +x509_extensions_test_SOURCES = x509_extensions_test.c + # x509_info TESTS += x509_info check_PROGRAMS += x509_info x509_info_SOURCES = x509_info.c -# x509name -TESTS += x509name -check_PROGRAMS += x509name -x509name_SOURCES = x509name.c +# x509_name_test +TESTS += x509_name_test +check_PROGRAMS += x509_name_test +x509_name_test_SOURCES = x509_name_test.c + +# x509req_ext +TESTS += x509req_ext +check_PROGRAMS += x509req_ext +x509req_ext_SOURCES = x509req_ext.c diff --git a/tests/aeadtest.sh b/tests/aeadtest.sh index 132b1fd5d3..bb09df2dbf 100755 --- a/tests/aeadtest.sh +++ b/tests/aeadtest.sh @@ -1,7 +1,30 @@ #!/bin/sh +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e TEST=./aeadtest if [ -e ./aeadtest.exe ]; then TEST=./aeadtest.exe +elif [ -e ./aeadtest.js ]; then + TEST="node ./aeadtest.js" fi -$TEST $srcdir/aeadtests.txt +$TEST aead $srcdir/aeadtests.txt +$TEST aes-128-gcm $srcdir/aes_128_gcm_tests.txt +$TEST aes-192-gcm $srcdir/aes_192_gcm_tests.txt +$TEST aes-256-gcm $srcdir/aes_256_gcm_tests.txt +$TEST chacha20-poly1305 $srcdir/chacha20_poly1305_tests.txt +$TEST xchacha20-poly1305 $srcdir/xchacha20_poly1305_tests.txt + diff --git a/tests/arc4randomforktest.sh b/tests/arc4randomforktest.sh index fe03068411..bbe76415a5 100755 --- a/tests/arc4randomforktest.sh +++ b/tests/arc4randomforktest.sh @@ -1,4 +1,19 @@ #!/bin/sh +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e ./arc4randomforktest ./arc4randomforktest -b diff --git a/tests/asn1time_small.test b/tests/asn1time_small.test new file mode 100755 index 0000000000..94fbebfc02 --- /dev/null +++ b/tests/asn1time_small.test @@ -0,0 +1,10 @@ +#!/bin/sh +echo 1..1 +TEST=./asn1time +if [ -e ./asn1time.exe ]; then + TEST=./asn1time.exe +fi + +# map test failure to XFAIL and success to XPASS +$TEST || echo -n "not " +echo "ok # this system is unable to represent times past 2038" diff --git a/tests/cmake/CMakeLists.txt b/tests/cmake/CMakeLists.txt new file mode 100644 index 0000000000..c3b7c4f3fc --- /dev/null +++ b/tests/cmake/CMakeLists.txt @@ -0,0 +1,52 @@ +# +# Copyright (c) 2023 Pierre Wendling +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +cmake_minimum_required(VERSION 3.5) + +project(LibreSSL_Consumer LANGUAGES C) + +find_package( + LibreSSL + CONFIG + REQUIRED + COMPONENTS Crypto SSL TLS +) + +set(RESULTS_TO_CHECK + "LIBRESSL_VERSION" + "LIBRESSL_FOUND" + "LIBRESSL_INCLUDE_DIR" + "LIBRESSL_LIBRARIES" + "LIBRESSL_CRYPTO_LIBRARY" + "LIBRESSL_SSL_LIBRARY" + "LIBRESSL_TLS_LIBRARY" +) + +foreach(RESULT_VAR IN LISTS RESULTS_TO_CHECK) + if(${RESULT_VAR}) + message(STATUS "${RESULT_VAR}: ${${RESULT_VAR}}") + else() + message(FATAL_ERROR "${RESULT_VAR} was not set by the package.") + endif() +endforeach() + +add_executable(crypto crypto.c) +target_link_libraries(crypto PRIVATE LibreSSL::Crypto) + +add_executable(ssl ssl.c) +target_link_libraries(ssl PRIVATE LibreSSL::SSL) + +add_executable(tls tls.c) +target_link_libraries(tls PRIVATE LibreSSL::TLS) diff --git a/tests/cmake/crypto.c b/tests/cmake/crypto.c new file mode 100644 index 0000000000..38381807ea --- /dev/null +++ b/tests/cmake/crypto.c @@ -0,0 +1,7 @@ +#include + +int main(void) { + OPENSSL_init_crypto(0, NULL); + OPENSSL_cleanup(); + return 0; +} diff --git a/tests/cmake/ssl.c b/tests/cmake/ssl.c new file mode 100644 index 0000000000..2123d6a399 --- /dev/null +++ b/tests/cmake/ssl.c @@ -0,0 +1,6 @@ +#include + +int main(void) { + SSL_library_init(); + return 0; +} diff --git a/tests/cmake/tls.c b/tests/cmake/tls.c new file mode 100644 index 0000000000..1493ab0a6b --- /dev/null +++ b/tests/cmake/tls.c @@ -0,0 +1,6 @@ +#include + +int main(void) { + tls_init(); + return 0; +} diff --git a/tests/compat/mkstemp.c b/tests/compat/mkstemp.c new file mode 100644 index 0000000000..fe3d15a980 --- /dev/null +++ b/tests/compat/mkstemp.c @@ -0,0 +1,52 @@ +/* +musl as a whole is licensed under the following standard MIT license: + +---------------------------------------------------------------------- +Copyright © 2005-2020 Rich Felker, et al. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------------------------- +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include + +int mkstemp(char *template) +{ + int fd; +retry: + if (!_mktemp(template)) return -1; + fd = open(template, O_RDWR | O_CREAT | O_EXCL, 0600); + if (fd >= 0) return fd; + if (errno == EEXIST) { + /* this is safe because mktemp verified + * that we have a valid template string */ + strcpy(template+strlen(template)-6, "XXXXXX"); + goto retry; + } + return -1; +} diff --git a/tests/compat/pipe2.c b/tests/compat/pipe2.c index 7600783d3c..3e79575924 100644 --- a/tests/compat/pipe2.c +++ b/tests/compat/pipe2.c @@ -18,9 +18,10 @@ static int setfd(int fd, int flag) { int rc = -1; if (flag & FD_CLOEXEC) { - HANDLE h = (HANDLE)_get_osfhandle(fd); - if (h != NULL) - rc = SetHandleInformation(h, HANDLE_FLAG_INHERIT, 0) == 0 ? -1 : 0; + /* fd is a Winsock SOCKET, not a CRT descriptor: use it as a + * handle directly rather than translating with _get_osfhandle. */ + HANDLE h = (HANDLE)(LONG_PTR)fd; + rc = SetHandleInformation(h, HANDLE_FLAG_INHERIT, 0) == 0 ? -1 : 0; } return rc; } @@ -35,6 +36,26 @@ static int setfl(int fd, int flag) return rc; } +/* + * Have open() temporarily use up file descriptors until reaching beyond the + * allocated sockets, then leak the ones conflicting with any of the latter. + * + * open()/close() are redefined to posix_open()/posix_close() in this file, + * which tag descriptors with the 0x80000000 bit. Use the raw CRT _open/_close + * so the values compare against the socket handles in the same namespace. + */ +static void create_issue_1069_sentinels(int socket_vector[2]) +{ + int fd = _open("CONIN$", O_RDONLY); + if (fd == -1 || (fd > socket_vector[0] && fd > socket_vector[1])) { + return; + } + create_issue_1069_sentinels(socket_vector); + if (fd != socket_vector[0] && fd != socket_vector[1]) { + _close(fd); + } +} + int socketpair(int domain, int type, int protocol, int socket_vector[2]) { if (domain != AF_UNIX || !(type & SOCK_STREAM) || protocol != PF_UNSPEC) @@ -54,8 +75,15 @@ int socketpair(int domain, int type, int protocol, int socket_vector[2]) .sin_port = 0, }; + struct sockaddr_in self, peer; int yes = 1, e; - if (setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, + + /* + * SO_REUSEADDR does not mean here what it means on unix: it lets any + * other process bind the same address and port and take over the + * rendezvous. SO_EXCLUSIVEADDRUSE is the flag that keeps the port ours. + */ + if (setsockopt(listener, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (void *)&yes, sizeof yes) == -1) goto err; @@ -84,7 +112,32 @@ int socketpair(int domain, int type, int protocol, int socket_vector[2]) if (socket_vector[1] == -1) goto err; + /* + * The listening port is enumerable by anything running as the user, so + * the connection we just accepted is not necessarily the one we made. + * Pair the two halves only if they are each other's peer. + */ + memset(&self, 0, sizeof self); + addrlen = sizeof self; + if (getsockname(socket_vector[0], (struct sockaddr *)&self, &addrlen) != 0) + goto err; + + memset(&peer, 0, sizeof peer); + addrlen = sizeof peer; + if (getpeername(socket_vector[1], (struct sockaddr *)&peer, &addrlen) != 0) + goto err; + + if (self.sin_family != peer.sin_family || + self.sin_addr.s_addr != peer.sin_addr.s_addr || + self.sin_port != peer.sin_port) { + WSASetLastError(WSAECONNREFUSED); + goto err; + } + closesocket(listener); + + create_issue_1069_sentinels(socket_vector); + return 0; err: diff --git a/tests/dtlstest.sh b/tests/dtlstest.sh index ef18cfcb0f..f0b71610d1 100755 --- a/tests/dtlstest.sh +++ b/tests/dtlstest.sh @@ -1,4 +1,19 @@ #!/bin/sh +# +# Copyright (c) 2021 Kinichiro Inoguchi +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e dtlstest_bin=./dtlstest @@ -10,4 +25,4 @@ if [ -z $srcdir ]; then srcdir=. fi -$dtlstest_bin $srcdir/server.pem $srcdir/server.pem $srcdir/ca.pem +$dtlstest_bin $srcdir/server1-rsa.pem $srcdir/server1-rsa.pem $srcdir/ca-int-rsa.pem diff --git a/tests/evptest.sh b/tests/evptest.sh index ba44d75153..ddd744543b 100755 --- a/tests/evptest.sh +++ b/tests/evptest.sh @@ -1,4 +1,19 @@ #!/bin/sh +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e TEST=./evptest if [ -e ./evptest.exe ]; then diff --git a/tests/keypairtest.sh b/tests/keypairtest.sh index 3c24869b42..f2c20c4fee 100755 --- a/tests/keypairtest.sh +++ b/tests/keypairtest.sh @@ -1,4 +1,19 @@ #!/bin/sh +# +# Copyright (c) 2018 Kinichiro Inoguchi +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e TEST=./keypairtest if [ -e ./keypairtest.exe ]; then @@ -9,4 +24,4 @@ if [ -z $srcdir ]; then srcdir=. fi -$TEST $srcdir/ca.pem $srcdir/server.pem $srcdir/server.pem +$TEST $srcdir/ca-root-rsa.pem $srcdir/server1-rsa.pem $srcdir/server1-rsa.pem diff --git a/tests/mlkem_tests.bat b/tests/mlkem_tests.bat new file mode 100644 index 0000000000..618c9e0234 --- /dev/null +++ b/tests/mlkem_tests.bat @@ -0,0 +1,63 @@ +@echo off +setlocal enabledelayedexpansion + +:: Copyright (c) 2025 Theo Beuhler +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set mlkem_tests_bin=%1 +set mlkem_tests_bin=%mlkem_tests_bin:/=\% +if not exist %mlkem_tests_bin% exit /b 1 + +%mlkem_tests_bin% mlkem768_decap_tests %srcdir%\mlkem768_decap_tests.txt +if !errorlevel! neq 0 ( + exit /b 1 +) +%mlkem_tests_bin% mlkem768_encap_tests %srcdir%\mlkem768_encap_tests.txt +if !errorlevel! neq 0 ( + exit /b 1 +) +%mlkem_tests_bin% mlkem768_keygen_tests %srcdir%\mlkem768_keygen_tests.txt +if !errorlevel! neq 0 ( + exit /b 1 +) +%mlkem_tests_bin% mlkem768_nist_decap_tests %srcdir%\mlkem768_nist_decap_tests.txt +if !errorlevel! neq 0 ( + exit /b 1 +) +%mlkem_tests_bin% mlkem768_nist_keygen_tests %srcdir%\mlkem768_nist_keygen_tests.txt +if !errorlevel! neq 0 ( + exit /b 1 +) +%mlkem_tests_bin% mlkem1024_decap_tests %srcdir%\mlkem1024_decap_tests.txt +if !errorlevel! neq 0 ( + exit /b 1 +) +%mlkem_tests_bin% mlkem1024_encap_tests %srcdir%\mlkem1024_encap_tests.txt +if !errorlevel! neq 0 ( + exit /b 1 +) +%mlkem_tests_bin% mlkem1024_keygen_tests %srcdir%\mlkem1024_keygen_tests.txt +if !errorlevel! neq 0 ( + exit /b 1 +) +%mlkem_tests_bin% mlkem1024_nist_decap_tests %srcdir%\mlkem1024_nist_decap_tests.txt +if !errorlevel! neq 0 ( + exit /b 1 +) +%mlkem_tests_bin% mlkem1024_nist_keygen_tests %srcdir%\mlkem1024_nist_keygen_tests.txt +if !errorlevel! neq 0 ( + exit /b 1 +) + +endlocal diff --git a/tests/mlkem_tests.sh b/tests/mlkem_tests.sh new file mode 100755 index 0000000000..cbc0f0b342 --- /dev/null +++ b/tests/mlkem_tests.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# +# Copyright (c) 2024 Theo Buehler +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -e + +TEST=./mlkem_tests +if [ -e ./mlkem_tests.exe ]; then + TEST=./mlkem_tests.exe +elif [ -e ./mlkem_tests.js ]; then + TEST="node ./mlkem_tests.js" +fi + +if [ -z $srcdir ]; then + srcdir=. +fi + +$TEST mlkem768_decap_tests $srcdir/mlkem768_decap_tests.txt +$TEST mlkem768_encap_tests $srcdir/mlkem768_encap_tests.txt +$TEST mlkem768_keygen_tests $srcdir/mlkem768_keygen_tests.txt +$TEST mlkem768_nist_decap_tests $srcdir/mlkem768_nist_decap_tests.txt +$TEST mlkem768_nist_keygen_tests $srcdir/mlkem768_nist_keygen_tests.txt +$TEST mlkem1024_decap_tests $srcdir/mlkem1024_decap_tests.txt +$TEST mlkem1024_encap_tests $srcdir/mlkem1024_encap_tests.txt +$TEST mlkem1024_keygen_tests $srcdir/mlkem1024_keygen_tests.txt +$TEST mlkem1024_nist_decap_tests $srcdir/mlkem1024_nist_decap_tests.txt +$TEST mlkem1024_nist_keygen_tests $srcdir/mlkem1024_nist_keygen_tests.txt diff --git a/tests/ocsptest.bat b/tests/ocsptest.bat index 2b6b66b34f..8d44ee0421 100644 --- a/tests/ocsptest.bat +++ b/tests/ocsptest.bat @@ -1,6 +1,19 @@ @echo off setlocal enabledelayedexpansion -REM ocspocsp_test_bin.bat + +:: Copyright (c) 2016 Kinichiro Inoguchi +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. set ocsp_test_bin=%1 set ocsp_test_bin=%ocsp_test_bin:/=\% diff --git a/tests/ocsptest.sh b/tests/ocsptest.sh index a1c266de82..71c975e4e3 100755 --- a/tests/ocsptest.sh +++ b/tests/ocsptest.sh @@ -1,4 +1,19 @@ #!/bin/sh +# +# Copyright (c) 2016 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e TEST=./ocsp_test if [ -e ./ocsp_test.exe ]; then diff --git a/tests/optionstest.c b/tests/optionstest.c index e860f0d9d9..af9dc1ef74 100644 --- a/tests/optionstest.c +++ b/tests/optionstest.c @@ -24,7 +24,6 @@ #include #include -#include /* Needed to keep apps.c happy... */ BIO *bio_err; diff --git a/tests/pidwraptest.sh b/tests/pidwraptest.sh index 04fb5c45bf..d5a2f71acf 100755 --- a/tests/pidwraptest.sh +++ b/tests/pidwraptest.sh @@ -1,4 +1,19 @@ #!/bin/sh +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + ./pidwraptest > pidwraptest.txt while read a b; do diff --git a/tests/pq_test.bat b/tests/pq_test.bat deleted file mode 100644 index 084f06d558..0000000000 --- a/tests/pq_test.bat +++ /dev/null @@ -1,15 +0,0 @@ -@echo off -setlocal enabledelayedexpansion -REM pq_test.bat - -set pq_test_bin=%1 -set pq_test_bin=%pq_test_bin:/=\% -if not exist %pq_test_bin% exit /b 1 - -set pq_output=pq_output.txt -if exist %pq_output% del %pq_output% - -%pq_test_bin% > %pq_output% -fc /b %pq_output% %srcdir%\pq_expected.txt - -endlocal diff --git a/tests/pq_test.sh b/tests/pq_test.sh deleted file mode 100755 index ab87bc7f19..0000000000 --- a/tests/pq_test.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -set -e -TEST=./pq_test -if [ -e ./pq_test.exe ]; then - TEST=./pq_test.exe -fi -$TEST | diff -b $srcdir/pq_expected.txt - diff --git a/tests/quictest.bat b/tests/quictest.bat new file mode 100644 index 0000000000..be731c893c --- /dev/null +++ b/tests/quictest.bat @@ -0,0 +1,27 @@ +@echo off +setlocal enabledelayedexpansion + +:: Copyright (c) 2022 Brent Cook +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set quictest_bin=%1 +set quictest_bin=%quictest_bin:/=\% +if not exist %quictest_bin% exit /b 1 + +%quictest_bin% %srcdir%\server1-rsa.pem %srcdir%\server1-rsa-chain.pem %srcdir%\ca-root-rsa.pem +if !errorlevel! neq 0 ( + exit /b 1 +) + +endlocal diff --git a/tests/quictest.sh b/tests/quictest.sh new file mode 100755 index 0000000000..407a66be43 --- /dev/null +++ b/tests/quictest.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Copyright (c) 2022 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -e + +quictest_bin=./quictest +if [ -e ./quictest.exe ]; then + quictest_bin=./quictest.exe +elif [ -e ./quictest.js ]; then + quictest_bin="node ./quictest.js" +fi + +if [ -z $srcdir ]; then + srcdir=. +fi + +$quictest_bin $srcdir/server1-rsa.pem $srcdir/server1-rsa-chain.pem $srcdir/ca-root-rsa.pem diff --git a/tests/renegotiation_test.bat b/tests/renegotiation_test.bat new file mode 100644 index 0000000000..6691a39eca --- /dev/null +++ b/tests/renegotiation_test.bat @@ -0,0 +1,27 @@ +@echo off +setlocal enabledelayedexpansion + +:: Copyright (c) 2025 Theo Beuhler +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set renegotiation_test_bin=%1 +set renegotiation_test_bin=%renegotiation_test_bin:/=\% +if not exist %renegotiation_test_bin% exit /b 1 + +%renegotiation_test_bin% %srcdir%\server1-rsa.pem %srcdir%\server1-rsa-chain.pem %srcdir%\ca-root-rsa.pem +if !errorlevel! neq 0 ( + exit /b 1 +) + +endlocal diff --git a/tests/renegotiation_test.sh b/tests/renegotiation_test.sh new file mode 100755 index 0000000000..8d963a2a38 --- /dev/null +++ b/tests/renegotiation_test.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Copyright (c) 2025 Theo Buehler +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -e + +renegotiation_test_bin=./renegotiation_test +if [ -e ./renegotiation_test.exe ]; then + renegotiation_test_bin=./renegotiation_test.exe +elif [ -e ./renegotiation_test.js ]; then + renegotiation_test_bin="node ./renegotiation_test.js" +fi + +if [ -z $srcdir ]; then + srcdir=. +fi + +$renegotiation_test_bin $srcdir/server1-rsa.pem $srcdir/server1-rsa-chain.pem $srcdir/ca-root-rsa.pem diff --git a/tests/rfc5280time_small.test b/tests/rfc5280time_small.test index 3730597863..61e5a054ed 100755 --- a/tests/rfc5280time_small.test +++ b/tests/rfc5280time_small.test @@ -1,10 +1,10 @@ #!/bin/sh -set -e -echo 1..2 -TEST=./rfc5280time -if [ -e ./rfc5280time.exe ]; then - TEST=./rfc5280time.exe +echo 1..1 +TEST=./rfc5280 +if [ -e ./rfc5280.exe ]; then + TEST=./rfc5280.exe fi -$TEST -echo "ok 1" -echo "ok 2 - rfc5280time_64-bit # SKIP this system is unable to represent times past 2038" + +# map test failure to XFAIL and success to XPASS +$TEST || echo -n "not " +echo "ok # this system is unable to represent times past 2038" diff --git a/tests/servertest.bat b/tests/servertest.bat index 8c9bd97c40..d72d8de90b 100644 --- a/tests/servertest.bat +++ b/tests/servertest.bat @@ -1,12 +1,25 @@ @echo off setlocal enabledelayedexpansion -REM servertest.bat + +:: Copyright (c) 2017 Kinichiro Inoguchi +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. set servertest_bin=%1 set servertest_bin=%servertest_bin:/=\% if not exist %servertest_bin% exit /b 1 -%servertest_bin% %srcdir%\server.pem %srcdir%\server.pem %srcdir%\ca.pem +%servertest_bin% %srcdir%\server1-rsa.pem %srcdir%\server1-rsa-chain.pem %srcdir%\ca-root.pem if !errorlevel! neq 0 ( exit /b 1 ) diff --git a/tests/servertest.sh b/tests/servertest.sh index f1efeb0581..4770e4b486 100755 --- a/tests/servertest.sh +++ b/tests/servertest.sh @@ -1,13 +1,30 @@ #!/bin/sh +# +# Copyright (c) 2017 Kinichiro Inoguchi +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e servertest_bin=./servertest if [ -e ./servertest.exe ]; then servertest_bin=./servertest.exe +elif [ -e ./servertest.js ]; then + servertest_bin="node ./servertest.js" fi if [ -z $srcdir ]; then srcdir=. fi -$servertest_bin $srcdir/server.pem $srcdir/server.pem $srcdir/ca.pem +$servertest_bin $srcdir/server1-rsa.pem $srcdir/server1-rsa-chain.pem $srcdir/ca-root-rsa.pem diff --git a/tests/shutdowntest.bat b/tests/shutdowntest.bat new file mode 100644 index 0000000000..d722fa01dc --- /dev/null +++ b/tests/shutdowntest.bat @@ -0,0 +1,27 @@ +@echo off +setlocal enabledelayedexpansion + +:: Copyright (c) 2024 Theo Beuhler +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set shutdowntest_bin=%1 +set shutdowntest_bin=%shutdowntest_bin:/=\% +if not exist %shutdowntest_bin% exit /b 1 + +%shutdowntest_bin% %srcdir%\server1-rsa.pem %srcdir%\server1-rsa-chain.pem %srcdir%\ca-root-rsa.pem +if !errorlevel! neq 0 ( + exit /b 1 +) + +endlocal diff --git a/tests/shutdowntest.sh b/tests/shutdowntest.sh new file mode 100755 index 0000000000..b3c98dafe6 --- /dev/null +++ b/tests/shutdowntest.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Copyright (c) 2024 Theo Buehler +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -e + +shutdowntest_bin=./shutdowntest +if [ -e ./shutdowntest.exe ]; then + shutdowntest_bin=./shutdowntest.exe +elif [ -e ./shutdowntest.js ]; then + shutdowntest_bin="node ./shutdowntest.js" +fi + +if [ -z $srcdir ]; then + srcdir=. +fi + +$shutdowntest_bin $srcdir/server1-rsa.pem $srcdir/server1-rsa-chain.pem $srcdir/ca-root-rsa.pem diff --git a/tests/ssl_tlstest.sh b/tests/ssl_tlstest.sh new file mode 100755 index 0000000000..cde8a4f8ef --- /dev/null +++ b/tests/ssl_tlstest.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# +# Copyright (c) 2026 Kenjiro Nakayama +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -e + +if [ $# -ge 1 ]; then + ssl_tlstest_bin=$1 +else + ssl_tlstest_bin=./ssl_tlstest + if [ -e ./ssl_tlstest.exe ]; then + ssl_tlstest_bin=./ssl_tlstest.exe + elif [ -e ./ssl_tlstest.js ]; then + ssl_tlstest_bin=./ssl_tlstest.js + fi +fi + +if [ -z "$srcdir" ]; then + srcdir=. +fi + +case "$ssl_tlstest_bin" in +*.js) + node "$ssl_tlstest_bin" "$srcdir/server1-rsa.pem" \ + "$srcdir/server1-rsa-chain.pem" "$srcdir/ca-root-rsa.pem" + ;; +*) + "$ssl_tlstest_bin" "$srcdir/server1-rsa.pem" \ + "$srcdir/server1-rsa-chain.pem" "$srcdir/ca-root-rsa.pem" + ;; +esac diff --git a/tests/ssl_verify.bat b/tests/ssl_verify.bat new file mode 100644 index 0000000000..1b8c1dc183 --- /dev/null +++ b/tests/ssl_verify.bat @@ -0,0 +1,42 @@ +@echo off +setlocal + +:: Copyright (c) 2026 Kenjiro Nakayama +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +if "%~1" == "" exit /b 1 + +set "ssl_verify_bin=%~1" +set "ssl_verify_bin=%ssl_verify_bin:/=\%" +if not exist "%ssl_verify_bin%" exit /b 1 + +if not defined srcdir set "srcdir=." +if not defined PERL set "PERL=perl" + +set "workdir=ssl_verify-certs" +if exist "%workdir%" rmdir /s /q "%workdir%" +mkdir "%workdir%" || exit /b 1 +pushd "%workdir%" || exit /b 1 + +set "status=1" +"%PERL%" "%srcdir%/create-libressl-test-certs.pl" +if errorlevel 1 goto cleanup + +"%ssl_verify_bin%" +set "status=%errorlevel%" + +:cleanup +popd +rmdir /s /q "%workdir%" +exit /b %status% diff --git a/tests/ssl_verify.sh b/tests/ssl_verify.sh new file mode 100755 index 0000000000..bb090dbc22 --- /dev/null +++ b/tests/ssl_verify.sh @@ -0,0 +1,67 @@ +#!/bin/sh +# +# Copyright (c) 2026 Kenjiro Nakayama +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -e + +if [ -z "$srcdir" ]; then + srcdir=. +fi + +if [ -z "$PERL" ]; then + PERL=perl +fi + +case "$srcdir" in +/*) + create_certs="$srcdir/create-libressl-test-certs.pl" + ;; +*) + create_certs="`pwd`/$srcdir/create-libressl-test-certs.pl" + ;; +esac + +if [ $# -ge 1 ]; then + verify_bin=$1 +else + verify_bin="`pwd`/ssl_verify" + if [ -e ./ssl_verify.exe ]; then + verify_bin="`pwd`/ssl_verify.exe" + fi +fi + +workdir=ssl_verify-certs + +cleanup() +{ + rm -rf "$workdir" +} +trap cleanup EXIT + +rm -rf "$workdir" +mkdir "$workdir" + +( + cd "$workdir" + "$PERL" "$create_certs" + case "$verify_bin" in + *.js) + node "$verify_bin" + ;; + *) + "$verify_bin" + ;; + esac +) diff --git a/tests/ssltest.bat b/tests/ssltest.bat index f068cb00de..17f912f017 100644 --- a/tests/ssltest.bat +++ b/tests/ssltest.bat @@ -1,6 +1,19 @@ @echo off setlocal enabledelayedexpansion -REM ssltest.bat + +:: Copyright (c) 2016 Kinichiro Inoguchi +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. set ssltest_bin=%1 set ssltest_bin=%ssltest_bin:/=\% @@ -10,8 +23,8 @@ set openssl_bin=%2 set openssl_bin=%openssl_bin:/=\% if not exist %openssl_bin% exit /b 1 -%srcdir%\testssl.bat %srcdir%\server.pem %srcdir%\server.pem %srcdir%\ca.pem ^ - %ssltest_bin% %openssl_bin% +%srcdir%\testssl.bat %srcdir%\server1-rsa.pem %srcdir%\server1-rsa-chain.pem ^ + %srcdir%\ca-root-rsa.pem %ssltest_bin% %openssl_bin% if !errorlevel! neq 0 ( exit /b 1 ) diff --git a/tests/ssltest.sh b/tests/ssltest.sh index 28da3acbb3..4ec48847ab 100755 --- a/tests/ssltest.sh +++ b/tests/ssltest.sh @@ -1,20 +1,41 @@ #!/bin/sh +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e ssltest_bin=./ssltest if [ -e ./ssltest.exe ]; then ssltest_bin=./ssltest.exe +elif [ -e ./ssltest.js ]; then + ssltest_bin="node ./ssltest.js" fi if [ -d ../apps/openssl ]; then openssl_bin=../apps/openssl/openssl if [ -e ../apps/openssl/openssl.exe ]; then openssl_bin=../apps/openssl/openssl.exe + elif [ -e ../apps/openssl/openssl.js ]; then + openssl_bin="node ../apps/openssl/openssl.js" fi else openssl_bin=../apps/openssl if [ -e ../apps/openssl.exe ]; then openssl_bin=../apps/openssl.exe + elif [ -e ../apps/openssl.js ]; then + openssl_bin="node ../apps/openssl.js" fi fi @@ -22,5 +43,6 @@ if [ -z $srcdir ]; then srcdir=. fi -$srcdir/testssl $srcdir/server.pem $srcdir/server.pem $srcdir/ca.pem \ - $ssltest_bin $openssl_bin +$srcdir/testssl $srcdir/server1-rsa.pem $srcdir/server1-rsa-chain.pem \ + $srcdir/ca-root-rsa.pem \ + "$ssltest_bin" "$openssl_bin" diff --git a/tests/testdsa.bat b/tests/testdsa.bat index 898ded86f7..df5330572e 100644 --- a/tests/testdsa.bat +++ b/tests/testdsa.bat @@ -1,9 +1,21 @@ @echo off setlocal enabledelayedexpansion -REM testdsa.bat - -REM # Test DSA certificate generation of openssl +:: Copyright (c) 2016 Kinichiro Inoguchi +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +:: Test DSA certificate generation of openssl set openssl_bin=%1 set openssl_bin=%openssl_bin:/=\% diff --git a/tests/testdsa.sh b/tests/testdsa.sh index 7ecb8efb4a..230a1f8948 100755 --- a/tests/testdsa.sh +++ b/tests/testdsa.sh @@ -1,6 +1,18 @@ #!/bin/sh -# $OpenBSD: testdsa.sh,v 1.1 2014/08/26 17:50:07 jsing Exp $ - +# +# Copyright (c) 2015 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #Test DSA certificate generation of openssl diff --git a/tests/testenc.bat b/tests/testenc.bat index 93dfc0c8b3..fa14620937 100644 --- a/tests/testenc.bat +++ b/tests/testenc.bat @@ -1,33 +1,49 @@ @echo off setlocal enabledelayedexpansion -REM testenc.bat -set test=p +:: Copyright (c) 2016 Kinichiro Inoguchi +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set test=P set openssl_bin=%1 set openssl_bin=%openssl_bin:/=\% if not exist %openssl_bin% exit /b 1 +echo copy %srcdir%\openssl.cnf %test% copy %srcdir%\openssl.cnf %test% echo cat -%openssl_bin% enc -in %test% -out %test%.cipher -%openssl_bin% enc -in %test%.cipher -out %test%.clear -fc /b %test% %test%.clear +echo %openssl_bin% enc -in %test% -out %test%.CIPHER +%openssl_bin% enc -in %test% -out %test%.CIPHER +%openssl_bin% enc -in %test%.CIPHER -out %test%.CLEAR +fc /b %test% %test%.CLEAR if !errorlevel! neq 0 ( exit /b 1 ) else ( - del %test%.cipher %test%.clear + del %test%.CIPHER %test%.CLEAR ) echo base64 -%openssl_bin% enc -a -e -in %test% -out %test%.cipher -%openssl_bin% enc -a -d -in %test%.cipher -out %test%.clear -fc /b %test% %test%.clear +%openssl_bin% enc -a -e -in %test% -out %test%.CIPHER +%openssl_bin% enc -a -d -in %test%.CIPHER -out %test%.CLEAR +dir +fc /b %test% %test%.CLEAR if !errorlevel! neq 0 ( exit /b 1 ) else ( - del %test%.cipher %test%.clear + del %test%.CIPHER %test%.CLEAR ) for %%i in ( @@ -45,23 +61,23 @@ for %%i in ( rc4 rc4-40 ) do ( echo %%i - %openssl_bin% %%i -e -k test -in %test% -out %test%.%%i.cipher - %openssl_bin% %%i -d -k test -in %test%.%%i.cipher -out %test%.%%i.clear - fc /b %test% %test%.%%i.clear + %openssl_bin% %%i -e -k test -in %test% -out %test%.%%i.CIPHER + %openssl_bin% %%i -d -k test -in %test%.%%i.CIPHER -out %test%.%%i.CLEAR + fc /b %test% %test%.%%i.CLEAR if !errorlevel! neq 0 ( exit /b 1 ) else ( - del %test%.%%i.cipher %test%.%%i.clear + del %test%.%%i.CIPHER %test%.%%i.CLEAR ) echo %%i base64 - %openssl_bin% %%i -a -e -k test -in %test% -out %test%.%%i.cipher - %openssl_bin% %%i -a -d -k test -in %test%.%%i.cipher -out %test%.%%i.clear - fc /b %test% %test%.%%i.clear + %openssl_bin% %%i -a -e -k test -in %test% -out %test%.%%i.CIPHER + %openssl_bin% %%i -a -d -k test -in %test%.%%i.CIPHER -out %test%.%%i.CLEAR + fc /b %test% %test%.%%i.CLEAR if !errorlevel! neq 0 ( exit /b 1 ) else ( - del %test%.%%i.cipher %test%.%%i.clear + del %test%.%%i.CIPHER %test%.%%i.CLEAR ) ) diff --git a/tests/testenc.sh b/tests/testenc.sh index 63bce34de7..418e48d3e2 100755 --- a/tests/testenc.sh +++ b/tests/testenc.sh @@ -1,5 +1,18 @@ #!/bin/sh -# $OpenBSD: testenc.sh,v 1.1 2014/08/26 17:50:07 jsing Exp $ +# +# Copyright (c) 2015 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. test=p if [ -d ../apps/openssl ]; then diff --git a/tests/testrsa.bat b/tests/testrsa.bat index 59c3b5d43e..af59aadc76 100644 --- a/tests/testrsa.bat +++ b/tests/testrsa.bat @@ -1,9 +1,21 @@ @echo off setlocal enabledelayedexpansion -REM testrsa.bat - -REM # Test RSA certificate generation of openssl +:: Copyright (c) 2016 Kinichiro Inoguchi +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +:: Test RSA certificate generation of openssl set openssl_bin=%1 set openssl_bin=%openssl_bin:/=\% diff --git a/tests/testrsa.sh b/tests/testrsa.sh index e64499935e..afbc61068e 100755 --- a/tests/testrsa.sh +++ b/tests/testrsa.sh @@ -1,6 +1,18 @@ #!/bin/sh -# $OpenBSD: testrsa.sh,v 1.1 2014/08/26 17:50:07 jsing Exp $ - +# +# Copyright (c) 2015 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #Test RSA certificate generation of openssl diff --git a/tests/testssl.bat b/tests/testssl.bat index 4c3ca1b649..35a789a781 100644 --- a/tests/testssl.bat +++ b/tests/testssl.bat @@ -1,6 +1,19 @@ -@echo off +@echo on setlocal enabledelayedexpansion -REM testssl.bat + +:: Copyright (c) 2016 Kinichiro Inoguchi +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. set key=%1 set cert=%2 @@ -88,8 +101,7 @@ for /f "usebackq" %%s in (`%openssl% no-dh`) do set nodh=%%s if %nodh%==no-dh ( echo skipping anonymous DH tests ) else ( - echo test tls1 with 1024bit anonymous DH, multiple handshakes - %ssltest% -v -bio_pair -tls1 -cipher ADH -dhe1024dsa -num 10 -f -time %extra% & if !errorlevel! neq 0 exit /b 1 + echo skipping tls1 tests. ) REM #for /f "usebackq" %%s in (`%openssl% no-rsa`) do set norsa=%%s @@ -112,24 +124,24 @@ REM # REM # DTLS tests REM # -echo test dtlsv1 -%ssltest% -dtls1 %extra% & if !errorlevel! neq 0 exit /b 1 +echo test dtlsv1_2 +%ssltest% -dtls1_2 %extra% & if !errorlevel! neq 0 exit /b 1 -echo test dtlsv1 with server authentication -%ssltest% -dtls1 -server_auth %CA% %extra% & if !errorlevel! neq 0 exit /b 1 +echo test dtlsv1_2 with server authentication +%ssltest% -dtls1_2 -server_auth %CA% %extra% & if !errorlevel! neq 0 exit /b 1 -echo test dtlsv1 with client authentication -%ssltest% -dtls1 -client_auth %CA% %extra% & if !errorlevel! neq 0 exit /b 1 +echo test dtlsv1_2 with client authentication +%ssltest% -dtls1_2 -client_auth %CA% %extra% & if !errorlevel! neq 0 exit /b 1 -echo test dtlsv1 with both client and server authentication -%ssltest% -dtls1 -server_auth -client_auth %CA% %extra% & if !errorlevel! neq 0 exit /b 1 +echo test dtlsv1_2 with both client and server authentication +%ssltest% -dtls1_2 -server_auth -client_auth %CA% %extra% & if !errorlevel! neq 0 exit /b 1 echo "Testing DTLS ciphersuites" for %%p in ( SSLv3 ) do ( echo "Testing ciphersuites for %%p" for /f "usebackq" %%c in (`%openssl% ciphers -v "RSA+%%p:-RC4" ^| find "%%p"`) do ( echo "Testing %%c" - %ssltest% -cipher %%c -dtls1 + %ssltest% -cipher %%c -dtls1_2 if !errorlevel! neq 0 ( echo "Failed %%c" exit /b 1 @@ -141,19 +153,19 @@ REM # REM # ALPN tests REM # echo "Testing ALPN..." -%ssltest% -bio_pair -tls1 -alpn_client foo -alpn_server bar & if !errorlevel! neq 0 exit /b 1 -%ssltest% -bio_pair -tls1 -alpn_client foo -alpn_server foo ^ +%ssltest% -bio_pair -alpn_client foo -alpn_server bar & if !errorlevel! neq 0 exit /b 1 +%ssltest% -bio_pair -alpn_client foo -alpn_server foo ^ -alpn_expected foo & if !errorlevel! neq 0 exit /b 1 -%ssltest% -bio_pair -tls1 -alpn_client foo,bar -alpn_server foo ^ +%ssltest% -bio_pair -alpn_client foo,bar -alpn_server foo ^ -alpn_expected foo & if !errorlevel! neq 0 exit /b 1 -%ssltest% -bio_pair -tls1 -alpn_client bar,foo -alpn_server foo ^ +%ssltest% -bio_pair -alpn_client bar,foo -alpn_server foo ^ -alpn_expected foo & if !errorlevel! neq 0 exit /b 1 -%ssltest% -bio_pair -tls1 -alpn_client bar,foo -alpn_server foo,bar ^ +%ssltest% -bio_pair -alpn_client bar,foo -alpn_server foo,bar ^ -alpn_expected foo & if !errorlevel! neq 0 exit /b 1 -%ssltest% -bio_pair -tls1 -alpn_client bar,foo -alpn_server bar,foo ^ +%ssltest% -bio_pair -alpn_client bar,foo -alpn_server bar,foo ^ -alpn_expected bar & if !errorlevel! neq 0 exit /b 1 -%ssltest% -bio_pair -tls1 -alpn_client foo,bar -alpn_server bar,foo ^ +%ssltest% -bio_pair -alpn_client foo,bar -alpn_server bar,foo ^ -alpn_expected bar & if !errorlevel! neq 0 exit /b 1 -%ssltest% -bio_pair -tls1 -alpn_client baz -alpn_server bar,foo & if !errorlevel! neq 0 exit /b 1 +%ssltest% -bio_pair -alpn_client baz -alpn_server bar,foo & if !errorlevel! neq 0 exit /b 1 endlocal diff --git a/tests/tlstest.bat b/tests/tlstest.bat index 25664cf08a..204201b51c 100644 --- a/tests/tlstest.bat +++ b/tests/tlstest.bat @@ -1,12 +1,25 @@ @echo off setlocal enabledelayedexpansion -REM tlstest.bat + +:: Copyright (c) 2017 Brent Cook +:: +:: Permission to use, copy, modify, and distribute this software for any +:: purpose with or without fee is hereby granted, provided that the above +:: copyright notice and this permission notice appear in all copies. +:: +:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. set tlstest_bin=%1 set tlstest_bin=%tlstest_bin:/=\% if not exist %tlstest_bin% exit /b 1 -%tlstest_bin% %srcdir%\ca.pem %srcdir%\server.pem %srcdir%\server.pem +%tlstest_bin% %srcdir%\ca-root-rsa.pem %srcdir%\server1-rsa-chain.pem %srcdir%\server1-rsa.pem if !errorlevel! neq 0 ( exit /b 1 ) diff --git a/tests/tlstest.sh b/tests/tlstest.sh index 25f8647b7f..4a5aff613b 100755 --- a/tests/tlstest.sh +++ b/tests/tlstest.sh @@ -1,4 +1,19 @@ #!/bin/sh +# +# Copyright (c) 2015 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e tlstest_bin=./tlstest @@ -10,4 +25,4 @@ if [ -z $srcdir ]; then srcdir=. fi -$tlstest_bin $srcdir/ca.pem $srcdir/server.pem $srcdir/server.pem +$tlstest_bin $srcdir/ca-root-rsa.pem $srcdir/server1-rsa-chain.pem $srcdir/server1-rsa.pem diff --git a/tests/x509_callbacks.sh b/tests/x509_callbacks.sh new file mode 100755 index 0000000000..a48e638115 --- /dev/null +++ b/tests/x509_callbacks.sh @@ -0,0 +1,94 @@ +#!/bin/sh +# +# Copyright (c) 2026 Kenjiro Nakayama +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -e + +if [ -z "$srcdir" ]; then + srcdir=. +fi + +if [ -z "$PERL" ]; then + PERL=perl +fi + +case "$srcdir" in +/*) + certs_path="$srcdir/certs" + ca_file="$srcdir/../cert.pem" + callback_check="$srcdir/callback.pl" + make_dir_roots="$srcdir/make-dir-roots.pl" + openssl_conf="$srcdir/openssl.cnf" + ;; +*) + certs_path="`pwd`/$srcdir/certs" + ca_file="`pwd`/$srcdir/../cert.pem" + callback_check="`pwd`/$srcdir/callback.pl" + make_dir_roots="`pwd`/$srcdir/make-dir-roots.pl" + openssl_conf="`pwd`/$srcdir/openssl.cnf" + ;; +esac + +if [ $# -ge 3 ]; then + callback_bin=$1 + callbackfailures_bin=$2 + expirecallback_bin=$3 +else + callback_bin="`pwd`/callback" + callbackfailures_bin="`pwd`/callbackfailures" + expirecallback_bin="`pwd`/expirecallback" + if [ -e ./callback.exe ]; then + callback_bin="`pwd`/callback.exe" + callbackfailures_bin="`pwd`/callbackfailures.exe" + expirecallback_bin="`pwd`/expirecallback.exe" + fi +fi + +if [ $# -ge 4 ]; then + openssl_dir=`dirname "$4"` +elif [ -d ../apps/openssl ]; then + openssl_dir="`pwd`/../apps/openssl" +else + openssl_dir="`pwd`/../apps" +fi + +PATH="$openssl_dir:$PATH" +export PATH + +if [ -f "$openssl_conf" ]; then + OPENSSL_CONF="$openssl_conf" + export OPENSSL_CONF +fi + +workdir=x509_callback-certs + +cleanup() +{ + rm -rf "$workdir" +} +trap cleanup EXIT + +rm -rf "$workdir" +mkdir "$workdir" + +"$PERL" "$make_dir_roots" "$certs_path" "$workdir" + +( + cd "$workdir" + "$callback_bin" "$certs_path" + "$PERL" "$callback_check" callback.out + "$callbackfailures_bin" "$certs_path" "$ca_file" + "$expirecallback_bin" "$certs_path" +) diff --git a/tests/x509_verify.sh b/tests/x509_verify.sh new file mode 100755 index 0000000000..b43063fef2 --- /dev/null +++ b/tests/x509_verify.sh @@ -0,0 +1,81 @@ +#!/bin/sh +# +# Copyright (c) 2026 Kenjiro Nakayama +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +set -e + +if [ -z "$srcdir" ]; then + srcdir=. +fi + +if [ -z "$PERL" ]; then + PERL=perl +fi + +case "$srcdir" in +/*) + certs_path="$srcdir/certs" + make_dir_roots="$srcdir/make-dir-roots.pl" + openssl_conf="$srcdir/openssl.cnf" + ;; +*) + certs_path="`pwd`/$srcdir/certs" + make_dir_roots="`pwd`/$srcdir/make-dir-roots.pl" + openssl_conf="`pwd`/$srcdir/openssl.cnf" + ;; +esac + +if [ $# -ge 1 ]; then + verify_bin=$1 +else + verify_bin="`pwd`/x509_verify" + if [ -e ./x509_verify.exe ]; then + verify_bin="`pwd`/x509_verify.exe" + fi +fi + +if [ $# -ge 2 ]; then + openssl_dir=`dirname "$2"` +elif [ -d ../apps/openssl ]; then + openssl_dir="`pwd`/../apps/openssl" +else + openssl_dir="`pwd`/../apps" +fi + +PATH="$openssl_dir:$PATH" +export PATH + +if [ -f "$openssl_conf" ]; then + OPENSSL_CONF="$openssl_conf" + export OPENSSL_CONF +fi + +workdir=x509_verify-certs + +cleanup() +{ + rm -rf "$workdir" +} +trap cleanup EXIT + +rm -rf "$workdir" +mkdir "$workdir" + +"$PERL" "$make_dir_roots" "$certs_path" "$workdir" + +( + cd "$workdir" + "$verify_bin" "$certs_path" +) diff --git a/tls/CMakeLists.txt b/tls/CMakeLists.txt index 9aa10e1ba6..258cd95592 100644 --- a/tls/CMakeLists.txt +++ b/tls/CMakeLists.txt @@ -1,3 +1,18 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set( TLS_SRC tls.c @@ -7,64 +22,84 @@ set( tls_conninfo.c tls_keypair.c tls_server.c + tls_signer.c tls_ocsp.c tls_peer.c tls_util.c tls_verify.c ) +set(TLS_COMPAT_SRC empty.c) + if(WIN32) set( TLS_SRC ${TLS_SRC} - compat/ftruncate.c - compat/pread.c - compat/pwrite.c ) -endif() -if(NOT "${OPENSSLDIR}" STREQUAL "") - add_definitions(-DTLS_DEFAULT_CA_FILE=\"${OPENSSLDIR}/cert.pem\") -else() - add_definitions(-DTLS_DEFAULT_CA_FILE=\"${CMAKE_INSTALL_PREFIX}/etc/ssl/cert.pem\") + set(TLS_COMPAT_SRC ${TLS_COMPAT_SRC} compat/pread.c) + set(TLS_COMPAT_SRC ${TLS_COMPAT_SRC} compat/pwrite.c) endif() +add_definitions(-DTLS_DEFAULT_CA_FILE=\"${TLS_DEFAULT_CA_FILE}\") + file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/tls.sym DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -if(LIBTLS_EXTRA_EXPORT) - list(SORT LIBTLS_EXTRA_EXPORT) - foreach(SYM IN LISTS LIBTLS_EXTRA_EXPORT) - file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/tls.sym "${SYM}\n") - endforeach() -endif() -add_library(tls_obj OBJECT ${TLS_SRC}) -target_include_directories(tls_obj +add_library(tls_compat_obj OBJECT ${TLS_COMPAT_SRC}) +target_include_directories(tls_compat_obj PRIVATE . ../include/compat PUBLIC - ../include) + ../include + ${CMAKE_BINARY_DIR}/include) -add_library(tls $ $ - $) -target_include_directories(tls +add_library(tls_obj OBJECT ${TLS_SRC}) +target_include_directories(tls_obj PRIVATE . ../include/compat PUBLIC - ../include) + ../include + ${CMAKE_BINARY_DIR}/include) -export_symbol(tls ${CMAKE_CURRENT_BINARY_DIR}/tls.sym) -target_link_libraries(tls ${PLATFORM_LIBS}) -if (WIN32) - set(TLS_POSTFIX -${TLS_MAJOR_VERSION}) +if(BUILD_SHARED_LIBS) + add_library(tls $ $ $ empty.c) +else() + add_library(tls $ $ empty.c) endif() + +export_symbol(tls ${CMAKE_CURRENT_BINARY_DIR}/tls.sym) +target_link_libraries(tls ${OPENSSL_LIBS}) set_target_properties(tls PROPERTIES - OUTPUT_NAME tls${TLS_POSTFIX} - ARCHIVE_OUTPUT_NAME tls${TLS_POSTFIX}) -set_target_properties(tls PROPERTIES VERSION ${TLS_VERSION} - SOVERSION ${TLS_MAJOR_VERSION}) + OUTPUT_NAME tls + ARCHIVE_OUTPUT_NAME tls + EXPORT_NAME TLS + VERSION ${TLS_VERSION} + SOVERSION ${TLS_MAJOR_VERSION} +) +if(NOT CMAKE_VERSION VERSION_LESS 3.27.0) + set_target_properties(tls PROPERTIES DLL_NAME_WITH_SOVERSION TRUE) +endif() + +target_include_directories( + tls + PUBLIC + $ + $ +) + +install( + TARGETS tls + EXPORT TLS-target +) + +export( + EXPORT TLS-target + FILE "${LibreSSL_BINARY_DIR}/LibreSSL-TLS.cmake" + NAMESPACE LibreSSL:: +) if(ENABLE_LIBRESSL_INSTALL) install( @@ -73,4 +108,17 @@ if(ENABLE_LIBRESSL_INSTALL) LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) + install( + EXPORT TLS-target + FILE "LibreSSL-TLS.cmake" + NAMESPACE LibreSSL:: + DESTINATION "${LIBRESSL_INSTALL_CMAKEDIR}" + ) endif(ENABLE_LIBRESSL_INSTALL) + +# build static library for regression test +if(BUILD_SHARED_LIBS) + add_library(tls-static STATIC $) + target_link_libraries(tls-static ${OPENSSL_TEST_LIBS}) +endif() + diff --git a/tls/Makefile.am b/tls/Makefile.am index 4cea3a266d..03824b4740 100644 --- a/tls/Makefile.am +++ b/tls/Makefile.am @@ -1,3 +1,18 @@ +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + include $(top_srcdir)/Makefile.am.common -include $(abs_top_builddir)/crypto/libcrypto_la_objects.mk @@ -8,12 +23,29 @@ lib_LTLIBRARIES = libtls.la EXTRA_DIST = VERSION EXTRA_DIST += CMakeLists.txt EXTRA_DIST += tls.sym +EXTRA_DIST += empty.c + +CLEANFILES = libtls_la_objects.mk + +EXTRA_libtls_la_DEPENDENCIES = libtls_la_objects.mk + +libtls_la_objects.mk: Makefile + @echo "libtls_la_objects= $(libtls_la_OBJECTS)" \ + | sed -e 's/ *$$//' -e 's/ */ $$\(top_builddir\)\/tls\//g' \ + > libtls_la_objects.mk libtls_la_LDFLAGS = -version-info @LIBTLS_VERSION@ -no-undefined -export-symbols $(top_srcdir)/tls/tls.sym + +if ENABLE_LIBTLS_ONLY libtls_la_LIBADD = $(libcrypto_la_objects) +libtls_la_LIBADD += $(libssl_la_objects) +else +libtls_la_LIBADD = $(abs_top_builddir)/crypto/libcrypto.la +libtls_la_LIBADD += $(abs_top_builddir)/ssl/libssl.la +endif + libtls_la_LIBADD += $(libcompat_la_objects) libtls_la_LIBADD += $(libcompatnoopt_la_objects) -libtls_la_LIBADD += $(libssl_la_objects) libtls_la_LIBADD += $(PLATFORM_LDADD) libtls_la_CPPFLAGS = $(AM_CPPFLAGS) @@ -30,6 +62,7 @@ libtls_la_SOURCES += tls_config.c libtls_la_SOURCES += tls_conninfo.c libtls_la_SOURCES += tls_keypair.c libtls_la_SOURCES += tls_server.c +libtls_la_SOURCES += tls_signer.c libtls_la_SOURCES += tls_ocsp.c libtls_la_SOURCES += tls_peer.c libtls_la_SOURCES += tls_util.c @@ -37,7 +70,6 @@ libtls_la_SOURCES += tls_verify.c noinst_HEADERS = tls_internal.h if HOST_WIN -libtls_la_SOURCES += compat/ftruncate.c libtls_la_SOURCES += compat/pread.c libtls_la_SOURCES += compat/pwrite.c endif diff --git a/tls/compat/ftruncate.c b/tls/compat/ftruncate.c deleted file mode 100644 index e825e50452..0000000000 --- a/tls/compat/ftruncate.c +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Public domain - * - * Kinichiro Inoguchi - */ - -#ifdef _WIN32 - -#include - -int -ftruncate(int fd, off_t length) -{ - return _chsize(fd, length); -} - -#endif diff --git a/tls/compat/pread.c b/tls/compat/pread.c index b9d6b097a9..0b994f434e 100644 --- a/tls/compat/pread.c +++ b/tls/compat/pread.c @@ -8,21 +8,25 @@ #define NO_REDEF_POSIX_FUNCTIONS +#include #include ssize_t pread(int d, void *buf, size_t nbytes, off_t offset) { - off_t cpos, opos, rpos; + off_t cpos; ssize_t bytes; + int save_errno; + if((cpos = lseek(d, 0, SEEK_CUR)) == -1) return -1; - if((opos = lseek(d, offset, SEEK_SET)) == -1) - return -1; - if((bytes = read(d, buf, nbytes)) == -1) + if(lseek(d, offset, SEEK_SET) == -1) return -1; - if((rpos = lseek(d, cpos, SEEK_SET)) == -1) + bytes = read(d, buf, nbytes); + save_errno = errno; + if(lseek(d, cpos, SEEK_SET) == -1) return -1; + errno = save_errno; return bytes; } diff --git a/tls/compat/pwrite.c b/tls/compat/pwrite.c index 82f5f555be..ab8824125d 100644 --- a/tls/compat/pwrite.c +++ b/tls/compat/pwrite.c @@ -8,21 +8,25 @@ #define NO_REDEF_POSIX_FUNCTIONS +#include #include ssize_t pwrite(int d, const void *buf, size_t nbytes, off_t offset) { - off_t cpos, opos, rpos; + off_t cpos; ssize_t bytes; + int save_errno; + if((cpos = lseek(d, 0, SEEK_CUR)) == -1) return -1; - if((opos = lseek(d, offset, SEEK_SET)) == -1) - return -1; - if((bytes = write(d, buf, nbytes)) == -1) + if(lseek(d, offset, SEEK_SET) == -1) return -1; - if((rpos = lseek(d, cpos, SEEK_SET)) == -1) + bytes = write(d, buf, nbytes); + save_errno = errno; + if(lseek(d, cpos, SEEK_SET) == -1) return -1; + errno = save_errno; return bytes; } diff --git a/update.sh b/update.sh index fe91b51ecf..4b2c4ddf85 100755 --- a/update.sh +++ b/update.sh @@ -1,4 +1,19 @@ #!/bin/sh +# +# Copyright (c) 2014 Brent Cook +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + set -e openbsd_branch=`cat OPENBSD_BRANCH` @@ -6,16 +21,31 @@ openbsd_branch=`cat OPENBSD_BRANCH` # pull in latest upstream code echo "pulling upstream openbsd source" if [ ! -d openbsd ]; then - if [ -z "$LIBRESSL_GIT" ]; then - git clone https://github.com/libressl-portable/openbsd.git - else - git clone $LIBRESSL_GIT/openbsd - fi + LIBRESSL_GIT_OPTIONS="${LIBRESSL_GIT_OPTIONS:- --depth=8 --no-single-branch}" + LIBRESSL_GIT="${LIBRESSL_GIT:- https://github.com/libressl}" + git clone $LIBRESSL_GIT_OPTIONS $LIBRESSL_GIT/openbsd +fi + +# pull either the latest or if on a tag, the matching tag +set +e +tag=`git describe --exact-match --tags HEAD 2>/dev/null` +is_tag=$? +set -e +# adjust for 9 hour time delta between trees +release_ts=$((`git show -s --format=%ct $tag|tail -1` + 32400)) +commit=`git -C openbsd rev-list -n 1 --before=$release_ts origin/$openbsd_branch` +git -C openbsd fetch +if [ $is_tag -eq 0 ]; then + echo "This is tag $tag, trying OpenBSD tag libressl-$tag" + if ! git -C openbsd checkout "libressl-$tag"; then + echo "No matching OpenBSD tag found trying nearest commit $commit" + git -C openbsd checkout -q $commit + fi +else + echo "Not on a tag, grabbing latest (NOTE: this may be broken from time to time)" + git -C openbsd checkout $openbsd_branch + git -C openbsd pull fi -(cd openbsd - git fetch - git checkout $openbsd_branch - git pull --rebase) # setup source paths CWD=`pwd` @@ -68,9 +98,7 @@ if [ -x /opt/csw/bin/ggrep ]; then GREP='/opt/csw/bin/ggrep' fi -$CP $libssl_src/LICENSE COPYING - -$CP $libcrypto_src/arch/amd64/opensslconf.h include/openssl +$CP $libcrypto_src/opensslconf.h include/openssl $CP $libcrypto_src/opensslfeatures.h include/openssl $CP $libssl_src/pqueue.h include @@ -82,6 +110,7 @@ for i in crypto/compat; do $libc_src/crypt/chacha_private.h \ $libc_src/stdlib/reallocarray.c \ $libc_src/stdlib/recallocarray.c \ + $libc_src/stdlib/strtonum.c \ $libc_src/string/explicit_bzero.c \ $libc_src/string/strcasecmp.c \ $libc_src/string/strlcpy.c \ @@ -112,19 +141,20 @@ copy_hdrs() { copy_hdrs $libcrypto_src "stack/stack.h lhash/lhash.h stack/safestack.h ossl_typ.h err/err.h crypto.h comp/comp.h x509/x509.h buffer/buffer.h - objects/objects.h asn1/asn1.h bn/bn.h ec/ec.h ecdsa/ecdsa.h + objects/objects.h asn1/asn1.h asn1/posix_time.h bn/bn.h ec/ec.h ecdsa/ecdsa.h ecdh/ecdh.h rsa/rsa.h sha/sha.h x509/x509_vfy.h pkcs7/pkcs7.h pem/pem.h - pem/pem2.h hkdf/hkdf.h hmac/hmac.h rand/rand.h md5/md5.h - x509/x509v3.h x509/x509_verify.h conf/conf.h ocsp/ocsp.h - aes/aes.h modes/modes.h asn1/asn1t.h dso/dso.h bf/blowfish.h - bio/bio.h cast/cast.h cmac/cmac.h cms/cms.h conf/conf_api.h des/des.h dh/dh.h + hkdf/hkdf.h hmac/hmac.h rand/rand.h md5/md5.h mlkem/mlkem.h + x509/x509v3.h conf/conf.h ocsp/ocsp.h + aes/aes.h modes/modes.h asn1/asn1t.h bf/blowfish.h + bio/bio.h cast/cast.h cmac/cmac.h cms/cms.h des/des.h dh/dh.h dsa/dsa.h engine/engine.h ui/ui.h pkcs12/pkcs12.h ts/ts.h - md4/md4.h ripemd/ripemd.h whrlpool/whrlpool.h idea/idea.h - rc2/rc2.h rc4/rc4.h ui/ui_compat.h txt_db/txt_db.h + md4/md4.h ripemd/ripemd.h idea/idea.h + rc2/rc2.h rc4/rc4.h txt_db/txt_db.h sm3/sm3.h sm4/sm4.h chacha/chacha.h evp/evp.h poly1305/poly1305.h - camellia/camellia.h gost/gost.h curve25519/curve25519.h" + camellia/camellia.h curve25519/curve25519.h + ct/ct.h kdf/kdf.h" -copy_hdrs $libssl_src "srtp.h ssl.h ssl2.h ssl3.h ssl23.h tls1.h dtls1.h" +copy_hdrs $libssl_src "srtp.h ssl.h ssl3.h tls1.h dtls1.h" # override upstream opensslv.h if a local version exists if [ -f patches/opensslv.h ]; then @@ -133,28 +163,31 @@ else $CP $libcrypto_src/opensslv.h include/openssl fi -awk '/LIBRESSL_VERSION_TEXT/ {print $4}' < include/openssl/opensslv.h | cut -d\" -f1 > VERSION +awk '/LIBRESSL_VERSION_TEXT/ {print $4}' < include/openssl/opensslv.h | cut -d\" -f1 | head -n1 > VERSION echo "LibreSSL version `cat VERSION`" # copy libcrypto source echo copying libcrypto source rm -f crypto/*.c crypto/*.h -for i in `awk '/SOURCES|HEADERS/ { print $3 }' crypto/Makefile.am` ; do +touch crypto/empty.c +crypto_files=`awk '/^ASM|SOURCES|HEADERS/ { print $3 }' crypto/Makefile.am* | grep -v '^\$(' | sort | uniq` +for i in $crypto_files; do dir=`dirname $i` mkdir -p crypto/$dir if [ $dir != "compat" ]; then - if [ -e $libcrypto_src/$i ]; then + if [ -f $libcrypto_src/$i ]; then $CP $libcrypto_src/$i crypto/$i fi fi done + $CP crypto/compat/b_win.c crypto/bio $CP crypto/compat/ui_openssl_win.c crypto/ui # add the libcrypto symbol export list -$GREP -v OPENSSL_ia32cap_P $libcrypto_src/Symbols.list | $GREP '^[A-Za-z0-9_]' > crypto/crypto.sym +$GREP '^[A-Za-z0-9_]' $libcrypto_src/Symbols.list > crypto/crypto.sym fixup_masm() { - cpp -I./crypto $1 \ + cpp -I./crypto -I./include/compat -D_MSC_VER -U__CET__ $1 \ | sed -e 's/^#/;/' \ | sed -e 's/|/OR/g' \ | sed -e 's/~/NOT/g' \ @@ -164,71 +197,82 @@ fixup_masm() { # generate assembly crypto algorithms asm_src=$libcrypto_src + gen_asm_stdout() { - CC=true perl $asm_src/$2 $1 > $3.tmp - [ $1 = "elf" ] && cat <<-EOF >> $3.tmp + CC=true perl $asm_src/$2 $1 > crypto/$3.tmp + [ $1 = "elf" ] && cat <<-EOF >> crypto/$3.tmp #if defined(HAVE_GNU_STACK) .section .note.GNU-stack,"",%progbits #endif EOF if [ $1 = "masm" ]; then - fixup_masm $3.tmp $3 + fixup_masm crypto/$3.tmp crypto/$3 + rm crypto/$3.tmp else - $MV $3.tmp $3 + $MV crypto/$3.tmp crypto/$3 fi } + +gen_asm_mips() { + abi=$1 + dir=$2 + src=$3 + dst=$4 + CC=true perl $asm_src/$dir/asm/$src.pl $abi $dst.S + cat <<-EOF >> $dst.S + #if defined(HAVE_GNU_STACK) + .section .note.GNU-stack,"",%progbits + #endif + EOF + mv $dst.S crypto/$dir/$dst.S +} + gen_asm() { - CC=true perl $asm_src/$2 $1 $3.tmp - [ $1 = "elf" ] && cat <<-EOF >> $3.tmp + CC=true perl $asm_src/$2 $1 crypto/$3.tmp + [ $1 = "elf" ] && cat <<-EOF >> crypto/$3.tmp #if defined(HAVE_GNU_STACK) .section .note.GNU-stack,"",%progbits #endif EOF if [ $1 = "masm" ]; then - fixup_masm $3.tmp $3 + fixup_masm crypto/$3.tmp crypto/$3 + rm crypto/$3.tmp else - $MV $3.tmp $3 + $MV crypto/$3.tmp crypto/$3 fi } -echo generating arm ASM source for elf -gen_asm_stdout elf aes/asm/aes-armv4.pl crypto/aes/aes-elf-armv4.S -gen_asm_stdout elf bn/asm/armv4-gf2m.pl crypto/bn/gf2m-elf-armv4.S -gen_asm_stdout elf bn/asm/armv4-mont.pl crypto/bn/mont-elf-armv4.S -gen_asm_stdout elf sha/asm/sha1-armv4-large.pl crypto/sha/sha1-elf-armv4.S -gen_asm_stdout elf sha/asm/sha256-armv4.pl crypto/sha/sha256-elf-armv4.S -gen_asm_stdout elf sha/asm/sha512-armv4.pl crypto/sha/sha512-elf-armv4.S -gen_asm_stdout elf modes/asm/ghash-armv4.pl crypto/modes/ghash-elf-armv4.S -$CP $libcrypto_src/armv4cpuid.S crypto -$CP $libcrypto_src/armcap.c crypto -$CP $libcrypto_src/arm_arch.h crypto +echo generating mips ASM source for elf +gen_asm_mips o32 aes aes-mips aes-mips +gen_asm_mips o32 bn mips bn-mips +gen_asm_mips o32 bn mips-mont mont-mips +gen_asm_mips o32 sha sha1-mips sha1-mips +gen_asm_mips o32 sha sha512-mips sha256-mips + +echo generating mips64 ASM source for elf +gen_asm_mips 64 aes aes-mips aes-mips64 +gen_asm_mips 64 bn mips bn-mips64 +gen_asm_mips 64 bn mips-mont mont-mips64 +gen_asm_mips 64 sha sha1-mips sha1-mips64 +gen_asm_mips 64 sha sha512-mips sha256-mips64 +gen_asm_mips 64 sha sha512-mips sha512-mips64 for abi in elf macosx masm mingw64; do echo generating x86_64 ASM source for $abi - gen_asm_stdout $abi aes/asm/aes-x86_64.pl crypto/aes/aes-$abi-x86_64.S - gen_asm_stdout $abi aes/asm/vpaes-x86_64.pl crypto/aes/vpaes-$abi-x86_64.S - gen_asm_stdout $abi aes/asm/bsaes-x86_64.pl crypto/aes/bsaes-$abi-x86_64.S - gen_asm_stdout $abi aes/asm/aesni-x86_64.pl crypto/aes/aesni-$abi-x86_64.S - gen_asm_stdout $abi aes/asm/aesni-sha1-x86_64.pl crypto/aes/aesni-sha1-$abi-x86_64.S - gen_asm_stdout $abi bn/asm/modexp512-x86_64.pl crypto/bn/modexp512-$abi-x86_64.S - gen_asm_stdout $abi bn/asm/x86_64-mont.pl crypto/bn/mont-$abi-x86_64.S - gen_asm_stdout $abi bn/asm/x86_64-mont5.pl crypto/bn/mont5-$abi-x86_64.S - gen_asm_stdout $abi bn/asm/x86_64-gf2m.pl crypto/bn/gf2m-$abi-x86_64.S - gen_asm_stdout $abi camellia/asm/cmll-x86_64.pl crypto/camellia/cmll-$abi-x86_64.S - gen_asm_stdout $abi md5/asm/md5-x86_64.pl crypto/md5/md5-$abi-x86_64.S - gen_asm_stdout $abi modes/asm/ghash-x86_64.pl crypto/modes/ghash-$abi-x86_64.S - gen_asm_stdout $abi rc4/asm/rc4-x86_64.pl crypto/rc4/rc4-$abi-x86_64.S - gen_asm_stdout $abi rc4/asm/rc4-md5-x86_64.pl crypto/rc4/rc4-md5-$abi-x86_64.S - gen_asm_stdout $abi sha/asm/sha1-x86_64.pl crypto/sha/sha1-$abi-x86_64.S - gen_asm $abi sha/asm/sha512-x86_64.pl crypto/sha/sha256-$abi-x86_64.S - gen_asm $abi sha/asm/sha512-x86_64.pl crypto/sha/sha512-$abi-x86_64.S - gen_asm_stdout $abi whrlpool/asm/wp-x86_64.pl crypto/whrlpool/wp-$abi-x86_64.S - gen_asm $abi x86_64cpuid.pl crypto/cpuid-$abi-x86_64.S + + gen_asm_stdout $abi aes/asm/aes-x86_64.pl aes/aes-$abi-x86_64.S + gen_asm_stdout $abi aes/asm/aesni-x86_64.pl aes/aesni-$abi-x86_64.S + gen_asm_stdout $abi bn/asm/modexp512-x86_64.pl bn/modexp512-$abi-x86_64.S + gen_asm_stdout $abi bn/asm/x86_64-mont.pl bn/mont-$abi-x86_64.S + gen_asm_stdout $abi bn/asm/x86_64-mont5.pl bn/mont5-$abi-x86_64.S + gen_asm_stdout $abi modes/asm/ghash-x86_64.pl modes/ghash-$abi-x86_64.S + gen_asm_stdout $abi rc4/asm/rc4-x86_64.pl rc4/rc4-$abi-x86_64.S done # copy libtls source echo copying libtls source rm -f tls/*.c tls/*.h libtls/src/*.c libtls/src/*.h +touch tls/empty.c for i in `awk '/SOURCES|HEADERS/ { print $3 }' tls/Makefile.am` ; do if [ -e $libtls_src/$i ]; then $CP $libtls_src/$i tls @@ -242,7 +286,6 @@ echo "copying nc(1) source" $CP $bin_src/nc/nc.1 apps/nc rm -f apps/nc/*.c apps/nc/*.h $CP_LIBC $libc_src/net/base64.c apps/nc/compat -$CP_LIBC $libc_src/stdlib/strtonum.c apps/nc/compat for i in `awk '/SOURCES|HEADERS|MANS/ { print $3 }' apps/nc/Makefile.am` ; do if [ -e $bin_src/nc/$i ]; then $CP $bin_src/nc/$i apps/nc @@ -254,7 +297,6 @@ echo "copying ocspcheck(1) source" $CP $sbin_src/ocspcheck/ocspcheck.8 apps/ocspcheck rm -f apps/ocspcheck/*.c apps/ocspcheck/*.h $CP_LIBC $libc_src/string/memmem.c apps/ocspcheck/compat -$CP_LIBC $libc_src/stdlib/strtonum.c apps/ocspcheck/compat for i in `awk '/SOURCES|HEADERS|MANS/ { print $3 }' apps/ocspcheck/Makefile.am` ; do if [ -e $sbin_src/ocspcheck/$i ]; then $CP $sbin_src/ocspcheck/$i apps/ocspcheck @@ -264,7 +306,6 @@ done # copy openssl(1) source echo "copying openssl(1) source" $CP $bin_src/openssl/openssl.1 apps/openssl -$CP_LIBC $libc_src/stdlib/strtonum.c apps/openssl/compat $CP $libcrypto_src/cert.pem . $CP $libcrypto_src/openssl.cnf . $CP $libcrypto_src/x509v3.cnf . @@ -277,19 +318,40 @@ done # copy libssl source echo "copying libssl source" rm -f ssl/*.c ssl/*.h -for i in `awk '/SOURCES|HEADERS/ { print $3 }' ssl/Makefile.am` ; do - $CP $libssl_src/$i ssl +touch ssl/empty.c +for i in `awk '/SOURCES|HEADERS/ { if ($3 !~ /.*crypto_arch.*/) print $3 }' ssl/Makefile.am` ; do + dir=`dirname $i` + mkdir -p ssl/$dir + $CP $libssl_src/$i ssl/$i done # add the libssl symbol export list $GREP '^[A-Za-z0-9_]' < $libssl_src/Symbols.list > ssl/ssl.sym # copy libcrypto tests echo "copying tests" -for i in `find $libcrypto_regress -name '*.c'`; do +touch tests/empty.c +for i in `find $libcrypto_regress -name '*.[ch]'`; do $CP "$i" tests done +# x509/verify.c collides with x509/bettertls/verify.c when flattened. +$CP $libcrypto_regress/x509/verify.c tests/x509_verify.c +# Do not copy x509/bettertls/verify.c: it requires the large bettertls +# certificate corpus, which is not worth bundling in release tarballs. $CP $libcrypto_regress/evp/evptests.txt tests -$CP $libcrypto_regress/aead/aeadtests.txt tests +$CP $libcrypto_regress/aead/*.txt tests +$CP $libcrypto_regress/ct/ctlog.conf tests +$CP $libcrypto_regress/ct/*.crt tests +$CP $libcrypto_regress/x509/callback.pl tests +$CP $libcrypto_regress/x509/make-dir-roots.pl tests +rm -rf tests/certs +mkdir -p tests/certs +for i in $libcrypto_regress/certs/[0-9]*; do + if [ -d "$i" ]; then + $CP -R "$i" tests/certs + fi +done +$CP $libcrypto_regress/x509/policy/*.pem tests +$CP $libcrypto_regress/mlkem/*.txt tests # generate libcrypto freenull.c awk -f $libcrypto_regress/free/freenull.awk \ @@ -309,10 +371,15 @@ $CP $libssl_regress/ssl/testssl tests for i in `find $libssl_regress -name '*.c'`; do $CP "$i" tests done +# tls/tlstest.c collides with libtls/tls/tlstest.c when flattened. +$CP $libssl_regress/tls/tlstest.c tests/ssl_tlstest.c +# verify/verify.c collides with other verify tests when flattened. +rm -f tests/verify.c +$CP $libssl_regress/verify/verify.c tests/ssl_verify.c +$CP $libssl_regress/verify/create-libressl-test-certs.pl tests $CP $libssl_regress/unit/tests.h tests -$CP $libssl_regress/certs/ca.pem tests -$CP $libssl_regress/certs/server.pem tests -$CP $libssl_regress/pqueue/expected.txt tests/pq_expected.txt +$CP $libssl_regress/certs/*.pem tests +$CP $libssl_regress/certs/*.crl tests # copy libtls tests for i in `find $libtls_regress -name '*.c'`; do