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