Exemple #1
0
    def get(self, uid):
        '''
        The uid of the file_object in question has to be given in the url
        The return format will be {"binary": b64_encoded_binary, "file_name": file_name}
        '''
        with ConnectTo(FrontEndDbInterface, self.config) as db_service:
            existence = db_service.existence_quick_check(uid)
        if not existence:
            return error_message('No firmware with UID {} found in database'.format(uid), self.URL, request_data={'uid': uid}, return_code=404)

        try:
            tar_flag = get_boolean_from_request(request.args, 'tar')
        except ValueError as value_error:
            return error_message(str(value_error), self.URL, request_data=dict(uid=uid, tar=request.args.get('tar')))

        with ConnectTo(InterComFrontEndBinding, self.config) as intercom:
            if not tar_flag:
                binary, file_name = intercom.get_binary_and_filename(uid)
            else:
                binary, file_name = intercom.get_repacked_binary_and_file_name(uid)

        response = {
            'binary': standard_b64encode(binary).decode(),
            'file_name': file_name,
            'SHA256': get_sha256(binary)
        }
        return success_message(response, self.URL, request_data={'uid': uid, 'tar': tar_flag})
Exemple #2
0
 def test_init_dsk(self):
     test_file = os.path.join(TEST_DATA_DIR, 'test.dsk1')
     test_obj = DskOne(test_file)
     self.assertEqual(test_obj.raw[1:4], b'DSK', 'Raw Data not set correct')
     self.assertEqual(test_obj.header[1], b'DSK1.0', 'header parsing not correct')
     self.assertEqual(test_obj.payload_size, 860293, 'payload length not correct')
     self.assertEqual(get_sha256(test_obj.decoded_payload), '057e936e6c1d45d617fe52decd532776c95c06a1b5e4a8f752d4227a645e5edc', 'payload checksum not correct')
Exemple #3
0
def create_uid(input_data):
    '''
    creates an unique identifier: SHA256_SIZE
    '''
    hash_value = get_sha256(input_data)
    size = len(make_bytes(input_data))
    return "{}_{}".format(hash_value, size)
Exemple #4
0
def create_uid(input_data: bytes) -> str:
    '''
    generate a UID (unique identifier) SHA256_SIZE for a byte string containing data (e.g. a binary)

    :param input_data: the data to generate the UID for
    :return: a string containing the UID
    '''
    hash_value = get_sha256(input_data)
    size = len(make_bytes(input_data))
    return '{}_{}'.format(hash_value, size)
Exemple #5
0
    def set_binary(self, binary: bytes) -> None:
        '''
        Store the binary representation of the file as byte string.
        Additionally set binary related meta data (size, hash) and compute uid after that.

        :param binary: file in binary representation
        '''
        self.binary = make_bytes(binary)
        self.sha256 = get_sha256(self.binary)
        self.size = len(self.binary)
        self._uid = create_uid(binary)
Exemple #6
0
    def test_compute_sha256_of_file(self):
        data = b'-' * 2000

        with TemporaryDirectory(prefix='unit_test_') as tmp_dir:
            test_file = Path(tmp_dir) / 'test_file'
            with open(test_file, 'wb') as f:
                f.write(data)

            sha256 = compute_sha256_of_file(test_file)
            # test that the computed sha is the same with both methods
            self.assertEqual(get_sha256(data), sha256,
                             "not correct from string")
 def test_extraction(self):
     in_file = os.path.join(TEST_DATA_DIR, 'test.zlib')
     files, meta_data = self.unpacker.extract_files_from_file(
         in_file, self.tmp_dir.name)
     self.assertEqual(len(files), 1,
                      'number of extracted files not correct')
     self.assertEqual(files[0],
                      os.path.join(self.tmp_dir.name, 'zlib_decompressed'),
                      'file name not correct')
     file_binary = get_binary_from_file(files[0])
     file_hash = get_sha256(file_binary)
     self.assertEqual(
         file_hash,
         'e429103649e24ca126077bfb38cce8c57cc913a966d7e36356e4fe0513ab02c4')
     self.assertEqual(len(meta_data.keys()), 4,
                      'more or fewer than standard keys in meta dict')
Exemple #8
0
 def test_header_and_binary(self):
     files, meta_data = self.unpacker.extract_files_from_file(
         self.test_file.file_path, self.tmp_dir.name)
     files = set(files)
     self.assertEqual(len(files), 1, 'file number incorrect')
     data_bin = get_binary_from_file(
         os.path.join(self.tmp_dir.name, 'dlm_data.bin'))
     self.assertEqual(
         get_sha256(data_bin),
         '701962b0d11f50d9129d5a1655ee054865e90cd1b547d40d590ea96f7dfb64eb')
     self.assertEqual(meta_data['dlm_version'], 'NO_DLM_VERSION_CHECK',
                      'meta: dlm_version not correct')
     self.assertEqual(
         meta_data['dlm_signature'],
         '90ec11f7b52468378362987a4ed9e56855070915887e6afe567e1c47875b29f9',
         'meta: dlm_signature not correct')
     self.assertEqual(meta_data['dlm_name'], '080415_08142013',
                      'meta: dlm_name not correct')
     self.assertEqual(meta_data['dlm_extraction_criteria'],
                      'upgradeExtract.sh /tmp/080415_08142013.dnld',
                      'meta: dlm_criteria not correct')
    def get(self, uid):
        '''
        The uid of the file_object in question has to be given in the url
        The return format will be {"binary": b64_encoded_binary, "file_name": file_name}
        '''
        with ConnectTo(FrontEndDbInterface, self.config) as db_service:
            existence = db_service.existence_quick_check(uid)
        if not existence:
            return error_message(
                'No firmware with UID {} found in database'.format(uid),
                self.URL,
                request_data={'uid': uid},
                return_code=404)

        with ConnectTo(InterComFrontEndBinding, self.config) as intercom:
            binary, file_name = intercom.get_binary_and_filename(uid)

        response = {
            'binary': standard_b64encode(binary).decode(),
            'file_name': file_name,
            'SHA256': get_sha256(binary)
        }
        return success_message(response, self.URL, request_data={'uid': uid})
Exemple #10
0
 def set_binary(self, binary):
     self.binary = make_bytes(binary)
     self.sha256 = get_sha256(self.binary)
     self.size = len(self.binary)
     self.uid = create_uid(binary)
def generate_task_id(input_data):
    serialized_data = pickle.dumps(input_data)
    task_id = '{}_{}'.format(get_sha256(serialized_data), time())
    return task_id
 def _hash_compare(self, filename, hashsum):
     binary_data = get_binary_from_file(
         os.path.join(self.tmp_dir.name, filename))
     self.assertEqual(get_sha256(binary_data), hashsum,
                      'Checksum incorrect for file {}'.format(filename))
Exemple #13
0
def test_get_sha256():
    assert get_sha256(TEST_STRING) == TEST_SHA256, 'not correct from string'
Exemple #14
0
 def test_get_sha256(self):
     self.assertEqual(get_sha256(self.test_string), self.test_string_SHA256,
                      "not correct from string")