| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #ifndef CHROME_BROWSER_POLICY_CLOUD_CLOUD_POLICY_VALIDATOR_H_ |    5 #ifndef CHROME_BROWSER_POLICY_CLOUD_CLOUD_POLICY_VALIDATOR_H_ | 
|    6 #define CHROME_BROWSER_POLICY_CLOUD_CLOUD_POLICY_VALIDATOR_H_ |    6 #define CHROME_BROWSER_POLICY_CLOUD_CLOUD_POLICY_VALIDATOR_H_ | 
|    7  |    7  | 
|    8 #include <string> |    8 #include <string> | 
|    9 #include <vector> |    9 #include <vector> | 
|   10  |   10  | 
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   94  |   94  | 
|   95   // The policy objects owned by the validator. These are scoped_ptr |   95   // The policy objects owned by the validator. These are scoped_ptr | 
|   96   // references, so ownership can be passed on once validation is complete. |   96   // references, so ownership can be passed on once validation is complete. | 
|   97   scoped_ptr<enterprise_management::PolicyFetchResponse>& policy() { |   97   scoped_ptr<enterprise_management::PolicyFetchResponse>& policy() { | 
|   98     return policy_; |   98     return policy_; | 
|   99   } |   99   } | 
|  100   scoped_ptr<enterprise_management::PolicyData>& policy_data() { |  100   scoped_ptr<enterprise_management::PolicyData>& policy_data() { | 
|  101     return policy_data_; |  101     return policy_data_; | 
|  102   } |  102   } | 
|  103  |  103  | 
 |  104   // If ValidateHashValue() is called, the hash value of the policy value can | 
 |  105   // be read with this method after completion has been signaled. | 
 |  106   uint32 hash_value() const { | 
 |  107     return hash_value_; | 
 |  108   } | 
 |  109  | 
|  104   // Instructs the validator to check that the policy timestamp is not before |  110   // Instructs the validator to check that the policy timestamp is not before | 
|  105   // |not_before| and not after |now| + grace interval. If |  111   // |not_before| and not after |now| + grace interval. If | 
|  106   // |timestamp_option| is set to TIMESTAMP_REQUIRED, then the policy will fail |  112   // |timestamp_option| is set to TIMESTAMP_REQUIRED, then the policy will fail | 
|  107   // validation if it does not have a timestamp field. |  113   // validation if it does not have a timestamp field. | 
|  108   void ValidateTimestamp(base::Time not_before, |  114   void ValidateTimestamp(base::Time not_before, | 
|  109                          base::Time now, |  115                          base::Time now, | 
|  110                          ValidateTimestampOption timestamp_option); |  116                          ValidateTimestampOption timestamp_option); | 
|  111  |  117  | 
|  112   // Validates the username in the policy blob matches |expected_user|. |  118   // Validates the username in the policy blob matches |expected_user|. | 
|  113   void ValidateUsername(const std::string& expected_user); |  119   void ValidateUsername(const std::string& expected_user); | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
|  138   void ValidateSignature(const std::vector<uint8>& key, |  144   void ValidateSignature(const std::vector<uint8>& key, | 
|  139                          bool allow_key_rotation); |  145                          bool allow_key_rotation); | 
|  140  |  146  | 
|  141   // Similar to StartSignatureVerification(), this checks the signature on the |  147   // Similar to StartSignatureVerification(), this checks the signature on the | 
|  142   // policy blob. However, this variant expects a new policy key set in the |  148   // policy blob. However, this variant expects a new policy key set in the | 
|  143   // policy blob and makes sure the policy is signed using that key. This should |  149   // policy blob and makes sure the policy is signed using that key. This should | 
|  144   // be called at setup time when there is no existing policy key present to |  150   // be called at setup time when there is no existing policy key present to | 
|  145   // check against. |  151   // check against. | 
|  146   void ValidateInitialKey(); |  152   void ValidateInitialKey(); | 
|  147  |  153  | 
 |  154   // Causes the validator to calculate the hash value of the policy value. | 
 |  155   // This can be used to determine if two policies are different. | 
 |  156   void ValidateHashValue(); | 
 |  157  | 
