From 5c7672bd83cd2be827c46a8ac528608d106ef4c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Thu, 5 Feb 2004 21:14:25 +0100 Subject: [PATCH] (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 --- examples/rsa-encrypt.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) 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)); -- GitLab