1
Fork 0

nog meer object georienteerd, wel netjes vind ik zelf

This commit is contained in:
Ventilaar 2021-10-18 15:49:17 +02:00
parent b012d081dd
commit b1afd1d30e
1 changed files with 38 additions and 24 deletions

View File

@ -3,7 +3,33 @@ from Crypto.PublicKey import RSA # pycryptodome, eventueel downloaden met pip
from Crypto.Hash import SHA256
from Crypto.Signature import pkcs1_15
def open_privatekey(private_key_loc):
# Als dit niet object georienteerd programmeren is weet ik het ook niet meer -Taha Genc
def parse_args():
"""
parseer argumenten, let op dit werkt alleen als de script is aangeroepen met python!
"""
parser = argparse.ArgumentParser(description='Sign bestanden met keys')
parser.add_argument('input', help='Set input bestand wat gesigned moet worden') # verplicht!
parser.add_argument('-o', '--output', default=None, help="Set output signature, standaard 'inputbestand.ext.signature'") # optioneel
parser.add_argument('-p', '--privatekey', default='private.pem', help='Set privatekey, standaard private.pem') # eventueel andere privatekey
return parser.parse_args()
def check_output(out, input):
if out == None: # als output standaard behouden wordt
name = '' # maak lege naam aan
list = input.split('.')[:-1] # split naam op basis van punten en sla alleen alle waardes behalve de laatste op in een list, echt niet elegant maar het werkt
for x in list: # iterate list met waardes
name = name + x + '.' # maak weer een gehele string met punten
return name + 'signature' # append signature achter de naam
else: # output is geherdefinieerd
return out
def import_privatekey(private_key_loc):
"""
private_key_loc: bestands locatie van de private key
return: RSA pkey object
@ -54,28 +80,16 @@ def save_signature(output_loc, data):
return
def main(input_loc, output_loc, private_key_loc):
loaded_privkey = open_privatekey(private_key_loc) # laad private key
loaded_file = open_tobesigned(input_loc) # laad bestand
file_hash = generate_hash(loaded_file) # genereer hash van bestand
signature = generate_signature(loaded_privkey, file_hash) # genereer signature van hash en pkey
save_signature(output_loc, signature) # sla signature op
"""
De hoofdfunctie wat wordt aangeroepen
1. Open privatekey
2. Open bestand
3. Genereer hash van bestand
4. Genereer signature van hash met privatekey
5. Sla signature op in bestand
"""
save_signature(output_loc, generate_signature(import_privatekey(private_key_loc), generate_hash(open_tobesigned(input_loc)))) # wat een oneliner wow
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Sign bestanden met keys')
parser.add_argument('input', help='Set input bestand wat gesigned moet worden') # verplicht!
parser.add_argument('-o', '--output', default=None, help="Set output signature, standaard 'inputbestand.ext.signature'") # optioneel
parser.add_argument('-p', '--privatekey', default='private.pem', help='Set privatekey, standaard private.pem') # eventueel andere privatekey
args = parser.parse_args()
if args.output == None: # als output standaard behouden wordt
# dit is echt niet elegant maar werkt 99.9%!
name = '' # maak lege naam aan
list = args.input.split('.')[:-1] # split naam op basis van punten en sla alleen alle waardes behalve de laatste op in een list
for x in list: # iterate list met waardes
name = name + x + '.' # maak weer een gehele string met punten
output = name + 'signature' # append signature achter de naam
else: # output is geherdefinieerd
output = args.output
main(args.input, output, args.privatekey)
options = parse_args() # haal argumenten op
main(options.input, check_output(options.output, options.input), options.privatekey) # roep main functie aan met gekregen argumenten