Home | History | Annotate | Download | only in login
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/chromeos/login/owner_key_utils.h"
      6 
      7 #include <string>
      8 #include <vector>
      9 
     10 #include "base/file_path.h"
     11 #include "base/file_util.h"
     12 #include "base/memory/ref_counted.h"
     13 #include "base/memory/scoped_temp_dir.h"
     14 #include "crypto/nss_util.h"
     15 #include "crypto/nss_util_internal.h"
     16 #include "crypto/rsa_private_key.h"
     17 #include "testing/gmock/include/gmock/gmock.h"
     18 #include "testing/gtest/include/gtest/gtest.h"
     19 
     20 namespace chromeos {
     21 
     22 class OwnerKeyUtilsTest : public ::testing::Test {
     23  public:
     24   OwnerKeyUtilsTest() : utils_(OwnerKeyUtils::Create()) {}
     25   virtual ~OwnerKeyUtilsTest() {}
     26 
     27   virtual void SetUp() {
     28     crypto::OpenPersistentNSSDB();
     29   }
     30 
     31   // Key generation parameters.
     32   static const uint16 kKeySizeInBits;
     33 
     34   scoped_refptr<OwnerKeyUtils> utils_;
     35 };
     36 
     37 // We're generating and using 2048-bit RSA keys.
     38 // static
     39 const uint16 OwnerKeyUtilsTest::kKeySizeInBits = 2048;
     40 
     41 TEST_F(OwnerKeyUtilsTest, ExportImportPublicKey) {
     42   scoped_ptr<crypto::RSAPrivateKey> pair(
     43       crypto::RSAPrivateKey::CreateSensitive(kKeySizeInBits));
     44   ASSERT_NE(pair.get(), reinterpret_cast<crypto::RSAPrivateKey*>(NULL));
     45 
     46   // Export public key to file.
     47   ScopedTempDir tmpdir;
     48   FilePath tmpfile;
     49   ASSERT_TRUE(tmpdir.CreateUniqueTempDir());
     50   ASSERT_TRUE(file_util::CreateTemporaryFileInDir(tmpdir.path(), &tmpfile));
     51   ASSERT_TRUE(utils_->ExportPublicKeyToFile(pair.get(), tmpfile));
     52 
     53   // Export public key, so that we can compare it to the one we get off disk.
     54   std::vector<uint8> public_key;
     55   ASSERT_TRUE(pair->ExportPublicKey(&public_key));
     56   std::vector<uint8> from_disk;
     57   ASSERT_TRUE(utils_->ImportPublicKey(tmpfile, &from_disk));
     58 
     59   std::vector<uint8>::iterator pubkey_it;
     60   std::vector<uint8>::iterator disk_it;
     61   for (pubkey_it = public_key.begin(), disk_it = from_disk.begin();
     62        pubkey_it < public_key.end();
     63        pubkey_it++, disk_it++) {
     64     EXPECT_EQ(*pubkey_it, *disk_it);
     65   }
     66 }
     67 
     68 }  // namespace chromeos
     69