1b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales/*
2b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * Copyright (C) 2012 The Android Open Source Project
3b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales *
4b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * Licensed under the Apache License, Version 2.0 (the "License");
5b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * you may not use this file except in compliance with the License.
6b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * You may obtain a copy of the License at
7b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales *
8b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales *      http://www.apache.org/licenses/LICENSE-2.0
9b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales *
10b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * Unless required by applicable law or agreed to in writing, software
11b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * distributed under the License is distributed on an "AS IS" BASIS,
12b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * See the License for the specific language governing permissions and
14b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * limitations under the License.
15b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales */
16b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales
17b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales#pragma once
18b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales
19b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales#define KEYMASTER_PORT "com.android.trusty.keymaster"
20b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales#define KEYMASTER_MAX_BUFFER_LENGTH 4096
21b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales
22b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales// Commands
23b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesenum keymaster_command {
24b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales	KEYMASTER_RESP_BIT              = 1,
25b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales	KEYMASTER_REQ_SHIFT             = 1,
26b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales
27b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_GENERATE_KEY                 = (0 << KEYMASTER_REQ_SHIFT),
28b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_BEGIN_OPERATION              = (1 << KEYMASTER_REQ_SHIFT),
29b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_UPDATE_OPERATION             = (2 << KEYMASTER_REQ_SHIFT),
30b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_FINISH_OPERATION             = (3 << KEYMASTER_REQ_SHIFT),
31b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_ABORT_OPERATION              = (4 << KEYMASTER_REQ_SHIFT),
32b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_IMPORT_KEY                   = (5 << KEYMASTER_REQ_SHIFT),
33b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_EXPORT_KEY                   = (6 << KEYMASTER_REQ_SHIFT),
34b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_GET_VERSION                  = (7 << KEYMASTER_REQ_SHIFT),
35b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_ADD_RNG_ENTROPY              = (8 << KEYMASTER_REQ_SHIFT),
36b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_GET_SUPPORTED_ALGORITHMS     = (9 << KEYMASTER_REQ_SHIFT),
37b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_GET_SUPPORTED_BLOCK_MODES    = (10 << KEYMASTER_REQ_SHIFT),
38b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_GET_SUPPORTED_PADDING_MODES  = (11 << KEYMASTER_REQ_SHIFT),
39b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_GET_SUPPORTED_DIGESTS        = (12 << KEYMASTER_REQ_SHIFT),
40b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_GET_SUPPORTED_IMPORT_FORMATS = (13 << KEYMASTER_REQ_SHIFT),
41b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_GET_SUPPORTED_EXPORT_FORMATS = (14 << KEYMASTER_REQ_SHIFT),
42b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales    KM_GET_KEY_CHARACTERISTICS      = (15 << KEYMASTER_REQ_SHIFT),
43b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales};
44b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales
45b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales#ifdef __ANDROID__
46b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales
47b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales/**
48b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * keymaster_message - Serial header for communicating with KM server
49b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * @cmd: the command, one of keymaster_command.
50b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales * @payload: start of the serialized command specific payload
51b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales */
52b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Moralesstruct keymaster_message {
53b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales	uint32_t cmd;
54b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales	uint8_t payload[0];
55b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales};
56b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales
57b33c9b8ffa5e687a08311eae917c50fd615020d0Andres Morales#endif
58