added --with-colons to change how you get the key-id as this seems to be different on some systems for some reason this method seems to be reliable across Linux systems.
74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
import subprocess
|
|
import random
|
|
import string
|
|
import sys
|
|
import os
|
|
|
|
|
|
#check if input is a file
|
|
if os.path.exists(sys.argv[1]) != True:
|
|
print "you typed something wrong, could not find that file"
|
|
else:
|
|
file_to_upload = sys.argv[1]
|
|
if "." in sys.argv[1]:
|
|
domain = sys.argv[1][sys.argv[1].index("."):]
|
|
else:
|
|
domain = ""
|
|
|
|
keyservaddr = "add valid key server here"
|
|
|
|
def parse_n_upload(upload_file):
|
|
#generate random data for credentials
|
|
user_name = ''.join(random.choice(string.ascii_uppercase) for _ in range(10))
|
|
email = ''.join(random.choice(string.ascii_uppercase) for _ in range(10)) + "@" +\
|
|
''.join(random.choice(string.ascii_uppercase) for _ in range(5)) + domain
|
|
|
|
passphrase = ''.join(random.choice(string.ascii_uppercase) for _ in range(5))
|
|
key_server = keyservaddr #any key server is good as it will propogate world wide
|
|
|
|
#unattended key generation
|
|
p=subprocess.Popen('gpg2 --batch --pinentry-mode=loopback --passphrase ' + passphrase +\
|
|
' --quick-gen-key "' + user_name + ' ' + email + '" rsa1024', shell=True,\
|
|
stdout=subprocess.PIPE)
|
|
|
|
out, err = p.communicate()
|
|
|
|
#get pub key
|
|
p=subprocess.Popen("gpg2 --list-key --with-colons " + email, shell=True, stdout=subprocess.PIPE)
|
|
out, err = p.communicate()
|
|
# parse out the key id so we can use it to send keys to the key servers
|
|
key = key = [x.replace(':', '').replace('fpr', '') for x in out.split() if "fpr" in x][0]
|
|
|
|
#read file and add it to the gpg key as plain text
|
|
with open(upload_file, 'r') as infile:
|
|
for x in infile.readlines():
|
|
if x:
|
|
print x
|
|
p=subprocess.Popen("gpg2 --batch --pinentry-mode=loopback --passphrase " + passphrase +\
|
|
" --quick-add-uid " + email + " " + '"' + x + '"', shell=True, stdout=subprocess.PIPE)
|
|
out, err = p.communicate()
|
|
print "key added"
|
|
else:
|
|
print "empty string ignoring"
|
|
|
|
|
|
#finally send keys to a server
|
|
p=subprocess.Popen("torsocks gpg2 --keyserver " + key_server + " --send-keys " +\
|
|
key, shell=True, stdout=subprocess.PIPE)
|
|
out, err = p.communicate()
|
|
if err:
|
|
print "something went wrong with sending"
|
|
|
|
#remove keys when done as they are not needed anymore
|
|
p=subprocess.Popen("gpg --batch --yes --delete-secret-keys " + key +\
|
|
"&& gpg --batch --yes --delete-keys " + key, shell=True, stdout=subprocess.PIPE)
|
|
|
|
if err == None:
|
|
print "removing temp keys\n"
|
|
print "It can take 3-10mins before your key appears on your chosen server\n"
|
|
print "http://" + key_server + "/pks/lookup?search=" + email + "&op=index"
|
|
else:
|
|
print "something went wrong try again"
|
|
|
|
parse_n_upload(file_to_upload)
|