summaryrefslogtreecommitdiff
path: root/tests/vb2_convert_structs.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/vb2_convert_structs.c')
-rw-r--r--tests/vb2_convert_structs.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/vb2_convert_structs.c b/tests/vb2_convert_structs.c
new file mode 100644
index 00000000..fe74f85f
--- /dev/null
+++ b/tests/vb2_convert_structs.c
@@ -0,0 +1,57 @@
+/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Convert structs from vboot1 data format to new vboot2 structs
+ */
+
+#include "2sysincludes.h"
+#include "2common.h"
+#include "2rsa.h"
+#include "vb2_convert_structs.h"
+#include "vboot_struct.h" /* For old struct sizes */
+
+#include "test_common.h"
+
+struct vb2_packed_key2 *vb2_convert_packed_key2(
+ const struct vb2_packed_key *key,
+ const char *desc, uint32_t *out_size)
+{
+ struct vb2_packed_key2 k2 = {
+ .c.magic = VB2_MAGIC_PACKED_KEY2,
+ .c.struct_version_major = VB2_PACKED_KEY2_VERSION_MAJOR,
+ .c.struct_version_minor = VB2_PACKED_KEY2_VERSION_MINOR,
+ };
+ uint8_t *kbuf;
+
+ /* Calculate description size */
+ k2.c.desc_offset = sizeof(k2);
+ k2.c.desc_size = roundup32(strlen(desc) + 1);
+
+ /* Copy/initialize fields */
+ k2.key_offset = k2.c.desc_offset + k2.c.desc_size;
+ k2.key_size = key->key_size;
+ k2.key_version = key->key_version;
+ k2.sig_algorithm = vb2_crypto_to_signature(key->algorithm);
+ k2.hash_algorithm = vb2_crypto_to_hash(key->algorithm);
+ /* TODO: fill in a non-zero GUID */
+
+ /* Allocate the new buffer */
+ *out_size = k2.key_offset + k2.key_size;
+ kbuf = malloc(*out_size);
+ memset(kbuf, 0, *out_size);
+
+ /* Copy data into the buffer */
+ memcpy(kbuf, &k2, sizeof(k2));
+
+ /* strcpy() is safe because we allocated above based on strlen() */
+ strcpy((char *)(kbuf + k2.c.desc_offset), desc);
+ kbuf[k2.c.desc_offset + k2.c.desc_size - 1] = 0;
+
+ memcpy(kbuf + k2.key_offset,
+ (const uint8_t *)key + key->key_offset,
+ key->key_size);
+
+ /* Return the newly allocated buffer */
+ return (struct vb2_packed_key2 *)kbuf;
+}