1*1dcdf01fSchristos /*
2*1dcdf01fSchristos  * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
3*1dcdf01fSchristos  *
4*1dcdf01fSchristos  * Licensed under the OpenSSL license (the "License").  You may not use
5*1dcdf01fSchristos  * this file except in compliance with the License.  You can obtain a copy
6*1dcdf01fSchristos  * in the file LICENSE in the source distribution or at
7*1dcdf01fSchristos  * https://www.openssl.org/source/license.html
8*1dcdf01fSchristos  */
9*1dcdf01fSchristos 
10*1dcdf01fSchristos #ifndef HEADER_RC5_H
11*1dcdf01fSchristos # define HEADER_RC5_H
12*1dcdf01fSchristos 
13*1dcdf01fSchristos # include <openssl/opensslconf.h>
14*1dcdf01fSchristos 
15*1dcdf01fSchristos # ifndef OPENSSL_NO_RC5
16*1dcdf01fSchristos # ifdef  __cplusplus
17*1dcdf01fSchristos extern "C" {
18*1dcdf01fSchristos # endif
19*1dcdf01fSchristos 
20*1dcdf01fSchristos # define RC5_ENCRYPT     1
21*1dcdf01fSchristos # define RC5_DECRYPT     0
22*1dcdf01fSchristos 
23*1dcdf01fSchristos # define RC5_32_INT unsigned int
24*1dcdf01fSchristos 
25*1dcdf01fSchristos # define RC5_32_BLOCK            8
26*1dcdf01fSchristos # define RC5_32_KEY_LENGTH       16/* This is a default, max is 255 */
27*1dcdf01fSchristos 
28*1dcdf01fSchristos /*
29*1dcdf01fSchristos  * This are the only values supported.  Tweak the code if you want more The
30*1dcdf01fSchristos  * most supported modes will be RC5-32/12/16 RC5-32/16/8
31*1dcdf01fSchristos  */
32*1dcdf01fSchristos # define RC5_8_ROUNDS    8
33*1dcdf01fSchristos # define RC5_12_ROUNDS   12
34*1dcdf01fSchristos # define RC5_16_ROUNDS   16
35*1dcdf01fSchristos 
36*1dcdf01fSchristos typedef struct rc5_key_st {
37*1dcdf01fSchristos     /* Number of rounds */
38*1dcdf01fSchristos     int rounds;
39*1dcdf01fSchristos     RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)];
40*1dcdf01fSchristos } RC5_32_KEY;
41*1dcdf01fSchristos 
42*1dcdf01fSchristos void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data,
43*1dcdf01fSchristos                     int rounds);
44*1dcdf01fSchristos void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out,
45*1dcdf01fSchristos                         RC5_32_KEY *key, int enc);
46*1dcdf01fSchristos void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key);
47*1dcdf01fSchristos void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key);
48*1dcdf01fSchristos void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out,
49*1dcdf01fSchristos                         long length, RC5_32_KEY *ks, unsigned char *iv,
50*1dcdf01fSchristos                         int enc);
51*1dcdf01fSchristos void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out,
52*1dcdf01fSchristos                           long length, RC5_32_KEY *schedule,
53*1dcdf01fSchristos                           unsigned char *ivec, int *num, int enc);
54*1dcdf01fSchristos void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out,
55*1dcdf01fSchristos                           long length, RC5_32_KEY *schedule,
56*1dcdf01fSchristos                           unsigned char *ivec, int *num);
57*1dcdf01fSchristos 
58*1dcdf01fSchristos # ifdef  __cplusplus
59*1dcdf01fSchristos }
60*1dcdf01fSchristos # endif
61*1dcdf01fSchristos # endif
62*1dcdf01fSchristos 
63*1dcdf01fSchristos #endif
64