authorization_set_test.cpp revision eb63b9799eadcaa6ef206f8b804d7432e0dab14a
15ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden/* 25ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * Copyright (C) 2014 The Android Open Source Project 35ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * 45ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * Licensed under the Apache License, Version 2.0 (the "License"); 55ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * you may not use this file except in compliance with the License. 65ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * You may obtain a copy of the License at 75ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * 85ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * http://www.apache.org/licenses/LICENSE-2.0 95ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * 105ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * Unless required by applicable law or agreed to in writing, software 115ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * distributed under the License is distributed on an "AS IS" BASIS, 125ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * See the License for the specific language governing permissions and 145ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden * limitations under the License. 155ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden */ 165ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 175ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden#include <gtest/gtest.h> 185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1998d9b92547a9a7553b99e3e941a4175926f95b62Shawn Willden#include <keymaster/authorization_set.h> 2098d9b92547a9a7553b99e3e941a4175926f95b62Shawn Willden#include <keymaster/google_keymaster_utils.h> 2198d9b92547a9a7553b99e3e941a4175926f95b62Shawn Willden 227636471bd1c553ac179f0dddc17133491d0e1fafShawn Willden#include "google_keymaster_test_utils.h" 235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willdenint main(int argc, char** argv) { 255ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ::testing::InitGoogleTest(&argc, argv); 265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int result = RUN_ALL_TESTS(); 275ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden return result; 285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 295ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 305ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willdennamespace keymaster { 31834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 325ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willdennamespace test { 335ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 345ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Construction, ListProvided) { 355ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_key_param_t params[] = { 362c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN), Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY), 372c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA), Authorization(TAG_USER_ID, 7), 38eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD), 39eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_APPLICATION_ID, "my_app", 6), Authorization(TAG_KEY_SIZE, 256), 40eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_AUTH_TIMEOUT, 300), 415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden }; 425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet set(params, array_length(params)); 435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 445ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 455ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 46834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn WilldenTEST(Construction, Copy) { 47834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden keymaster_key_param_t params[] = { 482c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN), Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY), 492c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA), Authorization(TAG_USER_ID, 7), 50eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD), 51eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_APPLICATION_ID, "my_app", 6), Authorization(TAG_KEY_SIZE, 256), 52eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_AUTH_TIMEOUT, 300), 53834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden }; 54834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden AuthorizationSet set(params, array_length(params)); 55834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden AuthorizationSet set2(set); 567636471bd1c553ac179f0dddc17133491d0e1fafShawn Willden EXPECT_EQ(set, set2); 57834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden} 58834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 59b58dcde804dc9f69f89c620592b910083f32b01cShawn WilldenTEST(Construction, NullProvided) { 60b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden keymaster_key_param_t params[] = { 61b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN), Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY), 62b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden }; 63b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden 64b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden AuthorizationSet set1(params, 0); 65b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden EXPECT_EQ(0, set1.size()); 66b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden EXPECT_EQ(AuthorizationSet::OK, set1.is_valid()); 67b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden 68b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden AuthorizationSet set2(reinterpret_cast<keymaster_key_param_t*>(NULL), array_length(params)); 69b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden EXPECT_EQ(0, set2.size()); 70b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden EXPECT_EQ(AuthorizationSet::OK, set2.is_valid()); 71b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden} 72b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden 735ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Lookup, NonRepeated) { 742c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 752c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 762c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 772c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 782c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 79eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 802c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 812c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 822c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 832c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 845ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = set.find(TAG_ALGORITHM); 875ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_NE(-1, pos); 885ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_ALGORITHM, set[pos].tag); 895ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_ALGORITHM_RSA, set[pos].enumerated); 905ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 915ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden pos = set.find(TAG_MAC_LENGTH); 925ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(-1, pos); 935ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 945ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint32_t int_val = 0; 955ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_USER_ID, &int_val)); 965ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(7U, int_val); 975ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_blob_t blob_val; 995ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_APPLICATION_ID, &blob_val)); 1005ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, blob_val.data_length); 1015ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(blob_val.data, "my_app", 6)); 1025ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1035ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1045ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Lookup, Repeated) { 1052c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1062c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1072c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1082c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1092c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 110eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 1112c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1122c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1132c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 1145ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 1155ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1165ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = set.find(TAG_PURPOSE); 1175ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_FALSE(pos == -1); 1185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_PURPOSE, set[pos].tag); 1195ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_SIGN, set[pos].enumerated); 1205ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1215ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden pos = set.find(TAG_PURPOSE, pos); 1225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_PURPOSE, set[pos].tag); 1235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_VERIFY, set[pos].enumerated); 1245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1255ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(-1, set.find(TAG_PURPOSE, pos)); 1265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1275ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Lookup, Indexed) { 1292c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1302c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1312c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1322c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1332c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 134eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 1352c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1362c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1372c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 1385ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 1395ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_PURPOSE, set[0].tag); 1415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_SIGN, set[0].enumerated); 1425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Lookup beyond end doesn't work, just returns zeros, but doens't blow up either (verify by 1445ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // running under valgrind). 1455ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_INVALID, set[10].tag); 1465ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1475ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1485ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Serialization, RoundTrip) { 1492c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1502c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1512c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1522c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1532c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 154eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 1552c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1562c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1572c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300) 1582c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALL_USERS) 1592c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_RSA_PUBLIC_EXPONENT, 3) 1602c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10)); 1615ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1625ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 1635ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(size > 0); 1645ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1655ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 16658e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 1675ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized(buf.get(), size); 1685ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 16958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized.is_valid()); 1707636471bd1c553ac179f0dddc17133491d0e1fafShawn Willden EXPECT_EQ(set, deserialized); 1715ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1725ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = deserialized.find(TAG_APPLICATION_ID); 1735ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_NE(-1, pos); 1745ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_APPLICATION_ID, deserialized[pos].tag); 1755ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, deserialized[pos].blob.data_length); 1765ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(deserialized[pos].blob.data, "my_app", 6)); 1775ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1785ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 17958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn WilldenTEST(Deserialization, Deserialize) { 1802c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1812c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1822c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1832c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1842c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 185eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 1862c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1872c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1882c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 1895ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1905ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 1915ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(size > 0); 1925ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1935ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 19458e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 1955ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized; 1965ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf.get(); 19758e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_TRUE(deserialized.Deserialize(&p, p + size)); 1985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(p, buf.get() + size); 1995ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 20058e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized.is_valid()); 2015ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2025ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(set.size(), deserialized.size()); 2035ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden for (size_t i = 0; i < set.size(); ++i) { 2045ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(set[i].tag, deserialized[i].tag); 2055ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden } 2065ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2075ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = deserialized.find(TAG_APPLICATION_ID); 2085ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_NE(-1, pos); 2095ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_APPLICATION_ID, deserialized[pos].tag); 2105ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, deserialized[pos].blob.data_length); 2115ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(deserialized[pos].blob.data, "my_app", 6)); 2125ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 2135ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2145ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Deserialization, TooShortBuffer) { 2155ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint8_t buf[] = {0, 0, 0}; 2165ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized(buf, array_length(buf)); 2175ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2195ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf; 22058e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_FALSE(deserialized.Deserialize(&p, p + array_length(buf))); 2215ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 2235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Deserialization, InvalidLengthField) { 2252c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 2262c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 2272c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 2282c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 2292c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 230eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 2312c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 2322c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 2332c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 2345ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2355ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 2365ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(size > 0); 2375ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2385ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 23958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 2405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden *reinterpret_cast<uint32_t*>(buf.get()) = 9; 2415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized(buf.get(), size); 2435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2445ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2455ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf.get(); 24658e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_FALSE(deserialized.Deserialize(&p, p + size)); 2475ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2485ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 2495ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2508d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willdenstatic uint32_t read_uint32(const uint8_t* buf) { 2518d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden uint32_t val; 2528d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden memcpy(&val, buf, sizeof(val)); 2538d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden return val; 2548d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden} 2558d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden 2568d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willdenstatic void add_to_uint32(uint8_t* buf, int delta) { 2578d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden uint32_t val; 2588d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden memcpy(&val, buf, sizeof(val)); 2598d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden val += delta; 2608d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden memcpy(buf, &val, sizeof(val)); 2618d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden} 2628d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden 2635ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Deserialization, MalformedIndirectData) { 2642c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 2652c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 2662c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "foo", 3)); 2675ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 2685ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2695ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 27058e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 2715ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2728d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // This sucks. This test, as written, requires intimate knowledge of the serialized layout of 2738d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // this particular set, which means it's brittle. But it's important to test that we handle 2748d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // broken serialized data and I can't think of a better way to write this. 2758d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 2768d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // The contents of buf are: 2778d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 2788d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Bytes: Content: 2798d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 0-3 Length of string data, which is 9. 2808d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 4-9 "my_app" 2818d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 10-12 "foo" 2828d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 13-16 Number of elements, which is 2. 2838d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 17-20 Length of elements, which is 24. 2848d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 21-24 First tag, TAG_APPLICATION_ID 2858d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 25-28 Length of string "my_app", 6 2868d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 29-32 Offset of string "my_app", 0 2878d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 33-36 Second tag, TAG_APPLICATION_DATA 2888d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 37-40 Length of string "foo", 3 2898d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 41-44 Offset of string "foo", 6 2908d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden 2918d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Check that stuff is where we think. 2928d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ('m', buf[4]); 2938d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ('f', buf[10]); 2948d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Length of "my_app" 2958d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(6U, read_uint32(buf.get() + 25)); 2968d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Offset of "my_app" 2978d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(0U, read_uint32(buf.get() + 29)); 2988d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Length of "foo" 2998d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(3U, read_uint32(buf.get() + 37)); 3008d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Offset of "foo" 3018d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(6U, read_uint32(buf.get() + 41)); 3025ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3035ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Check that deserialization works. 3045ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized1(buf.get(), size); 30558e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized1.is_valid()); 3065ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3075ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf.get(); 30858e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_TRUE(deserialized1.Deserialize(&p, p + size)); 30958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized1.is_valid()); 3105ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3115ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // 3125ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Now mess them up in various ways: 3135ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // 3145ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3158d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Move "foo" offset so offset + length goes off the end 3168d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 41, 1); 3178d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden AuthorizationSet deserialized2(buf.get(), size); 3188d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized2.is_valid()); 3198d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 41, -1); 3205ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3218d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Shorten the "my_app" length to make a gap between the blobs. 3228d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 25, -1); 3235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized3(buf.get(), size); 3245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized3.is_valid()); 3258d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 25, 1); 3265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3278d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Extend the "my_app" length to make them overlap, and decrease the "foo" length to keep the 3288d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // total length the same. We don't detect this but should. 3298d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // TODO(swillden): Detect overlaps and holes that leave total size correct. 3308d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 25, 1); 3318d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 37, -1); 3325ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized4(buf.get(), size); 33358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized4.is_valid()); 3345ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3355ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3365ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Growable, SuccessfulRoundTrip) { 3375ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_key_param_t elems_buf[20]; 3385ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint8_t data_buf[200]; 3395ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet growable; 3415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA))); 3425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(1U, growable.size()); 3435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3445ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY))); 3455ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(2U, growable.size()); 3465ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3475ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN))); 3485ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(3U, growable.size()); 3495ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3505ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_ID, "data", 4))); 3515ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(4U, growable.size()); 3525ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 353834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_DATA, "some more data", 14))); 354834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden EXPECT_EQ(5U, growable.size()); 355834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 3565ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t serialize_size = growable.SerializedSize(); 3575ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> serialized(new uint8_t[serialize_size]); 35858e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(serialized.get() + serialize_size, 35958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden growable.Serialize(serialized.get(), serialized.get() + serialize_size)); 360834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 361834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden AuthorizationSet deserialized(serialized.get(), serialize_size); 362834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden EXPECT_EQ(growable, deserialized); 3635ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3645ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3655ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Growable, InsufficientElemBuf) { 3665ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_key_param_t elems_buf[1]; 3675ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint8_t data_buf[200]; 3685ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3695ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet growable; 37058e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3715ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3725ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // First insertion fits. 3735ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA))); 3745ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(1U, growable.size()); 37558e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3765ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3775ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Second does too. 3785ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_RSA_PUBLIC_EXPONENT, 3))); 3795ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(2U, growable.size()); 3805ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3815ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3825ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Growable, InsufficientIndirectBuf) { 3835ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_key_param_t elems_buf[3]; 3845ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint8_t data_buf[10]; 3855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet growable; 38758e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3885ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3895ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA))); 3905ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(1U, growable.size()); 39158e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3925ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3935ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_ID, "1234567890", 10))); 3945ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(2U, growable.size()); 39558e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3965ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3975ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_DATA, "1", 1))); 3985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(3U, growable.size()); 39958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 4005ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4015ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Can still add another entry without indirect data. Now it's full. 4025ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN))); 4035ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(4U, growable.size()); 40458e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 4055ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4065ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 407370121346777e13437c275fbe7a975d899cc325cShawn WilldenTEST(Growable, PushBackSets) { 4082c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSetBuilder builder; 4092c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden builder.Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4102c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4112c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4122c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 413eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 4142c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4152c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 4162c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300); 4172c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 4182c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set1(builder.build()); 4192c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set2(builder.build()); 420370121346777e13437c275fbe7a975d899cc325cShawn Willden 421370121346777e13437c275fbe7a975d899cc325cShawn Willden AuthorizationSet combined; 422370121346777e13437c275fbe7a975d899cc325cShawn Willden EXPECT_TRUE(combined.push_back(set1)); 423370121346777e13437c275fbe7a975d899cc325cShawn Willden EXPECT_TRUE(combined.push_back(set2)); 4242c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(set1.size() + set2.size(), combined.size()); 425370121346777e13437c275fbe7a975d899cc325cShawn Willden EXPECT_EQ(12U, combined.indirect_size()); 426370121346777e13437c275fbe7a975d899cc325cShawn Willden} 427370121346777e13437c275fbe7a975d899cc325cShawn Willden 4285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetInt) { 4292c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4302c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4312c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4322c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4332c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 434eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 4352c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4362c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 4375ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4385ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint32_t val; 4395ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_USER_ID, &val)); 4405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(7U, val); 4415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_KEY_SIZE, &val)); 4445ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4455ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4465ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetLong) { 4472c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set1(AuthorizationSetBuilder() 4482c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4492c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4502c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4512c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_RSA_PUBLIC_EXPONENT, 3)); 4525ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4532c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set2(AuthorizationSetBuilder() 4542c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4552c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4562c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA)); 4575ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4585ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint64_t val; 4595ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set1.GetTagValue(TAG_RSA_PUBLIC_EXPONENT, &val)); 4605ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(3U, val); 4615ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4625ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4635ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set2.GetTagValue(TAG_RSA_PUBLIC_EXPONENT, &val)); 4645ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4655ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4665ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetEnum) { 4672c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4682c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4692c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4702c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4712c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 472eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 4732c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4742c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 4755ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4765ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_algorithm_t val; 4775ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_ALGORITHM, &val)); 4785ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_ALGORITHM_RSA, val); 4795ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4805ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4815ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_padding_t val2; 4825ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_PADDING, &val2)); 4835ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4845ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetEnumRep) { 4862c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4872c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4882c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4892c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4902c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 491eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 4922c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4932c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 4945ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4955ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_purpose_t val; 4965ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_PURPOSE, 0, &val)); 4975ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_SIGN, val); 4985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_PURPOSE, 1, &val)); 4995ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_VERIFY, val); 5005ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5015ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 5025ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_PURPOSE, 2, &val)); 5035ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 5045ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5055ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetDate) { 5062c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5072c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5082c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 5092c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5102c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 5112c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 512eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 5132c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 5142c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 5155ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5165ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint64_t val; 5175ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_ACTIVE_DATETIME, &val)); 5185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(10U, val); 5195ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5205ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 5215ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_USAGE_EXPIRE_DATETIME, &val)); 5225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 5235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetBlob) { 5252c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5262c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 5272c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5282c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 5292c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 530eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 5312c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 5322c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 5335ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5345ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_blob_t val; 5355ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_APPLICATION_ID, &val)); 5365ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, val.data_length); 5375ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(val.data, "my_app", 6)); 5385ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5395ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 5405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_APPLICATION_DATA, &val)); 5415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 5425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5432c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, NoDuplicates) { 5442c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5452c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5462c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5472c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 548eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD)); 5492c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 5502c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5512c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 5522c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 5532c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size(), set.size()); 5542c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5552c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // Sets no longer compare equal, because of ordering (ugh, maybe it should be 5562c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // AuthorizationList, not AuthorizationSet). 5572c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 5582c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 5592c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5602c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, NoDuplicatesHasInvalid) { 5612c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5622c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5632c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_INVALID) 5642c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5652c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 566eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD)); 5672c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 5682c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5692c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 5702c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 5712c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5722c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // Deduplicate should have removed the invalid. 5732c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size() - 1, set.size()); 5742c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 5752c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 5762c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5772c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, DuplicateEnum) { 5782c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5792c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5802c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5812c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5822c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 5832c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 584eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD)); 5852c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 5862c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5872c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 5882c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 5892c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size() - 2, set.size()); 5902c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 5912c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 5922c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5932c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, DuplicateBlob) { 5942c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5952c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5962c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5972c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "data", 4) 5982c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5992c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 6002c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 6012c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "data", 4) 6022c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "foo", 3) 603eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD)); 6042c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 6052c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 6062c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 6072c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 6082c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size() - 3, set.size()); 6092c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 6102c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 6112c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // The real test here is that valgrind reports no leak. 6122c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 6132c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 6145ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} // namespace test 6155ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} // namespace keymaster 616