diff options
author | Elisey Zamakhov <EZamakhov@luxoft.com> | 2014-07-16 20:21:54 +0400 |
---|---|---|
committer | Elisey Zamakhov <EZamakhov@luxoft.com> | 2014-07-16 20:21:54 +0400 |
commit | 2e94e1fc0039e76f2e331b0888dc370d6a095668 (patch) | |
tree | ad31d63a985bd72bef4cd07392c460fbc02f3b69 /test | |
parent | 486e390769e0efbe44b998eb12e0690ed85ea6b4 (diff) | |
download | sdl_core-2e94e1fc0039e76f2e331b0888dc370d6a095668.tar.gz |
APPLINK-8165 - Fix uncorrect encryption after decryption error
Diffstat (limited to 'test')
-rw-r--r-- | test/components/security_manager/include/security_manager/crypto_manager_impl_test.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/test/components/security_manager/include/security_manager/crypto_manager_impl_test.h b/test/components/security_manager/include/security_manager/crypto_manager_impl_test.h index 0f4b323a34..8d6d2af90c 100644 --- a/test/components/security_manager/include/security_manager/crypto_manager_impl_test.h +++ b/test/components/security_manager/include/security_manager/crypto_manager_impl_test.h @@ -256,6 +256,57 @@ TEST_F(SSLTest, Positive) { 4), 0); } +TEST_F(SSLTest, EcncryptionFail) { + + const uint8_t *server_buf; + const uint8_t *client_buf; + size_t server_buf_len; + size_t client_buf_len; + ASSERT_EQ(client_ctx->StartHandshake(&client_buf, + &client_buf_len), + security_manager::SSLContext::Handshake_Result_Success); + + while (!server_ctx->IsInitCompleted()) { + ASSERT_FALSE(client_buf == NULL); + ASSERT_GT(client_buf_len, 0u); + ASSERT_EQ(server_ctx->DoHandshakeStep(client_buf, client_buf_len, + &server_buf, &server_buf_len), + security_manager::SSLContext::Handshake_Result_Success); + ASSERT_FALSE(server_buf == NULL); + ASSERT_GT(server_buf_len, 0u); + + ASSERT_EQ(client_ctx->DoHandshakeStep(server_buf, server_buf_len, + &client_buf, &client_buf_len), + security_manager::SSLContext::Handshake_Result_Success); + } + + EXPECT_TRUE(client_ctx->IsInitCompleted()); + EXPECT_TRUE(server_ctx->IsInitCompleted()); + + // Encrypt text on client side + const uint8_t *text = reinterpret_cast<const uint8_t*>("abra"); + const uint8_t *encrypted_text = 0; + size_t text_len = 4; + size_t encrypted_text_len; + EXPECT_TRUE(client_ctx->Encrypt(text, text_len, &encrypted_text, &encrypted_text_len)); + ASSERT_NE(encrypted_text, (void*)NULL); + ASSERT_GT(encrypted_text_len, 0u); + + std::vector<uint8_t> broken(encrypted_text, encrypted_text + encrypted_text_len); + // Broke message + broken[encrypted_text_len / 2] ^= 0xFF; + + const uint8_t *out_text; + size_t out_text_size; + // Decrypt broken text on server side + EXPECT_FALSE(server_ctx->Decrypt(&broken[0], broken.size(), &out_text, &out_text_size)); + + // Check after broken message that server encryption and decryption fail + // Encrypte message on server side + EXPECT_FALSE(server_ctx->Decrypt(encrypted_text, encrypted_text_len, &out_text, &out_text_size)); + EXPECT_FALSE(server_ctx->Encrypt(text, text_len, &encrypted_text, &encrypted_text_len)); +} + /* TEST_F(SSLTest, DISABLED_BadData) { using security_manager::LastError; |