base64: sync with libubox modifications
authorFelix Fietkau <nbd@openwrt.org>
Sun, 19 Apr 2015 10:38:05 +0000 (12:38 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 19 Apr 2015 10:38:05 +0000 (12:38 +0200)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
base64.c
base64.h
main.c

index 27acf4013c14d23f49818dcdd20738afe39a923d..763e3ff37be8b402ebc3325f2607bc8562b6e724 100644 (file)
--- a/base64.c
+++ b/base64.c
@@ -1,3 +1,21 @@
+/*
+ * base64 - libubox base64 functions
+ *
+ * Copyright (C) 2015 Felix Fietkau <nbd@openwrt.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
 /*     $OpenBSD: base64.c,v 1.7 2013/12/31 02:32:56 tedu Exp $ */
 
 /*
@@ -116,8 +134,8 @@ static const char Pad64 = '=';
           characters followed by one "=" padding character.
    */
 
-int b64_ntop(const void *_src, size_t srclength,
-            void *dest, size_t targsize)
+int b64_encode(const void *_src, size_t srclength,
+              void *dest, size_t targsize)
 {
        const unsigned char *src = _src;
        char *target = dest;
@@ -178,7 +196,7 @@ int b64_ntop(const void *_src, size_t srclength,
    it returns the number of data bytes stored at the target, or -1 on error.
  */
 
-int b64_pton(const void *_src, void *dest, size_t targsize)
+int b64_decode(const void *_src, void *dest, size_t targsize)
 {
        const char *src = _src;
        unsigned char *target = dest;
@@ -301,5 +319,9 @@ int b64_pton(const void *_src, void *dest, size_t targsize)
                        return (-1);
        }
 
+       /* Null-terminate if we have room left */
+       if (tarindex < targsize)
+               target[tarindex] = 0;
+
        return (tarindex);
 }
index 262572103439d49e23cf3bd58998a481b107870b..0f49e9a2825d78a380b890f504d7c9a8be07a2c0 100644 (file)
--- a/base64.h
+++ b/base64.h
@@ -1,12 +1,12 @@
 #ifndef __BASE64_H
 #define __BASE64_H
 
-int b64_ntop(const void *src, size_t src_len,
-            void *dest, size_t dest_len);
+int b64_encode(const void *src, size_t src_len,
+              void *dest, size_t dest_len);
 
-int b64_pton(const void *src, void *dest, size_t dest_len);
+int b64_decode(const void *src, void *dest, size_t dest_len);
 
+#define B64_ENCODE_LEN(_len)   ((((_len) + 2) / 3) * 4 + 1)
 #define B64_DECODE_LEN(_len)   (((_len) / 4) * 3 + 1)
-#define B64_ENCODE_LEN(_len)   ((((_len) / 3) + 1) * 4 + 1)
 
 #endif
diff --git a/main.c b/main.c
index a1ed6c375431b3fbfcac6db6c11f44069d8a51a5..869ee0875ca919df1b4ae80bde2ecaecd80a912e 100644 (file)
--- a/main.c
+++ b/main.c
@@ -135,7 +135,7 @@ static bool
 get_base64_file(const char *file, void *dest, int size, void *buf, int buflen)
 {
        get_file(file, buf, buflen - 1);
-       return b64_pton(buf, dest, size) == size;
+       return b64_decode(buf, dest, size) == size;
 }
 
 static void write_file(const char *name, const uint8_t *fingerprint,
@@ -245,7 +245,7 @@ static int sign(const char *msgfile)
        munmap(m, mlen);
        close(mfd);
 
-       if (b64_ntop(&sig, sizeof(sig), buf, sizeof(buf)) < 0)
+       if (b64_encode(&sig, sizeof(sig), buf, sizeof(buf)) < 0)
                return 1;
 
        write_file(sigfile, sig.fingerprint, "signed by key", buf);
@@ -309,7 +309,7 @@ static int generate(void)
        sha512_add(&s, skey.seckey, sizeof(skey.seckey));
        memcpy(skey.checksum, sha512_final_get(&s), sizeof(skey.checksum));
 
-       if (b64_ntop(&skey, sizeof(skey), buf, sizeof(buf)) < 0)
+       if (b64_encode(&skey, sizeof(skey), buf, sizeof(buf)) < 0)
                return 1;
 
        write_file(seckeyfile, skey.fingerprint, "public key", buf);
@@ -317,7 +317,7 @@ static int generate(void)
        memcpy(pkey.fingerprint, skey.fingerprint, sizeof(pkey.fingerprint));
        memcpy(pkey.pubkey, skey.seckey + 32, sizeof(pkey.pubkey));
 
-       if (b64_ntop(&pkey, sizeof(pkey), buf, sizeof(buf)) < 0)
+       if (b64_encode(&pkey, sizeof(pkey), buf, sizeof(buf)) < 0)
                return 1;
 
        write_file(pubkeyfile, pkey.fingerprint, "private key", buf);