mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 02:29:55 +02:00
58 lines
1.3 KiB
Bash
Executable File
58 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
verifier="$script_dir/../verify-apk-signature.sh"
|
|
scratch="$(mktemp -d "${TMPDIR:-/tmp}/vnidrop-apksigner-test.XXXXXX")"
|
|
trap 'rm -rf "$scratch"' EXIT
|
|
|
|
apk="$scratch/app.apk"
|
|
fake_apksigner="$scratch/apksigner"
|
|
printf 'apk\n' > "$apk"
|
|
|
|
cat > "$fake_apksigner" <<'SCRIPT'
|
|
#!/usr/bin/env bash
|
|
case "${FAKE_APKSIGNER_MODE:-success}" in
|
|
success)
|
|
printf '%s\n' \
|
|
'Verifies' \
|
|
'Signer #1 certificate SHA-256 digest: AA:BB:CC:DD' >&2
|
|
;;
|
|
missing)
|
|
printf '%s\n' 'Verifies' >&2
|
|
;;
|
|
failure)
|
|
printf '%s\n' 'invalid APK signature' >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
SCRIPT
|
|
chmod +x "$fake_apksigner"
|
|
|
|
actual="$(
|
|
APKSIGNER="$fake_apksigner" \
|
|
"$verifier" "$apk" "aa bb cc dd"
|
|
)"
|
|
[[ $actual == aabbccdd ]]
|
|
|
|
if APKSIGNER="$fake_apksigner" \
|
|
"$verifier" "$apk" deadbeef >/dev/null 2>&1; then
|
|
printf 'Expected a certificate mismatch to fail\n' >&2
|
|
exit 1
|
|
fi
|
|
|
|
if FAKE_APKSIGNER_MODE=missing APKSIGNER="$fake_apksigner" \
|
|
"$verifier" "$apk" aabbccdd >/dev/null 2>&1; then
|
|
printf 'Expected missing certificate output to fail\n' >&2
|
|
exit 1
|
|
fi
|
|
|
|
if FAKE_APKSIGNER_MODE=failure APKSIGNER="$fake_apksigner" \
|
|
"$verifier" "$apk" aabbccdd >/dev/null 2>&1; then
|
|
printf 'Expected signature verification failure to propagate\n' >&2
|
|
exit 1
|
|
fi
|
|
|
|
printf 'APK signature verifier tests passed.\n'
|