blowfish.h (2271B)
1 /* 2 * Blowfish algorithm 3 * 4 * This file is part of Libav. 5 * 6 * Libav is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * Libav is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with Libav; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef AVUTIL_BLOWFISH_H 22 #define AVUTIL_BLOWFISH_H 23 24 #include <stdint.h> 25 26 /** 27 * @defgroup lavu_blowfish Blowfish 28 * @ingroup lavu_crypto 29 * @{ 30 */ 31 32 #define AV_BF_ROUNDS 16 33 34 typedef struct AVBlowfish { 35 uint32_t p[AV_BF_ROUNDS + 2]; 36 uint32_t s[4][256]; 37 } AVBlowfish; 38 39 /** 40 * Initialize an AVBlowfish context. 41 * 42 * @param ctx an AVBlowfish context 43 * @param key a key 44 * @param key_len length of the key 45 */ 46 void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len); 47 48 /** 49 * Encrypt or decrypt a buffer using a previously initialized context. 50 * 51 * @param ctx an AVBlowfish context 52 * @param xl left four bytes halves of input to be encrypted 53 * @param xr right four bytes halves of input to be encrypted 54 * @param decrypt 0 for encryption, 1 for decryption 55 */ 56 void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr, 57 int decrypt); 58 59 /** 60 * Encrypt or decrypt a buffer using a previously initialized context. 61 * 62 * @param ctx an AVBlowfish context 63 * @param dst destination array, can be equal to src 64 * @param src source array, can be equal to dst 65 * @param count number of 8 byte blocks 66 * @param iv initialization vector for CBC mode, if NULL ECB will be used 67 * @param decrypt 0 for encryption, 1 for decryption 68 */ 69 void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src, 70 int count, uint8_t *iv, int decrypt); 71 72 /** 73 * @} 74 */ 75 76 #endif /* AVUTIL_BLOWFISH_H */