Changes to update Tomato RAF.
[tomato.git] / release / src / router / dnscrypt / src / libnacl / crypto_stream / salsa20 / ref / stream.c
blob2f0262eb145bbacf10b082921dadef45e1a278a5
1 /*
2 version 20080913
3 D. J. Bernstein
4 Public domain.
5 */
7 #include "crypto_core_salsa20.h"
8 #include "crypto_stream.h"
10 typedef unsigned int uint32;
12 static const unsigned char sigma[16] = "expand 32-byte k";
14 int crypto_stream(
15 unsigned char *c,unsigned long long clen,
16 const unsigned char *n,
17 const unsigned char *k
20 unsigned char in[16];
21 unsigned char block[64];
22 int i;
23 unsigned int u;
25 if (!clen) return 0;
27 for (i = 0;i < 8;++i) in[i] = n[i];
28 for (i = 8;i < 16;++i) in[i] = 0;
30 while (clen >= 64) {
31 crypto_core_salsa20(c,in,k,sigma);
33 u = 1;
34 for (i = 8;i < 16;++i) {
35 u += (unsigned int) in[i];
36 in[i] = u;
37 u >>= 8;
40 clen -= 64;
41 c += 64;
44 if (clen) {
45 crypto_core_salsa20(block,in,k,sigma);
46 for (i = 0;i < clen;++i) c[i] = block[i];
48 return 0;