def get_device(self, device_id): device_path = self.client.device_path(self.project_id, self.cloud_region, self.registry_id, device_id) try: device = self.client.get_device(request={ "name": device_path }) device_data = { "name": device.name, "id": device.id, "num_id": device.num_id, "last_heartbeat_time": str(device.last_heartbeat_time), "last_event_time": str(device.last_event_time), "last_error_time": str(device.last_error_time), "last_error_status": { "code": device.last_error_status.code, "message": device.last_error_status.message }, "credentials": [], "config": { "version": device.config.version, "cloud_update_time": str(device.config.cloud_update_time), "device_ack_time": str(device.config.device_ack_time), }, "last_config_ack_time": str(device.last_config_ack_time), "last_config_send_time": str(device.last_config_send_time), "gateway_config": {}, "last_state_time": str(device.last_state_time), "log_level": str(device.log_level) } RSAObject = RSACipher() RSAObject.set_public_key(public_key_file="keys/RSA/public.pem") for credential in device.credentials: aes_key = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase + string.digits, k=20)) encrypted_key = RSAObject.encrypt(plain_text=aes_key) AESObject = AESCipher(key=aes_key) encrypted_public_key_file = AESObject.encrypt(plain_text=credential.public_key.key) device_data["credentials"].append({ "public_key": { "format": "RSA_X509_PEM", "key": encrypted_public_key_file, "secret": encrypted_key }, "expiration_time": {} }) return device_data, {"success": True} except exceptions.NotFound: return {}, {"success": False, "message": "Device Not Found"}
import requests import random import string import json from AES.AESCipher import AESCipher from RSA.RSACipher import RSACipher from DeviceManagement.Manager import DeviceManager DEVICE_ID = "device-0" if __name__ == '__main__': RSAObject = RSACipher() RSAObject.set_public_key(public_key_file="keys/RSA/public.pem") print("ENCRYPTION IN PROGRESS!") aes_key = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase + string.digits, k=20)) encrypted_key = RSAObject.encrypt(plain_text=aes_key) print("AES Key: {}\n".format(encrypted_key)) AESObject = AESCipher(key=aes_key) encrypted_public_key_file = AESObject.encrypt(plain_text=open("keys/public_key.pub", 'r').read()) print("Encrypted Public Key File: \n{}\n".format(encrypted_public_key_file)) response = requests.post(url="http://localhost:5000/device", json={ "id": DEVICE_ID, "key": encrypted_public_key_file, "secret": encrypted_key }) print(response.status_code)
def encrypt(self, message): box = AESCipher(self.session_key, 16) return str(box.encrypt(message))