| Index: net/quic/test_tools/crypto_test_utils_nss.cc
|
| ===================================================================
|
| --- net/quic/test_tools/crypto_test_utils_nss.cc (revision 280648)
|
| +++ net/quic/test_tools/crypto_test_utils_nss.cc (working copy)
|
| @@ -4,14 +4,12 @@
|
|
|
| #include "net/quic/test_tools/crypto_test_utils.h"
|
|
|
| -#include <keyhi.h>
|
| -#include <pk11pub.h>
|
| -#include <sechash.h>
|
| -
|
| #include "base/stl_util.h"
|
| #include "base/strings/string_util.h"
|
| #include "crypto/ec_private_key.h"
|
| +#include "crypto/ec_signature_creator.h"
|
| #include "net/quic/crypto/channel_id.h"
|
| +#include "net/quic/crypto/channel_id_chromium.h"
|
|
|
| using base::StringPiece;
|
| using std::string;
|
| @@ -20,79 +18,6 @@
|
|
|
| namespace test {
|
|
|
| -// TODO(rtenneti): Convert Sign() to be asynchronous using a completion
|
| -// callback.
|
| -class TestChannelIDKey : public ChannelIDKey {
|
| - public:
|
| - explicit TestChannelIDKey(crypto::ECPrivateKey* ecdsa_keypair)
|
| - : ecdsa_keypair_(ecdsa_keypair) {}
|
| - virtual ~TestChannelIDKey() {}
|
| -
|
| - // ChannelIDKey implementation.
|
| -
|
| - virtual bool Sign(StringPiece signed_data,
|
| - string* out_signature) const OVERRIDE {
|
| - unsigned char hash_buf[SHA256_LENGTH];
|
| - SECItem hash_item = { siBuffer, hash_buf, sizeof(hash_buf) };
|
| -
|
| - HASHContext* sha256 = HASH_Create(HASH_AlgSHA256);
|
| - if (!sha256) {
|
| - return false;
|
| - }
|
| - HASH_Begin(sha256);
|
| - HASH_Update(sha256,
|
| - reinterpret_cast<const unsigned char*>(
|
| - ChannelIDVerifier::kContextStr),
|
| - strlen(ChannelIDVerifier::kContextStr) + 1);
|
| - HASH_Update(sha256,
|
| - reinterpret_cast<const unsigned char*>(
|
| - ChannelIDVerifier::kClientToServerStr),
|
| - strlen(ChannelIDVerifier::kClientToServerStr) + 1);
|
| - HASH_Update(sha256,
|
| - reinterpret_cast<const unsigned char*>(signed_data.data()),
|
| - signed_data.size());
|
| - HASH_End(sha256, hash_buf, &hash_item.len, sizeof(hash_buf));
|
| - HASH_Destroy(sha256);
|
| -
|
| - // The signature consists of a pair of 32-byte numbers.
|
| - static const unsigned int kSignatureLength = 32 * 2;
|
| - string signature;
|
| - SECItem sig_item = {
|
| - siBuffer,
|
| - reinterpret_cast<unsigned char*>(
|
| - WriteInto(&signature, kSignatureLength + 1)),
|
| - kSignatureLength
|
| - };
|
| -
|
| - if (PK11_Sign(ecdsa_keypair_->key(), &sig_item, &hash_item) != SECSuccess) {
|
| - return false;
|
| - }
|
| - *out_signature = signature;
|
| - return true;
|
| - }
|
| -
|
| - virtual string SerializeKey() const OVERRIDE {
|
| - const SECKEYPublicKey* public_key = ecdsa_keypair_->public_key();
|
| -
|
| - // public_key->u.ec.publicValue is an ANSI X9.62 public key which, for
|
| - // a P-256 key, is 0x04 (meaning uncompressed) followed by the x and y field
|
| - // elements as 32-byte, big-endian numbers.
|
| - static const unsigned int kExpectedKeyLength = 65;
|
| -
|
| - const unsigned char* const data = public_key->u.ec.publicValue.data;
|
| - const unsigned int len = public_key->u.ec.publicValue.len;
|
| - if (len != kExpectedKeyLength || data[0] != 0x04) {
|
| - return "";
|
| - }
|
| -
|
| - string key(reinterpret_cast<const char*>(data + 1), kExpectedKeyLength - 1);
|
| - return key;
|
| - }
|
| -
|
| - private:
|
| - crypto::ECPrivateKey* ecdsa_keypair_;
|
| -};
|
| -
|
| class TestChannelIDSource : public ChannelIDSource {
|
| public:
|
| virtual ~TestChannelIDSource() {
|
| @@ -105,7 +30,7 @@
|
| const string& hostname,
|
| scoped_ptr<ChannelIDKey>* channel_id_key,
|
| ChannelIDSourceCallback* /*callback*/) OVERRIDE {
|
| - channel_id_key->reset(new TestChannelIDKey(HostnameToKey(hostname)));
|
| + channel_id_key->reset(new ChannelIDKeyChromium(HostnameToKey(hostname)));
|
| return QUIC_SUCCESS;
|
| }
|
|
|
| @@ -115,7 +40,7 @@
|
| crypto::ECPrivateKey* HostnameToKey(const string& hostname) {
|
| HostnameToKeyMap::const_iterator it = hostname_to_key_.find(hostname);
|
| if (it != hostname_to_key_.end()) {
|
| - return it->second;
|
| + return it->second->Copy();
|
| }
|
|
|
| crypto::ECPrivateKey* keypair = crypto::ECPrivateKey::Create();
|
| @@ -123,7 +48,7 @@
|
| return NULL;
|
| }
|
| hostname_to_key_[hostname] = keypair;
|
| - return keypair;
|
| + return keypair->Copy();
|
| }
|
|
|
| HostnameToKeyMap hostname_to_key_;
|
|
|