blob: fff4efa6d2dc65721689024207d26b537ff66ebf [file] [log] [blame]
// Copyright 2020 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.
#ifndef HWSEC_TEST_UTILS_VERIFIED_ACCESS_VERIFIED_ACCESS_H_
#define HWSEC_TEST_UTILS_VERIFIED_ACCESS_VERIFIED_ACCESS_H_
#include <string>
#include <attestation/proto_bindings/attestation_ca.pb.h>
#include <base/optional.h>
namespace hwsec_test_utils {
namespace verified_access {
// This functional class performs the operation at VA server part w/o expect for
// checking validity of key used to sign challenges.
class VerifiedAccessChallenge {
public:
VerifiedAccessChallenge();
~VerifiedAccessChallenge() = default;
// Not copyable or movable.
VerifiedAccessChallenge(const VerifiedAccessChallenge&) = delete;
VerifiedAccessChallenge& operator=(const VerifiedAccessChallenge&) = delete;
VerifiedAccessChallenge(VerifiedAccessChallenge&&) = delete;
VerifiedAccessChallenge& operator=(VerifiedAccessChallenge&&) = delete;
// Creates |attestation::SignedData| which can be verified with the well-known
// VA signing key. The challenge string is set to |prefix|. Returns
// |base::nullopt| if the generation fails.
base::Optional<attestation::SignedData> GenerateChallenge(
const std::string& prefix);
// Verifies |challenge_response|, which is generated by attestation service
// repsonding to the challenge with |prefix|. The SPKAC in
// |challenge_response| is encrypted by with well-known VA encryption key.
bool VerifyChallengeResponse(
const attestation::SignedData& signed_challenge_response,
const std::string& prefix);
};
} // namespace verified_access
} // namespace hwsec_test_utils
#endif // HWSEC_TEST_UTILS_VERIFIED_ACCESS_VERIFIED_ACCESS_H_