#include "chrome/updater/device_management/dm_response_validator.h"
#include <inttypes.h>
#include <string>
#include "base/check.h"
#include "base/containers/contains.h"
#include "base/containers/span.h"
#include "base/logging.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "chrome/enterprise_companion/device_management_storage/dm_storage.h"
#include "chrome/updater/constants.h"
#include "chrome/updater/device_management/dm_message.h"
#include "chrome/updater/protos/omaha_settings.pb.h"
#include "components/policy/core/common/cloud/cloud_policy_constants.h"
#include "components/policy/proto/device_management_backend.pb.h"
#include "crypto/signature_verifier.h"
#include "third_party/boringssl/src/include/openssl/rsa.h"
namespace updater {
namespace {
namespace edm = ::wireless_android_enterprise_devicemanagement;
constexpr const char* kProxyModeValidValues[] = …;
crypto::SignatureVerifier::SignatureAlgorithm GetResponseSignatureType(
const enterprise_management::PolicyFetchResponse& fetch_response) { … }
bool VerifySignature(const std::string& data,
const std::string& key,
const std::string& signature,
crypto::SignatureVerifier::SignatureAlgorithm algorithm) { … }
class OmahaPolicyValidator { … };
bool OmahaPolicyValidator::Initialize(
const enterprise_management::PolicyData& policy_data) { … }
bool OmahaPolicyValidator::Validate(
PolicyValidationResult& validation_result) const { … }
void OmahaPolicyValidator::ValidateAutoUpdateCheckPeriodPolicy(
PolicyValidationResult& validation_result) const { … }
void OmahaPolicyValidator::ValidateDownloadPreferencePolicy(
PolicyValidationResult& validation_result) const { … }
void OmahaPolicyValidator::ValidateUpdatesSuppressedPolicies(
PolicyValidationResult& validation_result) const { … }
void OmahaPolicyValidator::ValidateProxyPolicies(
PolicyValidationResult& validation_result) const { … }
void OmahaPolicyValidator::ValidateAppTargetChannelPolicy(
const edm::ApplicationSettings& app_settings,
PolicyValidationResult& validation_result) const { … }
void OmahaPolicyValidator::ValidateAppTargetVersionPrefixPolicy(
const edm::ApplicationSettings& app_settings,
PolicyValidationResult& validation_result) const { … }
}
PolicyValueValidationIssue::PolicyValueValidationIssue(
const std::string& policy_name,
Severity severity,
const std::string& message)
: … { … }
PolicyValueValidationIssue::~PolicyValueValidationIssue() = default;
PolicyValidationResult::PolicyValidationResult() = default;
PolicyValidationResult::PolicyValidationResult(
const PolicyValidationResult& other) = default;
PolicyValidationResult::~PolicyValidationResult() = default;
DMResponseValidator::DMResponseValidator(
const device_management_storage::CachedPolicyInfo& policy_info,
const std::string& expected_dm_token,
const std::string& expected_device_id)
: … { … }
DMResponseValidator::~DMResponseValidator() = default;
bool DMResponseValidator::ValidateNewPublicKey(
const enterprise_management::PolicyFetchResponse& fetch_response,
std::string& signature_key,
PolicyValidationResult& validation_result) const { … }
bool DMResponseValidator::ValidateSignature(
const enterprise_management::PolicyFetchResponse& policy_response,
const std::string& signature_key,
PolicyValidationResult& validation_result) const { … }
bool DMResponseValidator::ValidateDMToken(
const enterprise_management::PolicyData& policy_data,
PolicyValidationResult& validation_result) const { … }
bool DMResponseValidator::ValidateDeviceId(
const enterprise_management::PolicyData& policy_data,
PolicyValidationResult& validation_result) const { … }
bool DMResponseValidator::ValidateTimestamp(
const enterprise_management::PolicyData& policy_data,
PolicyValidationResult& validation_result) const { … }
bool DMResponseValidator::ValidatePayloadPolicy(
const enterprise_management::PolicyData& policy_data,
PolicyValidationResult& validation_result) const { … }
bool DMResponseValidator::ValidatePolicyResponse(
const enterprise_management::PolicyFetchResponse& fetch_response,
PolicyValidationResult& validation_result) const { … }
bool DMResponseValidator::ValidatePolicyData(
const enterprise_management::PolicyFetchResponse& fetch_response) const { … }
}