signing script werkt
This commit is contained in:
parent
6c1343e6f4
commit
f2844f2376
|
@ -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-----
|
|
@ -0,0 +1,6 @@
|
|||
-----BEGIN PUBLIC KEY-----
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgUpB8X/Yr0eZldQ8nBfDm/10F
|
||||
vOm4yNYbM1IHNYsEaEZUVFPD8DUttXslbipurVMPP6IGxJZHer7UX4mVi0y4b9Fh
|
||||
AkGhrn3mTZrH9sspZVXUmxhfAzxGxrPsi+9Y3/GjE3Ov8S3cVDI79YXSP2K0NJuG
|
||||
GRR4N8haCI/zAR9clQIDAQAB
|
||||
-----END PUBLIC KEY-----
|
|
@ -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.
|
@ -0,0 +1 @@
|
|||
dit is een test file waarop de signature wordt voor gemaakt
|
Reference in New Issue