| 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 #include "webrtc/base/sslfingerprint.h" |   11 #include "webrtc/base/sslfingerprint.h" | 
|   12  |   12  | 
|   13 #include <ctype.h> |   13 #include <ctype.h> | 
|   14 #include <string> |   14 #include <string> | 
|   15  |   15  | 
|   16 #include "webrtc/base/helpers.h" |   16 #include "webrtc/base/helpers.h" | 
|   17 #include "webrtc/base/logging.h" |   17 #include "webrtc/base/logging.h" | 
|   18 #include "webrtc/base/messagedigest.h" |   18 #include "webrtc/base/messagedigest.h" | 
|   19 #include "webrtc/base/stringencode.h" |   19 #include "webrtc/base/stringencode.h" | 
|   20  |   20  | 
|   21 namespace rtc { |   21 namespace rtc { | 
|   22  |   22  | 
|   23 SSLFingerprint* SSLFingerprint::Create( |   23 SSLFingerprint* SSLFingerprint::Create( | 
|   24     const std::string& algorithm, const rtc::SSLIdentity* identity) { |   24     const std::string& algorithm, const rtc::SSLIdentity* identity) { | 
|   25   if (!identity) { |   25   if (!identity) { | 
|   26     return NULL; |   26     return nullptr; | 
|   27   } |   27   } | 
|   28  |   28  | 
|   29   return Create(algorithm, &(identity->certificate())); |   29   return Create(algorithm, &(identity->certificate())); | 
|   30 } |   30 } | 
|   31  |   31  | 
|   32 SSLFingerprint* SSLFingerprint::Create( |   32 SSLFingerprint* SSLFingerprint::Create( | 
|   33     const std::string& algorithm, const rtc::SSLCertificate* cert) { |   33     const std::string& algorithm, const rtc::SSLCertificate* cert) { | 
|   34   uint8_t digest_val[64]; |   34   uint8_t digest_val[64]; | 
|   35   size_t digest_len; |   35   size_t digest_len; | 
|   36   bool ret = cert->ComputeDigest( |   36   bool ret = cert->ComputeDigest( | 
|   37       algorithm, digest_val, sizeof(digest_val), &digest_len); |   37       algorithm, digest_val, sizeof(digest_val), &digest_len); | 
|   38   if (!ret) { |   38   if (!ret) { | 
|   39     return NULL; |   39     return nullptr; | 
|   40   } |   40   } | 
|   41  |   41  | 
|   42   return new SSLFingerprint(algorithm, digest_val, digest_len); |   42   return new SSLFingerprint(algorithm, digest_val, digest_len); | 
|   43 } |   43 } | 
|   44  |   44  | 
|   45 SSLFingerprint* SSLFingerprint::CreateFromRfc4572( |   45 SSLFingerprint* SSLFingerprint::CreateFromRfc4572( | 
|   46     const std::string& algorithm, const std::string& fingerprint) { |   46     const std::string& algorithm, const std::string& fingerprint) { | 
|   47   if (algorithm.empty() || !rtc::IsFips180DigestAlgorithm(algorithm)) |   47   if (algorithm.empty() || !rtc::IsFips180DigestAlgorithm(algorithm)) | 
|   48     return NULL; |   48     return nullptr; | 
|   49  |   49  | 
|   50   if (fingerprint.empty()) |   50   if (fingerprint.empty()) | 
|   51     return NULL; |   51     return nullptr; | 
|   52  |   52  | 
|   53   size_t value_len; |   53   size_t value_len; | 
|   54   char value[rtc::MessageDigest::kMaxSize]; |   54   char value[rtc::MessageDigest::kMaxSize]; | 
|   55   value_len = rtc::hex_decode_with_delimiter(value, sizeof(value), |   55   value_len = rtc::hex_decode_with_delimiter(value, sizeof(value), | 
|   56                                                    fingerprint.c_str(), |   56                                                    fingerprint.c_str(), | 
|   57                                                    fingerprint.length(), |   57                                                    fingerprint.length(), | 
|   58                                                    ':'); |   58                                                    ':'); | 
|   59   if (!value_len) |   59   if (!value_len) | 
|   60     return NULL; |   60     return nullptr; | 
|   61  |   61  | 
|   62   return new SSLFingerprint(algorithm, reinterpret_cast<uint8_t*>(value), |   62   return new SSLFingerprint(algorithm, reinterpret_cast<uint8_t*>(value), | 
|   63                             value_len); |   63                             value_len); | 
|   64 } |   64 } | 
|   65  |   65  | 
|   66 SSLFingerprint* SSLFingerprint::CreateFromCertificate( |   66 SSLFingerprint* SSLFingerprint::CreateFromCertificate( | 
|   67     const RTCCertificate* cert) { |   67     const RTCCertificate* cert) { | 
|   68   std::string digest_alg; |   68   std::string digest_alg; | 
|   69   if (!cert->ssl_certificate().GetSignatureDigestAlgorithm(&digest_alg)) { |   69   if (!cert->ssl_certificate().GetSignatureDigestAlgorithm(&digest_alg)) { | 
|   70     LOG(LS_ERROR) << "Failed to retrieve the certificate's digest algorithm"; |   70     LOG(LS_ERROR) << "Failed to retrieve the certificate's digest algorithm"; | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  103 } |  103 } | 
|  104  |  104  | 
|  105 std::string SSLFingerprint::ToString() const { |  105 std::string SSLFingerprint::ToString() const { | 
|  106   std::string fp_str = algorithm; |  106   std::string fp_str = algorithm; | 
|  107   fp_str.append(" "); |  107   fp_str.append(" "); | 
|  108   fp_str.append(GetRfc4572Fingerprint()); |  108   fp_str.append(GetRfc4572Fingerprint()); | 
|  109   return fp_str; |  109   return fp_str; | 
|  110 } |  110 } | 
|  111  |  111  | 
|  112 }  // namespace rtc |  112 }  // namespace rtc | 
| OLD | NEW |