blob: 731fd3ca4be040821ed9a713704ad68bea34819d [file] [log] [blame]
# Copyright 2014 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.
from autotest_lib.client.bin import test
from autotest_lib.client.cros import cryptohome, pkcs11
class platform_CryptohomeKeyEviction(test.test):
"""Ensure that the cryptohome properly manages key eviction from the tpm.
This test verifies this behaviour by creating 30 keys using chaps,
and then remounting a user's cryptohome. Mount requires use of the
user's cryptohome key, and thus the mount only succeeds if the
cryptohome key was properly evicted and reloaded into the TPM.
"""
version = 1
def run_once(self):
# Make sure that the tpm is owned.
status = cryptohome.get_tpm_status()
if not status['Owned']:
cryptohome.take_tpm_ownership()
self.user = 'first_user@nowhere.com'
password = 'test_password'
cryptohome.ensure_clean_cryptohome_for(self.user, password)
# First we inject 30 tokens into chaps. This forces the cryptohome
# key to get evicted.
for i in range(30):
pkcs11.inject_and_test_key()
# Then we get a user to remount his cryptohome. This process uses
# the cryptohome key, and if the user was able to login, the
# cryptohome key was correctly reloaded.
cryptohome.unmount_vault(self.user)
cryptohome.mount_vault(self.user, password, create=True)
def cleanup(self):
cryptohome.unmount_vault(self.user)
cryptohome.remove_vault(self.user)