Example #1
0
    def sign(self, init_packet_data):
        """
        Create signature for init package using P-256 curve and SHA-256 as hashing algorithm
        Returns R and S keys combined in a 64 byte array
        """
        # Add assertion of init_packet
        if self.sk is None:
            raise IllegalStateException(
                "Can't save key. No key created/loaded")

        # Sign the init-packet
        signature = self.sk.sign(init_packet_data,
                                 hashfunc=hashlib.sha256,
                                 sigencode=sigencode_string)
        return signature[31::-1] + signature[63:31:-1]
Example #2
0
    def open(self):
        if self.dfu_adapter:
            raise IllegalStateException('DFU Adapter is already open')

        super(DfuTransportBle, self).open()
        driver = DfuBLEDriver(serial_port=self.serial_port,
                              baud_rate=self.baud_rate)
        adapter = BLEAdapter(driver)
        self.dfu_adapter = DFUAdapter(adapter=adapter,
                                      bonded=self.bonded,
                                      keyset=self.keyset)
        self.dfu_adapter.open()
        self.target_device_name, self.target_device_addr = self.dfu_adapter.connect(
            target_device_name=self.target_device_name,
            target_device_addr=self.target_device_addr)
        self.__set_prn()
Example #3
0
    def verify(self, init_packet, signature):
        """
        Verify init packet
        """
        # Add assertion of init_packet
        if self.sk is None:
            raise IllegalStateException("Can't save key. No key created/loaded")

        vk = self.sk.get_verifying_key()

        # Verify init packet
        try:
            vk.verify(signature, init_packet, hashfunc=hashlib.sha256)
        except:
            return False

        return True
Example #4
0
    def get_vk(self, output_type, dbg) -> str:
        """
        Get public key (as hex, code or pem)
        """
        if self.sk is None:
            raise IllegalStateException("Can't get key. No key created/loaded")

        if output_type is None:
            raise InvalidArgumentException("Invalid output type for public key.")
        elif output_type == 'hex':
            return self.get_vk_hex()
        elif output_type == 'code':
            return self.get_vk_code(dbg)
        elif output_type == 'pem':
            return self.get_vk_pem()
        else:
            raise InvalidArgumentException("Invalid argument. Can't get key")
Example #5
0
    def get_sk(self, output_type, dbg):
        """
        Get private key (as hex, code or pem)
        """
        if self.sk is None:
            raise IllegalStateException("Can't get key. No key created/loaded")

        if output_type is None:
            raise InvalidArgumentException("Invalid output type for private key.")
        elif output_type == 'hex':
            return self.get_sk_hex()
        elif output_type == 'code':
            raise InvalidArgumentException("Private key cannot be shown as code")
        elif output_type == 'pem':
            return self.sk.to_pem()
        else:
            raise InvalidArgumentException("Invalid argument. Can't get key")
Example #6
0
    def get_sk_hex(self):
        """
        Get the verification key as hex
        """
        if self.sk is None:
            raise IllegalStateException("Can't get key. No key created/loaded")

        sk_hexlify = binascii.hexlify(self.sk.to_string())

        sk_hexlify_list = []
        for i in xrange(len(sk_hexlify) - 2, -2, -2):
            sk_hexlify_list.append(sk_hexlify[i:i + 2])

        sk_hexlify_list_str = ''.join(sk_hexlify_list)

        vk_hex = "Private (signing) key sk:\n{0}".format(sk_hexlify_list_str)

        return vk_hex
Example #7
0
    def get_vk_hex(self):
        """
        Get the verification key as hex
        """
        if self.sk is None:
            raise IllegalStateException("Can't get key. No key created/loaded")

        vk = self.sk.get_verifying_key()
        vk_hexlify = binascii.hexlify(vk.to_string())

        vk_hexlify_list = []
        for i in xrange(len(vk_hexlify[0:64])-2, -2, -2):
            vk_hexlify_list.append(vk_hexlify[i:i+2])

        for i in xrange(len(vk_hexlify)-2, 62, -2):
            vk_hexlify_list.append(vk_hexlify[i:i+2])

        vk_hexlify_list_str = ''.join(vk_hexlify_list)

        vk_hex = "Public (verification) key pk:\n{0}".format(vk_hexlify_list_str)

        return vk_hex
Example #8
0
 def close(self):
     if not self.dfu_adapter:
         raise IllegalStateException('DFU Adapter is already closed')
     super(DfuTransportBle, self).close()
     self.dfu_adapter.close()
     self.dfu_adapter = None