Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
blowfish.h
00001 /** 00002 * \file blowfish.h 00003 * 00004 * \brief Blowfish block cipher 00005 * 00006 * Copyright (C) 2012-2014, Brainspark B.V. 00007 * 00008 * This file is part of PolarSSL (http://www.polarssl.org) 00009 * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> 00010 * 00011 * All rights reserved. 00012 * 00013 * This program is free software; you can redistribute it and/or modify 00014 * it under the terms of the GNU General Public License as published by 00015 * the Free Software Foundation; either version 2 of the License, or 00016 * (at your option) any later version. 00017 * 00018 * This program is distributed in the hope that it will be useful, 00019 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00021 * GNU General Public License for more details. 00022 * 00023 * You should have received a copy of the GNU General Public License along 00024 * with this program; if not, write to the Free Software Foundation, Inc., 00025 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 00026 */ 00027 #ifndef POLARSSL_BLOWFISH_H 00028 #define POLARSSL_BLOWFISH_H 00029 00030 #if !defined(POLARSSL_CONFIG_FILE) 00031 #include "config.h" 00032 #else 00033 #include POLARSSL_CONFIG_FILE 00034 #endif 00035 00036 #include <string.h> 00037 00038 #if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) 00039 #include <basetsd.h> 00040 typedef UINT32 uint32_t; 00041 #else 00042 #include <inttypes.h> 00043 #endif 00044 00045 #define BLOWFISH_ENCRYPT 1 00046 #define BLOWFISH_DECRYPT 0 00047 #define BLOWFISH_MAX_KEY 448 00048 #define BLOWFISH_MIN_KEY 32 00049 #define BLOWFISH_ROUNDS 16 /**< Rounds to use. When increasing this value, make sure to extend the initialisation vectors */ 00050 #define BLOWFISH_BLOCKSIZE 8 /* Blowfish uses 64 bit blocks */ 00051 00052 #define POLARSSL_ERR_BLOWFISH_INVALID_KEY_LENGTH -0x0016 /**< Invalid key length. */ 00053 #define POLARSSL_ERR_BLOWFISH_INVALID_INPUT_LENGTH -0x0018 /**< Invalid data input length. */ 00054 00055 #if !defined(POLARSSL_BLOWFISH_ALT) 00056 // Regular implementation 00057 // 00058 00059 #ifdef __cplusplus 00060 extern "C" { 00061 #endif 00062 00063 /** 00064 * \brief Blowfish context structure 00065 */ 00066 typedef struct 00067 { 00068 uint32_t P[BLOWFISH_ROUNDS + 2]; /*!< Blowfish round keys */ 00069 uint32_t S[4][256]; /*!< key dependent S-boxes */ 00070 } 00071 blowfish_context; 00072 00073 /** 00074 * \brief Blowfish key schedule 00075 * 00076 * \param ctx Blowfish context to be initialized 00077 * \param key encryption key 00078 * \param keysize must be between 32 and 448 bits 00079 * 00080 * \return 0 if successful, or POLARSSL_ERR_BLOWFISH_INVALID_KEY_LENGTH 00081 */ 00082 int blowfish_setkey( blowfish_context *ctx, const unsigned char *key, 00083 unsigned int keysize ); 00084 00085 /** 00086 * \brief Blowfish-ECB block encryption/decryption 00087 * 00088 * \param ctx Blowfish context 00089 * \param mode BLOWFISH_ENCRYPT or BLOWFISH_DECRYPT 00090 * \param input 8-byte input block 00091 * \param output 8-byte output block 00092 * 00093 * \return 0 if successful 00094 */ 00095 int blowfish_crypt_ecb( blowfish_context *ctx, 00096 int mode, 00097 const unsigned char input[BLOWFISH_BLOCKSIZE], 00098 unsigned char output[BLOWFISH_BLOCKSIZE] ); 00099 00100 #if defined(POLARSSL_CIPHER_MODE_CBC) 00101 /** 00102 * \brief Blowfish-CBC buffer encryption/decryption 00103 * Length should be a multiple of the block 00104 * size (8 bytes) 00105 * 00106 * \param ctx Blowfish context 00107 * \param mode BLOWFISH_ENCRYPT or BLOWFISH_DECRYPT 00108 * \param length length of the input data 00109 * \param iv initialization vector (updated after use) 00110 * \param input buffer holding the input data 00111 * \param output buffer holding the output data 00112 * 00113 * \return 0 if successful, or 00114 * POLARSSL_ERR_BLOWFISH_INVALID_INPUT_LENGTH 00115 */ 00116 int blowfish_crypt_cbc( blowfish_context *ctx, 00117 int mode, 00118 size_t length, 00119 unsigned char iv[BLOWFISH_BLOCKSIZE], 00120 const unsigned char *input, 00121 unsigned char *output ); 00122 #endif /* POLARSSL_CIPHER_MODE_CBC */ 00123 00124 #if defined(POLARSSL_CIPHER_MODE_CFB) 00125 /** 00126 * \brief Blowfish CFB buffer encryption/decryption. 00127 * 00128 * \param ctx Blowfish context 00129 * \param mode BLOWFISH_ENCRYPT or BLOWFISH_DECRYPT 00130 * \param length length of the input data 00131 * \param iv_off offset in IV (updated after use) 00132 * \param iv initialization vector (updated after use) 00133 * \param input buffer holding the input data 00134 * \param output buffer holding the output data 00135 * 00136 * \return 0 if successful 00137 */ 00138 int blowfish_crypt_cfb64( blowfish_context *ctx, 00139 int mode, 00140 size_t length, 00141 size_t *iv_off, 00142 unsigned char iv[BLOWFISH_BLOCKSIZE], 00143 const unsigned char *input, 00144 unsigned char *output ); 00145 #endif /*POLARSSL_CIPHER_MODE_CFB */ 00146 00147 #if defined(POLARSSL_CIPHER_MODE_CTR) 00148 /** 00149 * \brief Blowfish-CTR buffer encryption/decryption 00150 * 00151 * Warning: You have to keep the maximum use of your counter in mind! 00152 * 00153 * \param ctx Blowfish context 00154 * \param length The length of the data 00155 * \param nc_off The offset in the current stream_block (for resuming 00156 * within current cipher stream). The offset pointer to 00157 * should be 0 at the start of a stream. 00158 * \param nonce_counter The 64-bit nonce and counter. 00159 * \param stream_block The saved stream-block for resuming. Is overwritten 00160 * by the function. 00161 * \param input The input data stream 00162 * \param output The output data stream 00163 * 00164 * \return 0 if successful 00165 */ 00166 int blowfish_crypt_ctr( blowfish_context *ctx, 00167 size_t length, 00168 size_t *nc_off, 00169 unsigned char nonce_counter[BLOWFISH_BLOCKSIZE], 00170 unsigned char stream_block[BLOWFISH_BLOCKSIZE], 00171 const unsigned char *input, 00172 unsigned char *output ); 00173 #endif /* POLARSSL_CIPHER_MODE_CTR */ 00174 00175 #ifdef __cplusplus 00176 } 00177 #endif 00178 00179 #else /* POLARSSL_BLOWFISH_ALT */ 00180 #include "blowfish_alt.h" 00181 #endif /* POLARSSL_BLOWFISH_ALT */ 00182 00183 #endif /* blowfish.h */ 00184 00185
Generated on Tue Jul 12 2022 19:40:15 by
1.7.2