Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(386)

Side by Side Diff: extensions/browser/verified_contents.h

Issue 585583003: Fix case-sensitivity problems in extension content verification (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: undo change to extension_protocols.cc Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 EXTENSIONS_BROWSER_VERIFIED_CONTENTS_H_ 5 #ifndef EXTENSIONS_BROWSER_VERIFIED_CONTENTS_H_
6 #define EXTENSIONS_BROWSER_VERIFIED_CONTENTS_H_ 6 #define EXTENSIONS_BROWSER_VERIFIED_CONTENTS_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 28 matching lines...) Expand all
39 // |path| and validated the enclosed signature. The 39 // |path| and validated the enclosed signature. The
40 // |ignore_invalid_signature| argument can be set to make this still succeed 40 // |ignore_invalid_signature| argument can be set to make this still succeed
41 // if the contents of the file were parsed successfully but the signature did 41 // if the contents of the file were parsed successfully but the signature did
42 // not validate. (Use with caution!) 42 // not validate. (Use with caution!)
43 bool InitFrom(const base::FilePath& path, bool ignore_invalid_signature); 43 bool InitFrom(const base::FilePath& path, bool ignore_invalid_signature);
44 44
45 int block_size() const { return block_size_; } 45 int block_size() const { return block_size_; }
46 const std::string& extension_id() const { return extension_id_; } 46 const std::string& extension_id() const { return extension_id_; }
47 const base::Version& version() const { return version_; } 47 const base::Version& version() const { return version_; }
48 48
49 // This returns a pointer to the binary form of an expected sha256 root hash 49 bool HasTreeHashRoot(const base::FilePath& relative_path) const;
50 // for |relative_path| computing using a tree hash algorithm. 50
51 const std::string* GetTreeHashRoot(const base::FilePath& relative_path); 51 bool TreeHashRootEquals(const base::FilePath& relative_path,
52 const std::string& expected) const;
52 53
53 // If InitFrom has not been called yet, or was used in "ignore invalid 54 // If InitFrom has not been called yet, or was used in "ignore invalid
54 // signature" mode, this can return false. 55 // signature" mode, this can return false.
55 bool valid_signature() { return valid_signature_; } 56 bool valid_signature() { return valid_signature_; }
56 57
57 private: 58 private:
58 // Returns the base64url-decoded "payload" field from the json at |path|, if 59 // Returns the base64url-decoded "payload" field from the json at |path|, if
59 // the signature was valid (or ignore_invalid_signature was set to true). 60 // the signature was valid (or ignore_invalid_signature was set to true).
60 bool GetPayload(const base::FilePath& path, 61 bool GetPayload(const base::FilePath& path,
61 std::string* payload, 62 std::string* payload,
(...skipping 14 matching lines...) Expand all
76 // Indicates whether the signature was successfully validated or not. 77 // Indicates whether the signature was successfully validated or not.
77 bool valid_signature_; 78 bool valid_signature_;
78 79
79 // The block size used for computing the treehash root hashes. 80 // The block size used for computing the treehash root hashes.
80 int block_size_; 81 int block_size_;
81 82
82 // Information about which extension these signed hashes are for. 83 // Information about which extension these signed hashes are for.
83 std::string extension_id_; 84 std::string extension_id_;
84 base::Version version_; 85 base::Version version_;
85 86
86 // The expected treehash root hashes for each file. 87 // The expected treehash root hashes for each file, lower cased so we can do
87 std::map<base::FilePath, std::string> root_hashes_; 88 // case-insensitive lookups.
89 //
90 // We use a multi-map here so that we can do fast lookups of paths from
91 // requests on case-insensitive systems (windows, mac) where the request path
92 // might not have the exact right capitalization, but not break
93 // case-sensitive systems (linux, chromeos). TODO(asargent) - we should give
94 // developers client-side warnings in each of those cases, and have the
95 // webstore reject the cases they can statically detect. See crbug.com/29941
96 typedef std::multimap<base::FilePath::StringType, std::string> RootHashes;
97 RootHashes root_hashes_;
88 98
89 DISALLOW_COPY_AND_ASSIGN(VerifiedContents); 99 DISALLOW_COPY_AND_ASSIGN(VerifiedContents);
90 }; 100 };
91 101
92 } // namespace extensions 102 } // namespace extensions
93 103
94 #endif // EXTENSIONS_BROWSER_VERIFIED_CONTENTS_H_ 104 #endif // EXTENSIONS_BROWSER_VERIFIED_CONTENTS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698