Merge branch 'pin_hashes' of https://github.com/teisenbe/toolchains
diff --git a/doit b/doit
index 7c0aa20..8575a47 100755
--- a/doit
+++ b/doit
@@ -54,6 +54,8 @@
 
     TARFILE=${1}-${2}.tar$3
     TARGETDIR=${1}-${2}
+    HASH="$4"
+    PATCH="$5"
     if [ -f ${TARGETDIR}/.extracted ]; then
         log echo "$TARFILE already extracted into $TARGETDIR, skipping"
         return 0
@@ -63,13 +65,19 @@
         exit 1
     fi
 
+    echo "checking $TARFILE integrity"
+    if [ "$(shasum -a 256 -b "$ARCHIVES/$TARFILE" | cut -f1 -d' ')" != "$HASH" ]; then
+      log echo "$TARFILE failed integrity check"
+      exit 1
+    fi
+
     echo extracting $TARFILE
     rm -rf $TARGETDIR
     tar xf $ARCHIVES/$TARFILE || exit 1
 
-    if [ ! -z "$4" ]; then
+    if [ -n "$PATCH" ]; then
         log echo patching $1
-        log patch -d $TARGETDIR -p1 < $4 || exit 1
+        log patch -d $TARGETDIR -p1 < "$PATCH" || exit 1
     fi
 
     touch $TARGETDIR/.extracted || exit 1
@@ -167,12 +175,12 @@
 fi
 
 if [ ! -f .extracted-stamp ]; then
-    extract-tool binutils $BINVER .bz2 $PATCHES/binutils-patch.txt
-    extract-tool gcc $GCCVER .bz2 $PATCHES/gcc-patch.txt
-    extract-tool gdb $GDBVER .xz $PATCHES/gdb-patch.txt
-    extract-tool gmp $GMPVER .bz2
-    extract-tool mpc $MPCVER .gz
-    extract-tool mpfr $MPFRVER .bz2
+    extract-tool binutils $BINVER .bz2 $BINHASH $PATCHES/binutils-patch.txt
+    extract-tool gcc $GCCVER .bz2 $GCCHASH $PATCHES/gcc-patch.txt
+    extract-tool gdb $GDBVER .xz $GDBHASH $PATCHES/gdb-patch.txt
+    extract-tool gmp $GMPVER .bz2 $GMPHASH
+    extract-tool mpc $MPCVER .gz $MPCHASH
+    extract-tool mpfr $MPFRVER .bz2 $MPFRHASH
     touch .extracted-stamp
 fi
 
diff --git a/toolvers b/toolvers
index 9ef40e1..dd54846 100644
--- a/toolvers
+++ b/toolvers
@@ -1,7 +1,14 @@
+# Rerun updatetoolvers after modifying this file
 GCCVER=5.3.0
 BINVER=2.26
 GDBVER=7.10.1
 GMPVER=5.1.3
 MPCVER=1.0.3
 MPFRVER=3.1.3
