blob: 52a895e4904d6b42807f7f27aa5b53ce2245544d [file] [log] [blame]
Juan Castillo8e55d932015-04-02 09:48:16 +01001/*
2 * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * Redistributions of source code must retain the above copyright notice, this
8 * list of conditions and the following disclaimer.
9 *
10 * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 *
14 * Neither the name of ARM nor the names of its contributors may be used
15 * to endorse or promote products derived from this software without specific
16 * prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#ifndef __AUTH_COMMON_H__
32#define __AUTH_COMMON_H__
33
34/*
35 * Authentication framework common types
36 */
37
38/*
39 * Type of parameters that can be extracted from an image and
40 * used for authentication
41 */
42typedef enum auth_param_type_enum {
43 AUTH_PARAM_NONE,
44 AUTH_PARAM_RAW_DATA, /* Raw image data */
45 AUTH_PARAM_SIG, /* The image signature */
46 AUTH_PARAM_SIG_ALG, /* The image signature algorithm */
47 AUTH_PARAM_HASH, /* A hash (including the algorithm) */
48 AUTH_PARAM_PUB_KEY, /* A public key */
49} auth_param_type_t;
50
51/*
52 * Defines an authentication parameter. The cookie will be interpreted by the
53 * image parser module.
54 */
55typedef struct auth_param_type_desc_s {
56 auth_param_type_t type;
57 void *cookie;
58} auth_param_type_desc_t;
59
60/*
61 * Store a pointer to the authentication parameter and its length
62 */
63typedef struct auth_param_data_desc_s {
64 void *ptr;
65 unsigned int len;
66} auth_param_data_desc_t;
67
68/*
69 * Authentication parameter descriptor, including type and value
70 */
71typedef struct auth_param_desc_s {
72 auth_param_type_desc_t *type_desc;
73 auth_param_data_desc_t data;
74} auth_param_desc_t;
75
76/*
77 * The method type defines how an image is authenticated
78 */
79typedef enum auth_method_type_enum {
80 AUTH_METHOD_NONE = 0,
81 AUTH_METHOD_HASH, /* Authenticate by hash matching */
82 AUTH_METHOD_SIG, /* Authenticate by PK operation */
83 AUTH_METHOD_NUM /* Number of methods */
84} auth_method_type_t;
85
86/*
87 * Parameters for authentication by hash matching
88 */
89typedef struct auth_method_param_hash_s {
90 auth_param_type_desc_t *data; /* Data to hash */
91 auth_param_type_desc_t *hash; /* Hash to match with */
92} auth_method_param_hash_t;
93
94/*
95 * Parameters for authentication by signature
96 */
97typedef struct auth_method_param_sig_s {
98 auth_param_type_desc_t *pk; /* Public key */
99 auth_param_type_desc_t *sig; /* Signature to check */
100 auth_param_type_desc_t *alg; /* Signature algorithm */
101 auth_param_type_desc_t *data; /* Data signed */
102} auth_method_param_sig_t;
103
104/*
105 * Parameters for authentication by NV counter
106 */
107typedef struct auth_method_param_nv_ctr_s {
108 auth_param_type_desc_t *nv_ctr; /* NV counter value */
109} auth_method_param_nv_ctr_t;
110
111/*
112 * Authentication method descriptor
113 */
114typedef struct auth_method_desc_s {
115 auth_method_type_t type;
116 union {
117 auth_method_param_hash_t hash;
118 auth_method_param_sig_t sig;
119 auth_method_param_nv_ctr_t nv_ctr;
120 } param;
121} auth_method_desc_t;
122
123/*
124 * Helper macro to define an authentication parameter type descriptor
125 */
126#define AUTH_PARAM_TYPE_DESC(_type, _cookie) \
127 { \
128 .type = _type, \
129 .cookie = (void *)_cookie \
130 }
131
132/*
133 * Helper macro to define an authentication parameter data descriptor
134 */
135#define AUTH_PARAM_DATA_DESC(_ptr, _len) \
136 { \
137 .ptr = (void *)_ptr, \
138 .len = (unsigned int)_len \
139 }
140
141#endif /* __AUTH_COMMON_H__ */