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