Home | History | Annotate | Download | only in crypto
      1 // Copyright 2014 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 #ifndef NET_QUIC_CRYPTO_CHANNEL_ID_CHROMIUM_H_
      6 #define NET_QUIC_CRYPTO_CHANNEL_ID_CHROMIUM_H_
      7 
      8 #include <set>
      9 
     10 #include "net/quic/crypto/channel_id.h"
     11 
     12 namespace crypto {
     13 class ECPrivateKey;
     14 }  // namespace crypto
     15 
     16 namespace net {
     17 
     18 class ChannelIDService;
     19 
     20 class NET_EXPORT_PRIVATE ChannelIDKeyChromium: public ChannelIDKey {
     21  public:
     22   explicit ChannelIDKeyChromium(crypto::ECPrivateKey* ec_private_key);
     23   virtual ~ChannelIDKeyChromium();
     24 
     25   // ChannelIDKey interface
     26   virtual bool Sign(base::StringPiece signed_data,
     27                     std::string* out_signature) const OVERRIDE;
     28   virtual std::string SerializeKey() const OVERRIDE;
     29 
     30  private:
     31   scoped_ptr<crypto::ECPrivateKey> ec_private_key_;
     32 };
     33 
     34 // ChannelIDSourceChromium implements the QUIC ChannelIDSource interface.
     35 class ChannelIDSourceChromium : public ChannelIDSource {
     36  public:
     37   explicit ChannelIDSourceChromium(
     38       ChannelIDService* channel_id_service);
     39   virtual ~ChannelIDSourceChromium();
     40 
     41   // ChannelIDSource interface
     42   virtual QuicAsyncStatus GetChannelIDKey(
     43       const std::string& hostname,
     44       scoped_ptr<ChannelIDKey>* channel_id_key,
     45       ChannelIDSourceCallback* callback) OVERRIDE;
     46 
     47  private:
     48   class Job;
     49   typedef std::set<Job*> JobSet;
     50 
     51   void OnJobComplete(Job* job);
     52 
     53   // Set owning pointers to active jobs.
     54   JobSet active_jobs_;
     55 
     56   // The service for retrieving Channel ID keys.
     57   ChannelIDService* const channel_id_service_;
     58 
     59   DISALLOW_COPY_AND_ASSIGN(ChannelIDSourceChromium);
     60 };
     61 
     62 }  // namespace net
     63 
     64 #endif  // NET_QUIC_CRYPTO_CHANNEL_ID_CHROMIUM_H_
     65