blob: dbd9dd69da0da47ae2fc51bf0508b550794fd9ad (
plain)
- # -*-shell-script-*-
- # This should be sourced by bash (though we welcome changes to make it POSIX sh compliant)
- # Monkeysphere gen-subkey subcommand
- #
- # The monkeysphere scripts are written by:
- # Jameson Rollins <jrollins@finestructure.net>
- # Jamie McClelland <jm@mayfirst.org>
- # Daniel Kahn Gillmor <dkg@fifthhorseman.net>
- #
- # They are Copyright 2008-2009, and are all released under the GPL,
- # version 3 or later.
- # generate a subkey with the 'a' usage flags set
- gen_subkey(){
- local keyLength
- local gpgSecOut
- local keyID
- local editCommands
- local fifoDir
- # get options
- while true ; do
- case "$1" in
- -l|--length)
- keyLength="$2"
- shift 2
- ;;
- *)
- if [ "$(echo "$1" | cut -c 1)" = '-' ] ; then
- failure "Unknown option '$1'.
- Type '$PGRM help' for usage."
- fi
- break
- ;;
- esac
- done
- # check that the keyID is unique
- keyID=$(check_gpg_sec_key_id "$@")
- # check that an authentication subkey does not already exist
- check_gpg_authentication_subkey "$keyID"
- # generate the list of commands that will be passed to edit-key
- editCommands=$(cat <<EOF
- addkey
- 7
- S
- E
- A
- Q
- $keyLength
- 0
- save
- EOF
- )
- # setup the temp fifo dir for retrieving the key password
- log debug "creating password fifo..."
- fifoDir=$(msmktempdir)
- trap "rm -rf $fifoDir" EXIT
- (umask 077 && mkfifo "$fifoDir/pass")
- log verbose "generating subkey..."
- echo "$editCommands" | gpg_user --passphrase-fd 3 3< "$fifoDir/pass" --expert --command-fd 0 --edit-key "$keyID" &
- # FIXME: this needs to fail more gracefully if the passphrase is incorrect
- passphrase_prompt "Please enter your passphrase for $keyID: " "$fifoDir/pass"
- trap - EXIT
- rm -rf "$fifoDir"
- wait
- log verbose "done."
- }
|