OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2011 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 |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "webrtc/base/sslstreamadapter.h" | 22 #include "webrtc/base/sslstreamadapter.h" |
23 #include "webrtc/base/stream.h" | 23 #include "webrtc/base/stream.h" |
24 #include "webrtc/test/testsupport/gtest_disable.h" | 24 #include "webrtc/test/testsupport/gtest_disable.h" |
25 | 25 |
26 using ::testing::WithParamInterface; | 26 using ::testing::WithParamInterface; |
27 using ::testing::Values; | 27 using ::testing::Values; |
28 using ::testing::Combine; | 28 using ::testing::Combine; |
29 using ::testing::tuple; | 29 using ::testing::tuple; |
30 | 30 |
31 static const int kBlockSize = 4096; | 31 static const int kBlockSize = 4096; |
32 static const char kAES_CM_HMAC_SHA1_80[] = "AES_CM_128_HMAC_SHA1_80"; | |
33 static const char kAES_CM_HMAC_SHA1_32[] = "AES_CM_128_HMAC_SHA1_32"; | |
34 static const char kExporterLabel[] = "label"; | 32 static const char kExporterLabel[] = "label"; |
35 static const unsigned char kExporterContext[] = "context"; | 33 static const unsigned char kExporterContext[] = "context"; |
36 static int kExporterContextLen = sizeof(kExporterContext); | 34 static int kExporterContextLen = sizeof(kExporterContext); |
37 | 35 |
38 static const char kRSA_PRIVATE_KEY_PEM[] = | 36 static const char kRSA_PRIVATE_KEY_PEM[] = |
39 "-----BEGIN RSA PRIVATE KEY-----\n" | 37 "-----BEGIN RSA PRIVATE KEY-----\n" |
40 "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMYRkbhmI7kVA/rM\n" | 38 "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMYRkbhmI7kVA/rM\n" |
41 "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n" | 39 "czsZ+6JDhDvnkF+vn6yCAGuRPV03zuRqZtDy4N4to7PZu9PjqrRl7nDMXrG3YG9y\n" |
42 "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n" | 40 "rlIAZ72KjcKKFAJxQyAKLCIdawKRyp8RdK3LEySWEZb0AV58IadqPZDTNHHRX8dz\n" |
43 "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAECgYAvgOs4FJcgvp+TuREx7YtiYVsH\n" | 41 "5aTSMsbbkZ+C/OzTnbiMqLL/vg6jAgMBAAECgYAvgOs4FJcgvp+TuREx7YtiYVsH\n" |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 } | 380 } |
383 | 381 |
384 void SetMtu(size_t mtu) { | 382 void SetMtu(size_t mtu) { |
385 mtu_ = mtu; | 383 mtu_ = mtu; |
386 } | 384 } |
387 | 385 |
388 void SetHandshakeWait(int wait) { | 386 void SetHandshakeWait(int wait) { |
389 handshake_wait_ = wait; | 387 handshake_wait_ = wait; |
390 } | 388 } |
391 | 389 |
392 void SetDtlsSrtpCiphers(const std::vector<std::string> &ciphers, | 390 void SetDtlsSrtpCryptoSuites(const std::vector<int>& ciphers, bool client) { |
393 bool client) { | |
394 if (client) | 391 if (client) |
395 client_ssl_->SetDtlsSrtpCiphers(ciphers); | 392 client_ssl_->SetDtlsSrtpCryptoSuites(ciphers); |
396 else | 393 else |
397 server_ssl_->SetDtlsSrtpCiphers(ciphers); | 394 server_ssl_->SetDtlsSrtpCryptoSuites(ciphers); |
398 } | 395 } |
399 | 396 |
400 bool GetDtlsSrtpCipher(bool client, std::string *retval) { | 397 bool GetDtlsSrtpCryptoSuite(bool client, int* retval) { |
401 if (client) | 398 if (client) |
402 return client_ssl_->GetDtlsSrtpCipher(retval); | 399 return client_ssl_->GetDtlsSrtpCryptoSuite(retval); |
403 else | 400 else |
404 return server_ssl_->GetDtlsSrtpCipher(retval); | 401 return server_ssl_->GetDtlsSrtpCryptoSuite(retval); |
405 } | 402 } |
406 | 403 |
407 bool GetPeerCertificate(bool client, rtc::SSLCertificate** cert) { | 404 bool GetPeerCertificate(bool client, rtc::SSLCertificate** cert) { |
408 if (client) | 405 if (client) |
409 return client_ssl_->GetPeerCertificate(cert); | 406 return client_ssl_->GetPeerCertificate(cert); |
410 else | 407 else |
411 return server_ssl_->GetPeerCertificate(cert); | 408 return server_ssl_->GetPeerCertificate(cert); |
412 } | 409 } |
413 | 410 |
414 bool GetSslCipherSuite(bool client, int* retval) { | 411 bool GetSslCipherSuite(bool client, int* retval) { |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
802 MAYBE_SKIP_TEST(HaveDtls); | 799 MAYBE_SKIP_TEST(HaveDtls); |
803 SetDamage(); // Must be called first because first packet | 800 SetDamage(); // Must be called first because first packet |
804 // write happens at end of handshake. | 801 // write happens at end of handshake. |
805 TestHandshake(); | 802 TestHandshake(); |
806 TestTransfer(100); | 803 TestTransfer(100); |
807 }; | 804 }; |
808 | 805 |
809 // Test DTLS-SRTP with all high ciphers | 806 // Test DTLS-SRTP with all high ciphers |
810 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSSrtpHigh) { | 807 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSSrtpHigh) { |
811 MAYBE_SKIP_TEST(HaveDtlsSrtp); | 808 MAYBE_SKIP_TEST(HaveDtlsSrtp); |
812 std::vector<std::string> high; | 809 std::vector<int> high; |
813 high.push_back(kAES_CM_HMAC_SHA1_80); | 810 high.push_back(rtc::SRTP_AES128_CM_SHA1_80); |
814 SetDtlsSrtpCiphers(high, true); | 811 SetDtlsSrtpCryptoSuites(high, true); |
815 SetDtlsSrtpCiphers(high, false); | 812 SetDtlsSrtpCryptoSuites(high, false); |
816 TestHandshake(); | 813 TestHandshake(); |
817 | 814 |
818 std::string client_cipher; | 815 int client_cipher; |
819 ASSERT_TRUE(GetDtlsSrtpCipher(true, &client_cipher)); | 816 ASSERT_TRUE(GetDtlsSrtpCryptoSuite(true, &client_cipher)); |
820 std::string server_cipher; | 817 int server_cipher; |
821 ASSERT_TRUE(GetDtlsSrtpCipher(false, &server_cipher)); | 818 ASSERT_TRUE(GetDtlsSrtpCryptoSuite(false, &server_cipher)); |
822 | 819 |
823 ASSERT_EQ(client_cipher, server_cipher); | 820 ASSERT_EQ(client_cipher, server_cipher); |
824 ASSERT_EQ(client_cipher, kAES_CM_HMAC_SHA1_80); | 821 ASSERT_EQ(client_cipher, rtc::SRTP_AES128_CM_SHA1_80); |
825 }; | 822 }; |
826 | 823 |
827 // Test DTLS-SRTP with all low ciphers | 824 // Test DTLS-SRTP with all low ciphers |
828 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSSrtpLow) { | 825 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSSrtpLow) { |
829 MAYBE_SKIP_TEST(HaveDtlsSrtp); | 826 MAYBE_SKIP_TEST(HaveDtlsSrtp); |
830 std::vector<std::string> low; | 827 std::vector<int> low; |
831 low.push_back(kAES_CM_HMAC_SHA1_32); | 828 low.push_back(rtc::SRTP_AES128_CM_SHA1_32); |
832 SetDtlsSrtpCiphers(low, true); | 829 SetDtlsSrtpCryptoSuites(low, true); |
833 SetDtlsSrtpCiphers(low, false); | 830 SetDtlsSrtpCryptoSuites(low, false); |
834 TestHandshake(); | 831 TestHandshake(); |
835 | 832 |
836 std::string client_cipher; | 833 int client_cipher; |
837 ASSERT_TRUE(GetDtlsSrtpCipher(true, &client_cipher)); | 834 ASSERT_TRUE(GetDtlsSrtpCryptoSuite(true, &client_cipher)); |
838 std::string server_cipher; | 835 int server_cipher; |
839 ASSERT_TRUE(GetDtlsSrtpCipher(false, &server_cipher)); | 836 ASSERT_TRUE(GetDtlsSrtpCryptoSuite(false, &server_cipher)); |
840 | 837 |
841 ASSERT_EQ(client_cipher, server_cipher); | 838 ASSERT_EQ(client_cipher, server_cipher); |
842 ASSERT_EQ(client_cipher, kAES_CM_HMAC_SHA1_32); | 839 ASSERT_EQ(client_cipher, rtc::SRTP_AES128_CM_SHA1_32); |
843 }; | 840 }; |
844 | 841 |
845 | 842 |
846 // Test DTLS-SRTP with a mismatch -- should not converge | 843 // Test DTLS-SRTP with a mismatch -- should not converge |
847 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSSrtpHighLow) { | 844 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSSrtpHighLow) { |
848 MAYBE_SKIP_TEST(HaveDtlsSrtp); | 845 MAYBE_SKIP_TEST(HaveDtlsSrtp); |
849 std::vector<std::string> high; | 846 std::vector<int> high; |
850 high.push_back(kAES_CM_HMAC_SHA1_80); | 847 high.push_back(rtc::SRTP_AES128_CM_SHA1_80); |
851 std::vector<std::string> low; | 848 std::vector<int> low; |
852 low.push_back(kAES_CM_HMAC_SHA1_32); | 849 low.push_back(rtc::SRTP_AES128_CM_SHA1_32); |
853 SetDtlsSrtpCiphers(high, true); | 850 SetDtlsSrtpCryptoSuites(high, true); |
854 SetDtlsSrtpCiphers(low, false); | 851 SetDtlsSrtpCryptoSuites(low, false); |
855 TestHandshake(); | 852 TestHandshake(); |
856 | 853 |
857 std::string client_cipher; | 854 int client_cipher; |
858 ASSERT_FALSE(GetDtlsSrtpCipher(true, &client_cipher)); | 855 ASSERT_FALSE(GetDtlsSrtpCryptoSuite(true, &client_cipher)); |
859 std::string server_cipher; | 856 int server_cipher; |
860 ASSERT_FALSE(GetDtlsSrtpCipher(false, &server_cipher)); | 857 ASSERT_FALSE(GetDtlsSrtpCryptoSuite(false, &server_cipher)); |
861 }; | 858 }; |
862 | 859 |
863 // Test DTLS-SRTP with each side being mixed -- should select high | 860 // Test DTLS-SRTP with each side being mixed -- should select high |
864 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSSrtpMixed) { | 861 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSSrtpMixed) { |
865 MAYBE_SKIP_TEST(HaveDtlsSrtp); | 862 MAYBE_SKIP_TEST(HaveDtlsSrtp); |
866 std::vector<std::string> mixed; | 863 std::vector<int> mixed; |
867 mixed.push_back(kAES_CM_HMAC_SHA1_80); | 864 mixed.push_back(rtc::SRTP_AES128_CM_SHA1_80); |
868 mixed.push_back(kAES_CM_HMAC_SHA1_32); | 865 mixed.push_back(rtc::SRTP_AES128_CM_SHA1_32); |
869 SetDtlsSrtpCiphers(mixed, true); | 866 SetDtlsSrtpCryptoSuites(mixed, true); |
870 SetDtlsSrtpCiphers(mixed, false); | 867 SetDtlsSrtpCryptoSuites(mixed, false); |
871 TestHandshake(); | 868 TestHandshake(); |
872 | 869 |
873 std::string client_cipher; | 870 int client_cipher; |
874 ASSERT_TRUE(GetDtlsSrtpCipher(true, &client_cipher)); | 871 ASSERT_TRUE(GetDtlsSrtpCryptoSuite(true, &client_cipher)); |
875 std::string server_cipher; | 872 int server_cipher; |
876 ASSERT_TRUE(GetDtlsSrtpCipher(false, &server_cipher)); | 873 ASSERT_TRUE(GetDtlsSrtpCryptoSuite(false, &server_cipher)); |
877 | 874 |
878 ASSERT_EQ(client_cipher, server_cipher); | 875 ASSERT_EQ(client_cipher, server_cipher); |
879 ASSERT_EQ(client_cipher, kAES_CM_HMAC_SHA1_80); | 876 ASSERT_EQ(client_cipher, rtc::SRTP_AES128_CM_SHA1_80); |
880 }; | 877 }; |
881 | 878 |
882 // Test an exporter | 879 // Test an exporter |
883 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSExporter) { | 880 TEST_P(SSLStreamAdapterTestDTLS, TestDTLSExporter) { |
884 MAYBE_SKIP_TEST(HaveExporter); | 881 MAYBE_SKIP_TEST(HaveExporter); |
885 TestHandshake(); | 882 TestHandshake(); |
886 unsigned char client_out[20]; | 883 unsigned char client_out[20]; |
887 unsigned char server_out[20]; | 884 unsigned char server_out[20]; |
888 | 885 |
889 bool result; | 886 bool result; |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1054 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)))); | 1051 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)))); |
1055 INSTANTIATE_TEST_CASE_P( | 1052 INSTANTIATE_TEST_CASE_P( |
1056 SSLStreamAdapterTestsDTLS, | 1053 SSLStreamAdapterTestsDTLS, |
1057 SSLStreamAdapterTestDTLS, | 1054 SSLStreamAdapterTestDTLS, |
1058 Combine(Values(rtc::KeyParams::RSA(1024, 65537), | 1055 Combine(Values(rtc::KeyParams::RSA(1024, 65537), |
1059 rtc::KeyParams::RSA(1152, 65537), | 1056 rtc::KeyParams::RSA(1152, 65537), |
1060 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)), | 1057 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)), |
1061 Values(rtc::KeyParams::RSA(1024, 65537), | 1058 Values(rtc::KeyParams::RSA(1024, 65537), |
1062 rtc::KeyParams::RSA(1152, 65537), | 1059 rtc::KeyParams::RSA(1152, 65537), |
1063 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)))); | 1060 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)))); |
OLD | NEW |