| /* |
| * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| // |
| // vie_autotest_encryption.cc |
| // |
| |
| #include "vie_autotest_defines.h" |
| #include "vie_autotest.h" |
| #include "engine_configurations.h" |
| |
| #include "tb_capture_device.h" |
| #include "tb_external_transport.h" |
| #include "tb_interfaces.h" |
| #include "tb_video_channel.h" |
| |
| class ViEAutotestEncryption: public webrtc::Encryption |
| { |
| public: |
| ViEAutotestEncryption() |
| { |
| } |
| ~ViEAutotestEncryption() |
| { |
| } |
| |
| virtual void encrypt(int channel_no, unsigned char * in_data, |
| unsigned char * out_data, int bytes_in, int* bytes_out) |
| { |
| for (int i = 0; i < bytes_in; i++) |
| { |
| out_data[i] = ~in_data[i]; |
| } |
| *bytes_out = bytes_in + 2; |
| } |
| |
| virtual void decrypt(int channel_no, unsigned char * in_data, |
| unsigned char * out_data, int bytes_in, int* bytes_out) |
| { |
| for (int i = 0; i < bytes_in - 2; i++) |
| { |
| out_data[i] = ~in_data[i]; |
| } |
| *bytes_out = bytes_in - 2; |
| } |
| |
| virtual void encrypt_rtcp(int channel_no, unsigned char * in_data, |
| unsigned char * out_data, int bytes_in, |
| int* bytes_out) |
| { |
| for (int i = 0; i < bytes_in; i++) |
| { |
| out_data[i] = ~in_data[i]; |
| } |
| *bytes_out = bytes_in + 2; |
| } |
| |
| virtual void decrypt_rtcp(int channel_no, unsigned char * in_data, |
| unsigned char * out_data, int bytes_in, |
| int* bytes_out) |
| { |
| for (int i = 0; i < bytes_in - 2; i++) |
| { |
| out_data[i] = ~in_data[i]; |
| } |
| *bytes_out = bytes_in - 2; |
| } |
| }; |
| |
| void ViEAutoTest::ViEEncryptionStandardTest() |
| { |
| //*************************************************************** |
| // Begin create/initialize WebRTC Video Engine for testing |
| //*************************************************************** |
| |
| // Create VIE |
| TbInterfaces ViE("ViEEncryptionStandardTest"); |
| // Create a video channel |
| TbVideoChannel tbChannel(ViE, webrtc::kVideoCodecVP8); |
| |
| // Create a capture device |
| TbCaptureDevice tbCapture(ViE); |
| tbCapture.ConnectTo(tbChannel.videoChannel); |
| |
| tbChannel.StartReceive(); |
| |
| tbChannel.StartSend(); |
| |
| EXPECT_EQ(0, ViE.render->AddRenderer( |
| tbCapture.captureId, _window1, 0, 0.0, 0.0, 1.0, 1.0)); |
| EXPECT_EQ(0, ViE.render->StartRender(tbCapture.captureId)); |
| EXPECT_EQ(0, ViE.render->AddRenderer( |
| tbChannel.videoChannel, _window2, 1, 0.0, 0.0, 1.0, 1.0)); |
| EXPECT_EQ(0, ViE.render->StartRender(tbChannel.videoChannel)); |
| |
| #ifdef WEBRTC_SRTP |
| //*************************************************************** |
| // Engine ready. Begin testing class |
| //*************************************************************** |
| |
| // |
| // SRTP |
| // |
| unsigned char srtpKey1[30] = |
| { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, |
| 4, 5, 6, 7, 8, 9}; |
| |
| // Encryption only |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthNull, 0, 0, webrtc::kEncryption, srtpKey1)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthNull, 0, 0, webrtc::kEncryption, srtpKey1)); |
| ViETest::Log("SRTP encryption only"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // Authentication only |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthHmacSha1, |
| 20, 4, webrtc::kAuthentication, srtpKey1)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthHmacSha1, |
| 20, 4, webrtc::kAuthentication, srtpKey1)); |
| |
| ViETest::Log("SRTP authentication only"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // Full protection |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey1)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey1)); |
| |
| ViETest::Log("SRTP full protection"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| #endif // WEBRTC_SRTP |
| |
| // |
| // External encryption |
| // |
| ViEAutotestEncryption testEncryption; |
| // Note(qhogpat): StartSend fails, not sure if this is intentional. |
| EXPECT_NE(0, ViE.base->StartSend(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->RegisterExternalEncryption( |
| tbChannel.videoChannel, testEncryption)); |
| ViETest::Log( |
| "External encryption/decryption added, you should still see video"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DeregisterExternalEncryption( |
| tbChannel.videoChannel)); |
| |
| //*************************************************************** |
| // Testing finished. Tear down Video Engine |
| //*************************************************************** |
| } |
| |
| void ViEAutoTest::ViEEncryptionExtendedTest() |
| { |
| //*************************************************************** |
| // Begin create/initialize WebRTC Video Engine for testing |
| //*************************************************************** |
| |
| // Create VIE |
| TbInterfaces ViE("ViEEncryptionExtendedTest"); |
| // Create a video channel |
| TbVideoChannel tbChannel(ViE, webrtc::kVideoCodecVP8); |
| |
| // Create a capture device |
| TbCaptureDevice tbCapture(ViE); |
| tbCapture.ConnectTo(tbChannel.videoChannel); |
| |
| tbChannel.StartReceive(); |
| tbChannel.StartSend(); |
| |
| EXPECT_EQ(0, ViE.render->AddRenderer( |
| tbCapture.captureId, _window1, 0, 0.0, 0.0, 1.0, 1.0)); |
| EXPECT_EQ(0, ViE.render->StartRender(tbCapture.captureId)); |
| EXPECT_EQ(0, ViE.render->AddRenderer( |
| tbChannel.videoChannel, _window2, 1, 0.0, 0.0, 1.0, 1.0)); |
| EXPECT_EQ(0, ViE.render->StartRender(tbChannel.videoChannel)); |
| |
| //*************************************************************** |
| // Engine ready. Begin testing class |
| //*************************************************************** |
| |
| #ifdef WEBRTC_SRTP |
| |
| // |
| // SRTP |
| // |
| unsigned char srtpKey1[30] = |
| { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, |
| 4, 5, 6, 7, 8, 9}; |
| unsigned char srtpKey2[30] = |
| { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 8, 7, 6, |
| 5, 4, 3, 2, 1, 0}; |
| // NULL |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthNull, 0, 0, |
| webrtc::kNoProtection, srtpKey1)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthNull, 0, 0, |
| webrtc::kNoProtection, srtpKey1)); |
| |
| ViETest::Log("SRTP NULL encryption/authentication"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // Encryption only |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthNull, 0, 0, webrtc::kEncryption, srtpKey1)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthNull, 0, 0, webrtc::kEncryption, srtpKey1)); |
| |
| ViETest::Log("SRTP encryption only"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // Authentication only |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthHmacSha1, |
| 20, 4, webrtc::kAuthentication, srtpKey1)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthHmacSha1, |
| 20, 4, webrtc::kAuthentication, srtpKey1)); |
| |
| ViETest::Log("SRTP authentication only"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // Full protection |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey1)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey1)); |
| |
| ViETest::Log("SRTP full protection"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // Change receive key, but not send key... |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey2)); |
| |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey1)); |
| |
| ViETest::Log( |
| "\nSRTP receive key changed, you should not see any remote images"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| |
| // Change send key too |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey2)); |
| |
| ViETest::Log("\nSRTP send key changed too, you should see remote video " |
| "again with some decoding artefacts at start"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| |
| // Disable receive, keep send |
| ViETest::Log("SRTP receive disabled , you shouldn't see any video"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| #endif //WEBRTC_SRTP |
| // |
| // External encryption |
| // |
| ViEAutotestEncryption testEncryption; |
| EXPECT_EQ(0, ViE.encryption->RegisterExternalEncryption( |
| tbChannel.videoChannel, testEncryption)); |
| ViETest::Log( |
| "External encryption/decryption added, you should still see video"); |
| AutoTestSleep(KAutoTestSleepTimeMs); |
| EXPECT_EQ(0, ViE.encryption->DeregisterExternalEncryption( |
| tbChannel.videoChannel)); |
| |
| //*************************************************************** |
| // Testing finished. Tear down Video Engine |
| //*************************************************************** |
| } |
| |
| void ViEAutoTest::ViEEncryptionAPITest() |
| { |
| //*************************************************************** |
| // Begin create/initialize WebRTC Video Engine for testing |
| //*************************************************************** |
| |
| //*************************************************************** |
| // Engine ready. Begin testing class |
| //*************************************************************** |
| |
| // Create VIE |
| TbInterfaces ViE("ViEEncryptionAPITest"); |
| // Create a video channel |
| TbVideoChannel tbChannel(ViE, webrtc::kVideoCodecVP8); |
| |
| // Create a capture device |
| TbCaptureDevice tbCapture(ViE); |
| // Connect to channel |
| tbCapture.ConnectTo(tbChannel.videoChannel); |
| |
| #ifdef WEBRTC_SRTP |
| unsigned char srtpKey[30] = |
| { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, |
| 4, 5, 6, 7, 8, 9}; |
| |
| // |
| // EnableSRTPSend and DisableSRTPSend |
| // |
| |
| // Incorrect input argument, complete protection not enabled |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kNoProtection, srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryption, srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kAuthentication, srtpKey)); |
| |
| // Incorrect cipher key length |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 15, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 257, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherNull, 15, webrtc::kAuthHmacSha1, |
| 20, 4, webrtc::kEncryptionAndAuthentication, srtpKey)); |
| |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherNull, 257, webrtc::kAuthHmacSha1, |
| 20, 4, webrtc::kEncryptionAndAuthentication, srtpKey)); |
| |
| // Incorrect auth key length |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, |
| 30, webrtc::kAuthHmacSha1, 21, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthNull, 257, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 21, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthNull, 20, 13, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| |
| // NULL input |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| NULL)); |
| |
| // Double enable and disable |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| |
| // Note(qhogpat): the second check is likely incorrect. |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // No protection |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthNull, 0, 0, |
| webrtc::kNoProtection, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // Authentication only |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthHmacSha1, |
| 20, 4, webrtc::kAuthentication, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthHmacSha1, |
| 1, 4, webrtc::kAuthentication, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthHmacSha1, |
| 20, 20, webrtc::kAuthentication, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthHmacSha1, |
| 1, 1, webrtc::kAuthentication, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // Encryption only |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthNull, 0, 0, webrtc::kEncryption, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 16, |
| webrtc::kAuthNull, 0, 0, webrtc::kEncryption, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // Full protection |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // |
| // EnableSRTPReceive and DisableSRTPReceive |
| // |
| |
| // Incorrect input argument, complete protection not enabled |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kNoProtection, srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryption, srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kAuthentication, srtpKey)); |
| |
| // Incorrect cipher key length |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 15, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 257, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherNull, 15, webrtc::kAuthHmacSha1, |
| 20, 4, webrtc::kEncryptionAndAuthentication, srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherNull, 257, webrtc::kAuthHmacSha1, |
| 20, 4, webrtc::kEncryptionAndAuthentication, srtpKey)); |
| |
| // Incorrect auth key length |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 21, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthNull, 257, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 21, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthNull, 20, 13, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| |
| // NULL input |
| EXPECT_NE(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| NULL)); |
| |
| // Double enable and disable |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_NE(0, ViE.encryption->EnableSRTPSend( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPSend(tbChannel.videoChannel)); |
| |
| // No protection |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthNull, 0, 0, |
| webrtc::kNoProtection, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| |
| // Authentication only |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthHmacSha1, |
| 1, 4, webrtc::kAuthentication, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, |
| webrtc::kAuthHmacSha1, 20, 20, webrtc::kAuthentication, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherNull, 0, webrtc::kAuthHmacSha1, |
| 1, 1, webrtc::kAuthentication, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| |
| // Encryption only |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthNull, 0, 0, webrtc::kEncryption, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 16, |
| webrtc::kAuthNull, 0, 0, webrtc::kEncryption, srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| |
| // Full protection |
| EXPECT_EQ(0, ViE.encryption->EnableSRTPReceive( |
| tbChannel.videoChannel, webrtc::kCipherAes128CounterMode, 30, |
| webrtc::kAuthHmacSha1, 20, 4, webrtc::kEncryptionAndAuthentication, |
| srtpKey)); |
| EXPECT_EQ(0, ViE.encryption->DisableSRTPReceive(tbChannel.videoChannel)); |
| #endif //WEBRTC_SRTP |
| // |
| // External encryption |
| // |
| |
| ViEAutotestEncryption testEncryption; |
| EXPECT_EQ(0, ViE.encryption->RegisterExternalEncryption( |
| tbChannel.videoChannel, testEncryption)); |
| EXPECT_NE(0, ViE.encryption->RegisterExternalEncryption( |
| tbChannel.videoChannel, testEncryption)); |
| EXPECT_EQ(0, ViE.encryption->DeregisterExternalEncryption( |
| tbChannel.videoChannel)); |
| EXPECT_EQ(0, ViE.encryption->DeregisterExternalEncryption( |
| tbChannel.videoChannel)); |
| |
| //*************************************************************** |
| // Testing finished. Tear down Video Engine |
| //*************************************************************** |
| } |