Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(372)

Side by Side Diff: net/quic/test_tools/crypto_test_utils_nss.cc

Issue 320663002: Change the prototype of ChannelIDSource::GetChannelIDKey() to allow an (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Remove unrelated changes Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "net/quic/test_tools/crypto_test_utils.h" 5 #include "net/quic/test_tools/crypto_test_utils.h"
6 6
7 #include <keyhi.h> 7 #include <keyhi.h>
8 #include <pk11pub.h> 8 #include <pk11pub.h>
9 #include <sechash.h> 9 #include <sechash.h>
10 10
(...skipping 13 matching lines...) Expand all
24 // callback. 24 // callback.
25 class TestChannelIDKey : public ChannelIDKey { 25 class TestChannelIDKey : public ChannelIDKey {
26 public: 26 public:
27 explicit TestChannelIDKey(crypto::ECPrivateKey* ecdsa_keypair) 27 explicit TestChannelIDKey(crypto::ECPrivateKey* ecdsa_keypair)
28 : ecdsa_keypair_(ecdsa_keypair) {} 28 : ecdsa_keypair_(ecdsa_keypair) {}
29 virtual ~TestChannelIDKey() {} 29 virtual ~TestChannelIDKey() {}
30 30
31 // ChannelIDKey implementation. 31 // ChannelIDKey implementation.
32 32
33 virtual bool Sign(StringPiece signed_data, 33 virtual bool Sign(StringPiece signed_data,
34 string* out_signature) OVERRIDE { 34 string* out_signature) const OVERRIDE {
35 unsigned char hash_buf[SHA256_LENGTH]; 35 unsigned char hash_buf[SHA256_LENGTH];
36 SECItem hash_item = { siBuffer, hash_buf, sizeof(hash_buf) }; 36 SECItem hash_item = { siBuffer, hash_buf, sizeof(hash_buf) };
37 37
38 HASHContext* sha256 = HASH_Create(HASH_AlgSHA256); 38 HASHContext* sha256 = HASH_Create(HASH_AlgSHA256);
39 if (!sha256) { 39 if (!sha256) {
40 return false; 40 return false;
41 } 41 }
42 HASH_Begin(sha256); 42 HASH_Begin(sha256);
43 HASH_Update(sha256, 43 HASH_Update(sha256,
44 reinterpret_cast<const unsigned char*>( 44 reinterpret_cast<const unsigned char*>(
(...skipping 19 matching lines...) Expand all
64 kSignatureLength 64 kSignatureLength
65 }; 65 };
66 66
67 if (PK11_Sign(ecdsa_keypair_->key(), &sig_item, &hash_item) != SECSuccess) { 67 if (PK11_Sign(ecdsa_keypair_->key(), &sig_item, &hash_item) != SECSuccess) {
68 return false; 68 return false;
69 } 69 }
70 *out_signature = signature; 70 *out_signature = signature;
71 return true; 71 return true;
72 } 72 }
73 73
74 virtual string SerializeKey() OVERRIDE { 74 virtual string SerializeKey() const OVERRIDE {
75 static const unsigned int kExpectedKeyLength = 65; 75 const SECKEYPublicKey* public_key = ecdsa_keypair_->public_key();
76 76
77 const SECKEYPublicKey* public_key = ecdsa_keypair_->public_key();
78 // public_key->u.ec.publicValue is an ANSI X9.62 public key which, for 77 // public_key->u.ec.publicValue is an ANSI X9.62 public key which, for
79 // a P-256 key, is 0x04 (meaning uncompressed) followed by the x and y field 78 // a P-256 key, is 0x04 (meaning uncompressed) followed by the x and y field
80 // elements as 32-byte, big-endian numbers. 79 // elements as 32-byte, big-endian numbers.
80 static const unsigned int kExpectedKeyLength = 65;
81 81
82 const unsigned char* const data = public_key->u.ec.publicValue.data; 82 const unsigned char* const data = public_key->u.ec.publicValue.data;
83 const unsigned int len = public_key->u.ec.publicValue.len; 83 const unsigned int len = public_key->u.ec.publicValue.len;
84 if (len != kExpectedKeyLength || data[0] != 0x04) { 84 if (len != kExpectedKeyLength || data[0] != 0x04) {
85 return ""; 85 return "";
86 } 86 }
87 87
88 string key(reinterpret_cast<const char*>(data + 1), kExpectedKeyLength - 1); 88 string key(reinterpret_cast<const char*>(data + 1), kExpectedKeyLength - 1);
89 return key; 89 return key;
90 } 90 }
91 91
92 private: 92 private:
93 crypto::ECPrivateKey* ecdsa_keypair_; 93 crypto::ECPrivateKey* ecdsa_keypair_;
94 }; 94 };
95 95
96 class TestChannelIDSource : public ChannelIDSource { 96 class TestChannelIDSource : public ChannelIDSource {
97 public: 97 public:
98 virtual ~TestChannelIDSource() { 98 virtual ~TestChannelIDSource() {
99 STLDeleteValues(&hostname_to_key_); 99 STLDeleteValues(&hostname_to_key_);
100 } 100 }
101 101
102 // ChannelIDSource implementation. 102 // ChannelIDSource implementation.
103 103
104 virtual bool GetChannelIDKey( 104 virtual QuicAsyncStatus GetChannelIDKey(
105 const string& hostname, 105 const string& hostname,
106 scoped_ptr<ChannelIDKey>* channel_id_key) OVERRIDE { 106 scoped_ptr<ChannelIDKey>* channel_id_key,
107 ChannelIDSourceCallback* /*callback*/) OVERRIDE {
107 channel_id_key->reset(new TestChannelIDKey(HostnameToKey(hostname))); 108 channel_id_key->reset(new TestChannelIDKey(HostnameToKey(hostname)));
108 return true; 109 return QUIC_SUCCESS;
109 } 110 }
110 111
111 private: 112 private:
112 typedef std::map<string, crypto::ECPrivateKey*> HostnameToKeyMap; 113 typedef std::map<string, crypto::ECPrivateKey*> HostnameToKeyMap;
113 114
114 crypto::ECPrivateKey* HostnameToKey(const string& hostname) { 115 crypto::ECPrivateKey* HostnameToKey(const string& hostname) {
115 HostnameToKeyMap::const_iterator it = hostname_to_key_.find(hostname); 116 HostnameToKeyMap::const_iterator it = hostname_to_key_.find(hostname);
116 if (it != hostname_to_key_.end()) { 117 if (it != hostname_to_key_.end()) {
117 return it->second; 118 return it->second;
118 } 119 }
119 120
120 crypto::ECPrivateKey* keypair = crypto::ECPrivateKey::Create(); 121 crypto::ECPrivateKey* keypair = crypto::ECPrivateKey::Create();
121 if (!keypair) { 122 if (!keypair) {
122 return NULL; 123 return NULL;
123 } 124 }
124 hostname_to_key_[hostname] = keypair; 125 hostname_to_key_[hostname] = keypair;
125 return keypair; 126 return keypair;
126 } 127 }
127 128
128
129 HostnameToKeyMap hostname_to_key_; 129 HostnameToKeyMap hostname_to_key_;
130 }; 130 };
131 131
132 // static 132 // static
133 ChannelIDSource* CryptoTestUtils::ChannelIDSourceForTesting() { 133 ChannelIDSource* CryptoTestUtils::ChannelIDSourceForTesting() {
134 return new TestChannelIDSource(); 134 return new TestChannelIDSource();
135 } 135 }
136 136
137 } // namespace test 137 } // namespace test
138 138
139 } // namespace net 139 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/test_tools/crypto_test_utils.cc ('k') | net/quic/test_tools/crypto_test_utils_openssl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698