session_manager_test.cc revision bbef5dff2b94fef72012e721cd6124cd87621af4
1bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 2bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Copyright (C) 2015 The Android Open Source Project 3bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 4bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Licensed under the Apache License, Version 2.0 (the "License"); 5bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// you may not use this file except in compliance with the License. 6bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// You may obtain a copy of the License at 7bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 8bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// http://www.apache.org/licenses/LICENSE-2.0 9bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 10bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Unless required by applicable law or agreed to in writing, software 11bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// distributed under the License is distributed on an "AS IS" BASIS, 12bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// See the License for the specific language governing permissions and 14bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// limitations under the License. 15bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 16ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 17ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/session_manager_impl.h" 18ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 19ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include <vector> 20ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 21ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include <base/strings/string_number_conversions.h> 22ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include <gmock/gmock.h> 23ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include <gtest/gtest.h> 24ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 25ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/mock_tpm.h" 26ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/tpm_generated.h" 27ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/tpm_utility.h" 28ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/trunks_factory_for_test.h" 29ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 30ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiusing testing::_; 31ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiusing testing::DoAll; 32ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiusing testing::NiceMock; 33ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiusing testing::Return; 34ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiusing testing::SetArgPointee; 35ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 36ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghinamespace trunks { 37ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 38ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiclass SessionManagerTest : public testing::Test { 39ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi public: 40ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi SessionManagerTest() : session_manager_(factory_) { 41ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi delegate_ = new HmacAuthorizationDelegate(); 42ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi } 43ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi ~SessionManagerTest() override {} 44ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 45ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi void SetUp() override { 46ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi factory_.set_tpm(&mock_tpm_); 47ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi } 48ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 49ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi void SetHandle(TPM_HANDLE handle) { 50ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi session_manager_.session_handle_ = handle; 51ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi } 52ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 53ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM2B_PUBLIC_KEY_RSA GetValidRSAPublicKey() { 54ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi const char kValidModulus[] = 55ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi "A1D50D088994000492B5F3ED8A9C5FC8772706219F4C063B2F6A8C6B74D3AD6B" 56ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi "212A53D01DABB34A6261288540D420D3BA59ED279D859DE6227A7AB6BD88FADD" 57ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi "FC3078D465F4DF97E03A52A587BD0165AE3B180FE7B255B7BEDC1BE81CB1383F" 58ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi "E9E46F9312B1EF28F4025E7D332E33F4416525FEB8F0FC7B815E8FBB79CDABE6" 59ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi "327B5A155FEF13F559A7086CB8A543D72AD6ECAEE2E704FF28824149D7F4E393" 60ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi "D3C74E721ACA97F7ADBE2CCF7B4BCC165F7380F48065F2C8370F25F066091259" 61ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi "D14EA362BAF236E3CD8771A94BDEDA3900577143A238AB92B6C55F11DEFAFB31" 62ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi "7D1DC5B6AE210C52B008D87F2A7BFF6EB5C4FB32D6ECEC6505796173951A3167"; 63ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi std::vector<uint8> bytes; 64ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi CHECK(base::HexStringToBytes(kValidModulus, &bytes)); 65ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi CHECK_EQ(bytes.size(), 256u); 66ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM2B_PUBLIC_KEY_RSA rsa; 67ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi rsa.size = bytes.size(); 68ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi memcpy(rsa.buffer, bytes.data(), bytes.size()); 69ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi return rsa; 70ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi } 71ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 72ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi protected: 73ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TrunksFactoryForTest factory_; 74ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi NiceMock<MockTpm> mock_tpm_; 75ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi HmacAuthorizationDelegate* delegate_; 76ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi SessionManagerImpl session_manager_; 77ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi}; 78ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 79ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh SanghiTEST_F(SessionManagerTest, CloseSessionSuccess) { 80ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_HANDLE handle = TPM_RH_FIRST; 81ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi SetHandle(handle); 82c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, FlushContextSync(handle, nullptr)) 83ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 84ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi session_manager_.CloseSession(); 85ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 86ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 87ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh SanghiTEST_F(SessionManagerTest, CloseSessionNoHandle) { 88ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_HANDLE handle = kUninitializedHandle; 89ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi SetHandle(handle); 90c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, FlushContextSync(handle, nullptr)) 91ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi .Times(0); 92ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi session_manager_.CloseSession(); 93ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 94ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 95ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh SanghiTEST_F(SessionManagerTest, GetSessionHandleTest) { 96ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_HANDLE handle = TPM_RH_FIRST; 97ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_EQ(kUninitializedHandle, session_manager_.GetSessionHandle()); 98ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi SetHandle(handle); 99ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_EQ(handle, session_manager_.GetSessionHandle()); 100ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 101ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 102ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 103ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh SanghiTEST_F(SessionManagerTest, StartSessionSuccess) { 104ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_SE session_type = TPM_SE_TRIAL; 105ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM2B_PUBLIC public_data; 106ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi public_data.public_area.unique.rsa = GetValidRSAPublicKey(); 107c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, nullptr)) 108ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<2>(public_data), 109ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 110ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_HANDLE handle = TPM_RH_FIRST; 111ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM2B_NONCE nonce; 112ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi nonce.size = 20; 113ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_CALL(mock_tpm_, StartAuthSessionSyncShort(_, handle, 114ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi _, _, session_type, _, _, 115ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi _, _, _)) 116ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<8>(nonce), 117ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 118ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, session_manager_.StartSession(session_type, 119ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi handle, "", false, 120ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi delegate_)); 121ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 122ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 123ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh SanghiTEST_F(SessionManagerTest, StartSessionBadSaltingKey) { 124ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM2B_PUBLIC public_data; 125ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi public_data.public_area.unique.rsa.size = 32; 126c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, nullptr)) 127ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<2>(public_data), 128ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 129ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, session_manager_.StartSession(TPM_SE_TRIAL, 130ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_RH_NULL, "", 131ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi false, delegate_)); 132ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 133ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 134ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh SanghiTEST_F(SessionManagerTest, StartSessionFailure) { 135ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM2B_PUBLIC public_data; 136ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi public_data.public_area.unique.rsa = GetValidRSAPublicKey(); 137c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, nullptr)) 138ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<2>(public_data), 139ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 140ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_CALL(mock_tpm_, StartAuthSessionSyncShort(_, 141ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_RH_NULL, 142ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi _, _, _, _, _, _, _, _)) 143ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 144ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, session_manager_.StartSession(TPM_SE_TRIAL, 145ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_RH_NULL, "", 146ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi false, delegate_)); 147ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 148ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 149ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh SanghiTEST_F(SessionManagerTest, StartSessionBadNonce) { 150ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_SE session_type = TPM_SE_TRIAL; 151ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM2B_PUBLIC public_data; 152ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi public_data.public_area.unique.rsa = GetValidRSAPublicKey(); 153c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, nullptr)) 154ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<2>(public_data), 155ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 156ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_HANDLE handle = TPM_RH_FIRST; 157ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM2B_NONCE nonce; 158ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi nonce.size = 0; 159ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_CALL(mock_tpm_, StartAuthSessionSyncShort(_, handle, 160ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi _, _, session_type, _, _, 161ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi _, _, _)) 162ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<8>(nonce), 163ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 164ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, session_manager_.StartSession(session_type, 165ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi handle, "", false, 166ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi delegate_)); 167ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 168ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 169ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} // namespace trunks 170