[Skiboot] [PATCH 08/15] libstb: Add secure boot header structures
Stewart Smith
stewart at linux.vnet.ibm.com
Thu Sep 15 20:14:43 AEST 2016
Claudio Carvalho <cclaudio at linux.vnet.ibm.com> writes:
> --- /dev/null
> +++ b/libstb/container.h
> @@ -0,0 +1,139 @@
> +/* Copyright 2013-2016 IBM Corp.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> + * implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +
> +#ifndef __STB_CONTAINER_H
> +#define __STB_CONTAINER_H
> +
> +#include <stdint.h>
> +
> +#define SECURE_BOOT_HEADERS_SIZE 4096
> +
> +#define SHA256_DIGEST_LENGTH 32
> +
> +/**
> + * The defines and structures below come from the secure ROM source code
> + * (trusted_boot_rom). Here you will find only the ones required by the
> + * secure and trusted boot implementation in skiboot.
> + */
> +
> +/* From trusted_boot_rom/src/sha512.h */
> +#define SHA512_DIGEST_LENGTH 64
> +typedef uint8_t __attribute__((aligned(8))) sha2_hash_t[ SHA512_DIGEST_LENGTH / sizeof(uint8_t) ];
> +typedef uint8_t sha2_byte; // Exactly 1 byte
> +
> +/* From trusted_boot_rom/src/hw_utils.h */
> +#define ECID_SIZE 16
> +
> +/* From trusted_boot_rom/src/ecverify.h */
> +#define EC_COORDBYTES 66 /* P-521 */
> +typedef uint8_t ecc_key_t[2*EC_COORDBYTES];
> +typedef uint8_t ecc_signature_t[2*EC_COORDBYTES];
> +
> +/* From trusted_boot_rom/src/ROM.h */
> +#define ROM_MAGIC_NUMBER 0x17082011
> +
> +typedef struct {
> + uint16_t version; /* (1: see versions above) */
> + uint8_t hash_alg; /* (1: SHA-512) */
> + uint8_t sig_alg; /* (1: SHA-512/ECDSA-521) */
> +}__attribute__((packed)) ROM_version_raw;
IIRC it was sig_alg here that conflicted wiht "unused" in the
https://github.com/open-power/sb-signing-utils/pull/1/files proposed
signing utils (although considering the problems there, I'm more
convinced your code is correct).
But.. since this is dealing with something that's baked into
hardware.. where did this exactly come from?
The other thing that came to me while running this morning... since this
is a representation of a serialized data structure, it'd be good to use
the be32/be16/be64 types and be32_to_cpu() "converters" so that if we
were ever crazy enough to do a LE skiboot, everything would "just
work". It also means that you can more easily write unit tests that'll
work on LE platforms.
--
Stewart Smith
OPAL Architect, IBM.
More information about the Skiboot
mailing list