Changes to update Tomato RAF.
[tomato.git] / release / src / router / dnscrypt / src / libnacl / crypto_stream / salsa208 / ref / xor.c
blobc017ac4260a9d9aba216e6d2b4a578a106581ce2
1 /*
2 version 20080913
3 D. J. Bernstein
4 Public domain.
5 */
7 #include "crypto_core_salsa208.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_xor(
15 unsigned char *c,
16 const unsigned char *m,unsigned long long mlen,
17 const unsigned char *n,
18 const unsigned char *k
21 unsigned char in[16];
22 unsigned char block[64];
23 int i;
24 unsigned int u;
26 if (!mlen) return 0;
28 for (i = 0;i < 8;++i) in[i] = n[i];
29 for (i = 8;i < 16;++i) in[i] = 0;
31 while (mlen >= 64) {
32 crypto_core_salsa208(block,in,k,sigma);
33 for (i = 0;i < 64;++i) c[i] = m[i] ^ block[i];
35 u = 1;
36 for (i = 8;i < 16;++i) {
37 u += (unsigned int) in[i];
38 in[i] = u;
39 u >>= 8;
42 mlen -= 64;
43 c += 64;
44 m += 64;
47 if (mlen) {
48 crypto_core_salsa208(block,in,k,sigma);
49 for (i = 0;i < mlen;++i) c[i] = m[i] ^ block[i];
51 return 0;