101dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
201dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah# Use of this source code is governed by a BSD-style license that can be
301dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah# found in the LICENSE file.
401dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah
5c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahnimport time
601dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah
7c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahnfrom autotest_lib.client.bin import test
801dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shahfrom autotest_lib.client.common_lib import error
9c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahnfrom autotest_lib.client.common_lib.cros import chrome
10c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahnfrom autotest_lib.client.cros import pkcs11
1101dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah
12c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahnclass platform_Pkcs11InitOnLogin(test.test):
13c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn    """This test logs in and verifies that the TPM token is working."""
1401dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah    version = 1
1501dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah
1601dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah    def run_once(self):
1701dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah        start_time = time.time()
18c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn        with chrome.Chrome() as cr:
19c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn            if not pkcs11.wait_for_pkcs11_token():
20c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn                raise error.TestFail('The PKCS #11 token is not available.')
2101dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah            end_time = time.time()
2201dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah            self.write_perf_keyval(
2301dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah                { 'seconds_pkcs11_onlogin_init': end_time - start_time } )
2401dd4fbb0fa91b41a2fd7e670fd1ade9731cb060Gaurav Shah            if not pkcs11.verify_pkcs11_initialized():
25aa4ec73ebec3656f0992c95797ac6de514e1cb1eDarren Krahn                raise error.TestFail('Initialized token failed checks!')
26c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn            if not pkcs11.inject_and_test_key():
27c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn                raise error.TestFail('Failed to inject a key.')
28c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn        # Login again with the same account.
29c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn        with chrome.Chrome(dont_override_profile=True) as cr:
30c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn            if not pkcs11.wait_for_pkcs11_token():
31c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn                raise error.TestFail(
32c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn                    'The PKCS #11 token is no longer available.')
33c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn            if not pkcs11.test_and_cleanup_key():
34c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn                raise error.TestFail('The PKCS #11 key is no longer valid.')
35c3ef0f30d1d92f9522a7c9084ed4c904cda7b643Darren Krahn
36