diff options
Diffstat (limited to 'tests/vb2_convert_structs.c')
-rw-r--r-- | tests/vb2_convert_structs.c | 57 |
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; +} |