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 The Mbed TLS Contributors 11 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 12 * 13 * This file is provided under the Apache License 2.0, or the 14 * GNU General Public License v2.0 or later. 15 * 16 * ********** 17 * Apache License 2.0: 18 * 19 * Licensed under the Apache License, Version 2.0 (the "License"); you may 20 * not use this file except in compliance with the License. 21 * You may obtain a copy of the License at 22 * 23 * http://www.apache.org/licenses/LICENSE-2.0 24 * 25 * Unless required by applicable law or agreed to in writing, software 26 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 27 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 28 * See the License for the specific language governing permissions and 29 * limitations under the License. 30 * 31 * ********** 32 * 33 * ********** 34 * GNU General Public License v2.0 or later: 35 * 36 * This program is free software; you can redistribute it and/or modify 37 * it under the terms of the GNU General Public License as published by 38 * the Free Software Foundation; either version 2 of the License, or 39 * (at your option) any later version. 40 * 41 * This program is distributed in the hope that it will be useful, 42 * but WITHOUT ANY WARRANTY; without even the implied warranty of 43 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 44 * GNU General Public License for more details. 45 * 46 * You should have received a copy of the GNU General Public License along 47 * with this program; if not, write to the Free Software Foundation, Inc., 48 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 49 * 50 * ********** 51 * 52 */ 53 #ifndef MBEDTLS_ARC4_H 54 #define MBEDTLS_ARC4_H 55 56 #if !defined(MBEDTLS_CONFIG_FILE) 57 #include "config.h" 58 #else 59 #include MBEDTLS_CONFIG_FILE 60 #endif 61 62 #include <stddef.h> 63 64 /* MBEDTLS_ERR_ARC4_HW_ACCEL_FAILED is deprecated and should not be used. */ 65 #define MBEDTLS_ERR_ARC4_HW_ACCEL_FAILED -0x0019 /**< ARC4 hardware accelerator failed. */ 66 67 #ifdef __cplusplus 68 extern "C" { 69 #endif 70 71 #if !defined(MBEDTLS_ARC4_ALT) 72 // Regular implementation 73 // 74 75 /** 76 * \brief ARC4 context structure 77 * 78 * \warning ARC4 is considered a weak cipher and its use constitutes a 79 * security risk. We recommend considering stronger ciphers instead. 80 * 81 */ 82 typedef struct mbedtls_arc4_context 83 { 84 int x; /*!< permutation index */ 85 int y; /*!< permutation index */ 86 unsigned char m[256]; /*!< permutation table */ 87 } 88 mbedtls_arc4_context; 89 90 #else /* MBEDTLS_ARC4_ALT */ 91 #include "arc4_alt.h" 92 #endif /* MBEDTLS_ARC4_ALT */ 93 94 /** 95 * \brief Initialize ARC4 context 96 * 97 * \param ctx ARC4 context to be initialized 98 * 99 * \warning ARC4 is considered a weak cipher and its use constitutes a 100 * security risk. We recommend considering stronger ciphers 101 * instead. 102 * 103 */ 104 void mbedtls_arc4_init( mbedtls_arc4_context *ctx ); 105 106 /** 107 * \brief Clear ARC4 context 108 * 109 * \param ctx ARC4 context to be cleared 110 * 111 * \warning ARC4 is considered a weak cipher and its use constitutes a 112 * security risk. We recommend considering stronger ciphers 113 * instead. 114 * 115 */ 116 void mbedtls_arc4_free( mbedtls_arc4_context *ctx ); 117 118 /** 119 * \brief ARC4 key schedule 120 * 121 * \param ctx ARC4 context to be setup 122 * \param key the secret key 123 * \param keylen length of the key, in bytes 124 * 125 * \warning ARC4 is considered a weak cipher and its use constitutes a 126 * security risk. We recommend considering stronger ciphers 127 * instead. 128 * 129 */ 130 void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, 131 unsigned int keylen ); 132 133 /** 134 * \brief ARC4 cipher function 135 * 136 * \param ctx ARC4 context 137 * \param length length of the input data 138 * \param input buffer holding the input data 139 * \param output buffer for the output data 140 * 141 * \return 0 if successful 142 * 143 * \warning ARC4 is considered a weak cipher and its use constitutes a 144 * security risk. We recommend considering stronger ciphers 145 * instead. 146 * 147 */ 148 int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned char *input, 149 unsigned char *output ); 150 151 #if defined(MBEDTLS_SELF_TEST) 152 153 /** 154 * \brief Checkup routine 155 * 156 * \return 0 if successful, or 1 if the test failed 157 * 158 * \warning ARC4 is considered a weak cipher and its use constitutes a 159 * security risk. We recommend considering stronger ciphers 160 * instead. 161 * 162 */ 163 int mbedtls_arc4_self_test( int verbose ); 164 165 #endif /* MBEDTLS_SELF_TEST */ 166 167 #ifdef __cplusplus 168 } 169 #endif 170 171 #endif /* arc4.h */ 172