SALSA(2)                                                 SALSA(2)

     NAME
          setupSalsastate, salsa_setblock, salsa_setiv, salsa_encrypt,
          salsa_encrypt2, hsalsa - salsa20 encryption

     SYNOPSIS
          #include <u.h>
          #include <libc.h>
          #include <libsec.h>

          void setupSalsastate(Salsastate *s, uchar key[], ulong
          keylen, uchar *iv, ulong ivlen, int rounds)

          void salsa_encrypt(uchar *data, ulong len, Salsastate *s)

          void salsa_encrypt2(uchar *src, uchar *dst, ulong len, Sal-
          sastate *s)

          void salsa_setblock(Salsastate *s, u64int blockno)

          void salsa_setiv(Salsastate *s, uchar *iv);

          void hsalsa(uchar h[32], uchar *key, ulong keylen, uchar
          nonce[16], int rounds);

     DESCRIPTION
          Salsa20 is a stream cipher designed by D J Berstein. It has
          an underlying block size of 64 bytes (named as constant
          SalsaBsize).  It supports key sizes of 128 and 256-bit (rec-
          ommended).

          SetupSalsastate takes a reference to a Salsastate structure,
          a key of keylen bytes, which should normally be
          SalsaKeylen=32, a iv or nonce of ivlen bytes (can be
          SalsaIVlen=8 or XSalsaIVlen=24, set to all zeros if the iv
          argument is nil), and the number of rounds (set to the
          default of 20 if the argument is zero).

          Salsa_encrypt encrypts len bytes of buf in place using the
          Salsastate in s.  Len can be any byte length.  Encryption
          and decryption are the same operation given the same start-
          ing state s.

          Salsa_encrypt2 is similar, but encrypts len bytes of src
          into dst without modifying src.

          Salsa_setblock sets the Salsa block counter for the next
          encryption to blockno, allowing seeking in an encrypted
          stream.

          Salsa_setiv sets the the initialization vector (nonce) to

     Page 1                       Plan 9            (printed 10/25/26)

     SALSA(2)                                                 SALSA(2)

          iv.

          Hsalsa is a key expansion function that takes a 128 or 256-
          bit key and a 128-bit nonce and produces a new 256-bit key.

     SOURCE
          /sys/src/libsec/port/salsa.c

     SEE ALSO
          chacha(2)
          http://cr.yp.to/snuffle.html#specification

     Page 2                       Plan 9            (printed 10/25/26)