1
Fork 0

signing script werkt

This commit is contained in:
Ventilaar 2021-10-18 15:29:38 +02:00
parent 6c1343e6f4
commit f2844f2376
5 changed files with 103 additions and 0 deletions

View File

@ -0,0 +1,15 @@
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQCgUpB8X/Yr0eZldQ8nBfDm/10FvOm4yNYbM1IHNYsEaEZUVFPD
8DUttXslbipurVMPP6IGxJZHer7UX4mVi0y4b9FhAkGhrn3mTZrH9sspZVXUmxhf
AzxGxrPsi+9Y3/GjE3Ov8S3cVDI79YXSP2K0NJuGGRR4N8haCI/zAR9clQIDAQAB
AoGABSZp1Ej73i/9s/Qk8ra25KC+4vyM0H4JHLITGD6w0skruzFDSJfKiYebJ1po
3AnO0X5UjN2bSzwG7ckM4SQqqHQMJsb/xxjtgvlQ2PfVwRSvLaTAnDPLObfN5+T4
eeDSyF7enWqsIBVoMmtwEvYapalk94zRpcsdYPr9YQAWq0ECQQC/5eFLpFM/jGZ2
rTZ6j0viekSFxvCXQMVoQ9BKrV1QQX8oJKgFFfLQ7OVS9BMs/rLmaV1NllaKpiNz
4xxb5qJVAkEA1eCD66+/YCAN1FXWOnOCA5nzIrGXt4kjbb6cIhU4uG9lDFsBE+HU
Wa3/N9XDjKWjHuCpx03IFd8rUXo5LSaRQQJBAJogK0SStd47iOxWkIP9ZaiAJVsA
/qms9yCYHspr1Z+pC1UVo/F5wG13Z3Sp3mDsLIoNJEg1sEppx93DEjrp0YUCQQCg
RYG2IVpBF2QlpTlHTf204y3O5tRxhgQVnkv0QoDhvSA09RFGq+lsVrY1Siwi/pDR
d7vijYgN09HrWbL1AbzBAkEAtSAlN5pNJ/ZcJU0KlsybR3QjPXcUjyzmKp6HTRvn
ROOnvaGSyi3Gy94R7s36v2g32uKkqhpSOy564FfKoyq4pg==
-----END RSA PRIVATE KEY-----

View File

@ -0,0 +1,6 @@
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgUpB8X/Yr0eZldQ8nBfDm/10F
vOm4yNYbM1IHNYsEaEZUVFPD8DUttXslbipurVMPP6IGxJZHer7UX4mVi0y4b9Fh
AkGhrn3mTZrH9sspZVXUmxhfAzxGxrPsi+9Y3/GjE3Ov8S3cVDI79YXSP2K0NJuG
GRR4N8haCI/zAR9clQIDAQAB
-----END PUBLIC KEY-----

View File

@ -0,0 +1,81 @@
import argparse # standaard libary
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):
"""
private_key_loc: bestands locatie van de private key
return: RSA pkey object
functie om de privatekey te openen en direct te importeren in een RSA object
"""
return RSA.import_key(open(private_key_loc).read())
def open_tobesigned(input_loc):
"""
input_loc: bestands locate van het bestand wat ondertekent moet worden
return: binary inhoud van bestand
functie opent bestand als binary
"""
with open(input_loc, 'rb') as file:
return file.read()
def generate_hash(data):
"""
data: binary data
return: binary hash
genereert sha256 hash op basis van binary data
"""
return SHA256.new(data)
def generate_signature(pkey, hash):
"""
pkey: private key in RSA object formaat
hash: hash wat gesigned moet worden in binary formaat
return: binary signature data
genereert een signature op basis van de hash en private key
"""
return pkcs1_15.new(pkey).sign(hash)
def save_signature(output_loc, data):
"""
output_loc: bestands locatie waar de binary signature moet worden opgeslagen
data: binary signature data
return: niets
slaat binair de signature data op in bestand
"""
with open(output_loc, 'wb') as file:
file.write(bytes(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
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)

Binary file not shown.

View File

@ -0,0 +1 @@
dit is een test file waarop de signature wordt voor gemaakt