11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/dbus/fake_easy_unlock_client.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/bind.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Callback for |GenerateEcP256KeyPair| method. Saves keys returned by the 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// method in |private_key_target| and |public_key_target|. 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RecordKeyPair(std::string* private_key_target, 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string* public_key_target, 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& private_key_source, 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& public_key_source) { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *private_key_target = private_key_source; 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *public_key_target = public_key_source; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Callback for |EasyUnlockClient| methods that return a single piece of data. 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// It saves the returned data in |data_target|. 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RecordData(std::string* data_target, 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& data_source) { 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *data_target = data_source; 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, GenerateEcP256KeyPair) { 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::FakeEasyUnlockClient client; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string private_key_1; 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string public_key_1; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.GenerateEcP256KeyPair( 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordKeyPair, &private_key_1, &public_key_1)); 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ("{\"ec_p256_private_key\": 1}", private_key_1); 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ("{\"ec_p256_public_key\": 1}", public_key_1); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string private_key_2; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string public_key_2; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.GenerateEcP256KeyPair( 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordKeyPair, &private_key_2, &public_key_2)); 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ("{\"ec_p256_private_key\": 2}", private_key_2); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ("{\"ec_p256_public_key\": 2}", public_key_2); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_NE(private_key_1, private_key_2); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_NE(public_key_1, public_key_2); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, IsEcP256KeyPair) { 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(chromeos::FakeEasyUnlockClient::IsEcP256KeyPair( 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_private_key\": 12}", 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_public_key\": 12}")); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, IsEcP256KeyPair_KeysFromDiffrentPairs) { 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(chromeos::FakeEasyUnlockClient::IsEcP256KeyPair( 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_private_key\": 12}", 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_public_key\": 34}")); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, IsEcP256KeyPair_KeyOrderSwitched) { 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(chromeos::FakeEasyUnlockClient::IsEcP256KeyPair( 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_public_key\": 34}", 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_private_key\": 34}")); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, IsEcP256KeyPair_PrivateKeyInvalidFormat) { 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(chromeos::FakeEasyUnlockClient::IsEcP256KeyPair( 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"ec_p256_private_key\": 12", 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_public_key\": 12}")); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, IsEcP256KeyPair_PublicKeyInvalidFormat) { 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(chromeos::FakeEasyUnlockClient::IsEcP256KeyPair( 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_private_key\": 12}", 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"ec_p256_public_key\": 12")); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, IsEcP256KeyPair_PrivateKeyInvalidDictKey) { 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(chromeos::FakeEasyUnlockClient::IsEcP256KeyPair( 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"invalid\": 12}", 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_public_key\": 12}")); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, IsEcP256KeyPair_PublicKeyInvalidDictKey) { 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(chromeos::FakeEasyUnlockClient::IsEcP256KeyPair( 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_private_key\": 12}", 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"invalid\": 12}")); 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, IsEcP256KeyPair_InvalidDictValues) { 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(chromeos::FakeEasyUnlockClient::IsEcP256KeyPair( 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_private_key\": \"12\"}", 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"ec_p256_public_key\": \"12\"}")); 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verifies the fake |PerformECDHKeyAgreement| method is symetric in respect to 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// key pairs from which private and public key used in the key agreement 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// originate. 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, ECDHKeyAgreementSuccess) { 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::FakeEasyUnlockClient client; 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // (Fake) key pairs used in the test to generate fake shared keys. 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string private_key_1 = "{\"ec_p256_private_key\": 32}"; 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string public_key_1 = "{\"ec_p256_public_key\": 32}"; 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string private_key_2 = "{\"ec_p256_private_key\": 352}"; 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string public_key_2 = "{\"ec_p256_public_key\": 352}"; 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string private_key_3 = "{\"ec_p256_private_key\": 432}"; 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string public_key_3 = "{\"ec_p256_public_key\": 432}"; 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Generate shared key for key pairs 1 and 2, using private key from the 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // second key pair and public key from the first key pair. 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string shared_key_1; 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.PerformECDHKeyAgreement(private_key_2, 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public_key_1, 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordData, &shared_key_1)); 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(shared_key_1.empty()); 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Generate shared key for key pairs 1 and 2, using private key from the 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // first key pair and public key from the second key pair. 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string shared_key_2; 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.PerformECDHKeyAgreement(private_key_1, 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public_key_2, 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordData, &shared_key_2)); 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(shared_key_2.empty()); 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The generated keys should be equal. They were generated using keys from 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // the same key pairs, even though key pairs from which private and public key 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // originate were switched. 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(shared_key_1, shared_key_2); 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Generate a key using key pairs 1 and 3. 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string shared_key_3; 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.PerformECDHKeyAgreement(private_key_1, 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public_key_3, 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordData, &shared_key_3)); 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(shared_key_3.empty()); 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The new key should be different from the previously generated ones, since 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // the used key pairs are different. 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_NE(shared_key_3, shared_key_1); 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_NE(shared_key_3, shared_key_1); 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, ECDHKeyAgreementFailsIfKeyOrderSwitched) { 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::FakeEasyUnlockClient client; 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string private_key = "{\"ec_p256_private_key\": 415}"; 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string public_key = "{\"ec_p256_public_key\": 345}"; 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string shared_key; 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.PerformECDHKeyAgreement(public_key, 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private_key, 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordData, &shared_key)); 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(shared_key.empty()); 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, ECDHKeyAgreementFailsIfKeyDictKeyInvalid) { 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::FakeEasyUnlockClient client; 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string private_key = "{\"ec_p256_private_key_invalid\": 415}"; 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string public_key = "{\"ec_p256_public_key_invalid\": 345}"; 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string shared_key; 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.PerformECDHKeyAgreement(private_key, 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public_key, 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordData, &shared_key)); 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(shared_key.empty()); 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, ECDHKeyAgreementFailsIfKeyDictValueInvalid) { 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::FakeEasyUnlockClient client; 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string private_key = "{\"ec_p256_private_key\": 415}"; 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string public_key = "{\"ec_p256_public_key\": \"345__\"}"; 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string shared_key; 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.PerformECDHKeyAgreement(private_key, 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public_key, 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordData, &shared_key)); 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(shared_key.empty()); 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, ECDHKeyAgreementFailsIfKeyFormatInvalid) { 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::FakeEasyUnlockClient client; 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string private_key = "invalid"; 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string public_key = "{\"ec_p256_public_key\": 345}"; 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string shared_key; 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.PerformECDHKeyAgreement(private_key, 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public_key, 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordData, &shared_key)); 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(shared_key.empty()); 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, CreateSecureMessage) { 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::FakeEasyUnlockClient client; 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string message; 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::EasyUnlockClient::CreateSecureMessageOptions options; 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.key = "KEY"; 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.associated_data = "ASSOCIATED_DATA"; 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.public_metadata = "PUBLIC_METADATA"; 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.verification_key_id = "VERIFICATION_KEY_ID"; 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.decryption_key_id = "DECRYPTION_KEY_ID"; 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.encryption_type = "ENCRYPTION_TYPE"; 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.signature_type = "SIGNATURE_TYPE"; 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.CreateSecureMessage( 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "PAYLOAD", 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options, 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordData, &message)); 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string expected_message( 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"securemessage\": {" 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"payload\": \"PAYLOAD\"," 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"key\": \"KEY\"," 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"associated_data\": \"ASSOCIATED_DATA\"," 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"public_metadata\": \"PUBLIC_METADATA\"," 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"verification_key_id\": \"VERIFICATION_KEY_ID\"," 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"decryption_key_id\": \"DECRYPTION_KEY_ID\"," 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"encryption_type\": \"ENCRYPTION_TYPE\"," 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"signature_type\": \"SIGNATURE_TYPE\"}" 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "}"); 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(expected_message, message); 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(FakeEasyUnlockClientTest, UnwrapSecureMessage) { 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::FakeEasyUnlockClient client; 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string message; 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::EasyUnlockClient::UnwrapSecureMessageOptions options; 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.key = "KEY"; 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.associated_data = "ASSOCIATED_DATA"; 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.encryption_type = "ENCRYPTION_TYPE"; 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options.signature_type = "SIGNATURE_TYPE"; 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci client.UnwrapSecureMessage( 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "MESSAGE", 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci options, 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&RecordData, &message)); 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string expected_message( 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "{\"unwrapped_securemessage\": {" 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"message\": \"MESSAGE\"," 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"key\": \"KEY\"," 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"associated_data\": \"ASSOCIATED_DATA\"," 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"encryption_type\": \"ENCRYPTION_TYPE\"," 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "\"signature_type\": \"SIGNATURE_TYPE\"}" 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "}"); 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(expected_message, message); 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 264