X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gcrypt.c;h=9b05a9494c23503702f88b27716468942b15d805;hp=50ddff46df79820c9af24c7a4f96c02ef05f9675;hb=686310d4b954efec5d5dcc8b4a143c294bb02739;hpb=eb833d819057adb3916aa2f2704ca2df7fd6a48f diff --git a/gcrypt.c b/gcrypt.c index 50ddff46..9b05a949 100644 --- 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)