Merge branch 'maint'
[paraslash.git] / gcrypt.c
index 467e7399da721c5cb7ac6c0ea628f007052fea10..2736a6c769835823b39820b0291069f1ca80a534 100644 (file)
--- a/gcrypt.c
+++ b/gcrypt.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2012 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2011-2013 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -499,7 +499,6 @@ static int get_private_key(const char *key_file, struct asymmetric_key **result)
        ret = read_bignum(cp, end, &u, NULL);
        if (ret < 0)
                goto release_q;
-       cp += ret;
        /*
         * OpenSSL uses slightly different parameters than gcrypt. To use these
         * parameters we need to swap the values of p and q and recompute u.
@@ -574,7 +573,6 @@ static int get_asn_public_key(const char *key_file, struct asymmetric_key **resu
        ret = read_bignum(cp, end, &e, NULL);
        if (ret < 0)
                goto release_n;
-       cp += ret;
 
        gret = gcry_sexp_build(&sexp, &erroff, RSA_PUBKEY_SEXP, n, e);
        if (gret) {
@@ -697,7 +695,6 @@ int get_asymmetric_key(const char *key_file, int private,
        key->num_bytes = ret;
        key->sexp = sexp;
        *result = key;
-       ret = key->num_bytes;
 unmap:
        ret2 = para_munmap(map, map_size);
        if (ret >= 0 && ret2 < 0)
@@ -761,13 +758,13 @@ 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);;
+       dump_buffer("non-unpadded decrypted buffer", oaep_buf, key_size);
        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);;
+       dump_buffer("unpadded decrypted buffer", outbuf, *nbytes);
        ret = 1;
 out_mpi_release:
        gcry_mpi_release(out_mpi);
@@ -940,35 +937,14 @@ void sc_free(struct stream_cipher *sc)
        free(sc);
 }
 
-int sc_send_bin_buffer(struct stream_cipher_context *scc, char *buf,
-               size_t size)
+void sc_crypt(struct stream_cipher *sc, struct iovec *src, struct iovec *dst)
 {
+       gcry_cipher_hd_t handle = sc->handle;
        gcry_error_t gret;
-       int ret;
-       unsigned char *tmp = para_malloc(size);
-
-       assert(size);
-       gret = gcry_cipher_encrypt(scc->send->handle, tmp, size,
-               (unsigned char *)buf, size);
-       assert(gret == 0);
-       ret = write_all(scc->fd, (char *)tmp, size);
-       free(tmp);
-       return ret;
-}
 
-int sc_recv_bin_buffer(struct stream_cipher_context *scc, char *buf,
-               size_t size)
-{
-       gcry_error_t gret;
-       ssize_t ret = recv(scc->fd, buf, size, 0);
-
-       if (ret < 0)
-               ret = -ERRNO_TO_PARA_ERROR(errno);
-       if (ret <= 0)
-               return ret;
        /* perform in-place encryption */
-       gret = gcry_cipher_encrypt(scc->recv->handle, (unsigned char *)buf, ret,
+       *dst = *src;
+       gret = gcry_cipher_encrypt(handle, src->iov_base, src->iov_len,
                NULL, 0);
        assert(gret == 0);
-       return ret;
 }