authorization_set_test.cpp revision 2c242009007a38b5c8003137fb8ba5a1fdb73b70
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), 382c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_USER_AUTH_ID, 8), Authorization(TAG_APPLICATION_ID, "my_app", 6), 392c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_KEY_SIZE, 256), Authorization(TAG_AUTH_TIMEOUT, 300), 405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden }; 415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet set(params, array_length(params)); 425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 445ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 45834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn WilldenTEST(Construction, Copy) { 46834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden keymaster_key_param_t params[] = { 472c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN), Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY), 482c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA), Authorization(TAG_USER_ID, 7), 492c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_USER_AUTH_ID, 8), Authorization(TAG_APPLICATION_ID, "my_app", 6), 502c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden Authorization(TAG_KEY_SIZE, 256), Authorization(TAG_AUTH_TIMEOUT, 300), 51834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden }; 52834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden AuthorizationSet set(params, array_length(params)); 53834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden AuthorizationSet set2(set); 547636471bd1c553ac179f0dddc17133491d0e1fafShawn Willden EXPECT_EQ(set, set2); 55834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden} 56834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 575ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Lookup, NonRepeated) { 582c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 592c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 602c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 612c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 622c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 632c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 642c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 652c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 662c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 672c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 685ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 695ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 705ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = set.find(TAG_ALGORITHM); 715ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_NE(-1, pos); 725ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_ALGORITHM, set[pos].tag); 735ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_ALGORITHM_RSA, set[pos].enumerated); 745ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 755ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden pos = set.find(TAG_MAC_LENGTH); 765ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(-1, pos); 775ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 785ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint32_t int_val = 0; 795ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_USER_ID, &int_val)); 805ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(7U, int_val); 815ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 825ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_blob_t blob_val; 835ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_APPLICATION_ID, &blob_val)); 845ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, blob_val.data_length); 855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(blob_val.data, "my_app", 6)); 865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 875ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 885ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Lookup, Repeated) { 892c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 902c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 912c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 922c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 932c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 942c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 952c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 962c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 972c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 995ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1005ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = set.find(TAG_PURPOSE); 1015ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_FALSE(pos == -1); 1025ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_PURPOSE, set[pos].tag); 1035ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_SIGN, set[pos].enumerated); 1045ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1055ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden pos = set.find(TAG_PURPOSE, pos); 1065ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_PURPOSE, set[pos].tag); 1075ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_VERIFY, set[pos].enumerated); 1085ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1095ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(-1, set.find(TAG_PURPOSE, pos)); 1105ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1115ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1125ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Lookup, Indexed) { 1132c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1142c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1152c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1162c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1172c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 1182c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 1192c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1202c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1212c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 1225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, set.size()); 1235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_PURPOSE, set[0].tag); 1255ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_SIGN, set[0].enumerated); 1265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1275ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Lookup beyond end doesn't work, just returns zeros, but doens't blow up either (verify by 1285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // running under valgrind). 1295ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_INVALID, set[10].tag); 1305ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1315ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1325ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Serialization, RoundTrip) { 1332c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1342c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1352c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1362c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1372c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 1382c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 1392c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1402c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1412c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300) 1422c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALL_USERS) 1432c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_RSA_PUBLIC_EXPONENT, 3) 1442c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10)); 1455ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1465ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 1475ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(size > 0); 1485ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1495ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 15058e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 1515ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized(buf.get(), size); 1525ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 15358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized.is_valid()); 1547636471bd1c553ac179f0dddc17133491d0e1fafShawn Willden EXPECT_EQ(set, deserialized); 1555ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1565ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = deserialized.find(TAG_APPLICATION_ID); 1575ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_NE(-1, pos); 1585ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_APPLICATION_ID, deserialized[pos].tag); 1595ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, deserialized[pos].blob.data_length); 1605ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(deserialized[pos].blob.data, "my_app", 6)); 1615ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1625ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 16358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn WilldenTEST(Deserialization, Deserialize) { 1642c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 1652c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 1662c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 1672c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 1682c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 1692c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 1702c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 1712c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 1722c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 1735ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1745ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 1755ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(size > 0); 1765ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1775ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 17858e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 1795ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized; 1805ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf.get(); 18158e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_TRUE(deserialized.Deserialize(&p, p + size)); 1825ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(p, buf.get() + size); 1835ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 18458e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized.is_valid()); 1855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(set.size(), deserialized.size()); 1875ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden for (size_t i = 0; i < set.size(); ++i) { 1885ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(set[i].tag, deserialized[i].tag); 1895ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden } 1905ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1915ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden int pos = deserialized.find(TAG_APPLICATION_ID); 1925ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden ASSERT_NE(-1, pos); 1935ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_TAG_APPLICATION_ID, deserialized[pos].tag); 1945ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, deserialized[pos].blob.data_length); 1955ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(deserialized[pos].blob.data, "my_app", 6)); 1965ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 1975ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 1985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Deserialization, TooShortBuffer) { 1995ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint8_t buf[] = {0, 0, 0}; 2005ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized(buf, array_length(buf)); 2015ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2025ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2035ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf; 20458e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_FALSE(deserialized.Deserialize(&p, p + array_length(buf))); 2055ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2065ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 2075ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2085ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Deserialization, InvalidLengthField) { 2092c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 2102c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 2112c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 2122c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 2132c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 2142c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 2152c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 2162c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 2172c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 2185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2195ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 2205ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(size > 0); 2215ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 22358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 2245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden *reinterpret_cast<uint32_t*>(buf.get()) = 9; 2255ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized(buf.get(), size); 2275ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2295ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf.get(); 23058e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_FALSE(deserialized.Deserialize(&p, p + size)); 2315ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized.is_valid()); 2325ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 2335ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2348d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willdenstatic uint32_t read_uint32(const uint8_t* buf) { 2358d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden uint32_t val; 2368d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden memcpy(&val, buf, sizeof(val)); 2378d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden return val; 2388d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden} 2398d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden 2408d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willdenstatic void add_to_uint32(uint8_t* buf, int delta) { 2418d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden uint32_t val; 2428d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden memcpy(&val, buf, sizeof(val)); 2438d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden val += delta; 2448d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden memcpy(buf, &val, sizeof(val)); 2458d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden} 2468d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden 2475ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Deserialization, MalformedIndirectData) { 2482c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 2492c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 2502c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "foo", 3)); 2515ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t size = set.SerializedSize(); 2525ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2535ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 25458e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(buf.get() + size, set.Serialize(buf.get(), buf.get() + size)); 2555ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2568d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // This sucks. This test, as written, requires intimate knowledge of the serialized layout of 2578d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // this particular set, which means it's brittle. But it's important to test that we handle 2588d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // broken serialized data and I can't think of a better way to write this. 2598d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 2608d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // The contents of buf are: 2618d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 2628d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Bytes: Content: 2638d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 0-3 Length of string data, which is 9. 2648d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 4-9 "my_app" 2658d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 10-12 "foo" 2668d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 13-16 Number of elements, which is 2. 2678d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 17-20 Length of elements, which is 24. 2688d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 21-24 First tag, TAG_APPLICATION_ID 2698d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 25-28 Length of string "my_app", 6 2708d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 29-32 Offset of string "my_app", 0 2718d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 33-36 Second tag, TAG_APPLICATION_DATA 2728d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 37-40 Length of string "foo", 3 2738d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // 41-44 Offset of string "foo", 6 2748d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden 2758d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Check that stuff is where we think. 2768d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ('m', buf[4]); 2778d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ('f', buf[10]); 2788d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Length of "my_app" 2798d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(6U, read_uint32(buf.get() + 25)); 2808d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Offset of "my_app" 2818d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(0U, read_uint32(buf.get() + 29)); 2828d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Length of "foo" 2838d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(3U, read_uint32(buf.get() + 37)); 2848d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Offset of "foo" 2858d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(6U, read_uint32(buf.get() + 41)); 2865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2875ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Check that deserialization works. 2885ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized1(buf.get(), size); 28958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized1.is_valid()); 2905ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2915ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden const uint8_t* p = buf.get(); 29258e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_TRUE(deserialized1.Deserialize(&p, p + size)); 29358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized1.is_valid()); 2945ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2955ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // 2965ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Now mess them up in various ways: 2975ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // 2985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 2998d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Move "foo" offset so offset + length goes off the end 3008d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 41, 1); 3018d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden AuthorizationSet deserialized2(buf.get(), size); 3028d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized2.is_valid()); 3038d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 41, -1); 3045ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3058d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Shorten the "my_app" length to make a gap between the blobs. 3068d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 25, -1); 3075ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized3(buf.get(), size); 3085ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(AuthorizationSet::MALFORMED_DATA, deserialized3.is_valid()); 3098d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 25, 1); 3105ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3118d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // Extend the "my_app" length to make them overlap, and decrease the "foo" length to keep the 3128d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // total length the same. We don't detect this but should. 3138d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden // TODO(swillden): Detect overlaps and holes that leave total size correct. 3148d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 25, 1); 3158d336ae10df66da4c0433f17c2d42e85baea32c5Shawn Willden add_to_uint32(buf.get() + 37, -1); 3165ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet deserialized4(buf.get(), size); 31758e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, deserialized4.is_valid()); 3185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3195ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3205ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Growable, SuccessfulRoundTrip) { 3215ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_key_param_t elems_buf[20]; 3225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint8_t data_buf[200]; 3235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet growable; 3255ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA))); 3265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(1U, growable.size()); 3275ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY))); 3295ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(2U, growable.size()); 3305ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3315ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN))); 3325ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(3U, growable.size()); 3335ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3345ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_ID, "data", 4))); 3355ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(4U, growable.size()); 3365ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 337834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_DATA, "some more data", 14))); 338834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden EXPECT_EQ(5U, growable.size()); 339834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 3405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden size_t serialize_size = growable.SerializedSize(); 3415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden UniquePtr<uint8_t[]> serialized(new uint8_t[serialize_size]); 34258e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(serialized.get() + serialize_size, 34358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden growable.Serialize(serialized.get(), serialized.get() + serialize_size)); 344834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden 345834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden AuthorizationSet deserialized(serialized.get(), serialize_size); 346834e80747cbb960f8a4028c5c8604bf5218ecdb9Shawn Willden EXPECT_EQ(growable, deserialized); 3475ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3485ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3495ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Growable, InsufficientElemBuf) { 3505ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_key_param_t elems_buf[1]; 3515ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint8_t data_buf[200]; 3525ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3535ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet growable; 35458e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3555ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3565ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // First insertion fits. 3575ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA))); 3585ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(1U, growable.size()); 35958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3605ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3615ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Second does too. 3625ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_RSA_PUBLIC_EXPONENT, 3))); 3635ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(2U, growable.size()); 3645ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3655ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3665ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(Growable, InsufficientIndirectBuf) { 3675ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_key_param_t elems_buf[3]; 3685ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint8_t data_buf[10]; 3695ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3705ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden AuthorizationSet growable; 37158e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3725ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 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 EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_ID, "1234567890", 10))); 3785ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(2U, growable.size()); 37958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3805ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3815ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_APPLICATION_DATA, "1", 1))); 3825ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(3U, growable.size()); 38358e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3845ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 3855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Can still add another entry without indirect data. Now it's full. 3865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(growable.push_back(Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN))); 3875ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(4U, growable.size()); 38858e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden EXPECT_EQ(AuthorizationSet::OK, growable.is_valid()); 3895ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 3905ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 391370121346777e13437c275fbe7a975d899cc325cShawn WilldenTEST(Growable, PushBackSets) { 3922c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSetBuilder builder; 3932c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden builder.Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 3942c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 3952c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 3962c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 3972c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 3982c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 3992c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 4002c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300); 4012c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 4022c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set1(builder.build()); 4032c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set2(builder.build()); 404370121346777e13437c275fbe7a975d899cc325cShawn Willden 405370121346777e13437c275fbe7a975d899cc325cShawn Willden AuthorizationSet combined; 406370121346777e13437c275fbe7a975d899cc325cShawn Willden EXPECT_TRUE(combined.push_back(set1)); 407370121346777e13437c275fbe7a975d899cc325cShawn Willden EXPECT_TRUE(combined.push_back(set2)); 4082c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(set1.size() + set2.size(), combined.size()); 409370121346777e13437c275fbe7a975d899cc325cShawn Willden EXPECT_EQ(12U, combined.indirect_size()); 410370121346777e13437c275fbe7a975d899cc325cShawn Willden} 411370121346777e13437c275fbe7a975d899cc325cShawn Willden 4125ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetInt) { 4132c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4142c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4152c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4162c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4172c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 4182c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 4192c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4202c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 4215ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint32_t val; 4235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_USER_ID, &val)); 4245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(7U, val); 4255ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4275ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_KEY_SIZE, &val)); 4285ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4295ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4305ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetIntRep) { 4312c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4322c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4332c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4342c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4352c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 4362c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 4372c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4382c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_KEY_SIZE, 256) 4392c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 4405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint32_t val; 4425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_USER_AUTH_ID, 0, &val)); 4435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(8U, val); 4445ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4455ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4465ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_USER_AUTH_ID, 1, &val)); 4475ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4485ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4495ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetLong) { 4502c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set1(AuthorizationSetBuilder() 4512c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4522c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4532c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4542c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_RSA_PUBLIC_EXPONENT, 3)); 4555ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4562c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set2(AuthorizationSetBuilder() 4572c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4582c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4592c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA)); 4605ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4615ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint64_t val; 4625ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set1.GetTagValue(TAG_RSA_PUBLIC_EXPONENT, &val)); 4635ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(3U, val); 4645ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4655ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4665ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set2.GetTagValue(TAG_RSA_PUBLIC_EXPONENT, &val)); 4675ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4685ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4695ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetEnum) { 4702c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4712c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4722c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4732c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4742c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 4752c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 4762c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4772c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 4785ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4795ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_algorithm_t val; 4805ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_ALGORITHM, &val)); 4815ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_ALGORITHM_RSA, val); 4825ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4835ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 4845ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_padding_t val2; 4855ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_PADDING, &val2)); 4865ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 4875ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4885ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetEnumRep) { 4892c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 4902c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 4912c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 4922c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 4932c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 4942c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 4952c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 4962c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 4975ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 4985ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_purpose_t val; 4995ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_PURPOSE, 0, &val)); 5005ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_SIGN, val); 5015ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_PURPOSE, 1, &val)); 5025ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(KM_PURPOSE_VERIFY, val); 5035ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5045ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 5055ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_PURPOSE, 2, &val)); 5065ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 5075ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5085ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetDate) { 5092c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5102c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 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) 5152c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 5162c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 5172c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 5185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5195ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden uint64_t val; 5205ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_ACTIVE_DATETIME, &val)); 5215ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(10U, val); 5225ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5235ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 5245ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_USAGE_EXPIRE_DATETIME, &val)); 5255ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 5265ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5275ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn WilldenTEST(GetValue, GetBlob) { 5282c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5292c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN) 5302c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5312c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA) 5322c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 5332c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8) 5342c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_ID, "my_app", 6) 5352c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_AUTH_TIMEOUT, 300)); 5365ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5375ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden keymaster_blob_t val; 5385ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_TRUE(set.GetTagValue(TAG_APPLICATION_ID, &val)); 5395ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(6U, val.data_length); 5405ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_EQ(0, memcmp(val.data, "my_app", 6)); 5415ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5425ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden // Find one that isn't there 5435ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden EXPECT_FALSE(set.GetTagValue(TAG_APPLICATION_DATA, &val)); 5445ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} 5455ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden 5462c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, NoDuplicates) { 5472c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5482c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5492c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5502c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 5512c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8)); 5522c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 5532c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5542c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 5552c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 5562c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size(), set.size()); 5572c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5582c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // Sets no longer compare equal, because of ordering (ugh, maybe it should be 5592c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // AuthorizationList, not AuthorizationSet). 5602c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 5612c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 5622c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5632c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, NoDuplicatesHasInvalid) { 5642c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5652c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5662c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_INVALID) 5672c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5682c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 5692c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8)); 5702c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 5712c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5722c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 5732c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 5742c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5752c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // Deduplicate should have removed the invalid. 5762c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size() - 1, set.size()); 5772c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 5782c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 5792c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5802c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, DuplicateEnum) { 5812c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5822c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5832c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 5842c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5852c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 5862c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5872c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8)); 5882c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 5892c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5902c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 5912c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 5922c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size() - 2, set.size()); 5932c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 5942c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 5952c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 5962c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn WilldenTEST(Deduplication, DuplicateBlob) { 5972c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet set(AuthorizationSetBuilder() 5982c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 5992c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_ACTIVE_DATETIME, 10) 6002c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "data", 4) 6012c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 6022c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_ID, 7) 6032c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY) 6042c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "data", 4) 6052c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_APPLICATION_DATA, "foo", 3) 6062c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden .Authorization(TAG_USER_AUTH_ID, 8)); 6072c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden AuthorizationSet copy(set); 6082c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 6092c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy, set); 6102c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden set.Deduplicate(); 6112c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_EQ(copy.size() - 3, set.size()); 6122c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden EXPECT_NE(copy, set); 6132c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 6142c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden // The real test here is that valgrind reports no leak. 6152c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden} 6162c242009007a38b5c8003137fb8ba5a1fdb73b70Shawn Willden 6175ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} // namespace test 6185ada7b6c525d2bfd5b556a698ccb11db23e052bbShawn Willden} // namespace keymaster 619