/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include #include #include "vboot_host.h" static int lookup_helper(const char *str, const char *table[], size_t size, unsigned int *out) { unsigned int algo; char *e; /* try string first */ for (algo = 0; algo < size; algo++) if (table[algo] && !strcasecmp(table[algo], str)) goto found; /* fine, try number */ algo = strtoul(str, &e, 0); if (!*str || (e && *e)) /* that's not a number */ return false; if (algo >= size || !table[algo]) /* that's not a valid algorithm */ return false; found: *out = algo; return true; } bool vb2_lookup_sig_alg(const char *str, enum vb2_signature_algorithm *sig_alg) { return lookup_helper(str, vb2_sig_names, VB2_SIG_ALG_COUNT, sig_alg); } bool vb2_lookup_hash_alg(const char *str, enum vb2_hash_algorithm *hash_alg) { return lookup_helper(str, vb2_hash_names, VB2_HASH_ALG_COUNT, hash_alg); }