blob: 1e57622957c77647c2b845d209812e5b96375839 [file] [log] [blame] [edit]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef RMAD_UTILS_HWID_UTILS_H_
#define RMAD_UTILS_HWID_UTILS_H_
#include <optional>
#include <string>
namespace rmad {
struct HwidElements {
std::optional<std::string> model_name;
std::optional<std::string> brand_code;
std::optional<std::string> encoded_components;
std::optional<std::string> checksum;
// Used by EXPECT_EQ.
bool operator==(const HwidElements&) const = default;
};
// |HwidUtils| only support HWID v3.
class HwidUtils {
public:
HwidUtils() = default;
virtual ~HwidUtils() = default;
// Verify the checksum of the given HWID string. The function will fail if the
// given HWID string has invalid length or the checksum is not correct.
virtual bool VerifyChecksum(const std::string& hwid) = 0;
// Validate the format of the HWID string provided. A valid HWID string should
// be in the a format like:
// <MODEL_NAME>-<RLZ_CODE> <(4N+1)CHARS_ENCODED_COMPONENT><(2)CHARS_CHECKSUM>
// , which:
// (1) Can be split into exactly 2 parts by whitespace.
// (2) The format of the first part is <MODEL>[-<BRAND_CODE>].
// (3) The encoded component part has a valid length (4N+1).
// (4) The length of the checksum is 2.
virtual bool VerifyHwidFormat(const std::string& hwid, bool has_checksum) = 0;
// Decompose the given HWID string and return HwidElements, which contains
// `model name`, `brand code`, `encoded components`, and `checksum`.
virtual std::optional<HwidElements> DecomposeHwid(
const std::string& hwid) = 0;
// Calculate checksum from the given HWID string without checksum. The
// original checksum should be stripped before passing the HWID string to the
// function.
virtual std::optional<std::string> CalculateChecksum(
const std::string& hwid) const = 0;
};
} // namespace rmad
#endif // RMAD_UTILS_HWID_UTILS_H_