X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gcrypt.c;h=f825f6c6a3de6388959d7b900f31ef9d48e6397b;hp=775abd764902b53cf60930270fc6fea73a62e9a1;hb=4a4d8f266a79275d7b2c902dc69b5ec8d46406b2;hpb=0a0a577bb91b6ec4e26a9432c08974a3f1f611ac;ds=inline diff --git a/gcrypt.c b/gcrypt.c index 775abd76..f825f6c6 100644 --- a/gcrypt.c +++ b/gcrypt.c @@ -164,7 +164,7 @@ static void pad_oaep(unsigned char *in, size_t in_len, unsigned char *out, /* rfc 3447, section 7.1.2 */ static int unpad_oaep(unsigned char *in, size_t in_len, unsigned char *out, size_t *out_len) -{ int ret; +{ unsigned char *masked_seed = in + 1; unsigned char *db = in + 1 + HASH_SIZE; unsigned char seed[HASH_SIZE], seed_mask[HASH_SIZE]; @@ -189,7 +189,7 @@ static int unpad_oaep(unsigned char *in, size_t in_len, unsigned char *out, p++; *out_len = in + in_len - p; memcpy(out, p, *out_len); - return ret; + return 1; } struct asymmetric_key { @@ -587,7 +587,7 @@ static int get_asn_public_key(const char *key_file, struct asymmetric_key **resu key = para_malloc(sizeof(*key)); key->sexp = sexp; *result = key; - ret = n_size * 8; + ret = n_size; PARA_INFO_LOG("successfully read %u bit asn public key\n", n_size * 8); release_e: @@ -763,7 +763,9 @@ static int decode_rsa(gcry_sexp_t sexp, int key_size, unsigned char *outbuf, PARA_DEBUG_LOG("decrypted buffer before unpad (%d bytes):\n", key_size); dump_buffer("non-unpadded decrypted buffer", oaep_buf, key_size);; - unpad_oaep(oaep_buf, key_size, outbuf, nbytes); + ret = unpad_oaep(oaep_buf, key_size, outbuf, nbytes); + if (ret < 0) + goto out_mpi_release; PARA_DEBUG_LOG("decrypted buffer after unpad (%zu bytes):\n", *nbytes); dump_buffer("unpadded decrypted buffer", outbuf, *nbytes);;