nog meer object georienteerd, wel netjes vind ik zelf
This commit is contained in:
parent
b012d081dd
commit
b1afd1d30e
|
@ -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
|
Reference in New Issue