OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <stdint.h> | 5 #include <stdint.h> |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/sha1.h" | 10 #include "base/sha1.h" |
11 #include "crypto/rsa_private_key.h" | 11 #include "crypto/rsa_private_key.h" |
12 #include "crypto/sha2.h" | 12 #include "crypto/sha2.h" |
13 #include "crypto/signature_creator.h" | 13 #include "crypto/signature_creator.h" |
14 #include "crypto/signature_verifier.h" | 14 #include "crypto/signature_verifier.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 | 16 |
17 namespace { | |
18 | |
19 // This is the algorithm ID for SHA-1 with RSA encryption. | |
20 const uint8_t kSHA1WithRSAAlgorithmID[] = {0x30, 0x0d, 0x06, 0x09, 0x2a, | |
21 0x86, 0x48, 0x86, 0xf7, 0x0d, | |
22 0x01, 0x01, 0x05, 0x05, 0x00}; | |
23 | |
24 // This is the algorithm ID for SHA-1 with RSA encryption. | |
25 const uint8_t kSHA256WithRSAAlgorithmID[] = {0x30, 0x0d, 0x06, 0x09, 0x2a, | |
26 0x86, 0x48, 0x86, 0xf7, 0x0d, | |
27 0x01, 0x01, 0x0B, 0x05, 0x00}; | |
28 } | |
29 | |
30 TEST(SignatureCreatorTest, BasicTest) { | 17 TEST(SignatureCreatorTest, BasicTest) { |
31 // Do a verify round trip. | 18 // Do a verify round trip. |
32 scoped_ptr<crypto::RSAPrivateKey> key_original( | 19 scoped_ptr<crypto::RSAPrivateKey> key_original( |
33 crypto::RSAPrivateKey::Create(1024)); | 20 crypto::RSAPrivateKey::Create(1024)); |
34 ASSERT_TRUE(key_original.get()); | 21 ASSERT_TRUE(key_original.get()); |
35 | 22 |
36 std::vector<uint8_t> key_info; | 23 std::vector<uint8_t> key_info; |
37 key_original->ExportPrivateKey(&key_info); | 24 key_original->ExportPrivateKey(&key_info); |
38 scoped_ptr<crypto::RSAPrivateKey> key( | 25 scoped_ptr<crypto::RSAPrivateKey> key( |
39 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_info)); | 26 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_info)); |
40 ASSERT_TRUE(key.get()); | 27 ASSERT_TRUE(key.get()); |
41 | 28 |
42 scoped_ptr<crypto::SignatureCreator> signer( | 29 scoped_ptr<crypto::SignatureCreator> signer( |
43 crypto::SignatureCreator::Create(key.get(), | 30 crypto::SignatureCreator::Create(key.get(), |
44 crypto::SignatureCreator::SHA1)); | 31 crypto::SignatureCreator::SHA1)); |
45 ASSERT_TRUE(signer.get()); | 32 ASSERT_TRUE(signer.get()); |
46 | 33 |
47 std::string data("Hello, World!"); | 34 std::string data("Hello, World!"); |
48 ASSERT_TRUE(signer->Update(reinterpret_cast<const uint8_t*>(data.c_str()), | 35 ASSERT_TRUE(signer->Update(reinterpret_cast<const uint8_t*>(data.c_str()), |
49 data.size())); | 36 data.size())); |
50 | 37 |
51 std::vector<uint8_t> signature; | 38 std::vector<uint8_t> signature; |
52 ASSERT_TRUE(signer->Final(&signature)); | 39 ASSERT_TRUE(signer->Final(&signature)); |
53 | 40 |
54 std::vector<uint8_t> public_key_info; | 41 std::vector<uint8_t> public_key_info; |
55 ASSERT_TRUE(key_original->ExportPublicKey(&public_key_info)); | 42 ASSERT_TRUE(key_original->ExportPublicKey(&public_key_info)); |
56 | 43 |
57 crypto::SignatureVerifier verifier; | 44 crypto::SignatureVerifier verifier; |
58 ASSERT_TRUE(verifier.VerifyInit( | 45 ASSERT_TRUE(verifier.VerifyInit( |
59 kSHA1WithRSAAlgorithmID, sizeof(kSHA1WithRSAAlgorithmID), | 46 crypto::SignatureVerifier::RSA_PKCS1_SHA1, &signature.front(), |
60 &signature.front(), signature.size(), | 47 signature.size(), &public_key_info.front(), public_key_info.size())); |
61 &public_key_info.front(), public_key_info.size())); | |
62 | 48 |
63 verifier.VerifyUpdate(reinterpret_cast<const uint8_t*>(data.c_str()), | 49 verifier.VerifyUpdate(reinterpret_cast<const uint8_t*>(data.c_str()), |
64 data.size()); | 50 data.size()); |
65 ASSERT_TRUE(verifier.VerifyFinal()); | 51 ASSERT_TRUE(verifier.VerifyFinal()); |
66 } | 52 } |
67 | 53 |
68 TEST(SignatureCreatorTest, SignDigestTest) { | 54 TEST(SignatureCreatorTest, SignDigestTest) { |
69 // Do a verify round trip. | 55 // Do a verify round trip. |
70 scoped_ptr<crypto::RSAPrivateKey> key_original( | 56 scoped_ptr<crypto::RSAPrivateKey> key_original( |
71 crypto::RSAPrivateKey::Create(1024)); | 57 crypto::RSAPrivateKey::Create(1024)); |
(...skipping 12 matching lines...) Expand all Loading... |
84 ASSERT_TRUE(crypto::SignatureCreator::Sign( | 70 ASSERT_TRUE(crypto::SignatureCreator::Sign( |
85 key.get(), crypto::SignatureCreator::SHA1, | 71 key.get(), crypto::SignatureCreator::SHA1, |
86 reinterpret_cast<const uint8_t*>(sha1.c_str()), sha1.size(), &signature)); | 72 reinterpret_cast<const uint8_t*>(sha1.c_str()), sha1.size(), &signature)); |
87 | 73 |
88 std::vector<uint8_t> public_key_info; | 74 std::vector<uint8_t> public_key_info; |
89 ASSERT_TRUE(key_original->ExportPublicKey(&public_key_info)); | 75 ASSERT_TRUE(key_original->ExportPublicKey(&public_key_info)); |
90 | 76 |
91 // Verify the input data. | 77 // Verify the input data. |
92 crypto::SignatureVerifier verifier; | 78 crypto::SignatureVerifier verifier; |
93 ASSERT_TRUE(verifier.VerifyInit( | 79 ASSERT_TRUE(verifier.VerifyInit( |
94 kSHA1WithRSAAlgorithmID, sizeof(kSHA1WithRSAAlgorithmID), | 80 crypto::SignatureVerifier::RSA_PKCS1_SHA1, &signature.front(), |
95 &signature.front(), signature.size(), | 81 signature.size(), &public_key_info.front(), public_key_info.size())); |
96 &public_key_info.front(), public_key_info.size())); | |
97 | 82 |
98 verifier.VerifyUpdate(reinterpret_cast<const uint8_t*>(data.c_str()), | 83 verifier.VerifyUpdate(reinterpret_cast<const uint8_t*>(data.c_str()), |
99 data.size()); | 84 data.size()); |
100 ASSERT_TRUE(verifier.VerifyFinal()); | 85 ASSERT_TRUE(verifier.VerifyFinal()); |
101 } | 86 } |
102 | 87 |
103 TEST(SignatureCreatorTest, SignSHA256DigestTest) { | 88 TEST(SignatureCreatorTest, SignSHA256DigestTest) { |
104 // Do a verify round trip. | 89 // Do a verify round trip. |
105 scoped_ptr<crypto::RSAPrivateKey> key_original( | 90 scoped_ptr<crypto::RSAPrivateKey> key_original( |
106 crypto::RSAPrivateKey::Create(1024)); | 91 crypto::RSAPrivateKey::Create(1024)); |
(...skipping 13 matching lines...) Expand all Loading... |
120 key.get(), crypto::SignatureCreator::HashAlgorithm::SHA256, | 105 key.get(), crypto::SignatureCreator::HashAlgorithm::SHA256, |
121 reinterpret_cast<const uint8_t*>(sha256.c_str()), sha256.size(), | 106 reinterpret_cast<const uint8_t*>(sha256.c_str()), sha256.size(), |
122 &signature)); | 107 &signature)); |
123 | 108 |
124 std::vector<uint8_t> public_key_info; | 109 std::vector<uint8_t> public_key_info; |
125 ASSERT_TRUE(key_original->ExportPublicKey(&public_key_info)); | 110 ASSERT_TRUE(key_original->ExportPublicKey(&public_key_info)); |
126 | 111 |
127 // Verify the input data. | 112 // Verify the input data. |
128 crypto::SignatureVerifier verifier; | 113 crypto::SignatureVerifier verifier; |
129 ASSERT_TRUE(verifier.VerifyInit( | 114 ASSERT_TRUE(verifier.VerifyInit( |
130 kSHA256WithRSAAlgorithmID, sizeof(kSHA256WithRSAAlgorithmID), | 115 crypto::SignatureVerifier::RSA_PKCS1_SHA256, &signature.front(), |
131 &signature.front(), signature.size(), | 116 signature.size(), &public_key_info.front(), public_key_info.size())); |
132 &public_key_info.front(), public_key_info.size())); | |
133 | 117 |
134 verifier.VerifyUpdate(reinterpret_cast<const uint8_t*>(data.c_str()), | 118 verifier.VerifyUpdate(reinterpret_cast<const uint8_t*>(data.c_str()), |
135 data.size()); | 119 data.size()); |
136 ASSERT_TRUE(verifier.VerifyFinal()); | 120 ASSERT_TRUE(verifier.VerifyFinal()); |
137 } | 121 } |
OLD | NEW |