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