A bit more test refactoring, and remove DSA.

Change-Id: I70a82f8f004feba6bb946144975afec40aec3791
diff --git a/google_keymaster_test.cpp b/google_keymaster_test.cpp
index d6c62c7..96efb40 100644
--- a/google_keymaster_test.cpp
+++ b/google_keymaster_test.cpp
@@ -14,8 +14,10 @@
  * limitations under the License.
  */
 
-#include <string>
+#include <algorithm>
 #include <fstream>
+#include <string>
+#include <vector>
 
 #include <gtest/gtest.h>
 
@@ -27,9 +29,10 @@
 #include "google_keymaster_test_utils.h"
 #include "soft_keymaster_device.h"
 
-using std::string;
 using std::ifstream;
 using std::istreambuf_iterator;
+using std::string;
+using std::vector;
 
 int main(int argc, char** argv) {
     ::testing::InitGoogleTest(&argc, argv);
@@ -247,9 +250,13 @@
         return error;
     }
 
-    template <typename T> void ExpectContains(T val, T* vals, size_t len) {
-        EXPECT_EQ(1U, len);
-        EXPECT_EQ(val, vals[0]);
+    template <typename T>
+    bool ResponseContains(const vector<T>& expected, const T* values, size_t len) {
+        return std::is_permutation(values, values + len, expected.begin());
+    }
+
+    template <typename T> bool ResponseContains(T expected, const T* values, size_t len) {
+        return (len == 1 && *values == expected);
     }
 
     keymaster_error_t AbortOperation() { return device()->abort(device(), op_handle_); }
@@ -380,12 +387,8 @@
     size_t len;
     keymaster_algorithm_t* algorithms;
     EXPECT_EQ(KM_ERROR_OK, device()->get_supported_algorithms(device(), &algorithms, &len));
-    ASSERT_EQ(4U, len);
-    EXPECT_EQ(KM_ALGORITHM_RSA, algorithms[0]);
-    EXPECT_EQ(KM_ALGORITHM_DSA, algorithms[1]);
-    EXPECT_EQ(KM_ALGORITHM_ECDSA, algorithms[2]);
-    EXPECT_EQ(KM_ALGORITHM_AES, algorithms[3]);
-
+    EXPECT_TRUE(ResponseContains({KM_ALGORITHM_RSA, KM_ALGORITHM_ECDSA, KM_ALGORITHM_AES},
+                                 algorithms, len));
     free(algorithms);
 }
 
@@ -400,7 +403,7 @@
               device()->get_supported_block_modes(device(), KM_ALGORITHM_RSA, KM_PURPOSE_ENCRYPT,
                                                   &modes, &len));
 
