tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

blowfish.h (2313B)


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