from ecdsa import SigningKey, VerifyingKey, SECP256k1, keys from hashlib import sha256 # from ecies import encrypt, decrypt def create_keys(password:bytes) -> tuple[VerifyingKey, SigningKey]: # type: ignore privateKey = SigningKey.from_string(password, curve=SECP256k1) publicKey:VerifyingKey = privateKey.get_verifying_key() return (publicKey, privateKey) def create_pem(fullpath, privateKey:SigningKey, publicKey:VerifyingKey): with open(fullpath+"privateKey.pem", "wb") as f: f.write(privateKey.to_pem(format="pkcs8")) with open(fullpath+"publicKey.pem", "wb") as f: f.write(publicKey.to_pem()) def read_pem(fullpath): with open(fullpath+"privateKey.pem") as f: privateKey = SigningKey.from_pem(f.read()) with open(fullpath+"publicKey.pem") as f: publicKey = VerifyingKey.from_pem(f.read()) return (privateKey, publicKey) def sign_message(message:str, privateKey:SigningKey) -> bytes: return privateKey.sign(message.encode('utf-8'), hashfunc=sha256) def load_signing_key(signing_key:bytes) -> SigningKey: return SigningKey.from_string(signing_key, curve=SECP256k1, hashfunc=sha256) def get_verifying_key(signing_key:SigningKey) -> VerifyingKey: return signing_key.get_verifying_key() def load_verifying_key(verifying_key:bytes) -> VerifyingKey: return VerifyingKey.from_string(verifying_key, curve=SECP256k1, hashfunc=sha256) def verify_message(message:bytes, signature:bytes, publicKey:VerifyingKey) -> bool: try: return publicKey.verify(signature, message, hashfunc=sha256) except keys.BadSignatureError: return False # ecdsa_vk.to_string('compressed') or vk_bytes # def encrypt_message(verifying_key:bytes, message:bytes): # return encrypt(verifying_key, message) # ecdsa_sk.to_string() or sk_bytes # def decrypt_message(signing_key:bytes, message:bytes): # return decrypt(signing_key, message) # password = b'#LucasGabrielVazDosSantosInacio!' # vk,sk = create_keys(password) # import base64 # print(base64.b64encode(vk.to_string('compressed')).decode()) # pk ='AuWgGLOi4VUxYQnZzcXqtzl1nA4H4MAL+fzLgjf+TX8C' # message= '{"text":"Hello","public_key":"AuWgGLOi4VUxYQnZzcXqtzl1nA4H4MAL+fzLgjf+TX8C","pof":"69201","signature":null,"files":[],"networks":["000"],"datetime":"2024-10-06T07:08:30.419000Z","parents":[]}' # sig = 'dRAyr67oZXblKEqS9EpghhS7mbl1DOoqCF8n8krQ2KsTcV9VRK6Hc4O2A27WkdjW2ZEaalp2PbPd1ZamAMJJ/A==' # pk = load_verifying_key(base64.b64decode(pk)) # sig = base64.b64decode(sig) # print(verify_message(message.encode(), sig, pk))