diff --git a/src/aead.c b/src/aead.c index d23b37cd..eff13b21 100644 --- a/src/aead.c +++ b/src/aead.c @@ -53,7 +53,7 @@ #endif #define CHUNK_SIZE_LEN 2 -#define CHUNK_SIZE_MASK 0X3FFF +#define CHUNK_SIZE_MASK 0x3FFF /* * This is SIP004 proposed by @Mygod, the design of TCP chunk is from @breakwa11 and @@ -489,7 +489,7 @@ aead_chunk_encrypt(cipher_ctx_t *ctx, uint8_t *p, uint8_t *c, uint8_t *n, int err; size_t clen; uint8_t len_buf[CHUNK_SIZE_LEN]; - uint16_t t = htons((plen + tlen) & CHUNK_SIZE_MASK); + uint16_t t = htons(plen & CHUNK_SIZE_MASK); memcpy(len_buf, &t, CHUNK_SIZE_LEN); clen = CHUNK_SIZE_LEN + tlen; @@ -586,18 +586,18 @@ aead_chunk_decrypt(cipher_ctx_t *ctx, uint8_t *p, uint8_t *c, uint8_t *n, mlen = ntohs(*(uint16_t *)len_buf); mlen = mlen & CHUNK_SIZE_MASK; - size_t chunk_len = tlen + CHUNK_SIZE_LEN + mlen; + size_t chunk_len = 2 * tlen + CHUNK_SIZE_LEN + mlen; if (*clen < chunk_len) return CRYPTO_NEED_MORE; sodium_increment(n, nlen); - err = cipher_aead_decrypt(ctx, p, plen, c + CHUNK_SIZE_LEN + tlen, mlen, + err = cipher_aead_decrypt(ctx, p, plen, c + CHUNK_SIZE_LEN + tlen, mlen + tlen, NULL, 0, n, ctx->cipher->key, nlen, tlen); if (err) return CRYPTO_ERROR; - assert(*plen == mlen - tlen); + assert(*plen == mlen); sodium_increment(n, nlen);