1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis */
2 /* SPDX-License-Identifier: Unlicense */
3 
4 /* The implementation is based on:
5  * chacha-ref.c version 20080118
6  * Public domain from D. J. Bernstein
7  */
8 
9 #include "tomcrypt_private.h"
10 
11 #ifdef LTC_RABBIT
12 
13 /**
14    Encrypt (or decrypt) bytes of ciphertext (or plaintext) with Rabbit
15    @param key     The key
16    @param keylen  The key length
17    @param iv      The initial vector
18    @param ivlen   The initial vector length
19    @param datain  The plaintext (or ciphertext)
20    @param datalen The length of the input and output (octets)
21    @param dataout [out] The ciphertext (or plaintext)
22    @return CRYPT_OK if successful
23 */
rabbit_memory(const unsigned char * key,unsigned long keylen,const unsigned char * iv,unsigned long ivlen,const unsigned char * datain,unsigned long datalen,unsigned char * dataout)24 int rabbit_memory(const unsigned char *key,    unsigned long keylen,
25                   const unsigned char *iv,     unsigned long ivlen,
26                   const unsigned char *datain, unsigned long datalen,
27                   unsigned char *dataout)
28 {
29    rabbit_state st;
30    int err;
31 
32    if ((err = rabbit_setup(&st, key, keylen)) != CRYPT_OK) goto WIPE_KEY;
33    if ((err = rabbit_setiv(&st, iv, ivlen))   != CRYPT_OK) goto WIPE_KEY;
34    err = rabbit_crypt(&st, datain, datalen, dataout);
35 WIPE_KEY:
36    rabbit_done(&st);
37    return err;
38 }
39 
40 #endif /* LTC_RABBIT */
41