/** 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;
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)
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)