From: Niels Möller Date: Thu, 5 Feb 2004 20:14:25 +0000 (+0100) Subject: (process_file): Copy the leftover to the X-Git-Tag: nettle_1.9_release_20040207~32 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5c7672bd83cd2be827c46a8ac528608d106ef4c5;p=thirdparty%2Fnettle.git (process_file): Copy the leftover to the start of the buffer, when preparing for the final processing. Rev: src/nettle/examples/rsa-encrypt.c:1.4 --- diff --git a/examples/rsa-encrypt.c b/examples/rsa-encrypt.c index e3f3c351..919a7563 100644 --- a/examples/rsa-encrypt.c +++ b/examples/rsa-encrypt.c @@ -95,8 +95,10 @@ process_file(struct rsa_session *ctx, uint8_t buffer[AES_BLOCK_SIZE * 100]; unsigned leftover; unsigned padding; - - for (padding = leftover = 0; padding == 0;) + + padding = leftover = 0; + + for (;;) { size_t size = fread(buffer, 1, sizeof(buffer), in); if (ferror(in)) @@ -123,6 +125,14 @@ process_file(struct rsa_session *ctx, werror("Writing output failed: %s\n", strerror(errno)); return 0; } + + if (padding) + { + if (leftover) + memcpy(buffer, buffer + size, leftover); + + break; + } } if (padding > 1) yarrow256_random(&ctx->yarrow, padding - 1, buffer + leftover); @@ -130,6 +140,7 @@ process_file(struct rsa_session *ctx, buffer[AES_BLOCK_SIZE - 1] = padding; CBC_ENCRYPT(&ctx->aes, aes_encrypt, AES_BLOCK_SIZE, buffer, buffer); hmac_sha1_digest(&ctx->hmac, SHA1_DIGEST_SIZE, buffer + AES_BLOCK_SIZE); + if (!write_string(out, AES_BLOCK_SIZE + SHA1_DIGEST_SIZE, buffer)) { werror("Writing output failed: %s\n", strerror(errno));