xltdp/incubate/keymo-ksv/ksv/keymo/storage.py
2023-01-30 17:32:57 -07:00

45 lines
1.6 KiB
Python

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
class KeyStorage:
def __init__(self):
self.private_key = None
self.public_key = None
def import_pem_private_key(self, passphrase:str, pem_file):
with open(pem_file, "rb") as key_file:
self.private_key = serialization.load_pem_private_key(
key_file.read(),
password=passphrase.encode(),
backend=default_backend()
)
def import_pem_public_key(self, pem_file):
with open(pem_file, "rb") as key_file:
self.public_key = serialization.load_pem_public_key(
key_file.read(),
backend=default_backend()
)
def export_pem_private_key(self, passphrase:str, pem_file):
if self.private_key:
pem = self.private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.BestAvailableEncryption(passphrase.encode())
)
with open(pem_file, 'wb') as f:
f.write(pem)
else:
raise ValueError("No private key found!")
def export_public_key(self, pem_file):
if self.public_key:
pem = self.public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
with open(pem_file, 'wb') as f:
f.write(pem)
else:
raise ValueError("No public key found!")