Browse Source

Remove unnecessary memmove

Before patch, after one chunk decoded, we do a memmove.
After patch, after all complete chunk decoded, we do a memmove.
pull/2577/head
babarosaM33 4 years ago
parent
commit
7fe555c756
1 changed files with 7 additions and 5 deletions
  1. 12
      src/aead.c

12
src/aead.c

@ -617,9 +617,6 @@ aead_chunk_decrypt(cipher_ctx_t *ctx, uint8_t *p, uint8_t *c, uint8_t *n,
sodium_increment(n, nlen); sodium_increment(n, nlen);
if (*clen > chunk_len)
memmove(c, c + chunk_len, *clen - chunk_len);
*clen = *clen - chunk_len; *clen = *clen - chunk_len;
return CRYPTO_OK; return CRYPTO_OK;
@ -671,22 +668,27 @@ aead_decrypt(buffer_t *ciphertext, cipher_ctx_t *cipher_ctx, size_t capacity)
} }
size_t plen = 0; size_t plen = 0;
size_t cidx = 0;
while (cipher_ctx->chunk->len > 0) { while (cipher_ctx->chunk->len > 0) {
size_t chunk_clen = cipher_ctx->chunk->len; size_t chunk_clen = cipher_ctx->chunk->len;
size_t chunk_plen = 0; size_t chunk_plen = 0;
err = aead_chunk_decrypt(cipher_ctx, err = aead_chunk_decrypt(cipher_ctx,
(uint8_t *)plaintext->data + plen, (uint8_t *)plaintext->data + plen,
(uint8_t *)cipher_ctx->chunk->data,
(uint8_t *)cipher_ctx->chunk->data + cidx,
cipher_ctx->nonce, &chunk_plen, &chunk_clen); cipher_ctx->nonce, &chunk_plen, &chunk_clen);
if (err == CRYPTO_ERROR) { if (err == CRYPTO_ERROR) {
return err; return err;
} else if (err == CRYPTO_NEED_MORE) { } else if (err == CRYPTO_NEED_MORE) {
if (plen == 0) if (plen == 0)
return err; return err;
else
else{
memmove((uint8_t *)cipher_ctx->chunk->data,
(uint8_t *)cipher_ctx->chunk->data + cidx, chunk_clen);
break; break;
}
} }
cipher_ctx->chunk->len = chunk_clen; cipher_ctx->chunk->len = chunk_clen;
cidx += cipher_ctx->cipher->tag_len * 2 + CHUNK_SIZE_LEN + chunk_plen;
plen += chunk_plen; plen += chunk_plen;
} }
plaintext->len = plen; plaintext->len = plen;

Loading…
Cancel
Save