-    EXPECT_EQ(KM_ERROR_UNSUPPORTED_BLOCK_MODE,
+    EXPECT_EQ(KM_ERROR_UNSUPPORTED_ALGORITHM,
               device()->get_supported_block_modes(device(), KM_ALGORITHM_DSA, KM_PURPOSE_ENCRYPT,
                                                   &modes, &len));
 
@@ -422,17 +425,16 @@
     keymaster_padding_t* modes;
     EXPECT_EQ(KM_ERROR_OK, device()->get_supported_padding_modes(device(), KM_ALGORITHM_RSA,
                                                                  KM_PURPOSE_SIGN, &modes, &len));
-    ExpectContains(KM_PAD_NONE, modes, len);
+    EXPECT_TRUE(ResponseContains(KM_PAD_NONE, modes, len));
     free(modes);
 
-    EXPECT_EQ(KM_ERROR_OK, device()->get_supported_padding_modes(device(), KM_ALGORITHM_DSA,
-                                                                 KM_PURPOSE_SIGN, &modes, &len));
-    ExpectContains(KM_PAD_NONE, modes, len);
-    free(modes);
+    EXPECT_EQ(KM_ERROR_UNSUPPORTED_ALGORITHM,
+              device()->get_supported_padding_modes(device(), KM_ALGORITHM_DSA, KM_PURPOSE_SIGN,
+                                                    &modes, &len));
 
     EXPECT_EQ(KM_ERROR_OK, device()->get_supported_padding_modes(device(), KM_ALGORITHM_ECDSA,
                                                                  KM_PURPOSE_SIGN, &modes, &len));
-    ExpectContains(KM_PAD_NONE, modes, len);
+    EXPECT_TRUE(ResponseContains(KM_PAD_NONE, modes, len));
     free(modes);
 
     EXPECT_EQ(KM_ERROR_OK, device()->get_supported_padding_modes(device(), KM_ALGORITHM_AES,
@@ -450,17 +452,16 @@
     keymaster_digest_t* digests;
     EXPECT_EQ(KM_ERROR_OK, device()->get_supported_digests(device(), KM_ALGORITHM_RSA,
                                                            KM_PURPOSE_SIGN, &digests, &len));
-    ExpectContains(KM_DIGEST_NONE, digests, len);
+    EXPECT_TRUE(ResponseContains(KM_DIGEST_NONE, digests, len));
     free(digests);
 
-    EXPECT_EQ(KM_ERROR_OK, device()->get_supported_digests(device(), KM_ALGORITHM_DSA,
-                                                           KM_PURPOSE_SIGN, &digests, &len));
-    ExpectContains(KM_DIGEST_NONE, digests, len);
-    free(digests);
+    EXPECT_EQ(KM_ERROR_UNSUPPORTED_ALGORITHM,
+              device()->get_supported_digests(device(), KM_ALGORITHM_DSA, KM_PURPOSE_SIGN, &digests,
+                                              &len));
 
     EXPECT_EQ(KM_ERROR_OK, device()->get_supported_digests(device(), KM_ALGORITHM_ECDSA,
                                                            KM_PURPOSE_SIGN, &digests, &len));
-    ExpectContains(KM_DIGEST_NONE, digests, len);
+    EXPECT_TRUE(ResponseContains(KM_DIGEST_NONE, digests, len));
     free(digests);
 
     EXPECT_EQ(KM_ERROR_OK, device()->get_supported_digests(device(), KM_ALGORITHM_AES,
@@ -477,17 +478,15 @@
     keymaster_key_format_t* formats;
     EXPECT_EQ(KM_ERROR_OK,
               device()->get_supported_import_formats(device(), KM_ALGORITHM_RSA, &formats, &len));
-    ExpectContains(KM_KEY_FORMAT_PKCS8, formats, len);
+    EXPECT_TRUE(ResponseContains(KM_KEY_FORMAT_PKCS8, formats, len));
     free(formats);
 
-    EXPECT_EQ(KM_ERROR_OK,
+    EXPECT_EQ(KM_ERROR_UNSUPPORTED_ALGORITHM,
               device()->get_supported_import_formats(device(), KM_ALGORITHM_DSA, &formats, &len));
-    ExpectContains(KM_KEY_FORMAT_PKCS8, formats, len);
-    free(formats);
 
     EXPECT_EQ(KM_ERROR_OK,
               device()->get_supported_import_formats(device(), KM_ALGORITHM_ECDSA, &formats, &len));
-    ExpectContains(KM_KEY_FORMAT_PKCS8, formats, len);
+    EXPECT_TRUE(ResponseContains(KM_KEY_FORMAT_PKCS8, formats, len));
     free(formats);
 
     EXPECT_EQ(KM_ERROR_OK,
@@ -504,17 +503,15 @@
     keymaster_key_format_t* formats;
     EXPECT_EQ(KM_ERROR_OK,
               device()->get_supported_export_formats(device(), KM_ALGORITHM_RSA, &formats, &len));
-    ExpectContains(KM_KEY_FORMAT_X509, formats, len);
+    EXPECT_TRUE(ResponseContains(KM_KEY_FORMAT_X509, formats, len));
     free(formats);
 
-    EXPECT_EQ(KM_ERROR_OK,
+    EXPECT_EQ(KM_ERROR_UNSUPPORTED_ALGORITHM,
               device()->get_supported_export_formats(device(), KM_ALGORITHM_DSA, &formats, &len));
-    ExpectContains(KM_KEY_FORMAT_X509, formats, len);
-    free(formats);
 
     EXPECT_EQ(KM_ERROR_OK,
               device()->get_supported_export_formats(device(), KM_ALGORITHM_ECDSA, &formats, &len));
-    ExpectContains(KM_KEY_FORMAT_X509, formats, len);
+    EXPECT_TRUE(ResponseContains(KM_KEY_FORMAT_X509, formats, len));
     free(formats);
 
     EXPECT_EQ(KM_ERROR_OK,