Register
It is currently Sat Nov 22, 2014 11:56 pm

GPG-Tool


All times are UTC - 6 hours


Post new topic Reply to topic  [ 2 posts ] 
Author Message
 PostPosted: Wed Jun 09, 2010 10:41 am   
Site Admin

Joined: Tue May 17, 2005 7:31 pm
Posts: 251
Location: Georgia
No... it's not completed. But here is what I have so far (last time I worked on this was about 2 years ago...)

Code:
########## things done ############################################
# flags :                                                         #
#           -i : imports a public key                             #
#          -e : exports the current user's public key             #
#          -cm : creates a new encrypted file (message)           #
#          -id : imports all the public keys in a directory       #
#                   (only public keys can be in this              #
#                     directory for now)                          #
#          -encrypt : encrypts a file specified                   #
#          -decrypt : decrypts a file specified                   #
#          -lpub : lists public keys                              #
#          -lpri : lists private keys                             #
###################################################################

########## things to do ###############################################
#  1. Allow complete automation from command line (no user prompting) #
#  2. List public keys (done)                                         #
#  3. List private keys  (done)                                       #
#  4. Sign public keys                                                #
#  5. Create dynamic list for keys (something to manipulate)          #
#  6. Do more brainstorming                                           #
#######################################################################

function print_help
{                 
        echo ":: The current working flags are as follows:"
        echo -e ":: \t-i (imports a public key)"           
        echo -e ":: \t-e (exports the current user's public key)"
        echo -e ":: \t-cm (creates an encrypted message using vi)"
        echo -e ":: \t-id (imports all files as public keys in a directory)"
        echo -e ":: \t-encrypt (encrypts a file specified by user)"         
        echo -e ":: \t-decrypt (decrypts a file specified by user)"         
        echo -e ":: \t-lpub (lists all public keys on public keyring)"     
        echo -e ":: \t-lpri (lists all private keys on private keyring)"   
}                                                                           

function list_private_keys
{                         
        clear;           
        echo ":: Listing private keys";
        gpg --list-secret-keys | less;
        echo ":: Done";               
}                                     

function list_public_keys
{                       
        clear;           
        echo ":: Listing public keys";
        gpg --list-keys | less;       
        echo ":: Done";               
}                                     


function decrypt_any_file
{                       
        filename="$1";   
        person=`whoami`;
        clear;           
        if [[ ${filename:${#filename}-11:11} -eq "-encrypted" ]]
        then                                                   
                newfilename="${filename:0:${#filename}-${#person}-12}";
                gpg -d --output "$newfilename" "$filename";           
                echo ":: Decrypted $filename";                         
                echo ":: Saved as $newfilename";                       
        else                                                           
                gpg -d --output "$filename.decrypted" "$filename";     
                echo ":: Decrypted $filename";                         
                echo ":: Saved as $filename.decrypted";               
        fi                                                             
}                                                                     

function encrypt_any_file
{                       
        filename="$1";   
        person="$2";     
        clear;           
        gpg -sea --output "$filename"."$person"-encrypted --recipient "$person";
        echo ":: File $filename encrypted";                                     
        echo ":: Encrypted file saved as $filename.$person-encrypted";         
}                                                                               

function export_public_key
{                         
        ID=$1;           
        gpg -ao $ID.pub --export $ID;
        echo ":: Public Key for $ID has been generated"
        echo ":: File is saved as $ID.pub"             
}                                                     

function import_public_directory
{                               
        DIR=$1;                 
        cd "$DIR";             
        for filename in *       
        do                     
                gpg --import "$filename";
        done;                           
        cd ~-;                           
}                                       

function create_encrypted_ascii_file
{                                   
        file=$1;                   
        person=$2;                 
        vi "$file";                 
        gpg -sea --output "$file.$person-encrypted" --recipient "$person" "$file";
        clear;                                                                   
        echo ":: Encrypted file created";                                         
        echo ":: File saved as $1.$person-encrypted";                             
        echo ":: Contents of file shown below";                                   
        echo -e "\n\n";                                                           
}                                                                                 

function import_public_key
{                         
        read -p "Please type the path of the public key you wish to import: " file
        if [[ -e "$file" ]]                                                       
        then                                                                     
                gpg --import "$file"                                             
        fi                                                                       

}

function create_user_list
{                       
        cat /etc/passwd | cut -d: -f1 > pre.list;
        cat pre.list | grep -v "root" > users.list;
        rm pre.list;                               
}                                                 

### doesn't work yet...havn't figured it out #########
# function export_public_all_users                   #
# {                                                  #
#       create_user_list;                            #
#       until ! read username                        #
#       do                                           #
#               export_public_key "$username";       #
#       done;                                        #
#       rm users.list                                #
# }                                                  #
######################################################

case $1 in

-i) import_public_key;
        ;;           

-e) user=`whoami`;
    export_public_key "$user";
        ;;                   

# -ea) export_public_all_users;
#       ;;                     

-cm) echo "Please type the name of the new message file";
    read -p "you wish to create and encrypt: " file;     
    echo "Please type the name of the person that you"; 
    read -p "are encrypting the message for: " person;   
    create_encrypted_ascii_file "$file" "$person";       
    echo -e ":: for $person \n"                         
    cat "$file.$person-encrypted";                       
        ;;                                               

-id) echo "Please type the path that holds the public keys";
     read -p "that you wish to import: " dir;               
     import_public_directory "$dir";                       
        ;;                                                 

-decrypt) echo "Please type the path and filename of";
          read -p "the file you wish to decrypt: " file;
          if [[ -e "$file" ]]                           
          then                                         
                decrypt_any_file "$file";               
                echo -e "\n\n";                         
                echo "::Done";                         
          else                                         
                echo ":: Error: File doesn't exist";   
          fi
                ;;

-encrypt) echo "Please type the path and filename of";
          read -p "the file you wish to encrypt: " file;
          if [[ -e "$file" ]]
          then
                echo "Please type the name of the person that you";
                read -p "are encrypting the message for: " person;
                encrypt_any_file "$file" "$person"
                echo -e "\n\n";
                echo ":: Done";
          else
                echo ":: Error: File doesn't exist";
          fi
                ;;

-lpub) list_public_keys;
        ;;

-lpri) list_private_keys;
        ;;

*)  echo ":: Choice not valid";
        print_help;
        ;;
esac


Top
 Profile  
 PostPosted: Wed Jun 09, 2010 8:19 pm   

Joined: Mon Mar 02, 2009 3:03 am
Posts: 567
Code:
create_user_list() {
   while IFS=':' read name _; do [ "$name" != root ] && echo $name; done </etc/passwd
}
no external progs!

this could even not be a function, as it could set the userList array once for good.
Code:
userList=( $(while IFS=':' read name _; do [ "$name" != root ] && echo $name; done </etc/passwd) )


and so on


Top
 Profile  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC - 6 hours


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Jump to:  
cron


BashScripts | Promote Your Page Too
Powered by phpBB © 2011 phpBB Group
© 2003 - 2011 USA LINUX USERS GROUP