Allow mkimage -k to use a .key file when the ECDSA .pem file is absent. Keep .pem precedence so existing key selection is preserved.
Signed-off-by: Ayoub Zaki <[email protected]> --- Changes in v2: - Report both attempted filenames when fallback fails. - Rename pname to fallback_name. lib/ecdsa/ecdsa-libcrypto.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/ecdsa/ecdsa-libcrypto.c b/lib/ecdsa/ecdsa-libcrypto.c index 402c49cf61c..6ffd970a47c 100644 --- a/lib/ecdsa/ecdsa-libcrypto.c +++ b/lib/ecdsa/ecdsa-libcrypto.c @@ -218,12 +218,24 @@ static int default_password(char *buf, int size, int rwflag, void *u) return strlen(buf); } -static int read_key(struct signer *ctx, const char *key_name) +static int read_key(struct signer *ctx, const char *key_name, + const char *fallback) { FILE *f = fopen(key_name, "r"); const char *key_pass; int ret; + if (!f && errno == ENOENT && fallback) { + f = fopen(fallback, "r"); + if (!f) { + ret = -errno; + fprintf(stderr, "Can not get key file '%s' or '%s': %s\n", + key_name, fallback, strerror(-ret)); + return ret; + } + key_name = fallback; + } + if (!f) { ret = -errno; fprintf(stderr, "Can not get key file '%s': %s\n", @@ -326,7 +338,8 @@ check_key_len: static int prepare_ctx(struct signer *ctx, const struct image_sign_info *info) { int key_len_bytes, ret; - char kname[1024]; + char kname[1024], fallback_name[1024]; + const char *fallback = NULL; memset(ctx, 0, sizeof(*ctx)); @@ -337,6 +350,9 @@ static int prepare_ctx(struct signer *ctx, const struct image_sign_info *info) } else if (info->keydir && info->keyname) { snprintf(kname, sizeof(kname), "%s/%s.pem", info->keydir, info->keyname); + snprintf(fallback_name, sizeof(fallback_name), "%s/%s.key", info->keydir, + info->keyname); + fallback = fallback_name; } else { fprintf(stderr, "keyfile, keyname, or key-name-hint missing\n"); return -EINVAL; @@ -346,7 +362,7 @@ static int prepare_ctx(struct signer *ctx, const struct image_sign_info *info) if (ret) return ret; - ret = read_key(ctx, kname); + ret = read_key(ctx, kname, fallback); if (ret) return ret; -- 2.53.0
