Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(104)

Side by Side Diff: webrtc/pc/srtpfilter_unittest.cc

Issue 1528843005: Add support for GCM cipher suites from RFC 7714. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Disable GCM if ENABLE_EXTERNAL_AUTH is defined. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/pc/srtpfilter.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2004 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/byteorder.h" 11 #include "webrtc/base/byteorder.h"
12 #include "webrtc/base/constructormagic.h" 12 #include "webrtc/base/constructormagic.h"
13 #include "webrtc/base/gunit.h" 13 #include "webrtc/base/gunit.h"
14 #include "webrtc/base/thread.h" 14 #include "webrtc/base/thread.h"
15 #include "webrtc/media/base/cryptoparams.h" 15 #include "webrtc/media/base/cryptoparams.h"
16 #include "webrtc/media/base/fakertp.h" 16 #include "webrtc/media/base/fakertp.h"
17 #include "webrtc/p2p/base/sessiondescription.h" 17 #include "webrtc/p2p/base/sessiondescription.h"
18 #include "webrtc/pc/srtpfilter.h" 18 #include "webrtc/pc/srtpfilter.h"
19 extern "C" { 19 extern "C" {
20 #ifdef SRTP_RELATIVE_PATH 20 #ifdef SRTP_RELATIVE_PATH
21 #include "crypto/include/err.h" 21 #include "crypto/include/err.h"
22 #else 22 #else
23 #include "third_party/libsrtp/srtp/crypto/include/err.h" 23 #include "third_party/libsrtp/srtp/crypto/include/err.h"
24 #endif 24 #endif
25 } 25 }
26 26
27 using rtc::CS_AES_CM_128_HMAC_SHA1_80; 27 using rtc::CS_AES_CM_128_HMAC_SHA1_80;
28 using rtc::CS_AES_CM_128_HMAC_SHA1_32; 28 using rtc::CS_AES_CM_128_HMAC_SHA1_32;
29 using rtc::CS_AEAD_AES_128_GCM;
30 using rtc::CS_AEAD_AES_256_GCM;
29 using cricket::CryptoParams; 31 using cricket::CryptoParams;
30 using cricket::CS_LOCAL; 32 using cricket::CS_LOCAL;
31 using cricket::CS_REMOTE; 33 using cricket::CS_REMOTE;
32 34
33 static const uint8_t kTestKey1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234"; 35 static const uint8_t kTestKey1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234";
34 static const uint8_t kTestKey2[] = "4321ZYXWVUTSRQPONMLKJIHGFEDCBA"; 36 static const uint8_t kTestKey2[] = "4321ZYXWVUTSRQPONMLKJIHGFEDCBA";
35 static const int kTestKeyLen = 30; 37 static const int kTestKeyLen = 30;
36 static const std::string kTestKeyParams1 = 38 static const std::string kTestKeyParams1 =
37 "inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz"; 39 "inline:WVNfX19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz";
38 static const std::string kTestKeyParams2 = 40 static const std::string kTestKeyParams2 =
39 "inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR"; 41 "inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR";
40 static const std::string kTestKeyParams3 = 42 static const std::string kTestKeyParams3 =
41 "inline:1234X19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz"; 43 "inline:1234X19zZW1jdGwgKCkgewkyMjA7fQp9CnVubGVz";
42 static const std::string kTestKeyParams4 = 44 static const std::string kTestKeyParams4 =
43 "inline:4567QCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR"; 45 "inline:4567QCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR";
46 static const std::string kTestKeyParamsGcm1 =
47 "inline:e166KFlKzJsGW0d5apX+rrI05vxbrvMJEzFI14aTDCa63IRTlLK4iH66uOI=";
48 static const std::string kTestKeyParamsGcm2 =
49 "inline:6X0oCd55zfz4VgtOwsuqcFq61275PDYN5uwuu3p7ZUHbfUY2FMpdP4m2PEo=";
50 static const std::string kTestKeyParamsGcm3 =
51 "inline:YKlABGZWMgX32xuMotrG0v0T7G83veegaVzubQ==";
52 static const std::string kTestKeyParamsGcm4 =
53 "inline:gJ6tWoUym2v+/F6xjr7xaxiS3QbJJozl3ZD/0A==";
44 static const cricket::CryptoParams kTestCryptoParams1( 54 static const cricket::CryptoParams kTestCryptoParams1(
45 1, "AES_CM_128_HMAC_SHA1_80", kTestKeyParams1, ""); 55 1, "AES_CM_128_HMAC_SHA1_80", kTestKeyParams1, "");
46 static const cricket::CryptoParams kTestCryptoParams2( 56 static const cricket::CryptoParams kTestCryptoParams2(
47 1, "AES_CM_128_HMAC_SHA1_80", kTestKeyParams2, ""); 57 1, "AES_CM_128_HMAC_SHA1_80", kTestKeyParams2, "");
58 static const cricket::CryptoParams kTestCryptoParamsGcm1(
59 1, "AEAD_AES_256_GCM", kTestKeyParamsGcm1, "");
60 static const cricket::CryptoParams kTestCryptoParamsGcm2(
61 1, "AEAD_AES_256_GCM", kTestKeyParamsGcm2, "");
62 static const cricket::CryptoParams kTestCryptoParamsGcm3(
63 1, "AEAD_AES_128_GCM", kTestKeyParamsGcm3, "");
64 static const cricket::CryptoParams kTestCryptoParamsGcm4(
65 1, "AEAD_AES_128_GCM", kTestKeyParamsGcm4, "");
48 66
49 static int rtp_auth_tag_len(const std::string& cs) { 67 static int rtp_auth_tag_len(const std::string& cs) {
50 return (cs == CS_AES_CM_128_HMAC_SHA1_32) ? 4 : 10; 68 return (cs == CS_AES_CM_128_HMAC_SHA1_32) ? 4 : 10;
51 } 69 }
52 static int rtcp_auth_tag_len(const std::string& cs) { 70 static int rtcp_auth_tag_len(const std::string& cs) {
53 return 10; 71 return 10;
54 } 72 }
55 73
56 class SrtpFilterTest : public testing::Test { 74 class SrtpFilterTest : public testing::Test {
57 protected: 75 protected:
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 }; 144 };
127 145
128 // Test that we can set up the session and keys properly. 146 // Test that we can set up the session and keys properly.
129 TEST_F(SrtpFilterTest, TestGoodSetupOneCipherSuite) { 147 TEST_F(SrtpFilterTest, TestGoodSetupOneCipherSuite) {
130 EXPECT_TRUE(f1_.SetOffer(MakeVector(kTestCryptoParams1), CS_LOCAL)); 148 EXPECT_TRUE(f1_.SetOffer(MakeVector(kTestCryptoParams1), CS_LOCAL));
131 EXPECT_FALSE(f1_.IsActive()); 149 EXPECT_FALSE(f1_.IsActive());
132 EXPECT_TRUE(f1_.SetAnswer(MakeVector(kTestCryptoParams2), CS_REMOTE)); 150 EXPECT_TRUE(f1_.SetAnswer(MakeVector(kTestCryptoParams2), CS_REMOTE));
133 EXPECT_TRUE(f1_.IsActive()); 151 EXPECT_TRUE(f1_.IsActive());
134 } 152 }
135 153
154 TEST_F(SrtpFilterTest, TestGoodSetupOneCipherSuiteGcm) {
155 EXPECT_TRUE(f1_.SetOffer(MakeVector(kTestCryptoParamsGcm1), CS_LOCAL));
156 EXPECT_FALSE(f1_.IsActive());
157 EXPECT_TRUE(f1_.SetAnswer(MakeVector(kTestCryptoParamsGcm2), CS_REMOTE));
158 EXPECT_TRUE(f1_.IsActive());
159 }
160
136 // Test that we can set up things with multiple params. 161 // Test that we can set up things with multiple params.
137 TEST_F(SrtpFilterTest, TestGoodSetupMultipleCipherSuites) { 162 TEST_F(SrtpFilterTest, TestGoodSetupMultipleCipherSuites) {
138 std::vector<CryptoParams> offer(MakeVector(kTestCryptoParams1)); 163 std::vector<CryptoParams> offer(MakeVector(kTestCryptoParams1));
139 std::vector<CryptoParams> answer(MakeVector(kTestCryptoParams2)); 164 std::vector<CryptoParams> answer(MakeVector(kTestCryptoParams2));
140 offer.push_back(kTestCryptoParams1); 165 offer.push_back(kTestCryptoParams1);
141 offer[1].tag = 2; 166 offer[1].tag = 2;
142 offer[1].cipher_suite = CS_AES_CM_128_HMAC_SHA1_32; 167 offer[1].cipher_suite = CS_AES_CM_128_HMAC_SHA1_32;
143 answer[0].tag = 2; 168 answer[0].tag = 2;
144 answer[0].cipher_suite = CS_AES_CM_128_HMAC_SHA1_32; 169 answer[0].cipher_suite = CS_AES_CM_128_HMAC_SHA1_32;
145 EXPECT_TRUE(f1_.SetOffer(offer, CS_LOCAL)); 170 EXPECT_TRUE(f1_.SetOffer(offer, CS_LOCAL));
146 EXPECT_FALSE(f1_.IsActive()); 171 EXPECT_FALSE(f1_.IsActive());
147 EXPECT_TRUE(f1_.SetAnswer(answer, CS_REMOTE)); 172 EXPECT_TRUE(f1_.SetAnswer(answer, CS_REMOTE));
148 EXPECT_TRUE(f1_.IsActive()); 173 EXPECT_TRUE(f1_.IsActive());
149 } 174 }
150 175
176 TEST_F(SrtpFilterTest, TestGoodSetupMultipleCipherSuitesGcm) {
177 std::vector<CryptoParams> offer(MakeVector(kTestCryptoParamsGcm1));
178 std::vector<CryptoParams> answer(MakeVector(kTestCryptoParamsGcm3));
179 offer.push_back(kTestCryptoParamsGcm4);
180 offer[1].tag = 2;
181 answer[0].tag = 2;
182 EXPECT_TRUE(f1_.SetOffer(offer, CS_LOCAL));
183 EXPECT_FALSE(f1_.IsActive());
184 EXPECT_TRUE(f1_.SetAnswer(answer, CS_REMOTE));
185 EXPECT_TRUE(f1_.IsActive());
186 }
187
151 // Test that we handle the cases where crypto is not desired. 188 // Test that we handle the cases where crypto is not desired.
152 TEST_F(SrtpFilterTest, TestGoodSetupNoCipherSuites) { 189 TEST_F(SrtpFilterTest, TestGoodSetupNoCipherSuites) {
153 std::vector<CryptoParams> offer, answer; 190 std::vector<CryptoParams> offer, answer;
154 EXPECT_TRUE(f1_.SetOffer(offer, CS_LOCAL)); 191 EXPECT_TRUE(f1_.SetOffer(offer, CS_LOCAL));
155 EXPECT_TRUE(f1_.SetAnswer(answer, CS_REMOTE)); 192 EXPECT_TRUE(f1_.SetAnswer(answer, CS_REMOTE));
156 EXPECT_FALSE(f1_.IsActive()); 193 EXPECT_FALSE(f1_.IsActive());
157 } 194 }
158 195
159 // Test that we handle the cases where crypto is not desired by the remote side. 196 // Test that we handle the cases where crypto is not desired by the remote side.
160 TEST_F(SrtpFilterTest, TestGoodSetupNoAnswerCipherSuites) { 197 TEST_F(SrtpFilterTest, TestGoodSetupNoAnswerCipherSuites) {
(...skipping 739 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 srtp_stat_.AddUnprotectRtcpResult(err_status_fail); 937 srtp_stat_.AddUnprotectRtcpResult(err_status_fail);
901 EXPECT_EQ(-1, mode_); 938 EXPECT_EQ(-1, mode_);
902 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); 939 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_);
903 // Now the error will be triggered again. 940 // Now the error will be triggered again.
904 Reset(); 941 Reset();
905 rtc::Thread::Current()->SleepMs(210); 942 rtc::Thread::Current()->SleepMs(210);
906 srtp_stat_.AddUnprotectRtcpResult(err_status_fail); 943 srtp_stat_.AddUnprotectRtcpResult(err_status_fail);
907 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); 944 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_);
908 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); 945 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_);
909 } 946 }
OLDNEW
« no previous file with comments | « webrtc/pc/srtpfilter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698