blob: 691ee2e8cc77e5863fcccfc3cb877a53710fb602 [file] [log] [blame]
// Copyright 2017 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.
#include <base/logging.h>
#include <brillo/flag_helper.h>
#include <brillo/syslog_logging.h>
#include <brillo/vcsid.h>
#include <sysexits.h>
#include "u2fd/u2f_daemon.h"
namespace {
constexpr uint32_t kDefaultVendorId = 0x18d1;
constexpr uint32_t kDefaultProductId = 0x502c;
// TODO(b/232714525): Before this feature is completed, use a known (vid, pid)
// pair when corp protocol is enabled by force flag for testing purpose.
constexpr uint32_t kCorpVendorId = 4176;
constexpr uint32_t kCorpProductId = 512;
} // namespace
int main(int argc, char* argv[]) {
DEFINE_bool(force_u2f, false, "force U2F mode even if disabled by policy");
DEFINE_bool(force_g2f, false,
"force U2F mode plus extensions regardless of policy");
DEFINE_bool(g2f_allowlist_data, false,
"append allowlisting data to G2F register responses");
DEFINE_bool(verbose, false, "verbose logging");
DEFINE_bool(user_keys, false, "Whether to use user-specific keys");
DEFINE_bool(legacy_kh_fallback, false,
"Whether to allow auth with legacy keys when user-specific keys "
"are enabled");
DEFINE_bool(force_corp_protocol, false, "enable corp internal APDU protocl");
brillo::FlagHelper::Init(argc, argv, "u2fd, U2FHID emulation daemon.");
brillo::InitLog(brillo::kLogToSyslog | brillo::kLogHeader |
brillo::kLogToStderrIfTty);
if (FLAGS_verbose)
logging::SetMinLogLevel(-1);
LOG(INFO) << "Daemon version " << brillo::kShortVCSID.value_or("<unknown>");
bool legacy_kh_fallback = FLAGS_legacy_kh_fallback || !FLAGS_user_keys;
uint32_t vendor_id =
FLAGS_force_corp_protocol ? kCorpVendorId : kDefaultVendorId;
uint32_t product_id =
FLAGS_force_corp_protocol ? kCorpProductId : kDefaultProductId;
u2f::U2fDaemon daemon(FLAGS_force_u2f, FLAGS_force_g2f,
FLAGS_force_corp_protocol, FLAGS_g2f_allowlist_data,
legacy_kh_fallback, vendor_id, product_id);
int rc = daemon.Run();
return rc == EX_UNAVAILABLE ? EX_OK : rc;
}