gcrypt: Let decode_key() return blob size through additional argument.
[paraslash.git] / gcrypt.c
index 50ddff46df79820c9af24c7a4f96c02ef05f9675..9b05a9494c23503702f88b27716468942b15d805 100644 (file)
--- a/gcrypt.c
+++ b/gcrypt.c
@@ -111,11 +111,12 @@ static const char *gcrypt_strerror(gcry_error_t gret)
 /** Private keys end with this footer. */
 #define PRIVATE_KEY_FOOTER "-----END RSA PRIVATE KEY-----"
 
-static int decode_key(const char *key_file, unsigned char **result)
+static int decode_key(const char *key_file, unsigned char **result,
+               size_t *blob_size)
 {
        int ret, ret2, i, j;
        void *map;
-       size_t map_size, key_size, blob_size;
+       size_t map_size, key_size;
        unsigned char *blob = NULL;
        char *begin, *footer, *key;
 
@@ -148,15 +149,8 @@ static int decode_key(const char *key_file, unsigned char **result)
                key[j++] = begin[i];
        }
        key[j] = '\0';
-       ret = base64_decode(key, j, (char **)&blob, &blob_size);
+       ret = base64_decode(key, j, (char **)&blob, blob_size);
        free(key);
-       if (ret < 0)
-               goto free_unmap;
-       ret = blob_size;
-       goto unmap;
-free_unmap:
-       free(blob);
-       blob = NULL;
 unmap:
        ret2 = para_munmap(map, map_size);
        if (ret >= 0 && ret2 < 0)
@@ -299,17 +293,16 @@ static int get_private_key(const char *key_file, struct asymmetric_key **result)
        gcry_mpi_t n = NULL, e = NULL, d = NULL, p = NULL, q = NULL,
                u = NULL;
        unsigned char *blob, *cp, *end;
-       int blob_size, ret, n_size;
+       int ret, n_size;
        gcry_error_t gret;
-       size_t erroff;
+       size_t erroff, blob_size;
        gcry_sexp_t sexp;
        struct asymmetric_key *key;
 
        *result = NULL;
-       ret = decode_key(key_file, &blob);
+       ret = decode_key(key_file, &blob, &blob_size);
        if (ret < 0)
                return ret;
-       blob_size = ret;
        end = blob + blob_size;
        ret = find_privkey_bignum_offset(blob, blob_size);
        if (ret < 0)