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

Unified Diff: chrome/common/extensions/extension.cc

Issue 118328: chrome.exe --package-extension (Closed)
Patch Set: final Created 11 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_unpacker.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/extensions/extension.cc
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index ffed0d5babced3a1ac01fa83f3099a379b0bab19..bf7d3a5ddcde3787021f85eae442d1d5c3ec1334 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -14,13 +14,28 @@
#include "chrome/common/extensions/extension_error_utils.h"
#include "chrome/common/extensions/user_script.h"
#include "chrome/common/url_constants.h"
+#include "net/base/base64.h"
#if defined(OS_WIN)
#include "base/registry.h"
#endif
+namespace {
+ const int kPEMOutputColumns = 65;
+
+ // KEY MARKERS
+ const char kKeyBeginHeaderMarker[] = "-----BEGIN";
+ const char kKeyBeginFooterMarker[] = "-----END";
+ const char kKeyInfoEndMarker[] = "KEY-----";
+ const char kPublic[] = "PUBLIC";
+ const char kPrivate[] = "PRIVATE";
+
+ const int kRSAKeySize = 1024;
+};
+
const char Extension::kManifestFilename[] = "manifest.json";
+const wchar_t* Extension::kBackgroundKey = L"background_page";
const wchar_t* Extension::kContentScriptsKey = L"content_scripts";
const wchar_t* Extension::kCssKey = L"css";
const wchar_t* Extension::kDescriptionKey = L"description";
@@ -34,8 +49,9 @@ const wchar_t* Extension::kPermissionsKey = L"permissions";
const wchar_t* Extension::kPluginsKey = L"plugins";
const wchar_t* Extension::kPluginsPathKey = L"path";
const wchar_t* Extension::kPluginsPublicKey = L"public";
-const wchar_t* Extension::kBackgroundKey = L"background_page";
+const wchar_t* Extension::kPublicKeyKey = L"key";
const wchar_t* Extension::kRunAtKey = L"run_at";
+const wchar_t* Extension::kSignatureKey = L"signature";
const wchar_t* Extension::kThemeKey = L"theme";
const wchar_t* Extension::kThemeImagesKey = L"images";
const wchar_t* Extension::kThemeColorsKey = L"colors";
@@ -45,7 +61,6 @@ const wchar_t* Extension::kToolstripsKey = L"toolstrips";
const wchar_t* Extension::kTooltipKey = L"tooltip";
const wchar_t* Extension::kTypeKey = L"type";
const wchar_t* Extension::kVersionKey = L"version";
-const wchar_t* Extension::kZipHashKey = L"zip_hash";
const char* Extension::kRunAtDocumentStartValue = "document_start";
const char* Extension::kRunAtDocumentEndValue = "document_end";
@@ -58,9 +73,10 @@ static const wchar_t* kValidThemeKeys[] = {
Extension::kIconPathKey,
Extension::kIdKey,
Extension::kNameKey,
+ Extension::kPublicKeyKey,
+ Extension::kSignatureKey,
Extension::kThemeKey,
- Extension::kVersionKey,
- Extension::kZipHashKey
+ Extension::kVersionKey
};
// Extension-related error messages. Some of these are simple patterns, where a
@@ -476,6 +492,76 @@ Extension::Extension(const FilePath& path) {
#endif
}
+
+// TODO(rafaelw): Move ParsePEMKeyBytes, ProducePEM & FormatPEMForOutput to a
+// util class in base:
+// http://code.google.com/p/chromium/issues/detail?id=13572
+bool Extension::ParsePEMKeyBytes(const std::string& input,
+ std::string* output) {
+ CHECK(output);
+ if (input.length() == 0)
+ return false;
+
+ std::string working = input;
+ if (StartsWithASCII(working, kKeyBeginHeaderMarker, true)) {
+ working = CollapseWhitespaceASCII(working, true);
+ size_t header_pos = working.find(kKeyInfoEndMarker,
+ sizeof(kKeyBeginHeaderMarker) - 1);
+ if (header_pos == std::string::npos)
+ return false;
+ size_t start_pos = header_pos + sizeof(kKeyInfoEndMarker) - 1;
+ size_t end_pos = working.rfind(kKeyBeginFooterMarker);
+ if (end_pos == std::string::npos)
+ return false;
+ if (start_pos >= end_pos)
+ return false;
+
+ working = working.substr(start_pos, end_pos - start_pos);
+ if (working.length() == 0)
+ return false;
+ }
+
+ return net::Base64Decode(working, output);
+}
+
+bool Extension::ProducePEM(const std::string& input,
+ std::string* output) {
+ CHECK(output);
+ if (input.length() == 0)
+ return false;
+
+ return net::Base64Encode(input, output);
+}
+
+bool Extension::FormatPEMForFileOutput(const std::string input,
+ std::string* output,
+ bool is_public) {
+ CHECK(output);
+ if (input.length() == 0)
+ return false;
+ *output = "";
+ output->append(kKeyBeginHeaderMarker);
+ output->append(" ");
+ output->append(is_public ? kPublic : kPrivate);
+ output->append(" ");
+ output->append(kKeyInfoEndMarker);
+ output->append("\n");
+ for (size_t i = 0; i < input.length(); ) {
+ int slice = std::min<int>(input.length() - i, kPEMOutputColumns);
+ output->append(input.substr(i, slice));
+ output->append("\n");
+ i += slice;
+ }
+ output->append(kKeyBeginFooterMarker);
+ output->append(" ");
+ output->append(is_public ? kPublic : kPrivate);
+ output->append(" ");
+ output->append(kKeyInfoEndMarker);
+ output->append("\n");
+
+ return true;
+}
+
bool Extension::InitFromValue(const DictionaryValue& source, bool require_id,
std::string* error) {
// Initialize id.
@@ -537,16 +623,6 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_id,
}
}
- // Initialize zip hash (only present in zip)
- // There's no need to verify it at this point. If it's in a bogus format
- // it won't pass the hash verify step.
- if (source.HasKey(kZipHashKey)) {
- if (!source.GetString(kZipHashKey, &zip_hash_)) {
- *error = kInvalidZipHashError;
- return false;
- }
- }
-
// Initialize themes.
is_theme_ = false;
if (source.HasKey(kThemeKey)) {
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_unpacker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698