summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorprovos <>1999-12-28 13:09:13 +0000
committerprovos <>1999-12-28 13:09:13 +0000
commitc90229eaa6df37dd29c45c1aa632cb37ca8cfa06 (patch)
treedb4a87834377aa19929d8b55126f7101fa4868be
parentc01482d9c8c7329044dfb4a98ba1abd6cc766483 (diff)
downloadopenbsd-c90229eaa6df37dd29c45c1aa632cb37ca8cfa06.tar.gz
openbsd-c90229eaa6df37dd29c45c1aa632cb37ca8cfa06.tar.bz2
openbsd-c90229eaa6df37dd29c45c1aa632cb37ca8cfa06.zip
speed up blowfish by > 20%.
-rw-r--r--src/lib/libc/crypt/blowfish.c60
1 files changed, 32 insertions, 28 deletions
diff --git a/src/lib/libc/crypt/blowfish.c b/src/lib/libc/crypt/blowfish.c
index 8d7ae9141f..846cee0e8a 100644
--- a/src/lib/libc/crypt/blowfish.c
+++ b/src/lib/libc/crypt/blowfish.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: blowfish.c,v 1.13 1999/05/14 16:08:58 niklas Exp $ */ 1/* $OpenBSD: blowfish.c,v 1.14 1999/12/28 13:09:13 provos Exp $ */
2/* 2/*
3 * Blowfish block cipher for OpenBSD 3 * Blowfish block cipher for OpenBSD
4 * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de> 4 * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
@@ -56,12 +56,12 @@
56 56
57/* Function for Feistel Networks */ 57/* Function for Feistel Networks */
58 58
59#define F(bc, x) ((((bc)->S[0][((x) & 0xFF000000) >> 24] \ 59#define F(s, x) ((((s)[ (((x)>>24)&0xFF)] \
60 + (bc)->S[1][((x) &0xFF0000 ) >> 16]) \ 60 + (s)[0x100 + (((x)>>16)&0xFF)]) \
61 ^ (bc)->S[2][((x) & 0xFF00) >> 8]) \ 61 ^ (s)[0x200 + (((x)>> 8)&0xFF)]) \
62 + (bc)->S[3][(x) & 0x00FF]) 62 + (s)[0x300 + ( (x) &0xFF)])
63 63
64#define BLFRND(bc,i,j,n) (i ^= F(bc,j) ^ (bc)->P[n]) 64#define BLFRND(s,p,i,j,n) (i ^= F(s,j) ^ (p)[n])
65 65
66void 66void
67Blowfish_encipher(c, xl, xr) 67Blowfish_encipher(c, xl, xr)
@@ -71,21 +71,23 @@ Blowfish_encipher(c, xl, xr)
71{ 71{
72 u_int32_t Xl; 72 u_int32_t Xl;
73 u_int32_t Xr; 73 u_int32_t Xr;
74 u_int32_t *s = c->S[0];
75 u_int32_t *p = c->P;
74 76
75 Xl = *xl; 77 Xl = *xl;
76 Xr = *xr; 78 Xr = *xr;
77 79
78 Xl ^= c->P[0]; 80 Xl ^= p[0];
79 BLFRND(c, Xr, Xl, 1); BLFRND(c, Xl, Xr, 2); 81 BLFRND(s, p, Xr, Xl, 1); BLFRND(s, p, Xl, Xr, 2);
80 BLFRND(c, Xr, Xl, 3); BLFRND(c, Xl, Xr, 4); 82 BLFRND(s, p, Xr, Xl, 3); BLFRND(s, p, Xl, Xr, 4);
81 BLFRND(c, Xr, Xl, 5); BLFRND(c, Xl, Xr, 6); 83 BLFRND(s, p, Xr, Xl, 5); BLFRND(s, p, Xl, Xr, 6);
82 BLFRND(c, Xr, Xl, 7); BLFRND(c, Xl, Xr, 8); 84 BLFRND(s, p, Xr, Xl, 7); BLFRND(s, p, Xl, Xr, 8);
83 BLFRND(c, Xr, Xl, 9); BLFRND(c, Xl, Xr, 10); 85 BLFRND(s, p, Xr, Xl, 9); BLFRND(s, p, Xl, Xr, 10);
84 BLFRND(c, Xr, Xl, 11); BLFRND(c, Xl, Xr, 12); 86 BLFRND(s, p, Xr, Xl, 11); BLFRND(s, p, Xl, Xr, 12);
85 BLFRND(c, Xr, Xl, 13); BLFRND(c, Xl, Xr, 14); 87 BLFRND(s, p, Xr, Xl, 13); BLFRND(s, p, Xl, Xr, 14);
86 BLFRND(c, Xr, Xl, 15); BLFRND(c, Xl, Xr, 16); 88 BLFRND(s, p, Xr, Xl, 15); BLFRND(s, p, Xl, Xr, 16);
87 89
88 *xl = Xr ^ c->P[17]; 90 *xl = Xr ^ p[17];
89 *xr = Xl; 91 *xr = Xl;
90} 92}
91 93
@@ -97,21 +99,23 @@ Blowfish_decipher(c, xl, xr)
97{ 99{
98 u_int32_t Xl; 100 u_int32_t Xl;
99 u_int32_t Xr; 101 u_int32_t Xr;
102 u_int32_t *s = c->S[0];
103 u_int32_t *p = c->P;
100 104
101 Xl = *xl; 105 Xl = *xl;
102 Xr = *xr; 106 Xr = *xr;
103 107
104 Xl ^= c->P[17]; 108 Xl ^= p[17];
105 BLFRND(c, Xr, Xl, 16); BLFRND(c, Xl, Xr, 15); 109 BLFRND(s, p, Xr, Xl, 16); BLFRND(s, p, Xl, Xr, 15);
106 BLFRND(c, Xr, Xl, 14); BLFRND(c, Xl, Xr, 13); 110 BLFRND(s, p, Xr, Xl, 14); BLFRND(s, p, Xl, Xr, 13);
107 BLFRND(c, Xr, Xl, 12); BLFRND(c, Xl, Xr, 11); 111 BLFRND(s, p, Xr, Xl, 12); BLFRND(s, p, Xl, Xr, 11);
108 BLFRND(c, Xr, Xl, 10); BLFRND(c, Xl, Xr, 9); 112 BLFRND(s, p, Xr, Xl, 10); BLFRND(s, p, Xl, Xr, 9);
109 BLFRND(c, Xr, Xl, 8); BLFRND(c, Xl, Xr, 7); 113 BLFRND(s, p, Xr, Xl, 8); BLFRND(s, p, Xl, Xr, 7);
110 BLFRND(c, Xr, Xl, 6); BLFRND(c, Xl, Xr, 5); 114 BLFRND(s, p, Xr, Xl, 6); BLFRND(s, p, Xl, Xr, 5);
111 BLFRND(c, Xr, Xl, 4); BLFRND(c, Xl, Xr, 3); 115 BLFRND(s, p, Xr, Xl, 4); BLFRND(s, p, Xl, Xr, 3);
112 BLFRND(c, Xr, Xl, 2); BLFRND(c, Xl, Xr, 1); 116 BLFRND(s, p, Xr, Xl, 2); BLFRND(s, p, Xl, Xr, 1);
113 117
114 *xl = Xr ^ c->P[0]; 118 *xl = Xr ^ p[0];
115 *xr = Xl; 119 *xr = Xl;
116} 120}
117 121