| OLD | NEW | 
|---|
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "base/crypto/rsa_private_key.h" | 5 #include "base/crypto/rsa_private_key.h" | 
| 6 #include "base/leak_annotations.h" |  | 
| 7 #include "base/scoped_ptr.h" | 6 #include "base/scoped_ptr.h" | 
| 8 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" | 
| 9 | 8 | 
| 10 // Generate random private keys with two different sizes. Reimport, then | 9 // Generate random private keys with two different sizes. Reimport, then | 
| 11 // export them again. We should get back the same exact bytes. | 10 // export them again. We should get back the same exact bytes. | 
| 12 TEST(RSAPrivateKeyUnitTest, InitRandomTest) { | 11 TEST(RSAPrivateKeyUnitTest, InitRandomTest) { | 
| 13   // This test currently leaks some memory, |  | 
| 14   // see http://crbug.com/34742 |  | 
| 15   ANNOTATE_SCOPED_MEMORY_LEAK; |  | 
| 16 |  | 
| 17   scoped_ptr<base::RSAPrivateKey> keypair1(base::RSAPrivateKey::Create(1024)); | 12   scoped_ptr<base::RSAPrivateKey> keypair1(base::RSAPrivateKey::Create(1024)); | 
| 18   scoped_ptr<base::RSAPrivateKey> keypair2(base::RSAPrivateKey::Create(2048)); | 13   scoped_ptr<base::RSAPrivateKey> keypair2(base::RSAPrivateKey::Create(2048)); | 
| 19   ASSERT_TRUE(keypair1.get()); | 14   ASSERT_TRUE(keypair1.get()); | 
| 20   ASSERT_TRUE(keypair2.get()); | 15   ASSERT_TRUE(keypair2.get()); | 
| 21 | 16 | 
| 22   std::vector<uint8> privkey1; | 17   std::vector<uint8> privkey1; | 
| 23   std::vector<uint8> privkey2; | 18   std::vector<uint8> privkey2; | 
| 24   std::vector<uint8> pubkey1; | 19   std::vector<uint8> pubkey1; | 
| 25   std::vector<uint8> pubkey2; | 20   std::vector<uint8> pubkey2; | 
| 26 | 21 | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 46   ASSERT_TRUE(0 == memcmp(&privkey1.front(), &privkey3.front(), | 41   ASSERT_TRUE(0 == memcmp(&privkey1.front(), &privkey3.front(), | 
| 47                           privkey1.size())); | 42                           privkey1.size())); | 
| 48   ASSERT_TRUE(0 == memcmp(&privkey2.front(), &privkey4.front(), | 43   ASSERT_TRUE(0 == memcmp(&privkey2.front(), &privkey4.front(), | 
| 49                           privkey2.size())); | 44                           privkey2.size())); | 
| 50 } | 45 } | 
| 51 | 46 | 
| 52 | 47 | 
| 53 // Verify that generated public keys look good. This test data was generated | 48 // Verify that generated public keys look good. This test data was generated | 
| 54 // with the openssl command line tool. | 49 // with the openssl command line tool. | 
| 55 TEST(RSAPrivateKeyUnitTest, PublicKeyTest) { | 50 TEST(RSAPrivateKeyUnitTest, PublicKeyTest) { | 
| 56   // This test currently leaks some memory, |  | 
| 57   // see http://crbug.com/34742 |  | 
| 58   ANNOTATE_SCOPED_MEMORY_LEAK; |  | 
| 59 |  | 
| 60   const uint8 private_key_info[] = { | 51   const uint8 private_key_info[] = { | 
| 61     0x30, 0x82, 0x02, 0x78, 0x02, 0x01, 0x00, 0x30, | 52     0x30, 0x82, 0x02, 0x78, 0x02, 0x01, 0x00, 0x30, | 
| 62     0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, | 53     0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, | 
| 63     0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, | 54     0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, | 
| 64     0x02, 0x62, 0x30, 0x82, 0x02, 0x5e, 0x02, 0x01, | 55     0x02, 0x62, 0x30, 0x82, 0x02, 0x5e, 0x02, 0x01, | 
| 65     0x00, 0x02, 0x81, 0x81, 0x00, 0xb8, 0x7f, 0x2b, | 56     0x00, 0x02, 0x81, 0x81, 0x00, 0xb8, 0x7f, 0x2b, | 
| 66     0x20, 0xdc, 0x7c, 0x9b, 0x0c, 0xdc, 0x51, 0x61, | 57     0x20, 0xdc, 0x7c, 0x9b, 0x0c, 0xdc, 0x51, 0x61, | 
| 67     0x99, 0x0d, 0x36, 0x0f, 0xd4, 0x66, 0x88, 0x08, | 58     0x99, 0x0d, 0x36, 0x0f, 0xd4, 0x66, 0x88, 0x08, | 
| 68     0x55, 0x84, 0xd5, 0x3a, 0xbf, 0x2b, 0xa4, 0x64, | 59     0x55, 0x84, 0xd5, 0x3a, 0xbf, 0x2b, 0xa4, 0x64, | 
| 69     0x85, 0x7b, 0x0c, 0x04, 0x13, 0x3f, 0x8d, 0xf4, | 60     0x85, 0x7b, 0x0c, 0x04, 0x13, 0x3f, 0x8d, 0xf4, | 
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 187 // See also: http://code.google.com/p/chromium/issues/detail?id=14877. | 178 // See also: http://code.google.com/p/chromium/issues/detail?id=14877. | 
| 188 // | 179 // | 
| 189 // Before we were handling this correctly, we would see one of two failures: | 180 // Before we were handling this correctly, we would see one of two failures: | 
| 190 // * RSAPrivateKey::CreateFromPrivateKeyInfo would return null because the | 181 // * RSAPrivateKey::CreateFromPrivateKeyInfo would return null because the | 
| 191 //   underlying windows API failed to import the key. | 182 //   underlying windows API failed to import the key. | 
| 192 // * The import would succeed, but incorrectly interpret the data. On export, | 183 // * The import would succeed, but incorrectly interpret the data. On export, | 
| 193 //   the key would contain different values. | 184 //   the key would contain different values. | 
| 194 // | 185 // | 
| 195 // This test case verifies these two failures modes don't occur. | 186 // This test case verifies these two failures modes don't occur. | 
| 196 TEST(RSAPrivateKeyUnitTest, ShortIntegers) { | 187 TEST(RSAPrivateKeyUnitTest, ShortIntegers) { | 
| 197   // This test currently leaks some memory, |  | 
| 198   // see http://crbug.com/34742 |  | 
| 199   ANNOTATE_SCOPED_MEMORY_LEAK; |  | 
| 200 |  | 
| 201   const uint8 short_integer_with_high_bit[] = { | 188   const uint8 short_integer_with_high_bit[] = { | 
| 202     0x30, 0x82, 0x02, 0x77, 0x02, 0x01, 0x00, 0x30, | 189     0x30, 0x82, 0x02, 0x77, 0x02, 0x01, 0x00, 0x30, | 
| 203     0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, | 190     0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, | 
| 204     0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, | 191     0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, | 
| 205     0x02, 0x61, 0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, | 192     0x02, 0x61, 0x30, 0x82, 0x02, 0x5d, 0x02, 0x01, | 
| 206     0x00, 0x02, 0x81, 0x81, 0x00, 0x92, 0x59, 0x32, | 193     0x00, 0x02, 0x81, 0x81, 0x00, 0x92, 0x59, 0x32, | 
| 207     0x7d, 0x8e, 0xaf, 0x2e, 0xd5, 0xb2, 0x5c, 0x67, | 194     0x7d, 0x8e, 0xaf, 0x2e, 0xd5, 0xb2, 0x5c, 0x67, | 
| 208     0xc8, 0x7d, 0x48, 0xb7, 0x84, 0x12, 0xd0, 0x76, | 195     0xc8, 0x7d, 0x48, 0xb7, 0x84, 0x12, 0xd0, 0x76, | 
| 209     0xda, 0xe1, 0xa3, 0x1e, 0x40, 0x01, 0x14, 0x5c, | 196     0xda, 0xe1, 0xa3, 0x1e, 0x40, 0x01, 0x14, 0x5c, | 
| 210     0xef, 0x26, 0x6e, 0x28, 0xa2, 0xf7, 0xa5, 0xb4, | 197     0xef, 0x26, 0x6e, 0x28, 0xa2, 0xf7, 0xa5, 0xb4, | 
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 387   ASSERT_TRUE(keypair1->ExportPrivateKey(&output1)); | 374   ASSERT_TRUE(keypair1->ExportPrivateKey(&output1)); | 
| 388   ASSERT_TRUE(keypair2->ExportPrivateKey(&output2)); | 375   ASSERT_TRUE(keypair2->ExportPrivateKey(&output2)); | 
| 389 | 376 | 
| 390   ASSERT_EQ(input1.size(), output1.size()); | 377   ASSERT_EQ(input1.size(), output1.size()); | 
| 391   ASSERT_EQ(input2.size(), output2.size()); | 378   ASSERT_EQ(input2.size(), output2.size()); | 
| 392   ASSERT_TRUE(0 == memcmp(&output1.front(), &input1.front(), | 379   ASSERT_TRUE(0 == memcmp(&output1.front(), &input1.front(), | 
| 393                           input1.size())); | 380                           input1.size())); | 
| 394   ASSERT_TRUE(0 == memcmp(&output2.front(), &input2.front(), | 381   ASSERT_TRUE(0 == memcmp(&output2.front(), &input2.front(), | 
| 395                           input2.size())); | 382                           input2.size())); | 
| 396 } | 383 } | 
| OLD | NEW | 
|---|