Rename write_nonblock() to xwrite().
[paraslash.git] / gcrypt.c
index b40b7b6..d11e94c 100644 (file)
--- a/gcrypt.c
+++ b/gcrypt.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2011-2012 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -7,7 +7,6 @@
 /** \file gcrypt.c Libgrcypt-based encryption/decryption routines. */
 
 #include <regex.h>
-#include <stdbool.h>
 #include <gcrypt.h>
 
 #include "para.h"
@@ -164,7 +163,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 +188,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 {
@@ -763,7 +762,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);;
@@ -950,7 +951,7 @@ int sc_send_bin_buffer(struct stream_cipher_context *scc, char *buf,
        gret = gcry_cipher_encrypt(scc->send->handle, tmp, size,
                (unsigned char *)buf, size);
        assert(gret == 0);
-       ret = write_all(scc->fd, (char *)tmp, &size);
+       ret = xwrite(scc->fd, (char *)tmp, size);
        free(tmp);
        return ret;
 }