169a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// Copyright 2015 The Android Open Source Project
269a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn//
369a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// Licensed under the Apache License, Version 2.0 (the "License");
469a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// you may not use this file except in compliance with the License.
569a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// You may obtain a copy of the License at
669a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn//
769a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn//      http://www.apache.org/licenses/LICENSE-2.0
869a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn//
969a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// Unless required by applicable law or agreed to in writing, software
1069a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// distributed under the License is distributed on an "AS IS" BASIS,
1169a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1269a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// See the License for the specific language governing permissions and
1369a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// limitations under the License.
1469a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn
1569a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn#ifndef KEYSTORE_KEYSTORE_CLIENT_MOCK_H_
1669a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn#define KEYSTORE_KEYSTORE_CLIENT_MOCK_H_
1769a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn
1869a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn#include "gmock/gmock.h"
1969a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn#include "keystore/keystore_client.h"
2069a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn
2169a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahnusing testing::_;
2269a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn
2369a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahnnamespace keystore {
2469a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn
2569a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// A mock implementation of KeystoreClient. By default all methods do nothing
2669a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn// and return KM_ERROR_OK (or false).
2769a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahnclass KeystoreClientMock : public KeystoreClient {
2869a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn  public:
2969a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    KeystoreClientMock() = default;
3069a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    ~KeystoreClientMock() = default;
3169a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn
32251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn    MOCK_METHOD3(encryptWithAuthentication,
33251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn                 bool(const std::string& key_name, const std::string& data,
34251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn                      std::string* encrypted_data));
35251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn    MOCK_METHOD3(decryptWithAuthentication,
36251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn                 bool(const std::string& key_name, const std::string& encrypted_data,
37251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn                      std::string* data));
38251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn    MOCK_METHOD7(oneShotOperation,
39251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn                 bool(keymaster_purpose_t purpose, const std::string& key_name,
40251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn                      const keymaster::AuthorizationSet& input_parameters,
41251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn                      const std::string& input_data, const std::string& signature_to_verify,
42251cb28132e456f81374c8f8a983a5a9ad9aaee8Darren Krahn                      keymaster::AuthorizationSet* output_parameters, std::string* output_data));
4369a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD1(addRandomNumberGeneratorEntropy, int32_t(const std::string& entropy));
4469a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD4(generateKey,
4569a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                 int32_t(const std::string& key_name,
4669a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         const keymaster::AuthorizationSet& key_parameters,
4769a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         keymaster::AuthorizationSet* hardware_enforced_characteristics,
4869a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         keymaster::AuthorizationSet* software_enforced_characteristics));
4969a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD3(getKeyCharacteristics,
5069a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                 int32_t(const std::string& key_name,
5169a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         keymaster::AuthorizationSet* hardware_enforced_characteristics,
5269a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         keymaster::AuthorizationSet* software_enforced_characteristics));
5369a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD6(importKey,
5469a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                 int32_t(const std::string& key_name,
5569a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         const keymaster::AuthorizationSet& key_parameters,
5669a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         keymaster_key_format_t key_format, const std::string& key_data,
5769a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         keymaster::AuthorizationSet* hardware_enforced_characteristics,
5869a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         keymaster::AuthorizationSet* software_enforced_characteristics));
5969a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD3(exportKey, int32_t(keymaster_key_format_t export_format,
6069a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                                    const std::string& key_name, std::string* export_data));
6169a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD1(deleteKey, int32_t(const std::string& key_name));
6269a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD0(deleteAllKeys, int32_t());
6369a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD5(beginOperation, int32_t(keymaster_purpose_t purpose, const std::string& key_name,
6469a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                                         const keymaster::AuthorizationSet& input_parameters,
6569a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                                         keymaster::AuthorizationSet* output_parameters,
6669a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                                         keymaster_operation_handle_t* handle));
6769a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD6(updateOperation,
6869a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                 int32_t(keymaster_operation_handle_t handle,
6969a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         const keymaster::AuthorizationSet& input_parameters,
7069a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         const std::string& input_data, size_t* num_input_bytes_consumed,
7169a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         keymaster::AuthorizationSet* output_parameters, std::string* output_data));
7269a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD5(finishOperation,
7369a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                 int32_t(keymaster_operation_handle_t handle,
7469a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         const keymaster::AuthorizationSet& input_parameters,
7569a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         const std::string& signature_to_verify,
7669a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                         keymaster::AuthorizationSet* output_parameters, std::string* output_data));
7769a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD1(abortOperation, int32_t(keymaster_operation_handle_t handle));
7869a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD1(doesKeyExist, bool(const std::string& key_name));
7969a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    MOCK_METHOD2(listKeys,
8069a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn                 bool(const std::string& prefix, std::vector<std::string>* key_name_list));
8169a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn
8269a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn  private:
8369a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn    DISALLOW_COPY_AND_ASSIGN(KeystoreClientMock);
8469a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn};
8569a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn
8669a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn}  // namespace keystore
8769a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn
8869a3dbc2bbbe0b304eb91376ff7f79c8bde995a1Darren Krahn#endif  // KEYSTORE_KEYSTORE_CLIENT_MOCK_H_
89