12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/bin/sh
- set -eu
- if test "$1" = "" ; then
- echo "I need a package as an argument."
- exit 1
- fi
- PACKAGEFILE=$1
- if test ! -f "$PACKAGEFILE" ; then
- echo "$PACKAGEFILE is not a file."
- exit 1
- fi
- DIGESTNAME=sha256
- DIGESTOUTPUT=`gpg --print-md $DIGESTNAME $PACKAGEFILE`
- RAWDIGEST=`gpg --print-md $DIGESTNAME $PACKAGEFILE | sed -e 's/^[^ ]*: //' `
- # These regexes are a little fragile, but I think they work for us.
- VERSION=`echo $PACKAGEFILE | sed -e 's/^[a-z\-]*//' -e 's/\.[\.a-z]*$//' `
- PACKAGE=`echo $PACKAGEFILE | sed -e 's/-[0-9].*//'`
- SIGFILE_UNSIGNED="$PACKAGE-$VERSION-signature"
- SIGNATUREFILE="$SIGFILE_UNSIGNED.asc"
- cat >$SIGFILE_UNSIGNED <<EOF
- This is the signature file for "$PACKAGEFILE",
- which contains version "$VERSION" of "$PACKAGE".
- Here's how to check this signature.
- 1) Make sure that this is really a signature file, and not a forgery,
- with:
- "gpg --verify $SIGNATUREFILE"
- The key should be one of the keys that signs the Tor release; the
- official Tor website has more information on those.
- If this step fails, then either you are missing the correct key, or
- this signature file was not really signed by a Tor packager.
- Beware!
- 2) Make sure that the package you wanted is indeed "$PACKAGE", and that
- its version you wanted is indeed "$VERSION". If you wanted a
- different package, or a different version, this signature file is
- not the right one!
- 3) Now that you're sure you have the right signature file, make sure
- that you got the right package. Check its $DIGESTNAME digest with
- "gpg --print-md $DIGESTNAME $PACKAGEFILE"
- The output should match this, exactly:
- $DIGESTOUTPUT
- Make sure that every part of the output matches: don't just check the
- first few characters. If the digest does not match, you do not have
- the right package file. It could even be a forgery.
- Frequently asked questions:
- Q: Why not just sign the package file, like you used to do?
- A: GPG signatures authenticate file contents, but not file names. If
- somebody gave you a renamed file with a matching renamed signature
- file, the signature would still be given as "valid".
- --
- FILENAME: $PACKAGEFILE
- PACKAGE: $PACKAGE
- VERSION: $VERSION
- DIGESTALG: $DIGESTNAME
- DIGEST: $RAWDIGEST
- EOF
- gpg --clearsign $SIGFILE_UNSIGNED
|