tChange bufferize() prototype - 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 a92ed5dba1cf5168b8b7db759641bed54e7751bd
(DIR) parent 0a1faeea7f13aa5c473500e50674877f92fe6edc
(HTM) Author: z3bra <willyatmailoodotorg>
Date: Sun, 15 May 2016 19:24:44 +0200
Change bufferize() prototype
Write buffer to a `signed char *` rather than `unsigned`. Make it
easier and saner to deal with internally.
sign() uses memcpy to convert the buffer from `signed` to `unsigned`.
Diffstat:
M sick.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
---
(DIR) diff --git a/sick.c b/sick.c
t@@ -18,7 +18,7 @@ enum {
};
static void usage();
-static size_t bufferize(unsigned char **buf, FILE *fp);
+static size_t bufferize(char **buf, FILE *fp);
static int createkeypair(const char *);
static int sign(FILE *fp, FILE *key);
t@@ -36,7 +36,7 @@ usage()
* read chunks of data from a stream into a buffer, and return the size of the buffer
*/
static size_t
-bufferize(unsigned char **buf, FILE *fp)
+bufferize(char **buf, FILE *fp)
{
size_t n, len = 0;
char chunk[MAX_INPUT], *tmp;
t@@ -48,7 +48,7 @@ bufferize(unsigned char **buf, FILE *fp)
return 0;
}
- *buf = (unsigned char *)tmp;
+ *buf = tmp;
memcpy((*buf) + len, chunk, n);
len += n;
}
t@@ -111,16 +111,20 @@ int
sign(FILE *fp, FILE *key)
{
size_t len;
- char *base64;
+ char *base64, *buf = NULL;
unsigned char sig[64], priv[64], *msg = NULL;
if (!fread(priv, 1, 64, key))
return -1;
- len = bufferize(&msg, fp);
+ len = bufferize(&buf, fp);
if (len == 0)
return -1;
+ msg = malloc(len);
+ memcpy(msg, buf, len);
+ free(buf);
+
ed25519_sign(sig, msg, len, priv);
/* write buffer to stdout .. */
t@@ -133,6 +137,7 @@ sign(FILE *fp, FILE *key)
/* .. then the base64 encoded signature .. */
len = base64_encode(&base64, sig, 64);
base64_fold(stdout, base64, len, 0);
+ free(base64);
/* .. and the final signature delimiter! */
fwrite(SIGEND, 1, sizeof(SIGEND), stdout);