# Copyright (c) 2012 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, utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import cryptohome


class platform_Attestation(test.test):
    version = 1

    def enroll(self):
        utils.system(cryptohome.CRYPTOHOME_CMD +
                     ' --action=tpm_attestation_start_enroll' +
                     ' --file=/tmp/__attestation_enroll_request')
        utils.system('curl' +
                     ' --data-binary "@/tmp/__attestation_enroll_request"' +
                     ' -o "/tmp/__attestation_enroll_response"' +
                     ' -H "Content-Type: application/octet-stream"' +
                     ' https://chromeos-ca.gstatic.com/enroll')
        utils.system(cryptohome.CRYPTOHOME_CMD +
                     ' --action=tpm_attestation_finish_enroll' +
                     ' --file=/tmp/__attestation_enroll_response')

    def cert_request(self):
        utils.system(cryptohome.CRYPTOHOME_CMD +
                     ' --action=tpm_attestation_start_cert_request' +
                     ' --file=/tmp/__attestation_cert_request')
        utils.system('curl --data-binary "@/tmp/__attestation_cert_request"' +
                     ' -o "/tmp/__attestation_cert_response"' +
                     ' -H "Content-Type: application/octet-stream"' +
                     ' https://chromeos-ca.gstatic.com/sign')
        utils.system(cryptohome.CRYPTOHOME_CMD +
                     ' --action=tpm_attestation_finish_cert_request' +
                     ' --file=/tmp/__attestation_cert_response' +
                     ' --name=test')

    def run_once(self):
        status = cryptohome.get_tpm_attestation_status()
        if (not status['Prepared']):
            raise error.TestFail('Attestation enrollment is not possible.')
        self.enroll()
        status = cryptohome.get_tpm_attestation_status()
        if (not status['Enrolled']):
            raise error.TestFail('Attestation not successfully enrolled.')
        self.cert_request()
