12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /*
- version 20080913
- D. J. Bernstein
- Public domain.
- */
- #include "crypto_core_salsa2012.h"
- #include "crypto_stream.h"
- typedef unsigned int uint32;
- static const unsigned char sigma[16] = "expand 32-byte k";
- int crypto_stream(
- unsigned char *c,unsigned long long clen,
- const unsigned char *n,
- const unsigned char *k
- )
- {
- unsigned char in[16];
- unsigned char block[64];
- int i;
- unsigned int u;
- if (!clen) return 0;
- for (i = 0;i < 8;++i) in[i] = n[i];
- for (i = 8;i < 16;++i) in[i] = 0;
- while (clen >= 64) {
- crypto_core_salsa2012(c,in,k,sigma);
- u = 1;
- for (i = 8;i < 16;++i) {
- u += (unsigned int) in[i];
- in[i] = u;
- u >>= 8;
- }
- clen -= 64;
- c += 64;
- }
- if (clen) {
- crypto_core_salsa2012(block,in,k,sigma);
- for (i = 0;i < clen;++i) c[i] = block[i];
- }
- return 0;
- }
|