Added AuthorizationSet push_back method that takes a set.

This is needed for some key refactoring work.  Also did some
AuthorizationSet refactoring here.

Change-Id: I681a2793838c1d68b22dc2a39258c30d7ab117bc
diff --git a/authorization_set_test.cpp b/authorization_set_test.cpp
index 1358e23..8ba12f5 100644
--- a/authorization_set_test.cpp
+++ b/authorization_set_test.cpp
@@ -408,6 +408,27 @@
     EXPECT_EQ(AuthorizationSet::OK, growable.is_valid());
 }
 
+TEST(Growable, PushBackSets) {
+    keymaster_key_param_t params[] = {
+        Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN),
+        Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY),
+        Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA),
+        Authorization(TAG_USER_ID, 7),
+        Authorization(TAG_USER_AUTH_ID, 8),
+        Authorization(TAG_APPLICATION_ID, "my_app", 6),
+        Authorization(TAG_KEY_SIZE, 256),
+        Authorization(TAG_AUTH_TIMEOUT, 300),
+    };
+    AuthorizationSet set1(params, array_length(params));
+    AuthorizationSet set2(params, array_length(params));
+
+    AuthorizationSet combined;
+    EXPECT_TRUE(combined.push_back(set1));
+    EXPECT_TRUE(combined.push_back(set2));
+    EXPECT_EQ(array_length(params) * 2, combined.size());
+    EXPECT_EQ(12U, combined.indirect_size());
+}
+
 TEST(GetValue, GetInt) {
     keymaster_key_param_t params[] = {
         Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN),