root/crypto/blf.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. blf_ctx

    1 /*      $OpenBSD: blf.h,v 1.6 2007/02/21 19:25:40 grunk Exp $   */
    2 
    3 /*
    4  * Blowfish - a fast block cipher designed by Bruce Schneier
    5  *
    6  * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
    7  * All rights reserved.
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in the
   16  *    documentation and/or other materials provided with the distribution.
   17  * 3. All advertising materials mentioning features or use of this software
   18  *    must display the following acknowledgement:
   19  *      This product includes software developed by Niels Provos.
   20  * 4. The name of the author may not be used to endorse or promote products
   21  *    derived from this software without specific prior written permission.
   22  *
   23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   24  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   25  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   26  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   28  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   32  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   33  */
   34 
   35 #ifndef _BLF_H_
   36 #define _BLF_H_
   37 
   38 /* Schneier states the maximum key length to be 56 bytes.
   39  * The way how the subkeys are initialized by the key up
   40  * to (N+2)*4 i.e. 72 bytes are utilized.
   41  * Warning: For normal blowfish encryption only 56 bytes
   42  * of the key affect all cipherbits.
   43  */
   44 
   45 #define BLF_N   16                      /* Number of Subkeys */
   46 #define BLF_MAXKEYLEN ((BLF_N-2)*4)     /* 448 bits */
   47 #define BLF_MAXUTILIZED ((BLF_N+2)*4)   /* 576 bits */
   48 
   49 /* Blowfish context */
   50 typedef struct BlowfishContext {
   51         u_int32_t S[4][256];    /* S-Boxes */
   52         u_int32_t P[BLF_N + 2]; /* Subkeys */
   53 } blf_ctx;
   54 
   55 /* Raw access to customized Blowfish
   56  *      blf_key is just:
   57  *      Blowfish_initstate( state )
   58  *      Blowfish_expand0state( state, key, keylen )
   59  */
   60 
   61 void Blowfish_encipher(blf_ctx *, u_int32_t *);
   62 void Blowfish_decipher(blf_ctx *, u_int32_t *);
   63 void Blowfish_initstate(blf_ctx *);
   64 void Blowfish_expand0state(blf_ctx *, const u_int8_t *, u_int16_t);
   65 void Blowfish_expandstate(blf_ctx *, const u_int8_t *, u_int16_t, const u_int8_t *, u_int16_t);
   66 
   67 /* Standard Blowfish */
   68 
   69 void blf_key(blf_ctx *, const u_int8_t *, u_int16_t);
   70 void blf_enc(blf_ctx *, u_int32_t *, u_int16_t);
   71 void blf_dec(blf_ctx *, u_int32_t *, u_int16_t);
   72 
   73 /* Converts u_int8_t to u_int32_t */
   74 u_int32_t Blowfish_stream2word(const u_int8_t *, u_int16_t ,
   75                                     u_int16_t *);
   76 
   77 void blf_ecb_encrypt(blf_ctx *, u_int8_t *, u_int32_t);
   78 void blf_ecb_decrypt(blf_ctx *, u_int8_t *, u_int32_t);
   79 
   80 void blf_cbc_encrypt(blf_ctx *, u_int8_t *, u_int8_t *, u_int32_t);
   81 void blf_cbc_decrypt(blf_ctx *, u_int8_t *, u_int8_t *, u_int32_t);
   82 #endif

/* [<][>][^][v][top][bottom][index][help] */