init
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
import botan2 as botan
|
||||
import base64
|
||||
|
||||
class CryptoLib:
|
||||
@staticmethod
|
||||
def generate_keys(key_size=2048):
|
||||
"""Generate RSA key pair"""
|
||||
rng = botan.RandomNumberGenerator()
|
||||
private_key = botan.PrivateKey.create("RSA", str(key_size), rng)
|
||||
public_key = private_key.get_public_key()
|
||||
return private_key, public_key
|
||||
|
||||
@staticmethod
|
||||
def encrypt(public_key, data):
|
||||
"""Encrypt data with public key"""
|
||||
if isinstance(data, str):
|
||||
data = data.encode('utf-8')
|
||||
rng = botan.RandomNumberGenerator()
|
||||
encryptor = botan.PKEncrypt(public_key, "OAEP(SHA-256)")
|
||||
return encryptor.encrypt(data, rng)
|
||||
|
||||
@staticmethod
|
||||
def decrypt(private_key, encrypted_data):
|
||||
"""Decrypt data with private key"""
|
||||
decryptor = botan.PKDecrypt(private_key, "OAEP(SHA-256)")
|
||||
return decryptor.decrypt(encrypted_data)
|
||||
|
||||
@staticmethod
|
||||
def public_key_to_string(public_key):
|
||||
"""Convert public key to PEM string"""
|
||||
return public_key.to_pem().encode('utf-8')
|
||||
|
||||
@staticmethod
|
||||
def public_key_from_string(key_string):
|
||||
"""Load public key from PEM string"""
|
||||
if isinstance(key_string, str):
|
||||
key_string = key_string.encode('utf-8')
|
||||
return botan.PublicKey.load(key_string)
|
||||
|
||||
@staticmethod
|
||||
def private_key_to_string(private_key):
|
||||
"""Convert private key to PEM string"""
|
||||
return private_key.to_pem().decode('utf-8')
|
||||
|
||||
@staticmethod
|
||||
def private_key_from_string(key_string):
|
||||
"""Load private key from PEM string"""
|
||||
if isinstance(key_string, str):
|
||||
key_string = key_string.encode('utf-8')
|
||||
return botan.PrivateKey.load(key_string)
|
||||
|
||||
@staticmethod
|
||||
def save_private_key(private_key, filename):
|
||||
"""Save private key to file"""
|
||||
with open(filename, 'w') as f:
|
||||
# f.write(private_key.to_pem().encode('utf-8'))
|
||||
f.write(private_key.to_pem())
|
||||
|
||||
@staticmethod
|
||||
def save_public_key(public_key, filename):
|
||||
"""Save public key to file"""
|
||||
with open(filename, 'w') as f:
|
||||
# f.write(public_key.to_pem().decode('utf-8'))
|
||||
f.write(public_key.to_pem())
|
||||
|
||||
@staticmethod
|
||||
def load_private_key(filename):
|
||||
"""Load private key from file"""
|
||||
with open(filename, 'r') as f:
|
||||
pem_data = f.read()
|
||||
return botan.PrivateKey.load(pem_data.encode('utf-8'))
|
||||
|
||||
@staticmethod
|
||||
def load_public_key(filename):
|
||||
"""Load public key from file"""
|
||||
with open(filename, 'r') as f:
|
||||
pem_data = f.read()
|
||||
return botan.PublicKey.load(pem_data.encode('utf-8'))
|
||||
|
||||
@staticmethod
|
||||
def bytes_to_base64(public_key: bytes) -> str:
|
||||
return base64.b64encode(public_key).decode('utf-8')
|
||||
|
||||
@staticmethod
|
||||
def base64_to_bytes(key_string: str) -> bytes:
|
||||
return base64.b64decode(key_string.encode('utf-8'))
|
||||
Reference in New Issue
Block a user