Home | History | Annotate | Download | only in firmware_SetFWMP
      1 # Copyright 2017 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging
      6 import time
      7 
      8 from autotest_lib.client.bin import test
      9 from autotest_lib.client.common_lib import error
     10 from autotest_lib.client.cros import cryptohome
     11 
     12 
     13 class firmware_SetFWMP(test.test):
     14     """Set the FWMP flags and dev_key_hash."""
     15     version = 1
     16 
     17     def own_tpm(self):
     18         """Own the TPM"""
     19         cryptohome.take_tpm_ownership()
     20         for i in range(4):
     21             status = cryptohome.get_tpm_status()
     22             if status['Owned']:
     23                 return status
     24             time.sleep(2)
     25         raise error.TestFail('Failed to own the TPM %s' % status)
     26 
     27     def run_once(self, fwmp_cleared=True, flags=None, dev_key_hash=None):
     28         # make sure the FMWP is in the expected state
     29         cryptohome.get_fwmp(fwmp_cleared)
     30         status = cryptohome.get_tpm_status()
     31         # Own the TPM
     32         if not status['Owned']:
     33             status = self.own_tpm()
     34 
     35         # Verify we have access to the password
     36         if not status['Password']:
     37             logging.warning('No access to the password')
     38 
     39         logging.info(status)
     40 
     41         # Set the FWMP flags using a dev key hash
     42         cryptohome.set_fwmp(flags, dev_key_hash)
     43 
     44         # Check that the flags are set
     45         fwmp = cryptohome.get_fwmp()
     46         if flags and fwmp['flags'] != str(int(flags, 16)):
     47             raise error.TestFail('Unexpected FWMP status: %s', fwmp)
     48