-
+# Below is autogenerated by updatetoolvers
+GCCHASH=b84f5592e9218b73dbae612b5253035a7b34a9a1f7688d2e1bfaaf7267d5c4db
+BINHASH=c2ace41809542f5237afc7e3b8f32bb92bc7bc53c6232a84463c423b0714ecd9
+GDBHASH=25c72f3d41c7c8554d61cacbeacd5f40993276d2ccdec43279ac546e3993d6d5
+GMPHASH=752079520b4690531171d0f4532e40f08600215feefede70b24fabdc6f1ab160
+MPCHASH=617decc6ea09889fb08ede330917a00b16809b8db88c29c31bfbb49cbf88ecc3
+MPFRHASH=f63bb459157cacd223caac545cb816bcdb5a0de28b809e7748b82e9eb89b0afd
diff --git a/updatetoolvers b/updatetoolvers
new file mode 100755
index 0000000..6cad08a
--- /dev/null
+++ b/updatetoolvers
@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+# Change the version numbers in the toolvers file and then run this 
+# script to update the hashes
+
+ARCHIVES=archives
+GNU_MIRROR=https://mirrors.kernel.org/gnu
+TOOLVERS_FILE="toolvers"
+. "$TOOLVERS_FILE"
+
+function verify_sig() {
+  SIGFILE="$1"
+  ARCHIVE="$2"
+
+  if ! gpg -q --verify "$SIGFILE" "$ARCHIVE"; then
+    echo "Failed to verify $ARCHIVE, aborting"
+    exit 1
+  fi
+}
+
+function fetch_and_verify() {
+  PKG_URI_DIR="$1"
+  FILENAME="$2"
+
+  if [ ! -f "$ARCHIVES/$FILENAME" ]; then
+    wget -P "$ARCHIVES" -N "$PKG_URI_DIR/$FILENAME"
+  fi
+  if [ ! -f "$ARCHIVES/$FILENAME.sig" ]; then
+    wget -P "$ARCHIVES" -N "$PKG_URI_DIR/$FILENAME.sig"
+  fi
+
+  verify_sig "$ARCHIVES/$FILENAME.sig" "$ARCHIVES/$FILENAME"
+}
+
+
+fetch_and_verify "$GNU_MIRROR/binutils/" "binutils-$BINVER.tar.bz2"
+fetch_and_verify "$GNU_MIRROR/gcc/gcc-$GCCVER/" "gcc-$GCCVER.tar.bz2"
+fetch_and_verify "$GNU_MIRROR/gdb/" "gdb-$GDBVER.tar.xz"
+fetch_and_verify "$GNU_MIRROR/mpfr/" "mpfr-$MPFRVER.tar.bz2"
+fetch_and_verify "$GNU_MIRROR/mpc/" "mpc-$MPCVER.tar.gz"
+fetch_and_verify "$GNU_MIRROR/gmp/" "gmp-$GMPVER.tar.bz2"
+
+BINHASH=$(shasum -a 256 -b "$ARCHIVES/binutils-$BINVER.tar.bz2" | cut -f1 -d' ')
+GCCHASH=$(shasum -a 256 -b "$ARCHIVES/gcc-$GCCVER.tar.bz2" | cut -f1 -d' ')
+GDBHASH=$(shasum -a 256 -b "$ARCHIVES/gdb-$GDBVER.tar.xz" | cut -f1 -d' ')
+MPFRHASH=$(shasum -a 256 -b "$ARCHIVES/mpfr-$MPFRVER.tar.bz2" | cut -f1 -d' ')
+MPCHASH=$(shasum -a 256 -b "$ARCHIVES/mpc-$MPCVER.tar.gz" | cut -f1 -d' ')
+GMPHASH=$(shasum -a 256 -b "$ARCHIVES/gmp-$GMPVER.tar.bz2" | cut -f1 -d' ')
+
+tmp=$(mktemp)
+echo "# Rerun updatetoolvers after modifying this file" > "$tmp"
+echo "GCCVER=$GCCVER" >> "$tmp"
+echo "BINVER=$BINVER" >> "$tmp"
+echo "GDBVER=$GDBVER" >> "$tmp"
+echo "GMPVER=$GMPVER" >> "$tmp"
+echo "MPCVER=$MPCVER" >> "$tmp"
+echo "MPFRVER=$MPFRVER" >> "$tmp"
+
+echo "# Below is autogenerated by updatetoolvers" >> "$tmp"
+echo "GCCHASH=$GCCHASH" >> "$tmp"
+echo "BINHASH=$BINHASH" >> "$tmp"
+echo "GDBHASH=$GDBHASH" >> "$tmp"
+echo "GMPHASH=$GMPHASH" >> "$tmp"
+echo "MPCHASH=$MPCHASH" >> "$tmp"
+echo "MPFRHASH=$MPFRHASH" >> "$tmp"
+mv "$tmp" "$TOOLVERS_FILE"