1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "net/quic/crypto/crypto_secret_boxer.h" 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "base/memory/scoped_ptr.h" 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "net/quic/crypto/quic_random.h" 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "testing/gtest/include/gtest/gtest.h" 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovusing base::StringPiece; 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovusing std::string; 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovnamespace net { 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovnamespace test { 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTEST(CryptoSecretBoxerTest, BoxAndUnbox) { 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov StringPiece message("hello world"); 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const size_t key_size = CryptoSecretBoxer::GetKeySize(); 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov scoped_ptr<uint8[]> key(new uint8[key_size]); 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memset(key.get(), 0x11, key_size); 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CryptoSecretBoxer boxer; 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov boxer.SetKey(StringPiece(reinterpret_cast<char*>(key.get()), key_size)); 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const string box = boxer.Box(QuicRandom::GetInstance(), message); 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov string storage; 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov StringPiece result; 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov EXPECT_TRUE(boxer.Unbox(box, &storage, &result)); 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov EXPECT_EQ(result, message); 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov EXPECT_FALSE(boxer.Unbox(string(1, 'X') + box, &storage, &result)); 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov EXPECT_FALSE(boxer.Unbox(box.substr(1, string::npos), &storage, &result)); 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov EXPECT_FALSE(boxer.Unbox(string(), &storage, &result)); 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov EXPECT_FALSE(boxer.Unbox(string(1, box[0]^0x80) + box.substr(1, string::npos), 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &storage, &result)); 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} // namespace test 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} // namespace net 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov