| Index: chrome/browser/chromeos/login/owner_key_utils.cc
|
| diff --git a/chrome/browser/chromeos/login/owner_key_utils.cc b/chrome/browser/chromeos/login/owner_key_utils.cc
|
| deleted file mode 100644
|
| index 99e2c06481a697ed9d61998479adc743208bf141..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/login/owner_key_utils.cc
|
| +++ /dev/null
|
| @@ -1,175 +0,0 @@
|
| -// Copyright (c) 2012 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/chromeos/login/owner_key_utils.h"
|
| -
|
| -#include <limits>
|
| -
|
| -#include "base/file_path.h"
|
| -#include "base/file_util.h"
|
| -#include "base/logging.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/string_util.h"
|
| -#include "crypto/rsa_private_key.h"
|
| -#include "crypto/signature_creator.h"
|
| -#include "crypto/signature_verifier.h"
|
| -#include "chrome/browser/chromeos/cros/cros_library.h"
|
| -#include "chrome/common/extensions/extension_constants.h"
|
| -
|
| -using extension_misc::kSignatureAlgorithm;
|
| -
|
| -namespace chromeos {
|
| -
|
| -///////////////////////////////////////////////////////////////////////////
|
| -// OwnerKeyUtils
|
| -
|
| -// static
|
| -OwnerKeyUtils::Factory* OwnerKeyUtils::factory_ = NULL;
|
| -
|
| -OwnerKeyUtils::OwnerKeyUtils() {}
|
| -
|
| -OwnerKeyUtils::~OwnerKeyUtils() {}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////
|
| -// OwnerKeyUtilsImpl
|
| -
|
| -class OwnerKeyUtilsImpl : public OwnerKeyUtils {
|
| - public:
|
| - OwnerKeyUtilsImpl();
|
| -
|
| - bool ImportPublicKey(const FilePath& key_file,
|
| - std::vector<uint8>* output);
|
| -
|
| - bool Verify(const std::string& data,
|
| - const std::vector<uint8> signature,
|
| - const std::vector<uint8> public_key);
|
| -
|
| - bool Sign(const std::string& data,
|
| - std::vector<uint8>* OUT_signature,
|
| - crypto::RSAPrivateKey* key);
|
| -
|
| - crypto::RSAPrivateKey* FindPrivateKey(const std::vector<uint8>& key);
|
| -
|
| - FilePath GetOwnerKeyFilePath();
|
| -
|
| - protected:
|
| - virtual ~OwnerKeyUtilsImpl();
|
| -
|
| - bool ExportPublicKeyToFile(crypto::RSAPrivateKey* pair,
|
| - const FilePath& key_file);
|
| -
|
| - private:
|
| - // The file outside the owner's encrypted home directory where her
|
| - // key will live.
|
| - static const char kOwnerKeyFile[];
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(OwnerKeyUtilsImpl);
|
| -};
|
| -
|
| -// Defined here, instead of up above, because we need OwnerKeyUtilsImpl.
|
| -OwnerKeyUtils* OwnerKeyUtils::Create() {
|
| - if (!factory_)
|
| - return new OwnerKeyUtilsImpl();
|
| - else
|
| - return factory_->CreateOwnerKeyUtils();
|
| -}
|
| -
|
| -// static
|
| -const char OwnerKeyUtilsImpl::kOwnerKeyFile[] = "/var/lib/whitelist/owner.key";
|
| -
|
| -OwnerKeyUtilsImpl::OwnerKeyUtilsImpl() {}
|
| -
|
| -OwnerKeyUtilsImpl::~OwnerKeyUtilsImpl() {}
|
| -
|
| -bool OwnerKeyUtilsImpl::ExportPublicKeyToFile(crypto::RSAPrivateKey* pair,
|
| - const FilePath& key_file) {
|
| - DCHECK(pair);
|
| - bool ok = false;
|
| - int safe_file_size = 0;
|
| -
|
| - std::vector<uint8> to_export;
|
| - if (!pair->ExportPublicKey(&to_export)) {
|
| - LOG(ERROR) << "Formatting key for export failed!";
|
| - return false;
|
| - }
|
| -
|
| - if (to_export.size() > static_cast<uint>(INT_MAX)) {
|
| - LOG(ERROR) << "key is too big! " << to_export.size();
|
| - } else {
|
| - safe_file_size = static_cast<int>(to_export.size());
|
| -
|
| - ok = (safe_file_size ==
|
| - file_util::WriteFile(key_file,
|
| - reinterpret_cast<char*>(&to_export.front()),
|
| - safe_file_size));
|
| - }
|
| - return ok;
|
| -}
|
| -
|
| -bool OwnerKeyUtilsImpl::ImportPublicKey(const FilePath& key_file,
|
| - std::vector<uint8>* output) {
|
| - // Get the file size (must fit in a 32 bit int for NSS).
|
| - int64 file_size;
|
| - if (!file_util::GetFileSize(key_file, &file_size)) {
|
| - LOG(ERROR) << "Could not get size of " << key_file.value();
|
| - return false;
|
| - }
|
| - if (file_size > static_cast<int64>(std::numeric_limits<int>::max())) {
|
| - LOG(ERROR) << key_file.value() << "is "
|
| - << file_size << "bytes!!! Too big!";
|
| - return false;
|
| - }
|
| - int32 safe_file_size = static_cast<int32>(file_size);
|
| -
|
| - output->resize(safe_file_size);
|
| -
|
| - if (safe_file_size == 0) {
|
| - LOG(WARNING) << "Public key file is empty. This seems wrong.";
|
| - return false;
|
| - }
|
| -
|
| - // Get the key data off of disk
|
| - int data_read = file_util::ReadFile(key_file,
|
| - reinterpret_cast<char*>(&(output->at(0))),
|
| - safe_file_size);
|
| - return data_read == safe_file_size;
|
| -}
|
| -
|
| -bool OwnerKeyUtilsImpl::Verify(const std::string& data,
|
| - const std::vector<uint8> signature,
|
| - const std::vector<uint8> public_key) {
|
| - crypto::SignatureVerifier verifier;
|
| - if (!verifier.VerifyInit(kSignatureAlgorithm, sizeof(kSignatureAlgorithm),
|
| - &signature[0], signature.size(),
|
| - &public_key[0], public_key.size())) {
|
| - return false;
|
| - }
|
| -
|
| - verifier.VerifyUpdate(reinterpret_cast<const uint8*>(data.c_str()),
|
| - data.length());
|
| - return (verifier.VerifyFinal());
|
| -}
|
| -
|
| -bool OwnerKeyUtilsImpl::Sign(const std::string& data,
|
| - std::vector<uint8>* OUT_signature,
|
| - crypto::RSAPrivateKey* key) {
|
| - scoped_ptr<crypto::SignatureCreator> signer(
|
| - crypto::SignatureCreator::Create(key));
|
| - if (!signer->Update(reinterpret_cast<const uint8*>(data.c_str()),
|
| - data.length())) {
|
| - return false;
|
| - }
|
| - return signer->Final(OUT_signature);
|
| -}
|
| -
|
| -crypto::RSAPrivateKey* OwnerKeyUtilsImpl::FindPrivateKey(
|
| - const std::vector<uint8>& key) {
|
| - return crypto::RSAPrivateKey::FindFromPublicKeyInfo(key);
|
| -}
|
| -
|
| -FilePath OwnerKeyUtilsImpl::GetOwnerKeyFilePath() {
|
| - return FilePath(OwnerKeyUtilsImpl::kOwnerKeyFile);
|
| -}
|
| -
|
| -} // namespace chromeos
|
|
|