Home | History | Annotate | Download | only in base
      1 /*
      2  *  Copyright 2015 The WebRTC Project Authors. All rights reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef WEBRTC_BASE_RTCCERTIFICATE_H_
     12 #define WEBRTC_BASE_RTCCERTIFICATE_H_
     13 
     14 #include "webrtc/base/basictypes.h"
     15 #include "webrtc/base/refcount.h"
     16 #include "webrtc/base/scoped_ptr.h"
     17 #include "webrtc/base/scoped_ref_ptr.h"
     18 #include "webrtc/base/sslidentity.h"
     19 
     20 namespace rtc {
     21 
     22 // A thin abstraction layer between "lower level crypto stuff" like
     23 // SSLCertificate and WebRTC usage. Takes ownership of some lower level objects,
     24 // reference counting protects these from premature destruction.
     25 class RTCCertificate : public RefCountInterface {
     26  public:
     27   // Takes ownership of |identity|.
     28   static scoped_refptr<RTCCertificate> Create(scoped_ptr<SSLIdentity> identity);
     29 
     30   // Returns the expiration time in ms relative to epoch, 1970-01-01T00:00:00Z.
     31   uint64_t Expires() const;
     32   // Checks if the certificate has expired, where |now| is expressed in ms
     33   // relative to epoch, 1970-01-01T00:00:00Z.
     34   bool HasExpired(uint64_t now) const;
     35   const SSLCertificate& ssl_certificate() const;
     36 
     37   // TODO(hbos): If possible, remove once RTCCertificate and its
     38   // ssl_certificate() is used in all relevant places. Should not pass around
     39   // raw SSLIdentity* for the sake of accessing SSLIdentity::certificate().
     40   // However, some places might need SSLIdentity* for its public/private key...
     41   SSLIdentity* identity() const { return identity_.get(); }
     42 
     43  protected:
     44   explicit RTCCertificate(SSLIdentity* identity);
     45   ~RTCCertificate() override;
     46 
     47  private:
     48   // The SSLIdentity is the owner of the SSLCertificate. To protect our
     49   // ssl_certificate() we take ownership of |identity_|.
     50   scoped_ptr<SSLIdentity> identity_;
     51 };
     52 
     53 }  // namespace rtc
     54 
     55 #endif  // WEBRTC_BASE_RTCCERTIFICATE_H_
     56