| # Copyright 2018 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.common_lib import error |
| |
| # USB ID for the virtual U2F HID Device. |
| U2F_VID = '18D1' |
| U2F_PID = '502C' |
| |
| QUERY_U2F_DEVICE_ATTEMPTS=5 |
| QUERY_U2F_RETRY_DELAY_SEC=1 |
| |
| def ChromeOSLogin(client): |
| """Logs in to ChromeOS, so that u2fd can start up.""" |
| client.run('/usr/local/autotest/bin/autologin.py') |
| |
| def ChromeOSLogout(client): |
| """Logs out of ChromeOS, to return the device to a known state.""" |
| client.run('restart ui') |
| |
| def StartU2fd(client): |
| """Starts u2fd on the client. |
| |
| @param client: client object to run commands on. |
| """ |
| client.run('touch /var/lib/u2f/force/u2f.force') |
| client.run('restart u2fd') |
| |
| path = '/sys/bus/hid/devices/*:%s:%s.*/hidraw' % (U2F_VID, U2F_PID) |
| attempts = 0 |
| while attempts < QUERY_U2F_DEVICE_ATTEMPTS: |
| attempts += 1 |
| try: |
| return '/dev/' + client.run('ls ' + path).stdout.strip() |
| except error.AutoservRunError, e: |
| logging.info('Could not find U2F device on attempt ' + |
| str(attempts)) |
| time.sleep(QUERY_U2F_RETRY_DELAY_SEC) |
| |
| def G2fRegister(client, dev, challenge, application, p1=0): |
| """Returns a dictionary with TPM status. |
| |
| @param client: client object to run commands on. |
| """ |
| return client.run('g2ftool --reg --dev=' + dev + |
| ' --challenge=' + challenge + |
| ' --application=' + application + |
| ' --p1=' + str(p1), |
| ignore_status=True) |
| |
| def G2fAuth(client, dev, challenge, application, key_handle, p1=0): |
| """Returns a dictionary with TPM status. |
| |
| @param client: client object to run commands on. |
| """ |
| return client.run('g2ftool --auth --dev=' + dev + |
| ' --challenge=' + challenge + |
| ' --application=' + application + |
| ' --key_handle=' + key_handle + |
| ' --p1=' + str(p1), |
| ignore_status=True) |