1 /** 2 * \file arc4.h 3 * 4 * \brief The ARCFOUR stream cipher 5 * 6 * \warning ARC4 is considered a weak cipher and its use constitutes a 7 * security risk. We recommend considering stronger ciphers instead. 8 */ 9 /* 10 * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved 11 * SPDX-License-Identifier: GPL-2.0 12 * 13 * This program is free software; you can redistribute it and/or modify 14 * it under the terms of the GNU General Public License as published by 15 * the Free Software Foundation; either version 2 of the License, or 16 * (at your option) any later version. 17 * 18 * This program is distributed in the hope that it will be useful, 19 * but WITHOUT ANY WARRANTY; without even the implied warranty of 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21 * GNU General Public License for more details. 22 * 23 * You should have received a copy of the GNU General Public License along 24 * with this program; if not, write to the Free Software Foundation, Inc., 25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 26 * 27 * This file is part of mbed TLS (https://tls.mbed.org) 28 * 29 */ 30 #ifndef MBEDTLS_ARC4_H 31 #define MBEDTLS_ARC4_H 32 33 #if !defined(MBEDTLS_CONFIG_FILE) 34 #include "config.h" 35 #else 36 #include MBEDTLS_CONFIG_FILE 37 #endif 38 39 #include <stddef.h> 40 41 #define MBEDTLS_ERR_ARC4_HW_ACCEL_FAILED -0x0019 /**< ARC4 hardware accelerator failed. */ 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 #if !defined(MBEDTLS_ARC4_ALT) 48 // Regular implementation 49 // 50 51 /** 52 * \brief ARC4 context structure 53 * 54 * \warning ARC4 is considered a weak cipher and its use constitutes a 55 * security risk. We recommend considering stronger ciphers instead. 56 * 57 */ 58 typedef struct 59 { 60 int x; /*!< permutation index */ 61 int y; /*!< permutation index */ 62 unsigned char m[256]; /*!< permutation table */ 63 } 64 mbedtls_arc4_context; 65 66 #else /* MBEDTLS_ARC4_ALT */ 67 #include "arc4_alt.h" 68 #endif /* MBEDTLS_ARC4_ALT */ 69 70 /** 71 * \brief Initialize ARC4 context 72 * 73 * \param ctx ARC4 context to be initialized 74 * 75 * \warning ARC4 is considered a weak cipher and its use constitutes a 76 * security risk. We recommend considering stronger ciphers 77 * instead. 78 * 79 */ 80 void mbedtls_arc4_init( mbedtls_arc4_context *ctx ); 81 82 /** 83 * \brief Clear ARC4 context 84 * 85 * \param ctx ARC4 context to be cleared 86 * 87 * \warning ARC4 is considered a weak cipher and its use constitutes a 88 * security risk. We recommend considering stronger ciphers 89 * instead. 90 * 91 */ 92 void mbedtls_arc4_free( mbedtls_arc4_context *ctx ); 93 94 /** 95 * \brief ARC4 key schedule 96 * 97 * \param ctx ARC4 context to be setup 98 * \param key the secret key 99 * \param keylen length of the key, in bytes 100 * 101 * \warning ARC4 is considered a weak cipher and its use constitutes a 102 * security risk. We recommend considering stronger ciphers 103 * instead. 104 * 105 */ 106 void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, 107 unsigned int keylen ); 108 109 /** 110 * \brief ARC4 cipher function 111 * 112 * \param ctx ARC4 context 113 * \param length length of the input data 114 * \param input buffer holding the input data 115 * \param output buffer for the output data 116 * 117 * \return 0 if successful 118 * 119 * \warning ARC4 is considered a weak cipher and its use constitutes a 120 * security risk. We recommend considering stronger ciphers 121 * instead. 122 * 123 */ 124 int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned char *input, 125 unsigned char *output ); 126 127 /** 128 * \brief Checkup routine 129 * 130 * \return 0 if successful, or 1 if the test failed 131 * 132 * \warning ARC4 is considered a weak cipher and its use constitutes a 133 * security risk. We recommend considering stronger ciphers 134 * instead. 135 * 136 */ 137 int mbedtls_arc4_self_test( int verbose ); 138 139 #ifdef __cplusplus 140 } 141 #endif 142 143 #endif /* arc4.h */ 144