Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/secure/lib/libcrypt/blowfish.h
39492 views
1
/*
2
* Blowfish - a fast block cipher designed by Bruce Schneier
3
*
4
* Copyright 1997 Niels Provos <[email protected]>
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
* 3. All advertising materials mentioning features or use of this software
16
* must display the following acknowledgement:
17
* This product includes software developed by Niels Provos.
18
* 4. The name of the author may not be used to endorse or promote products
19
* derived from this software without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*/
32
33
/*
34
* FreeBSD implementation by Paul Herman <[email protected]>
35
*/
36
37
#ifndef _BLF_H_
38
#define _BLF_H_
39
40
/* Schneier states the maximum key length to be 56 bytes.
41
* The way how the subkeys are initalized by the key up
42
* to (N+2)*4 i.e. 72 bytes are utilized.
43
* Warning: For normal blowfish encryption only 56 bytes
44
* of the key affect all cipherbits.
45
*/
46
47
#define BLF_N 16 /* Number of Subkeys */
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_initstate(blf_ctx *);
62
void Blowfish_expand0state(blf_ctx *, const u_int8_t *, u_int16_t);
63
void Blowfish_expandstate
64
(blf_ctx *, const u_int8_t *, u_int16_t, const u_int8_t *, u_int16_t);
65
u_int32_t Blowfish_stream2word(const u_int8_t *, u_int16_t, u_int16_t *);
66
67
void blf_enc(blf_ctx *, u_int32_t *, u_int16_t);
68
69
#endif /* _BLF_H_ */
70
71