Esempio n. 1
0
    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"}
Esempio n. 2
0
def device_handler():
    if request.method == 'GET':
        if request.args.get("id") is None:
            devices, state = manager.list_devices()
            return jsonify({
                "success":
                state['success'],
                "devices":
                devices if state['success'] else [],
                "error":
                state['message'] if not state['success'] else ""
            })
        else:
            device, state = manager.get_device(
                device_id=request.args.get("id"))
            return jsonify({
                "success":
                state['success'],
                "device":
                device if state['success'] else {},
                "error":
                state['message'] if not state['success'] else ""
            })
    elif request.method == 'DELETE':
        if request.args.get("id") is None:
            return jsonify({
                "success": False,
                "error": "no device id provided"
            })

        result = manager.delete_device(device_id=request.args.get("id"))
        return jsonify(result)
    elif request.method == 'POST':
        request_data = request.get_json()

        if "id" not in request_data:
            return jsonify({
                "success": False,
                "error": "no device id provided"
            })

        if "key" not in request_data:
            return jsonify({
                "success": False,
                "error": "no public key provided"
            })

        if "secret" not in request_data:
            return jsonify({"success": False, "error": "no secret provided"})

        encrypted_public_key = request_data["key"]
        aes_key = request_data["secret"]
        device_id = request_data["id"]

        RSAObject = RSACipher()
        RSAObject.set_private_key(private_key_file="keys/RSA/private.pem")
        decrypted_aes_key = RSAObject.decrypt(encrypted_text=aes_key)
        AESObject = AESCipher(key=decrypted_aes_key)
        decrypted_public_key_file = AESObject.decrypt(
            encrypted_text=encrypted_public_key)

        response = manager.create_device(device_id=device_id,
                                         public_key=decrypted_public_key_file)
        return jsonify(response)
Esempio n. 3
0
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)
Esempio n. 4
0
 def hex_decrypt(self, message):
     box = AESCipher(self.session_key, 16)
     return box.hex_decrypt(message)
Esempio n. 5
0
 def decrypt(self, message):
     box = AESCipher(self.session_key, 16)
     return str(box.decrypt(message))