| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  *  Copyright 2012 The WebRTC Project Authors. All rights reserved. |    2  *  Copyright 2012 The WebRTC Project Authors. All rights reserved. | 
|    3  * |    3  * | 
|    4  *  Use of this source code is governed by a BSD-style license |    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 |    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 |    6  *  tree. An additional intellectual property rights grant can be found | 
|    7  *  in the file PATENTS.  All contributing project authors may |    7  *  in the file PATENTS.  All contributing project authors may | 
|    8  *  be found in the AUTHORS file in the root of the source tree. |    8  *  be found in the AUTHORS file in the root of the source tree. | 
|    9  */ |    9  */ | 
|   10  |   10  | 
|   11 #ifndef WEBRTC_BASE_FAKESSLIDENTITY_H_ |   11 #ifndef WEBRTC_BASE_FAKESSLIDENTITY_H_ | 
|   12 #define WEBRTC_BASE_FAKESSLIDENTITY_H_ |   12 #define WEBRTC_BASE_FAKESSLIDENTITY_H_ | 
|   13  |   13  | 
|   14 #include <algorithm> |  | 
|   15 #include <memory> |  | 
|   16 #include <vector> |  | 
|   17  |   14  | 
|   18 #include "webrtc/base/checks.h" |   15 // This header is deprecated and is just left here temporarily during | 
|   19 #include "webrtc/base/messagedigest.h" |   16 // refactoring. See https://bugs.webrtc.org/7634 for more details. | 
|   20 #include "webrtc/base/sslidentity.h" |   17 #include "webrtc/rtc_base/fakesslidentity.h" | 
|   21  |  | 
|   22 namespace rtc { |  | 
|   23  |  | 
|   24 class FakeSSLCertificate : public rtc::SSLCertificate { |  | 
|   25  public: |  | 
|   26   // SHA-1 is the default digest algorithm because it is available in all build |  | 
|   27   // configurations used for unit testing. |  | 
|   28   explicit FakeSSLCertificate(const std::string& data) |  | 
|   29       : data_(data), digest_algorithm_(DIGEST_SHA_1), expiration_time_(-1) {} |  | 
|   30   explicit FakeSSLCertificate(const std::vector<std::string>& certs) |  | 
|   31       : data_(certs.front()), |  | 
|   32         digest_algorithm_(DIGEST_SHA_1), |  | 
|   33         expiration_time_(-1) { |  | 
|   34     std::vector<std::string>::const_iterator it; |  | 
|   35     // Skip certs[0]. |  | 
|   36     for (it = certs.begin() + 1; it != certs.end(); ++it) { |  | 
|   37       certs_.push_back(FakeSSLCertificate(*it)); |  | 
|   38     } |  | 
|   39   } |  | 
|   40   FakeSSLCertificate* GetReference() const override { |  | 
|   41     return new FakeSSLCertificate(*this); |  | 
|   42   } |  | 
|   43   std::string ToPEMString() const override { |  | 
|   44     return data_; |  | 
|   45   } |  | 
|   46   void ToDER(Buffer* der_buffer) const override { |  | 
|   47     std::string der_string; |  | 
|   48     RTC_CHECK(SSLIdentity::PemToDer(kPemTypeCertificate, data_, &der_string)); |  | 
|   49     der_buffer->SetData(der_string.c_str(), der_string.size()); |  | 
|   50   } |  | 
|   51   int64_t CertificateExpirationTime() const override { |  | 
|   52     return expiration_time_; |  | 
|   53   } |  | 
|   54   void SetCertificateExpirationTime(int64_t expiration_time) { |  | 
|   55     expiration_time_ = expiration_time; |  | 
|   56   } |  | 
|   57   void set_digest_algorithm(const std::string& algorithm) { |  | 
|   58     digest_algorithm_ = algorithm; |  | 
|   59   } |  | 
|   60   bool GetSignatureDigestAlgorithm(std::string* algorithm) const override { |  | 
|   61     *algorithm = digest_algorithm_; |  | 
|   62     return true; |  | 
|   63   } |  | 
|   64   bool ComputeDigest(const std::string& algorithm, |  | 
|   65                      unsigned char* digest, |  | 
|   66                      size_t size, |  | 
|   67                      size_t* length) const override { |  | 
|   68     *length = rtc::ComputeDigest(algorithm, data_.c_str(), data_.size(), |  | 
|   69                                        digest, size); |  | 
|   70     return (*length != 0); |  | 
|   71   } |  | 
|   72   std::unique_ptr<SSLCertChain> GetChain() const override { |  | 
|   73     if (certs_.empty()) |  | 
|   74       return nullptr; |  | 
|   75     std::vector<SSLCertificate*> new_certs(certs_.size()); |  | 
|   76     std::transform(certs_.begin(), certs_.end(), new_certs.begin(), DupCert); |  | 
|   77     std::unique_ptr<SSLCertChain> chain(new SSLCertChain(new_certs)); |  | 
|   78     std::for_each(new_certs.begin(), new_certs.end(), DeleteCert); |  | 
|   79     return chain; |  | 
|   80   } |  | 
|   81  |  | 
|   82  private: |  | 
|   83   static FakeSSLCertificate* DupCert(FakeSSLCertificate cert) { |  | 
|   84     return cert.GetReference(); |  | 
|   85   } |  | 
|   86   static void DeleteCert(SSLCertificate* cert) { delete cert; } |  | 
|   87   std::string data_; |  | 
|   88   std::vector<FakeSSLCertificate> certs_; |  | 
|   89   std::string digest_algorithm_; |  | 
|   90   // Expiration time in seconds relative to epoch, 1970-01-01T00:00:00Z (UTC). |  | 
|   91   int64_t expiration_time_; |  | 
|   92 }; |  | 
|   93  |  | 
|   94 class FakeSSLIdentity : public rtc::SSLIdentity { |  | 
|   95  public: |  | 
|   96   explicit FakeSSLIdentity(const std::string& data) : cert_(data) {} |  | 
|   97   explicit FakeSSLIdentity(const FakeSSLCertificate& cert) : cert_(cert) {} |  | 
|   98   virtual FakeSSLIdentity* GetReference() const { |  | 
|   99     return new FakeSSLIdentity(*this); |  | 
|  100   } |  | 
|  101   virtual const FakeSSLCertificate& certificate() const { return cert_; } |  | 
|  102   virtual std::string PrivateKeyToPEMString() const { |  | 
|  103     RTC_NOTREACHED();  // Not implemented. |  | 
|  104     return ""; |  | 
|  105   } |  | 
|  106   virtual std::string PublicKeyToPEMString() const { |  | 
|  107     RTC_NOTREACHED();  // Not implemented. |  | 
|  108     return ""; |  | 
|  109   } |  | 
|  110   virtual bool operator==(const SSLIdentity& other) const { |  | 
|  111     RTC_NOTREACHED();  // Not implemented. |  | 
|  112     return false; |  | 
|  113   } |  | 
|  114  private: |  | 
|  115   FakeSSLCertificate cert_; |  | 
|  116 }; |  | 
|  117  |  | 
|  118 }  // namespace rtc |  | 
|  119  |   18  | 
|  120 #endif  // WEBRTC_BASE_FAKESSLIDENTITY_H_ |   19 #endif  // WEBRTC_BASE_FAKESSLIDENTITY_H_ | 
| OLD | NEW |