Kenny Root | a91203b | 2012-02-15 15:00:46 -0800 | [diff] [blame] | 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 | |
Kenny Root | 5187818 | 2012-03-13 12:53:19 -0700 | [diff] [blame] | 20 | #include <stdint.h> |
| 21 | |
Kenny Root | a91203b | 2012-02-15 15:00:46 -0800 | [diff] [blame] | 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 |
Kenny Root | 70e3a86 | 2012-02-15 17:20:23 -0800 | [diff] [blame] | 43 | SIGNATURE_INVALID = 14, |
Kenny Root | a91203b | 2012-02-15 15:00:46 -0800 | [diff] [blame] | 44 | }; |
| 45 | |
Kenny Root | 5187818 | 2012-03-13 12:53:19 -0700 | [diff] [blame] | 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, |
Kenny Root | 70e3a86 | 2012-02-15 17:20:23 -0800 | [diff] [blame] | 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, |
Kenny Root | 5187818 | 2012-03-13 12:53:19 -0700 | [diff] [blame] | 66 | }; |
| 67 | |
| 68 | typedef uint8_t command_code_t; |
| 69 | |
Kenny Root | 70e3a86 | 2012-02-15 17:20:23 -0800 | [diff] [blame] | 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 | // * * * * * * * * * * * * * * * * * * |
Kenny Root | 5187818 | 2012-03-13 12:53:19 -0700 | [diff] [blame] | 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 |
Kenny Root | 70e3a86 | 2012-02-15 17:20:23 -0800 | [diff] [blame] | 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 |
Kenny Root | 5187818 | 2012-03-13 12:53:19 -0700 | [diff] [blame] | 92 | }; |
| 93 | |
Kenny Root | 822c3a9 | 2012-03-23 16:34:39 -0700 | [diff] [blame] | 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 | |
Kenny Root | a91203b | 2012-02-15 15:00:46 -0800 | [diff] [blame] | 113 | #endif |