Home | History | Annotate | Download | only in base
      1 /*
      2  *  Copyright 2004 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 #if HAVE_CONFIG_H
     12 #include "config.h"
     13 #endif  // HAVE_CONFIG_H
     14 
     15 #include "webrtc/base/sslstreamadapter.h"
     16 #include "webrtc/base/sslconfig.h"
     17 
     18 #if SSL_USE_OPENSSL
     19 
     20 #include "webrtc/base/opensslstreamadapter.h"
     21 
     22 #endif  // SSL_USE_OPENSSL
     23 
     24 ///////////////////////////////////////////////////////////////////////////////
     25 
     26 namespace rtc {
     27 
     28 // TODO(guoweis): Move this to SDP layer and use int form internally.
     29 // webrtc:5043.
     30 const char CS_AES_CM_128_HMAC_SHA1_80[] = "AES_CM_128_HMAC_SHA1_80";
     31 const char CS_AES_CM_128_HMAC_SHA1_32[] = "AES_CM_128_HMAC_SHA1_32";
     32 
     33 std::string SrtpCryptoSuiteToName(int crypto_suite) {
     34   if (crypto_suite == SRTP_AES128_CM_SHA1_32)
     35     return CS_AES_CM_128_HMAC_SHA1_32;
     36   if (crypto_suite == SRTP_AES128_CM_SHA1_80)
     37     return CS_AES_CM_128_HMAC_SHA1_80;
     38   return std::string();
     39 }
     40 
     41 int SrtpCryptoSuiteFromName(const std::string& crypto_suite) {
     42   if (crypto_suite == CS_AES_CM_128_HMAC_SHA1_32)
     43     return SRTP_AES128_CM_SHA1_32;
     44   if (crypto_suite == CS_AES_CM_128_HMAC_SHA1_80)
     45     return SRTP_AES128_CM_SHA1_80;
     46   return SRTP_INVALID_CRYPTO_SUITE;
     47 }
     48 
     49 SSLStreamAdapter* SSLStreamAdapter::Create(StreamInterface* stream) {
     50 #if SSL_USE_OPENSSL
     51   return new OpenSSLStreamAdapter(stream);
     52 #else  // !SSL_USE_OPENSSL
     53   return NULL;
     54 #endif  // SSL_USE_OPENSSL
     55 }
     56 
     57 bool SSLStreamAdapter::GetSslCipherSuite(int* cipher_suite) {
     58   return false;
     59 }
     60 
     61 bool SSLStreamAdapter::ExportKeyingMaterial(const std::string& label,
     62                                             const uint8_t* context,
     63                                             size_t context_len,
     64                                             bool use_context,
     65                                             uint8_t* result,
     66                                             size_t result_len) {
     67   return false;  // Default is unsupported
     68 }
     69 
     70 bool SSLStreamAdapter::SetDtlsSrtpCryptoSuites(
     71     const std::vector<int>& crypto_suites) {
     72   return false;
     73 }
     74 
     75 bool SSLStreamAdapter::GetDtlsSrtpCryptoSuite(int* crypto_suite) {
     76   return false;
     77 }
     78 
     79 #if SSL_USE_OPENSSL
     80 bool SSLStreamAdapter::HaveDtls() {
     81   return OpenSSLStreamAdapter::HaveDtls();
     82 }
     83 bool SSLStreamAdapter::HaveDtlsSrtp() {
     84   return OpenSSLStreamAdapter::HaveDtlsSrtp();
     85 }
     86 bool SSLStreamAdapter::HaveExporter() {
     87   return OpenSSLStreamAdapter::HaveExporter();
     88 }
     89 int SSLStreamAdapter::GetDefaultSslCipherForTest(SSLProtocolVersion version,
     90                                                  KeyType key_type) {
     91   return OpenSSLStreamAdapter::GetDefaultSslCipherForTest(version, key_type);
     92 }
     93 
     94 std::string SSLStreamAdapter::SslCipherSuiteToName(int cipher_suite) {
     95   return OpenSSLStreamAdapter::SslCipherSuiteToName(cipher_suite);
     96 }
     97 #endif  // SSL_USE_OPENSSL
     98 
     99 ///////////////////////////////////////////////////////////////////////////////
    100 
    101 }  // namespace rtc
    102