Browse Source

Fix data len

pull/1210/head
Max Lv 7 years ago
parent
commit
c5c8389a8d
1 changed files with 5 additions and 5 deletions
  1. 10
      src/aead.c

10
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);

Loading…
Cancel
Save