|
| 1 | +/* $OpenBSD: blf.h,v 1.3 2001/05/15 02:40:35 deraadt 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 initalized 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 | + |
| 48 | +/* Blowfish context */ |
| 49 | +typedef struct BlowfishContext { |
| 50 | + uint32 S[4][256]; /* S-Boxes */ |
| 51 | + uint32 P[BLF_N + 2]; /* Subkeys */ |
| 52 | +} blf_ctx; |
| 53 | + |
| 54 | +/* Raw access to customized Blowfish |
| 55 | + * blf_key is just: |
| 56 | + * Blowfish_initstate( state ) |
| 57 | + * Blowfish_expand0state( state, key, keylen ) |
| 58 | + */ |
| 59 | + |
| 60 | +void Blowfish_encipher __P((blf_ctx *, uint32 *)); |
| 61 | +void Blowfish_decipher __P((blf_ctx *, uint32 *)); |
| 62 | +void Blowfish_initstate __P((blf_ctx *)); |
| 63 | +void Blowfish_expand0state __P((blf_ctx *, const uint8 *, uint16)); |
| 64 | +void Blowfish_expandstate |
| 65 | + __P((blf_ctx *, const uint8 *, uint16, const uint8 *, uint16)); |
| 66 | + |
| 67 | +/* Standard Blowfish */ |
| 68 | + |
| 69 | +void blf_key __P((blf_ctx *, const uint8 *, uint16)); |
| 70 | +void blf_enc __P((blf_ctx *, uint32 *, uint16)); |
| 71 | +void blf_dec __P((blf_ctx *, uint32 *, uint16)); |
| 72 | + |
| 73 | +/* Converts uint8 to uint32 */ |
| 74 | +uint32 Blowfish_stream2word __P((const uint8 *, uint16 , |
| 75 | + uint16 *)); |
| 76 | + |
| 77 | +void blf_ecb_encrypt __P((blf_ctx *, uint8 *, uint32)); |
| 78 | +void blf_ecb_decrypt __P((blf_ctx *, uint8 *, uint32)); |
| 79 | + |
| 80 | +void blf_cbc_encrypt __P((blf_ctx *, uint8 *, uint8 *, uint32)); |
| 81 | +void blf_cbc_decrypt __P((blf_ctx *, uint8 *, uint8 *, uint32)); |
| 82 | +#endif |
0 commit comments