X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gcrypt.c;h=aaf97d424b4e5725c025288d4dd5cc341da9a6a2;hp=f825f6c6a3de6388959d7b900f31ef9d48e6397b;hb=c4bfb18b78b3935b8dbf68f70b219cfb2a192979;hpb=d49cd9a91015766cb19d7d43bb04048265925fe5 diff --git a/gcrypt.c b/gcrypt.c index f825f6c6..aaf97d42 100644 --- a/gcrypt.c +++ b/gcrypt.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Andre Noll + * Copyright (C) 2011-2012 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -7,7 +7,6 @@ /** \file gcrypt.c Libgrcypt-based encryption/decryption routines. */ #include -#include #include #include "para.h" @@ -500,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. @@ -575,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) { @@ -698,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) @@ -952,7 +948,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; } @@ -973,3 +969,15 @@ int sc_recv_bin_buffer(struct stream_cipher_context *scc, char *buf, assert(gret == 0); return ret; } + +void sc_crypt(struct stream_cipher *sc, struct iovec *src, struct iovec *dst) +{ + gcry_cipher_hd_t handle = sc->handle; + gcry_error_t gret; + + /* perform in-place encryption */ + *dst = *src; + gret = gcry_cipher_encrypt(handle, src->iov_base, src->iov_len, + NULL, 0); + assert(gret == 0); +}