Add NIST PKIX validation test suite

Change-Id: I44b8e759e38f074174df745c39979acc5334c778
diff --git a/generate-tests.sh b/generate-tests.sh
new file mode 100755
index 0000000..4446984
--- /dev/null
+++ b/generate-tests.sh
@@ -0,0 +1,97 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2012 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#
+# This script sets up the execution of the test extraction script
+#
+
+STORAGE_DIR="res/tests/resources/nist-pkits"
+TARGET="src/libcore/java/security/cert/X509CertificateNistPkitsTest.java"
+
+
+set -e
+trap "echo WARNING: Exiting on non-zero subprocess exit code" ERR;
+
+usage() {
+    echo "$0: generates test cases from the NIST PKITS documentation"
+    echo ""
+    echo "Usage: $0 PKITS.pdf PKITS_data.zip"
+    exit 1
+}
+
+if [ $# -ne 2 ]; then
+    usage
+fi
+
+PDF="${1}"
+ZIP="${2}"
+
+if [ ! -f "${PDF}" -o "${PDF#${PDF%.pdf}}" != ".pdf" ]; then
+    echo "The first argument must point to PKITS.pdf"
+    echo ""
+    usage
+elif [ ! -f "${ZIP}" -o "${ZIP#${ZIP%.zip}}" != ".zip" ]; then
+    echo "The second argument must point to PKITS_data.zip"
+    echo ""
+    usage
+fi
+
+if [ ! -f "${TARGET}" ]; then
+    echo "Can not file file:"
+    echo "    ${TARGET}"
+    echo ""
+    usage
+fi
+
+PDFTOTEXT=$(which pdftotext)
+if [ -z "${PDFTOTEXT}" -o ! -x "${PDFTOTEXT}" ]; then
+    echo "pdftotext must be installed. Try"
+    echo "    apt-get install pdftotext"
+    exit 1
+fi
+
+TEMP_TEXT=$(mktemp --tmpdir PKITS.txt.XXXXXXXX)
+TEMP_JAVA=$(mktemp --tmpdir generated-nist-tests.XXXXXXXXX)
+TEMP_FILES=$(mktemp --tmpdir generated-nist-files.XXXXXXXXX)
+
+${PDFTOTEXT} -layout -nopgbrk -eol unix "${PDF}" "${TEMP_TEXT}"
+
+"$(dirname $0)/extract-pkits-tests.pl" "${TEMP_TEXT}" "${TEMP_JAVA}" "${TEMP_FILES}"
+sed -i '/DO NOT MANUALLY EDIT -- BEGIN AUTOMATICALLY GENERATED TESTS/,/DO NOT MANUALLY EDIT -- END AUTOMATICALLY GENERATED TESTS/{//!d}' "${TARGET}"
+sed -i '/DO NOT MANUALLY EDIT -- BEGIN AUTOMATICALLY GENERATED TESTS/r '"${TEMP_JAVA}" "${TARGET}"
+
+pushd "$(dirname $0)"
+mkdir -p "${STORAGE_DIR}"
+while IFS= read -r -d $'\n' file; do
+    unzip -q -o -d "${STORAGE_DIR}" "${ZIP}" "${file}"
+done < ${TEMP_FILES}
+popd
+
+shasum_file() {
+    declare -r file="$1"
+
+    pushd "$(dirname "${file}")" > /dev/null 2>&1
+    sha256sum -b "$(basename "${file}")"
+    popd > /dev/null 2>&1
+}
+
+echo Writing pkits.version ...
+echo "# sha256sum of PKITS" > pkits.version
+shasum_file "${PDF}" >> pkits.version
+shasum_file "${ZIP}" >> pkits.version
+
+echo Updated tests: ${TARGET}