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.
5 #include "net/quic/crypto/curve25519_key_exchange.h"
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"
12 using base::StringPiece
;
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();
23 for (int i
= 0; i
< 5; i
++) {
24 const string
alice_key(Curve25519KeyExchange::NewPrivateKey(rand
));
25 const string
bob_key(Curve25519KeyExchange::NewPrivateKey(rand
));
27 scoped_ptr
<Curve25519KeyExchange
> alice(
28 Curve25519KeyExchange::New(alice_key
));
29 scoped_ptr
<Curve25519KeyExchange
> bob(Curve25519KeyExchange::New(bob_key
));
31 const StringPiece
alice_public(alice
->public_value());
32 const StringPiece
bob_public(bob
->public_value());
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
);