/bash_completion.d/openssl
http://github.com/brinkman83/bashrc · #! · 251 lines · 240 code · 11 blank · 0 comment · 0 complexity · 6dc17627e7e0f0e20c36595e66c75393 MD5 · raw file
- # bash completion for openssl
- have openssl && {
- _openssl_sections()
- {
- local config f
- # check if a specific configuration file is used
- for (( i=2; i < COMP_CWORD; i++ )); do
- if [[ "${COMP_WORDS[i]}" == -config ]]; then
- config=${COMP_WORDS[i+1]}
- break
- fi
- done
- # if no config given, check some usual default locations
- if [ -z "$config" ]; then
- for f in /etc/ssl/openssl.cnf /etc/pki/tls/openssl.cnf \
- /usr/share/ssl/openssl.cnf; do
- [ -f $f ] && config=$f && break
- done
- fi
- [ ! -f "$config" ] && return 0
- COMPREPLY=( $( compgen -W "$( awk '/\[.*\]/ {print $2}' $config )" \
- -- "$cur" ) )
- }
- _openssl()
- {
- local cur prev commands command options formats
- COMPREPLY=()
- cur=`_get_cword`
- commands='asn1parse ca ciphers crl crl2pkcs7 dgst dh dhparam dsa \
- dsaparam ec ecparam enc engine errstr gendh gendsa genrsa \
- nseq ocsp passwd pkcs12 pkcs7 pkcs8 prime rand req rsa \
- rsautl s_client s_server s_time sess_id smime speed spkac \
- verify version x509 md2 md4 md5 rmd160 sha sha1 aes-128-cbc \
- aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb \
- base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc \
- camellia-128-ecb camellia-192-cbc camellia-192-ecb \
- camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc \
- cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb \
- des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 \
- des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx rc2 \
- rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 \
- rc4-40'
- if [ $COMP_CWORD -eq 1 ]; then
- COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) )
- else
- command=${COMP_WORDS[1]}
- prev=${COMP_WORDS[COMP_CWORD-1]}
- case $prev in
- -@(CA|CAfile|CAkey|CAserial|cert|certfile|config|content|dcert|dkey|dhparam|extfile|in|inkey|kfile|key|keyout|out|oid|prvrify|rand|recip|revoke|sess_in|sess_out|spkac|sign|signkey|signer|signature|ss_cert|untrusted|verify))
- _filedir
- return 0
- ;;
- -@(outdir|CApath))
- _filedir -d
- return 0
- ;;
- -@(name|crlexts|extensions))
- _openssl_sections
- return 0
- ;;
- -@(in|out|key|cert|CA|CAkey|dkey|dcert)form)
- formats='DER PEM'
- case $command in
- x509)
- formats="$formats NET"
- ;;
- smime)
- formats="$formats SMIME"
- ;;
- esac
- COMPREPLY=( $( compgen -W "$formats" -- "$cur" ) )
- return 0
- ;;
- -connect)
- _known_hosts_real "$cur"
- return 0
- ;;
- -starttls)
- COMPREPLY=( $( compgen -W 'smtp pop3 imap ftp' \
- -- "$cur" ) )
- return 0
- ;;
- -cipher)
- COMPREPLY=( $( compgen -W "$(openssl ciphers | \
- tr ':' '\n')" -- "$cur" ) )
- return 0
- ;;
- esac
- if [[ "$cur" == -* ]]; then
- # possible options for the command
- case $command in
- asn1parse)
- options='-inform -in -out -noout -offset -length -i -oid \
- -strparse'
- ;;
- ca)
- options='-verbose -config -name -gencrl -revoke \
- -crl_reason -crl_hold -crl_compromise \
- -crl_CA_compromise -crldays -crlhours -crlexts \
- -startdate -enddate -days -md -policy -keyfile -key \
- -passin -cert -selfsig -in -out -notext -outdir \
- -infiles -spkac -ss_cert -preserveDN -noemailDN \
- -batch -msie_hack -extensions -extfile -engine \
- -subj -utf8 -multivalue-rdn'
- ;;
- ciphers)
- options='-v -ssl2 -ssl3 -tls1'
- ;;
- crl)
- options='-inform -outform -text -in -out -noout -hash \
- -issuer -lastupdate -nextupdate -CAfile -CApath'
- ;;
- crl2pkcs7)
- options='-inform -outform -in -out -print_certs'
- ;;
- dgst)
- options='-md5 -md4 -md2 -sha1 -sha -mdc2 -ripemd160 -dss1 \
- -c -d -hex -binary -out -sign -verify -prverify \
- -signature'
- ;;
- dsa)
- options='-inform -outform -in -passin -out -passout -des \
- -des3 -idea -text -noout -modulus -pubin -pubout'
- ;;
- dsaparam)
- options='-inform -outform -in -out -noout -text -C -rand \
- -genkey'
- ;;
- enc)
- options='-ciphername -in -out -pass -e -d -a -A -k -kfile \
- -S -K -iv -p -P -bufsize -debug'
- ;;
- dhparam)
- options='-inform -outform -in -out -dsaparam -noout -text \
- -C -2 -5 -rand'
- ;;
- gendsa)
- options='-out -des -des3 -idea -rand'
- ;;
- genrsa)
- options='-out -passout -des -des3 -idea -f4 -3 -rand'
- ;;
- pkcs7)
- options='-inform -outform -in -out -print_certs -text \
- -noout'
- ;;
- rand)
- options='-out -rand -base64'
- ;;
- req)
- options='-inform -outform -in -passin -out -passout -text \
- -noout -verify -modulus -new -rand -newkey -newkey \
- -nodes -key -keyform -keyout -md5 -sha1 -md2 -mdc2 \
- -config -x509 -days -asn1-kludge -newhdr -extensions \
- -reqexts section'
- ;;
- rsa)
- options='-inform -outform -in -passin -out -passout \
- -sgckey -des -des3 -idea -text -noout -modulus -check \
- -pubin -pubout -engine'
- ;;
- rsautl)
- options='-in -out -inkey -pubin -certin -sign -verify \
- -encrypt -decrypt -pkcs -ssl -raw -hexdump -asn1parse'
- ;;
- s_client)
- options='-connect -verify -cert -certform -key -keyform \
- -pass -CApath -CAfile -reconnect -pause -showcerts \
- -debug -msg -nbio_test -state -nbio -crlf -ign_eof \
- -quiet -ssl2 -ssl3 -tls1 -no_ssl2 -no_ssl3 -no_tls1 \
- -bugs -cipher -starttls -engine -tlsextdebug \
- -no_ticket -sess_out -sess_in -rand'
- ;;
- s_server)
- options='-accept -context -verify -Verify -crl_check \
- -crl_check_all -cert -certform -key -keyform -pass \
- -dcert -dcertform -dkey -dkeyform -dpass -dhparam \
- -nbio -nbio_test -crlf -debug -msg -state -CApath \
- -CAfile -nocert -cipher -quiet -no_tmp_rsa -ssl2 \
- -ssl3 -tls1 -no_ssl2 -no_ssl3 -no_tls1 -no_dhe \
- -bugs -hack -www -WWW -HTTP -engine -tlsextdebug \
- -no_ticket -id_prefix -rand'
- ;;
- s_time)
- options='-connect -www -cert -key -CApath -CAfile -reuse \
- -new -verify -nbio -time -ssl2 -ssl3 -bugs -cipher'
- ;;
- sess_id)
- options='-inform -outform -in -out -text -noout -context \
- ID'
- ;;
- smime)
- options='-encrypt -decrypt -sign -verify -pk7out -des \
- -des3 -rc2-40 -rc2-64 -rc2-128 -aes128 -aes192 -aes256 \
- -in -certfile -signer -recip -inform -passin -inkey \
- -out -outform -content -to -from -subject -text -rand'
- ;;
- speed)
- options='-engine'
- ;;
- verify)
- options='-CApath -CAfile -purpose -untrusted -help \
- -issuer_checks -verbose -certificates'
- ;;
- x509)
- options='-inform -outform -keyform -CAform -CAkeyform -in \
- -out -serial -hash -subject-hash -issuer_hash -subject \
- -issuer -nameopt -email -startdate -enddate -purpose \
- -dates -modulus -fingerprint -alias -noout -trustout \
- -clrtrust -clrreject -addtrust -addreject -setalias \
- -days -set_serial -signkey -x509toreq -req -CA -CAkey \
- -CAcreateserial -CAserial -text -C -md2 -md5 -sha1 \
- -mdc2 -clrext -extfile -extensions -engine'
- ;;
- @(md5|md4|md2|sha1|sha|mdc2|ripemd160))
- options='-c -d'
- ;;
- esac
- COMPREPLY=( $( compgen -W "$options" -- "$cur" ) )
- else
- if [[ "$command" == speed ]]; then
- COMPREPLY=( $( compgen -W 'md2 mdc2 md5 hmac sha1 rmd160 \
- idea-cbc rc2-cbc rc5-cbc bf-cbc des-cbc des-ede3 rc4 \
- rsa512 rsa1024 rsa2048 rsa4096 dsa512 dsa1024 dsa2048 idea \
- rc2 des rsa blowfish' -- "$cur" ) )
- else
- _filedir
- fi
- fi
- fi
- }
- complete -F _openssl $default openssl
- }
- # Local variables:
- # mode: shell-script
- # sh-basic-offset: 4
- # sh-indent-comment: t
- # indent-tabs-mode: nil
- # End:
- # ex: ts=4 sw=4 et filetype=sh