Index: components/policy/core/common/cloud/cloud_policy_validator.h |
diff --git a/components/policy/core/common/cloud/cloud_policy_validator.h b/components/policy/core/common/cloud/cloud_policy_validator.h |
index e5a8ced8ab6e5a74dd2ec7bde701897f4fc1a2c2..3ed22080622d315518578de59a0ef7ce3bfc448a 100644 |
--- a/components/policy/core/common/cloud/cloud_policy_validator.h |
+++ b/components/policy/core/common/cloud/cloud_policy_validator.h |
@@ -147,16 +147,23 @@ class POLICY_EXPORT CloudPolicyValidatorBase { |
// Validates that the payload can be decoded successfully. |
void ValidatePayload(); |
+ // Verifies that |cached_key| is valid, by verifying the |
+ // |cached_key_signature| using the passed |owning_domain| and |
+ // |verification_key|. |
+ void ValidateCachedKey(const std::string& cached_key, |
+ const std::string& cached_key_signature, |
+ const std::string& verification_key, |
+ const std::string& owning_domain); |
+ |
// Verifies that the signature on the policy blob verifies against |key|. If |
// |allow_key_rotation| is true and there is a key rotation present in the |
// policy blob, this checks the signature on the new key against |key| and the |
// policy blob against the new key. New key is also validated using the passed |
- // |verification_key| and the |new_public_key_verification_signature| field. |
- // If |key_signature| is non-empty, then |key| is also verified against that |
- // signature (useful when dealing with cached keys from untrusted sources). |
+ // |verification_key| and |owning_domain|, and the |
+ // |new_public_key_verification_signature| field. |
void ValidateSignature(const std::string& key, |
const std::string& verification_key, |
- const std::string& key_signature, |
+ const std::string& owning_domain, |
bool allow_key_rotation); |
// Similar to ValidateSignature(), this checks the signature on the |
@@ -165,7 +172,8 @@ class POLICY_EXPORT CloudPolicyValidatorBase { |
// be called at setup time when there is no existing policy key present to |
// check against. New key is validated using the passed |verification_key| and |
// the new_public_key_verification_signature field. |
- void ValidateInitialKey(const std::string& verification_key); |
+ void ValidateInitialKey(const std::string& verification_key, |
+ const std::string& owning_domain); |
// Convenience helper that configures timestamp and token validation based on |
// the current policy blob. |policy_data| may be NULL, in which case the |
@@ -205,6 +213,7 @@ class POLICY_EXPORT CloudPolicyValidatorBase { |
VALIDATE_PAYLOAD = 1 << 6, |
VALIDATE_SIGNATURE = 1 << 7, |
VALIDATE_INITIAL_KEY = 1 << 8, |
+ VALIDATE_CACHED_KEY = 1 << 9, |
}; |
enum SignatureType { |
@@ -236,9 +245,14 @@ class POLICY_EXPORT CloudPolicyValidatorBase { |
const std::string& server_key, |
const std::string& signature); |
- // Sets the key used to verify new public keys, and ensures that callers |
- // don't try to set conflicting keys. |
- void set_verification_key(const std::string& verification_key); |
+ // Returns the domain name from the policy being validated. Returns an |
+ // empty string if the policy does not contain a username field. |
+ std::string ExtractDomainFromPolicy(); |
+ |
+ // Sets the key and domain used to verify new public keys, and ensures that |
+ // callers don't try to set conflicting values. |
+ void set_verification_key_and_domain(const std::string& verification_key, |
+ const std::string& owning_domain); |
// Helper functions implementing individual checks. |
Status CheckTimestamp(); |
@@ -250,6 +264,7 @@ class POLICY_EXPORT CloudPolicyValidatorBase { |
Status CheckPayload(); |
Status CheckSignature(); |
Status CheckInitialKey(); |
+ Status CheckCachedKey(); |
// Verifies the SHA1/ or SHA256/RSA |signature| on |data| against |key|. |
// |signature_type| specifies the type of signature (SHA1 or SHA256). |
@@ -274,8 +289,10 @@ class POLICY_EXPORT CloudPolicyValidatorBase { |
std::string policy_type_; |
std::string settings_entity_id_; |
std::string key_; |
- std::string key_signature_; |
+ std::string cached_key_; |
+ std::string cached_key_signature_; |
std::string verification_key_; |
+ std::string owning_domain_; |
bool allow_key_rotation_; |
scoped_refptr<base::SequencedTaskRunner> background_task_runner_; |