Index: net/quic/test_tools/crypto_test_utils_openssl.cc |
diff --git a/net/quic/test_tools/crypto_test_utils_openssl.cc b/net/quic/test_tools/crypto_test_utils_openssl.cc |
index bb08a044aa45f082d986c18172b508282a5b2727..d0709fc7044fe3dd958d60ae10dab6e9439cad44 100644 |
--- a/net/quic/test_tools/crypto_test_utils_openssl.cc |
+++ b/net/quic/test_tools/crypto_test_utils_openssl.cc |
@@ -30,31 +30,22 @@ namespace net { |
namespace test { |
-class TestChannelIDSigner : public ChannelIDSigner { |
+class TestChannelIDKey : public ChannelIDKey { |
public: |
- virtual ~TestChannelIDSigner() { } |
+ explicit TestChannelIDKey(EVP_PKEY* ecdsa_key) : ecdsa_key_(ecdsa_key) {} |
+ virtual ~TestChannelIDKey() { } |
- // ChannelIDSigner implementation. |
+ // ChannelIDKey implementation. |
- virtual bool Sign(const string& hostname, |
- StringPiece signed_data, |
- string* out_key, |
+ virtual bool Sign(StringPiece signed_data, |
string* out_signature) OVERRIDE { |
- crypto::ScopedOpenSSL<EVP_PKEY, EVP_PKEY_free> ecdsa_key( |
- HostnameToKey(hostname)); |
- |
- *out_key = SerializeKey(ecdsa_key.get()); |
- if (out_key->empty()) { |
- return false; |
- } |
- |
EVP_MD_CTX md_ctx; |
EVP_MD_CTX_init(&md_ctx); |
crypto::ScopedOpenSSL<EVP_MD_CTX, EvpMdCtxCleanUp> |
md_ctx_cleanup(&md_ctx); |
if (EVP_DigestSignInit(&md_ctx, NULL, EVP_sha256(), NULL, |
- ecdsa_key.get()) != 1) { |
+ ecdsa_key_.get()) != 1) { |
return false; |
} |
@@ -94,10 +85,39 @@ class TestChannelIDSigner : public ChannelIDSigner { |
return true; |
} |
- virtual string GetKeyForHostname(const string& hostname) OVERRIDE { |
- crypto::ScopedOpenSSL<EVP_PKEY, EVP_PKEY_free> ecdsa_key( |
- HostnameToKey(hostname)); |
- return SerializeKey(ecdsa_key.get()); |
+ virtual string SerializeKey() OVERRIDE { |
+ // i2d_PublicKey will produce 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 int kExpectedKeyLength = 65; |
+ |
+ int len = i2d_PublicKey(ecdsa_key_.get(), NULL); |
+ if (len != kExpectedKeyLength) { |
+ return ""; |
+ } |
+ |
+ uint8 buf[kExpectedKeyLength]; |
+ uint8* derp = buf; |
+ i2d_PublicKey(ecdsa_key_.get(), &derp); |
+ |
+ return string(reinterpret_cast<char*>(buf + 1), kExpectedKeyLength - 1); |
+ } |
+ |
+ private: |
+ crypto::ScopedOpenSSL<EVP_PKEY, EVP_PKEY_free> ecdsa_key_; |
+}; |
+ |
+class TestChannelIDSource : public ChannelIDSource { |
+ public: |
+ virtual ~TestChannelIDSource() {} |
+ |
+ // ChannelIDSource implementation. |
+ |
+ virtual bool GetChannelIDKey( |
+ const string& hostname, |
+ scoped_ptr<ChannelIDKey>* channel_id_key) OVERRIDE { |
+ channel_id_key->reset(new TestChannelIDKey(HostnameToKey(hostname))); |
+ return true; |
} |
private: |
@@ -143,29 +163,11 @@ class TestChannelIDSigner : public ChannelIDSigner { |
return pkey.release(); |
} |
- |
- static string SerializeKey(EVP_PKEY* key) { |
- // i2d_PublicKey will produce 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 int kExpectedKeyLength = 65; |
- |
- int len = i2d_PublicKey(key, NULL); |
- if (len != kExpectedKeyLength) { |
- return ""; |
- } |
- |
- uint8 buf[kExpectedKeyLength]; |
- uint8* derp = buf; |
- i2d_PublicKey(key, &derp); |
- |
- return string(reinterpret_cast<char*>(buf + 1), kExpectedKeyLength - 1); |
- } |
}; |
// static |
-ChannelIDSigner* CryptoTestUtils::ChannelIDSignerForTesting() { |
- return new TestChannelIDSigner(); |
+ChannelIDSource* CryptoTestUtils::ChannelIDSourceForTesting() { |
+ return new TestChannelIDSource(); |
} |
} // namespace test |