blob: 8797b57c522769f56124d02db6bf97db20724889 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_ATTESTATION_TPM_CHALLENGE_KEY_WITH_TIMEOUT_H_
#define CHROME_BROWSER_ASH_ATTESTATION_TPM_CHALLENGE_KEY_WITH_TIMEOUT_H_
#include <memory>
#include <string>
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
#include "base/time/time.h"
#include "chrome/browser/ash/attestation/tpm_challenge_key.h"
#include "chrome/browser/profiles/profile.h"
namespace ash {
namespace attestation {
// Adds timeout restriction to |TpmChallengeKey| class. Can be safely deleted
// to cancel both timeout and challenge key tasks.
class TpmChallengeKeyWithTimeout final {
public:
// This object should live as long as result from |BuildResponse| via callback
// is expected.
TpmChallengeKeyWithTimeout();
TpmChallengeKeyWithTimeout(const TpmChallengeKeyWithTimeout&) = delete;
TpmChallengeKeyWithTimeout& operator=(const TpmChallengeKeyWithTimeout&) =
delete;
~TpmChallengeKeyWithTimeout();
// Tries to build a response for the |challenge|. Returns either timeout
// error or result from |TpmChallengeKey::BuildResponse| via |callback|.
void BuildResponse(base::TimeDelta timeout,
AttestationKeyType key_type,
Profile* profile,
TpmChallengeKeyCallback callback,
const std::string& challenge,
bool register_key,
const std::string& key_name_for_spkac);
private:
void ResolveCallback(const TpmChallengeKeyResult& result);
SEQUENCE_CHECKER(sequence_checker_);
std::unique_ptr<TpmChallengeKey> challenger_;
TpmChallengeKeyCallback callback_;
base::WeakPtrFactory<TpmChallengeKeyWithTimeout> weak_factory_{this};
};
} // namespace attestation
} // namespace ash
// TODO(https://crbug.com/1164001): remove after //chrome/browser/chromeos
// source migration is finished.
namespace chromeos {
namespace attestation {
using ::ash::attestation::TpmChallengeKeyWithTimeout;
} // namespace attestation
} // namespace chromeos
#endif // CHROME_BROWSER_ASH_ATTESTATION_TPM_CHALLENGE_KEY_WITH_TIMEOUT_H_