arc4.h (1783B)
1 /* arc4.h 2 * 3 * Copyright (C) 2006-2025 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 3 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 /*! 23 \file wolfssl/wolfcrypt/arc4.h 24 */ 25 26 #ifndef WOLF_CRYPT_ARC4_H 27 #define WOLF_CRYPT_ARC4_H 28 29 #include <wolfssl/wolfcrypt/types.h> 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 #ifdef WOLFSSL_ASYNC_CRYPT 36 #include <wolfssl/wolfcrypt/async.h> 37 #endif 38 39 enum { 40 ARC4_ENC_TYPE = 4, /* cipher unique type */ 41 ARC4_STATE_SIZE = 256, 42 RC4_KEY_SIZE = 16 /* always 128bit */ 43 }; 44 45 /* ARC4 encryption and decryption */ 46 typedef struct Arc4 { 47 byte x; 48 byte y; 49 byte state[ARC4_STATE_SIZE]; 50 #ifdef WOLFSSL_ASYNC_CRYPT 51 WC_ASYNC_DEV asyncDev; 52 #endif 53 void* heap; 54 } Arc4; 55 56 WOLFSSL_API int wc_Arc4Process(Arc4* arc4, byte* out, const byte* in, 57 word32 length); 58 WOLFSSL_API int wc_Arc4SetKey(Arc4* arc4, const byte* key, word32 length); 59 60 WOLFSSL_API int wc_Arc4Init(Arc4* arc4, void* heap, int devId); 61 WOLFSSL_API void wc_Arc4Free(Arc4* arc4); 62 63 #ifdef __cplusplus 64 } /* extern "C" */ 65 #endif 66 67 68 #endif /* WOLF_CRYPT_ARC4_H */ 69