From 1eb5236c90f2db842da7a720fd24374beee7402d Mon Sep 17 00:00:00 2001 From: Kongqun Yang Date: Tue, 7 Jan 2014 10:32:23 -0800 Subject: [PATCH] Rsa Key unittest. Change-Id: I761db06762e594884f339aee66fec171c92b8108 --- media/base/aes_encryptor.h | 2 +- media/base/fake_prng.cc | 71 +++++ media/base/fake_prng.h | 23 ++ media/base/rsa_key_unittest.cc | 146 +++++++++ media/base/rsa_test_data.cc | 475 +++++++++++++++++++++++++++++ media/base/rsa_test_data.h | 43 +++ media/test/data/fake_prng_data.bin | Bin 0 -> 98304 bytes packager.gyp | 7 + 8 files changed, 766 insertions(+), 1 deletion(-) create mode 100644 media/base/fake_prng.cc create mode 100644 media/base/fake_prng.h create mode 100644 media/base/rsa_key_unittest.cc create mode 100644 media/base/rsa_test_data.cc create mode 100644 media/base/rsa_test_data.h create mode 100644 media/test/data/fake_prng_data.bin diff --git a/media/base/aes_encryptor.h b/media/base/aes_encryptor.h index 1b477d5c04..3c9d9677ad 100644 --- a/media/base/aes_encryptor.h +++ b/media/base/aes_encryptor.h @@ -156,6 +156,6 @@ class AesCbcDecryptor { DISALLOW_COPY_AND_ASSIGN(AesCbcDecryptor); }; -} // namespace +} // namespace media #endif // MEDIA_BASE_AES_ENCRYPTOR_H_ diff --git a/media/base/fake_prng.cc b/media/base/fake_prng.cc new file mode 100644 index 0000000000..e0281c7435 --- /dev/null +++ b/media/base/fake_prng.cc @@ -0,0 +1,71 @@ +// Copyright (c) 2013 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/base/fake_prng.h" + +#include + +#include "base/file_util.h" +#include "base/logging.h" +#include "media/base/test_data_util.h" + +namespace { + +FILE* g_rand_source_fp = NULL; + +const char kFakePrngDataFile[] = "fake_prng_data.bin"; + +// RAND_bytes and RAND_pseudorand implementation. +int FakeBytes(uint8* buf, int num) { + DCHECK(buf); + DCHECK(g_rand_source_fp); + + if (fread(buf, 1, num, g_rand_source_fp) < num) { + LOG(ERROR) << "Ran out of fake PRNG data"; + return 0; + } + return 1; +} + +const RAND_METHOD kFakeRandMethod = {NULL, // RAND_seed function. + FakeBytes, // RAND_bytes function. + NULL, // RAND_cleanup function. + NULL, // RAND_add function. + FakeBytes, // RAND_pseudorand function. + NULL}; // RAND_status function. + +} // namespace + +namespace media { +namespace fake_prng { + +bool StartFakePrng() { + if (g_rand_source_fp) { + LOG(ERROR) << "Fake PRNG already started."; + return false; + } + + // Open deterministic random data file and set the OpenSSL PRNG. + g_rand_source_fp = + file_util::OpenFile(GetTestDataFilePath(kFakePrngDataFile), "rb"); + if (!g_rand_source_fp) { + LOG(ERROR) << "Cannot open " << kFakePrngDataFile; + return false; + } + RAND_set_rand_method(&kFakeRandMethod); + return true; +} + +void StopFakePrng() { + if (g_rand_source_fp) { + file_util::CloseFile(g_rand_source_fp); + g_rand_source_fp = NULL; + } else { + LOG(WARNING) << "Fake PRNG not started."; + } + RAND_set_rand_method(RAND_SSLeay()); +} + +} // namespace fake_prng +} // namespace media diff --git a/media/base/fake_prng.h b/media/base/fake_prng.h new file mode 100644 index 0000000000..56fbfe1917 --- /dev/null +++ b/media/base/fake_prng.h @@ -0,0 +1,23 @@ +// Copyright (c) 2013 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Fake, deterministic PRNG for OpenSSL to be used for unit testing. + +#ifndef MEDIA_BASE_FAKE_PRNG_H +#define MEDIA_BASE_FAKE_PRNG_H + +namespace media { +namespace fake_prng { + +// Start using fake, deterministic PRNG for OpenSSL. +// Return true if successful. +bool StartFakePrng(); + +// Stop using fake, deterministic PRNG for OpenSSL. +void StopFakePrng(); + +} // namespace fake_prng +} // namespace media + +#endif // MEDIA_BASE_FAKE_PRNG_H diff --git a/media/base/rsa_key_unittest.cc b/media/base/rsa_key_unittest.cc new file mode 100644 index 0000000000..e7efd68f26 --- /dev/null +++ b/media/base/rsa_key_unittest.cc @@ -0,0 +1,146 @@ +// Copyright (c) 2013 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Unit test for rsa_key RSA encryption and signing. + +#include "media/base/rsa_key.h" + +#include "base/memory/scoped_ptr.h" +#include "media/base/fake_prng.h" +#include "media/base/rsa_test_data.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace media { + +class RsaKeyTest : public ::testing::TestWithParam { + public: + RsaKeyTest() : test_set_(GetParam()) {} + + virtual void SetUp() { + // Make OpenSSL RSA deterministic. + ASSERT_TRUE(fake_prng::StartFakePrng()); + + private_key_.reset(RsaPrivateKey::Create(test_set_.private_key)); + ASSERT_TRUE(private_key_ != NULL); + public_key_.reset(RsaPublicKey::Create(test_set_.public_key)); + ASSERT_TRUE(public_key_ != NULL); + } + virtual void TearDown() { fake_prng::StopFakePrng(); } + + protected: + const RsaTestSet& test_set_; + scoped_ptr private_key_; + scoped_ptr public_key_; +}; + +TEST_P(RsaKeyTest, BadPublicKey) { + scoped_ptr public_key(RsaPublicKey::Create("bad_public_key")); + EXPECT_TRUE(public_key == NULL); +} + +TEST_P(RsaKeyTest, BadPrivateKey) { + scoped_ptr private_key( + RsaPrivateKey::Create("bad_private_key")); + EXPECT_TRUE(private_key == NULL); +} + +TEST_P(RsaKeyTest, LoadPublicKey) { + scoped_ptr public_key( + RsaPublicKey::Create(test_set_.public_key)); + EXPECT_TRUE(public_key != NULL); +} + +TEST_P(RsaKeyTest, LoadPrivateKey) { + scoped_ptr private_key( + RsaPrivateKey::Create(test_set_.private_key)); + EXPECT_TRUE(private_key != NULL); +} + +TEST_P(RsaKeyTest, LoadPublicKeyInPrivateKey) { + scoped_ptr private_key( + RsaPrivateKey::Create(test_set_.public_key)); + EXPECT_TRUE(private_key == NULL); +} + +TEST_P(RsaKeyTest, LoadPrivateKeyInPublicKey) { + scoped_ptr public_key( + RsaPublicKey::Create(test_set_.private_key)); + EXPECT_TRUE(public_key == NULL); +} + +TEST_P(RsaKeyTest, EncryptAndDecrypt) { + std::string encrypted_message; + EXPECT_TRUE(public_key_->Encrypt(test_set_.test_message, &encrypted_message)); + EXPECT_EQ(test_set_.encrypted_message, encrypted_message); + + std::string decrypted_message; + EXPECT_TRUE(private_key_->Decrypt(encrypted_message, &decrypted_message)); + EXPECT_EQ(test_set_.test_message, decrypted_message); +} + +TEST_P(RsaKeyTest, BadEncMessage1) { + // Add a byte to the encrypted message. + std::string bad_enc_message = test_set_.encrypted_message + '\0'; + + std::string decrypted_message; + EXPECT_FALSE(private_key_->Decrypt(bad_enc_message, &decrypted_message)); +} + +TEST_P(RsaKeyTest, BadEncMessage2) { + // Remove a byte from the encrypted message. + std::string bad_enc_message = test_set_.encrypted_message; + bad_enc_message.erase(bad_enc_message.end() - 1); + + std::string decrypted_message; + EXPECT_FALSE(private_key_->Decrypt(bad_enc_message, &decrypted_message)); +} + +TEST_P(RsaKeyTest, BadEncMessage3) { + // Change a byte in the encrypted message. + std::string bad_enc_message = test_set_.encrypted_message; + bad_enc_message[bad_enc_message.size() / 2] ^= 0x55; + + std::string decrypted_message; + EXPECT_FALSE(private_key_->Decrypt(bad_enc_message, &decrypted_message)); +} + +TEST_P(RsaKeyTest, SignAndVerify) { + std::string signature; + EXPECT_TRUE( + private_key_->GenerateSignature(test_set_.test_message, &signature)); + EXPECT_EQ(test_set_.signature, signature); + EXPECT_TRUE(public_key_->VerifySignature(test_set_.test_message, signature)); +} + +TEST_P(RsaKeyTest, BadSignature1) { + // Add a byte to the signature. + std::string bad_signature = test_set_.signature + '\0'; + EXPECT_FALSE( + public_key_->VerifySignature(test_set_.test_message, bad_signature)); +} + +TEST_P(RsaKeyTest, BadSignature2) { + // Remove a byte from the signature. + std::string bad_signature = test_set_.signature; + bad_signature.erase(bad_signature.end() - 1); + + EXPECT_FALSE( + public_key_->VerifySignature(test_set_.test_message, bad_signature)); +} + +TEST_P(RsaKeyTest, BadSignature3) { + // Change a byte in the signature. + std::string bad_signature = test_set_.signature; + bad_signature[bad_signature.size() / 2] ^= 0x55; + + EXPECT_FALSE( + public_key_->VerifySignature(test_set_.test_message, bad_signature)); +} + +INSTANTIATE_TEST_CASE_P(RsaTestKeys, + RsaKeyTest, + ::testing::Values(RsaTestData().test_set_3072_bits(), + RsaTestData().test_set_2048_bits())); + +} // namespace media diff --git a/media/base/rsa_test_data.cc b/media/base/rsa_test_data.cc new file mode 100644 index 0000000000..ea0caea621 --- /dev/null +++ b/media/base/rsa_test_data.cc @@ -0,0 +1,475 @@ +// Copyright (c) 2013 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/base/rsa_test_data.h" + +namespace { +const uint8 kTestRsaPrivateKey_3072[] = { + 0x30, 0x82, 0x06, 0xe3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x81, 0x00, + 0xa5, 0x62, 0x07, 0xdf, 0xc8, 0x84, 0x74, 0xe1, 0x2a, 0xb7, 0xbb, 0xc0, + 0x78, 0x76, 0xbe, 0x13, 0x3b, 0xe6, 0x2c, 0x09, 0x9d, 0x35, 0x3f, 0xf3, + 0x0f, 0xe9, 0x61, 0x96, 0x20, 0x53, 0x6e, 0x78, 0x62, 0xe0, 0x10, 0xd2, + 0xca, 0xe4, 0xdd, 0xd5, 0x96, 0xaf, 0x9a, 0xd7, 0x08, 0x47, 0xe4, 0x55, + 0x1b, 0x83, 0xbe, 0x10, 0x66, 0x74, 0x08, 0xf2, 0x49, 0x79, 0xea, 0x29, + 0x46, 0xc2, 0x65, 0x97, 0xa6, 0xcc, 0x4b, 0xa4, 0x08, 0xc3, 0x04, 0x17, + 0x01, 0xb5, 0x11, 0x53, 0xe9, 0x68, 0x34, 0x3c, 0x26, 0x56, 0x44, 0x37, + 0x5c, 0xb4, 0x7a, 0x1d, 0x5d, 0x6c, 0x58, 0xc2, 0x82, 0xa0, 0x92, 0xf1, + 0x14, 0xf1, 0x22, 0xff, 0x64, 0xde, 0xdf, 0xb3, 0x3d, 0x9d, 0xa5, 0x86, + 0xcd, 0xa0, 0x0a, 0x63, 0x08, 0xdd, 0x60, 0x5d, 0xfd, 0xa4, 0x01, 0xe3, + 0xb6, 0x0e, 0x85, 0xe4, 0xc3, 0x37, 0x61, 0xd0, 0xe7, 0x12, 0xe9, 0xc4, + 0xde, 0xf2, 0x59, 0x11, 0xe3, 0x5b, 0x02, 0x9f, 0x24, 0xb9, 0xb0, 0xbb, + 0x31, 0xa0, 0xee, 0x6a, 0x2c, 0xb4, 0x30, 0xff, 0xe0, 0xf0, 0x93, 0xee, + 0x3a, 0xae, 0xb2, 0x2e, 0x84, 0xa0, 0x47, 0x42, 0x51, 0xbb, 0xfa, 0xbb, + 0x90, 0x97, 0x2c, 0x77, 0x45, 0xee, 0x2c, 0xfb, 0xec, 0x5d, 0xd8, 0xca, + 0x49, 0x94, 0x53, 0x5d, 0x37, 0xaf, 0x86, 0x47, 0xda, 0xe2, 0xbd, 0xf0, + 0x5f, 0x07, 0x53, 0x8a, 0x10, 0xd0, 0x9a, 0xd0, 0x7f, 0xe9, 0xef, 0xf6, + 0xda, 0xea, 0x1e, 0x2e, 0x54, 0xec, 0x44, 0xde, 0x3a, 0xe1, 0xc8, 0xdb, + 0x17, 0xe8, 0xc9, 0x3a, 0x81, 0x11, 0x4d, 0xb7, 0x2d, 0x09, 0x83, 0xab, + 0x30, 0xb7, 0xf5, 0x1b, 0x03, 0x86, 0x21, 0xa9, 0xf5, 0xca, 0x15, 0x26, + 0xaf, 0x39, 0xf3, 0x5d, 0x01, 0x7d, 0xe3, 0x19, 0x54, 0xd1, 0x2e, 0x10, + 0x16, 0x9c, 0xee, 0xc3, 0xbd, 0xcc, 0xdb, 0x02, 0x82, 0xd0, 0x60, 0x0b, + 0x42, 0x72, 0x85, 0xec, 0xdc, 0x41, 0x7c, 0xf1, 0x34, 0xd8, 0x27, 0x21, + 0xf9, 0xa6, 0x82, 0x40, 0xd3, 0xc5, 0xc9, 0xf9, 0x6b, 0xc9, 0x12, 0x64, + 0xe4, 0x3a, 0x3b, 0xc9, 0x8f, 0x3c, 0xd0, 0x2c, 0xb8, 0xb8, 0xf3, 0x05, + 0x4a, 0xe9, 0x4c, 0x46, 0x2b, 0xb6, 0xe1, 0xed, 0x82, 0xb2, 0xf0, 0xd1, + 0x72, 0x71, 0x04, 0x35, 0x19, 0xc1, 0x16, 0x17, 0xd6, 0x75, 0xe0, 0xab, + 0xde, 0x8f, 0xe1, 0xc1, 0x49, 0x68, 0x0c, 0xc8, 0xce, 0x6d, 0x87, 0x50, + 0x04, 0xb5, 0xd7, 0x24, 0xf4, 0x2e, 0x0c, 0x11, 0x35, 0xb2, 0x67, 0x85, + 0x1b, 0x38, 0xff, 0x2f, 0x71, 0xf5, 0x30, 0x18, 0x1e, 0x6f, 0xd7, 0xf0, + 0x33, 0x61, 0x53, 0x7e, 0x55, 0x7f, 0x0d, 0x60, 0x83, 0xf3, 0x8a, 0x2b, + 0x67, 0xd5, 0xf0, 0x2e, 0x23, 0x23, 0x60, 0x0b, 0x83, 0x9c, 0xc2, 0x87, + 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01, 0x80, 0x5a, 0x09, 0x3f, + 0x9e, 0x2e, 0x4d, 0x26, 0x50, 0x7b, 0x70, 0x21, 0xb0, 0x0c, 0x25, 0x21, + 0x1f, 0xd9, 0x89, 0x5a, 0xca, 0x35, 0x23, 0x0b, 0x58, 0xa9, 0x7d, 0xf6, + 0x19, 0xc4, 0x29, 0x87, 0xc7, 0xd4, 0x94, 0x85, 0xb4, 0x2c, 0xaf, 0x62, + 0xb1, 0xe8, 0x62, 0x5b, 0xda, 0xdb, 0x70, 0x40, 0x37, 0xb1, 0x4e, 0x0c, + 0xc8, 0x62, 0xee, 0xa2, 0xfc, 0x3c, 0xd2, 0x39, 0x90, 0x15, 0x2c, 0xba, + 0x20, 0x50, 0xb7, 0x82, 0x2a, 0xa0, 0x76, 0x83, 0x20, 0x7f, 0x56, 0x73, + 0x43, 0x8a, 0x9b, 0xa7, 0x6c, 0x63, 0xb6, 0xad, 0x56, 0xb2, 0x8a, 0xb2, + 0xbc, 0x8f, 0xe2, 0xef, 0x83, 0x9d, 0x98, 0x0b, 0xc7, 0x62, 0x0e, 0x51, + 0x6e, 0x57, 0x1d, 0x1b, 0x0e, 0x3a, 0xea, 0x3b, 0x76, 0x63, 0x35, 0xd0, + 0xd1, 0xcf, 0xbe, 0xad, 0xbb, 0x1d, 0xde, 0x0f, 0x05, 0x48, 0x55, 0x29, + 0xc1, 0xbc, 0x21, 0xc7, 0x87, 0xf2, 0x75, 0x12, 0x7d, 0x92, 0x9e, 0xbf, + 0xad, 0x04, 0x68, 0xc4, 0xc9, 0x9d, 0x35, 0xd6, 0xa8, 0x62, 0xc1, 0x69, + 0x6a, 0xb6, 0x41, 0xb7, 0x37, 0x66, 0xdf, 0xb2, 0xb9, 0x8c, 0x8b, 0x15, + 0x08, 0x4c, 0x3d, 0xf1, 0xed, 0x82, 0x0f, 0xe3, 0xd5, 0xff, 0x46, 0xbd, + 0xf7, 0x85, 0x43, 0xc0, 0x8b, 0xba, 0x47, 0xf1, 0x41, 0x57, 0xc3, 0x7f, + 0x8b, 0x0d, 0x48, 0xea, 0xc2, 0xed, 0xc0, 0x69, 0x84, 0xb6, 0x32, 0x08, + 0x49, 0x74, 0x14, 0x84, 0xa4, 0x1b, 0x48, 0x5b, 0xec, 0xd3, 0x0b, 0x12, + 0x2b, 0x4c, 0x9e, 0x5c, 0x01, 0x60, 0xad, 0xef, 0xcb, 0x2b, 0x56, 0x84, + 0x07, 0xfa, 0x62, 0xc6, 0x08, 0x92, 0x98, 0x70, 0xc9, 0x5b, 0x18, 0xc8, + 0xfa, 0x27, 0x0c, 0xe2, 0xbd, 0xfb, 0x3e, 0x43, 0xa5, 0xb7, 0x06, 0x2c, + 0x4e, 0xf1, 0x07, 0x5d, 0x8d, 0xdd, 0x53, 0xc5, 0x8c, 0x4a, 0xf2, 0x2f, + 0x8e, 0x80, 0x96, 0x16, 0xc0, 0xfc, 0xf9, 0x20, 0x4f, 0x35, 0xc7, 0x53, + 0x8b, 0x2d, 0x37, 0x43, 0x93, 0x3d, 0x74, 0x3f, 0x63, 0xf7, 0x0b, 0xbd, + 0x46, 0xe4, 0x51, 0x67, 0x33, 0x57, 0x15, 0xf5, 0x59, 0x27, 0x66, 0xe8, + 0xe2, 0x4b, 0xa3, 0x93, 0x03, 0x8a, 0x9c, 0x05, 0x13, 0xf2, 0xcb, 0xf7, + 0x9c, 0x68, 0xe7, 0x16, 0x4b, 0x8e, 0x59, 0x71, 0x2b, 0x73, 0x9b, 0xb9, + 0xae, 0x50, 0xfa, 0xd7, 0xd3, 0x34, 0x17, 0x1d, 0x62, 0x88, 0xbd, 0x8c, + 0xba, 0x5a, 0x6b, 0x6a, 0x5e, 0xb3, 0xa5, 0x80, 0xca, 0xbb, 0xb9, 0xb5, + 0xa8, 0x2e, 0xb1, 0x61, 0x6e, 0xd5, 0xd6, 0x62, 0x98, 0x4a, 0xb0, 0xb8, + 0x76, 0xa9, 0x19, 0x5c, 0xe2, 0xbe, 0xb3, 0x9b, 0x4a, 0x39, 0xf5, 0xe6, + 0xbb, 0x11, 0x6e, 0x13, 0x13, 0x38, 0xb8, 0x1f, 0x21, 0x19, 0xf5, 0xa7, + 0x76, 0x93, 0xb3, 0x56, 0xfa, 0xcc, 0x74, 0xbc, 0x19, 0x02, 0x81, 0xc1, + 0x00, 0xd1, 0xd1, 0x72, 0x57, 0xe5, 0xb0, 0x1c, 0x09, 0x05, 0xbb, 0x55, + 0x89, 0x3c, 0x4a, 0x81, 0x90, 0x9a, 0xf9, 0x32, 0x63, 0x41, 0xad, 0x6a, + 0x5f, 0x65, 0x94, 0x92, 0xcc, 0xf7, 0xc7, 0x53, 0x93, 0xa0, 0xf7, 0xbe, + 0x48, 0x82, 0x63, 0x31, 0x7b, 0xd0, 0x82, 0x09, 0xbb, 0x0a, 0xbc, 0x60, + 0xc9, 0x4d, 0x83, 0xe4, 0x5d, 0x50, 0xe6, 0x5f, 0x8b, 0x47, 0x07, 0xa3, + 0x3a, 0x36, 0x97, 0xaa, 0x21, 0x70, 0x7f, 0xd5, 0x6c, 0xb0, 0x56, 0xf5, + 0x5c, 0x48, 0x74, 0x2a, 0xdd, 0xfe, 0x94, 0x83, 0x05, 0xe0, 0x3d, 0x5d, + 0xdd, 0x5a, 0x05, 0xcb, 0x47, 0xd7, 0xf9, 0x89, 0x55, 0xaa, 0x0b, 0x21, + 0xc0, 0x71, 0x5d, 0xe1, 0x4c, 0x6a, 0x45, 0x86, 0x86, 0xf2, 0xb9, 0x38, + 0x6a, 0x56, 0x51, 0x0d, 0x7d, 0xac, 0x30, 0x31, 0xca, 0x2d, 0xaa, 0xaa, + 0xba, 0xcc, 0x12, 0x40, 0xc1, 0x0d, 0xa6, 0xc1, 0x7d, 0x22, 0xec, 0xb6, + 0x51, 0x45, 0xfe, 0x4e, 0xbb, 0x4a, 0xd2, 0xba, 0x9b, 0xa2, 0xcc, 0x28, + 0x2b, 0x01, 0x53, 0x53, 0xf3, 0xa9, 0x5a, 0x8f, 0xeb, 0xb7, 0xb8, 0x62, + 0x6b, 0x8a, 0x79, 0x24, 0xcc, 0x86, 0x34, 0x45, 0xe2, 0xad, 0x1d, 0xd0, + 0x4c, 0xc9, 0x77, 0x2a, 0xf9, 0x1a, 0xe8, 0x58, 0x78, 0x51, 0x8a, 0xea, + 0x3f, 0x90, 0x36, 0x46, 0x2a, 0xc0, 0x71, 0x41, 0x83, 0x2c, 0x48, 0xee, + 0xc5, 0x02, 0x81, 0xc1, 0x00, 0xc9, 0xc8, 0xce, 0xc4, 0x50, 0xb2, 0x26, + 0xcb, 0x35, 0x78, 0x55, 0x3c, 0xcc, 0xf0, 0x7e, 0xba, 0xad, 0xeb, 0x58, + 0xe9, 0xb5, 0x78, 0x2f, 0x43, 0x5f, 0x07, 0x47, 0x56, 0x05, 0x41, 0x38, + 0x71, 0xe1, 0x58, 0x62, 0xb1, 0x8e, 0xbc, 0xf9, 0x80, 0x04, 0x22, 0x39, + 0x22, 0x24, 0x28, 0x86, 0x9c, 0x00, 0x44, 0x5f, 0xc4, 0x97, 0xe6, 0x71, + 0x5f, 0x1f, 0x58, 0xea, 0x75, 0x18, 0x0c, 0x23, 0x63, 0x09, 0xc5, 0x98, + 0xc4, 0x6d, 0x23, 0xc2, 0x2c, 0x93, 0x6a, 0x26, 0xe4, 0x3d, 0x8d, 0xa1, + 0x39, 0x70, 0x34, 0x25, 0xcd, 0xbc, 0x82, 0x78, 0x2b, 0xf3, 0x7e, 0x81, + 0xb6, 0x5f, 0xc5, 0x69, 0xd0, 0x81, 0x69, 0x50, 0x2f, 0x17, 0x0c, 0x17, + 0x3c, 0x0b, 0x45, 0x38, 0xce, 0xe3, 0xbf, 0x8a, 0x50, 0x0a, 0x00, 0x74, + 0x7e, 0x7a, 0xd8, 0x55, 0x52, 0x6b, 0x82, 0xfb, 0x34, 0x15, 0x73, 0x6a, + 0xf4, 0x51, 0x9b, 0x9f, 0xa0, 0x45, 0xb9, 0x76, 0xe5, 0xd3, 0xd5, 0xf4, + 0xa9, 0xa4, 0xcd, 0x42, 0x2f, 0x29, 0x89, 0xec, 0x28, 0x5f, 0x03, 0x45, + 0x27, 0xaf, 0x8c, 0x39, 0x3e, 0x59, 0x9d, 0xaf, 0x27, 0x5d, 0x17, 0x53, + 0x17, 0xeb, 0x8d, 0x7f, 0x3d, 0xb8, 0x2a, 0x50, 0x1e, 0xb5, 0xc5, 0x04, + 0xab, 0x9c, 0xa7, 0xaa, 0x86, 0x41, 0xb9, 0x36, 0x29, 0x9e, 0xd2, 0xd8, + 0xde, 0x5f, 0xde, 0x80, 0xdb, 0x02, 0x81, 0xc0, 0x03, 0xf3, 0x5f, 0xa5, + 0xcc, 0x0b, 0x5e, 0xdb, 0xc4, 0xa1, 0xdc, 0x60, 0x73, 0x24, 0x2c, 0x00, + 0x5f, 0x0a, 0xa6, 0x2a, 0x3c, 0x48, 0x59, 0xa2, 0x66, 0x35, 0x3f, 0xf6, + 0x60, 0x0b, 0xfe, 0xc4, 0xde, 0xd9, 0x0b, 0x5a, 0x2e, 0x2a, 0x53, 0xfa, + 0x32, 0xd8, 0xdf, 0xfa, 0x07, 0x9f, 0xb8, 0x6a, 0xd1, 0xec, 0xd3, 0xd5, + 0xf5, 0xfa, 0x00, 0x7e, 0x8c, 0xdd, 0xd5, 0xf2, 0xf8, 0xa8, 0x2e, 0x69, + 0xe6, 0xc6, 0x61, 0x6c, 0x64, 0x7d, 0x9e, 0xad, 0x18, 0x28, 0x27, 0xce, + 0x7a, 0x46, 0xad, 0x98, 0xe4, 0xba, 0x03, 0x14, 0x71, 0xe7, 0x7e, 0x06, + 0x62, 0x48, 0xae, 0x8f, 0x50, 0x5e, 0x59, 0x4a, 0x58, 0x58, 0x1e, 0x2f, + 0xe4, 0x28, 0x5e, 0xfa, 0x17, 0x83, 0xe9, 0x4e, 0x07, 0x46, 0x0b, 0x6c, + 0xfc, 0x5b, 0x03, 0xf4, 0xfc, 0x9b, 0x24, 0x0f, 0xd4, 0x5b, 0xdb, 0xa0, + 0x46, 0xf3, 0x86, 0xdd, 0x26, 0x55, 0x32, 0xb1, 0xa1, 0x11, 0xc2, 0xc5, + 0xc0, 0x08, 0xeb, 0xbe, 0x96, 0x78, 0x25, 0xa1, 0x79, 0xaa, 0xe9, 0xff, + 0xc2, 0x86, 0x94, 0x03, 0x2a, 0x38, 0x6c, 0x91, 0xfd, 0xcf, 0x7e, 0x23, + 0xe3, 0xbb, 0x04, 0x3d, 0xda, 0x68, 0x9f, 0x4d, 0x72, 0xd5, 0xad, 0x97, + 0x77, 0x2c, 0x3c, 0xce, 0x37, 0x2a, 0xd8, 0x72, 0x4d, 0xf2, 0xd7, 0xab, + 0x62, 0x68, 0x3f, 0x85, 0x8a, 0xc5, 0xec, 0xc9, 0x02, 0x81, 0xc1, 0x00, + 0x92, 0x43, 0x0c, 0x1d, 0x20, 0xa1, 0x01, 0x9d, 0xaa, 0x54, 0x5e, 0xf4, + 0x83, 0x58, 0x8f, 0x83, 0xa1, 0x2d, 0x46, 0x75, 0xa1, 0x24, 0x4c, 0x9d, + 0xf8, 0xf3, 0xbd, 0xb1, 0x8c, 0x7d, 0x89, 0xfc, 0x81, 0xeb, 0x1f, 0x1e, + 0xb4, 0xe8, 0x25, 0xb1, 0xb5, 0x4d, 0x59, 0x3c, 0x76, 0x19, 0x29, 0xf9, + 0x49, 0xf8, 0x45, 0xb2, 0xaa, 0xa8, 0x4e, 0xe5, 0x34, 0x43, 0xaf, 0x2e, + 0xd1, 0x0f, 0x7b, 0x56, 0xfe, 0x6e, 0x4c, 0x1d, 0x95, 0x3e, 0xa6, 0x30, + 0xc9, 0x69, 0xd8, 0x66, 0xf8, 0x77, 0x00, 0xb6, 0x31, 0xae, 0x9a, 0xf8, + 0x55, 0xfb, 0xfc, 0x3f, 0x5f, 0x70, 0x03, 0x75, 0xbe, 0x55, 0xca, 0x2d, + 0x68, 0xa0, 0x7d, 0x8e, 0xa4, 0x96, 0x0f, 0x01, 0x66, 0xe9, 0xf6, 0x13, + 0x80, 0xe2, 0x05, 0xcf, 0x9e, 0x70, 0x56, 0x00, 0x97, 0xea, 0xd7, 0x6d, + 0xb6, 0xa0, 0x6a, 0x95, 0x86, 0x36, 0xf2, 0xff, 0xc5, 0x67, 0x98, 0x7d, + 0x04, 0x0d, 0x3b, 0x31, 0xbc, 0x2b, 0x09, 0xfd, 0x2d, 0x87, 0xda, 0xc1, + 0x74, 0xca, 0x94, 0x73, 0x6e, 0xeb, 0x5f, 0xe5, 0x34, 0x49, 0xdf, 0xf4, + 0x61, 0xe0, 0xfa, 0x64, 0xfe, 0x05, 0x3a, 0x25, 0xcc, 0x87, 0xf4, 0x03, + 0x38, 0xca, 0xf2, 0xe8, 0x4f, 0xb9, 0x4f, 0x79, 0x55, 0x43, 0xf3, 0x46, + 0xfd, 0xbc, 0xd2, 0x95, 0xb8, 0x99, 0xfc, 0xb8, 0xb3, 0xa5, 0x04, 0xa1, + 0x02, 0x81, 0xc0, 0x47, 0xc6, 0x9c, 0x18, 0x54, 0xe5, 0xbb, 0xf9, 0xf4, + 0x38, 0xd2, 0xc0, 0xd1, 0x1a, 0xcc, 0xdb, 0x06, 0x87, 0x75, 0x1f, 0x13, + 0xa2, 0x7f, 0x8b, 0x45, 0x54, 0xcb, 0x43, 0xf8, 0xbb, 0x94, 0xd6, 0x2e, + 0x56, 0x5c, 0x69, 0x6d, 0x83, 0xb5, 0x45, 0x46, 0x68, 0x5c, 0x76, 0x1e, + 0x6c, 0x0c, 0x53, 0x59, 0xcc, 0x19, 0xc7, 0x81, 0x62, 0x66, 0x92, 0x02, + 0x8f, 0xa6, 0xdb, 0x50, 0x1c, 0x67, 0xfc, 0x82, 0x56, 0x2b, 0x4b, 0x1f, + 0x97, 0x87, 0xc4, 0x7d, 0x20, 0xda, 0xd3, 0x3f, 0x28, 0xf9, 0x55, 0xfe, + 0x84, 0x50, 0xc5, 0x3b, 0xd4, 0xaf, 0xf5, 0x3d, 0x43, 0xce, 0xdc, 0x55, + 0x11, 0x87, 0xdb, 0x72, 0x66, 0xcc, 0x83, 0xc4, 0x8b, 0x20, 0xae, 0x59, + 0x4d, 0xeb, 0xac, 0xb5, 0x4a, 0xec, 0x66, 0x09, 0x37, 0x55, 0x14, 0x21, + 0x57, 0xff, 0x0a, 0xac, 0xda, 0xb1, 0xae, 0x31, 0xab, 0x41, 0x30, 0x65, + 0x02, 0x83, 0xd1, 0xdb, 0x65, 0xb7, 0x52, 0xa7, 0x21, 0x9f, 0x1f, 0x8f, + 0x69, 0x23, 0x3b, 0xb8, 0xf9, 0x6d, 0xe7, 0xc1, 0x53, 0x9f, 0x8f, 0x67, + 0xfc, 0x6e, 0x20, 0x18, 0x31, 0x89, 0xe7, 0xbb, 0xd4, 0xc1, 0x03, 0x67, + 0xd6, 0xa5, 0x76, 0xc9, 0xea, 0x97, 0x93, 0x02, 0xca, 0x44, 0x52, 0x55, + 0x0f, 0xed, 0x55, 0xb5, 0x49, 0xd6, 0x94, 0x59, 0xee, 0xcc, 0x1b, 0x5a, + 0x00, 0x3d, 0xcd}; + +const uint8 kTestRsaPublicKey_3072[] = { + 0x30, 0x82, 0x01, 0x8a, 0x02, 0x82, 0x01, 0x81, 0x00, 0xa5, 0x62, 0x07, + 0xdf, 0xc8, 0x84, 0x74, 0xe1, 0x2a, 0xb7, 0xbb, 0xc0, 0x78, 0x76, 0xbe, + 0x13, 0x3b, 0xe6, 0x2c, 0x09, 0x9d, 0x35, 0x3f, 0xf3, 0x0f, 0xe9, 0x61, + 0x96, 0x20, 0x53, 0x6e, 0x78, 0x62, 0xe0, 0x10, 0xd2, 0xca, 0xe4, 0xdd, + 0xd5, 0x96, 0xaf, 0x9a, 0xd7, 0x08, 0x47, 0xe4, 0x55, 0x1b, 0x83, 0xbe, + 0x10, 0x66, 0x74, 0x08, 0xf2, 0x49, 0x79, 0xea, 0x29, 0x46, 0xc2, 0x65, + 0x97, 0xa6, 0xcc, 0x4b, 0xa4, 0x08, 0xc3, 0x04, 0x17, 0x01, 0xb5, 0x11, + 0x53, 0xe9, 0x68, 0x34, 0x3c, 0x26, 0x56, 0x44, 0x37, 0x5c, 0xb4, 0x7a, + 0x1d, 0x5d, 0x6c, 0x58, 0xc2, 0x82, 0xa0, 0x92, 0xf1, 0x14, 0xf1, 0x22, + 0xff, 0x64, 0xde, 0xdf, 0xb3, 0x3d, 0x9d, 0xa5, 0x86, 0xcd, 0xa0, 0x0a, + 0x63, 0x08, 0xdd, 0x60, 0x5d, 0xfd, 0xa4, 0x01, 0xe3, 0xb6, 0x0e, 0x85, + 0xe4, 0xc3, 0x37, 0x61, 0xd0, 0xe7, 0x12, 0xe9, 0xc4, 0xde, 0xf2, 0x59, + 0x11, 0xe3, 0x5b, 0x02, 0x9f, 0x24, 0xb9, 0xb0, 0xbb, 0x31, 0xa0, 0xee, + 0x6a, 0x2c, 0xb4, 0x30, 0xff, 0xe0, 0xf0, 0x93, 0xee, 0x3a, 0xae, 0xb2, + 0x2e, 0x84, 0xa0, 0x47, 0x42, 0x51, 0xbb, 0xfa, 0xbb, 0x90, 0x97, 0x2c, + 0x77, 0x45, 0xee, 0x2c, 0xfb, 0xec, 0x5d, 0xd8, 0xca, 0x49, 0x94, 0x53, + 0x5d, 0x37, 0xaf, 0x86, 0x47, 0xda, 0xe2, 0xbd, 0xf0, 0x5f, 0x07, 0x53, + 0x8a, 0x10, 0xd0, 0x9a, 0xd0, 0x7f, 0xe9, 0xef, 0xf6, 0xda, 0xea, 0x1e, + 0x2e, 0x54, 0xec, 0x44, 0xde, 0x3a, 0xe1, 0xc8, 0xdb, 0x17, 0xe8, 0xc9, + 0x3a, 0x81, 0x11, 0x4d, 0xb7, 0x2d, 0x09, 0x83, 0xab, 0x30, 0xb7, 0xf5, + 0x1b, 0x03, 0x86, 0x21, 0xa9, 0xf5, 0xca, 0x15, 0x26, 0xaf, 0x39, 0xf3, + 0x5d, 0x01, 0x7d, 0xe3, 0x19, 0x54, 0xd1, 0x2e, 0x10, 0x16, 0x9c, 0xee, + 0xc3, 0xbd, 0xcc, 0xdb, 0x02, 0x82, 0xd0, 0x60, 0x0b, 0x42, 0x72, 0x85, + 0xec, 0xdc, 0x41, 0x7c, 0xf1, 0x34, 0xd8, 0x27, 0x21, 0xf9, 0xa6, 0x82, + 0x40, 0xd3, 0xc5, 0xc9, 0xf9, 0x6b, 0xc9, 0x12, 0x64, 0xe4, 0x3a, 0x3b, + 0xc9, 0x8f, 0x3c, 0xd0, 0x2c, 0xb8, 0xb8, 0xf3, 0x05, 0x4a, 0xe9, 0x4c, + 0x46, 0x2b, 0xb6, 0xe1, 0xed, 0x82, 0xb2, 0xf0, 0xd1, 0x72, 0x71, 0x04, + 0x35, 0x19, 0xc1, 0x16, 0x17, 0xd6, 0x75, 0xe0, 0xab, 0xde, 0x8f, 0xe1, + 0xc1, 0x49, 0x68, 0x0c, 0xc8, 0xce, 0x6d, 0x87, 0x50, 0x04, 0xb5, 0xd7, + 0x24, 0xf4, 0x2e, 0x0c, 0x11, 0x35, 0xb2, 0x67, 0x85, 0x1b, 0x38, 0xff, + 0x2f, 0x71, 0xf5, 0x30, 0x18, 0x1e, 0x6f, 0xd7, 0xf0, 0x33, 0x61, 0x53, + 0x7e, 0x55, 0x7f, 0x0d, 0x60, 0x83, 0xf3, 0x8a, 0x2b, 0x67, 0xd5, 0xf0, + 0x2e, 0x23, 0x23, 0x60, 0x0b, 0x83, 0x9c, 0xc2, 0x87, 0x02, 0x03, 0x01, + 0x00, 0x01}; + +const uint8 kTestRsaPrivateKey_2048[] = { + 0x30, 0x82, 0x04, 0xa2, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, + 0xa7, 0x00, 0x36, 0x60, 0x65, 0xdc, 0xbd, 0x54, 0x5a, 0x2a, 0x40, 0xb4, + 0xe1, 0x15, 0x94, 0x58, 0x11, 0x4f, 0x94, 0x58, 0xdd, 0xde, 0xa7, 0x1f, + 0x3c, 0x2c, 0xe0, 0x88, 0x09, 0x29, 0x61, 0x57, 0x67, 0x5e, 0x56, 0x7e, + 0xee, 0x27, 0x8f, 0x59, 0x34, 0x9a, 0x2a, 0xaa, 0x9d, 0xb4, 0x4e, 0xfa, + 0xa7, 0x6a, 0xd4, 0xc9, 0x7a, 0x53, 0xc1, 0x4e, 0x9f, 0xe3, 0x34, 0xf7, + 0x3d, 0xb7, 0xc9, 0x10, 0x47, 0x4f, 0x28, 0xda, 0x3f, 0xce, 0x31, 0x7b, + 0xfd, 0x06, 0x10, 0xeb, 0xf7, 0xbe, 0x92, 0xf9, 0xaf, 0xfb, 0x3e, 0x68, + 0xda, 0xee, 0x1a, 0x64, 0x4c, 0xf3, 0x29, 0xf2, 0x73, 0x9e, 0x39, 0xd8, + 0xf6, 0x6f, 0xd8, 0xb2, 0x80, 0x82, 0x71, 0x8e, 0xb5, 0xa4, 0xf2, 0xc2, + 0x3e, 0xcd, 0x0a, 0xca, 0xb6, 0x04, 0xcd, 0x9a, 0x13, 0x8b, 0x54, 0x73, + 0x54, 0x25, 0x54, 0x8c, 0xbe, 0x98, 0x7a, 0x67, 0xad, 0xda, 0xb3, 0x4e, + 0xb3, 0xfa, 0x82, 0xa8, 0x4a, 0x67, 0x98, 0x56, 0x57, 0x54, 0x71, 0xcd, + 0x12, 0x7f, 0xed, 0xa3, 0x01, 0xc0, 0x6a, 0x8b, 0x24, 0x03, 0x96, 0x88, + 0xbe, 0x97, 0x66, 0x2a, 0xbc, 0x53, 0xc9, 0x83, 0x06, 0x51, 0x5a, 0x88, + 0x65, 0x13, 0x18, 0xe4, 0x3a, 0xed, 0x6b, 0xf1, 0x61, 0x5b, 0x4c, 0xc8, + 0x1e, 0xf4, 0xc2, 0xae, 0x08, 0x5e, 0x2d, 0x5f, 0xf8, 0x12, 0x7f, 0xa2, + 0xfc, 0xbb, 0x21, 0x18, 0x30, 0xda, 0xfe, 0x40, 0xfb, 0x01, 0xca, 0x2e, + 0x37, 0x0e, 0xce, 0xdd, 0x76, 0x87, 0x82, 0x46, 0x0b, 0x3a, 0x77, 0x8f, + 0xc0, 0x72, 0x07, 0x2c, 0x7f, 0x9d, 0x1e, 0x86, 0x5b, 0xed, 0x27, 0x29, + 0xdf, 0x03, 0x97, 0x62, 0xef, 0x44, 0xd3, 0x5b, 0x3d, 0xdb, 0x9c, 0x5e, + 0x1b, 0x7b, 0x39, 0xb4, 0x0b, 0x6d, 0x04, 0x6b, 0xbb, 0xbb, 0x2c, 0x5f, + 0xcf, 0xb3, 0x7a, 0x05, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01, + 0x00, 0x5e, 0x79, 0x65, 0x49, 0xa5, 0x76, 0x79, 0xf9, 0x05, 0x45, 0x0f, + 0xf4, 0x03, 0xbd, 0xa4, 0x7d, 0x29, 0xd5, 0xde, 0x33, 0x63, 0xd8, 0xb8, + 0xac, 0x97, 0xeb, 0x3f, 0x5e, 0x55, 0xe8, 0x7d, 0xf3, 0xe7, 0x3b, 0x5c, + 0x2d, 0x54, 0x67, 0x36, 0xd6, 0x1d, 0x46, 0xf5, 0xca, 0x2d, 0x8b, 0x3a, + 0x7e, 0xdc, 0x45, 0x38, 0x79, 0x7e, 0x65, 0x71, 0x5f, 0x1c, 0x5e, 0x79, + 0xb1, 0x40, 0xcd, 0xfe, 0xc5, 0xe1, 0xc1, 0x6b, 0x78, 0x04, 0x4e, 0x8e, + 0x79, 0xf9, 0x0a, 0xfc, 0x79, 0xb1, 0x5e, 0xb3, 0x60, 0xe3, 0x68, 0x7b, + 0xc6, 0xef, 0xcb, 0x71, 0x4c, 0xba, 0xa7, 0x79, 0x5c, 0x7a, 0x81, 0xd1, + 0x71, 0xe7, 0x00, 0x21, 0x13, 0xe2, 0x55, 0x69, 0x0e, 0x75, 0xbe, 0x09, + 0xc3, 0x4f, 0xa9, 0xc9, 0x68, 0x22, 0x0e, 0x97, 0x8d, 0x89, 0x6e, 0xf1, + 0xe8, 0x88, 0x7a, 0xd1, 0xd9, 0x09, 0x5d, 0xd3, 0x28, 0x78, 0x25, 0x0b, + 0x1c, 0x47, 0x73, 0x25, 0xcc, 0x21, 0xb6, 0xda, 0xc6, 0x24, 0x5a, 0xd0, + 0x37, 0x14, 0x46, 0xc7, 0x94, 0x69, 0xe4, 0x43, 0x6f, 0x47, 0xde, 0x00, + 0x33, 0x4d, 0x8f, 0x95, 0x72, 0xfa, 0x68, 0x71, 0x17, 0x66, 0x12, 0x1a, + 0x87, 0x27, 0xf7, 0xef, 0x7e, 0xe0, 0x35, 0x58, 0xf2, 0x4d, 0x6f, 0x35, + 0x01, 0xaa, 0x96, 0xe2, 0x3d, 0x51, 0x13, 0x86, 0x9c, 0x79, 0xd0, 0xb7, + 0xb6, 0x64, 0xe8, 0x86, 0x65, 0x50, 0xbf, 0xcc, 0x27, 0x53, 0x1f, 0x51, + 0xd4, 0xca, 0xbe, 0xf5, 0xdd, 0x77, 0x70, 0x98, 0x0f, 0xee, 0xa8, 0x96, + 0x07, 0x5f, 0x45, 0x6a, 0x7a, 0x0d, 0x03, 0x9c, 0x4f, 0x29, 0xf6, 0x06, + 0xf3, 0x5d, 0x58, 0x6c, 0x47, 0xd0, 0x96, 0xa9, 0x03, 0x17, 0xbb, 0x4e, + 0xc9, 0x21, 0xe0, 0xac, 0xcd, 0x78, 0x78, 0xb2, 0xfe, 0x81, 0xb2, 0x51, + 0x53, 0xa6, 0x1f, 0x98, 0x45, 0x02, 0x81, 0x81, 0x00, 0xcf, 0x73, 0x8c, + 0xbe, 0x6d, 0x45, 0x2d, 0x0c, 0x0b, 0x5d, 0x5c, 0x6c, 0x75, 0x78, 0xcc, + 0x35, 0x48, 0xb6, 0x98, 0xf1, 0xb9, 0x64, 0x60, 0x8c, 0x43, 0xeb, 0x85, + 0xab, 0x04, 0xb6, 0x7d, 0x1b, 0x71, 0x75, 0x06, 0xe2, 0xda, 0x84, 0x68, + 0x2e, 0x7f, 0x4c, 0xe3, 0x73, 0xb4, 0xde, 0x51, 0x4b, 0xb6, 0x51, 0x86, + 0x7b, 0xd0, 0xe6, 0x4d, 0xf3, 0xd1, 0xcf, 0x1a, 0xfe, 0x7f, 0x3a, 0x83, + 0xba, 0xb3, 0xe1, 0xff, 0x54, 0x13, 0x93, 0xd7, 0x9c, 0x27, 0x80, 0xb7, + 0x1e, 0x64, 0x9e, 0xf7, 0x32, 0x2b, 0x46, 0x29, 0xf7, 0xf8, 0x18, 0x6c, + 0xf7, 0x4a, 0xbe, 0x4b, 0xee, 0x96, 0x90, 0x8f, 0xa2, 0x16, 0x22, 0x6a, + 0xcc, 0x48, 0x06, 0x74, 0x63, 0x43, 0x7f, 0x27, 0x22, 0x44, 0x3c, 0x2d, + 0x3b, 0x62, 0xf1, 0x1c, 0xb4, 0x27, 0x33, 0x85, 0x26, 0x60, 0x48, 0x16, + 0xcb, 0xef, 0xf8, 0xcd, 0x37, 0x02, 0x81, 0x81, 0x00, 0xce, 0x15, 0x43, + 0x6e, 0x4b, 0x0f, 0xf9, 0x3f, 0x87, 0xc3, 0x41, 0x45, 0x97, 0xb1, 0x49, + 0xc2, 0x19, 0x23, 0x87, 0xe4, 0x24, 0x1c, 0x64, 0xe5, 0x28, 0xcb, 0x43, + 0x10, 0x14, 0x14, 0x0e, 0x19, 0xcb, 0xbb, 0xdb, 0xfd, 0x11, 0x9d, 0x17, + 0x68, 0x78, 0x6d, 0x61, 0x70, 0x63, 0x3a, 0xa1, 0xb3, 0xf3, 0xa7, 0x5b, + 0x0e, 0xff, 0xb7, 0x61, 0x11, 0x54, 0x91, 0x99, 0xe5, 0x91, 0x32, 0x2d, + 0xeb, 0x3f, 0xd8, 0x3e, 0xf7, 0xd4, 0xcb, 0xd2, 0xa3, 0x41, 0xc1, 0xee, + 0xc6, 0x92, 0x13, 0xeb, 0x7f, 0x42, 0x58, 0xf4, 0xd0, 0xb2, 0x74, 0x1d, + 0x8e, 0x87, 0x46, 0xcd, 0x14, 0xb8, 0x16, 0xad, 0xb5, 0xbd, 0x0d, 0x6c, + 0x95, 0x5a, 0x16, 0xbf, 0xe9, 0x53, 0xda, 0xfb, 0xed, 0x83, 0x51, 0x67, + 0xa9, 0x55, 0xab, 0x54, 0x02, 0x95, 0x20, 0xa6, 0x68, 0x17, 0x53, 0xa8, + 0xea, 0x43, 0xe5, 0xb0, 0xa3, 0x02, 0x81, 0x80, 0x67, 0x9c, 0x32, 0x83, + 0x39, 0x57, 0xff, 0x73, 0xb0, 0x89, 0x64, 0x8b, 0xd6, 0xf0, 0x0a, 0x2d, + 0xe2, 0xaf, 0x30, 0x1c, 0x2a, 0x97, 0xf3, 0x90, 0x9a, 0xab, 0x9b, 0x0b, + 0x1b, 0x43, 0x79, 0xa0, 0xa7, 0x3d, 0xe7, 0xbe, 0x8d, 0x9c, 0xeb, 0xdb, + 0xad, 0x40, 0xdd, 0xa9, 0x00, 0x80, 0xb8, 0xe1, 0xb3, 0xa1, 0x6c, 0x25, + 0x92, 0xe4, 0x33, 0xb2, 0xbe, 0xeb, 0x4d, 0x74, 0x26, 0x5f, 0x37, 0x43, + 0x9c, 0x6c, 0x17, 0x76, 0x0a, 0x81, 0x20, 0x82, 0xa1, 0x48, 0x2c, 0x2d, + 0x45, 0xdc, 0x0f, 0x62, 0x43, 0x32, 0xbb, 0xeb, 0x59, 0x41, 0xf9, 0xca, + 0x58, 0xce, 0x4a, 0x66, 0x53, 0x54, 0xc8, 0x28, 0x10, 0x1e, 0x08, 0x71, + 0x16, 0xd8, 0x02, 0x71, 0x41, 0x58, 0xd4, 0x56, 0xcc, 0xf5, 0xb1, 0x31, + 0xa3, 0xed, 0x00, 0x85, 0x09, 0xbf, 0x35, 0x95, 0x41, 0x29, 0x40, 0x19, + 0x83, 0x35, 0x24, 0x69, 0x02, 0x81, 0x80, 0x55, 0x10, 0x0b, 0xcc, 0x3b, + 0xa9, 0x75, 0x3d, 0x16, 0xe1, 0xae, 0x50, 0x76, 0x63, 0x94, 0x49, 0x4c, + 0xad, 0x10, 0xcb, 0x47, 0x68, 0x7c, 0xf0, 0xe5, 0xdc, 0xb8, 0x6a, 0xab, + 0x8e, 0xf7, 0x9f, 0x08, 0x2c, 0x1b, 0x8a, 0xa2, 0xb9, 0x8f, 0xce, 0xec, + 0x5e, 0x61, 0xa8, 0xcd, 0x1c, 0x87, 0x60, 0x4a, 0xc3, 0x1a, 0x5f, 0xdf, + 0x87, 0x26, 0xc6, 0xcb, 0x7c, 0x69, 0xe4, 0x8b, 0x01, 0x06, 0x59, 0x22, + 0xfa, 0x34, 0x4b, 0x81, 0x87, 0x3c, 0x03, 0x6d, 0x02, 0x0a, 0x77, 0xe6, + 0x15, 0xd8, 0xcf, 0xa7, 0x68, 0x26, 0x6c, 0xfa, 0x2b, 0xd9, 0x83, 0x5a, + 0x2d, 0x0c, 0x3b, 0x70, 0x1c, 0xd4, 0x48, 0xbe, 0xa7, 0x0a, 0xd9, 0xbe, + 0xdc, 0xc3, 0x0c, 0x21, 0x33, 0xb3, 0x66, 0xff, 0x1c, 0x1b, 0xc8, 0x96, + 0x76, 0xe8, 0x6f, 0x44, 0x74, 0xbc, 0x9b, 0x1c, 0x7d, 0xc8, 0xac, 0x21, + 0xa8, 0x6e, 0x37, 0x02, 0x81, 0x80, 0x2c, 0x7c, 0xad, 0x1e, 0x75, 0xf6, + 0x69, 0x1d, 0xe7, 0xa6, 0xca, 0x74, 0x7d, 0x67, 0xc8, 0x65, 0x28, 0x66, + 0xc4, 0x43, 0xa6, 0xbd, 0x40, 0x57, 0xae, 0xb7, 0x65, 0x2c, 0x52, 0xf9, + 0xe4, 0xc7, 0x81, 0x7b, 0x56, 0xa3, 0xd2, 0x0d, 0xe8, 0x33, 0x70, 0xcf, + 0x06, 0x84, 0xb3, 0x4e, 0x44, 0x50, 0x75, 0x61, 0x96, 0x86, 0x4b, 0xb6, + 0x2b, 0xad, 0xf0, 0xad, 0x57, 0xd0, 0x37, 0x0d, 0x1d, 0x35, 0x50, 0xcb, + 0x69, 0x22, 0x39, 0x29, 0xb9, 0x3a, 0xd3, 0x29, 0x23, 0x02, 0x60, 0xf7, + 0xab, 0x30, 0x40, 0xda, 0x8e, 0x4d, 0x45, 0x70, 0x26, 0xf4, 0xa2, 0x0d, + 0xd0, 0x64, 0x5d, 0x47, 0x3c, 0x18, 0xf4, 0xd4, 0x52, 0x95, 0x00, 0xae, + 0x84, 0x6b, 0x47, 0xb2, 0x3c, 0x82, 0xd3, 0x72, 0x53, 0xde, 0x72, 0x2c, + 0xf7, 0xc1, 0x22, 0x36, 0xd9, 0x18, 0x56, 0xfe, 0x39, 0x28, 0x33, 0xe0, + 0xdb, 0x03}; + +const uint8 kTestRsaPublicKey_2048[] = { + 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xa7, 0x00, 0x36, + 0x60, 0x65, 0xdc, 0xbd, 0x54, 0x5a, 0x2a, 0x40, 0xb4, 0xe1, 0x15, 0x94, + 0x58, 0x11, 0x4f, 0x94, 0x58, 0xdd, 0xde, 0xa7, 0x1f, 0x3c, 0x2c, 0xe0, + 0x88, 0x09, 0x29, 0x61, 0x57, 0x67, 0x5e, 0x56, 0x7e, 0xee, 0x27, 0x8f, + 0x59, 0x34, 0x9a, 0x2a, 0xaa, 0x9d, 0xb4, 0x4e, 0xfa, 0xa7, 0x6a, 0xd4, + 0xc9, 0x7a, 0x53, 0xc1, 0x4e, 0x9f, 0xe3, 0x34, 0xf7, 0x3d, 0xb7, 0xc9, + 0x10, 0x47, 0x4f, 0x28, 0xda, 0x3f, 0xce, 0x31, 0x7b, 0xfd, 0x06, 0x10, + 0xeb, 0xf7, 0xbe, 0x92, 0xf9, 0xaf, 0xfb, 0x3e, 0x68, 0xda, 0xee, 0x1a, + 0x64, 0x4c, 0xf3, 0x29, 0xf2, 0x73, 0x9e, 0x39, 0xd8, 0xf6, 0x6f, 0xd8, + 0xb2, 0x80, 0x82, 0x71, 0x8e, 0xb5, 0xa4, 0xf2, 0xc2, 0x3e, 0xcd, 0x0a, + 0xca, 0xb6, 0x04, 0xcd, 0x9a, 0x13, 0x8b, 0x54, 0x73, 0x54, 0x25, 0x54, + 0x8c, 0xbe, 0x98, 0x7a, 0x67, 0xad, 0xda, 0xb3, 0x4e, 0xb3, 0xfa, 0x82, + 0xa8, 0x4a, 0x67, 0x98, 0x56, 0x57, 0x54, 0x71, 0xcd, 0x12, 0x7f, 0xed, + 0xa3, 0x01, 0xc0, 0x6a, 0x8b, 0x24, 0x03, 0x96, 0x88, 0xbe, 0x97, 0x66, + 0x2a, 0xbc, 0x53, 0xc9, 0x83, 0x06, 0x51, 0x5a, 0x88, 0x65, 0x13, 0x18, + 0xe4, 0x3a, 0xed, 0x6b, 0xf1, 0x61, 0x5b, 0x4c, 0xc8, 0x1e, 0xf4, 0xc2, + 0xae, 0x08, 0x5e, 0x2d, 0x5f, 0xf8, 0x12, 0x7f, 0xa2, 0xfc, 0xbb, 0x21, + 0x18, 0x30, 0xda, 0xfe, 0x40, 0xfb, 0x01, 0xca, 0x2e, 0x37, 0x0e, 0xce, + 0xdd, 0x76, 0x87, 0x82, 0x46, 0x0b, 0x3a, 0x77, 0x8f, 0xc0, 0x72, 0x07, + 0x2c, 0x7f, 0x9d, 0x1e, 0x86, 0x5b, 0xed, 0x27, 0x29, 0xdf, 0x03, 0x97, + 0x62, 0xef, 0x44, 0xd3, 0x5b, 0x3d, 0xdb, 0x9c, 0x5e, 0x1b, 0x7b, 0x39, + 0xb4, 0x0b, 0x6d, 0x04, 0x6b, 0xbb, 0xbb, 0x2c, 0x5f, 0xcf, 0xb3, 0x7a, + 0x05, 0x02, 0x03, 0x01, 0x00, 0x01}; + +const char kTestMessage[] = + "A fool thinks himself to be wise, but a" + " wise man knows himself to be a fool."; + +const uint8 kTestEncryptedMessage_3072[] = { + 0x4e, 0x85, 0x01, 0x65, 0x1c, 0xb2, 0xe6, 0x39, 0xb9, 0x6e, 0x93, 0x6a, + 0x18, 0xa4, 0xa6, 0xb2, 0x86, 0x3d, 0x8e, 0x23, 0x34, 0x68, 0xa9, 0x74, + 0x78, 0x0e, 0x6f, 0x94, 0xb3, 0x4f, 0x14, 0xc0, 0x88, 0x0a, 0xec, 0x64, + 0x47, 0xbd, 0x4b, 0x66, 0x17, 0xed, 0xc9, 0xe4, 0xff, 0x5e, 0xbe, 0x6b, + 0xac, 0xf1, 0xd7, 0xc3, 0xef, 0x24, 0x52, 0xf7, 0x92, 0x1a, 0xe9, 0xee, + 0xa3, 0x31, 0x0c, 0xf5, 0xbc, 0x66, 0xf8, 0x20, 0x03, 0x2a, 0x1e, 0xb2, + 0x67, 0x3c, 0xbd, 0xe8, 0x8e, 0x13, 0xc5, 0x00, 0xd6, 0xe0, 0x99, 0x91, + 0xd1, 0x55, 0x36, 0x0e, 0x66, 0x55, 0x38, 0x0b, 0xa4, 0x43, 0xe7, 0xfc, + 0x8a, 0xa1, 0xee, 0xef, 0x20, 0x45, 0xf5, 0x53, 0xec, 0x58, 0x0b, 0x33, + 0x50, 0xa5, 0x4f, 0xd3, 0xdd, 0x0e, 0xd8, 0x68, 0x48, 0x45, 0xe4, 0x47, + 0x54, 0xce, 0xfc, 0xca, 0xf8, 0x77, 0x19, 0xc3, 0xe9, 0x47, 0xd7, 0x27, + 0xf6, 0x58, 0xd1, 0x4f, 0xb0, 0xc3, 0xad, 0xc0, 0x1b, 0x39, 0xed, 0x08, + 0x78, 0x21, 0x11, 0x87, 0x94, 0xd4, 0x01, 0x1f, 0x74, 0x66, 0xda, 0xbe, + 0x3c, 0x94, 0x66, 0x5e, 0x49, 0x34, 0x53, 0x43, 0xfe, 0xea, 0xcb, 0x7f, + 0x5e, 0x56, 0xad, 0x7b, 0xc5, 0x24, 0xe1, 0x0e, 0xa6, 0xa4, 0xf5, 0x66, + 0x09, 0x79, 0xfc, 0x8b, 0x8f, 0xa8, 0x1c, 0xa7, 0x57, 0xf3, 0x64, 0x1a, + 0x6a, 0xad, 0x6e, 0xdb, 0x2e, 0x60, 0x1a, 0xbe, 0xb8, 0x06, 0x30, 0x9d, + 0xb8, 0x92, 0x05, 0x96, 0x5e, 0xec, 0x61, 0x2a, 0x8c, 0x19, 0x67, 0x6e, + 0x93, 0x52, 0xac, 0x6b, 0xfb, 0x47, 0x74, 0x13, 0x6d, 0x2b, 0x13, 0x79, + 0x18, 0x2c, 0x4b, 0x79, 0x76, 0x57, 0xb3, 0x31, 0x95, 0x2b, 0x33, 0x27, + 0xad, 0x85, 0xe5, 0xab, 0xa0, 0x00, 0x3c, 0xed, 0x99, 0x89, 0x1c, 0xdf, + 0x86, 0x89, 0xc6, 0x06, 0xb8, 0x82, 0x95, 0x1b, 0xb6, 0x8d, 0xcb, 0x73, + 0x11, 0xf6, 0x4d, 0xeb, 0xb8, 0xd9, 0x19, 0xf9, 0xf9, 0xbe, 0xc6, 0x6e, + 0x53, 0x37, 0x03, 0x0e, 0x30, 0x06, 0x2d, 0x80, 0xc4, 0x6f, 0x11, 0x2b, + 0xf0, 0xab, 0x21, 0xf6, 0xe0, 0x78, 0x5a, 0x72, 0xb5, 0x6a, 0xf9, 0xcb, + 0x15, 0x3d, 0x80, 0x49, 0xb3, 0x6a, 0x71, 0x9e, 0xe0, 0xf4, 0xa0, 0xbd, + 0x0d, 0x6a, 0xae, 0x0f, 0xd5, 0xda, 0x42, 0xe4, 0xd8, 0x98, 0x11, 0xc0, + 0xc5, 0x1c, 0x1d, 0xdd, 0x38, 0x02, 0xb5, 0x69, 0x9e, 0x11, 0x83, 0xbd, + 0x01, 0x7d, 0xbc, 0x6d, 0x8f, 0xc8, 0x3a, 0x48, 0x49, 0xbf, 0x36, 0xb4, + 0x19, 0xa2, 0x0c, 0x6a, 0x0a, 0xaa, 0x15, 0x9e, 0xe3, 0x30, 0x91, 0x95, + 0x0a, 0xed, 0x2a, 0xa3, 0xec, 0x97, 0x01, 0xfb, 0xee, 0x28, 0xd7, 0xfc, + 0x34, 0xd5, 0x1a, 0x62, 0x9c, 0xb2, 0x9d, 0x8b, 0xe9, 0x49, 0x48, 0x1d}; + +// Self-generated test vector. Used to verify algorithm stability. +const uint8 kTestEncryptedMessage_2048[] = { + 0x73, 0x37, 0xa5, 0xe3, 0x73, 0xbb, 0xa7, 0xbf, 0xb1, 0xfc, 0x98, 0x6c, + 0xd2, 0x20, 0xe2, 0x79, 0xea, 0x90, 0x41, 0xcf, 0x2b, 0xe0, 0x22, 0x0f, + 0xe3, 0x6e, 0x2e, 0x61, 0x7d, 0xe5, 0xc7, 0x5a, 0x46, 0x87, 0xed, 0x35, + 0x01, 0x38, 0x65, 0x20, 0x2c, 0x42, 0x9d, 0x15, 0x54, 0x43, 0x40, 0x9f, + 0x01, 0x24, 0x03, 0x93, 0xd5, 0x74, 0xc3, 0x40, 0x8c, 0x3e, 0xa5, 0x7a, + 0x32, 0xb1, 0x85, 0xd5, 0x48, 0xba, 0xe3, 0x94, 0xfc, 0xbc, 0x98, 0x2d, + 0xc6, 0x79, 0x00, 0xc8, 0xab, 0xe0, 0x3d, 0x7f, 0x47, 0x38, 0x3b, 0x2f, + 0x1a, 0xc7, 0x78, 0x05, 0x15, 0x72, 0xb1, 0x81, 0x9d, 0xa5, 0xd6, 0x84, + 0x25, 0xc6, 0xea, 0x67, 0x2c, 0x32, 0x87, 0xda, 0x1b, 0xdf, 0x8c, 0x86, + 0x01, 0xc8, 0xa1, 0x78, 0xfe, 0xf7, 0x88, 0x89, 0xa2, 0x76, 0x89, 0xeb, + 0x21, 0x43, 0x36, 0xaa, 0x77, 0x8e, 0xfb, 0x3f, 0x8d, 0x34, 0x0c, 0x2e, + 0x1e, 0xbd, 0x63, 0x4a, 0x9f, 0xba, 0xd4, 0x5c, 0xa1, 0x81, 0xf0, 0x5d, + 0x8b, 0x33, 0x5e, 0x1f, 0xef, 0x7a, 0xff, 0x3d, 0x4d, 0xb6, 0x6e, 0xd2, + 0xf9, 0x5b, 0x53, 0x1b, 0x4f, 0x23, 0x76, 0x1d, 0x71, 0xe6, 0x28, 0xca, + 0x91, 0x3c, 0xd5, 0x8b, 0x1c, 0xcb, 0x0b, 0x4f, 0x9f, 0x27, 0xee, 0xc7, + 0x1c, 0x25, 0x53, 0x2b, 0x04, 0xad, 0x58, 0x0d, 0x4b, 0xce, 0xa6, 0x82, + 0x33, 0x24, 0x97, 0xe0, 0xfd, 0xdf, 0x6c, 0x72, 0xc5, 0x04, 0xc7, 0xe5, + 0xb2, 0xce, 0x50, 0xa9, 0xe8, 0x25, 0xed, 0x76, 0x3f, 0x53, 0xce, 0xbe, + 0xac, 0x3b, 0xb2, 0x16, 0x11, 0x40, 0x11, 0x7a, 0xab, 0x27, 0xdf, 0x2e, + 0x20, 0xc3, 0x86, 0x18, 0xe7, 0xf2, 0x6a, 0xd6, 0xf6, 0xbf, 0x93, 0xcd, + 0xee, 0x0e, 0x96, 0xcf, 0xcf, 0xee, 0xfa, 0xf9, 0xcc, 0x73, 0xd5, 0x7c, + 0xf3, 0xbe, 0x9a, 0xb3}; + +const uint8 kTestSignature_3072[] = { + 0x80, 0xfd, 0x25, 0x0d, 0x3a, 0xac, 0x37, 0x58, 0x66, 0x62, 0x18, 0xb0, + 0x48, 0x0b, 0x24, 0x27, 0x63, 0x54, 0x49, 0x44, 0x9b, 0x80, 0xc3, 0xec, + 0xb2, 0xec, 0xad, 0xde, 0x1a, 0x19, 0x04, 0xed, 0xe3, 0xbb, 0x51, 0xc4, + 0xb5, 0x0d, 0xec, 0xa6, 0x53, 0xca, 0x3c, 0xac, 0x9a, 0x10, 0xa6, 0x45, + 0xaf, 0xda, 0x20, 0x33, 0xd3, 0x5c, 0x24, 0xb7, 0x04, 0x6e, 0xfd, 0xc5, + 0x69, 0x61, 0xd9, 0xb3, 0x48, 0x63, 0x4c, 0x18, 0xee, 0xf4, 0xe4, 0x42, + 0x8e, 0x6d, 0x54, 0x6b, 0x37, 0x26, 0x99, 0x28, 0xa7, 0xf1, 0x8a, 0xc8, + 0x70, 0x0f, 0x55, 0x32, 0xb6, 0x67, 0x32, 0x05, 0xca, 0x61, 0xf9, 0x33, + 0x49, 0xd8, 0x89, 0xe3, 0x46, 0xf0, 0xf9, 0xa7, 0x49, 0x65, 0x1f, 0xa8, + 0xb5, 0x51, 0x72, 0x2b, 0x77, 0x79, 0x3b, 0xc5, 0x70, 0x65, 0xa4, 0x0e, + 0xff, 0xab, 0x96, 0x83, 0x40, 0xea, 0xe3, 0xf3, 0x94, 0x28, 0x1f, 0xdc, + 0x56, 0x71, 0xa8, 0xf5, 0x2c, 0xc6, 0x8a, 0x17, 0xd7, 0xdd, 0x80, 0x2b, + 0x31, 0x87, 0x0b, 0xe1, 0xdc, 0x8b, 0x4b, 0x09, 0x39, 0x1c, 0xab, 0x73, + 0xb3, 0x98, 0x72, 0xb0, 0xbe, 0xb2, 0xcc, 0x84, 0xd5, 0x39, 0x43, 0x87, + 0xd3, 0x0a, 0x06, 0x14, 0xf6, 0xe2, 0x6e, 0x84, 0xcb, 0xe3, 0x83, 0x1d, + 0x88, 0x5e, 0x8e, 0x01, 0x44, 0xb6, 0xa9, 0x56, 0x70, 0x4d, 0xf5, 0xc3, + 0x18, 0xff, 0x1a, 0x32, 0xd3, 0xbe, 0xbc, 0x93, 0x90, 0x65, 0x3b, 0x10, + 0x5f, 0x46, 0x31, 0xff, 0xc9, 0x77, 0x76, 0x79, 0x23, 0x73, 0x00, 0xf4, + 0x58, 0xe7, 0x7d, 0x4a, 0x4f, 0x73, 0xec, 0x48, 0x63, 0x45, 0x02, 0xdf, + 0x34, 0xea, 0x3d, 0xcb, 0x88, 0xf9, 0x8d, 0xea, 0x9d, 0x08, 0x3a, 0x32, + 0x13, 0xef, 0x9a, 0xe0, 0xde, 0xa8, 0x78, 0x92, 0x25, 0xcd, 0xfe, 0x8c, + 0x25, 0x3a, 0x0d, 0xe8, 0x9a, 0xf0, 0xa1, 0x41, 0xc6, 0x10, 0xf4, 0x67, + 0x54, 0x39, 0x4f, 0x30, 0xfa, 0x1a, 0xb0, 0xd4, 0x40, 0x83, 0x51, 0x77, + 0xb4, 0x78, 0x8a, 0xdf, 0x8e, 0xd4, 0x1e, 0xf8, 0x3e, 0xb3, 0x54, 0x33, + 0x6a, 0xb9, 0xc3, 0xdc, 0xf4, 0x72, 0x74, 0x87, 0x44, 0x93, 0xfd, 0x6e, + 0x09, 0x09, 0x0f, 0xb8, 0x01, 0xd4, 0xbc, 0xa4, 0x53, 0xe6, 0x38, 0x75, + 0x45, 0xc7, 0x6d, 0xc8, 0xe6, 0xff, 0x9f, 0x4d, 0x2a, 0x76, 0xb6, 0xdc, + 0x49, 0x70, 0xbd, 0x0b, 0xfd, 0x9e, 0x48, 0xad, 0xf4, 0x24, 0xbb, 0x9d, + 0x69, 0x07, 0x6a, 0xdc, 0xd4, 0xb7, 0xf9, 0x68, 0x25, 0xac, 0x70, 0x97, + 0x69, 0xeb, 0xc7, 0x9e, 0x3e, 0x58, 0x84, 0x61, 0xbb, 0x9c, 0x74, 0x1b, + 0xdd, 0xa1, 0xd9, 0xe7, 0x03, 0x30, 0x44, 0x3b, 0xbf, 0x51, 0xee, 0x74, + 0xf3, 0xd6, 0xfe, 0xf4, 0x36, 0x28, 0xf8, 0x35, 0x1a, 0xcd, 0x88, 0xec}; + +const uint8 kTestSignature_2048[] = { + 0x6b, 0x8e, 0x01, 0x11, 0xc3, 0x8e, 0x1a, 0xf7, 0xd1, 0x91, 0x72, 0xe7, + 0xf2, 0x3e, 0x6f, 0xfd, 0x34, 0xfe, 0x11, 0x8f, 0x03, 0xc0, 0x01, 0xa5, + 0x87, 0xbf, 0xab, 0x92, 0x46, 0x4a, 0x33, 0xf6, 0xb1, 0x37, 0xdb, 0x5a, + 0x26, 0x27, 0xf8, 0x85, 0x0b, 0xc5, 0xb8, 0x8f, 0xca, 0x4a, 0x8a, 0x06, + 0x2e, 0xee, 0x66, 0xa3, 0x3a, 0x55, 0xcc, 0xbb, 0xb0, 0xcf, 0x22, 0x84, + 0xe9, 0xd7, 0x09, 0x36, 0x4b, 0xbc, 0x2f, 0xb7, 0x1e, 0xdc, 0xd6, 0x44, + 0x01, 0x19, 0xd3, 0x01, 0xb0, 0x8f, 0x25, 0xd5, 0x67, 0x8a, 0xb1, 0x1f, + 0xf6, 0xce, 0xac, 0x46, 0x95, 0x81, 0xff, 0x23, 0x33, 0x6f, 0xfe, 0x36, + 0x1a, 0x50, 0x7b, 0xf1, 0xf6, 0x42, 0x59, 0x59, 0x0e, 0x2c, 0x5c, 0x94, + 0xde, 0xea, 0x8d, 0xf7, 0x7c, 0x21, 0xe0, 0x89, 0xa4, 0x71, 0xc5, 0xec, + 0xc9, 0xd8, 0xcd, 0xbd, 0x86, 0x3e, 0x53, 0x1b, 0xd6, 0x44, 0x08, 0xdc, + 0x2c, 0xcd, 0x8e, 0x5b, 0xc7, 0x7a, 0x09, 0x44, 0x7e, 0xd0, 0x05, 0x88, + 0xcc, 0xbe, 0x38, 0xcc, 0x29, 0x88, 0x6a, 0xa5, 0x57, 0x9b, 0xc4, 0x52, + 0xd2, 0x10, 0xef, 0xa3, 0x7b, 0xd6, 0x7e, 0x46, 0x92, 0xc7, 0x68, 0xc5, + 0xc3, 0xc4, 0xb8, 0x8c, 0x3e, 0x5e, 0xac, 0x67, 0xcd, 0xdb, 0xd4, 0xa7, + 0x8c, 0xf8, 0x00, 0xb3, 0x35, 0xfb, 0x37, 0xbb, 0xeb, 0x0a, 0xbf, 0x67, + 0x6e, 0x3e, 0x20, 0xeb, 0x84, 0x6b, 0x07, 0xc4, 0x64, 0x14, 0xd6, 0x79, + 0xed, 0x3f, 0x01, 0x79, 0xe4, 0xa2, 0xbe, 0xaa, 0x62, 0x32, 0xa5, 0xf8, + 0x8c, 0xcf, 0x80, 0x3b, 0xc9, 0xf5, 0x38, 0x34, 0x69, 0x12, 0x8c, 0xd6, + 0x4a, 0x2b, 0x4b, 0x7f, 0x3a, 0xff, 0x84, 0x7a, 0x3d, 0x99, 0xd5, 0x99, + 0xc7, 0x4b, 0x8b, 0x25, 0x3c, 0x3d, 0x3c, 0x71, 0xc8, 0x76, 0x80, 0x3d, + 0xf3, 0xb4, 0x61, 0xe1}; + +} // namespace + +namespace media { + +RsaTestData::RsaTestData() { + test_set_3072_bits_.test_message = kTestMessage; + test_set_3072_bits_.public_key.assign( + kTestRsaPublicKey_3072, + kTestRsaPublicKey_3072 + sizeof(kTestRsaPublicKey_3072)); + test_set_3072_bits_.private_key.assign( + kTestRsaPrivateKey_3072, + kTestRsaPrivateKey_3072 + sizeof(kTestRsaPrivateKey_3072)); + test_set_3072_bits_.encrypted_message.assign( + kTestEncryptedMessage_3072, + kTestEncryptedMessage_3072 + sizeof(kTestEncryptedMessage_3072)); + test_set_3072_bits_.signature.assign( + kTestSignature_3072, kTestSignature_3072 + sizeof(kTestSignature_3072)); + + test_set_2048_bits_.test_message = kTestMessage; + test_set_2048_bits_.public_key.assign( + kTestRsaPublicKey_2048, + kTestRsaPublicKey_2048 + sizeof(kTestRsaPublicKey_2048)); + test_set_2048_bits_.private_key.assign( + kTestRsaPrivateKey_2048, + kTestRsaPrivateKey_2048 + sizeof(kTestRsaPrivateKey_2048)); + test_set_2048_bits_.encrypted_message.assign( + kTestEncryptedMessage_2048, + kTestEncryptedMessage_2048 + sizeof(kTestEncryptedMessage_2048)); + test_set_2048_bits_.signature.assign( + kTestSignature_2048, kTestSignature_2048 + sizeof(kTestSignature_2048)); +} +RsaTestData::~RsaTestData() {} + +} // namespace media diff --git a/media/base/rsa_test_data.h b/media/base/rsa_test_data.h new file mode 100644 index 0000000000..0e7d1b2734 --- /dev/null +++ b/media/base/rsa_test_data.h @@ -0,0 +1,43 @@ +// Copyright (c) 2013 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// RSA test data generated using fake_prng for purposes of testing. + +#ifndef MEDIA_BASE_RSA_TEST_DATA_H_ +#define MEDIA_BASE_RSA_TEST_DATA_H_ + +#include + +#include "base/basictypes.h" + +namespace media { + +// Self generated test vector to verify algorithm stability. +struct RsaTestSet { + std::string public_key; + std::string private_key; + std::string test_message; + std::string encrypted_message; + std::string signature; +}; + +// Collection of test sets. +class RsaTestData { + public: + RsaTestData(); + ~RsaTestData(); + + const RsaTestSet& test_set_3072_bits() const { return test_set_3072_bits_; } + const RsaTestSet& test_set_2048_bits() const { return test_set_2048_bits_; } + + private: + RsaTestSet test_set_3072_bits_; + RsaTestSet test_set_2048_bits_; + + DISALLOW_COPY_AND_ASSIGN(RsaTestData); +}; + +} // namespace media + +#endif // MEDIA_BASE_RSA_TEST_DATA_H_ diff --git a/media/test/data/fake_prng_data.bin b/media/test/data/fake_prng_data.bin new file mode 100644 index 0000000000000000000000000000000000000000..7ddfa71591daee957bb4c5fdb21a67c1a961677e GIT binary patch literal 98304 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≪ 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 H=%FW~X{HmJ literal 0 HcmV?d00001 diff --git a/packager.gyp b/packager.gyp index 64399ab384..e374486028 100644 --- a/packager.gyp +++ b/packager.gyp @@ -47,6 +47,8 @@ 'media/base/media_stream.h', 'media/base/muxer.cc', 'media/base/muxer.h', + 'media/base/rsa_key.cc', + 'media/base/rsa_key.h', 'media/base/status.cc', 'media/base/status.h', 'media/base/stream_info.cc', @@ -81,6 +83,11 @@ 'media/base/bit_reader_unittest.cc', 'media/base/buffer_writer_unittest.cc', 'media/base/container_names_unittest.cc', + 'media/base/fake_prng.cc', # For rsa_key_unittest + 'media/base/fake_prng.h', # For rsa_key_unittest + 'media/base/rsa_key_unittest.cc', + 'media/base/rsa_test_data.cc', # For rsa_key_unittest + 'media/base/rsa_test_data.h', # For rsa_key_unittest 'media/base/status_test_util.h', 'media/base/status_test_util_unittest.cc', 'media/base/status_unittest.cc',