mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
32 lines
871 B
Python
32 lines
871 B
Python
import os
|
|
|
|
from Crypto.Cipher import PKCS1_OAEP
|
|
from Crypto.PublicKey import RSA
|
|
|
|
|
|
def generate_random_key(bits=256):
|
|
"""
|
|
Generate a random encryption key. Sizes is given in bits and must be in increments of 32.
|
|
"""
|
|
if bits % 32:
|
|
raise Exception("Invalid key size ({}). Key sizes must be in increments of 32 bits.".format(bits))
|
|
return os.urandom(int(bits / 8))
|
|
|
|
|
|
def encrypt_master_key(master_key, public_key):
|
|
"""
|
|
Encrypt a secret key with the provided public RSA key.
|
|
"""
|
|
key = RSA.importKey(public_key)
|
|
cipher = PKCS1_OAEP.new(key)
|
|
return cipher.encrypt(master_key)
|
|
|
|
|
|
def decrypt_master_key(master_key_cipher, private_key):
|
|
"""
|
|
Decrypt a secret key with the provided private RSA key.
|
|
"""
|
|
key = RSA.importKey(private_key)
|
|
cipher = PKCS1_OAEP.new(key)
|
|
return cipher.decrypt(master_key_cipher)
|