|  | // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef NET_QUIC_CRYPTO_EPHEMERAL_KEY_SOURCE_H_ | 
|  | #define NET_QUIC_CRYPTO_EPHEMERAL_KEY_SOURCE_H_ | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #include "base/strings/string_piece.h" | 
|  | #include "net/base/net_export.h" | 
|  | #include "net/quic/quic_time.h" | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | class KeyExchange; | 
|  | class QuicRandom; | 
|  |  | 
|  | // EphemeralKeySource manages and rotates ephemeral keys as they can be reused | 
|  | // for several connections in a short space of time. Since the implementation | 
|  | // of this may involve locking or thread-local data, this interface abstracts | 
|  | // that away. | 
|  | class NET_EXPORT_PRIVATE EphemeralKeySource { | 
|  | public: | 
|  | virtual ~EphemeralKeySource() {} | 
|  |  | 
|  | // CalculateForwardSecureKey generates an ephemeral public/private key pair | 
|  | // using the algorithm |key_exchange|, sets |*public_value| to the public key | 
|  | // and returns the shared key between |peer_public_value| and the private | 
|  | // key. |*public_value| will be sent to the peer to be used with the peer's | 
|  | // private key. | 
|  | virtual std::string CalculateForwardSecureKey( | 
|  | const KeyExchange* key_exchange, | 
|  | QuicRandom* rand, | 
|  | QuicTime now, | 
|  | base::StringPiece peer_public_value, | 
|  | std::string* public_value) = 0; | 
|  | }; | 
|  |  | 
|  | }  // namespace net | 
|  |  | 
|  | #endif  // NET_QUIC_CRYPTO_EPHEMERAL_KEY_SOURCE_H_ |