// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_METRICS_STRUCTURED_LIB_KEY_DATA_H_ #define COMPONENTS_METRICS_STRUCTURED_LIB_KEY_DATA_H_ #include <memory> #include <optional> #include <string> #include <string_view> #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" #include "base/task/sequenced_task_runner.h" #include "base/time/time.h" #include "components/metrics/structured/lib/persistent_proto.h" #include "components/metrics/structured/lib/proto/key.pb.h" namespace metrics::structured { // KeyData is the central class for managing keys and generating hashes for // structured metrics. // // The class maintains one key and its rotation data for every project defined // in /tools/metrics/structured/sync/structured.xml. This can be used to // generate: // - an ID for the project with KeyData::Id. // - a hash of a given value for an event with KeyData::HmacMetric. // // Every project has a uint64_t project_name_hash that is generated by taking // the first 8 bytes of MD5 hash of the project name. Keys for the project are // retrieved using this project_name_hash. For more details, refer to // //tools/metrics/structured/ccodegen.py. // // KeyData performs key rotation. Every project is associated with a rotation // period, which is 90 days unless specified in structured.xml. Keys are rotated // with a resolution of one day. They are guaranteed not to be used for // HmacMetric or UserProjectId for longer than their rotation period, except in // cases of local clock changes. // // When first created, every project's key rotation date is selected uniformly // so that there is an even distribution of rotations across users. This means // that, for most users, the first rotation period will be shorter than the // standard full rotation period for that project. class KeyData { … }; } // namespace metrics::structured #endif // COMPONENTS_METRICS_STRUCTURED_LIB_KEY_DATA_H_