| Index: net/quic/crypto/crypto_secret_boxer_test.cc
|
| diff --git a/net/quic/crypto/crypto_secret_boxer_test.cc b/net/quic/crypto/crypto_secret_boxer_test.cc
|
| index 185e0a7014112359f49cbc1992a70d343cf12451..c73c581c6d405fee7601601972617f1b358df344 100644
|
| --- a/net/quic/crypto/crypto_secret_boxer_test.cc
|
| +++ b/net/quic/crypto/crypto_secret_boxer_test.cc
|
| @@ -16,12 +16,9 @@ namespace test {
|
|
|
| TEST(CryptoSecretBoxerTest, BoxAndUnbox) {
|
| StringPiece message("hello world");
|
| - const size_t key_size = CryptoSecretBoxer::GetKeySize();
|
| - scoped_ptr<uint8_t[]> key(new uint8_t[key_size]);
|
| - memset(key.get(), 0x11, key_size);
|
|
|
| CryptoSecretBoxer boxer;
|
| - boxer.SetKey(StringPiece(reinterpret_cast<char*>(key.get()), key_size));
|
| + boxer.SetKeys({string(CryptoSecretBoxer::GetKeySize(), 0x11)});
|
|
|
| const string box = boxer.Box(QuicRandom::GetInstance(), message);
|
|
|
| @@ -38,5 +35,46 @@ TEST(CryptoSecretBoxerTest, BoxAndUnbox) {
|
| &storage, &result));
|
| }
|
|
|
| +// Helper function to test whether one boxer can decode the output of another.
|
| +static bool CanDecode(const CryptoSecretBoxer& decoder,
|
| + const CryptoSecretBoxer& encoder) {
|
| + StringPiece message("hello world");
|
| + const string boxed = encoder.Box(QuicRandom::GetInstance(), message);
|
| + string storage;
|
| + StringPiece result;
|
| + bool ok = decoder.Unbox(boxed, &storage, &result);
|
| + if (ok) {
|
| + EXPECT_EQ(result, message);
|
| + }
|
| + return ok;
|
| +}
|
| +
|
| +TEST(CryptoSecretBoxerTest, MultipleKeys) {
|
| + string key_11(CryptoSecretBoxer::GetKeySize(), 0x11);
|
| + string key_12(CryptoSecretBoxer::GetKeySize(), 0x12);
|
| +
|
| + CryptoSecretBoxer boxer_11, boxer_12, boxer;
|
| + boxer_11.SetKeys({key_11});
|
| + boxer_12.SetKeys({key_12});
|
| + boxer.SetKeys({key_12, key_11});
|
| +
|
| + // Neither single-key boxer can decode the other's tokens.
|
| + EXPECT_FALSE(CanDecode(boxer_11, boxer_12));
|
| + EXPECT_FALSE(CanDecode(boxer_12, boxer_11));
|
| +
|
| + // |boxer| encodes with the first key, which is key_12.
|
| + EXPECT_TRUE(CanDecode(boxer_12, boxer));
|
| + EXPECT_FALSE(CanDecode(boxer_11, boxer));
|
| +
|
| + // The boxer with both keys can decode tokens from either single-key boxer.
|
| + EXPECT_TRUE(CanDecode(boxer, boxer_11));
|
| + EXPECT_TRUE(CanDecode(boxer, boxer_12));
|
| +
|
| + // After we flush key_11 from |boxer|, it can no longer decode tokens from
|
| + // |boxer_11|.
|
| + boxer.SetKeys({key_12});
|
| + EXPECT_FALSE(CanDecode(boxer, boxer_11));
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace net
|
|
|