1 | /* $OpenBSD: blf.h,v 1.7 2007/03/14 17:59:41 grunk Exp $ */
|
2 | /*
|
3 | * Blowfish - a fast block cipher designed by Bruce Schneier
|
4 | *
|
5 | * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
|
6 | * All rights reserved.
|
7 | *
|
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 Niels Provos.
|
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.
|
32 | */
|
33 |
|
34 |
|
35 |
|
36 |
|
37 | /* Solaris compatibility */
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 | /* Schneier specifies a maximum key length of 56 bytes.
|
58 | * This ensures that every key bit affects every cipher
|
59 | * bit. However, the subkeys can hold up to 72 bytes.
|
60 | * Warning: For normal blowfish encryption only 56 bytes
|
61 | * of the key affect all cipherbits.
|
62 | */
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | /* Blowfish context */
|
72 | typedef struct BlowfishContext {
|
73 | u_int32_t S[4][256]; /* S-Boxes */
|
74 | u_int32_t P[BLF_N + 2]; /* Subkeys */
|
75 | } blf_ctx;
|
76 |
|
77 | /* Raw access to customized Blowfish
|
78 | * blf_key is just:
|
79 | * Blowfish_initstate( state )
|
80 | * Blowfish_expand0state( state, key, keylen )
|
81 | */
|
82 |
|
83 | void Blowfish_encipher(blf_ctx *, u_int32_t *, u_int32_t *);
|
84 | void Blowfish_decipher(blf_ctx *, u_int32_t *, u_int32_t *);
|
85 | void Blowfish_initstate(blf_ctx *);
|
86 | void Blowfish_expand0state(blf_ctx *, const u_int8_t *, u_int16_t);
|
87 | void Blowfish_expandstate
|
88 | (blf_ctx *, const u_int8_t *, u_int16_t, const u_int8_t *, u_int16_t);
|
89 |
|
90 | /* Standard Blowfish */
|
91 |
|
92 | void blf_key(blf_ctx *, const u_int8_t *, u_int16_t);
|
93 | void blf_enc(blf_ctx *, u_int32_t *, u_int16_t);
|
94 | void blf_dec(blf_ctx *, u_int32_t *, u_int16_t);
|
95 |
|
96 | void blf_ecb_encrypt(blf_ctx *, u_int8_t *, u_int32_t);
|
97 | void blf_ecb_decrypt(blf_ctx *, u_int8_t *, u_int32_t);
|
98 |
|
99 | void blf_cbc_encrypt(blf_ctx *, u_int8_t *, u_int8_t *, u_int32_t);
|
100 | void blf_cbc_decrypt(blf_ctx *, u_int8_t *, u_int8_t *, u_int32_t);
|
101 |
|
102 | /* Converts u_int8_t to u_int32_t */
|
103 | u_int32_t Blowfish_stream2word(const u_int8_t *, u_int16_t , u_int16_t *);
|
104 |
|
105 | /* bcrypt functions*/
|
106 | void bcrypt_gensalt(char, u_int8_t, u_int8_t*, char *);
|
107 | void bcrypt(const char *, const char *, char *);
|
108 | void encode_salt(char *, u_int8_t *, char, u_int16_t, u_int8_t);
|
109 | u_int32_t bcrypt_get_rounds(const char *);
|
110 |
|
111 |
|