blob: dcb6032a64e43f38fadb9ab9e412fd7fc92c2136 [file] [log] [blame]
/*
* 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,
OP_AUTH_NEEDED = 15, // Auth is needed for this operation before it can be used.
};
/*
* All the flags for import and insert calls.
*/
enum {
KEYSTORE_FLAG_NONE = 0,
KEYSTORE_FLAG_ENCRYPTED = 1 << 0,
KEYSTORE_FLAG_FALLBACK = 1 << 1,
};
/**
* 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