blob: b6cc17a0dfe3c30d1d1d2c21bb2200759c83f400 [file] [log] [blame]
// Copyright 2019 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 U2FD_ALLOWLISTING_UTIL_H_
#define U2FD_ALLOWLISTING_UTIL_H_
#include <functional>
#include <memory>
#include <string>
#include <vector>
#include <attestation/proto_bindings/interface.pb.h>
#include <base/optional.h>
#include <policy/libpolicy.h>
namespace u2f {
// Utility to append allowlisting data to a U2F_REGISTER response.
class AllowlistingUtil {
public:
// Creates a new utility, which will make use of the specified function to
// retrieve a certified copy of the G2F certificate.
AllowlistingUtil(
std::function<base::Optional<attestation::GetCertifiedNvIndexReply>(int)>
get_certified_g2f_cert);
virtual ~AllowlistingUtil() = default;
// Appends allowlisting data to the specified certificate. Returns true on
// success. On failure, returns false, and does not modify |cert|.
virtual bool AppendDataToCert(std::vector<uint8_t>* cert);
// To use a mock policy provider in tests.
void SetPolicyProviderForTest(
std::unique_ptr<policy::PolicyProvider> provider);
private:
// Retrieves the 'certified' attestation data from attestationd, and writes
// the relevant allowlisting data to |cert_prefix| and |signature|. Returns
// true on success.
bool GetCertifiedAttestationCert(int orig_cert_size,
std::vector<uint8_t>* cert_prefix,
std::vector<uint8_t>* signature);
// Returns the device 'Directory API ID', or nullopt on failure.
base::Optional<std::string> GetDeviceId();
std::function<base::Optional<attestation::GetCertifiedNvIndexReply>(int)>
get_certified_g2f_cert_;
std::unique_ptr<policy::PolicyProvider> policy_provider_;
};
} // namespace u2f
#endif // U2FD_ALLOWLISTING_UTIL_H_