#!/usr/bin/env bash # KDF API (JEP 510, final in JDK 25): regenerates every file in output/. # JDK25=/path/to/jdk-25 ./run.sh needs python3 with `cryptography` and the openssl CLI for steps 05 and 06 set -uo pipefail unset JAVA_TOOL_OPTIONS HERE="$(cd "$(dirname "$0")" && pwd)" JDK25="${JDK25:-/opt/jdks/jdk-25.0.4.1+1}" OUT="$HERE/output"; mkdir -p "$OUT"; B="$(mktemp -d)"; trap 'rm -rf "$B"' EXIT cd "$HERE" J="$JDK25/bin" echo "javac: $("$J/javac" -version 2>&1)" "$J/javac" --release 25 -Xlint:all -d "$B" src/*.java || exit 1 run() { echo "\$ java -cp classes $* ($("$J/java" -version 2>&1 | sed -n 2p | sed 's/.*(build \(.*\))/\1/'))"; "$J/java" -Xmx512m -cp "$B" "$@" 2>&1; echo "exit=$?"; } { echo "\$ javap javax.crypto.KDF javax.crypto.KDFParameters javax.crypto.KDFSpi javax.crypto.spec.HKDFParameterSpec 'javax.crypto.spec.HKDFParameterSpec\$Builder' ... ($("$J/java" -version 2>&1 | sed -n 2p | sed 's/.*(build \(.*\))/\1/'))" "$J/javap" javax.crypto.KDF javax.crypto.KDFParameters javax.crypto.KDFSpi javax.crypto.spec.HKDFParameterSpec \ 'javax.crypto.spec.HKDFParameterSpec$Builder' 'javax.crypto.spec.HKDFParameterSpec$Extract' \ 'javax.crypto.spec.HKDFParameterSpec$Expand' 'javax.crypto.spec.HKDFParameterSpec$ExtractThenExpand' 2>&1 | grep -v '^Compiled from' echo; echo "\$ javap -v javax.crypto.KDF | grep -ci PreviewFeature (0 = not a preview API)" "$J/javap" -v javax.crypto.KDF | grep -ci PreviewFeature echo "\$ unzip -p src.zip java.base/javax/crypto/KDF.java | grep @since" unzip -p "$JDK25/lib/src.zip" java.base/javax/crypto/KDF.java | grep -m1 '@since' } > "$OUT/01-api-shape.txt" run ApiTour > "$OUT/02-api-tour.txt" run Rfc5869Vectors > "$OUT/03-rfc5869-vectors.txt" { run RefCheck; echo; run Interop interop/cases.tsv; } > "$OUT/04-interop-java-vs-python-vs-reference.txt" { python3 -I -c 'import cryptography; print("python cryptography", cryptography.__version__)' python3 -I interop/gen_cases.py "$B/regen.tsv" && cmp "$B/regen.tsv" interop/cases.tsv && echo "cases.tsv regenerates byte-identically" python3 -I interop/openssl_check.py interop/cases.tsv; } > "$OUT/05-interop-python-openssl.txt" 2>&1 run Tenants > "$OUT/06-tenants.txt" run Mistakes > "$OUT/07-mistakes.txt" grep -l 'FAIL' "$OUT"/*.txt && echo "SOME CHECK FAILED" && exit 1 echo "all outputs regenerated, no FAIL lines"