[fix] gpg.sh & update gitconfig
[dotfiles_afify.git] / .scripts / gpg.sh
blob5a664b8d2683a13b7e5c9fee9bfe9a839cd1ea09
1 #!/usr/bin/env bash
3 selected_key=
5 select_key(){
6 case $1 in
7 public) reg="pub" list="--list-public-keys" ;;
8 private) reg="sec" list="--list-secret-keys" ;;
9 esac
10 case $(uname) in
11 Linux) datef="date --date=@" ;;
12 OpenBSD) datef="date -r " ;;
13 esac
14 ids=$(gpg2 $list --with-colons | awk -F: "/^$reg.*\$/ {print \$5}")
15 formated=$(
16 for each_id in $ids ;do
17 name_date=$(gpg2 $list --with-colons $each_id |\
18 awk -v datef="$datef" -F: '/^uid:.*$/\
19 {(""datef""$6" +\"%a %d, %b %Y\" ")|\
20 getline formated_date;
21 print $10 " " formated_date}')
22 echo $each_id $name_date
23 done)
24 selected_key=$(echo -e "$formated" | dmenu -l 10 | awk '{print $1}')
25 if [[ ! $selected_key ]]; then exit; fi
28 create_new_key(){
29 echo "Key-Type: 1
30 Key-Length: 4096
31 Subkey-Type: 1
32 Subkey-Length: 4096
33 Expire-Date: 0
34 Name-Real: Hassan Afify
35 Name-Email: hassan@afify.dev" | gpg2 --gen-key --batch
38 delete_key(){
39 pub_or_pri=$(echo -e "public\nprivate" | dmenu -p 'Choose key type: ')
40 case $pub_or_pri in
41 public)select_key public
42 gpg2 --delete-key $selected_key ;;
43 private)select_key private
44 gpg2 --delete-secret-keys $selected_key
45 d_pub=$(echo -e "yes\nno" | dmenu -p 'delete public key also ? ')
46 if [[ "$d_pub" == "yes" ]]; then gpg2 --delete-key $selected_key; fi ;;
47 *) exit ;;
48 esac
51 print_full(){
52 gpg2 --list-keys --keyid-format LONG --fingerprint --with-keygrip
53 gpg2 --list-secret-keys --keyid-format LONG --fingerprint --with-keygrip
56 export_key(){
57 pub_or_pri=$(echo -e "public\nprivate" | dmenu -p 'Choose key type: ')
58 case $pub_or_pri in
59 public) select_key public
60 gpg2 --armor --export $selected_key ;;
61 private) select_key private
62 gpg2 --export-secret-keys $selected_key ;;
63 esac
66 upload_to_server(){
67 select_key private
68 gpg2 --send-keys $selected_key
71 find_by_email(){
72 gpg2 --keyserver keys.gnupg.net --search-key $1
75 import(){
76 gpg2 --import $1
80 # encrypt_file(){
81 # if [[ -f $1 ]]; then
82 # filename=$1
83 # pass=$2
84 # # TODO encrypt with many public keys
85 # gpg2--recipient $pub_id --encrypt $of.bz2
86 # # gpg2--yes --batch --passphrase=$pass -c $filename
87 # # gpg2--encrypt --recipient 'admin@example.com' --output confidential.txt.enc public.txt
88 # fi
89 # }
91 # decrypt_file(){
92 # if [[ -f $1 ]]; then
93 # # TODO files end with .gpg
94 # filename=$1
95 # pass=$2
96 # # TODO
97 # gpg2--output $output --decrypt $filename
98 # # gpg2--yes --batch --passphrase=$pass $filename
99 # # gpg2--decrypt --output public.txt confidential.txt.enc
100 # fi
103 # sign_file(){
104 # #TODO
105 # gpg2--sign
108 # vertify_file(){
109 # #TODO
110 # gpg2-vert
113 restart_agent(){
114 gpg-connect-agent reloadagent /bye
117 edit_key(){
118 select_key private
119 gpg2 --edit-key $selected_key
123 case $1 in
124 gen) create_new_key ;;
125 show) print_full ;;
126 restart) restart_agent ;;
127 public) select_key public
128 echo $selected_key ;;
129 private) select_key private
130 echo $selected_key ;;
131 delete) delete_key ;;
132 edit) edit_key ;;
133 export) export_key $2 ;;
134 upload) upload_to_server ;;
135 find) find_by_email $2 ;;
136 import) import $2 ;;
137 # encrypt) encrypt_file $2 ;;
138 # decrypt) decrypt_file $2 ;;
139 # sign) sign_file $2 ;;
140 # vertify) vertify_file $2 ;;
141 esac