/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __KEYSTORE_H__ #define __KEYSTORE_H__ #include <stdint.h> // note state values overlap with ResponseCode for the purposes of the state() API enum State { STATE_NO_ERROR = 1, STATE_LOCKED = 2, STATE_UNINITIALIZED = 3, }; enum ResponseCode { NO_ERROR = STATE_NO_ERROR, // 1 LOCKED = STATE_LOCKED, // 2 UNINITIALIZED = STATE_UNINITIALIZED, // 3 SYSTEM_ERROR = 4, PROTOCOL_ERROR = 5, PERMISSION_DENIED = 6, KEY_NOT_FOUND = 7, VALUE_CORRUPTED = 8, UNDEFINED_ACTION = 9, WRONG_PASSWORD_0 = 10, WRONG_PASSWORD_1 = 11, WRONG_PASSWORD_2 = 12, WRONG_PASSWORD_3 = 13, // MAX_RETRY = 4 SIGNATURE_INVALID = 14, }; enum CommandNames { TEST = 0, GET = 1, INSERT = 2, DELETE = 3, EXIST = 4, SAW = 5, RESET = 6, PASSWORD = 7, LOCK = 8, UNLOCK = 9, ZERO = 10, GENERATE = 11, IMPORT = 12, SIGN = 13, VERIFY = 14, GET_PUBKEY = 15, DEL_KEY = 16, GRANT = 17, UNGRANT = 18, }; typedef uint8_t command_code_t; // Taken: a b c d e f g h i j k l m n o p q r s t u v w x y z // * * * * * * * * * * * * * * * * * * command_code_t CommandCodes[] = { 't', // TEST 'g', // GET 'i', // INSERT 'd', // DELETE 'e', // EXIST 's', // SAW 'r', // RESET 'p', // PASSWORD 'l', // LOCK 'u', // UNLOCK 'z', // ZERO 'a', // GENERATE 'm', // IMPORT 'n', // SIGN 'v', // VERIFY 'b', // GET_PUBKEY 'k', // DEL_KEY 'x', // GRANT 'y', // UNGRANT }; /** * Returns the size of the softkey magic header value for measuring * and allocating purposes. */ size_t get_softkey_header_size(); /** * Adds the magic softkey header to a key blob. * * Returns NULL if the destination array is too small. Otherwise it * returns the offset directly after the magic value. */ uint8_t* add_softkey_header(uint8_t* key_blob, size_t key_blob_length); /** * Returns true if the key blob has a magic softkey header at the beginning. */ bool is_softkey(const uint8_t* key_blob, const size_t key_blob_length); #endif