diff options
Diffstat (limited to 'util/gen_touchpad_hash.c')
-rw-r--r-- | util/gen_touchpad_hash.c | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/util/gen_touchpad_hash.c b/util/gen_touchpad_hash.c deleted file mode 100644 index e03c4638f3..0000000000 --- a/util/gen_touchpad_hash.c +++ /dev/null @@ -1,174 +0,0 @@ -/* Copyright 2017 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 <err.h> -#include <getopt.h> -#include <stdio.h> -#include <stdint.h> -#include <string.h> -#include <unistd.h> - -#include <openssl/sha.h> - -#include "config.h" - -static void print_hex(FILE *out, uint8_t *digest, int len, int last) -{ - int i; - - fputs("{ ", out); - for (i = 0; i < len; i++) - fprintf(out, "0x%02x, ", digest[i]); - - fprintf(out, "}%c\n", last ? ';' : ','); -} - -/* Output blank hashes */ -static int hash_fw_blank(FILE *hashes) -{ - uint8_t digest[SHA256_DIGEST_LENGTH] = { 0 }; - int len; - - fprintf(hashes, "const uint8_t touchpad_fw_hashes[%d][%d] = {\n", - CONFIG_TOUCHPAD_VIRTUAL_SIZE / CONFIG_UPDATE_PDU_SIZE, - SHA256_DIGEST_LENGTH); - for (len = 0; len < CONFIG_TOUCHPAD_VIRTUAL_SIZE; - len += CONFIG_UPDATE_PDU_SIZE) { - print_hex(hashes, digest, sizeof(digest), 0); - } - fputs("};\n", hashes); - - fprintf(hashes, "const uint8_t touchpad_fw_full_hash[%d] =\n\t", - SHA256_DIGEST_LENGTH); - print_hex(hashes, digest, SHA256_DIGEST_LENGTH, 1); - - return 0; -} - -static int hash_fw(FILE *tp_fw, FILE *hashes) -{ - uint8_t buffer[CONFIG_UPDATE_PDU_SIZE]; - int len = 0; - int rb; - SHA256_CTX ctx; - SHA256_CTX ctx_all; - uint8_t digest[SHA256_DIGEST_LENGTH]; - - SHA256_Init(&ctx_all); - fprintf(hashes, "const uint8_t touchpad_fw_hashes[%d][%d] = {\n", - CONFIG_TOUCHPAD_VIRTUAL_SIZE / CONFIG_UPDATE_PDU_SIZE, - SHA256_DIGEST_LENGTH); - while (1) { - rb = fread(buffer, 1, sizeof(buffer), tp_fw); - len += rb; - - if (rb == 0) - break; - - /* Calculate hash for the block. */ - SHA256_Init(&ctx); - SHA256_Update(&ctx, buffer, rb); - SHA256_Final(digest, &ctx); - - SHA256_Update(&ctx_all, buffer, rb); - - print_hex(hashes, digest, sizeof(digest), 0); - - if (rb < sizeof(buffer)) - break; - } - fputs("};\n", hashes); - - SHA256_Final(digest, &ctx_all); - fprintf(hashes, "const uint8_t touchpad_fw_full_hash[%d] =\n\t", - SHA256_DIGEST_LENGTH); - print_hex(hashes, digest, SHA256_DIGEST_LENGTH, 1); - - if (!feof(tp_fw) || ferror(tp_fw)) { - warn("Error reading input file"); - return 1; - } - - if (len != CONFIG_TOUCHPAD_VIRTUAL_SIZE) { - warnx("Incorrect TP FW size (%d vs %d)", len, - CONFIG_TOUCHPAD_VIRTUAL_SIZE); - return 1; - } - - return 0; -} - -int main(int argc, char **argv) -{ - int nopt; - int ret; - const char *out = NULL; - char *tp_fw_name = NULL; - FILE *tp_fw = NULL; - FILE *hashes; - const char short_opt[] = "f:ho:"; - const struct option long_opts[] = { - { "firmware", 1, NULL, 'f' }, - { "help", 0, NULL, 'h' }, - { "out", 1, NULL, 'o' }, - { NULL } - }; - const char usage[] = "USAGE: %s -f <touchpad FW> -o <output file>\n"; - - while ((nopt = getopt_long(argc, argv, short_opt, - long_opts, NULL)) != -1) { - switch (nopt) { - case 'f': /* -f or --firmware */ - tp_fw_name = optarg; - break; - - case 'h': /* -h or --help */ - fprintf(stdout, usage, argv[0]); - return 0; - - case 'o': /* -o or --out */ - out = optarg; - break; - - default: /* Invalid parameter. */ - fprintf(stderr, usage, argv[0]); - return 1; - } - }; - - if (out == NULL) - return 1; - - hashes = fopen(out, "we"); - if (!hashes) - err(1, "Cannot open output file"); - - fputs("#include <stdint.h>\n\n", hashes); - if (tp_fw_name) { - tp_fw = fopen(tp_fw_name, "re"); - - if (!tp_fw) { - warn("Cannot open firmware"); - ret = 1; - goto out; - } - - ret = hash_fw(tp_fw, hashes); - - fclose(tp_fw); - } else { - printf("No touchpad FW provided, outputting blank hashes.\n"); - ret = hash_fw_blank(hashes); - } - -out: - fclose(hashes); - - /* In case of failure, remove output file. */ - if (ret != 0) - unlink(out); - - return ret; -} |