|  148   // Convenience helper that configures timestamp and token validation based on |  158   // Convenience helper that configures timestamp and token validation based on | 
|  149   // the current policy blob. |policy_data| may be NULL, in which case the |  159   // the current policy blob. |policy_data| may be NULL, in which case the | 
|  150   // timestamp validation will drop the lower bound. |dm_token_option| |  160   // timestamp validation will drop the lower bound. |dm_token_option| | 
|  151   // and |timestamp_option| have the same effect as the corresponding |  161   // and |timestamp_option| have the same effect as the corresponding | 
|  152   // parameters for ValidateTimestamp() and ValidateDMToken(). |  162   // parameters for ValidateTimestamp() and ValidateDMToken(). | 
|  153   void ValidateAgainstCurrentPolicy( |  163   void ValidateAgainstCurrentPolicy( | 
|  154       const enterprise_management::PolicyData* policy_data, |  164       const enterprise_management::PolicyData* policy_data, | 
|  155       ValidateTimestampOption timestamp_option, |  165       ValidateTimestampOption timestamp_option, | 
|  156       ValidateDMTokenOption dm_token_option); |  166       ValidateDMTokenOption dm_token_option); | 
|  157  |  167  | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
|  175   enum ValidationFlags { |  185   enum ValidationFlags { | 
|  176     VALIDATE_TIMESTAMP   = 1 << 0, |  186     VALIDATE_TIMESTAMP   = 1 << 0, | 
|  177     VALIDATE_USERNAME    = 1 << 1, |  187     VALIDATE_USERNAME    = 1 << 1, | 
|  178     VALIDATE_DOMAIN      = 1 << 2, |  188     VALIDATE_DOMAIN      = 1 << 2, | 
|  179     VALIDATE_TOKEN       = 1 << 3, |  189     VALIDATE_TOKEN       = 1 << 3, | 
|  180     VALIDATE_POLICY_TYPE = 1 << 4, |  190     VALIDATE_POLICY_TYPE = 1 << 4, | 
|  181     VALIDATE_ENTITY_ID   = 1 << 5, |  191     VALIDATE_ENTITY_ID   = 1 << 5, | 
|  182     VALIDATE_PAYLOAD     = 1 << 6, |  192     VALIDATE_PAYLOAD     = 1 << 6, | 
|  183     VALIDATE_SIGNATURE   = 1 << 7, |  193     VALIDATE_SIGNATURE   = 1 << 7, | 
|  184     VALIDATE_INITIAL_KEY = 1 << 8, |  194     VALIDATE_INITIAL_KEY = 1 << 8, | 
 |  195     VALIDATE_HASH_VALUE  = 1 << 9, | 
|  185   }; |  196   }; | 
|  186  |  197  | 
|  187   // Performs validation, called on a background thread. |  198   // Performs validation, called on a background thread. | 
|  188   static void PerformValidation( |  199   static void PerformValidation( | 
|  189       scoped_ptr<CloudPolicyValidatorBase> self, |  200       scoped_ptr<CloudPolicyValidatorBase> self, | 
|  190       scoped_refptr<base::MessageLoopProxy> message_loop, |  201       scoped_refptr<base::MessageLoopProxy> message_loop, | 
|  191       const base::Closure& completion_callback); |  202       const base::Closure& completion_callback); | 
|  192  |  203  | 
|  193   // Reports completion to the |completion_callback_|. |  204   // Reports completion to the |completion_callback_|. | 
|  194   static void ReportCompletion(scoped_ptr<CloudPolicyValidatorBase> self, |  205   static void ReportCompletion(scoped_ptr<CloudPolicyValidatorBase> self, | 
|  195                                const base::Closure& completion_callback); |  206                                const base::Closure& completion_callback); | 
|  196  |  207  | 
|  197   // Invokes all the checks and reports the result. |  208   // Invokes all the checks and reports the result. | 
|  198   void RunChecks(); |  209   void RunChecks(); | 
|  199  |  210  | 
|  200   // Helper functions implementing individual checks. |  211   // Helper functions implementing individual checks. | 
|  201   Status CheckTimestamp(); |  212   Status CheckTimestamp(); | 
|  202   Status CheckUsername(); |  213   Status CheckUsername(); | 
|  203   Status CheckDomain(); |  214   Status CheckDomain(); | 
|  204   Status CheckToken(); |  215   Status CheckToken(); | 
|  205   Status CheckPolicyType(); |  216   Status CheckPolicyType(); | 
|  206   Status CheckEntityId(); |  217   Status CheckEntityId(); | 
|  207   Status CheckPayload(); |  218   Status CheckPayload(); | 
|  208   Status CheckSignature(); |  219   Status CheckSignature(); | 
|  209   Status CheckInitialKey(); |  220   Status CheckInitialKey(); | 
 |  221   Status CheckHashValue(); | 
