android_keymaster_messages_test.cpp revision 98d9b92547a9a7553b99e3e941a4175926f95b62
1128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden/* 2128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * Copyright (C) 2014 The Android Open Source Project 3128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * 4128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * Licensed under the Apache License, Version 2.0 (the "License"); 5128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * you may not use this file except in compliance with the License. 6128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * You may obtain a copy of the License at 7128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * 8128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * http://www.apache.org/licenses/LICENSE-2.0 9128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * 10128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * Unless required by applicable law or agreed to in writing, software 11128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * distributed under the License is distributed on an "AS IS" BASIS, 12128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * See the License for the specific language governing permissions and 14128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden * limitations under the License. 15128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden */ 16128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 17128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden#include <UniquePtr.h> 18128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 19128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden#include <gtest/gtest.h> 20128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 2198d9b92547a9a7553b99e3e941a4175926f95b62Shawn Willden#include <keymaster/keymaster_tags.h> 2298d9b92547a9a7553b99e3e941a4175926f95b62Shawn Willden#include <keymaster/google_keymaster_utils.h> 2398d9b92547a9a7553b99e3e941a4175926f95b62Shawn Willden 24da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden#include "google_keymaster_test_utils.h" 25128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden#include "google_softkeymaster.h" 26128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 27128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willdenint main(int argc, char** argv) { 28128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden ::testing::InitGoogleTest(&argc, argv); 29128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden int result = RUN_ALL_TESTS(); 30128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden return result; 31128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden} 32128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 33128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willdennamespace keymaster { 34128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willdennamespace test { 35128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 36da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden/** 37da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden * Serialize and deserialize a message. 38da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden */ 39da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willdentemplate <typename Message> Message* round_trip(const Message& message, size_t expected_size) { 40da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden size_t size = message.SerializedSize(); 41da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(expected_size, size); 42da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden if (size == 0) 43da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden return NULL; 44128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 45128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden UniquePtr<uint8_t[]> buf(new uint8_t[size]); 46da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(buf.get() + size, message.Serialize(buf.get(), buf.get() + size)); 47128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 48da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden Message* deserialized = new Message; 4958e1a5486219a1be9264d4e863a9dd3e393906c3Shawn Willden const uint8_t* p = buf.get(); 50da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_TRUE(deserialized->Deserialize(&p, p + size)); 51da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ((ptrdiff_t)size, p - buf.get()); 52da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden return deserialized; 53da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 54da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 55da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willdenclass EmptyKeymasterResponse : public KeymasterResponse { 56da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden size_t NonErrorSerializedSize() const { return 1; } 57da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden uint8_t* NonErrorSerialize(uint8_t* buf, const uint8_t* /* end */) const { 58da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden *buf++ = 0; 59da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden return buf; 60da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden } 61da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden bool NonErrorDeserialize(const uint8_t** buf_ptr, const uint8_t* end) { 62da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden if (*buf_ptr >= end) 63da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden return false; 64da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, **buf_ptr); 65da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden (*buf_ptr)++; 66da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden return true; 67da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden } 68da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden}; 69da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 70da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, EmptyKeymasterResponse) { 71da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EmptyKeymasterResponse msg; 72da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.error = KM_ERROR_OK; 73da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 74da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<EmptyKeymasterResponse> deserialized(round_trip(msg, 5)); 75da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 76da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 77da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, EmptyKeymasterResponseError) { 78da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EmptyKeymasterResponse msg; 79da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.error = KM_ERROR_MEMORY_ALLOCATION_FAILED; 80da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 81da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<EmptyKeymasterResponse> deserialized(round_trip(msg, 4)); 82da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 83da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 84da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, SupportedAlgorithmsResponse) { 85da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden SupportedAlgorithmsResponse rsp; 86da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden keymaster_algorithm_t algorithms[] = {KM_ALGORITHM_RSA, KM_ALGORITHM_DSA, KM_ALGORITHM_ECDSA}; 87da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden rsp.error = KM_ERROR_OK; 88da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden rsp.algorithms = dup_array(algorithms); 89da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden rsp.algorithms_length = array_length(algorithms); 90da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 91da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<SupportedAlgorithmsResponse> deserialized(round_trip(rsp, 20)); 92da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(array_length(algorithms), deserialized->algorithms_length); 93da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp(deserialized->algorithms, algorithms, array_size(algorithms))); 94128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden} 95128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 96da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, SupportedResponse) { 97da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden SupportedResponse<keymaster_digest_t> rsp; 98da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden keymaster_digest_t digests[] = {KM_DIGEST_NONE, KM_DIGEST_MD5, KM_DIGEST_SHA1}; 99da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden rsp.error = KM_ERROR_OK; 100da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden rsp.SetResults(digests); 101da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 102da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<SupportedResponse<keymaster_digest_t>> deserialized(round_trip(rsp, 20)); 103da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(array_length(digests), deserialized->results_length); 104da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp(deserialized->results, digests, array_size(digests))); 105da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 106da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 107da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willdenstatic keymaster_key_param_t params[] = { 108da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden Authorization(TAG_PURPOSE, KM_PURPOSE_SIGN), Authorization(TAG_PURPOSE, KM_PURPOSE_VERIFY), 109da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden Authorization(TAG_ALGORITHM, KM_ALGORITHM_RSA), Authorization(TAG_USER_ID, 7), 110da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden Authorization(TAG_USER_AUTH_ID, 8), Authorization(TAG_APPLICATION_ID, "app_id", 6), 111da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden Authorization(TAG_AUTH_TIMEOUT, 300), 112da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden}; 113128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willdenuint8_t TEST_DATA[] = "a key blob"; 114128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 115da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, GenerateKeyRequest) { 116da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden GenerateKeyRequest req; 117da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden req.key_description.Reinitialize(params, array_length(params)); 118da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<GenerateKeyRequest> deserialized(round_trip(req, 78)); 119da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(deserialized->key_description, req.key_description); 120da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 121da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 122da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, GenerateKeyResponse) { 123128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden GenerateKeyResponse rsp; 124128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden rsp.error = KM_ERROR_OK; 125128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden rsp.key_blob.key_material = dup_array(TEST_DATA); 126128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden rsp.key_blob.key_material_size = array_length(TEST_DATA); 127128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden rsp.enforced.Reinitialize(params, array_length(params)); 128128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 129f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden UniquePtr<GenerateKeyResponse> deserialized(round_trip(rsp, 109)); 130da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(KM_ERROR_OK, deserialized->error); 131da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(deserialized->enforced, rsp.enforced); 132da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(deserialized->unenforced, rsp.unenforced); 133da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 134128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 135da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, GenerateKeyResponseTestError) { 136128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden GenerateKeyResponse rsp; 137128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden rsp.error = KM_ERROR_UNSUPPORTED_ALGORITHM; 138128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden rsp.key_blob.key_material = dup_array(TEST_DATA); 139128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden rsp.key_blob.key_material_size = array_length(TEST_DATA); 140128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden rsp.enforced.Reinitialize(params, array_length(params)); 141128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 142da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<GenerateKeyResponse> deserialized(round_trip(rsp, 4)); 143da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(KM_ERROR_UNSUPPORTED_ALGORITHM, deserialized->error); 144da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0U, deserialized->enforced.size()); 145da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0U, deserialized->unenforced.size()); 146da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0U, deserialized->key_blob.key_material_size); 147da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 148da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 149da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, GetKeyCharacteristicsRequest) { 150da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden GetKeyCharacteristicsRequest req; 151da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden req.additional_params.Reinitialize(params, array_length(params)); 152da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden req.SetKeyMaterial("foo", 3); 153128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 154f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden UniquePtr<GetKeyCharacteristicsRequest> deserialized(round_trip(req, 85)); 155da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(7U, deserialized->additional_params.size()); 156da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(3U, deserialized->key_blob.key_material_size); 157da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp(deserialized->key_blob.key_material, "foo", 3)); 158da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 159128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 160da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, GetKeyCharacteristicsResponse) { 161da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden GetKeyCharacteristicsResponse msg; 162da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.error = KM_ERROR_OK; 163da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.enforced.Reinitialize(params, array_length(params)); 164da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.unenforced.Reinitialize(params, array_length(params)); 165da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 166f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden UniquePtr<GetKeyCharacteristicsResponse> deserialized(round_trip(msg, 160)); 167da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.enforced, deserialized->enforced); 168da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.unenforced, deserialized->unenforced); 169da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 170da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 171da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, BeginOperationRequest) { 172da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden BeginOperationRequest msg; 173da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.purpose = KM_PURPOSE_SIGN; 174da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.SetKeyMaterial("foo", 3); 175da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.additional_params.Reinitialize(params, array_length(params)); 176da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 177da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<BeginOperationRequest> deserialized(round_trip(msg, 89)); 178da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(KM_PURPOSE_SIGN, deserialized->purpose); 179da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(3U, deserialized->key_blob.key_material_size); 180da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp(deserialized->key_blob.key_material, "foo", 3)); 181da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.additional_params, deserialized->additional_params); 182da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 183da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 184da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, BeginOperationResponse) { 185da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden BeginOperationResponse msg; 186da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.error = KM_ERROR_OK; 187da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.op_handle = 0xDEADBEEF; 188da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 189da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<BeginOperationResponse> deserialized(round_trip(msg, 12)); 190da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(KM_ERROR_OK, deserialized->error); 191da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0xDEADBEEF, deserialized->op_handle); 192da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 193da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 194da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, BeginOperationResponseError) { 195da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden BeginOperationResponse msg; 196da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.error = KM_ERROR_INVALID_OPERATION_HANDLE; 197da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.op_handle = 0xDEADBEEF; 198da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 199da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<BeginOperationResponse> deserialized(round_trip(msg, 4)); 200da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(KM_ERROR_INVALID_OPERATION_HANDLE, deserialized->error); 201da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 202da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 203da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, UpdateOperationRequest) { 204da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UpdateOperationRequest msg; 205da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.op_handle = 0xDEADBEEF; 206da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.input.Reinitialize("foo", 3); 207da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 208da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<UpdateOperationRequest> deserialized(round_trip(msg, 15)); 209da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(3U, deserialized->input.available_read()); 210da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp(deserialized->input.peek_read(), "foo", 3)); 211da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 212da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 213da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, UpdateOperationResponse) { 214da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UpdateOperationResponse msg; 215da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.error = KM_ERROR_OK; 216da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.output.Reinitialize("foo", 3); 217da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 218da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<UpdateOperationResponse> deserialized(round_trip(msg, 11)); 219da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(KM_ERROR_OK, deserialized->error); 220da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(3U, deserialized->output.available_read()); 221da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp(deserialized->output.peek_read(), "foo", 3)); 222da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 223da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 224da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, FinishOperationRequest) { 225da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden FinishOperationRequest msg; 226da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.op_handle = 0xDEADBEEF; 227da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.signature.Reinitialize("bar", 3); 228da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 229da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<FinishOperationRequest> deserialized(round_trip(msg, 15)); 230da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0xDEADBEEF, deserialized->op_handle); 231da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(3U, deserialized->signature.available_read()); 232da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp(deserialized->signature.peek_read(), "bar", 3)); 233da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 234da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 235da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(Round_Trip, FinishOperationResponse) { 236da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden FinishOperationResponse msg; 237da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.error = KM_ERROR_OK; 238da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.output.Reinitialize("foo", 3); 239da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 240da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<FinishOperationResponse> deserialized(round_trip(msg, 11)); 241da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.error, deserialized->error); 242da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.output.available_read(), deserialized->output.available_read()); 243da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp(msg.output.peek_read(), deserialized->output.peek_read(), 244da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.output.available_read())); 245da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 246da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 247da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, ImportKeyRequest) { 248da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden ImportKeyRequest msg; 249437fbd195e7de57b7dc0c449c04458bd90ef50deShawn Willden msg.key_description.Reinitialize(params, array_length(params)); 250da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.key_format = KM_KEY_FORMAT_X509; 251da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.SetKeyMaterial("foo", 3); 252da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 253f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden UniquePtr<ImportKeyRequest> deserialized(round_trip(msg, 89)); 254437fbd195e7de57b7dc0c449c04458bd90ef50deShawn Willden EXPECT_EQ(msg.key_description, deserialized->key_description); 255da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.key_format, deserialized->key_format); 256da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.key_data_length, deserialized->key_data_length); 257da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp(msg.key_data, deserialized->key_data, msg.key_data_length)); 258da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 259da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 260da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, ImportKeyResponse) { 261da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden ImportKeyResponse msg; 262da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.error = KM_ERROR_OK; 263da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.SetKeyMaterial("foo", 3); 264da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.enforced.Reinitialize(params, array_length(params)); 265da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.unenforced.Reinitialize(params, array_length(params)); 266da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 267f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden UniquePtr<ImportKeyResponse> deserialized(round_trip(msg, 167)); 268da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.error, deserialized->error); 269da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.key_blob.key_material_size, deserialized->key_blob.key_material_size); 270da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp(msg.key_blob.key_material, deserialized->key_blob.key_material, 271da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.key_blob.key_material_size)); 272da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.enforced, deserialized->enforced); 273da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.unenforced, deserialized->unenforced); 274da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 275da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 276da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, ExportKeyRequest) { 277da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden ExportKeyRequest msg; 278da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.additional_params.Reinitialize(params, array_length(params)); 279da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.key_format = KM_KEY_FORMAT_X509; 280da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.SetKeyMaterial("foo", 3); 281da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 282f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden UniquePtr<ExportKeyRequest> deserialized(round_trip(msg, 89)); 283da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.additional_params, deserialized->additional_params); 284da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(msg.key_format, deserialized->key_format); 285da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(3U, deserialized->key_blob.key_material_size); 286da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp("foo", deserialized->key_blob.key_material, 3)); 287da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden} 288da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 289da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn WilldenTEST(RoundTrip, ExportKeyResponse) { 290da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden ExportKeyResponse msg; 291da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.error = KM_ERROR_OK; 292da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden msg.SetKeyMaterial("foo", 3); 293da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden 294da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden UniquePtr<ExportKeyResponse> deserialized(round_trip(msg, 11)); 295da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(3U, deserialized->key_data_length); 296da8485ea42e53839579575ec9fc2b49f7cf1a1f9Shawn Willden EXPECT_EQ(0, memcmp("foo", deserialized->key_data, 3)); 297128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden} 298128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden 299f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willdenuint8_t msgbuf[] = { 300f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 220, 88, 183, 255, 71, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 0, 173, 0, 0, 0, 228, 174, 98, 187, 191, 135, 253, 200, 51, 230, 114, 247, 151, 109, 302f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 237, 79, 87, 32, 94, 5, 204, 46, 154, 30, 91, 6, 103, 148, 254, 129, 65, 171, 228, 303f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 167, 224, 163, 9, 15, 206, 90, 58, 11, 205, 55, 211, 33, 87, 178, 149, 91, 28, 236, 304f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 218, 112, 231, 34, 82, 82, 134, 103, 137, 115, 27, 156, 102, 159, 220, 226, 89, 42, 25, 305f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 37, 9, 84, 239, 76, 161, 198, 72, 167, 163, 39, 91, 148, 191, 17, 191, 87, 169, 179, 306f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 136, 10, 194, 154, 4, 40, 107, 109, 61, 161, 20, 176, 247, 13, 214, 106, 229, 45, 17, 307f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 5, 60, 189, 64, 39, 166, 208, 14, 57, 25, 140, 148, 25, 177, 246, 189, 43, 181, 88, 308f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 204, 29, 126, 224, 100, 143, 93, 60, 57, 249, 55, 0, 87, 83, 227, 224, 166, 59, 214, 309f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 81, 144, 129, 58, 6, 57, 46, 254, 232, 41, 220, 209, 230, 167, 138, 158, 94, 180, 125, 310f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 247, 26, 162, 116, 238, 202, 187, 100, 65, 13, 180, 44, 245, 159, 83, 161, 176, 58, 72, 311f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 236, 109, 105, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 0, 11, 0, 0, 0, 98, 0, 0, 0, 1, 0, 0, 32, 2, 0, 0, 0, 1, 0, 313f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 0, 32, 3, 0, 0, 0, 2, 0, 0, 16, 1, 0, 0, 0, 3, 0, 0, 48, 0, 314f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 1, 0, 0, 200, 0, 0, 80, 3, 0, 0, 0, 0, 0, 0, 0, 244, 1, 0, 112, 315f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 1, 246, 1, 0, 112, 1, 189, 2, 0, 96, 144, 178, 236, 250, 255, 255, 255, 255, 145, 316f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 1, 0, 96, 144, 226, 33, 60, 222, 2, 0, 0, 189, 2, 0, 96, 0, 0, 0, 0, 317f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 0, 0, 0, 0, 190, 2, 0, 16, 1, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 318f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 11, 0, 319f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 0, 0, 98, 0, 0, 0, 1, 0, 0, 32, 2, 0, 0, 0, 1, 0, 0, 32, 3, 320f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 0, 0, 0, 2, 0, 0, 16, 1, 0, 0, 0, 3, 0, 0, 48, 0, 1, 0, 0, 321f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 200, 0, 0, 80, 3, 0, 0, 0, 0, 0, 0, 0, 244, 1, 0, 112, 1, 246, 1, 322f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 0, 112, 1, 189, 2, 0, 96, 144, 178, 236, 250, 255, 255, 255, 255, 145, 1, 0, 96, 323f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 144, 226, 33, 60, 222, 2, 0, 0, 189, 2, 0, 96, 0, 0, 0, 0, 0, 0, 0, 324f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 0, 190, 2, 0, 16, 1, 0, 0, 0, 325f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden}; 326f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 327f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden/* 328f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden * These tests don't have any assertions or expectations. They just try to parse garbage, to see if 329f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden * the result will be a crash. This is especially informative when run under Valgrind memcheck. 330f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden */ 331f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 332f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willdentemplate <typename Message> void parse_garbage() { 333f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden Message msg; 334f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden const uint8_t* end = msgbuf + array_length(msgbuf); 335f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden for (size_t i = 0; i < array_length(msgbuf); ++i) { 336f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden const uint8_t* begin = msgbuf + i; 337f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden const uint8_t* p = begin; 338f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden msg.Deserialize(&p, end); 339f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden } 340f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden} 341f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 342f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden#define GARBAGE_TEST(Message) \ 343f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden TEST(GarbageTest, Message) { parse_garbage<Message>(); } 344f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 345f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(SupportedAlgorithmsResponse) 346f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(GenerateKeyRequest); 347f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(GenerateKeyResponse); 348f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(GetKeyCharacteristicsRequest); 349f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(GetKeyCharacteristicsResponse); 350f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(BeginOperationRequest); 351f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(BeginOperationResponse); 352f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(UpdateOperationRequest); 353f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(UpdateOperationResponse); 354f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(FinishOperationRequest); 355f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(FinishOperationResponse); 356f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden// GARBAGE_TEST(AddEntropyRequest); 357f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(ImportKeyRequest); 358f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(ImportKeyResponse); 359f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(ExportKeyRequest); 360f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenGARBAGE_TEST(ExportKeyResponse); 361f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden// GARBAGE_TEST(RescopeRequest); 362f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden// GARBAGE_TEST(RescopeResponse); 363f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 364f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden// The macro doesn't work on this one. 365f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn WilldenTEST(GarbageTest, SupportedResponse) { 366f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden parse_garbage<SupportedResponse<keymaster_digest_t>>(); 367f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden} 368f2282b3c6690ccfaa7878886f01693ef4f0b3bedShawn Willden 369128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden} // namespace test 370128ffe07c723d8ffe2d5ea528ba5f64436c8a55aShawn Willden} // namespace keymaster 371