X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gcrypt.c;h=8e73b3b2696f0aee501c6a317280067b885e3011;hp=ad38dcb83c56920a2e40116cccf6d6382fcad0b5;hb=3ea5399aeec092dcdb9f039288f1e146aadbb2f7;hpb=eeeab4239843e716b3fd4dd259985a4cd4c487a5 diff --git a/gcrypt.c b/gcrypt.c index ad38dcb8..8e73b3b2 100644 --- a/gcrypt.c +++ b/gcrypt.c @@ -15,6 +15,7 @@ #include "crypt.h" #include "crypt_backend.h" #include "fd.h" +#include "base64.h" //#define GCRYPT_DEBUG 1 @@ -212,7 +213,7 @@ static int decode_key(const char *key_file, const char *header_str, ret = mmap_full_file(key_file, O_RDONLY, &map, &map_size, NULL); if (ret < 0) - return ret; + goto out; ret = -E_KEY_MARKER; if (strncmp(map, header_str, strlen(header_str))) goto unmap; @@ -257,6 +258,7 @@ unmap: free(blob); blob = NULL; } +out: *result = blob; return ret; } @@ -582,6 +584,7 @@ static int get_asn_public_key(const char *key_file, struct asymmetric_key **resu } key = para_malloc(sizeof(*key)); key->sexp = sexp; + key->num_bytes = n_size; *result = key; ret = n_size; PARA_INFO_LOG("successfully read %u bit asn public key\n", n_size * 8); @@ -780,6 +783,9 @@ int priv_decrypt(const char *key_file, unsigned char *outbuf, gcry_sexp_t in, out, priv_key; size_t nbytes; + ret = check_key_file(key_file, true); + if (ret < 0) + return ret; PARA_INFO_LOG("decrypting %d byte input\n", inlen); /* key_file -> asymmetric key priv */ ret = get_private_key(key_file, &priv);