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 "crypto/rsa_private_key.h" 6 7#include <keyhi.h> 8#include <pk11pub.h> 9 10#include "base/memory/scoped_ptr.h" 11#include "crypto/scoped_test_nss_db.h" 12#include "testing/gtest/include/gtest/gtest.h" 13 14namespace crypto { 15 16class RSAPrivateKeyNSSTest : public testing::Test { 17 public: 18 RSAPrivateKeyNSSTest() {} 19 virtual ~RSAPrivateKeyNSSTest() {} 20 21 private: 22 ScopedTestNSSDB test_nssdb_; 23 24 DISALLOW_COPY_AND_ASSIGN(RSAPrivateKeyNSSTest); 25}; 26 27TEST_F(RSAPrivateKeyNSSTest, FindFromPublicKey) { 28 // Create a keypair, which will put the keys in the user's NSSDB. 29 scoped_ptr<crypto::RSAPrivateKey> key_pair(RSAPrivateKey::Create(256)); 30 31 std::vector<uint8> public_key; 32 ASSERT_TRUE(key_pair->ExportPublicKey(&public_key)); 33 34 scoped_ptr<crypto::RSAPrivateKey> key_pair_2( 35 crypto::RSAPrivateKey::FindFromPublicKeyInfo(public_key)); 36 37 EXPECT_EQ(key_pair->key_->pkcs11ID, key_pair_2->key_->pkcs11ID); 38} 39 40TEST_F(RSAPrivateKeyNSSTest, FailedFindFromPublicKey) { 41 // Create a keypair, which will put the keys in the user's NSSDB. 42 scoped_ptr<crypto::RSAPrivateKey> key_pair(RSAPrivateKey::Create(256)); 43 44 std::vector<uint8> public_key; 45 ASSERT_TRUE(key_pair->ExportPublicKey(&public_key)); 46 47 // Remove the keys from the DB, and make sure we can't find them again. 48 if (key_pair->key_) { 49 PK11_DestroyTokenObject(key_pair->key_->pkcs11Slot, 50 key_pair->key_->pkcs11ID); 51 } 52 if (key_pair->public_key_) { 53 PK11_DestroyTokenObject(key_pair->public_key_->pkcs11Slot, 54 key_pair->public_key_->pkcs11ID); 55 } 56 57 EXPECT_EQ(NULL, crypto::RSAPrivateKey::FindFromPublicKeyInfo(public_key)); 58} 59 60} // namespace crypto 61