xref: /openbsd-src/lib/libc/crypt/blowfish.3 (revision 832bedbc19acba9d33aa4d33e3d47fe2719559fb)
1*832bedbcSdjm.\" $OpenBSD: blowfish.3,v 1.24 2021/11/29 01:04:45 djm Exp $
2f885a527Saaron.\"
3473a5892Sprovos.\" Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
4473a5892Sprovos.\" All rights reserved.
5473a5892Sprovos.\"
6473a5892Sprovos.\" Redistribution and use in source and binary forms, with or without
7473a5892Sprovos.\" modification, are permitted provided that the following conditions
8473a5892Sprovos.\" are met:
9473a5892Sprovos.\" 1. Redistributions of source code must retain the above copyright
10473a5892Sprovos.\"    notice, this list of conditions and the following disclaimer.
11473a5892Sprovos.\" 2. Redistributions in binary form must reproduce the above copyright
12473a5892Sprovos.\"    notice, this list of conditions and the following disclaimer in the
13473a5892Sprovos.\"    documentation and/or other materials provided with the distribution.
14*832bedbcSdjm.\" 3. The name of the author may not be used to endorse or promote products
15473a5892Sprovos.\"    derived from this software without specific prior written permission.
16473a5892Sprovos.\"
17473a5892Sprovos.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18473a5892Sprovos.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19473a5892Sprovos.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20473a5892Sprovos.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21473a5892Sprovos.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22473a5892Sprovos.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23473a5892Sprovos.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24473a5892Sprovos.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25473a5892Sprovos.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26473a5892Sprovos.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27473a5892Sprovos.\"
28473a5892Sprovos.\" Manual page, using -mandoc macros
29473a5892Sprovos.\"
30*832bedbcSdjm.Dd $Mdocdate: November 29 2021 $
31d04ba2ccSjmc.Dt BLF_KEY 3
32fc8533a3Saaron.Os
33473a5892Sprovos.Sh NAME
34473a5892Sprovos.Nm blf_key ,
35473a5892Sprovos.Nm blf_enc ,
36607113a8Sjmc.Nm blf_dec ,
37607113a8Sjmc.Nm blf_ecb_encrypt ,
38607113a8Sjmc.Nm blf_ecb_decrypt ,
39607113a8Sjmc.Nm blf_cbc_encrypt ,
40607113a8Sjmc.Nm blf_cbc_decrypt
41473a5892Sprovos.Nd Blowfish encryption
42473a5892Sprovos.Sh SYNOPSIS
4364d4e987Stedu.In blf.h
44473a5892Sprovos.Ft void
45473a5892Sprovos.Fn blf_key "blf_ctx *state" "const u_int8_t *key" "u_int16_t keylen"
46473a5892Sprovos.Ft void
47d5f5483eSjmc.Fn blf_enc "blf_ctx *state" "u_int32_t *data" "u_int16_t blocks"
48473a5892Sprovos.Ft void
49d5f5483eSjmc.Fn blf_dec "blf_ctx *state" "u_int32_t *data" "u_int16_t blocks"
501ca3d8aaSprovos.Ft void
511ca3d8aaSprovos.Fn blf_ecb_encrypt "blf_ctx *state" "u_int8_t *data" "u_int32_t datalen"
521ca3d8aaSprovos.Ft void
531ca3d8aaSprovos.Fn blf_ecb_decrypt "blf_ctx *state" "u_int8_t *data" "u_int32_t datalen"
541ca3d8aaSprovos.Ft void
551ca3d8aaSprovos.Fn blf_cbc_encrypt "blf_ctx *state" "u_int8_t *iv" "u_int8_t *data" "u_int32_t datalen"
561ca3d8aaSprovos.Ft void
571ca3d8aaSprovos.Fn blf_cbc_decrypt "blf_ctx *state" "u_int8_t *iv" "u_int8_t *data" "u_int32_t datalen"
58473a5892Sprovos.Sh DESCRIPTION
598aeed940Sjmc.Em Blowfish
60473a5892Sprovosis a fast unpatented block cipher designed by Bruce Schneier.
61d71e9523SjaredyIt basically consists of a 16-round Feistel network.
62d71e9523SjaredyThe block size is 64 bits and the maximum key size is 448 bits.
63473a5892Sprovos.Pp
64473a5892SprovosThe
65473a5892Sprovos.Fn blf_key
66d71e9523Sjaredyfunction initializes the 4 8-bit S-boxes and the 18 Subkeys with
6783332665Saaronthe hexadecimal digits of Pi.
6883332665SaaronThe key is used for further randomization.
69473a5892SprovosThe first argument to
70473a5892Sprovos.Fn blf_enc
71f7de5c7bSalexis the initialized state derived from
72473a5892Sprovos.Fn blf_key .
731ca3d8aaSprovosThe stream of 32-bit words is encrypted in Electronic Codebook
741ca3d8aaSprovosMode (ECB) and
758aeed940Sjmc.Fa blocks
76d5f5483eSjmcis the number of 64-bit blocks in the stream.
77473a5892Sprovos.Fn blf_dec
78473a5892Sprovosis used for decrypting Blowfish encrypted blocks.
79473a5892Sprovos.Pp
80473a5892SprovosThe functions
811ca3d8aaSprovos.Fn blf_ecb_encrypt
821ca3d8aaSprovosand
831ca3d8aaSprovos.Fn blf_ecb_decrypt
841ca3d8aaSprovosare used for encrypting and decrypting octet streams in ECB mode.
851ca3d8aaSprovosThe functions
861ca3d8aaSprovos.Fn blf_cbc_encrypt
871ca3d8aaSprovosand
881ca3d8aaSprovos.Fn blf_cbc_decrypt
891ca3d8aaSprovosare used for encrypting and decrypting octet streams in
901ca3d8aaSprovosCipherblock Chaining Mode (CBC).
91d5f5483eSjmcFor these functions
928aeed940Sjmc.Fa datalen
93d5f5483eSjmcspecifies the number of octets of data to encrypt or decrypt.
94d5f5483eSjmcIt must be a multiple of 8 (64-bit block).
951ec39fb5SjmcThe initialisation vector
968aeed940Sjmc.Fa iv
971ec39fb5Sjmcpoints to an 8-byte buffer.
98473a5892Sprovos.Sh SEE ALSO
99473a5892Sprovos.Xr passwd 1 ,
100350bb3b8Salex.Xr crypt 3 ,
101473a5892Sprovos.Xr passwd 5
102ea2542f8Smpech.Sh AUTHORS
1037d353dc4Sschwarze.An Niels Provos Aq Mt provos@physnet.uni-hamburg.de
104