Home | History | Annotate | Download | only in crypto
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "net/quic/crypto/curve25519_key_exchange.h"
      6 
      7 #include "base/memory/scoped_ptr.h"
      8 #include "base/strings/string_piece.h"
      9 #include "net/quic/crypto/quic_random.h"
     10 #include "testing/gtest/include/gtest/gtest.h"
     11 
     12 using base::StringPiece;
     13 using std::string;
     14 
     15 namespace net {
     16 namespace test {
     17 
     18 // SharedKey just tests that the basic key exchange identity holds: that both
     19 // parties end up with the same key.
     20 TEST(Curve25519KeyExchange, SharedKey) {
     21   QuicRandom* const rand = QuicRandom::GetInstance();
     22 
     23   for (int i = 0; i < 5; i++) {
     24     const string alice_key(Curve25519KeyExchange::NewPrivateKey(rand));
     25     const string bob_key(Curve25519KeyExchange::NewPrivateKey(rand));
     26 
     27     scoped_ptr<Curve25519KeyExchange> alice(
     28         Curve25519KeyExchange::New(alice_key));
     29     scoped_ptr<Curve25519KeyExchange> bob(Curve25519KeyExchange::New(bob_key));
     30 
     31     const StringPiece alice_public(alice->public_value());
     32     const StringPiece bob_public(bob->public_value());
     33 
     34     string alice_shared, bob_shared;
     35     ASSERT_TRUE(alice->CalculateSharedKey(bob_public, &alice_shared));
     36     ASSERT_TRUE(bob->CalculateSharedKey(alice_public, &bob_shared));
     37     ASSERT_EQ(alice_shared, bob_shared);
     38   }
     39 }
     40 
     41 }  // namespace test
     42 }  // namespace net
     43