mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Jonas Rebmann <jre@pengutronix.de>
To: Sascha Hauer <s.hauer@pengutronix.de>,
	 BAREBOX <barebox@lists.infradead.org>
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>,
	Marco Felsch <m.felsch@pengutronix.de>,
	Jonas Rebmann <jre@pengutronix.de>
Subject: [PATCH v4 4/8] crypto: keytoc: Parse all keyspecs before writing to stdout
Date: Tue, 17 Mar 2026 16:19:48 +0100	[thread overview]
Message-ID: <20260317-keytoc-multi-env-v4-4-38ab473f8034@pengutronix.de> (raw)
In-Reply-To: <20260317-keytoc-multi-env-v4-0-38ab473f8034@pengutronix.de>

To catch errors before writing (partial) C code and for better overall
code structure, preprocess and convert to C key data in two different
loops.

Signed-off-by: Jonas Rebmann <jre@pengutronix.de>
---
 scripts/keytoc.c | 42 ++++++++++++++++++++++--------------------
 1 file changed, 22 insertions(+), 20 deletions(-)

diff --git a/scripts/keytoc.c b/scripts/keytoc.c
index 6d680422a6..8c3c7d7c3f 100644
--- a/scripts/keytoc.c
+++ b/scripts/keytoc.c
@@ -859,11 +859,15 @@ int main(int argc, char *argv[])
 	}
 
 	keycount = argc - optind;
-	keylist = calloc(sizeof(struct keyinfo), keycount);
+	keylist = calloc(keycount, sizeof(*keylist));
 
+	if (!keylist)
+		enomem_exit("keylist");
+
+	/* parse each keyspec */
 	for (keys_idx = 0; keys_idx < keycount; keys_idx++) {
-		const char *keyspec = try_resolve_env(argv[optind + keys_idx]);
 		struct keyinfo *info = &keylist[keys_idx];
+		const char *keyspec = try_resolve_env(argv[optind + keys_idx]);
 
 		if (!keyspec)
 			exit(1);
@@ -872,23 +876,6 @@ int main(int argc, char *argv[])
 			fprintf(stderr, "invalid keyspec %i: %s\n", optind, keyspec);
 			exit(1);
 		}
-	}
-
-	if (dts) {
-		fprintf(outfilep, "/dts-v1/;\n");
-		fprintf(outfilep, "/ {\n");
-		if (standalone)
-			fprintf(outfilep, "\tsignature-standalone {\n");
-		else
-			fprintf(outfilep, "\tsignature {\n");
-	} else if (standalone) {
-		fprintf(outfilep, "#include <crypto/ecdsa.h>\n");
-		fprintf(outfilep, "#include <crypto/rsa.h>\n");
-	}
-
-
-	for (keys_idx = 0; keys_idx < keycount; keys_idx++) {
-		struct keyinfo *info = &keylist[keys_idx];
 
 		/* resolve __ENV__ for name_hint and path */
 		info->name_hint = try_resolve_env(info->name_hint);
@@ -905,12 +892,27 @@ int main(int argc, char *argv[])
 			info->keyring = strdup("fit");
 			fprintf(stderr, "Warning: No keyring provided in keyspec, defaulting to keyring=fit for %s\n", argv[optind + keys_idx]);
 		}
+	}
+
+	/* write out C representation */
+	if (dts) {
+		fprintf(outfilep, "/dts-v1/;\n");
+		fprintf(outfilep, "/ {\n");
+		if (standalone)
+			fprintf(outfilep, "\tsignature-standalone {\n");
+		else
+			fprintf(outfilep, "\tsignature {\n");
+	} else if (standalone) {
+		fprintf(outfilep, "#include <crypto/ecdsa.h>\n");
+		fprintf(outfilep, "#include <crypto/rsa.h>\n");
+	}
+	for (keys_idx = 0; keys_idx < keycount; keys_idx++) {
+		struct keyinfo *info = &keylist[keys_idx];
 
 		ret = gen_key(info);
 		if (ret)
 			exit(1);
 	}
-
 	if (dts) {
 		fprintf(outfilep, "\t};\n");
 		fprintf(outfilep, "};\n");

-- 
2.53.0.308.g50d063e335




  parent reply	other threads:[~2026-03-17 15:20 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-17 15:19 [PATCH v4 0/8] Allow multiple keyspecs in one environment variable Jonas Rebmann
2026-03-17 15:19 ` [PATCH v4 1/8] scripts: include: Add string_util.h for strsep_unescaped Jonas Rebmann
2026-03-17 15:19 ` [PATCH v4 2/8] crypto: keytoc: Improve readability Jonas Rebmann
2026-03-17 15:19 ` [PATCH v4 3/8] crypto: keytoc: Move special handling of legacy pkcs11 format to parse_keyspec Jonas Rebmann
2026-03-17 15:19 ` Jonas Rebmann [this message]
2026-03-17 15:19 ` [PATCH v4 5/8] crypto: keytoc: Split env-provided full keyspec on spaces Jonas Rebmann
2026-03-17 15:19 ` [PATCH v4 6/8] Documentation: migration-guides: Document change in keyspec env vars Jonas Rebmann
2026-03-17 15:19 ` [PATCH v4 7/8] crypto: keytoc: Allow fields to start with underscore Jonas Rebmann
2026-03-17 15:19 ` [PATCH v4 8/8] crypto: keytoc: Deprecate fit-hint from env variable Jonas Rebmann
2026-03-18  7:34 ` [PATCH v4 0/8] Allow multiple keyspecs in one environment variable Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260317-keytoc-multi-env-v4-4-38ab473f8034@pengutronix.de \
    --to=jre@pengutronix.de \
    --cc=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=m.felsch@pengutronix.de \
    --cc=s.hauer@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox