]> matita.cs.unibo.it Git - pkg-cerco/frama-c-cost-plugin.git/blob - plugin/tests/fail/blowfish.c
Imported Upstream version 0.1
[pkg-cerco/frama-c-cost-plugin.git] / plugin / tests / fail / blowfish.c
1 /*\r
2  * Author     :  Paul Kocher\r
3  * E-mail     :  pck@netcom.com\r
4  * Date       :  1997\r
5  * Description:  C implementation of the Blowfish algorithm.\r
6  */\r
7 \r
8 #include "blowfish.h"\r
9 \r
10 \r
11 \r
12 #define N               16\r
13 \r
14 \r
15 \r
16 static unsigned long F(BLOWFISH_CTX *ctx, unsigned long x);\r
17 \r
18 \r
19 \r
20 \r
21 \r
22 \r
23 \r
24 static const unsigned long ORIG_P[16 + 2] = {\r
25 \r
26         0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L,\r
27 \r
28         0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L,\r
29 \r
30         0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL,\r
31 \r
32         0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L,\r
33 \r
34         0x9216D5D9L, 0x8979FB1BL\r
35 \r
36 };\r
37 \r
38 \r
39 \r
40 static const unsigned long ORIG_S[4][256] = {\r
41 \r
42     {   0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L,\r
43 \r
44         0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L,\r
45 \r
46         0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L,\r
47 \r
48         0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL,\r
49 \r
50         0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL,\r
51 \r
52         0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L,\r
53 \r
54         0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL,\r
55 \r
56         0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL,\r
57 \r
58         0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L,\r
59 \r
60         0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L,\r
61 \r
62         0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL,\r
63 \r
64         0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL,\r
65 \r
66         0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL,\r
67 \r
68         0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L,\r
69 \r
70         0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L,\r
71 \r
72         0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L,\r
73 \r
74         0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L,\r
75 \r
76         0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L,\r
77 \r
78         0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL,\r
79 \r
80         0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L,\r
81 \r
82         0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L,\r
83 \r
84         0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L,\r
85 \r
86         0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L,\r
87 \r
88         0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL,\r
89 \r
90         0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L,\r
91 \r
92         0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL,\r
93 \r
94         0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL,\r
95 \r
96         0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L,\r
97 \r
98         0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL,\r
99 \r
100         0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L,\r
101 \r
102         0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL,\r
103 \r
104         0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L,\r
105 \r
106         0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L,\r
107 \r
108         0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL,\r
109 \r
110         0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L,\r
111 \r
112         0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L,\r
113 \r
114         0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL,\r
115 \r
116         0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L,\r
117 \r
118         0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL,\r
119 \r
120         0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L,\r
121 \r
122         0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L,\r
123 \r
124         0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL,\r
125 \r
126         0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L,\r
127 \r
128         0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L,\r
129 \r
130         0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L,\r
131 \r
132         0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L,\r
133 \r
134         0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L,\r
135 \r
136         0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL,\r
137 \r
138         0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL,\r
139 \r
140         0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L,\r
141 \r
142         0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L,\r
143 \r
144         0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L,\r
145 \r
146         0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L,\r
147 \r
148         0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL,\r
149 \r
150         0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L,\r
151 \r
152         0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL,\r
153 \r
154         0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL,\r
155 \r
156         0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L,\r
157 \r
158         0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L,\r
159 \r
160         0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L,\r
161 \r
162         0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L,\r
163 \r
164         0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L,\r
165 \r
166         0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L,\r
167 \r
168         0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL   },\r
169 \r
170     {   0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L,\r
171 \r
172         0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L,\r
173 \r
174         0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L,\r
175 \r
176         0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL,\r
177 \r
178         0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L,\r
179 \r
180         0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L,\r
181 \r
182         0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL,\r
183 \r
184         0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L,\r
185 \r
186         0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L,\r
187 \r
188         0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L,\r
189 \r
190         0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL,\r
191 \r
192         0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL,\r
193 \r
194         0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L,\r
195 \r
196         0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L,\r
197 \r
198         0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L,\r
199 \r
200         0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L,\r
201 \r
202         0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL,\r
203 \r
204         0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL,\r
205 \r
206         0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL,\r
207 \r
208         0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L,\r
209 \r
210         0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL,\r
211 \r
212         0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L,\r
213 \r
214         0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L,\r
215 \r
216         0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL,\r
217 \r
218         0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL,\r
219 \r
220         0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L,\r
221 \r
222         0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL,\r
223 \r
224         0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L,\r
225 \r
226         0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL,\r
227 \r
228         0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL,\r
229 \r
230         0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L,\r
231 \r
232         0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L,\r
233 \r
234         0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L,\r
235 \r
236         0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L,\r
237 \r
238         0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L,\r
239 \r
240         0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L,\r
241 \r
242         0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L,\r
243 \r
244         0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL,\r
245 \r
246         0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L,\r
247 \r
248         0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL,\r
249 \r
250         0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L,\r
251 \r
252         0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L,\r
253 \r
254         0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L,\r
255 \r
256         0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L,\r
257 \r
258         0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L,\r
259 \r
260         0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L,\r
261 \r
262         0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L,\r
263 \r
264         0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L,\r
265 \r
266         0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L,\r
267 \r
268         0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L,\r
269 \r
270         0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L,\r
271 \r
272         0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L,\r
273 \r
274         0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L,\r
275 \r
276         0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L,\r
277 \r
278         0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L,\r
279 \r
280         0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L,\r
281 \r
282         0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL,\r
283 \r
284         0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL,\r
285 \r
286         0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L,\r
287 \r
288         0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL,\r
289 \r
290         0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L,\r
291 \r
292         0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L,\r
293 \r
294         0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L,\r
295 \r
296         0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L   },\r
297 \r
298     {   0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L,\r
299 \r
300         0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L,\r
301 \r
302         0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL,\r
303 \r
304         0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L,\r
305 \r
306         0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L,\r
307 \r
308         0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L,\r
309 \r
310         0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL,\r
311 \r
312         0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL,\r
313 \r
314         0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL,\r
315 \r
316         0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L,\r
317 \r
318         0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L,\r
319 \r
320         0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL,\r
321 \r
322         0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L,\r
323 \r
324         0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL,\r
325 \r
326         0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L,\r
327 \r
328         0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL,\r
329 \r
330         0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L,\r
331 \r
332         0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL,\r
333 \r
334         0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L,\r
335 \r
336         0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL,\r
337 \r
338         0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L,\r
339 \r
340         0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L,\r
341 \r
342         0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL,\r
343 \r
344         0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L,\r
345 \r
346         0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L,\r
347 \r
348         0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L,\r
349 \r
350         0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L,\r
351 \r
352         0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL,\r
353 \r
354         0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L,\r
355 \r
356         0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL,\r
357 \r
358         0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L,\r
359 \r
360         0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL,\r
361 \r
362         0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L,\r
363 \r
364         0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL,\r
365 \r
366         0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL,\r
367 \r
368         0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL,\r
369 \r
370         0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L,\r
371 \r
372         0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L,\r
373 \r
374         0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL,\r
375 \r
376         0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL,\r
377 \r
378         0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL,\r
379 \r
380         0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL,\r
381 \r
382         0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL,\r
383 \r
384         0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L,\r
385 \r
386         0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L,\r
387 \r
388         0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L,\r
389 \r
390         0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L,\r
391 \r
392         0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL,\r
393 \r
394         0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL,\r
395 \r
396         0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L,\r
397 \r
398         0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L,\r
399 \r
400         0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L,\r
401 \r
402         0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L,\r
403 \r
404         0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L,\r
405 \r
406         0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L,\r
407 \r
408         0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L,\r
409 \r
410         0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L,\r
411 \r
412         0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L,\r
413 \r
414         0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L,\r
415 \r
416         0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL,\r
417 \r
418         0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L,\r
419 \r
420         0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL,\r
421 \r
422         0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L,\r
423 \r
424         0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L  },\r
425 \r
426     {   0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL,\r
427 \r
428         0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL,\r
429 \r
430         0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL,\r
431 \r
432         0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L,\r
433 \r
434         0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L,\r
435 \r
436         0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L,\r
437 \r
438         0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L,\r
439 \r
440         0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L,\r
441 \r
442         0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L,\r
443 \r
444         0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L,\r
445 \r
446         0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L,\r
447 \r
448         0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L,\r
449 \r
450         0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L,\r
451 \r
452         0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L,\r
453 \r
454         0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L,\r
455 \r
456         0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL,\r
457 \r
458         0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL,\r
459 \r
460         0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L,\r
461 \r
462         0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL,\r
463 \r
464         0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL,\r
465 \r
466         0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL,\r
467 \r
468         0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L,\r
469 \r
470         0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL,\r
471 \r
472         0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL,\r
473 \r
474         0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L,\r
475 \r
476         0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L,\r
477 \r
478         0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L,\r
479 \r
480         0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L,\r
481 \r
482         0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL,\r
483 \r
484         0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL,\r
485 \r
486         0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L,\r
487 \r
488         0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L,\r
489 \r
490         0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L,\r
491 \r
492         0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL,\r
493 \r
494         0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L,\r
495 \r
496         0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L,\r
497 \r
498         0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L,\r
499 \r
500         0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL,\r
501 \r
502         0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L,\r
503 \r
504         0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L,\r
505 \r
506         0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L,\r
507 \r
508         0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL,\r
509 \r
510         0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL,\r
511 \r
512         0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L,\r
513 \r
514         0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L,\r
515 \r
516         0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L,\r
517 \r
518         0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L,\r
519 \r
520         0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL,\r
521 \r
522         0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L,\r
523 \r
524         0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL,\r
525 \r
526         0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL,\r
527 \r
528         0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L,\r
529 \r
530         0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L,\r
531 \r
532         0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL,\r
533 \r
534         0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L,\r
535 \r
536         0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL,\r
537 \r
538         0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L,\r
539 \r
540         0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL,\r
541 \r
542         0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L,\r
543 \r
544         0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L,\r
545 \r
546         0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL,\r
547 \r
548         0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L,\r
549 \r
550         0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL,\r
551 \r
552         0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L  }\r
553 \r
554 };\r
555 \r
556 \r
557 \r
558 \r
559 \r
560 unsigned long F(BLOWFISH_CTX *ctx, unsigned long x) {\r
561 \r
562    unsigned short a, b, c, d;\r
563 \r
564    unsigned long  y;\r
565 \r
566 \r
567 \r
568    d = x & 0x00FF;\r
569 \r
570    x >>= 8;\r
571 \r
572    c = x & 0x00FF;\r
573 \r
574    x >>= 8;\r
575 \r
576    b = x & 0x00FF;\r
577 \r
578    x >>= 8;\r
579 \r
580    a = x & 0x00FF;\r
581 \r
582    y = ctx->S[0][a] + ctx->S[1][b];\r
583 \r
584    y = y ^ ctx->S[2][c];\r
585 \r
586    y = y + ctx->S[3][d];\r
587 \r
588 \r
589 \r
590    return y;\r
591 \r
592 }\r
593 \r
594 \r
595 \r
596 \r
597 \r
598 void Blowfish_Encrypt(BLOWFISH_CTX *ctx, unsigned long *xl, unsigned long\r
599 *xr) {\r
600 \r
601   unsigned long  Xl;\r
602 \r
603   unsigned long  Xr;\r
604 \r
605   unsigned long  temp;\r
606 \r
607   short       i;\r
608 \r
609 \r
610 \r
611   Xl = *xl;\r
612 \r
613   Xr = *xr;\r
614 \r
615 \r
616 \r
617   for (i = 0; i < N; ++i) {\r
618 \r
619     Xl = Xl ^ ctx->P[i];\r
620 \r
621     Xr = F(ctx, Xl) ^ Xr;\r
622 \r
623 \r
624 \r
625     temp = Xl;\r
626 \r
627     Xl = Xr;\r
628 \r
629     Xr = temp;\r
630 \r
631   }\r
632 \r
633 \r
634 \r
635   temp = Xl;\r
636 \r
637   Xl = Xr;\r
638 \r
639   Xr = temp;\r
640 \r
641 \r
642 \r
643   Xr = Xr ^ ctx->P[N];\r
644 \r
645   Xl = Xl ^ ctx->P[N + 1];\r
646 \r
647 \r
648 \r
649   *xl = Xl;\r
650 \r
651   *xr = Xr;\r
652 \r
653 }\r
654 \r
655 \r
656 \r
657 \r
658 \r
659 void Blowfish_Decrypt(BLOWFISH_CTX *ctx, unsigned long *xl, unsigned long\r
660 *xr) {\r
661 \r
662   unsigned long  Xl;\r
663 \r
664   unsigned long  Xr;\r
665 \r
666   unsigned long  temp;\r
667 \r
668   short       i;\r
669 \r
670 \r
671 \r
672   Xl = *xl;\r
673 \r
674   Xr = *xr;\r
675 \r
676 \r
677 \r
678   for (i = N + 1; i > 1; --i) {\r
679 \r
680     Xl = Xl ^ ctx->P[i];\r
681 \r
682     Xr = F(ctx, Xl) ^ Xr;\r
683 \r
684 \r
685 \r
686     /* Exchange Xl and Xr */\r
687 \r
688     temp = Xl;\r
689 \r
690     Xl = Xr;\r
691 \r
692     Xr = temp;\r
693 \r
694   }\r
695 \r
696 \r
697 \r
698   /* Exchange Xl and Xr */\r
699 \r
700   temp = Xl;\r
701 \r
702   Xl = Xr;\r
703 \r
704   Xr = temp;\r
705 \r
706 \r
707 \r
708   Xr = Xr ^ ctx->P[1];\r
709 \r
710   Xl = Xl ^ ctx->P[0];\r
711 \r
712 \r
713 \r
714   *xl = Xl;\r
715 \r
716   *xr = Xr;\r
717 \r
718 }\r
719 \r
720 \r
721 \r
722 \r
723 \r
724 void Blowfish_Init(BLOWFISH_CTX *ctx, unsigned char *key, int keyLen) {\r
725 \r
726   int i, j, k;\r
727 \r
728   unsigned long data, datal, datar;\r
729 \r
730 \r
731 \r
732   for (i = 0; i < 4; i++) {\r
733 \r
734     for (j = 0; j < 256; j++)\r
735 \r
736       ctx->S[i][j] = ORIG_S[i][j];\r
737 \r
738   }\r
739 \r
740 \r
741 \r
742   j = 0;\r
743 \r
744   for (i = 0; i < N + 2; ++i) {\r
745 \r
746     data = 0x00000000;\r
747 \r
748     for (k = 0; k < 4; ++k) {\r
749 \r
750       data = (data << 8) | key[j];\r
751 \r
752       j = j + 1;\r
753 \r
754       if (j >= keyLen)\r
755 \r
756         j = 0;\r
757 \r
758     }\r
759 \r
760     ctx->P[i] = ORIG_P[i] ^ data;\r
761 \r
762   }\r
763 \r
764 \r
765 \r
766   datal = 0x00000000;\r
767 \r
768   datar = 0x00000000;\r
769 \r
770 \r
771 \r
772   for (i = 0; i < N + 2; i += 2) {\r
773 \r
774     Blowfish_Encrypt(ctx, &datal, &datar);\r
775 \r
776     ctx->P[i] = datal;\r
777 \r
778     ctx->P[i + 1] = datar;\r
779 \r
780   }\r
781 \r
782 \r
783 \r
784   for (i = 0; i < 4; ++i) {\r
785 \r
786     for (j = 0; j < 256; j += 2) {\r
787 \r
788       Blowfish_Encrypt(ctx, &datal, &datar);\r
789 \r
790       ctx->S[i][j] = datal;\r
791 \r
792       ctx->S[i][j + 1] = datar;\r
793 \r
794     }\r
795 \r
796   }\r
797 \r
798 }\r
799 \r
800 \r
801 \r
802 \r
803 \r
804 int Blowfish_Test(BLOWFISH_CTX *ctx) {\r
805 \r
806   unsigned long L = 1, R = 2;\r
807 \r
808 \r
809 \r
810   Blowfish_Init (ctx, (unsigned char*)"TESTKEY", 7);\r
811 \r
812   Blowfish_Encrypt(ctx, &L, &R);\r
813 \r
814   if (L != 0xDF333FD2L || R != 0x30A71BB4L)\r
815 \r
816     return (-1);\r
817 \r
818   Blowfish_Decrypt(ctx, &L, &R);\r
819 \r
820   if (L != 1 || R != 2)\r
821 \r
822     return (-1);\r
823 \r
824   return (0);\r
825 \r
826 }\r
827 \r
828 \r
829 \r