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

Unified Diff: chrome/browser/extensions/api/platform_keys/platform_keys_api.cc

Issue 847333004: Move parts from enterprise.platformKeysInternal to platformKeysInternal for reuse. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cert_idl
Patch Set: Rebased. Created 5 years, 11 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
Index: chrome/browser/extensions/api/platform_keys/platform_keys_api.cc
diff --git a/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc b/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc
new file mode 100644
index 0000000000000000000000000000000000000000..819558be74442ad7aa045e955f7b30377b8cba2c
--- /dev/null
+++ b/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc
@@ -0,0 +1,104 @@
+// Copyright 2015 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.
+
+#include "chrome/browser/extensions/api/platform_keys/platform_keys_api.h"
+
+#include <vector>
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "chrome/browser/chromeos/platform_keys/platform_keys.h"
+#include "chrome/browser/chromeos/platform_keys/platform_keys_service.h"
+#include "chrome/browser/chromeos/platform_keys/platform_keys_service_factory.h"
+#include "chrome/common/extensions/api/platform_keys_internal.h"
+#include "content/public/browser/browser_thread.h"
+#include "net/cert/x509_certificate.h"
+
+namespace extensions {
+
+namespace api_pki = api::platform_keys_internal;
+
+namespace platform_keys {
+
+const char kErrorInvalidToken[] = "The token is not valid.";
+const char kErrorAlgorithmNotSupported[] = "Algorithm not supported.";
+const char kTokenIdUser[] = "user";
+const char kTokenIdSystem[] = "system";
+
+// Returns whether |token_id| references a known Token.
+bool ValidateToken(const std::string& token_id,
+ std::string* platform_keys_token_id) {
+ platform_keys_token_id->clear();
+ if (token_id == kTokenIdUser) {
+ *platform_keys_token_id = chromeos::platform_keys::kTokenIdUser;
+ return true;
+ }
+ if (token_id == kTokenIdSystem) {
+ *platform_keys_token_id = chromeos::platform_keys::kTokenIdSystem;
+ return true;
+ }
+ return false;
+}
+
+std::string PlatformKeysTokenIdToApiId(
+ const std::string& platform_keys_token_id) {
+ if (platform_keys_token_id == chromeos::platform_keys::kTokenIdUser)
+ return kTokenIdUser;
+ if (platform_keys_token_id == chromeos::platform_keys::kTokenIdSystem)
+ return kTokenIdSystem;
+
+ return std::string();
+}
+
+} // namespace platform_keys
+
+PlatformKeysInternalSignFunction::~PlatformKeysInternalSignFunction() {
+}
+
+ExtensionFunction::ResponseAction PlatformKeysInternalSignFunction::Run() {
+ scoped_ptr<api_pki::Sign::Params> params(
+ api_pki::Sign::Params::Create(*args_));
+ EXTENSION_FUNCTION_VALIDATE(params);
+ std::string platform_keys_token_id;
+ if (!platform_keys::ValidateToken(params->token_id, &platform_keys_token_id))
+ return RespondNow(Error(platform_keys::kErrorInvalidToken));
+
+ chromeos::platform_keys::HashAlgorithm hash_algorithm;
+ if (params->hash_algorithm_name == "SHA-1")
+ hash_algorithm = chromeos::platform_keys::HASH_ALGORITHM_SHA1;
+ else if (params->hash_algorithm_name == "SHA-256")
+ hash_algorithm = chromeos::platform_keys::HASH_ALGORITHM_SHA256;
+ else if (params->hash_algorithm_name == "SHA-384")
+ hash_algorithm = chromeos::platform_keys::HASH_ALGORITHM_SHA384;
+ else if (params->hash_algorithm_name == "SHA-512")
+ hash_algorithm = chromeos::platform_keys::HASH_ALGORITHM_SHA512;
+ else
+ return RespondNow(Error(platform_keys::kErrorAlgorithmNotSupported));
+
+ chromeos::PlatformKeysService* service =
+ chromeos::PlatformKeysServiceFactory::GetForBrowserContext(
+ browser_context());
+ DCHECK(service);
+
+ service->Sign(
+ platform_keys_token_id,
+ std::string(params->public_key.begin(), params->public_key.end()),
+ hash_algorithm, std::string(params->data.begin(), params->data.end()),
+ extension_id(),
+ base::Bind(&PlatformKeysInternalSignFunction::OnSigned, this));
+ return RespondLater();
+}
+
+void PlatformKeysInternalSignFunction::OnSigned(
+ const std::string& signature,
+ const std::string& error_message) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ if (error_message.empty())
+ Respond(ArgumentList(api_pki::Sign::Results::Create(
+ std::vector<char>(signature.begin(), signature.end()))));
+ else
+ Respond(Error(error_message));
+}
+
+} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/platform_keys/platform_keys_api.h ('k') | chrome/chrome_browser_extensions.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698