authorization_set_test.cpp revision 72a5fdde1095cc012b232987d1f02de9b0507b89
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 Willdennamespace keymaster { 25834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willdennamespace test { 275ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Construction, ListProvided) { 295ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_key_param_t params[] = { 302c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN), Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY), 312c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA), Authorization(TAG_USER_ID, 7), 32eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD), 33eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_APPLICATION_ID, "my_app", 6), Authorization(TAG_KEY_SIZE, 256), 34eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_AUTH_TIMEOUT, 300), 355ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden }; 365ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet set(params, array_length(params)); 375ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 385ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 395ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 40834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn WilldenTEST(Construction, Copy) { 41834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden keymaster_key_param_t params[] = { 422c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN), Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY), 432c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA), Authorization(TAG_USER_ID, 7), 44eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD), 45eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_APPLICATION_ID, "my_app", 6), Authorization(TAG_KEY_SIZE, 256), 46eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden Authorization(TAG_AUTH_TIMEOUT, 300), 47834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden }; 48834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden AuthorizationSet set(params, array_length(params)); 49834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden AuthorizationSet set2(set); 507636471bd1c553ac179f0dddc17133491d0e1fafShawn Willden EXPECT_EQ(set, set2); 51834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden} 52834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 53b58dcde804dc9f69f89c620592b910083f32b01cShawn WilldenTEST(Construction, NullProvided) { 54b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden keymaster_key_param_t params[] = { 55b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN), Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY), 56b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden }; 57b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden 58b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden AuthorizationSet set1(params, 0); 5972a5fdde1095cc012b232987d1f02de9b0507b89Shawn Willden EXPECT_EQ(0U, set1.size()); 60b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden EXPECT_EQ(AuthorizationSet::OK, set1.is_valid()); 61b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden 62b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden AuthorizationSet set2(reinterpret_cast<keymaster_key_param_t*>(NULL), array_length(params)); 6372a5fdde1095cc012b232987d1f02de9b0507b89Shawn Willden EXPECT_EQ(0U, set2.size()); 64b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden EXPECT_EQ(AuthorizationSet::OK, set2.is_valid()); 65b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden} 66b58dcde804dc9f69f89c620592b910083f32b01cShawn Willden 675ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Lookup, NonRepeated) { 682c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 692c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 702c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 712c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 722c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 73eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 742c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 752c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 762c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 772c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 785ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 795ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 805ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = set.find(TAG_ALGORITHM); 815ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_NE(-1, pos); 825ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_ALGORITHM, set[pos].tag); 835ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_ALGORITHM_RSA, set[pos].enumerated); 845ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden pos = set.find(TAG_MAC_LENGTH); 865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(-1, pos); 875ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 885ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint32_t int_val = 0; 895ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_USER_ID, &int_val)); 905ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(7U, int_val); 915ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 925ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_blob_t blob_val; 935ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_APPLICATION_ID, &blob_val)); 945ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, blob_val.data_length); 955ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(blob_val.data, "my_app", 6)); 965ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 975ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Lookup, Repeated) { 992c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1002c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1012c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1022c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1032c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 104eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 1052c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1062c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1072c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 1085ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 1095ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1105ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = set.find(TAG_PURPOSE); 1115ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_FALSE(pos == -1); 1125ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_PURPOSE, set[pos].tag); 1135ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_SIGN, set[pos].enumerated); 1145ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1155ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden pos = set.find(TAG_PURPOSE, pos); 1165ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_PURPOSE, set[pos].tag); 1175ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_VERIFY, set[pos].enumerated); 1185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1195ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(-1, set.find(TAG_PURPOSE, pos)); 1205ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1215ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Lookup, Indexed) { 1232c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1242c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1252c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1262c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1272c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 128eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 1292c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1302c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1312c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 1325ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 1335ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1345ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_PURPOSE, set[0].tag); 1355ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_SIGN, set[0].enumerated); 1365ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1375ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Lookup beyond end doesn't work, just returns zeros, but doens't blow up either (verify by 1385ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // running under valgrind). 1395ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_INVALID, set[10].tag); 1405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Serialization, RoundTrip) { 1432c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1442c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1452c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1462c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1472c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 148eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 1492c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1502c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1512c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300) 1522c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALL_USERS) 1532c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_RSA_PUBLIC_EXPONENT, 3) 1542c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10)); 1555ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1565ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 1575ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(size > 0); 1585ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1595ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 16058e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 1615ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized(buf.get(), size); 1625ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 16358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized.is_valid()); 1647636471bd1c553ac179f0dddc17133491d0e1fafShawn Willden EXPECT_EQ(set, deserialized); 1655ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1665ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = deserialized.find(TAG_APPLICATION_ID); 1675ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_NE(-1, pos); 1685ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_APPLICATION_ID, deserialized[pos].tag); 1695ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, deserialized[pos].blob.data_length); 1705ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(deserialized[pos].blob.data, "my_app", 6)); 1715ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1725ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 17358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn WilldenTEST(Deserialization, Deserialize) { 1742c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1752c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1762c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1772c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1782c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 179eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 1802c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1812c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1822c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 1835ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1845ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 1855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(size > 0); 1865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1875ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 18858e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 1895ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized; 1905ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf.get(); 19158e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_TRUE(deserialized.Deserialize(&p, p + size)); 1925ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(p, buf.get() + size); 1935ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 19458e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized.is_valid()); 1955ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1965ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(set.size(), deserialized.size()); 1975ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden for (size_t i = 0; i < set.size(); ++i) { 1985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(set[i].tag, deserialized[i].tag); 1995ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden } 2005ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2015ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = deserialized.find(TAG_APPLICATION_ID); 2025ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_NE(-1, pos); 2035ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_APPLICATION_ID, deserialized[pos].tag); 2045ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, deserialized[pos].blob.data_length); 2055ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(deserialized[pos].blob.data, "my_app", 6)); 2065ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 2075ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2085ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Deserialization, TooShortBuffer) { 2095ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint8_t buf[] = {0, 0, 0}; 2105ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized(buf, array_length(buf)); 2115ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2125ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2135ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf; 21458e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_FALSE(deserialized.Deserialize(&p, p + array_length(buf))); 2155ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2165ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 2175ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Deserialization, InvalidLengthField) { 2192c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 2202c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 2212c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 2222c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 2232c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 224eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 2252c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 2262c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 2272c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 2285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2295ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 2305ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(size > 0); 2315ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2325ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 23358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 2345ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden *reinterpret_cast<uint32_t*>(buf.get()) = 9; 2355ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2365ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized(buf.get(), size); 2375ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2385ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2395ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf.get(); 24058e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_FALSE(deserialized.Deserialize(&p, p + size)); 2415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 2435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2448d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willdenstatic uint32_t read_uint32(const uint8_t* buf) { 2458d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden uint32_t val; 2468d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden memcpy(&val, buf, sizeof(val)); 2478d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden return val; 2488d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden} 2498d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden 2508d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willdenstatic void add_to_uint32(uint8_t* buf, int delta) { 2518d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden uint32_t val; 2528d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden memcpy(&val, buf, sizeof(val)); 2538d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden val += delta; 2548d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden memcpy(buf, &val, sizeof(val)); 2558d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden} 2568d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden 2575ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Deserialization, MalformedIndirectData) { 2582c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 2592c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 2602c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "foo", 3)); 2615ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 2625ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2635ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 26458e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 2655ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2668d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // This sucks. This test, as written, requires intimate knowledge of the serialized layout of 2678d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // this particular set, which means it's brittle. But it's important to test that we handle 2688d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // broken serialized data and I can't think of a better way to write this. 2698d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 2708d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // The contents of buf are: 2718d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 2728d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Bytes: Content: 2738d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 0-3 Length of string data, which is 9. 2748d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 4-9 "my_app" 2758d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 10-12 "foo" 2768d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 13-16 Number of elements, which is 2. 2778d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 17-20 Length of elements, which is 24. 2788d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 21-24 First tag, TAG_APPLICATION_ID 2798d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 25-28 Length of string "my_app", 6 2808d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 29-32 Offset of string "my_app", 0 2818d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 33-36 Second tag, TAG_APPLICATION_DATA 2828d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 37-40 Length of string "foo", 3 2838d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 41-44 Offset of string "foo", 6 2848d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden 2858d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Check that stuff is where we think. 2868d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ('m', buf[4]); 2878d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ('f', buf[10]); 2888d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Length of "my_app" 2898d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(6U, read_uint32(buf.get() + 25)); 2908d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Offset of "my_app" 2918d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(0U, read_uint32(buf.get() + 29)); 2928d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Length of "foo" 2938d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(3U, read_uint32(buf.get() + 37)); 2948d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Offset of "foo" 2958d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(6U, read_uint32(buf.get() + 41)); 2965ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2975ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Check that deserialization works. 2985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized1(buf.get(), size); 29958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized1.is_valid()); 3005ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3015ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf.get(); 30258e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_TRUE(deserialized1.Deserialize(&p, p + size)); 30358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized1.is_valid()); 3045ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3055ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // 3065ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Now mess them up in various ways: 3075ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // 3085ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3098d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Move "foo" offset so offset + length goes off the end 3108d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 41, 1); 3118d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden AuthorizationSet deserialized2(buf.get(), size); 3128d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized2.is_valid()); 3138d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 41, -1); 3145ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3158d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Shorten the "my_app" length to make a gap between the blobs. 3168d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 25, -1); 3175ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized3(buf.get(), size); 3185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized3.is_valid()); 3198d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 25, 1); 3205ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3218d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Extend the "my_app" length to make them overlap, and decrease the "foo" length to keep the 3228d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // total length the same. We don't detect this but should. 3238d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // TODO(swillden): Detect overlaps and holes that leave total size correct. 3248d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 25, 1); 3258d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 37, -1); 3265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized4(buf.get(), size); 32758e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized4.is_valid()); 3285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3295ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3305ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Growable, SuccessfulRoundTrip) { 3315ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet growable; 3325ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA))); 3335ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(1U, growable.size()); 3345ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3355ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY))); 3365ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(2U, growable.size()); 3375ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3385ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN))); 3395ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(3U, growable.size()); 3405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_ID, "data", 4))); 3425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(4U, growable.size()); 3435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 344834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_DATA, "some more data", 14))); 345834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden EXPECT_EQ(5U, growable.size()); 346834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 3475ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t serialize_size = growable.SerializedSize(); 3485ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> serialized(new uint8_t[serialize_size]); 34958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(serialized.get() + serialize_size, 35058e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden growable.Serialize(serialized.get(), serialized.get() + serialize_size)); 351834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 352834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden AuthorizationSet deserialized(serialized.get(), serialize_size); 353834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden EXPECT_EQ(growable, deserialized); 3545ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3555ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3565ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Growable, InsufficientElemBuf) { 3575ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet growable; 35858e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3595ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3605ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // First insertion fits. 3615ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA))); 3625ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(1U, growable.size()); 36358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3645ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3655ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Second does too. 3665ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_RSA_PUBLIC_EXPONENT, 3))); 3675ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(2U, growable.size()); 3685ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3695ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3705ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Growable, InsufficientIndirectBuf) { 3715ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet growable; 37258e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3735ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3745ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA))); 3755ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(1U, growable.size()); 37658e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3775ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3785ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_ID, "1234567890", 10))); 3795ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(2U, growable.size()); 38058e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3815ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3825ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_DATA, "1", 1))); 3835ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(3U, growable.size()); 38458e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Can still add another entry without indirect data. Now it's full. 3875ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN))); 3885ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(4U, growable.size()); 38958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3905ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3915ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 392370121346777e13437c275fbe7a975d899cc325cShawn WilldenTEST(Growable, PushBackSets) { 3932c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSetBuilder builder; 3942c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden builder.Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 3952c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 3962c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 3972c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 398eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 3992c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4002c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 4012c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300); 4022c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 4032c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set1(builder.build()); 4042c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set2(builder.build()); 405370121346777e13437c275fbe7a975d899cc325cShawn Willden 406370121346777e13437c275fbe7a975d899cc325cShawn Willden AuthorizationSet combined; 407370121346777e13437c275fbe7a975d899cc325cShawn Willden EXPECT_TRUE(combined.push_back(set1)); 408370121346777e13437c275fbe7a975d899cc325cShawn Willden EXPECT_TRUE(combined.push_back(set2)); 4092c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(set1.size() + set2.size(), combined.size()); 410370121346777e13437c275fbe7a975d899cc325cShawn Willden EXPECT_EQ(12U, combined.indirect_size()); 411370121346777e13437c275fbe7a975d899cc325cShawn Willden} 412370121346777e13437c275fbe7a975d899cc325cShawn Willden 4135ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetInt) { 4142c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4152c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4162c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4172c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4182c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 419eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 4202c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4212c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 4225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint32_t val; 4245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_USER_ID, &val)); 4255ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(7U, val); 4265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4275ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_KEY_SIZE, &val)); 4295ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4305ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4315ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetLong) { 4322c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set1(AuthorizationSetBuilder() 4332c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4342c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4352c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4362c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_RSA_PUBLIC_EXPONENT, 3)); 4375ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4382c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set2(AuthorizationSetBuilder() 4392c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4402c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4412c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA)); 4425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint64_t val; 4445ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set1.GetTagValue(TAG_RSA_PUBLIC_EXPONENT, &val)); 4455ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(3U, val); 4465ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4475ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4485ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set2.GetTagValue(TAG_RSA_PUBLIC_EXPONENT, &val)); 4495ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4505ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4515ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetEnum) { 4522c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4532c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4542c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4552c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4562c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 457eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 4582c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4592c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 4605ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4615ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_algorithm_t val; 4625ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_ALGORITHM, &val)); 4635ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_ALGORITHM_RSA, val); 4645ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4655ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4665ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_padding_t val2; 4675ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_PADDING, &val2)); 4685ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4695ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4705ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetEnumRep) { 4712c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4722c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4732c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4742c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4752c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 476eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 4772c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4782c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 4795ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4805ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_purpose_t val; 4815ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_PURPOSE, 0, &val)); 4825ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_SIGN, val); 4835ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_PURPOSE, 1, &val)); 4845ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_VERIFY, val); 4855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4875ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_PURPOSE, 2, &val)); 4885ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4895ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4905ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetDate) { 4912c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4922c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 4932c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4942c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4952c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4962c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 497eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 4982c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4992c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 5005ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5015ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint64_t val; 5025ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_ACTIVE_DATETIME, &val)); 5035ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(10U, val); 5045ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5055ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 5065ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_USAGE_EXPIRE_DATETIME, &val)); 5075ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 5085ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5095ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetBlob) { 5102c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5112c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 5122c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5132c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 5142c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 515eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD) 5162c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 5172c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 5185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5195ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_blob_t val; 5205ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_APPLICATION_ID, &val)); 5215ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, val.data_length); 5225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(val.data, "my_app", 6)); 5235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 5255ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_APPLICATION_DATA, &val)); 5265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 5275ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5282c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, NoDuplicates) { 5292c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5302c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5312c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5322c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 533eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD)); 5342c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 5352c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5362c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 5372c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 5382c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size(), set.size()); 5392c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5402c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // Sets no longer compare equal, because of ordering (ugh, maybe it should be 5412c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // AuthorizationList, not AuthorizationSet). 5422c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 5432c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 5442c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5452c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, NoDuplicatesHasInvalid) { 5462c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5472c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5482c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_INVALID) 5492c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5502c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 551eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD)); 5522c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 5532c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5542c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 5552c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 5562c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5572c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // Deduplicate should have removed the invalid. 5582c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size() - 1, set.size()); 5592c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 5602c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 5612c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5622c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, DuplicateEnum) { 5632c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5642c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5652c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5662c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5672c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 5682c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 569eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD)); 5702c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 5712c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5722c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 5732c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 5742c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size() - 2, set.size()); 5752c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 5762c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 5772c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5782c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, DuplicateBlob) { 5792c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5802c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5812c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5822c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "data", 4) 5832c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5842c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 5852c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5862c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "data", 4) 5872c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "foo", 3) 588eb63b9799eadcaa6ef206f8b804d7432e0dab14aShawn Willden .Authorization(TAG_USER_AUTH_TYPE, HW_AUTH_PASSWORD)); 5892c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 5902c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5912c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 5922c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 5932c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size() - 3, set.size()); 5942c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 5952c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5962c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // The real test here is that valgrind reports no leak. 5972c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 5982c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5995ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} // namespace test 6005ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} // namespace keymaster 601