/* Copyright 2015 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. */ #include "Platform.h" #include "TPM_Types.h" #include "ccd_config.h" #include "pinweaver.h" #include "tpm_nvmem.h" #include "trng.h" #include "util.h" #include "version.h" uint16_t _cpri__GenerateRandom(size_t random_size, uint8_t *buffer) { rand_bytes(buffer, random_size); return random_size; } /* * Return the pointer to the character immediately after the first dash * encountered in the passed in string, or NULL if there is no dashes in the * string. */ static const char *char_after_dash(const char *str) { char c; do { c = *str++; if (c == '-') return str; } while (c); return NULL; } /* * The properly formatted build_info string has the ec code SHA1 after the * first dash, and tpm2 code sha1 after the second dash. */ void _plat__GetFwVersion(uint32_t *firmwareV1, uint32_t *firmwareV2) { const char *ver_str = char_after_dash(build_info); /* Just in case the build_info string is misformatted. */ *firmwareV1 = 0; *firmwareV2 = 0; if (!ver_str) return; *firmwareV1 = strtoi(ver_str, NULL, 16); ver_str = char_after_dash(ver_str); if (!ver_str) return; *firmwareV2 = strtoi(ver_str, NULL, 16); } void _plat__StartupCallback(void) { pinweaver_init(); /* * Eventually, we'll want to allow CCD unlock with no password, so * enterprise policy can set a password to block CCD instead of locking * it out via the FWMP. * * When we do that, we'll allow unlock without password between a real * TPM startup (not just a resume) - which is this callback - and * explicit disabling of that feature via a to-be-created vendor * command. That vendor command will be called after enterprize policy * is updated, or the device is determined not to be enrolled. * * But for now, we'll just block unlock entirely if no password is set, * so we don't yet need to tell CCD that a real TPM startup has * occurred. */ } BOOL _plat__ShallSurviveOwnerClear(uint32_t index) { return index == HR_NV_INDEX + FWMP_NV_INDEX; }