|  210  |  222  | 
|  211   // Verifies the SHA1/RSA |signature| on |data| against |key|. |  223   // Verifies the SHA1/RSA |signature| on |data| against |key|. | 
|  212   static bool VerifySignature(const std::string& data, |  224   static bool VerifySignature(const std::string& data, | 
|  213                               const std::string& key, |  225                               const std::string& key, | 
|  214                               const std::string& signature); |  226                               const std::string& signature); | 
|  215  |  227  | 
|  216   Status status_; |  228   Status status_; | 
|  217   scoped_ptr<enterprise_management::PolicyFetchResponse> policy_; |  229   scoped_ptr<enterprise_management::PolicyFetchResponse> policy_; | 
|  218   scoped_ptr<enterprise_management::PolicyData> policy_data_; |  230   scoped_ptr<enterprise_management::PolicyData> policy_data_; | 
|  219   google::protobuf::MessageLite* payload_; |  231   google::protobuf::MessageLite* payload_; | 
 |  232   uint32 hash_value_; | 
|  220  |  233  | 
|  221   int validation_flags_; |  234   int validation_flags_; | 
|  222   int64 timestamp_not_before_; |  235   int64 timestamp_not_before_; | 
|  223   int64 timestamp_not_after_; |  236   int64 timestamp_not_after_; | 
|  224   ValidateTimestampOption timestamp_option_; |  237   ValidateTimestampOption timestamp_option_; | 
|  225   ValidateDMTokenOption dm_token_option_; |  238   ValidateDMTokenOption dm_token_option_; | 
|  226   std::string user_; |  239   std::string user_; | 
|  227   std::string domain_; |  240   std::string domain_; | 
|  228   std::string token_; |  241   std::string token_; | 
|  229   std::string policy_type_; |  242   std::string policy_type_; | 
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  277 }; |  290 }; | 
|  278  |  291  | 
|  279 typedef CloudPolicyValidator<enterprise_management::CloudPolicySettings> |  292 typedef CloudPolicyValidator<enterprise_management::CloudPolicySettings> | 
|  280     UserCloudPolicyValidator; |  293     UserCloudPolicyValidator; | 
|  281 typedef CloudPolicyValidator<enterprise_management::ExternalPolicyData> |  294 typedef CloudPolicyValidator<enterprise_management::ExternalPolicyData> | 
|  282     ComponentCloudPolicyValidator; |  295     ComponentCloudPolicyValidator; | 
|  283  |  296  | 
|  284 }  // namespace policy |  297 }  // namespace policy | 
|  285  |  298  | 
|  286 #endif  // CHROME_BROWSER_POLICY_CLOUD_CLOUD_POLICY_VALIDATOR_H_ |  299 #endif  // CHROME_BROWSER_POLICY_CLOUD_CLOUD_POLICY_VALIDATOR_H_ | 
| OLD | NEW |