tWrite keys encoded in base64 format - sick - sign and check files using ed25519
(HTM) git clone git://z3bra.org/sick
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 65c927600a8e8db3a65a2b62fce53a05aa97948c
(DIR) parent 0806ed0a99136ae1d118d0e19c2ec9648c9fc603
(HTM) Author: Willy Goiffon <contact@z3bra.org>
Date: Thu, 10 Aug 2023 18:01:49 +0200
Write keys encoded in base64 format
Diffstat:
M sick.c | 37 +++++++++++++++++--------------
1 file changed, 20 insertions(+), 17 deletions(-)
---
(DIR) diff --git a/sick.c b/sick.c
t@@ -201,50 +201,53 @@ extractsig(unsigned char **sig, unsigned char *buf, size_t len)
static int
createkeypair(const char *alias)
{
- size_t len = 0;
+ size_t klen = 0;
FILE *fp = NULL;
char fn[PATH_MAX];
- unsigned char pub[32], priv[64];
-
- /*
- * don't bother checking if `len > 0`. If the user wants to create
- * files named ".key" and ".pub", that's OK.
- */
- len = strnlen(alias, PATH_MAX);
+ unsigned char pub[32], priv[64], base64[96], *buf = NULL;
crypto_sign_ed25519_keypair(pub, priv);
- /* write private key to "<alias>.key" */
memset(fn, 0, PATH_MAX);
- memcpy(fn, alias, len);
- memcpy(fn+len, ".key", 4);
+ memset(base64, 0, sizeof(base64));
+
+ /* write public key to "<alias>.pub" */
+ sprintf(fn, "%s.pub", alias);
if (verbose)
- fprintf(stderr, "Creating private key %s\n", fn);
+ fprintf(stderr, "Creating public key %s\n", fn);
if ((fp = fopen(fn, "w")) == NULL) {
perror(fn);
return -1;
}
- if (fwrite(priv, 1, sizeof(priv), fp) < sizeof(priv)) {
+ klen = base64_encode((char **)&buf, pub, sizeof(pub));
+ memcpy(base64, buf, klen);
+ base64[klen] = '\n';
+ if (fwrite(base64, 1, klen+1, fp) < klen) {
fclose(fp);
perror(fn);
return -1;
}
fclose(fp);
+ free(buf);
- /* write public key to "<alias>.pub" */
- memcpy(fn+len, ".pub", 4);
+ /* write private key to "<alias>.key" */
+ sprintf(fn, "%s.key", alias);
if (verbose)
- fprintf(stderr, "Creating public key %s\n", fn);
+ fprintf(stderr, "Creating private key %s\n", fn);
if ((fp = fopen(fn, "w")) == NULL) {
perror(fn);
return -1;
}
- if (fwrite(pub, 1, sizeof(pub), fp) < sizeof(pub)) {
+ klen = base64_encode((char **)&buf, priv, sizeof(priv));
+ memcpy(base64, buf, klen);
+ base64[klen] = '\n';
+ if (fwrite(base64, 1, klen + 1, fp) < klen) {
fclose(fp);
perror(fn);
return -1;
}
fclose(fp);
+ free(buf);
return 0;
}