summaryrefslogtreecommitdiff
path: root/pkg/utils/gpg-key-generator
diff options
context:
space:
mode:
authorTomas Touceda <chiiph@leap.se>2013-04-25 12:12:02 -0300
committerTomas Touceda <chiiph@leap.se>2013-04-25 12:12:02 -0300
commita0df6b9b8fbf7d4db53bb21f379cb1941d823a5b (patch)
tree688a9442985c1e849a301dd85b1988c38643c7e5 /pkg/utils/gpg-key-generator
parent28a5992e9b4c5a9a080ad39ba6483843c99f1c47 (diff)
Reorder files, normalize repo and add sample config
Diffstat (limited to 'pkg/utils/gpg-key-generator')
-rwxr-xr-xpkg/utils/gpg-key-generator209
1 files changed, 209 insertions, 0 deletions
diff --git a/pkg/utils/gpg-key-generator b/pkg/utils/gpg-key-generator
new file mode 100755
index 0000000..54d29fb
--- /dev/null
+++ b/pkg/utils/gpg-key-generator
@@ -0,0 +1,209 @@
+#!/bin/bash
+##############################################################################
+#
+# gpg-key-generator
+# -------------------
+# Create batch processed keys for dummy users in the CouchDB, for testing.
+# see
+# www.gnupg.org/documentation/manuals/gnupg-devel/Unattended-GPG-key-generation.html
+# for syntax specification.
+#
+# @author Isis Agora Lovecruft, 0x2cdb8b35
+# @date 11 February 2013
+# @version 0.1.0
+##############################################################################
+
+
+here="${PWD}"
+test_dir="${here}/gpg-keys"
+batch_file="${test_dir}/gpg-batch-key-script"
+default_keypair_password="leap"
+default_keypair_email="blackhole@leap.se"
+
+function usage ()
+{
+ echo -e "\033[40m\033[36m Usage: $0 [-n <N> [-c|-a]] | [-d|-h]\033[0m"
+ echo -e "\033[40m\033[36m --------------------------------------------------------\033[0m"
+ echo -e "\033[40m\033[36m Creates a set of GPG dummy keys for unittesting purposes.\033[0m"
+ echo
+ echo -e "\033[40m\033[36m Keys will be created in ${test_dir}, \033[0m"
+ echo -e "\033[40m\033[36m and a GnuPG batch file named ${batch_file##*/} \033[0m"
+ echo -e "\033[40m\033[36m will also be created in that same directory. \033[0m"
+ echo -e "\033[40m\033[36m The default password to all keys is: "'"'"${default_keypair_passwd}"'"'" \033[0m"
+ echo
+ echo -e "\033[40m\033[36m Options:\033[0m"
+ echo -e "\033[40m\033[36m -n,--number <N> Number of keys (to create/append) \033[0m"
+ echo -e "\033[40m\033[36m -c,--create Create a fresh set of N test keys \033[0m"
+ echo -e "\033[40m\033[36m -a,--append Append another set of N test keys \033[0m"
+ echo -e "\033[40m\033[36m -d,--delete Delete the test keys and directory\033[0m"
+ echo -e "\033[40m\033[36m -h,--help This cruft\033[0m"
+}
+
+## @param $1: the filename to write to
+## @param $2: the directory to place test keys and batch files in
+## @param $3: the number of keypairs to create
+function write_gpg_batch_file ()
+{
+ ## if the test directory doesn't exist, create it:
+ if ! test -w "${1}" ; then
+ if ! test -d "${2}"; then
+ mkdir $2
+ fi
+ fi
+
+ # if the batch file is already there, ask to back it up:
+ if test -r "${1}" ; then
+ read -ers -N 1 -t 60 \
+ -p"Should we keep a backup copy the previous batch file? (Y/n) " bak
+ case $bak in
+ n|N ) echo -e "\033[40m\033[31m Overwriting ${1}...\033[0m" ;;
+ * ) iii=0
+ backup="${1}.${iii}-"$(date +"%F")".bak"
+ while ! test -r "$backup" ; do
+ echo -e"\033[40m\033[36m Backing up to: \033[0m"
+ echo -e"\033[40m\033[36m ${backup} \033[0m"
+ cp $1 $backup
+ iii=$(( $iii + 1 ))
+ done ;;
+ esac
+ ## then always delete the old otherwise we'll append to that and generate
+ ## the previous batch's keys too:
+ ! test -r "${1}" || rm $1
+ fi
+
+ ## and whether we backed up or not, make our file if it doesn't exist:
+ if ! test -w "${1}" ; then
+ touch $1 && chmod +rw $1
+ fi
+ echo -e "\033[40m\033[36m Writing GPG key generation batch file to: \033[0m"
+ echo -e "\033[40m\033[36m ${1}... \033[0m"
+
+ total_keypairs=$(printf "%03d" ${3})
+ echo "Total keypairs to be generated: ${total_keypairs}"
+
+ this_month=$(date +"%m") # ## this is awkward...isn't there
+ expire_soon=$(( ${this_month} + 1 )) ## a better way?
+ next_month=$(printf "%02d" ${expire_soon})
+ expiry_date=$(date +"%Y-")${next_month}$(date +"-%d")
+ echo "Expiry date for keypairs: ${expiry_date}"
+
+ for i in $(seq -f "%03g" 1 $3 ) ; do
+ now=$(date +"%Y-%m-%d_%H-%M")
+ echo "Writing generation parameters for keypair #${i}..."
+ cat >> $1 <<EOF
+%echo Generating keypair ${i}/${total_keypairs}...
+Key-Type: RSA
+Key-Length: 4096
+Subkey-Type: RSA
+Subkey-Length: 4096
+Name-Real: Louis Lingg
+Name-Email: $default_keypair_email
+Name-Comment: Test Key ${i}/${total_keypairs}
+Expire-Date: $expiry_date
+Passphrase: $default_keypair_password
+%pubring generated-${now}-${i}.pub
+%secring generated-${now}-${i}.sec
+%commit
+%echo done. $i keys out of ${total_keypairs} completed.
+
+EOF
+ done
+}
+
+## @param $1: the filename to write to
+## @param $2: the directory to place test keys and batch files in
+function run_gpg_batch_file ()
+{
+ our_gpg=$(which gpg)
+
+ if ! test -r "${batch_file}" ; then
+ echo -e "\033[40m\033[31m Could not find ${batch_file}. Exiting...\033[0m"
+ exit 1
+ fi
+
+ if test -z "$our_gpg" ; then
+ echo -e "\033[40m\033[31m Could not find gnupg. Exiting...\033[0m"
+ exit 1
+ fi
+
+ if test -n "${our_gpg}" ; then
+ cd ${2} && $($our_gpg --batch --gen-key ${1})
+ fi
+}
+
+## @param $1: the test dir
+function delete_batch_keys ()
+{
+ if test -d "$1" ; then
+ read -ers -N 1 -t 60 \
+ -p'Delete the current GPG test keys directory? (Y/n) ' delkeys
+ if test -n "$delkeys" ; then
+ case $delkeys in
+ n|N )
+ echo -e "\033[40m\033[31m Skipping deletion. \033[0m" ;;
+ *)
+ echo -e "\033[40m\033[36m Deleting old test keys...\033[0m"
+ if test -d "$1" ; then
+ rm -r $1
+ else
+ echo -e "\033[40m\033[31m Cannot delete: $1\033[0m"
+ fi ;;
+ esac
+ fi
+ fi
+}
+
+function finish ()
+{
+ cat<<FIN
+To use the generated GnuPG keys, assuming you do not wish to use
+the default keyrings in your home directory, you should do:
+
+ \$ useradd -N -m keytester
+ \$ cd ${test_dir}
+ \$ for key in \`find . -name "generated-*"\`; do chown keytester:$USER \$key; done
+ \$ for key in \`find . -name *.sec\`; do chown keytester:$USER \$key; done
+ \$ sudo -i -u keytester
+ \$ cd ${test_dir}
+ \$ for key in \`find . -name "generated-*"\`; do gpg --import \$key; done
+ \$ gpg --list-keys
+
+FIN
+}
+
+## main
+if [[ "$#" > 0 ]] ; then
+ SHORTS="hcadn:"
+ LONGS="help,create,append,destroy,number:"
+ ARGS=$(getopt -s bash --options $SHORTS --longoptions $LONGS \
+ --name ${0##*/} -- "$@")
+
+ if [ $? != 0 ] ; then
+ echo -e "\033[40m\033[31m Unable to parse options. \033[0m">&2
+ exit 1
+ fi
+ eval set -- "$ARGS"
+ while test -n "$1" ; do
+ case $1 in
+ -n|--number ) export CREATE_N="$2"
+ if test -z "$CREATE_N"; then CREATE_N="3"; fi;
+ shift 2 ;;
+ -c|--create ) delete_batch_keys ${test_dir}
+ write_gpg_batch_file ${batch_file} ${test_dir} \
+ ${CREATE_N}
+ run_gpg_batch_file ${batch_file} ${test_dir}
+ shift ;;
+ -a|--append ) run_gpg_batch_file ${batch_file} ${test_dir}
+ shift ;;
+ -d|--destroy ) delete_batch_keys ${test_dir} ; shift ;;
+ --) shift ; break ;;
+ * ) usage ; shift ;;
+ esac
+ done
+ finish
+else
+ usage
+fi
+
+unset here test_dir batch_file CREATE_N
+