[email protected] | 3b63f8f4 | 2011-03-28 01:54:15 | [diff] [blame] | 1 | // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
[email protected] | 7464805 | 2010-08-10 19:37:51 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 5 | #include "crypto/rsa_private_key.h" |
[email protected] | 7464805 | 2010-08-10 19:37:51 | [diff] [blame] | 6 | |
7 | #include <keyhi.h> | ||||
8 | #include <pk11pub.h> | ||||
9 | |||||
[email protected] | 3b63f8f4 | 2011-03-28 01:54:15 | [diff] [blame] | 10 | #include "base/memory/scoped_ptr.h" |
[email protected] | abe981f | 2011-04-15 17:46:09 | [diff] [blame] | 11 | #include "crypto/nss_util.h" |
[email protected] | 7464805 | 2010-08-10 19:37:51 | [diff] [blame] | 12 | #include "testing/gtest/include/gtest/gtest.h" |
13 | |||||
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 14 | namespace crypto { |
[email protected] | 7464805 | 2010-08-10 19:37:51 | [diff] [blame] | 15 | |
16 | class RSAPrivateKeyNSSTest : public testing::Test { | ||||
17 | public: | ||||
18 | RSAPrivateKeyNSSTest() {} | ||||
19 | virtual ~RSAPrivateKeyNSSTest() {} | ||||
20 | |||||
21 | virtual void SetUp() { | ||||
22 | #if defined(OS_CHROMEOS) | ||||
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 23 | OpenPersistentNSSDB(); |
[email protected] | 7464805 | 2010-08-10 19:37:51 | [diff] [blame] | 24 | #endif |
25 | } | ||||
26 | |||||
27 | private: | ||||
28 | DISALLOW_COPY_AND_ASSIGN(RSAPrivateKeyNSSTest); | ||||
29 | }; | ||||
30 | |||||
31 | TEST_F(RSAPrivateKeyNSSTest, FindFromPublicKey) { | ||||
32 | // Create a keypair, which will put the keys in the user's NSSDB. | ||||
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 33 | scoped_ptr<crypto::RSAPrivateKey> key_pair(RSAPrivateKey::Create(256)); |
[email protected] | 7464805 | 2010-08-10 19:37:51 | [diff] [blame] | 34 | |
35 | std::vector<uint8> public_key; | ||||
36 | ASSERT_TRUE(key_pair->ExportPublicKey(&public_key)); | ||||
37 | |||||
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 38 | scoped_ptr<crypto::RSAPrivateKey> key_pair_2( |
39 | crypto::RSAPrivateKey::FindFromPublicKeyInfo(public_key)); | ||||
[email protected] | 7464805 | 2010-08-10 19:37:51 | [diff] [blame] | 40 | |
41 | EXPECT_EQ(key_pair->key_->pkcs11ID, key_pair_2->key_->pkcs11ID); | ||||
42 | } | ||||
43 | |||||
44 | TEST_F(RSAPrivateKeyNSSTest, FailedFindFromPublicKey) { | ||||
45 | // Create a keypair, which will put the keys in the user's NSSDB. | ||||
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 46 | scoped_ptr<crypto::RSAPrivateKey> key_pair(RSAPrivateKey::Create(256)); |
[email protected] | 7464805 | 2010-08-10 19:37:51 | [diff] [blame] | 47 | |
48 | std::vector<uint8> public_key; | ||||
49 | ASSERT_TRUE(key_pair->ExportPublicKey(&public_key)); | ||||
50 | |||||
51 | // Remove the keys from the DB, and make sure we can't find them again. | ||||
52 | if (key_pair->key_) { | ||||
53 | PK11_DestroyTokenObject(key_pair->key_->pkcs11Slot, | ||||
54 | key_pair->key_->pkcs11ID); | ||||
55 | } | ||||
56 | if (key_pair->public_key_) { | ||||
57 | PK11_DestroyTokenObject(key_pair->public_key_->pkcs11Slot, | ||||
58 | key_pair->public_key_->pkcs11ID); | ||||
59 | } | ||||
60 | |||||
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 61 | EXPECT_EQ(NULL, crypto::RSAPrivateKey::FindFromPublicKeyInfo(public_key)); |
[email protected] | 7464805 | 2010-08-10 19:37:51 | [diff] [blame] | 62 | } |
63 | |||||
[email protected] | 4b559b4d | 2011-04-14 17:37:14 | [diff] [blame] | 64 | } // namespace crypto |