rsa_private_key_unittest.cc revision 3a83cddbf6d8fe9c9d70d01e008ff8e86a823cb6
14c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// Copyright (c) 2011 The Chromium Authors. All rights reserved. 24c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// Use of this source code is governed by a BSD-style license that can be 34c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// found in the LICENSE file. 44c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 54c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath#include "crypto/rsa_private_key.h" 64c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 74c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath#include <stdint.h> 84c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 94c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath#include <memory> 104c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 114c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath#include "testing/gtest/include/gtest/gtest.h" 124c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 134c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathnamespace { 144c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 154c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamathconst uint8_t kTestPrivateKeyInfo[] = { 164c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x30, 0x82, 0x02, 0x78, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 174c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 184c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x02, 0x62, 0x30, 0x82, 0x02, 0x5e, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 194c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x00, 0xb8, 0x7f, 0x2b, 0x20, 0xdc, 0x7c, 0x9b, 0x0c, 0xdc, 0x51, 0x61, 204c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x99, 0x0d, 0x36, 0x0f, 0xd4, 0x66, 0x88, 0x08, 0x55, 0x84, 0xd5, 0x3a, 214c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xbf, 0x2b, 0xa4, 0x64, 0x85, 0x7b, 0x0c, 0x04, 0x13, 0x3f, 0x8d, 0xf4, 224c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xbc, 0x38, 0x0d, 0x49, 0xfe, 0x6b, 0xc4, 0x5a, 0xb0, 0x40, 0x53, 0x3a, 234c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xd7, 0x66, 0x09, 0x0f, 0x9e, 0x36, 0x74, 0x30, 0xda, 0x8a, 0x31, 0x4f, 244c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x1f, 0x14, 0x50, 0xd7, 0xc7, 0x20, 0x94, 0x17, 0xde, 0x4e, 0xb9, 0x57, 254c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x5e, 0x7e, 0x0a, 0xe5, 0xb2, 0x65, 0x7a, 0x89, 0x4e, 0xb6, 0x47, 0xff, 264c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x1c, 0xbd, 0xb7, 0x38, 0x13, 0xaf, 0x47, 0x85, 0x84, 0x32, 0x33, 0xf3, 274c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x17, 0x49, 0xbf, 0xe9, 0x96, 0xd0, 0xd6, 0x14, 0x6f, 0x13, 0x8d, 0xc5, 284c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xfc, 0x2c, 0x72, 0xba, 0xac, 0xea, 0x7e, 0x18, 0x53, 0x56, 0xa6, 0x83, 294c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xa2, 0xce, 0x93, 0x93, 0xe7, 0x1f, 0x0f, 0xe6, 0x0f, 0x02, 0x03, 0x01, 304c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x00, 0x01, 0x02, 0x81, 0x80, 0x03, 0x61, 0x89, 0x37, 0xcb, 0xf2, 0x98, 314c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xa0, 0xce, 0xb4, 0xcb, 0x16, 0x13, 0xf0, 0xe6, 0xaf, 0x5c, 0xc5, 0xa7, 324c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x69, 0x71, 0xca, 0xba, 0x8d, 0xe0, 0x4d, 0xdd, 0xed, 0xb8, 0x48, 0x8b, 334c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x16, 0x93, 0x36, 0x95, 0xc2, 0x91, 0x40, 0x65, 0x17, 0xbd, 0x7f, 0xd6, 344c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xad, 0x9e, 0x30, 0x28, 0x46, 0xe4, 0x3e, 0xcc, 0x43, 0x78, 0xf9, 0xfe, 354c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x1f, 0x33, 0x23, 0x1e, 0x31, 0x12, 0x9d, 0x3c, 0xa7, 0x08, 0x82, 0x7b, 364c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x7d, 0x25, 0x4e, 0x5e, 0x19, 0xa8, 0x9b, 0xed, 0x86, 0xb2, 0xcb, 0x3c, 374c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xfe, 0x4e, 0xa1, 0xfa, 0x62, 0x87, 0x3a, 0x17, 0xf7, 0x60, 0xec, 0x38, 384c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x29, 0xe8, 0x4f, 0x34, 0x9f, 0x76, 0x9d, 0xee, 0xa3, 0xf6, 0x85, 0x6b, 394c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x84, 0x43, 0xc9, 0x1e, 0x01, 0xff, 0xfd, 0xd0, 0x29, 0x4c, 0xfa, 0x8e, 404c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x57, 0x0c, 0xc0, 0x71, 0xa5, 0xbb, 0x88, 0x46, 0x29, 0x5c, 0xc0, 0x4f, 414c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x01, 0x02, 0x41, 0x00, 0xf5, 0x83, 0xa4, 0x64, 0x4a, 0xf2, 0xdd, 0x8c, 424c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x2c, 0xed, 0xa8, 0xd5, 0x60, 0x5a, 0xe4, 0xc7, 0xcc, 0x61, 0xcd, 0x38, 434c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x42, 0x20, 0xd3, 0x82, 0x18, 0xf2, 0x35, 0x00, 0x72, 0x2d, 0xf7, 0x89, 444c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x80, 0x67, 0xb5, 0x93, 0x05, 0x5f, 0xdd, 0x42, 0xba, 0x16, 0x1a, 0xea, 454c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x15, 0xc6, 0xf0, 0xb8, 0x8c, 0xbc, 0xbf, 0x54, 0x9e, 0xf1, 0xc1, 0xb2, 464c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xb3, 0x8b, 0xb6, 0x26, 0x02, 0x30, 0xc4, 0x81, 0x02, 0x41, 0x00, 0xc0, 474c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x60, 0x62, 0x80, 0xe1, 0x22, 0x78, 0xf6, 0x9d, 0x83, 0x18, 0xeb, 0x72, 484c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x45, 0xd7, 0xc8, 0x01, 0x7f, 0xa9, 0xca, 0x8f, 0x7d, 0xd6, 0xb8, 0x31, 494c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x2b, 0x84, 0x7f, 0x62, 0xd9, 0xa9, 0x22, 0x17, 0x7d, 0x06, 0x35, 0x6c, 504c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xf3, 0xc1, 0x94, 0x17, 0x85, 0x5a, 0xaf, 0x9c, 0x5c, 0x09, 0x3c, 0xcf, 514c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x2f, 0x44, 0x9d, 0xb6, 0x52, 0x68, 0x5f, 0xf9, 0x59, 0xc8, 0x84, 0x2b, 524c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x39, 0x22, 0x8f, 0x02, 0x41, 0x00, 0xb2, 0x04, 0xe2, 0x0e, 0x56, 0xca, 534c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x03, 0x1a, 0xc0, 0xf9, 0x12, 0x92, 0xa5, 0x6b, 0x42, 0xb8, 0x1c, 0xda, 544c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x4d, 0x93, 0x9d, 0x5f, 0x6f, 0xfd, 0xc5, 0x58, 0xda, 0x55, 0x98, 0x74, 554c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xfc, 0x28, 0x17, 0x93, 0x1b, 0x75, 0x9f, 0x50, 0x03, 0x7f, 0x7e, 0xae, 564c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xc8, 0x95, 0x33, 0x75, 0x2c, 0xd6, 0xa4, 0x35, 0xb8, 0x06, 0x03, 0xba, 574c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x08, 0x59, 0x2b, 0x17, 0x02, 0xdc, 0x4c, 0x7a, 0x50, 0x01, 0x02, 0x41, 584c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x00, 0x9d, 0xdb, 0x39, 0x59, 0x09, 0xe4, 0x30, 0xa0, 0x24, 0xf5, 0xdb, 594c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x2f, 0xf0, 0x2f, 0xf1, 0x75, 0x74, 0x0d, 0x5e, 0xb5, 0x11, 0x73, 0xb0, 604c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x0a, 0xaa, 0x86, 0x4c, 0x0d, 0xff, 0x7e, 0x1d, 0xb4, 0x14, 0xd4, 0x09, 614c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x91, 0x33, 0x5a, 0xfd, 0xa0, 0x58, 0x80, 0x9b, 0xbe, 0x78, 0x2e, 0x69, 624c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x82, 0x15, 0x7c, 0x72, 0xf0, 0x7b, 0x18, 0x39, 0xff, 0x6e, 0xeb, 0xc6, 634c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x86, 0xf5, 0xb4, 0xc7, 0x6f, 0x02, 0x41, 0x00, 0x8d, 0x1a, 0x37, 0x0f, 644c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x76, 0xc4, 0x82, 0xfa, 0x5c, 0xc3, 0x79, 0x35, 0x3e, 0x70, 0x8a, 0xbf, 654c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x27, 0x49, 0xb0, 0x99, 0x63, 0xcb, 0x77, 0x5f, 0xa8, 0x82, 0x65, 0xf6, 664c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x03, 0x52, 0x51, 0xf1, 0xae, 0x2e, 0x05, 0xb3, 0xc6, 0xa4, 0x92, 0xd1, 674c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xce, 0x6c, 0x72, 0xfb, 0x21, 0xb3, 0x02, 0x87, 0xe4, 0xfd, 0x61, 0xca, 684c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x00, 0x42, 0x19, 0xf0, 0xda, 0x5a, 0x53, 0xe3, 0xb1, 0xc5, 0x15, 0xf3}; 694c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 704c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath} // namespace 714c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 724c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// Generate random private keys with two different sizes. Reimport, then 734c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// export them again. We should get back the same exact bytes. 744c89023ef86f29fa9add7db2574f2169fe842577Narayan KamathTEST(RSAPrivateKeyUnitTest, InitRandomTest) { 754c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> keypair1( 764c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::Create(1024)); 774c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> keypair2( 784c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::Create(2048)); 794c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair1.get()); 804c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair2.get()); 814c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 824c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> privkey1; 834c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> privkey2; 844c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> pubkey1; 854c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> pubkey2; 864c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 874c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair1->ExportPrivateKey(&privkey1)); 884c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair2->ExportPrivateKey(&privkey2)); 894c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair1->ExportPublicKey(&pubkey1)); 904c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair2->ExportPublicKey(&pubkey2)); 914c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 924c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> keypair3( 934c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(privkey1)); 944c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> keypair4( 954c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(privkey2)); 964c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair3.get()); 974c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair4.get()); 984c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 994c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> privkey3; 1004c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> privkey4; 1014c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair3->ExportPrivateKey(&privkey3)); 1024c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair4->ExportPrivateKey(&privkey4)); 1034c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1044c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(privkey1.size(), privkey3.size()); 1054c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(privkey2.size(), privkey4.size()); 1064c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(0, memcmp(&privkey1.front(), &privkey3.front(), privkey1.size())); 1074c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(0, memcmp(&privkey2.front(), &privkey4.front(), privkey2.size())); 1084c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath} 1094c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1104c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// Test Copy() method. 1114c89023ef86f29fa9add7db2574f2169fe842577Narayan KamathTEST(RSAPrivateKeyUnitTest, CopyTest) { 1124c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> input(kTestPrivateKeyInfo, 1134c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath kTestPrivateKeyInfo + sizeof(kTestPrivateKeyInfo)); 1144c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1154c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> key( 1164c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(input)); 1174c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1184c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> key_copy(key->Copy()); 1194c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(key_copy.get()); 1204c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1214c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> privkey_copy; 1224c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(key_copy->ExportPrivateKey(&privkey_copy)); 1234c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(input, privkey_copy); 1244c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath} 1254c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1264c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// Test that CreateFromPrivateKeyInfo fails if there is extra data after the RSA 1274c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// key. 1284c89023ef86f29fa9add7db2574f2169fe842577Narayan KamathTEST(RSAPrivateKeyUnitTest, ExtraData) { 1294c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> input(kTestPrivateKeyInfo, 1304c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath kTestPrivateKeyInfo + sizeof(kTestPrivateKeyInfo)); 1314c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath input.push_back(0); 1324c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1334c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> key( 1344c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(input)); 1354c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1364c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath // Import should fail. 1374c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath EXPECT_FALSE(key); 1384c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath} 1394c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1404c89023ef86f29fa9add7db2574f2169fe842577Narayan KamathTEST(RSAPrivateKeyUnitTest, NotRsaKey) { 1414c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath // Defines a valid P-256 private key. 1424c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath const uint8_t kTestEcPrivateKeyInfo[] = { 1434c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x30, 0x81, 0x87, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 1444c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 1454c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x03, 0x01, 0x07, 0x04, 0x6D, 0x30, 0x6B, 0x02, 0x01, 0x01, 0x04, 0x20, 1464c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x1F, 0xE3, 0x39, 0x50, 0xC5, 0xF4, 0x61, 0x12, 0x4A, 0xE9, 0x92, 0xC2, 1474c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xBD, 0xFD, 0xF1, 0xC7, 0x3B, 0x16, 0x15, 0xF5, 0x71, 0xBD, 0x56, 0x7E, 1484c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x60, 0xD1, 0x9A, 0xA1, 0xF4, 0x8C, 0xDF, 0x42, 0xA1, 0x44, 0x03, 0x42, 1494c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x00, 0x04, 0x7C, 0x11, 0x0C, 0x66, 0xDC, 0xFD, 0xA8, 0x07, 0xF6, 0xE6, 1504c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x9E, 0x45, 0xDD, 0xB3, 0xC7, 0x4F, 0x69, 0xA1, 0x48, 0x4D, 0x20, 0x3E, 1514c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x8D, 0xC5, 0xAD, 0xA8, 0xE9, 0xA9, 0xDD, 0x7C, 0xB3, 0xC7, 0x0D, 0xF4, 1524c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x48, 0x98, 0x6E, 0x51, 0xBD, 0xE5, 0xD1, 0x57, 0x6F, 0x99, 0x90, 0x1F, 1534c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x9C, 0x2C, 0x6A, 0x80, 0x6A, 0x47, 0xFD, 0x90, 0x76, 0x43, 0xA7, 0x2B, 1544c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x83, 0x55, 0x97, 0xEF, 0xC8, 0xC6}; 1554c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1564c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> input( 1574c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath kTestEcPrivateKeyInfo, 1584c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath kTestEcPrivateKeyInfo + sizeof(kTestEcPrivateKeyInfo)); 1594c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1604c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> key( 1614c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(input)); 1624c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1634c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath // Import should fail as the given PKCS8 bytes were for an EC key not RSA key. 1644c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath EXPECT_FALSE(key); 1654c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath} 1664c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1674c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// Verify that generated public keys look good. This test data was generated 1684c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// with the openssl command line tool. 1694c89023ef86f29fa9add7db2574f2169fe842577Narayan KamathTEST(RSAPrivateKeyUnitTest, PublicKeyTest) { 1704c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath const uint8_t expected_public_key_info[] = { 1714c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 1724c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 1734c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x89, 0x02, 0x81, 0x81, 0x00, 0xb8, 0x7f, 0x2b, 0x20, 0xdc, 0x7c, 0x9b, 1744c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x0c, 0xdc, 0x51, 0x61, 0x99, 0x0d, 0x36, 0x0f, 0xd4, 0x66, 0x88, 0x08, 1754c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x55, 0x84, 0xd5, 0x3a, 0xbf, 0x2b, 0xa4, 0x64, 0x85, 0x7b, 0x0c, 0x04, 1764c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x13, 0x3f, 0x8d, 0xf4, 0xbc, 0x38, 0x0d, 0x49, 0xfe, 0x6b, 0xc4, 0x5a, 1774c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xb0, 0x40, 0x53, 0x3a, 0xd7, 0x66, 0x09, 0x0f, 0x9e, 0x36, 0x74, 0x30, 1784c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xda, 0x8a, 0x31, 0x4f, 0x1f, 0x14, 0x50, 0xd7, 0xc7, 0x20, 0x94, 0x17, 1794c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xde, 0x4e, 0xb9, 0x57, 0x5e, 0x7e, 0x0a, 0xe5, 0xb2, 0x65, 0x7a, 0x89, 1804c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x4e, 0xb6, 0x47, 0xff, 0x1c, 0xbd, 0xb7, 0x38, 0x13, 0xaf, 0x47, 0x85, 1814c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x84, 0x32, 0x33, 0xf3, 0x17, 0x49, 0xbf, 0xe9, 0x96, 0xd0, 0xd6, 0x14, 1824c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x6f, 0x13, 0x8d, 0xc5, 0xfc, 0x2c, 0x72, 0xba, 0xac, 0xea, 0x7e, 0x18, 1834c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x53, 0x56, 0xa6, 0x83, 0xa2, 0xce, 0x93, 0x93, 0xe7, 0x1f, 0x0f, 0xe6, 1844c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x0f, 0x02, 0x03, 0x01, 0x00, 0x01}; 1854c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1864c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> input(kTestPrivateKeyInfo, 1874c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath kTestPrivateKeyInfo + sizeof(kTestPrivateKeyInfo)); 1884c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1894c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> key( 1904c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(input)); 1914c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(key.get()); 1924c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1934c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> output; 1944c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(key->ExportPublicKey(&output)); 1954c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 1964c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(0, 1974c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath memcmp(expected_public_key_info, &output.front(), output.size())); 1984c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath} 1994c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 2004c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// These two test keys each contain an integer that has 0x00 for its most 2014c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// significant byte. When encoded as ASN.1, this byte is dropped and there are 2024c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// two interesting sub-cases. When the sign bit of the integer is set, an extra 2034c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// null byte is added back to force the encoded value to be positive. When the 2044c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// sign bit is not set, the encoded integer is just left shorter than usual. 2054c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// See also: http://code.google.com/p/chromium/issues/detail?id=14877. 2064c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// 2074c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// Before we were handling this correctly, we would see one of two failures: 2084c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// * RSAPrivateKey::CreateFromPrivateKeyInfo would return null because the 2094c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// underlying windows API failed to import the key. 2104c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// * The import would succeed, but incorrectly interpret the data. On export, 2114c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// the key would contain different values. 2124c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// 2134c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath// This test case verifies these two failures modes don't occur. 2144c89023ef86f29fa9add7db2574f2169fe842577Narayan KamathTEST(RSAPrivateKeyUnitTest, ShortIntegers) { 2154c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath const uint8_t short_integer_with_high_bit[] = { 2164c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x30, 0x82, 0x02, 0x77, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 2174c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 2184c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x02, 0x61, 0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 2194c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x00, 0x92, 0x59, 0x32, 0x7d, 0x8e, 0xaf, 0x2e, 0xd5, 0xb2, 0x5c, 0x67, 2204c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xc8, 0x7d, 0x48, 0xb7, 0x84, 0x12, 0xd0, 0x76, 0xda, 0xe1, 0xa3, 0x1e, 2214c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x40, 0x01, 0x14, 0x5c, 0xef, 0x26, 0x6e, 0x28, 0xa2, 0xf7, 0xa5, 0xb4, 2224c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x02, 0x37, 0xd0, 0x53, 0x10, 0xcb, 0x7c, 0x6a, 0xf4, 0x53, 0x9f, 0xb8, 2234c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xe0, 0x83, 0x93, 0xd1, 0x19, 0xd8, 0x28, 0xd1, 0xd1, 0xd8, 0x87, 0x8f, 2244c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x92, 0xfd, 0x73, 0xc0, 0x4d, 0x3e, 0x07, 0x22, 0x1f, 0xc1, 0x20, 0xb0, 2254c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x70, 0xb2, 0x3b, 0xea, 0xb1, 0xe5, 0x0a, 0xfd, 0x56, 0x49, 0x5e, 0x39, 2264c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x90, 0x91, 0xce, 0x04, 0x83, 0x29, 0xaa, 0xfd, 0x12, 0xa4, 0x42, 0x26, 2274c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x6c, 0x6e, 0x79, 0x70, 0x77, 0x03, 0xb2, 0x07, 0x01, 0x3d, 0x85, 0x81, 2284c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x95, 0x9e, 0xda, 0x5a, 0xa3, 0xf4, 0x2d, 0x38, 0x04, 0x58, 0xf5, 0x6b, 2294c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xc9, 0xf1, 0xb5, 0x65, 0xfe, 0x66, 0x0d, 0xa2, 0xd5, 0x02, 0x03, 0x01, 2304c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x00, 0x01, 0x02, 0x81, 0x80, 0x5e, 0x01, 0x5f, 0xb6, 0x59, 0x1d, 0xdc, 2314c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x36, 0xb6, 0x60, 0x36, 0xe6, 0x08, 0xdb, 0xd9, 0xcd, 0xc3, 0x8c, 0x16, 2324c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x9c, 0x98, 0x8d, 0x7f, 0xd3, 0xdb, 0x1d, 0xaa, 0x68, 0x8f, 0xc5, 0xf8, 2334c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xe2, 0x5d, 0xb3, 0x19, 0xc2, 0xc6, 0xf9, 0x51, 0x32, 0x1b, 0x93, 0x6a, 2344c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xdc, 0x50, 0x8e, 0xeb, 0x61, 0x84, 0x03, 0x42, 0x30, 0x98, 0xb1, 0xf7, 2354c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xbd, 0x14, 0x9a, 0x57, 0x36, 0x33, 0x09, 0xd4, 0x3e, 0x90, 0xda, 0xef, 2364c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x09, 0x6e, 0xef, 0x49, 0xb6, 0x60, 0x68, 0x5e, 0x54, 0x17, 0x25, 0x5b, 2374c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x37, 0xe3, 0x35, 0x63, 0x5b, 0x60, 0x3c, 0xbd, 0x50, 0xdf, 0x46, 0x43, 2384c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x08, 0xa4, 0x71, 0x21, 0xf1, 0x30, 0x71, 0xdc, 0xda, 0xd7, 0x6f, 0xd2, 2394c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x18, 0xbd, 0x39, 0xf1, 0xe1, 0xbe, 0xa8, 0x8d, 0x62, 0xdf, 0xa2, 0x3e, 2404c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xb6, 0x15, 0x26, 0xb6, 0x57, 0xbd, 0x63, 0xdb, 0xc1, 0x91, 0xec, 0xb8, 2414c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x01, 0x02, 0x41, 0x00, 0xc6, 0x1a, 0x06, 0x48, 0xf2, 0x12, 0x1c, 0x9f, 2424c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x74, 0x20, 0x5c, 0x85, 0xa2, 0xda, 0xe5, 0x62, 0x96, 0x8d, 0x22, 0x7b, 2434c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x78, 0x73, 0xea, 0xbb, 0x9f, 0x59, 0x42, 0x13, 0x15, 0xc8, 0x11, 0x50, 2444c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x6c, 0x55, 0xf6, 0xdf, 0x8b, 0xfe, 0xc7, 0xdd, 0xa8, 0xca, 0x54, 0x41, 2454c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xe8, 0xce, 0xbe, 0x7d, 0xbd, 0xe2, 0x13, 0x4b, 0x5b, 0x61, 0xeb, 0x69, 2464c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x6c, 0xb1, 0x9b, 0x28, 0x68, 0x5b, 0xd6, 0x01, 0x02, 0x41, 0x00, 0xbd, 2474c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x1e, 0xfe, 0x51, 0x99, 0xb6, 0xe3, 0x84, 0xfe, 0xf1, 0x9e, 0xfd, 0x9c, 2484c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xe7, 0x86, 0x43, 0x68, 0x7f, 0x2f, 0x6a, 0x2a, 0x4c, 0xae, 0xa6, 0x41, 2494c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x1c, 0xf0, 0x10, 0x37, 0x54, 0x23, 0xba, 0x05, 0x0d, 0x18, 0x27, 0x8d, 2504c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xb8, 0xe4, 0x8f, 0xf2, 0x25, 0x73, 0x8a, 0xd7, 0x05, 0x98, 0x6b, 0x3d, 2514c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x55, 0xb7, 0x6f, 0x7c, 0xec, 0x77, 0x61, 0x54, 0x7b, 0xb6, 0x6b, 0x31, 2524c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xec, 0x94, 0xd5, 0x02, 0x41, 0x00, 0x90, 0xa2, 0xa5, 0x9e, 0x12, 0xa7, 2534c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x68, 0xa0, 0x7e, 0xdf, 0xb5, 0xcd, 0x98, 0x26, 0xab, 0xbd, 0xbc, 0x5f, 2544c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xd5, 0x22, 0x42, 0xc2, 0x97, 0x4a, 0x5f, 0x40, 0x82, 0xfe, 0x7e, 0x33, 2554c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xb1, 0x78, 0x7f, 0x70, 0x90, 0x2b, 0x8d, 0x01, 0xfb, 0x18, 0xfa, 0x48, 2564c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xa7, 0x15, 0xec, 0x0d, 0x2e, 0x85, 0x8d, 0xe2, 0x86, 0xe5, 0xc9, 0x15, 2574c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x88, 0x14, 0x53, 0xd8, 0xa4, 0x88, 0xef, 0x10, 0xc6, 0x01, 0x02, 0x41, 2584c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x00, 0xba, 0xe4, 0xaf, 0x14, 0xfa, 0xdf, 0xf6, 0xd5, 0xce, 0x8f, 0xfe, 2594c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xbb, 0xc8, 0x5c, 0x30, 0x9d, 0xda, 0xdd, 0x9d, 0x80, 0xc0, 0x0e, 0x89, 2604c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xa5, 0xb8, 0xc1, 0x1d, 0x28, 0x19, 0x55, 0x67, 0xfd, 0x03, 0xd2, 0xdd, 2614c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xe4, 0xf0, 0xb4, 0x20, 0x03, 0x74, 0x9b, 0xb8, 0x24, 0x23, 0xbb, 0xde, 2624c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xd5, 0x53, 0x86, 0xaa, 0xc1, 0x5d, 0x65, 0xdd, 0xcf, 0xec, 0x8a, 0x59, 2634c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x4a, 0x73, 0xca, 0xc5, 0x85, 0x02, 0x40, 0x00, 0xc4, 0x5e, 0x8d, 0xa4, 2644c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xea, 0xbb, 0x6a, 0x9b, 0xe6, 0x3a, 0x4d, 0xc1, 0xdb, 0xe5, 0x52, 0x38, 2654c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xf9, 0x59, 0x91, 0x2d, 0x90, 0x82, 0xe3, 0x31, 0x1b, 0x48, 0xb7, 0x42, 2664c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xfa, 0x1d, 0x83, 0xd5, 0x3d, 0x02, 0xc2, 0x12, 0x71, 0x10, 0x3a, 0xbd, 2674c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x92, 0x8f, 0x9b, 0xa2, 0x6b, 0x2d, 0x21, 0xa4, 0x65, 0xe9, 0xfa, 0x8c, 2684c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x30, 0x2a, 0x89, 0xce, 0xd0, 0xa7, 0x67, 0xd8, 0x45, 0x84, 0xb0}; 2694c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 2704c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath const uint8_t short_integer_without_high_bit[] = { 2714c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x30, 0x82, 0x02, 0x76, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 2724c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 2734c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x02, 0x60, 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 2744c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x00, 0xc3, 0x9e, 0x8d, 0xc4, 0x6d, 0x38, 0xe8, 0x0e, 0x9f, 0x84, 0x03, 2754c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x40, 0x8e, 0x81, 0x2e, 0x56, 0x67, 0x78, 0x11, 0x85, 0x27, 0x81, 0x52, 2764c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xf2, 0x1b, 0x3e, 0x5b, 0xf8, 0xab, 0xfc, 0xaf, 0xca, 0x5c, 0x26, 0xd5, 2774c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xfa, 0xd4, 0x55, 0x50, 0x38, 0xb9, 0x9d, 0x89, 0x92, 0x7e, 0x34, 0xcf, 2784c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x37, 0x82, 0x48, 0x2d, 0xaa, 0xc4, 0x6a, 0x0e, 0x93, 0xea, 0xad, 0x8a, 2794c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x33, 0xf0, 0x42, 0x23, 0xe0, 0x4c, 0x98, 0xbf, 0x01, 0x00, 0x1b, 0xfe, 2804c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x06, 0x15, 0xc6, 0xe3, 0x80, 0x79, 0x6d, 0xfe, 0x48, 0xcd, 0x40, 0xbb, 2814c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xf9, 0x58, 0xe6, 0xbf, 0xd5, 0x4c, 0x29, 0x48, 0x53, 0x78, 0x06, 0x03, 2824c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x0d, 0x59, 0xf5, 0x20, 0xe0, 0xe6, 0x8c, 0xb2, 0xf5, 0xd8, 0x61, 0x52, 2834c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x7e, 0x40, 0x83, 0xd7, 0x69, 0xae, 0xd7, 0x75, 0x02, 0x2d, 0x49, 0xd5, 2844c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x15, 0x5b, 0xf1, 0xd9, 0x4d, 0x60, 0x7d, 0x62, 0xa5, 0x02, 0x03, 0x01, 2854c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x00, 0x01, 0x02, 0x7f, 0x6d, 0x45, 0x23, 0xeb, 0x95, 0x17, 0x34, 0x88, 2864c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xf6, 0x91, 0xc7, 0x3f, 0x48, 0x5a, 0xe0, 0x87, 0x63, 0x44, 0xae, 0x84, 2874c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xb2, 0x8c, 0x8a, 0xc8, 0xb2, 0x6f, 0x22, 0xf0, 0xc5, 0x21, 0x61, 0x10, 2884c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xa8, 0x69, 0x09, 0x1e, 0x13, 0x7d, 0x94, 0x52, 0x1b, 0x5c, 0xe4, 0x7b, 2894c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xf0, 0x03, 0x8f, 0xbc, 0x72, 0x09, 0xdf, 0x78, 0x84, 0x3e, 0xb9, 0xe5, 2904c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xe6, 0x31, 0x0a, 0x01, 0xf9, 0x32, 0xf8, 0xd6, 0x57, 0xa3, 0x87, 0xe6, 2914c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xf5, 0x98, 0xbc, 0x8e, 0x41, 0xb9, 0x50, 0x17, 0x7b, 0xd3, 0x97, 0x5a, 2924c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x44, 0x3a, 0xee, 0xff, 0x6b, 0xb3, 0x3a, 0x52, 0xe7, 0xa4, 0x96, 0x9a, 2934c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xf6, 0x83, 0xc8, 0x97, 0x1c, 0x63, 0xa1, 0xd6, 0xb3, 0xa8, 0xb2, 0xc7, 2944c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x73, 0x25, 0x0f, 0x58, 0x36, 0xb9, 0x7a, 0x47, 0xa7, 0x4d, 0x30, 0xfe, 2954c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x4d, 0x74, 0x56, 0xe8, 0xfb, 0xd6, 0x50, 0xe5, 0xe0, 0x28, 0x15, 0x02, 2964c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x41, 0x00, 0xeb, 0x15, 0x62, 0xb6, 0x37, 0x41, 0x7c, 0xc5, 0x00, 0x22, 2974c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x2c, 0x5a, 0x5e, 0xe4, 0xb2, 0x11, 0x87, 0x89, 0xad, 0xf4, 0x57, 0x68, 2984c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x90, 0xb7, 0x9f, 0xe2, 0x79, 0x20, 0x6b, 0x98, 0x00, 0x0d, 0x3a, 0x3b, 2994c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xc1, 0xcd, 0x36, 0xf9, 0x27, 0xda, 0x40, 0x36, 0x1d, 0xb8, 0x5c, 0x96, 3004c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xeb, 0x04, 0x08, 0xe1, 0x3f, 0xfa, 0x94, 0x8b, 0x0f, 0xa0, 0xff, 0xc1, 3014c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x51, 0xea, 0x90, 0xad, 0x15, 0xc7, 0x02, 0x41, 0x00, 0xd5, 0x06, 0x45, 3024c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xd7, 0x55, 0x63, 0x1a, 0xf0, 0x89, 0x81, 0xae, 0x87, 0x23, 0xa2, 0x39, 3034c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xfe, 0x3d, 0x82, 0xc7, 0xcb, 0x15, 0xb9, 0xe3, 0xe2, 0x5b, 0xc6, 0xd2, 3044c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x55, 0xdd, 0xab, 0x55, 0x29, 0x7c, 0xda, 0x0e, 0x1c, 0x09, 0xfc, 0x73, 3054c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x0d, 0x01, 0xed, 0x6d, 0x2f, 0x05, 0xd0, 0xd5, 0x1d, 0xce, 0x18, 0x7f, 3064c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xb0, 0xc8, 0x47, 0x77, 0xd2, 0xa9, 0x9e, 0xfc, 0x39, 0x4b, 0x3d, 0x94, 3074c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x33, 0x02, 0x41, 0x00, 0x8f, 0x94, 0x09, 0x2d, 0x17, 0x44, 0x75, 0x0a, 3084c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xf1, 0x10, 0xee, 0x1b, 0xe7, 0xd7, 0x2f, 0xf6, 0xca, 0xdc, 0x49, 0x15, 3094c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x72, 0x09, 0x58, 0x51, 0xfe, 0x61, 0xd8, 0xee, 0xf7, 0x27, 0xe7, 0xe8, 3104c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x2c, 0x47, 0xf1, 0x0f, 0x00, 0x63, 0x5e, 0x76, 0xcb, 0x3f, 0x02, 0x19, 3114c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xe6, 0xda, 0xfa, 0x01, 0x05, 0xd7, 0x65, 0x37, 0x0b, 0x60, 0x7f, 0x94, 3124c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x2a, 0x80, 0x8d, 0x22, 0x81, 0x68, 0x65, 0x63, 0x02, 0x41, 0x00, 0xc2, 3134c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xd4, 0x18, 0xde, 0x47, 0x9e, 0xfb, 0x8d, 0x91, 0x05, 0xc5, 0x3c, 0x9d, 3144c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xcf, 0x8a, 0x60, 0xc7, 0x9b, 0x2b, 0xe5, 0xc6, 0xba, 0x1b, 0xfc, 0xf3, 3154c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xd9, 0x54, 0x97, 0xe9, 0xc4, 0x00, 0x80, 0x90, 0x4a, 0xd2, 0x6a, 0xbc, 3164c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x8b, 0x62, 0x22, 0x3c, 0x68, 0x0c, 0xda, 0xdb, 0xe3, 0xd2, 0x76, 0x8e, 3174c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xff, 0x03, 0x12, 0x09, 0x2a, 0xac, 0x21, 0x44, 0xb7, 0x3e, 0x91, 0x9c, 3184c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x09, 0xf6, 0xd7, 0x02, 0x41, 0x00, 0xc0, 0xa1, 0xbb, 0x70, 0xdc, 0xf8, 3194c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xeb, 0x17, 0x61, 0xd4, 0x8c, 0x7c, 0x3b, 0x82, 0x91, 0x58, 0xff, 0xf9, 3204c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x19, 0xac, 0x3a, 0x73, 0xa7, 0x20, 0xe5, 0x22, 0x02, 0xc4, 0xf6, 0xb9, 3214c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xb9, 0x43, 0x53, 0x35, 0x88, 0xe1, 0x05, 0xb6, 0x43, 0x9b, 0x39, 0xc8, 3224c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0x04, 0x4d, 0x2b, 0x01, 0xf7, 0xe6, 0x1b, 0x8d, 0x7e, 0x89, 0xe3, 0x43, 3234c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 0xd4, 0xf3, 0xab, 0x28, 0xd4, 0x5a, 0x1f, 0x20, 0xea, 0xbe}; 3244c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3254c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> input1; 3264c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> input2; 3274c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3284c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath input1.resize(sizeof(short_integer_with_high_bit)); 3294c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath input2.resize(sizeof(short_integer_without_high_bit)); 3304c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3314c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath memcpy(&input1.front(), short_integer_with_high_bit, 3324c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath sizeof(short_integer_with_high_bit)); 3334c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath memcpy(&input2.front(), short_integer_without_high_bit, 3344c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath sizeof(short_integer_without_high_bit)); 3354c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3364c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> keypair1( 3374c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(input1)); 3384c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> keypair2( 3394c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(input2)); 3404c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair1.get()); 3414c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair2.get()); 3424c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3434c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> output1; 3444c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> output2; 3454c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair1->ExportPrivateKey(&output1)); 3464c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(keypair2->ExportPrivateKey(&output2)); 3474c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3484c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(input1.size(), output1.size()); 3494c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(input2.size(), output2.size()); 3504c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(0, memcmp(&output1.front(), &input1.front(), input1.size())); 3514c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(0, memcmp(&output2.front(), &input2.front(), input2.size())); 3524c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath} 3534c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3544c89023ef86f29fa9add7db2574f2169fe842577Narayan KamathTEST(RSAPrivateKeyUnitTest, CreateFromKeyTest) { 3554c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> key_pair( 3564c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::Create(512)); 3574c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(key_pair.get()); 3584c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3594c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::unique_ptr<crypto::RSAPrivateKey> key_copy( 3604c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath crypto::RSAPrivateKey::CreateFromKey(key_pair->key())); 3614c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(key_copy.get()); 3624c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3634c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> privkey; 3644c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> pubkey; 3654c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(key_pair->ExportPrivateKey(&privkey)); 3664c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(key_pair->ExportPublicKey(&pubkey)); 3674c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3684c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> privkey_copy; 3694c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath std::vector<uint8_t> pubkey_copy; 3704c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(key_copy->ExportPrivateKey(&privkey_copy)); 3714c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_TRUE(key_copy->ExportPublicKey(&pubkey_copy)); 3724c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3734c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(privkey, privkey_copy); 3744c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath ASSERT_EQ(pubkey, pubkey_copy); 3754c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath} 3764c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath 3774c89023ef86f29fa9add7db2574f2169fe842577Narayan Kamath