Index: components/crx_file/crx_verifier.h |
diff --git a/components/crx_file/crx_verifier.h b/components/crx_file/crx_verifier.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..35cf1956a24cb83b2e9764ced0fab422635a7a26 |
--- /dev/null |
+++ b/components/crx_file/crx_verifier.h |
@@ -0,0 +1,53 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef COMPONENTS_CRX_FILE_CRX_VERIFIER_H_ |
+#define COMPONENTS_CRX_FILE_CRX_VERIFIER_H_ |
+ |
+#include <stdint.h> |
+#include <string> |
+#include <vector> |
+ |
+namespace base { |
+class FilePath; |
+} // namespace base |
+ |
+namespace crx_file { |
+ |
+enum class VerifierFormat { |
+ CRX2_OR_CRX3, // Accept Crx2 or Crx3. |
+ CRX3, // Accept only Crx3. |
+ CRX3_WITH_PUBLISHER_PROOF, // Accept only Crx3 with a publisher proof. |
+}; |
+ |
+enum class VerifierResult { |
+ OK_FULL, // The file verifies as a correct full CRX file. |
+ OK_DELTA, // The file verifies as a correct differential CRX file. |
+ ERROR_FILE_NOT_READABLE, // Cannot open the CRX file. |
+ ERROR_HEADER_INVALID, // Failed to parse or understand CRX header. |
+ ERROR_EXPECTED_HASH_INVALID, // Expected hash is not well-formed. |
+ ERROR_FILE_HASH_FAILED, // The file's actual hash != the expected hash. |
+ ERROR_SIGNATURE_INITIALIZATION_FAILED, // A signature or key is malformed. |
+ ERROR_SIGNATURE_VERIFICATION_FAILED, // A signature doesn't match. |
+ ERROR_REQUIRED_PROOF_MISSING, // RequireKeyProof was unsatisfied. |
+}; |
+ |
+// Verify the file at |crx_path| as a valid Crx of |format|. The Crx must be |
+// well-formed, contain no invalid proofs, match the |required_file_hash| (if |
+// non-empty), and contain a proof with each of the |required_key_hashes|. |
+// If and only if this function returns OK_FULL or OK_DELTA, and only if |
+// |public_key| / |crx_id| are non-null, they will be updated to contain the |
+// public key (PEM format, without the header/footer) and crx id (encoded in |
+// base16 using the characters [a-p]). |
+VerifierResult Verify( |
+ const base::FilePath& crx_path, |
+ const VerifierFormat& format, |
+ const std::vector<std::vector<uint8_t>>& required_key_hashes, |
+ const std::vector<uint8_t>& required_file_hash, |
+ std::string* public_key, |
+ std::string* crx_id); |
+ |
+} // namespace crx_file |
+ |
+#endif // COMPONENTS_CRX_FILE_CRX_VERIFIER_H_ |