stream/chacha - improved counter increment
This commit is contained in:
parent
9232f2e970
commit
90b482aa1e
@ -71,8 +71,14 @@ int chacha_crypt(chacha_state *st, const unsigned char *in, unsigned long inlen,
|
|||||||
}
|
}
|
||||||
for (;;) {
|
for (;;) {
|
||||||
_chacha_block(buf, st->input, st->rounds);
|
_chacha_block(buf, st->input, st->rounds);
|
||||||
/* increment the counter */
|
if (st->ivlen == 8) {
|
||||||
if (!++st->input[12] && !++st->input[13] && !++st->input[14]) { ++st->input[15]; }
|
/* IV-64bit, increment 64bit counter */
|
||||||
|
if (0 == ++st->input[12] && 0 == ++st->input[13]) return CRYPT_OVERFLOW;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* IV-96bit, increment 32bit counter */
|
||||||
|
if (0 == ++st->input[12]) return CRYPT_OVERFLOW;
|
||||||
|
}
|
||||||
if (inlen <= 64) {
|
if (inlen <= 64) {
|
||||||
for (i = 0; i < inlen; ++i) out[i] = in[i] ^ buf[i];
|
for (i = 0; i < inlen; ++i) out[i] = in[i] ^ buf[i];
|
||||||
st->ksleft = 64 - inlen;
|
st->ksleft = 64 - inlen;
|
||||||
|
Loading…
Reference in New Issue
Block a user