75 lines
1.5 KiB
Python
75 lines
1.5 KiB
Python
#
|
|
#
|
|
#
|
|
import logging
|
|
from Crypto.Signature import PKCS1_v1_5
|
|
from Crypto.PublicKey import RSA
|
|
from Crypto.Hash import SHA512
|
|
|
|
class Signature:
|
|
|
|
signature = None
|
|
key_data = None
|
|
pub_key = None
|
|
priv_key = None
|
|
|
|
#
|
|
def __init__(self):
|
|
self.genKeys()
|
|
|
|
#
|
|
def genSig(self, bin_data):
|
|
hshh = SHA512.new()
|
|
hshh.update(bin_data)
|
|
signer = PKCS1_v1_5.new(self.priv_key)
|
|
self.signature = signer.sign(hshh)
|
|
return self.signature
|
|
|
|
#
|
|
def verifySig(self, bin_data, bin_sig):
|
|
hshh = SHA512.new()
|
|
hshh.update(bin_data)
|
|
verifier = PKCS1_v1_5.new(self.pub_key)
|
|
return verifier.verify(hshh, bin_sig)
|
|
|
|
#
|
|
def genKeys(self):
|
|
logging.info("Generating public keys...")
|
|
self.key_data = RSA.generate(4096)
|
|
self.pub_key = RSA.importKey( self.key_data.publickey().exportKey('DER'))
|
|
self.priv_key = RSA.importKey( self.key_data.exportKey('DER'))
|
|
logging.debug(self.pub_key.exportKey('PEM'))
|
|
logging.debug(self.priv_key.exportKey('PEM'))
|
|
|
|
#
|
|
def getKeyPEM(self):
|
|
return self.key_data.exportKey('PEM')
|
|
|
|
#
|
|
def hashBin(self, bin_data):
|
|
hshh = SHA512.new()
|
|
hshh.update(bin_data)
|
|
img_hash = hshh.digest()
|
|
return img_hash
|
|
|
|
|
|
#
|
|
# TESTING
|
|
#
|
|
|
|
#
|
|
def _test():
|
|
msg = b'Hieee, this is a test =)'
|
|
|
|
sig = Signature()
|
|
sig_data = sig.genSig(msg)
|
|
print("Signature created")
|
|
print("sig_data=={}".format(sig_data))
|
|
|
|
isVerified = sig.verifySig(msg, sig_data)
|
|
print("isVerified=={}".format(str(isVerified)))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
_test()
|