crypto: move includes to kern/include
[akaros.git] / kern / include / crypto / 2misc.h
1 /* Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
2  * Use of this source code is governed by a BSD-style license that can be
3  * found in the LICENSE file.
4  *
5  * Misc functions which need access to vb2_context but are not public APIs
6  */
7
8 #ifndef VBOOT_REFERENCE_VBOOT_2MISC_H_
9 #define VBOOT_REFERENCE_VBOOT_2MISC_H_
10
11 #include "2api.h"
12
13 struct vb2_gbb_header;
14 struct vb2_workbuf;
15
16 /**
17  * Get the shared data pointer from the vboot context
18  *
19  * @param ctx           Vboot context
20  * @return The shared data pointer.
21  */
22 static __inline struct vb2_shared_data *vb2_get_sd(struct vb2_context *ctx) {
23         return (struct vb2_shared_data *)ctx->workbuf;
24 }
25
26 /**
27  * Validate gbb signature (the magic number)
28  *
29  * @param sig           Pointer to the signature bytes to validate
30  * @return VB2_SUCCESS if valid or non-zero if error.
31  */
32 int vb2_validate_gbb_signature(uint8_t *sig);
33
34 /**
35  * Initialize a work buffer from the vboot context.
36  *
37  * This sets the work buffer to the unused portion of the context work buffer.
38  *
39  * @param ctx           Vboot context
40  * @param wb            Work buffer to initialize
41  */
42 void vb2_workbuf_from_ctx(struct vb2_context *ctx, struct vb2_workbuf *wb);
43
44 /**
45  * Read the GBB header.
46  *
47  * @param ctx           Vboot context
48  * @param gbb           Destination for header
49  * @return VB2_SUCCESS, or non-zero if error.
50  */
51 int vb2_read_gbb_header(struct vb2_context *ctx, struct vb2_gbb_header *gbb);
52
53 /**
54  * Handle vboot failure.
55  *
56  * If the failure occurred after choosing a firmware slot, and the other
57  * firmware slot is not known-bad, try the other firmware slot after reboot.
58  *
59  * If the failure occurred before choosing a firmware slot, or both slots have
60  * failed in successive boots, request recovery.
61  *
62  * @param reason        Recovery reason
63  * @param subcode       Recovery subcode
64  */
65 void vb2_fail(struct vb2_context *ctx, uint8_t reason, uint8_t subcode);
66
67 /**
68  * Set up the verified boot context data, if not already set up.
69  *
70  * This uses ctx->workbuf_used=0 as a flag to indicate that the data has not
71  * yet been set up.  Caller must set that before calling any voot functions;
72  * see 2api.h.
73  *
74  * @param ctx           Vboot context to initialize
75  * @return VB2_SUCCESS, or error code on error.
76  */
77 int vb2_init_context(struct vb2_context *ctx);
78
79 /**
80  * Check for recovery reasons we can determine early in the boot process.
81  *
82  * On exit, check ctx->flags for VB2_CONTEXT_RECOVERY_MODE; if present, jump to
83  * the recovery path instead of continuing with normal boot.  This is the only
84  * direct path to recovery mode.  All other errors later in the boot process
85  * should induce a reboot instead of jumping to recovery, so that recovery mode
86  * starts from a consistent firmware state.
87  *
88  * @param ctx           Vboot context
89  */
90 void vb2_check_recovery(struct vb2_context *ctx);
91
92 /**
93  * Parse the GBB header.
94  *
95  * @param ctx           Vboot context
96  * @return VB2_SUCCESS, or error code on error.
97  */
98 int vb2_fw_parse_gbb(struct vb2_context *ctx);
99
100 /**
101  * Check developer switch position.
102  *
103  * @param ctx           Vboot context
104  * @return VB2_SUCCESS, or error code on error.
105  */
106 int vb2_check_dev_switch(struct vb2_context *ctx);
107
108 /**
109  * Check if we need to clear the TPM owner.
110  *
111  * @param ctx           Vboot context
112  * @return VB2_SUCCESS, or error code on error.
113  */
114 int vb2_check_tpm_clear(struct vb2_context *ctx);
115
116 /**
117  * Decide which firmware slot to try this boot.
118  *
119  * @param ctx           Vboot context
120  * @return VB2_SUCCESS, or error code on error.
121  */
122 int vb2_select_fw_slot(struct vb2_context *ctx);
123
124 /**
125  * Verify the firmware keyblock using the root key.
126  *
127  * After this call, the data key is stored in the work buffer.
128  *
129  * @param ctx           Vboot context
130  * @return VB2_SUCCESS, or error code on error.
131  */
132 int vb2_load_fw_keyblock(struct vb2_context *ctx);
133 int vb21_load_fw_keyblock(struct vb2_context *ctx);
134
135 /**
136  * Verify the firmware preamble using the data subkey from the keyblock.
137  *
138  * After this call, the preamble is stored in the work buffer.
139  *
140  * @param ctx           Vboot context
141  * @return VB2_SUCCESS, or error code on error.
142  */
143 int vb2_load_fw_preamble(struct vb2_context *ctx);
144 int vb21_load_fw_preamble(struct vb2_context *ctx);
145
146 /**
147  * Verify the kernel keyblock using the previously-loaded kernel key.
148  *
149  * After this call, the data key is stored in the work buffer.
150  *
151  * @param ctx           Vboot context
152  * @return VB2_SUCCESS, or error code on error.
153  */
154 int vb2_load_kernel_keyblock(struct vb2_context *ctx);
155
156 /**
157  * Verify the kernel preamble using the data subkey from the keyblock.
158  *
159  * After this call, the preamble is stored in the work buffer.
160  *
161  * @param ctx           Vboot context
162  * @return VB2_SUCCESS, or error code on error.
163  */
164 int vb2_load_kernel_preamble(struct vb2_context *ctx);
165
166 #endif  /* VBOOT_REFERENCE_VBOOT_2MISC_H_ */