#compdef gpg gpgv gpg-zip gpg2=gpg local curcontext="$curcontext" state line expl ret=1 local -a args allopts dups typeset -A opt_args if [[ $service = gpg-zip ]]; then args=( '--gpg[command to use instead of gpg]:command:_command' '--gpg-args[gpg arguments]:gpg arguments:' '--tar[command to use instead of tar]:command:_command' '--tar-args[tar arguments]:tar arguments:' '--list-archive[list archive contents]' ) else allopts=( $(_call_program options $words[1] --dump-options) ) args=( '(-q --quiet)*'{-v,--verbose}'[increase amount of output]' '(-q --quiet -v --verbose)'{-q,--quiet}'[reduce amount of output]' '--keyring=[add specified file to list of keyrings]:file:_files' '--'{status,logger}'-fd:file descriptor:_file_descriptors' '--homedir:directory:_directories' ) fi [[ $service = gpgv ]] || args+=( '(-e --encrypt)'{-e,--encrypt}'[encrypt data. this option may be combined with --sign]' {-d,--decrypt}'[decrypt file or stdin]' '(-c --symmetric)'{-c,--symmetric}'[encrypt with symmetric cypher only]' '(-s --sign)'{-s,--sign}'[make a signature]' '*'{-r+,--recipient}'[specify user to encrypt for]:recipient:->public-keys' '(-u --local-user)'{-u+,--local-user}'[use name as the user ID to sign]:user attachment:_users' '(-o --output)'{-o+,--output}'[write output to file]:output file:_files' '(-h --help)'{-h,--help}'[display usage information]' '--version[print info on program version and supported algorithms]' ) [[ $service = gpg ]] && args+=( '--decrypt-files[decrypt multiple files]' '(-b --detach-sign)'{-b,--detach-sign}'[make a detached signature]' '--clearsign[make a clear text signature]' '--store[store only]' '--verify[verify a signature]' '--verify-files[verify a list of files]' '(-f --encrypt-files)'{-f,--encrypt-files}'[encrypt files]' '--list-keys[list all keys]' '--list-public-keys[list all public keys]' '--list-secret-keys[list all secret keys]' '--list-sigs[lists keys and signatures]:key attachment:->public-keys' '--list-options[modify what the various --list-* commands show]' '--check-sigs[list key, signatures and check them]:key attachment:->public-keys' '--fingerprint[list all keys with their fingerprints]:key attachment:->public-keys' '--list-packets[list only the sequence of packets]' '--gen-key[generate a new pair key]' '--edit-key[a menu for edit yours keys]:key attachment:->public-keys' '--sign-key[sign a key]:key attachment:->public-keys' '--lsign-key[sign a key but mark as non-exportable]:key attachment:->public-keys' '--delete-keys[remove key from public keyring]:key attachment:->public-keys' '--delete-secret-keys[remove key from public & private keyring]:key attachment:->secret-keys' '--delete-secret-and-public-keys:key attachment:->secret-keys' '--gen-revoke[generate a revocation certificate]' '--desig-revoke[generate a designated revocation certificate]' '--export[export all key from all keyrings]' '--send-keys[send keys to a keyserver]:key attachment:->public-keyids' '--export-secret-keys:key attahment:->secret-keys' '--export-secret-subkeys:key attachment:->secret-keys' '--import[import a gpg key from a file]:_files attachment:_files' '--fast-import[import a file without build trustdb]:_files attachment:_files' '--fetch-keys[fetch key at URIs]:uri:' '--recv-keys[receive a list of keys from a keyserver]:key attachment:->public-keyids' '--refresh-keys[update all keys from a keyserver]' '--search-keys[search for keys on a key server]' '--update-trustdb[update the trust database]' '--check-trustdb[unattended trust database update]' '--fix-trustdb[fix a corrupted trust database]' '--export-ownertrust[list the assigned ownertrust values in ASCII format]:file:_files' '--import-ownertrust[update the trustdb with a file]:file:_files' '--dearmor[de-Armor a file or stdin]' '--enarmor[en-Armor a file or stdin]' '--print-md[print message digests]:algorithm:->ciphers::file:_files' '--print-mds[print message digests]::file:_files' '--gen-random:count' '--gen-prime' '--warranty[print warranty info]' '(-a --armor)'{-a,--armor}'[create ASCII armored output]' '--default-key[specify default user-id for signatures]:key:->secret-keys' '--default-recipient[specify default recipient]:recipient:->public-keys' '--default-recipient-self[use default key as default recipient]' '--no-default-recipient[reset default recipient]' '*--encrypt-to[specify recipient]:key:->public-keys' '(--encrypt-to)--no-encrypt-to[disable the use of all --encrypt-to keys]' '-z[specify compression level]:compression level:((0\:no\ compression 1\:minimum 2 3 4 5 6\:default 7 8 9\:maximum))' '(-t --textmode)'{-t,--textmode}'[use canonical text mode]' '(-n --dry-run)'{-n,--dry-run}"[don't make any changes]" '(-i --interactive --batch)'{-i,--interactive}'[prompt before overwriting files]' '(-i --interactive --no-batch)--batch[use batch mode]' '--no-tty[never output to tty]' '(--batch)--no-batch[disable batch mode]' '(--no)--yes[assume "yes" on most questions]' '(--yes)--no[assume "no" on most questions]' '--default-cert-check-level:check level:((0\:no\ claim 1\:no\ verification 2\:casual\ verification 3\:extensive\ verification))' '--trusted-key[assume that the specified key is trustworthy]:long key id' '--always-trust[skip key validation]' '--keyserver[specify key server to use]:key server:_hosts' '--keyserver-options[specify keyserver options]:options' '--import-options[specify options for importing keys]:options' '--export-options[specify options for exporting keys]:options' '--photo-viewer:command:_command_names -e' '--exec-path:path:_dir_list' '--show-keyring[display keyring name when listing keys]' '--secret-keyring[add specified file to list of secret keyrings]:file:_files' '--charset:character set:(iso-8859-1 iso-8859-2 koi8-r utf-8)' '--utf8-strings' '--no-utf8-strings[arguments are not in UTF8]' '(--no-options)--options[specify file to read options from]:options file:_files' "(--options)--no-options[don't read options file]" '--'{attribute,passphrase,command}'-fd:file descriptor:_file_descriptors' '--sk-comments[include secret key comments when exporting keys]' '(--emit-version)--no-emit-version[omit version string in clear text signatures]' '(--no-emit-version)--emit-version[force writing of version string in clear text signatures]' '(-N --notation-data)'{-N,--notation-data}'[put parameter in signature]:name=value' '(--no-show-notation)--show-notation[show key signature notations]' "(--show-notation)--no-show-notation[don't show key signature notations]" '--set-policy-url:policy URL' '--set-filename[specify file which is stored in messages]:file:_files' '--completes-needed:number' '--marginals-needed:number' '--max-cert-depth:number' '--'{{,disable-,s2k-}cipher,{,s2k-,cert-}digest,disable-pubkey}'-algo:cipher:->ciphers' '--s2k-mode:value' '--compress-algo:compression algorithm:((0\:disable\ compression 1\:zlib 2\:rfc1950))' '--personal-'{cipher,digest,compress}'-preferences:string' '--card-edit[present smartcard menu]' '--card-status[show smartcard content]' '--change-pin[present menu to change smartcard pin]' '--list-config[display internal configuration parameters]' '--hidden-recipient[hidden recipient]:recipient:->public-keys' '--dump-options[show all options]' '--default-preference-list:string' '--fetch-keys:URIs' '--hidden-encrypt-to:recipient:->public-keys' '--compress-level:integer' '--bzip2-compress-level:integer' '--default-cert-level:integer' '--max-output[maximum output generated when processing file]:bytes:' '--gpg-agent-info[override GPG_AGENT_INFO]:' '--primary-keyring:file:_files' '--verify-options:parameters:_multi_parts -q -S, "," "(show-photos show-policy-urls show-notations show-std-notations show-user-notations show-keyserver-urls show-uid-validity show-unusable-uids show-primary-uid-only pka-lookups pka-trust-increase)"' '--debug:flags:' '--status-file:file:_files' '--attribute-file:file:_files' '--load-extension:file:_files' '--s2k-count:integer' '--sig-notation:name=value:' '--cert-notation:name=value:' '--passphrase-file:file:_files' '--passphrase-repeat:integer:' '--command-file:file:_files' '--trustdb-name:file:_files' '--trust-model:trust model:((pgp classic direct always auto))' '--sig-policy-url:string:' '--cert-policy-url:string:' '--sig-keyserver-url:string:' '--comment[comment]:comment:' '--no-comments[disable comments]' '--logger-file[write log to file]:file:_files' '--rebuild-keydb-caches[create signature caches in keyring]' '--default-keyserver-url:name:' '--display-charset[set native charset]:charset:((iso-8859-1 iso-8859-2 iso-8859-15 koi8-r utf-8))' '--ungroup[remove group]:group name:' '--no-groups[remove all entries from --group list]' '--enable-progress-filter[enable progress status output]' '--multifile[process multiple files]' '--keyid-format[key id format]:key format:((short 0xshort long 0xlong))' '--exit-on-status-write-error[exit immediately on error write]' '--limit-card-insert-tries:integer:' '--reader-port[card reader port]:port:' '--ctapi-driver[file to use to access smartcard reader]:file:_files' '--pcsc-driver[file to use to access smartcard reader]:file:_files' '--auto-key-locate:parameters' '--dump-options[show all options]' ) extra=( ${${${args#\([^\)]#\)}#\*}%%[:=\[]*} ) extra=( ${allopts:|extra} ) _arguments -C -s -S -A "-*" $args $extra '*:args:->args' && ret=0 if [[ $state = args ]]; then if (( ${+opt_args[--export]} || ${+opt_args[--list-keys]} || ${+opt_args[--list-public-keys]} )); then state=public-keys elif (( ${+opt_args[--list-secret-keys]} )); then state=secret-keys else _files && return fi fi # We need to keep some arguments to get a consistent list of keys # etc. local -a needed integer krind=${words[(I)--keyring(|=*)]} needed=(${words[(r)--no-default-keyring]}) if (( krind )); then # We have a --keyring option. We can't be completing its # argument because that was handled above, so it must be complete. if [[ $words[krind] = --keyring ]]; then if [[ -n $words[krind+1] ]]; then needed+=(--keyring=$words[krind+1]) fi else needed+=($words[krind]) fi fi case "$state" in public-keys) _wanted public-keys expl 'public key' \ compadd ${${(Mo)$(_call_program public-keys gpg $needed --list-public-keys --list-options no-show-photos 2>/dev/null):%<*>}//(<|>)/} && return ;; secret-keys) _wanted secret-keys expl 'secret key' compadd \ ${${(Mo)$(_call_program secret-keys gpg $needed --list-secret-keys --list-options no-show-photos 2>/dev/null):%<*>}//(<|>)/} && return ;; ciphers) _wanted ciphers expl cipher compadd \ ${${(s.,.)${(M)${(f)"$(_call_program ciphers gpg $needed --version)"}:#Cipher*}#*:}# } && return ;; (public-keyids) _wanted public-keys expl 'public keyid' \ compadd ${${${(M)${(f)"$(_call_program public-keyids gpg $needed --list-public-keys --list-options no-show-photos 2>/dev/null)"}:%pub*}#pub */}%% *} && return ;; esac return ret