1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef __KEYSTORE_H__ 18 #define __KEYSTORE_H__ 19 20 #include <stdint.h> 21 22 // note state values overlap with ResponseCode for the purposes of the state() API 23 enum State { 24 STATE_NO_ERROR = 1, 25 STATE_LOCKED = 2, 26 STATE_UNINITIALIZED = 3, 27 }; 28 29 enum ResponseCode { 30 NO_ERROR = STATE_NO_ERROR, // 1 31 LOCKED = STATE_LOCKED, // 2 32 UNINITIALIZED = STATE_UNINITIALIZED, // 3 33 SYSTEM_ERROR = 4, 34 PROTOCOL_ERROR = 5, 35 PERMISSION_DENIED = 6, 36 KEY_NOT_FOUND = 7, 37 VALUE_CORRUPTED = 8, 38 UNDEFINED_ACTION = 9, 39 WRONG_PASSWORD_0 = 10, 40 WRONG_PASSWORD_1 = 11, 41 WRONG_PASSWORD_2 = 12, 42 WRONG_PASSWORD_3 = 13, // MAX_RETRY = 4 43 SIGNATURE_INVALID = 14, 44 }; 45 46 enum CommandNames { 47 TEST = 0, 48 GET = 1, 49 INSERT = 2, 50 DELETE = 3, 51 EXIST = 4, 52 SAW = 5, 53 RESET = 6, 54 PASSWORD = 7, 55 LOCK = 8, 56 UNLOCK = 9, 57 ZERO = 10, 58 GENERATE = 11, 59 IMPORT = 12, 60 SIGN = 13, 61 VERIFY = 14, 62 GET_PUBKEY = 15, 63 DEL_KEY = 16, 64 GRANT = 17, 65 UNGRANT = 18, 66 }; 67 68 typedef uint8_t command_code_t; 69 70 // 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 71 // * * * * * * * * * * * * * * * * * * 72 command_code_t CommandCodes[] = { 73 't', // TEST 74 'g', // GET 75 'i', // INSERT 76 'd', // DELETE 77 'e', // EXIST 78 's', // SAW 79 'r', // RESET 80 'p', // PASSWORD 81 'l', // LOCK 82 'u', // UNLOCK 83 'z', // ZERO 84 'a', // GENERATE 85 'm', // IMPORT 86 'n', // SIGN 87 'v', // VERIFY 88 'b', // GET_PUBKEY 89 'k', // DEL_KEY 90 'x', // GRANT 91 'y', // UNGRANT 92 }; 93 94 /** 95 * Returns the size of the softkey magic header value for measuring 96 * and allocating purposes. 97 */ 98 size_t get_softkey_header_size(); 99 100 /** 101 * Adds the magic softkey header to a key blob. 102 * 103 * Returns NULL if the destination array is too small. Otherwise it 104 * returns the offset directly after the magic value. 105 */ 106 uint8_t* add_softkey_header(uint8_t* key_blob, size_t key_blob_length); 107 108 /** 109 * Returns true if the key blob has a magic softkey header at the beginning. 110 */ 111 bool is_softkey(const uint8_t* key_blob, const size_t key_blob_length); 112 113 #endif 114