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.
5 #include "crypto/rsa_private_key.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "crypto/nss_util.h"
12 #include "testing/gtest/include/gtest/gtest.h"
16 class RSAPrivateKeyNSSTest
: public testing::Test
{
18 RSAPrivateKeyNSSTest() {}
19 virtual ~RSAPrivateKeyNSSTest() {}
22 ScopedTestNSSDB test_nssdb_
;
24 DISALLOW_COPY_AND_ASSIGN(RSAPrivateKeyNSSTest
);
27 TEST_F(RSAPrivateKeyNSSTest
, CreateFromKeyTest
) {
28 scoped_ptr
<crypto::RSAPrivateKey
> key_pair(RSAPrivateKey::Create(256));
30 scoped_ptr
<crypto::RSAPrivateKey
> key_copy(
31 RSAPrivateKey::CreateFromKey(key_pair
->key()));
32 ASSERT_TRUE(key_copy
.get());
34 std::vector
<uint8
> privkey
;
35 std::vector
<uint8
> pubkey
;
36 ASSERT_TRUE(key_pair
->ExportPrivateKey(&privkey
));
37 ASSERT_TRUE(key_pair
->ExportPublicKey(&pubkey
));
39 std::vector
<uint8
> privkey_copy
;
40 std::vector
<uint8
> pubkey_copy
;
41 ASSERT_TRUE(key_copy
->ExportPrivateKey(&privkey_copy
));
42 ASSERT_TRUE(key_copy
->ExportPublicKey(&pubkey_copy
));
44 ASSERT_EQ(privkey
, privkey_copy
);
45 ASSERT_EQ(pubkey
, pubkey_copy
);
48 TEST_F(RSAPrivateKeyNSSTest
, FindFromPublicKey
) {
49 // Create a keypair, which will put the keys in the user's NSSDB.
50 scoped_ptr
<crypto::RSAPrivateKey
> key_pair(RSAPrivateKey::Create(256));
52 std::vector
<uint8
> public_key
;
53 ASSERT_TRUE(key_pair
->ExportPublicKey(&public_key
));
55 scoped_ptr
<crypto::RSAPrivateKey
> key_pair_2(
56 crypto::RSAPrivateKey::FindFromPublicKeyInfo(public_key
));
58 EXPECT_EQ(key_pair
->key_
->pkcs11ID
, key_pair_2
->key_
->pkcs11ID
);
61 TEST_F(RSAPrivateKeyNSSTest
, FailedFindFromPublicKey
) {
62 // Create a keypair, which will put the keys in the user's NSSDB.
63 scoped_ptr
<crypto::RSAPrivateKey
> key_pair(RSAPrivateKey::Create(256));
65 std::vector
<uint8
> public_key
;
66 ASSERT_TRUE(key_pair
->ExportPublicKey(&public_key
));
68 // Remove the keys from the DB, and make sure we can't find them again.
70 PK11_DestroyTokenObject(key_pair
->key_
->pkcs11Slot
,
71 key_pair
->key_
->pkcs11ID
);
73 if (key_pair
->public_key_
) {
74 PK11_DestroyTokenObject(key_pair
->public_key_
->pkcs11Slot
,
75 key_pair
->public_key_
->pkcs11ID
);
78 EXPECT_EQ(NULL
, crypto::RSAPrivateKey::FindFromPublicKeyInfo(public_key
));