bf_enc.c (63249) | bf_enc.c (78064) |
---|---|
1/* $FreeBSD: head/sys/crypto/blowfish/bf_enc.c 62587 2000-07-04 16:35:15Z itojun $ */ 2/* $KAME: bf_enc.c,v 1.3 2000/03/27 04:36:26 sumikawa Exp $ */ | 1/* $FreeBSD: head/sys/crypto/blowfish/bf_enc.c 78064 2001-06-11 12:39:29Z ume $ */ 2/* $KAME: bf_enc.c,v 1.5 2000/09/18 21:21:19 itojun Exp $ */ |
3 4/* crypto/bf/bf_enc.c */ 5/* Copyright (C) 1995-1997 Eric Young (eay@mincom.oz.au) 6 * All rights reserved. 7 * 8 * This package is an SSL implementation written 9 * by Eric Young (eay@mincom.oz.au). 10 * The implementation was written so as to conform with Netscapes SSL. --- 43 unchanged lines hidden (view full) --- 54 * SUCH DAMAGE. 55 * 56 * The licence and distribution terms for any publically available version or 57 * derivative of this code cannot be changed. i.e. this code cannot simply be 58 * copied and put under another distribution licence 59 * [including the GNU Public Licence.] 60 */ 61 | 3 4/* crypto/bf/bf_enc.c */ 5/* Copyright (C) 1995-1997 Eric Young (eay@mincom.oz.au) 6 * All rights reserved. 7 * 8 * This package is an SSL implementation written 9 * by Eric Young (eay@mincom.oz.au). 10 * The implementation was written so as to conform with Netscapes SSL. --- 43 unchanged lines hidden (view full) --- 54 * SUCH DAMAGE. 55 * 56 * The licence and distribution terms for any publically available version or 57 * derivative of this code cannot be changed. i.e. this code cannot simply be 58 * copied and put under another distribution licence 59 * [including the GNU Public Licence.] 60 */ 61 |
62#include <sys/types.h> |
|
62#include <crypto/blowfish/blowfish.h> 63#include <crypto/blowfish/bf_locl.h> 64 65/* Blowfish as implemented from 'Blowfish: Springer-Verlag paper' 66 * (From LECTURE NOTES IN COIMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION, 67 * CAMBRIDGE SECURITY WORKSHOP, CAMBRIDGE, U.K., DECEMBER 9-11, 1993) 68 */ 69 70#if (BF_ROUNDS != 16) && (BF_ROUNDS != 20) 71If you set BF_ROUNDS to some value other than 16 or 20, you will have 72to modify the code. 73#endif 74 | 63#include <crypto/blowfish/blowfish.h> 64#include <crypto/blowfish/bf_locl.h> 65 66/* Blowfish as implemented from 'Blowfish: Springer-Verlag paper' 67 * (From LECTURE NOTES IN COIMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION, 68 * CAMBRIDGE SECURITY WORKSHOP, CAMBRIDGE, U.K., DECEMBER 9-11, 1993) 69 */ 70 71#if (BF_ROUNDS != 16) && (BF_ROUNDS != 20) 72If you set BF_ROUNDS to some value other than 16 or 20, you will have 73to modify the code. 74#endif 75 |
75void BF_encrypt(data,key,encrypt) 76BF_LONG *data; 77BF_KEY *key; 78int encrypt; 79 { 80 register BF_LONG l,r,*p,*s; | 76/* XXX "data" is host endian */ 77void 78BF_encrypt(data, key, encrypt) 79 BF_LONG *data; 80 BF_KEY *key; 81 int encrypt; 82{ 83 register BF_LONG l, r, *p, *s; |
81 | 84 |
82 p=key->P; 83 s= &(key->S[0]); 84 l=data[0]; 85 r=data[1]; | 85 p = key->P; 86 s= &key->S[0]; 87 l = data[0]; 88 r = data[1]; |
86 | 89 |
87 if (encrypt) 88 { | 90 if (encrypt) { |
89 l^=p[0]; | 91 l^=p[0]; |
90 BF_ENC(r,l,s,p[ 1]); 91 BF_ENC(l,r,s,p[ 2]); 92 BF_ENC(r,l,s,p[ 3]); 93 BF_ENC(l,r,s,p[ 4]); 94 BF_ENC(r,l,s,p[ 5]); 95 BF_ENC(l,r,s,p[ 6]); 96 BF_ENC(r,l,s,p[ 7]); 97 BF_ENC(l,r,s,p[ 8]); 98 BF_ENC(r,l,s,p[ 9]); 99 BF_ENC(l,r,s,p[10]); 100 BF_ENC(r,l,s,p[11]); 101 BF_ENC(l,r,s,p[12]); 102 BF_ENC(r,l,s,p[13]); 103 BF_ENC(l,r,s,p[14]); 104 BF_ENC(r,l,s,p[15]); 105 BF_ENC(l,r,s,p[16]); | 92 BF_ENC(r, l, s, p[ 1]); 93 BF_ENC(l, r, s, p[ 2]); 94 BF_ENC(r, l, s, p[ 3]); 95 BF_ENC(l, r, s, p[ 4]); 96 BF_ENC(r, l, s, p[ 5]); 97 BF_ENC(l, r, s, p[ 6]); 98 BF_ENC(r, l, s, p[ 7]); 99 BF_ENC(l, r, s, p[ 8]); 100 BF_ENC(r, l, s, p[ 9]); 101 BF_ENC(l, r, s, p[10]); 102 BF_ENC(r, l, s, p[11]); 103 BF_ENC(l, r, s, p[12]); 104 BF_ENC(r, l, s, p[13]); 105 BF_ENC(l, r, s, p[14]); 106 BF_ENC(r, l, s, p[15]); 107 BF_ENC(l, r, s, p[16]); |
106#if BF_ROUNDS == 20 | 108#if BF_ROUNDS == 20 |
107 BF_ENC(r,l,s,p[17]); 108 BF_ENC(l,r,s,p[18]); 109 BF_ENC(r,l,s,p[19]); 110 BF_ENC(l,r,s,p[20]); | 109 BF_ENC(r, l, s, p[17]); 110 BF_ENC(l, r, s, p[18]); 111 BF_ENC(r, l, s, p[19]); 112 BF_ENC(l, r, s, p[20]); |
111#endif | 113#endif |
112 r^=p[BF_ROUNDS+1]; 113 } 114 else 115 { 116 l^=p[BF_ROUNDS+1]; | 114 r ^= p[BF_ROUNDS + 1]; 115 } else { 116 l ^= p[BF_ROUNDS + 1]; |
117#if BF_ROUNDS == 20 | 117#if BF_ROUNDS == 20 |
118 BF_ENC(r,l,s,p[20]); 119 BF_ENC(l,r,s,p[19]); 120 BF_ENC(r,l,s,p[18]); 121 BF_ENC(l,r,s,p[17]); | 118 BF_ENC(r, l, s, p[20]); 119 BF_ENC(l, r, s, p[19]); 120 BF_ENC(r, l, s, p[18]); 121 BF_ENC(l, r, s, p[17]); |
122#endif | 122#endif |
123 BF_ENC(r,l,s,p[16]); 124 BF_ENC(l,r,s,p[15]); 125 BF_ENC(r,l,s,p[14]); 126 BF_ENC(l,r,s,p[13]); 127 BF_ENC(r,l,s,p[12]); 128 BF_ENC(l,r,s,p[11]); 129 BF_ENC(r,l,s,p[10]); 130 BF_ENC(l,r,s,p[ 9]); 131 BF_ENC(r,l,s,p[ 8]); 132 BF_ENC(l,r,s,p[ 7]); 133 BF_ENC(r,l,s,p[ 6]); 134 BF_ENC(l,r,s,p[ 5]); 135 BF_ENC(r,l,s,p[ 4]); 136 BF_ENC(l,r,s,p[ 3]); 137 BF_ENC(r,l,s,p[ 2]); 138 BF_ENC(l,r,s,p[ 1]); 139 r^=p[0]; 140 } 141 data[1]=l&0xffffffff; 142 data[0]=r&0xffffffff; | 123 BF_ENC(r, l, s, p[16]); 124 BF_ENC(l, r, s, p[15]); 125 BF_ENC(r, l, s, p[14]); 126 BF_ENC(l, r, s, p[13]); 127 BF_ENC(r, l, s, p[12]); 128 BF_ENC(l, r, s, p[11]); 129 BF_ENC(r, l, s, p[10]); 130 BF_ENC(l, r, s, p[ 9]); 131 BF_ENC(r, l, s, p[ 8]); 132 BF_ENC(l, r, s, p[ 7]); 133 BF_ENC(r, l, s, p[ 6]); 134 BF_ENC(l, r, s, p[ 5]); 135 BF_ENC(r, l, s, p[ 4]); 136 BF_ENC(l, r, s, p[ 3]); 137 BF_ENC(r, l, s, p[ 2]); 138 BF_ENC(l, r, s, p[ 1]); 139 r ^= p[0]; |
143 } | 140 } |
141 data[1] = l & 0xffffffff; 142 data[0] = r & 0xffffffff; 143} |
|