123d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden/* 223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * Copyright (C) 2015 The Android Open Source Project 323d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * 423d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * Licensed under the Apache License, Version 2.0 (the "License"); 523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * you may not use this file except in compliance with the License. 623d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * You may obtain a copy of the License at 723d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * 823d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * http://www.apache.org/licenses/LICENSE-2.0 923d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * 1023d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * Unless required by applicable law or agreed to in writing, software 1123d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * distributed under the License is distributed on an "AS IS" BASIS, 1223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1323d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * See the License for the specific language governing permissions and 1423d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden * limitations under the License. 1523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden */ 1623d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 1723d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden#ifndef SYSTEM_KEYMASTER_OPERATION_TABLE_H 1823d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden#define SYSTEM_KEYMASTER_OPERATION_TABLE_H 1923d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 20f38a002624126ca837865826f948edc9100d6e8aJanis Danisevskis#include <keymaster/UniquePtr.h> 2123d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 2223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden#include <hardware/keymaster_defs.h> 2323d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 2423d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willdennamespace keymaster { 2523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 26e30b8536b0d94874a2c0a9cc53df48a41ddf043bShawn Willdenclass KeymasterContext; 2723d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willdenclass Operation; 2823d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 2923d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willdenclass OperationTable { 3023d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden public: 315d5e42b081646208e134a96d0cb500e6b6e8f043Chih-Hung Hsieh explicit OperationTable(size_t table_size) : table_size_(table_size) {} 3223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 3323d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden struct Entry { 3423d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden Entry() { 3523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden handle = 0; 3623d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden operation = NULL; 3723d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden }; 3823d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden ~Entry(); 3923d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden keymaster_operation_handle_t handle; 4023d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden Operation* operation; 4123d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden }; 4223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 43e30b8536b0d94874a2c0a9cc53df48a41ddf043bShawn Willden keymaster_error_t Add(Operation* operation, const KeymasterContext& context, 44e30b8536b0d94874a2c0a9cc53df48a41ddf043bShawn Willden keymaster_operation_handle_t* op_handle); 4523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden Operation* Find(keymaster_operation_handle_t op_handle); 4623d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden bool Delete(keymaster_operation_handle_t); 4723d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 4823d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden private: 4923d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden UniquePtr<Entry[]> table_; 5023d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden size_t table_size_; 5123d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden}; 5223d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 5323d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden} // namespace keymaster 5423d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden 5523d4a742109fa29d6be20d3dc56a1b48797fe7b2Shawn Willden#endif // SYSTEM_KEYMASTER_OPERATION_TABLE_H 56