48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
# Copyright 2017 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 logging
|
|
import time
|
|
|
|
from autotest_lib.client.bin import test
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.cros import cryptohome
|
|
|
|
|
|
class firmware_SetFWMP(test.test):
|
|
"""Set the FWMP flags and dev_key_hash."""
|
|
version = 1
|
|
|
|
def own_tpm(self):
|
|
"""Own the TPM"""
|
|
cryptohome.take_tpm_ownership()
|
|
for i in range(4):
|
|
status = cryptohome.get_tpm_status()
|
|
if status['Owned']:
|
|
return status
|
|
time.sleep(2)
|
|
raise error.TestFail('Failed to own the TPM %s' % status)
|
|
|
|
def run_once(self, fwmp_cleared=True, flags=None, dev_key_hash=None):
|
|
# make sure the FMWP is in the expected state
|
|
cryptohome.get_fwmp(fwmp_cleared)
|
|
status = cryptohome.get_tpm_status()
|
|
# Own the TPM
|
|
if not status['Owned']:
|
|
status = self.own_tpm()
|
|
|
|
# Verify we have access to the password
|
|
if not status['Password']:
|
|
logging.warning('No access to the password')
|
|
|
|
logging.info(status)
|
|
|
|
# Set the FWMP flags using a dev key hash
|
|
cryptohome.set_fwmp(flags, dev_key_hash)
|
|
|
|
# Check that the flags are set
|
|
fwmp = cryptohome.get_fwmp()
|
|
if flags and fwmp['flags'] != str(int(flags, 16)):
|
|
raise error.TestFail('Unexpected FWMP status: %s', fwmp)
|