You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.7 KiB
96 lines
3.7 KiB
// |
|
// Copyright (C) 2014 The Android Open Source Project |
|
// |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// http://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
// |
|
|
|
#include <string> |
|
|
|
#include <gtest/gtest.h> |
|
|
|
#include "trunks/password_authorization_delegate.h" |
|
|
|
namespace trunks { |
|
|
|
// This test looks at initialization of the delegate with no password. |
|
// It should initailize with a zero length internal password buffer. |
|
TEST(PasswordAuthorizationDelegateTest, NullInitialization) { |
|
PasswordAuthorizationDelegate delegate(""); |
|
EXPECT_EQ(delegate.password_.size, 0); |
|
} |
|
|
|
// This test checks the generation of an authorization structure by the |
|
// delegate. It compared the serialized structure generated by the delegate |
|
// to the expected authorization string. |
|
TEST(PasswordAuthorizationDelegateTest, SerializationTest) { |
|
std::string expected_auth( |
|
"\x40\x00\x00\x09" // session_handle = TPM_RS_PW |
|
"\x00\x00" // nonce = zero length buffer |
|
"\x01" // session_attributes = continueSession |
|
"\x00\x06" // password length |
|
"secret", // password |
|
15); |
|
PasswordAuthorizationDelegate delegate("secret"); |
|
std::string authorization; |
|
std::string command_hash; |
|
bool authorization_result = delegate.GetCommandAuthorization( |
|
command_hash, false, false, &authorization); |
|
EXPECT_EQ(authorization_result, true); |
|
EXPECT_EQ(authorization.length(), expected_auth.length()); |
|
EXPECT_EQ(expected_auth.compare(authorization), 0); |
|
} |
|
|
|
// This test looks at the delegate's ability to parse and check authorization |
|
// responses when the response is well formed. |
|
TEST(PasswordAuthorizationDelegateTest, ParseGoodParams) { |
|
std::string auth_response( |
|
"\x00\x00" // nonceTpm = zero length buffer |
|
"\x01" // session_attributes = continueSession |
|
"\x00\x00", // hmac = zero length buffer |
|
5); |
|
PasswordAuthorizationDelegate delegate("secret"); |
|
std::string response_hash; |
|
bool authorization_result = |
|
delegate.CheckResponseAuthorization(response_hash, auth_response); |
|
EXPECT_EQ(authorization_result, true); |
|
} |
|
|
|
// This test checks the delegate's ability to correctly identify an incorrect |
|
// authorization response. |
|
TEST(PasswordAuthorizationDelegateTest, ParseBadParams) { |
|
std::string auth_response( |
|
"\x00\x00" // nonceTpm = zero length buffer |
|
"\x01" // session_attributes = continueSession |
|
"\x00\x06" // password length |
|
"secret", // password |
|
11); |
|
PasswordAuthorizationDelegate delegate("secret"); |
|
std::string response_hash; |
|
bool authorization_result = |
|
delegate.CheckResponseAuthorization(response_hash, auth_response); |
|
EXPECT_EQ(authorization_result, false); |
|
} |
|
|
|
// This test confirms that after encrypting and decrypting a parameter, |
|
// we get the original parameter back. |
|
TEST(PasswordAuthorizationDelegateTest, EncryptDecrypt) { |
|
PasswordAuthorizationDelegate delegate("secret"); |
|
std::string plaintext_parameter("parameter"); |
|
std::string encrypted_parameter(plaintext_parameter); |
|
ASSERT_EQ(plaintext_parameter.compare(encrypted_parameter), 0); |
|
delegate.EncryptCommandParameter(&encrypted_parameter); |
|
delegate.DecryptResponseParameter(&encrypted_parameter); |
|
EXPECT_EQ(plaintext_parameter.compare(encrypted_parameter), 0); |
|
} |
|
|
|
} // namespace trunks
|
|
|