1 /* rc2.h 2 * 3 * Copyright (C) 2006-2021 wolfSSL Inc. 4 * 5 * This file is part of wolfSSL. 6 * 7 * wolfSSL is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * wolfSSL is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA 20 */ 21 22 #ifndef WOLF_CRYPT_RC2_H 23 #define WOLF_CRYPT_RC2_H 24 25 #include <wolfssl/wolfcrypt/types.h> 26 27 #ifdef WC_RC2 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 enum { 34 RC2_MAX_KEY_SIZE = 128, /* max effective key size, octets */ 35 RC2_BLOCK_SIZE = 8 36 }; 37 38 /* RC2 encryption and decryption */ 39 typedef struct Rc2 { 40 ALIGN16 word16 key[RC2_MAX_KEY_SIZE/2]; 41 ALIGN16 word32 reg[RC2_BLOCK_SIZE / sizeof(word32)]; /* for CBC mode */ 42 ALIGN16 word32 tmp[RC2_BLOCK_SIZE / sizeof(word32)]; /* same */ 43 word32 keylen; /* key length, octets */ 44 word32 bits; /* effective key length, bits */ 45 } Rc2; 46 47 WOLFSSL_API int wc_Rc2SetKey(Rc2* rc2, const byte* key, word32 length, 48 const byte* iv, word32 bits); 49 WOLFSSL_API int wc_Rc2SetIV(Rc2* rc2, const byte* iv); 50 51 /* RC2-ECB */ 52 WOLFSSL_API int wc_Rc2EcbEncrypt(Rc2* rc2, byte* out, 53 const byte* in, word32 sz); 54 WOLFSSL_API int wc_Rc2EcbDecrypt(Rc2* rc2, byte* out, 55 const byte* in, word32 sz); 56 57 /* RC2-CBC */ 58 WOLFSSL_API int wc_Rc2CbcEncrypt(Rc2* rc2, byte* out, 59 const byte* in, word32 sz); 60 WOLFSSL_API int wc_Rc2CbcDecrypt(Rc2* rc2, byte* out, 61 const byte* in, word32 sz); 62 63 #ifdef __cplusplus 64 } /* extern "C" */ 65 #endif 66 67 #endif /* WC_RC2 */ 68 #endif /* WOLF_CRYPT_RC2_H */ 69