Home | History | Annotate | Line # | Download | only in xsalsa20
      1 #include "crypto_core_hsalsa20.h"
      2 #include "crypto_stream_salsa20.h"
      3 #include "crypto_stream_xsalsa20.h"
      4 #include "randombytes.h"
      5 #include "utils.h"
      6 
      7 int
      8 crypto_stream_xsalsa20(unsigned char *c, unsigned long long clen,
      9                        const unsigned char *n, const unsigned char *k)
     10 {
     11     unsigned char subkey[32];
     12     int           ret;
     13 
     14     crypto_core_hsalsa20(subkey, n, k, NULL);
     15     ret = crypto_stream_salsa20(c, clen, n + 16, subkey);
     16     sodium_memzero(subkey, sizeof subkey);
     17 
     18     return ret;
     19 }
     20 
     21 int
     22 crypto_stream_xsalsa20_xor_ic(unsigned char *c, const unsigned char *m,
     23                               unsigned long long mlen, const unsigned char *n,
     24                               uint64_t ic, const unsigned char *k)
     25 {
     26     unsigned char subkey[32];
     27     int           ret;
     28 
     29     crypto_core_hsalsa20(subkey, n, k, NULL);
     30     ret = crypto_stream_salsa20_xor_ic(c, m, mlen, n + 16, ic, subkey);
     31     sodium_memzero(subkey, sizeof subkey);
     32 
     33     return ret;
     34 }
     35 
     36 int
     37 crypto_stream_xsalsa20_xor(unsigned char *c, const unsigned char *m,
     38                            unsigned long long mlen, const unsigned char *n,
     39                            const unsigned char *k)
     40 {
     41     return crypto_stream_xsalsa20_xor_ic(c, m, mlen, n, 0ULL, k);
     42 }
     43 
     44 size_t
     45 crypto_stream_xsalsa20_keybytes(void)
     46 {
     47     return crypto_stream_xsalsa20_KEYBYTES;
     48 }
     49 
     50 size_t
     51 crypto_stream_xsalsa20_noncebytes(void)
     52 {
     53     return crypto_stream_xsalsa20_NONCEBYTES;
     54 }
     55 
     56 size_t
     57 crypto_stream_xsalsa20_messagebytes_max(void)
     58 {
     59     return crypto_stream_xsalsa20_MESSAGEBYTES_MAX;
     60 }
     61 
     62 void
     63 crypto_stream_xsalsa20_keygen(unsigned char k[crypto_stream_xsalsa20_KEYBYTES])
     64 {
     65     randombytes_buf(k, crypto_stream_xsalsa20_KEYBYTES);
     66 }
     67