1 /*
2  * Copyright (C) 2016-2017 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 #pragma once
17 
18 #include <lk/compiler.h>
19 #include <sys/types.h>
20 #include <uapi/trusty_uuid.h>
21 
22 struct hwkey_keyslot {
23     const char* key_id;
24     const uuid_t* uuid;
25     const void* priv;
26     uint32_t (*handler)(const struct hwkey_keyslot* slot,
27                         uint8_t* kbuf,
28                         size_t kbuf_len,
29                         size_t* klen);
30 };
31 
32 __BEGIN_CDECLS
33 
34 void hwkey_init_srv_provider(void);
35 
36 void hwkey_install_keys(const struct hwkey_keyslot* keys, unsigned int kcnt);
37 
38 int hwkey_start_service(void);
39 
40 uint32_t derive_key_v1(const uuid_t* uuid,
41                        const uint8_t* ikm_data,
42                        size_t ikm_len,
43                        uint8_t* key_data,
44                        size_t* key_len);
45 
46 __END_CDECLS
47