# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import os from autotest_lib.client.bin import test, utils from autotest_lib.client.common_lib import error class firmware_VbootCrypto(test.test): """ Tests for correctness of verified boot reference crypto implementation. """ version = 1 preserve_srcdir = True # TODO(gauravsh): Disable this autotest until we have a way # of running these in a 64-bit environment (since for x86, this # code is run in 64-bit mode. # # This issue is tracked as Issue 3792 on the Chromium OS Bug Tracker. # http://code.google.com/p/chromium-os/issues/detail?id=3792 def setup_Disabled(self): os.chdir(self.srcdir) utils.make('clean') utils.make('all') # Parses the [result] and output the key-value pairs. def __output_result_keyvals(self, results): for keyval in results.splitlines(): if keyval.strip().startswith('#'): continue key, val = keyval.split(':') self.keyvals[key.strip()] = float(val) def __generate_test_cases(self): gen_test_case_cmd = os.path.join(self.srcdir, "tests", "gen_test_cases.sh") return_code = utils.system(gen_test_case_cmd, ignore_status = True) if return_code == 255: return False if return_code == 1: raise error.TestError("Couldn't generate test cases") return True def __sha_test(self): sha_test_cmd = os.path.join(self.srcdir, "tests", "sha_tests") return_code = utils.system(sha_test_cmd, ignore_status=True) if return_code == 255: return False if return_code == 1: raise error.TestError("SHA Test Error") return True def __rsa_test(self): os.chdir(self.srcdir) rsa_test_cmd = os.path.join(self.srcdir, "tests", "run_rsa_tests.sh") return_code = utils.system(rsa_test_cmd, ignore_status=True) if return_code == 255: return False if return_code == 1: raise error.TestError("RSA Test Error") return True def __image_verification_test(self): image_verification_cmd = "cd %s && ./run_image_verification_tests.sh" \ % os.path.join(self.srcdir, "tests") return_code = utils.system(image_verification_cmd, ignore_status=True) if return_code == 255: return False if return_code == 1: raise error.TestError("Image Verification Test Error") return True def __sha_benchmark(self): sha_benchmark_cmd = os.path.join(self.srcdir, "tests", "sha_benchmark") self.results = utils.system_output(sha_benchmark_cmd, retain_output=True) self.__output_result_keyvals(self.results) def __rsa_benchmark(self): rsa_benchmark_cmd = "cd %s && ./rsa_verify_benchmark" % \ os.path.join(self.srcdir, "tests") self.results = utils.system_output(rsa_benchmark_cmd, retain_output=True) self.__output_result_keyvals(self.results) def __verify_image_benchmark(self): firmware_benchmark_cmd = "cd %s && ./firmware_verify_benchmark" % \ os.path.join(self.srcdir, "tests") kernel_benchmark_cmd = "cd %s && ./kernel_verify_benchmark" % \ os.path.join(self.srcdir, "tests") self.results = utils.system_output(firmware_benchmark_cmd, retain_output=True) self.__output_result_keyvals(self.results) self.results = utils.system_output(kernel_benchmark_cmd, retain_output=True) self.__output_result_keyvals(self.results) def __rollback_tests(self): firmware_rollback_test_cmd = "cd %s && ./firmware_rollback_tests" % \ os.path.join(self.srcdir, "tests") kernel_rollback_test_cmd = "cd %s && ./kernel_rollback_tests" % \ os.path.join(self.srcdir, "tests") return_code = utils.system(firmware_rollback_test_cmd, ignore_status=True) if return_code == 255: return False if return_code == 1: raise error.TestError("Firmware Rollback Test Error") return_code = utils.system(kernel_rollback_test_cmd, ignore_status=True) if return_code == 255: return False if return_code == 1: raise error.TestError("KernelRollback Test Error") return True def __splicing_tests(self): firmware_splicing_test_cmd = "cd %s && ./firmware_splicing_tests" % \ os.path.join(self.srcdir, "tests") kernel_splicing_test_cmd = "cd %s && ./kernel_splicing_tests" % \ os.path.join(self.srcdir, "tests") return_code = utils.system(firmware_splicing_test_cmd, ignore_status=True) if return_code == 255: return False if return_code == 1: raise error.TestError("Firmware Splicing Test Error") return_code = utils.system(kernel_splicing_test_cmd, ignore_status=True) if return_code == 255: return False if return_code == 1: raise error.TestError("Kernel Splicing Test Error") return True def run_crypto(self): success = self.__sha_test() if not success: raise error.TestFail("SHA Test Failed") success = self.__rsa_test() if not success: raise error.TestFail("RSA Test Failed") def run_verification(self): success = self.__image_verification_test() if not success: raise error.TestFail("Image Verification Test Failed") def run_benchmarks(self): self.keyvals = {} self.__sha_benchmark() self.__rsa_benchmark() self.__verify_image_benchmark() self.write_perf_keyval(self.keyvals) def run_rollback(self): success = self.__rollback_tests() if not success: raise error.TestFail("Rollback Tests Failed") def run_splicing(self): success = self.__splicing_tests() if not success: raise error.TestFail("Splicing Tests Failed") def run_once(self, suite='crypto'): self.__generate_test_cases() getattr(self, 'run_' + suite)()