sunterlib/scsh/encryption/blowfish.scm

1391 lines
62 KiB
Scheme

;;; blowfish.scm - blowfish encrypt and decrypt
;;;
;;; Copyright (c) 2012 Johan Ceuppens
;;;
;;; All rights reserved.
;;;
;;; Redistribution and use in source and binary forms, with or without
;;; modification, are permitted provided that the following conditions
;;; are met:
;;; 1. Redistributions of source code must retain the above copyright
;;; notice, this list of conditions and the following disclaimer.
;;; 2. Redistributions in binary form must reproduce the above copyright
;;; notice, this list of conditions and the following disclaimer in the
;;; documentation and/or other materials provided with the distribution.
;;; 3. The name of the authors may not be used to endorse or promote products
;;; derived from this software without specific prior written permission.
;;;
;;; THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
;;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
;;; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
;;; IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
;;; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
;;; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
;;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
;;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
;;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
;;; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
(load "dictionary.scm")
;; ,open records tables ;; NOTE
(define BIG-ENDIAN-HOST (if (getenv "BIG_ENDIAN_HOST")
(getenv "BIG_ENDIAN_HOST")
#t)) ;; NOTE : Do not forget to set this !
(define blowfish-ks0 (make-dictionary 256))
(dictionary-add! blowfish-ks0 0 '0xD1310BA6)
(dictionary-add! blowfish-ks0 1 '0x98DFB5AC)
(dictionary-add! blowfish-ks0 2 '0x2FFD72DB)
(dictionary-add! blowfish-ks0 3 '0xD01ADFB7)
(dictionary-add! blowfish-ks0 4 '0xB8E1AFED)
(dictionary-add! blowfish-ks0 5 '0x6A267E96)
(dictionary-add! blowfish-ks0 6 '0xBA7C9045)
(dictionary-add! blowfish-ks0 7 '0xF12C7F99)
(dictionary-add! blowfish-ks0 8 '0x24A19947)
(dictionary-add! blowfish-ks0 9 '0xB3916CF7)
(dictionary-add! blowfish-ks0 10 '0x0801F2E2)
(dictionary-add! blowfish-ks0 11 '0x858EFC16)
(dictionary-add! blowfish-ks0 12 '0x636920D8)
(dictionary-add! blowfish-ks0 13 '0x71574E69)
(dictionary-add! blowfish-ks0 14 '0xA458FEA3)
(dictionary-add! blowfish-ks0 15 '0xF4933D7E)
(dictionary-add! blowfish-ks0 16 '0x0D95748F)
(dictionary-add! blowfish-ks0 17 '0x728EB658)
(dictionary-add! blowfish-ks0 18 '0x718BCD58)
(dictionary-add! blowfish-ks0 19 '0x82154AEE)
(dictionary-add! blowfish-ks0 20 '0x7B54A41D)
(dictionary-add! blowfish-ks0 21 '0xC25A59B5)
(dictionary-add! blowfish-ks0 22 '0x9C30D539)
(dictionary-add! blowfish-ks0 23 '0x2AF26013)
(dictionary-add! blowfish-ks0 24 '0xC5D1B023)
(dictionary-add! blowfish-ks0 25 '0x286085F0)
(dictionary-add! blowfish-ks0 26 '0xCA417918)
(dictionary-add! blowfish-ks0 27 '0xB8DB38EF)
(dictionary-add! blowfish-ks0 28 '0x8E79DCB0)
(dictionary-add! blowfish-ks0 29 '0x603A180E)
(dictionary-add! blowfish-ks0 30 '0x6C9E0E8B)
(dictionary-add! blowfish-ks0 31 '0xB01E8A3E)
(dictionary-add! blowfish-ks0 32 '0xD71577C1)
(dictionary-add! blowfish-ks0 33 '0xBD314B27)
(dictionary-add! blowfish-ks0 34 '0x78AF2FDA)
(dictionary-add! blowfish-ks0 35 '0x55605C60)
(dictionary-add! blowfish-ks0 36 '0xE65525F3)
(dictionary-add! blowfish-ks0 37 '0xAA55AB94)
(dictionary-add! blowfish-ks0 38 '0x57489862)
(dictionary-add! blowfish-ks0 39 '0x63E81440)
(dictionary-add! blowfish-ks0 40 '0x55CA396A)
(dictionary-add! blowfish-ks0 41 '0x2AAB10B6)
(dictionary-add! blowfish-ks0 42 '0xB4CC5C34)
(dictionary-add! blowfish-ks0 43 '0x1141E8CE)
(dictionary-add! blowfish-ks0 44 '0xA15486AF)
(dictionary-add! blowfish-ks0 45 '0x7C72E993)
(dictionary-add! blowfish-ks0 46 '0xB3EE1411)
(dictionary-add! blowfish-ks0 47 '0x636FBC2A)
(dictionary-add! blowfish-ks0 48 '0x2BA9C55D)
(dictionary-add! blowfish-ks0 49 '0x741831F6)
(dictionary-add! blowfish-ks0 50 '0xCE5C3E16)
(dictionary-add! blowfish-ks0 51 '0x9B87931E)
(dictionary-add! blowfish-ks0 52 '0xAFD6BA33)
(dictionary-add! blowfish-ks0 53 '0x6C24CF5C)
(dictionary-add! blowfish-ks0 54 '0x7A325381)
(dictionary-add! blowfish-ks0 55 '0x28958677)
(dictionary-add! blowfish-ks0 56 '0x3B8F4898)
(dictionary-add! blowfish-ks0 57 '0x6B4BB9AF)
(dictionary-add! blowfish-ks0 58 '0xC4BFE81B)
(dictionary-add! blowfish-ks0 59 '0x66282193)
(dictionary-add! blowfish-ks0 60 '0x61D809CC)
(dictionary-add! blowfish-ks0 61 '0xFB21A991)
(dictionary-add! blowfish-ks0 62 '0x487CAC60)
(dictionary-add! blowfish-ks0 63 '0x5DEC8032)
(dictionary-add! blowfish-ks0 64 '0xEF845D5D)
(dictionary-add! blowfish-ks0 65 '0xE98575B1)
(dictionary-add! blowfish-ks0 66 '0xDC262302)
(dictionary-add! blowfish-ks0 67 '0xEB651B88)
(dictionary-add! blowfish-ks0 68 '0x23893E81)
(dictionary-add! blowfish-ks0 69 '0xD396ACC5)
(dictionary-add! blowfish-ks0 70 '0x0F6D6FF3)
(dictionary-add! blowfish-ks0 71 '0x83F44239)
(dictionary-add! blowfish-ks0 72 '0x2E0B4482)
(dictionary-add! blowfish-ks0 73 '0xA4842004)
(dictionary-add! blowfish-ks0 74 '0x69C8F04A)
(dictionary-add! blowfish-ks0 75 '0x9E1F9B5E)
(dictionary-add! blowfish-ks0 76 '0x21C66842)
(dictionary-add! blowfish-ks0 77 '0xF6E96C9A)
(dictionary-add! blowfish-ks0 78 '0x670C9C61)
(dictionary-add! blowfish-ks0 79 '0xABD388F0)
(dictionary-add! blowfish-ks0 80 '0x6A51A0D2)
(dictionary-add! blowfish-ks0 81 '0xD8542F68)
(dictionary-add! blowfish-ks0 82 '0x960FA728)
(dictionary-add! blowfish-ks0 83 '0xAB5133A3)
(dictionary-add! blowfish-ks0 84 '0x6EEF0B6C)
(dictionary-add! blowfish-ks0 85 '0x137A3BE4)
(dictionary-add! blowfish-ks0 86 '0xBA3BF050)
(dictionary-add! blowfish-ks0 87 '0x7EFB2A98)
(dictionary-add! blowfish-ks0 88 '0xA1F1651D)
(dictionary-add! blowfish-ks0 89 '0x39AF0176)
(dictionary-add! blowfish-ks0 90 '0x66CA593E)
(dictionary-add! blowfish-ks0 91 '0x82430E88)
(dictionary-add! blowfish-ks0 92 '0x8CEE8619)
(dictionary-add! blowfish-ks0 93 '0x456F9FB4)
(dictionary-add! blowfish-ks0 94 '0x7D84A5C3)
(dictionary-add! blowfish-ks0 95 '0x3B8B5EBE)
(dictionary-add! blowfish-ks0 96 '0xE06F75D8)
(dictionary-add! blowfish-ks0 97 '0x85C12073)
(dictionary-add! blowfish-ks0 98 '0x401A449F)
(dictionary-add! blowfish-ks0 99 '0x56C16AA6)
(dictionary-add! blowfish-ks0 100 '0x4ED3AA62)
(dictionary-add! blowfish-ks0 101 '0x363F7706)
(dictionary-add! blowfish-ks0 102 '0x1BFEDF72)
(dictionary-add! blowfish-ks0 103 '0x429B023D)
(dictionary-add! blowfish-ks0 104 '0x37D0D724)
(dictionary-add! blowfish-ks0 105 '0xD00A1248)
(dictionary-add! blowfish-ks0 106 '0xDB0FEAD3)
(dictionary-add! blowfish-ks0 107 '0x49F1C09B)
(dictionary-add! blowfish-ks0 108 '0x075372C9)
(dictionary-add! blowfish-ks0 109 '0x80991B7B)
(dictionary-add! blowfish-ks0 110 '0x25D479D8)
(dictionary-add! blowfish-ks0 111 '0xF6E8DEF7)
(dictionary-add! blowfish-ks0 112 '0xE3FE501A)
(dictionary-add! blowfish-ks0 113 '0xB6794C3B)
(dictionary-add! blowfish-ks0 114 '0x976CE0BD)
(dictionary-add! blowfish-ks0 115 '0x04C006BA)
(dictionary-add! blowfish-ks0 116 '0xC1A94FB6)
(dictionary-add! blowfish-ks0 117 '0x409F60C4)
(dictionary-add! blowfish-ks0 118 '0x5E5C9EC2)
(dictionary-add! blowfish-ks0 119 '0x196A2463)
(dictionary-add! blowfish-ks0 120 '0x68FB6FAF)
(dictionary-add! blowfish-ks0 121 '0x3E6C53B5)
(dictionary-add! blowfish-ks0 122 '0x1339B2EB)
(dictionary-add! blowfish-ks0 123 '0x3B52EC6F)
(dictionary-add! blowfish-ks0 124 '0x6DFC511F)
(dictionary-add! blowfish-ks0 125 '0x9B30952C)
(dictionary-add! blowfish-ks0 126 '0xCC814544)
(dictionary-add! blowfish-ks0 127 '0xAF5EBD09)
(dictionary-add! blowfish-ks0 128 '0xBEE3D004)
(dictionary-add! blowfish-ks0 129 '0xDE334AFD)
(dictionary-add! blowfish-ks0 130 '0x660F2807)
(dictionary-add! blowfish-ks0 131 '0x192E4BB3)
(dictionary-add! blowfish-ks0 132 '0xC0CBA857)
(dictionary-add! blowfish-ks0 133 '0x45C8740F)
(dictionary-add! blowfish-ks0 134 '0xD20B5F39)
(dictionary-add! blowfish-ks0 135 '0xB9D3FBDB)
(dictionary-add! blowfish-ks0 136 '0x5579C0BD)
(dictionary-add! blowfish-ks0 137 '0x1A60320A)
(dictionary-add! blowfish-ks0 138 '0xD6A100C6)
(dictionary-add! blowfish-ks0 139 '0x402C7279)
(dictionary-add! blowfish-ks0 140 '0x679F25FE)
(dictionary-add! blowfish-ks0 141 '0xFB1FA3CC)
(dictionary-add! blowfish-ks0 142 '0x8EA5E9F8)
(dictionary-add! blowfish-ks0 143 '0xDB3222F8)
(dictionary-add! blowfish-ks0 144 '0x3C7516DF)
(dictionary-add! blowfish-ks0 145 '0xFD616B15)
(dictionary-add! blowfish-ks0 146 '0x2F501EC8)
(dictionary-add! blowfish-ks0 147 '0xAD0552AB)
(dictionary-add! blowfish-ks0 148 '0x323DB5FA)
(dictionary-add! blowfish-ks0 149 '0xFD238760)
(dictionary-add! blowfish-ks0 150 '0x53317B48)
(dictionary-add! blowfish-ks0 151 '0x3E00DF82)
(dictionary-add! blowfish-ks0 152 '0x9E5C57BB)
(dictionary-add! blowfish-ks0 153 '0xCA6F8CA0)
(dictionary-add! blowfish-ks0 154 '0x1A87562E)
(dictionary-add! blowfish-ks0 155 '0xDF1769DB)
(dictionary-add! blowfish-ks0 156 '0xD542A8F6)
(dictionary-add! blowfish-ks0 157 '0x287EFFC3)
(dictionary-add! blowfish-ks0 158 '0xAC6732C6)
(dictionary-add! blowfish-ks0 159 '0x8C4F5573)
(dictionary-add! blowfish-ks0 160 '0x695B27B0)
(dictionary-add! blowfish-ks0 161 '0xBBCA58C8)
(dictionary-add! blowfish-ks0 162 '0xE1FFA35D)
(dictionary-add! blowfish-ks0 163 '0xB8F011A0)
(dictionary-add! blowfish-ks0 164 '0x10FA3D98)
(dictionary-add! blowfish-ks0 165 '0xFD2183B8)
(dictionary-add! blowfish-ks0 166 '0x4AFCB56C)
(dictionary-add! blowfish-ks0 167 '0x2DD1D35B)
(dictionary-add! blowfish-ks0 168 '0x9A53E479)
(dictionary-add! blowfish-ks0 169 '0xB6F84565)
(dictionary-add! blowfish-ks0 170 '0xD28E49BC)
(dictionary-add! blowfish-ks0 171 '0x4BFB9790)
(dictionary-add! blowfish-ks0 172 '0xE1DDF2DA)
(dictionary-add! blowfish-ks0 173 '0xA4CB7E33)
(dictionary-add! blowfish-ks0 174 '0x62FB1341)
(dictionary-add! blowfish-ks0 175 '0xCEE4C6E8)
(dictionary-add! blowfish-ks0 176 '0xEF20CADA)
(dictionary-add! blowfish-ks0 177 '0x36774C01)
(dictionary-add! blowfish-ks0 178 '0xD07E9EFE)
(dictionary-add! blowfish-ks0 179 '0x2BF11FB4)
(dictionary-add! blowfish-ks0 180 '0x95DBDA4D)
(dictionary-add! blowfish-ks0 181 '0xAE909198)
(dictionary-add! blowfish-ks0 182 '0xEAAD8E71)
(dictionary-add! blowfish-ks0 183 '0x6B93D5A0)
(dictionary-add! blowfish-ks0 184 '0xD08ED1D0)
(dictionary-add! blowfish-ks0 185 '0xAFC725E0)
(dictionary-add! blowfish-ks0 186 '0x8E3C5B2F)
(dictionary-add! blowfish-ks0 187 '0x8E7594B7)
(dictionary-add! blowfish-ks0 188 '0x8FF6E2FB)
(dictionary-add! blowfish-ks0 189 '0xF2122B64)
(dictionary-add! blowfish-ks0 190 '0x8888B812)
(dictionary-add! blowfish-ks0 191 '0x900DF01C)
(dictionary-add! blowfish-ks0 192 '0x4FAD5EA0)
(dictionary-add! blowfish-ks0 193 '0x688FC31C)
(dictionary-add! blowfish-ks0 194 '0xD1CFF191)
(dictionary-add! blowfish-ks0 195 '0xB3A8C1AD)
(dictionary-add! blowfish-ks0 196 '0x2F2F2218)
(dictionary-add! blowfish-ks0 197 '0xBE0E1777)
(dictionary-add! blowfish-ks0 198 '0xEA752DFE)
(dictionary-add! blowfish-ks0 199 '0x8B021FA1)
(dictionary-add! blowfish-ks0 200 '0xE5A0CC0F)
(dictionary-add! blowfish-ks0 201 '0xB56F74E8)
(dictionary-add! blowfish-ks0 202 '0x18ACF3D6)
(dictionary-add! blowfish-ks0 203 '0xCE89E299)
(dictionary-add! blowfish-ks0 204 '0xB4A84FE0)
(dictionary-add! blowfish-ks0 205 '0xFD13E0B7)
(dictionary-add! blowfish-ks0 206 '0x7CC43B81)
(dictionary-add! blowfish-ks0 207 '0xD2ADA8D9)
(dictionary-add! blowfish-ks0 208 '0x165FA266)
(dictionary-add! blowfish-ks0 209 '0x80957705)
(dictionary-add! blowfish-ks0 210 '0x93CC7314)
(dictionary-add! blowfish-ks0 211 '0x211A1477)
(dictionary-add! blowfish-ks0 212 '0xE6AD2065)
(dictionary-add! blowfish-ks0 213 '0x77B5FA86)
(dictionary-add! blowfish-ks0 214 '0xC75442F5)
(dictionary-add! blowfish-ks0 215 '0xFB9D35CF)
(dictionary-add! blowfish-ks0 216 '0xEBCDAF0C)
(dictionary-add! blowfish-ks0 217 '0x7B3E89A0)
(dictionary-add! blowfish-ks0 218 '0xD6411BD3)
(dictionary-add! blowfish-ks0 219 '0xAE1E7E49)
(dictionary-add! blowfish-ks0 220 '0x00250E2D)
(dictionary-add! blowfish-ks0 221 '0x2071B35E)
(dictionary-add! blowfish-ks0 222 '0x226800BB)
(dictionary-add! blowfish-ks0 223 '0x57B8E0AF)
(dictionary-add! blowfish-ks0 224 '0x2464369B)
(dictionary-add! blowfish-ks0 225 '0xF009B91E)
(dictionary-add! blowfish-ks0 226 '0x5563911D)
(dictionary-add! blowfish-ks0 227 '0x59DFA6AA)
(dictionary-add! blowfish-ks0 228 '0x78C14389)
(dictionary-add! blowfish-ks0 229 '0xD95A537F)
(dictionary-add! blowfish-ks0 230 '0x207D5BA2)
(dictionary-add! blowfish-ks0 231 '0x02E5B9C5)
(dictionary-add! blowfish-ks0 232 '0x83260376)
(dictionary-add! blowfish-ks0 233 '0x6295CFA9)
(dictionary-add! blowfish-ks0 234 '0x11C81968)
(dictionary-add! blowfish-ks0 235 '0x4E734A41)
(dictionary-add! blowfish-ks0 236 '0xB3472DCA)
(dictionary-add! blowfish-ks0 237 '0x7B14A94A)
(dictionary-add! blowfish-ks0 238 '0x1B510052)
(dictionary-add! blowfish-ks0 239 '0x9A532915)
(dictionary-add! blowfish-ks0 240 '0xD60F573F)
(dictionary-add! blowfish-ks0 241 '0xBC9BC6E4)
(dictionary-add! blowfish-ks0 242 '0x2B60A476)
(dictionary-add! blowfish-ks0 243 '0x81E67400)
(dictionary-add! blowfish-ks0 244 '0x08BA6FB5)
(dictionary-add! blowfish-ks0 245 '0x571BE91F)
(dictionary-add! blowfish-ks0 246 '0xF296EC6B)
(dictionary-add! blowfish-ks0 247 '0x2A0DD915)
(dictionary-add! blowfish-ks0 248 '0xB6636521)
(dictionary-add! blowfish-ks0 249 '0xE7B9F9B6)
(dictionary-add! blowfish-ks0 250 '0xFF34052E)
(dictionary-add! blowfish-ks0 251 '0xC5855664)
(dictionary-add! blowfish-ks0 252 '0x53B02D5D)
(dictionary-add! blowfish-ks0 253 '0xA99F8FA1)
(dictionary-add! blowfish-ks0 254 '0x08BA4799)
(dictionary-add! blowfish-ks0 255 '0x6E85076A)
(define blowfish-ks1 (make-dictionary 256))
(dictionary-add! blowfish-ks1 0 '0x4B7A70E9)
(dictionary-add! blowfish-ks1 1 '0xB5B32944)
(dictionary-add! blowfish-ks1 2 '0xDB75092E)
(dictionary-add! blowfish-ks1 3 '0xC4192623)
(dictionary-add! blowfish-ks1 4 '0xAD6EA6B0)
(dictionary-add! blowfish-ks1 5 '0x49A7DF7D)
(dictionary-add! blowfish-ks1 6 '0x9CEE60B8)
(dictionary-add! blowfish-ks1 7 '0x8FEDB266)
(dictionary-add! blowfish-ks1 8 '0xECAA8C71)
(dictionary-add! blowfish-ks1 9 '0x699A17FF)
(dictionary-add! blowfish-ks1 10 '0x5664526C)
(dictionary-add! blowfish-ks1 11 '0xC2B19EE1)
(dictionary-add! blowfish-ks1 12 '0x193602A5)
(dictionary-add! blowfish-ks1 13 '0x75094C29)
(dictionary-add! blowfish-ks1 14 '0xA0591340)
(dictionary-add! blowfish-ks1 15 '0xE4183A3E)
(dictionary-add! blowfish-ks1 16 '0x3F54989A)
(dictionary-add! blowfish-ks1 17 '0x5B429D65)
(dictionary-add! blowfish-ks1 18 '0x6B8FE4D6)
(dictionary-add! blowfish-ks1 19 '0x99F73FD6)
(dictionary-add! blowfish-ks1 20 '0xA1D29C07)
(dictionary-add! blowfish-ks1 21 '0xEFE830F5)
(dictionary-add! blowfish-ks1 22 '0x4D2D38E6)
(dictionary-add! blowfish-ks1 23 '0xF0255DC1)
(dictionary-add! blowfish-ks1 24 '0x4CDD2086)
(dictionary-add! blowfish-ks1 25 '0x8470EB26)
(dictionary-add! blowfish-ks1 26 '0x6382E9C6)
(dictionary-add! blowfish-ks1 27 '0x021ECC5E)
(dictionary-add! blowfish-ks1 28 '0x09686B3F)
(dictionary-add! blowfish-ks1 29 '0x3EBAEFC9)
(dictionary-add! blowfish-ks1 30 '0x3C971814)
(dictionary-add! blowfish-ks1 31 '0x6B6A70A1)
(dictionary-add! blowfish-ks1 32 '0x687F3584)
(dictionary-add! blowfish-ks1 33 '0x52A0E286)
(dictionary-add! blowfish-ks1 34 '0xB79C5305)
(dictionary-add! blowfish-ks1 35 '0xAA500737)
(dictionary-add! blowfish-ks1 36 '0x3E07841C)
(dictionary-add! blowfish-ks1 37 '0x7FDEAE5C)
(dictionary-add! blowfish-ks1 38 '0x8E7D44EC)
(dictionary-add! blowfish-ks1 39 '0x5716F2B8)
(dictionary-add! blowfish-ks1 40 '0xB03ADA37)
(dictionary-add! blowfish-ks1 41 '0xF0500C0D)
(dictionary-add! blowfish-ks1 42 '0xF01C1F04)
(dictionary-add! blowfish-ks1 43 '0x0200B3FF)
(dictionary-add! blowfish-ks1 44 '0xAE0CF51A)
(dictionary-add! blowfish-ks1 45 '0x3CB574B2)
(dictionary-add! blowfish-ks1 46 '0x25837A58)
(dictionary-add! blowfish-ks1 47 '0xDC0921BD)
(dictionary-add! blowfish-ks1 48 '0xD19113F9)
(dictionary-add! blowfish-ks1 49 '0x7CA92FF6)
(dictionary-add! blowfish-ks1 50 '0x94324773)
(dictionary-add! blowfish-ks1 51 '0x22F54701)
(dictionary-add! blowfish-ks1 52 '0x3AE5E581)
(dictionary-add! blowfish-ks1 53 '0x37C2DADC)
(dictionary-add! blowfish-ks1 54 '0xC8B57634)
(dictionary-add! blowfish-ks1 55 '0x9AF3DDA7)
(dictionary-add! blowfish-ks1 56 '0xA9446146)
(dictionary-add! blowfish-ks1 57 '0x0FD0030E)
(dictionary-add! blowfish-ks1 58 '0xECC8C73E)
(dictionary-add! blowfish-ks1 59 '0xA4751E41)
(dictionary-add! blowfish-ks1 60 '0xE238CD99)
(dictionary-add! blowfish-ks1 61 '0x3BEA0E2F)
(dictionary-add! blowfish-ks1 62 '0x3280BBA1)
(dictionary-add! blowfish-ks1 63 '0x183EB331)
(dictionary-add! blowfish-ks1 64 '0x4E548B38)
(dictionary-add! blowfish-ks1 65 '0x4F6DB908)
(dictionary-add! blowfish-ks1 66 '0x6F420D03)
(dictionary-add! blowfish-ks1 67 '0xF60A04BF)
(dictionary-add! blowfish-ks1 68 '0x2CB81290)
(dictionary-add! blowfish-ks1 69 '0x24977C79)
(dictionary-add! blowfish-ks1 70 '0x5679B072)
(dictionary-add! blowfish-ks1 71 '0xBCAF89AF)
(dictionary-add! blowfish-ks1 72 '0xDE9A771F)
(dictionary-add! blowfish-ks1 73 '0xD9930810)
(dictionary-add! blowfish-ks1 74 '0xB38BAE12)
(dictionary-add! blowfish-ks1 75 '0xDCCF3F2E)
(dictionary-add! blowfish-ks1 76 '0x5512721F)
(dictionary-add! blowfish-ks1 77 '0x2E6B7124)
(dictionary-add! blowfish-ks1 78 '0x501ADDE6)
(dictionary-add! blowfish-ks1 79 '0x9F84CD87)
(dictionary-add! blowfish-ks1 80 '0x7A584718)
(dictionary-add! blowfish-ks1 81 '0x7408DA17)
(dictionary-add! blowfish-ks1 82 '0xBC9F9ABC)
(dictionary-add! blowfish-ks1 83 '0xE94B7D8C)
(dictionary-add! blowfish-ks1 84 '0xEC7AEC3A)
(dictionary-add! blowfish-ks1 85 '0xDB851DFA)
(dictionary-add! blowfish-ks1 86 '0x63094366)
(dictionary-add! blowfish-ks1 87 '0xC464C3D2)
(dictionary-add! blowfish-ks1 88 '0xEF1C1847)
(dictionary-add! blowfish-ks1 89 '0x3215D908)
(dictionary-add! blowfish-ks1 90 '0xDD433B37)
(dictionary-add! blowfish-ks1 91 '0x24C2BA16)
(dictionary-add! blowfish-ks1 92 '0x12A14D43)
(dictionary-add! blowfish-ks1 93 '0x2A65C451)
(dictionary-add! blowfish-ks1 94 '0x50940002)
(dictionary-add! blowfish-ks1 95 '0x133AE4DD)
(dictionary-add! blowfish-ks1 96 '0x71DFF89E)
(dictionary-add! blowfish-ks1 97 '0x10314E55)
(dictionary-add! blowfish-ks1 98 '0x81AC77D6)
(dictionary-add! blowfish-ks1 99 '0x5F11199B)
(dictionary-add! blowfish-ks1 100 '0x043556F1)
(dictionary-add! blowfish-ks1 101 '0xD7A3C76B)
(dictionary-add! blowfish-ks1 102 '0x3C11183B)
(dictionary-add! blowfish-ks1 103 '0x5924A509)
(dictionary-add! blowfish-ks1 104 '0xF28FE6ED)
(dictionary-add! blowfish-ks1 105 '0x97F1FBFA)
(dictionary-add! blowfish-ks1 106 '0x9EBABF2C)
(dictionary-add! blowfish-ks1 107 '0x1E153C6E)
(dictionary-add! blowfish-ks1 108 '0x86E34570)
(dictionary-add! blowfish-ks1 109 '0xEAE96FB1)
(dictionary-add! blowfish-ks1 110 '0x860E5E0A)
(dictionary-add! blowfish-ks1 111 '0x5A3E2AB3)
(dictionary-add! blowfish-ks1 112 '0x771FE71C)
(dictionary-add! blowfish-ks1 113 '0x4E3D06FA)
(dictionary-add! blowfish-ks1 114 '0x2965DCB9)
(dictionary-add! blowfish-ks1 115 '0x99E71D0F)
(dictionary-add! blowfish-ks1 116 '0x803E89D6)
(dictionary-add! blowfish-ks1 117 '0x5266C825)
(dictionary-add! blowfish-ks1 118 '0x2E4CC978)
(dictionary-add! blowfish-ks1 119 '0x9C10B36A)
(dictionary-add! blowfish-ks1 120 '0xC6150EBA)
(dictionary-add! blowfish-ks1 121 '0x94E2EA78)
(dictionary-add! blowfish-ks1 122 '0xA5FC3C53)
(dictionary-add! blowfish-ks1 123 '0x1E0A2DF4)
(dictionary-add! blowfish-ks1 124 '0xF2F74EA7)
(dictionary-add! blowfish-ks1 125 '0x361D2B3D)
(dictionary-add! blowfish-ks1 126 '0x1939260F)
(dictionary-add! blowfish-ks1 127 '0x19C27960)
(dictionary-add! blowfish-ks1 128 '0x5223A708)
(dictionary-add! blowfish-ks1 129 '0xF71312B6)
(dictionary-add! blowfish-ks1 130 '0xEBADFE6E)
(dictionary-add! blowfish-ks1 131 '0xEAC31F66)
(dictionary-add! blowfish-ks1 132 '0xE3BC4595)
(dictionary-add! blowfish-ks1 133 '0xA67BC883)
(dictionary-add! blowfish-ks1 134 '0xB17F37D1)
(dictionary-add! blowfish-ks1 135 '0x018CFF28)
(dictionary-add! blowfish-ks1 136 '0xC332DDEF)
(dictionary-add! blowfish-ks1 137 '0xBE6C5AA5)
(dictionary-add! blowfish-ks1 138 '0x65582185)
(dictionary-add! blowfish-ks1 139 '0x68AB9802)
(dictionary-add! blowfish-ks1 140 '0xEECEA50F)
(dictionary-add! blowfish-ks1 141 '0xDB2F953B)
(dictionary-add! blowfish-ks1 142 '0x2AEF7DAD)
(dictionary-add! blowfish-ks1 143 '0x5B6E2F84)
(dictionary-add! blowfish-ks1 144 '0x1521B628)
(dictionary-add! blowfish-ks1 145 '0x29076170)
(dictionary-add! blowfish-ks1 146 '0xECDD4775)
(dictionary-add! blowfish-ks1 147 '0x619F1510)
(dictionary-add! blowfish-ks1 148 '0x13CCA830)
(dictionary-add! blowfish-ks1 149 '0xEB61BD96)
(dictionary-add! blowfish-ks1 150 '0x0334FE1E)
(dictionary-add! blowfish-ks1 151 '0xAA0363CF)
(dictionary-add! blowfish-ks1 152 '0xB5735C90)
(dictionary-add! blowfish-ks1 153 '0x4C70A239)
(dictionary-add! blowfish-ks1 154 '0xD59E9E0B)
(dictionary-add! blowfish-ks1 155 '0xCBAADE14)
(dictionary-add! blowfish-ks1 156 '0xEECC86BC)
(dictionary-add! blowfish-ks1 157 '0x60622CA7)
(dictionary-add! blowfish-ks1 158 '0x9CAB5CAB)
(dictionary-add! blowfish-ks1 159 '0xB2F3846E)
(dictionary-add! blowfish-ks1 160 '0x648B1EAF)
(dictionary-add! blowfish-ks1 161 '0x19BDF0CA)
(dictionary-add! blowfish-ks1 162 '0xA02369B9)
(dictionary-add! blowfish-ks1 163 '0x655ABB50)
(dictionary-add! blowfish-ks1 164 '0x40685A32)
(dictionary-add! blowfish-ks1 165 '0x3C2AB4B3)
(dictionary-add! blowfish-ks1 166 '0x319EE9D5)
(dictionary-add! blowfish-ks1 167 '0xC021B8F7)
(dictionary-add! blowfish-ks1 168 '0x9B540B19)
(dictionary-add! blowfish-ks1 169 '0x875FA099)
(dictionary-add! blowfish-ks1 170 '0x95F7997E)
(dictionary-add! blowfish-ks1 171 '0x623D7DA8)
(dictionary-add! blowfish-ks1 172 '0xF837889A)
(dictionary-add! blowfish-ks1 173 '0x97E32D77)
(dictionary-add! blowfish-ks1 174 '0x11ED935F)
(dictionary-add! blowfish-ks1 175 '0x16681281)
(dictionary-add! blowfish-ks1 176 '0x0E358829)
(dictionary-add! blowfish-ks1 177 '0xC7E61FD6)
(dictionary-add! blowfish-ks1 178 '0x96DEDFA1)
(dictionary-add! blowfish-ks1 179 '0x7858BA99)
(dictionary-add! blowfish-ks1 180 '0x57F584A5)
(dictionary-add! blowfish-ks1 181 '0x1B227263)
(dictionary-add! blowfish-ks1 182 '0x9B83C3FF)
(dictionary-add! blowfish-ks1 183 '0x1AC24696)
(dictionary-add! blowfish-ks1 184 '0xCDB30AEB)
(dictionary-add! blowfish-ks1 185 '0x532E3054)
(dictionary-add! blowfish-ks1 186 '0x8FD948E4)
(dictionary-add! blowfish-ks1 187 '0x6DBC3128)
(dictionary-add! blowfish-ks1 188 '0x58EBF2EF)
(dictionary-add! blowfish-ks1 189 '0x34C6FFEA)
(dictionary-add! blowfish-ks1 190 '0xFE28ED61)
(dictionary-add! blowfish-ks1 191 '0xEE7C3C73)
(dictionary-add! blowfish-ks1 192 '0x5D4A14D9)
(dictionary-add! blowfish-ks1 193 '0xE864B7E3)
(dictionary-add! blowfish-ks1 194 '0x42105D14)
(dictionary-add! blowfish-ks1 195 '0x203E13E0)
(dictionary-add! blowfish-ks1 196 '0x45EEE2B6)
(dictionary-add! blowfish-ks1 197 '0xA3AAABEA)
(dictionary-add! blowfish-ks1 198 '0xDB6C4F15)
(dictionary-add! blowfish-ks1 199 '0xFACB4FD0)
(dictionary-add! blowfish-ks1 200 '0xC742F442)
(dictionary-add! blowfish-ks1 201 '0xEF6ABBB5)
(dictionary-add! blowfish-ks1 202 '0x654F3B1D)
(dictionary-add! blowfish-ks1 203 '0x41CD2105)
(dictionary-add! blowfish-ks1 204 '0xD81E799E)
(dictionary-add! blowfish-ks1 205 '0x86854DC7)
(dictionary-add! blowfish-ks1 206 '0xE44B476A)
(dictionary-add! blowfish-ks1 207 '0x3D816250)
(dictionary-add! blowfish-ks1 208 '0xCF62A1F2)
(dictionary-add! blowfish-ks1 209 '0x5B8D2646)
(dictionary-add! blowfish-ks1 210 '0xFC8883A0)
(dictionary-add! blowfish-ks1 211 '0xC1C7B6A3)
(dictionary-add! blowfish-ks1 212 '0x7F1524C3)
(dictionary-add! blowfish-ks1 213 '0x69CB7492)
(dictionary-add! blowfish-ks1 214 '0x47848A0B)
(dictionary-add! blowfish-ks1 215 '0x5692B285)
(dictionary-add! blowfish-ks1 216 '0x095BBF00)
(dictionary-add! blowfish-ks1 217 '0xAD19489D)
(dictionary-add! blowfish-ks1 218 '0x1462B174)
(dictionary-add! blowfish-ks1 219 '0x23820E00)
(dictionary-add! blowfish-ks1 220 '0x58428D2A)
(dictionary-add! blowfish-ks1 221 '0x0C55F5EA)
(dictionary-add! blowfish-ks1 222 '0x1DADF43E)
(dictionary-add! blowfish-ks1 223 '0x233F7061)
(dictionary-add! blowfish-ks1 224 '0x3372F092)
(dictionary-add! blowfish-ks1 225 '0x8D937E41)
(dictionary-add! blowfish-ks1 226 '0xD65FECF1)
(dictionary-add! blowfish-ks1 227 '0x6C223BDB)
(dictionary-add! blowfish-ks1 228 '0x7CDE3759)
(dictionary-add! blowfish-ks1 229 '0xCBEE7460)
(dictionary-add! blowfish-ks1 230 '0x4085F2A7)
(dictionary-add! blowfish-ks1 231 '0xCE77326E)
(dictionary-add! blowfish-ks1 232 '0xA6078084)
(dictionary-add! blowfish-ks1 233 '0x19F8509E)
(dictionary-add! blowfish-ks1 234 '0xE8EFD855)
(dictionary-add! blowfish-ks1 235 '0x61D99735)
(dictionary-add! blowfish-ks1 236 '0xA969A7AA)
(dictionary-add! blowfish-ks1 237 '0xC50C06C2)
(dictionary-add! blowfish-ks1 238 '0x5A04ABFC)
(dictionary-add! blowfish-ks1 239 '0x800BCADC)
(dictionary-add! blowfish-ks1 240 '0x9E447A2E)
(dictionary-add! blowfish-ks1 241 '0xC3453484)
(dictionary-add! blowfish-ks1 242 '0xFDD56705)
(dictionary-add! blowfish-ks1 243 '0x0E1E9EC9)
(dictionary-add! blowfish-ks1 244 '0xDB73DBD3)
(dictionary-add! blowfish-ks1 245 '0x105588CD)
(dictionary-add! blowfish-ks1 246 '0x675FDA79)
(dictionary-add! blowfish-ks1 247 '0xE3674340)
(dictionary-add! blowfish-ks1 248 '0xC5C43465)
(dictionary-add! blowfish-ks1 249 '0x713E38D8)
(dictionary-add! blowfish-ks1 250 '0x3D28F89E)
(dictionary-add! blowfish-ks1 251 '0xF16DFF20)
(dictionary-add! blowfish-ks1 252 '0x153E21E7)
(dictionary-add! blowfish-ks1 253 '0x8FB03D4A)
(dictionary-add! blowfish-ks1 254 '0xE6E39F2B)
(dictionary-add! blowfish-ks1 255 '0xDB83ADF7)
(define blowfish-ks2 (make-dictionary 256))
(dictionary-add! blowfish-ks2 0 '0xE93D5A68)
(dictionary-add! blowfish-ks2 1 '0x948140F7)
(dictionary-add! blowfish-ks2 2 '0xF64C261C)
(dictionary-add! blowfish-ks2 3 '0x94692934)
(dictionary-add! blowfish-ks2 4 '0x411520F7)
(dictionary-add! blowfish-ks2 5 '0x7602D4F7)
(dictionary-add! blowfish-ks2 6 '0xBCF46B2E)
(dictionary-add! blowfish-ks2 7 '0xD4A20068)
(dictionary-add! blowfish-ks2 8 '0xD4082471)
(dictionary-add! blowfish-ks2 9 '0x3320F46A)
(dictionary-add! blowfish-ks2 10 '0x43B7D4B7)
(dictionary-add! blowfish-ks2 11 '0x500061AF)
(dictionary-add! blowfish-ks2 12 '0x1E39F62E)
(dictionary-add! blowfish-ks2 13 '0x97244546)
(dictionary-add! blowfish-ks2 14 '0x14214F74)
(dictionary-add! blowfish-ks2 15 '0xBF8B8840)
(dictionary-add! blowfish-ks2 16 '0x4D95FC1D)
(dictionary-add! blowfish-ks2 17 '0x96B591AF)
(dictionary-add! blowfish-ks2 18 '0x70F4DDD3)
(dictionary-add! blowfish-ks2 19 '0x66A02F45)
(dictionary-add! blowfish-ks2 20 '0xBFBC09EC)
(dictionary-add! blowfish-ks2 21 '0x03BD9785)
(dictionary-add! blowfish-ks2 22 '0x7FAC6DD0)
(dictionary-add! blowfish-ks2 23 '0x31CB8504)
(dictionary-add! blowfish-ks2 24 '0x96EB27B3)
(dictionary-add! blowfish-ks2 25 '0x55FD3941)
(dictionary-add! blowfish-ks2 26 '0xDA2547E6)
(dictionary-add! blowfish-ks2 27 '0xABCA0A9A)
(dictionary-add! blowfish-ks2 28 '0x28507825)
(dictionary-add! blowfish-ks2 29 '0x530429F4)
(dictionary-add! blowfish-ks2 30 '0x0A2C86DA)
(dictionary-add! blowfish-ks2 31 '0xE9B66DFB)
(dictionary-add! blowfish-ks2 32 '0x68DC1462)
(dictionary-add! blowfish-ks2 33 '0xD7486900)
(dictionary-add! blowfish-ks2 34 '0x680EC0A4)
(dictionary-add! blowfish-ks2 35 '0x27A18DEE)
(dictionary-add! blowfish-ks2 36 '0x4F3FFEA2)
(dictionary-add! blowfish-ks2 37 '0xE887AD8C)
(dictionary-add! blowfish-ks2 38 '0xB58CE006)
(dictionary-add! blowfish-ks2 39 '0x7AF4D6B6)
(dictionary-add! blowfish-ks2 40 '0xAACE1E7C)
(dictionary-add! blowfish-ks2 41 '0xD3375FEC)
(dictionary-add! blowfish-ks2 42 '0xCE78A399)
(dictionary-add! blowfish-ks2 43 '0x406B2A42)
(dictionary-add! blowfish-ks2 44 '0x20FE9E35)
(dictionary-add! blowfish-ks2 45 '0xD9F385B9)
(dictionary-add! blowfish-ks2 46 '0xEE39D7AB)
(dictionary-add! blowfish-ks2 47 '0x3B124E8B)
(dictionary-add! blowfish-ks2 48 '0x1DC9FAF7)
(dictionary-add! blowfish-ks2 49 '0x4B6D1856)
(dictionary-add! blowfish-ks2 50 '0x26A36631)
(dictionary-add! blowfish-ks2 51 '0xEAE397B2)
(dictionary-add! blowfish-ks2 52 '0x3A6EFA74)
(dictionary-add! blowfish-ks2 53 '0xDD5B4332)
(dictionary-add! blowfish-ks2 54 '0x6841E7F7)
(dictionary-add! blowfish-ks2 55 '0xCA7820FB)
(dictionary-add! blowfish-ks2 56 '0xFB0AF54E)
(dictionary-add! blowfish-ks2 57 '0xD8FEB397)
(dictionary-add! blowfish-ks2 58 '0x454056AC)
(dictionary-add! blowfish-ks2 59 '0xBA489527)
(dictionary-add! blowfish-ks2 60 '0x55533A3A)
(dictionary-add! blowfish-ks2 61 '0x20838D87)
(dictionary-add! blowfish-ks2 62 '0xFE6BA9B7)
(dictionary-add! blowfish-ks2 63 '0xD096954B)
(dictionary-add! blowfish-ks2 64 '0x55A867BC)
(dictionary-add! blowfish-ks2 65 '0xA1159A58)
(dictionary-add! blowfish-ks2 66 '0xCCA92963)
(dictionary-add! blowfish-ks2 67 '0x99E1DB33)
(dictionary-add! blowfish-ks2 68 '0xA62A4A56)
(dictionary-add! blowfish-ks2 69 '0x3F3125F9)
(dictionary-add! blowfish-ks2 70 '0x5EF47E1C)
(dictionary-add! blowfish-ks2 71 '0x9029317C)
(dictionary-add! blowfish-ks2 72 '0xFDF8E802)
(dictionary-add! blowfish-ks2 73 '0x04272F70)
(dictionary-add! blowfish-ks2 74 '0x80BB155C)
(dictionary-add! blowfish-ks2 75 '0x05282CE3)
(dictionary-add! blowfish-ks2 76 '0x95C11548)
(dictionary-add! blowfish-ks2 77 '0xE4C66D22)
(dictionary-add! blowfish-ks2 78 '0x48C1133F)
(dictionary-add! blowfish-ks2 79 '0xC70F86DC)
(dictionary-add! blowfish-ks2 80 '0x07F9C9EE)
(dictionary-add! blowfish-ks2 81 '0x41041F0F)
(dictionary-add! blowfish-ks2 82 '0x404779A4)
(dictionary-add! blowfish-ks2 83 '0x5D886E17)
(dictionary-add! blowfish-ks2 84 '0x325F51EB)
(dictionary-add! blowfish-ks2 85 '0xD59BC0D1)
(dictionary-add! blowfish-ks2 86 '0xF2BCC18F)
(dictionary-add! blowfish-ks2 87 '0x41113564)
(dictionary-add! blowfish-ks2 88 '0x257B7834)
(dictionary-add! blowfish-ks2 89 '0x602A9C60)
(dictionary-add! blowfish-ks2 90 '0xDFF8E8A3)
(dictionary-add! blowfish-ks2 91 '0x1F636C1B)
(dictionary-add! blowfish-ks2 92 '0x0E12B4C2)
(dictionary-add! blowfish-ks2 93 '0x02E1329E)
(dictionary-add! blowfish-ks2 94 '0xAF664FD1)
(dictionary-add! blowfish-ks2 95 '0xCAD18115)
(dictionary-add! blowfish-ks2 96 '0x6B2395E0)
(dictionary-add! blowfish-ks2 97 '0x333E92E1)
(dictionary-add! blowfish-ks2 98 '0x3B240B62)
(dictionary-add! blowfish-ks2 99 '0xEEBEB922)
(dictionary-add! blowfish-ks2 100 '0x85B2A20E)
(dictionary-add! blowfish-ks2 101 '0xE6BA0D99)
(dictionary-add! blowfish-ks2 102 '0xDE720C8C)
(dictionary-add! blowfish-ks2 103 '0x2DA2F728)
(dictionary-add! blowfish-ks2 104 '0xD0127845)
(dictionary-add! blowfish-ks2 105 '0x95B794FD)
(dictionary-add! blowfish-ks2 106 '0x647D0862)
(dictionary-add! blowfish-ks2 107 '0xE7CCF5F0)
(dictionary-add! blowfish-ks2 108 '0x5449A36F)
(dictionary-add! blowfish-ks2 109 '0x877D48FA)
(dictionary-add! blowfish-ks2 110 '0xC39DFD27)
(dictionary-add! blowfish-ks2 111 '0xF33E8D1E)
(dictionary-add! blowfish-ks2 112 '0x0A476341)
(dictionary-add! blowfish-ks2 113 '0x992EFF74)
(dictionary-add! blowfish-ks2 114 '0x3A6F6EAB)
(dictionary-add! blowfish-ks2 115 '0xF4F8FD37)
(dictionary-add! blowfish-ks2 116 '0xA812DC60)
(dictionary-add! blowfish-ks2 117 '0xA1EBDDF8)
(dictionary-add! blowfish-ks2 118 '0x991BE14C)
(dictionary-add! blowfish-ks2 119 '0xDB6E6B0D)
(dictionary-add! blowfish-ks2 120 '0xC67B5510)
(dictionary-add! blowfish-ks2 121 '0x6D672C37)
(dictionary-add! blowfish-ks2 122 '0x2765D43B)
(dictionary-add! blowfish-ks2 123 '0xDCD0E804)
(dictionary-add! blowfish-ks2 124 '0xF1290DC7)
(dictionary-add! blowfish-ks2 125 '0xCC00FFA3)
(dictionary-add! blowfish-ks2 126 '0xB5390F92)
(dictionary-add! blowfish-ks2 127 '0x690FED0B)
(dictionary-add! blowfish-ks2 128 '0x667B9FFB)
(dictionary-add! blowfish-ks2 129 '0xCEDB7D9C)
(dictionary-add! blowfish-ks2 130 '0xA091CF0B)
(dictionary-add! blowfish-ks2 131 '0xD9155EA3)
(dictionary-add! blowfish-ks2 132 '0xBB132F88)
(dictionary-add! blowfish-ks2 133 '0x515BAD24)
(dictionary-add! blowfish-ks2 134 '0x7B9479BF)
(dictionary-add! blowfish-ks2 135 '0x763BD6EB)
(dictionary-add! blowfish-ks2 136 '0x37392EB3)
(dictionary-add! blowfish-ks2 137 '0xCC115979)
(dictionary-add! blowfish-ks2 138 '0x8026E297)
(dictionary-add! blowfish-ks2 139 '0xF42E312D)
(dictionary-add! blowfish-ks2 140 '0x6842ADA7)
(dictionary-add! blowfish-ks2 141 '0xC66A2B3B)
(dictionary-add! blowfish-ks2 142 '0x12754CCC)
(dictionary-add! blowfish-ks2 143 '0x782EF11C)
(dictionary-add! blowfish-ks2 144 '0x6A124237)
(dictionary-add! blowfish-ks2 145 '0xB79251E7)
(dictionary-add! blowfish-ks2 146 '0x06A1BBE6)
(dictionary-add! blowfish-ks2 147 '0x4BFB6350)
(dictionary-add! blowfish-ks2 148 '0x1A6B1018)
(dictionary-add! blowfish-ks2 149 '0x11CAEDFA)
(dictionary-add! blowfish-ks2 150 '0x3D25BDD8)
(dictionary-add! blowfish-ks2 151 '0xE2E1C3C9)
(dictionary-add! blowfish-ks2 152 '0x44421659)
(dictionary-add! blowfish-ks2 153 '0x0A121386)
(dictionary-add! blowfish-ks2 154 '0xD90CEC6E)
(dictionary-add! blowfish-ks2 155 '0xD5ABEA2A)
(dictionary-add! blowfish-ks2 156 '0x64AF674E)
(dictionary-add! blowfish-ks2 157 '0xDA86A85F)
(dictionary-add! blowfish-ks2 158 '0xBEBFE988)
(dictionary-add! blowfish-ks2 159 '0x64E4C3FE)
(dictionary-add! blowfish-ks2 160 '0x9DBC8057)
(dictionary-add! blowfish-ks2 161 '0xF0F7C086)
(dictionary-add! blowfish-ks2 162 '0x60787BF8)
(dictionary-add! blowfish-ks2 163 '0x6003604D)
(dictionary-add! blowfish-ks2 164 '0xD1FD8346)
(dictionary-add! blowfish-ks2 165 '0xF6381FB0)
(dictionary-add! blowfish-ks2 166 '0x7745AE04)
(dictionary-add! blowfish-ks2 167 '0xD736FCCC)
(dictionary-add! blowfish-ks2 168 '0x83426B33)
(dictionary-add! blowfish-ks2 169 '0xF01EAB71)
(dictionary-add! blowfish-ks2 170 '0xB0804187)
(dictionary-add! blowfish-ks2 171 '0x3C005E5F)
(dictionary-add! blowfish-ks2 172 '0x77A057BE)
(dictionary-add! blowfish-ks2 173 '0xBDE8AE24)
(dictionary-add! blowfish-ks2 174 '0x55464299)
(dictionary-add! blowfish-ks2 175 '0xBF582E61)
(dictionary-add! blowfish-ks2 176 '0x4E58F48F)
(dictionary-add! blowfish-ks2 177 '0xF2DDFDA2)
(dictionary-add! blowfish-ks2 178 '0xF474EF38)
(dictionary-add! blowfish-ks2 179 '0x8789BDC2)
(dictionary-add! blowfish-ks2 180 '0x5366F9C3)
(dictionary-add! blowfish-ks2 181 '0xC8B38E74)
(dictionary-add! blowfish-ks2 182 '0xB475F255)
(dictionary-add! blowfish-ks2 183 '0x46FCD9B9)
(dictionary-add! blowfish-ks2 184 '0x7AEB2661)
(dictionary-add! blowfish-ks2 185 '0x8B1DDF84)
(dictionary-add! blowfish-ks2 186 '0x846A0E79)
(dictionary-add! blowfish-ks2 187 '0x915F95E2)
(dictionary-add! blowfish-ks2 188 '0x466E598E)
(dictionary-add! blowfish-ks2 189 '0x20B45770)
(dictionary-add! blowfish-ks2 190 '0x8CD55591)
(dictionary-add! blowfish-ks2 191 '0xC902DE4C)
(dictionary-add! blowfish-ks2 192 '0xB90BACE1)
(dictionary-add! blowfish-ks2 193 '0xBB8205D0)
(dictionary-add! blowfish-ks2 194 '0x11A86248)
(dictionary-add! blowfish-ks2 195 '0x7574A99E)
(dictionary-add! blowfish-ks2 196 '0xB77F19B6)
(dictionary-add! blowfish-ks2 197 '0xE0A9DC09)
(dictionary-add! blowfish-ks2 198 '0x662D09A1)
(dictionary-add! blowfish-ks2 199 '0xC4324633)
(dictionary-add! blowfish-ks2 200 '0xE85A1F02)
(dictionary-add! blowfish-ks2 201 '0x09F0BE8C)
(dictionary-add! blowfish-ks2 202 '0x4A99A025)
(dictionary-add! blowfish-ks2 203 '0x1D6EFE10)
(dictionary-add! blowfish-ks2 204 '0x1AB93D1D)
(dictionary-add! blowfish-ks2 205 '0x0BA5A4DF)
(dictionary-add! blowfish-ks2 206 '0xA186F20F)
(dictionary-add! blowfish-ks2 207 '0x2868F169)
(dictionary-add! blowfish-ks2 208 '0xDCB7DA83)
(dictionary-add! blowfish-ks2 209 '0x573906FE)
(dictionary-add! blowfish-ks2 210 '0xA1E2CE9B)
(dictionary-add! blowfish-ks2 211 '0x4FCD7F52)
(dictionary-add! blowfish-ks2 212 '0x50115E01)
(dictionary-add! blowfish-ks2 213 '0xA70683FA)
(dictionary-add! blowfish-ks2 214 '0xA002B5C4)
(dictionary-add! blowfish-ks2 215 '0x0DE6D027)
(dictionary-add! blowfish-ks2 216 '0x9AF88C27)
(dictionary-add! blowfish-ks2 217 '0x773F8641)
(dictionary-add! blowfish-ks2 218 '0xC3604C06)
(dictionary-add! blowfish-ks2 219 '0x61A806B5)
(dictionary-add! blowfish-ks2 220 '0xF0177A28)
(dictionary-add! blowfish-ks2 221 '0xC0F586E0)
(dictionary-add! blowfish-ks2 222 '0x006058AA)
(dictionary-add! blowfish-ks2 223 '0x30DC7D62)
(dictionary-add! blowfish-ks2 224 '0x11E69ED7)
(dictionary-add! blowfish-ks2 225 '0x2338EA63)
(dictionary-add! blowfish-ks2 226 '0x53C2DD94)
(dictionary-add! blowfish-ks2 227 '0xC2C21634)
(dictionary-add! blowfish-ks2 228 '0xBBCBEE56)
(dictionary-add! blowfish-ks2 229 '0x90BCB6DE)
(dictionary-add! blowfish-ks2 230 '0xEBFC7DA1)
(dictionary-add! blowfish-ks2 231 '0xCE591D76)
(dictionary-add! blowfish-ks2 232 '0x6F05E409)
(dictionary-add! blowfish-ks2 233 '0x4B7C0188)
(dictionary-add! blowfish-ks2 234 '0x39720A3D)
(dictionary-add! blowfish-ks2 235 '0x7C927C24)
(dictionary-add! blowfish-ks2 236 '0x86E3725F)
(dictionary-add! blowfish-ks2 237 '0x724D9DB9)
(dictionary-add! blowfish-ks2 238 '0x1AC15BB4)
(dictionary-add! blowfish-ks2 239 '0xD39EB8FC)
(dictionary-add! blowfish-ks2 240 '0xED545578)
(dictionary-add! blowfish-ks2 241 '0x08FCA5B5)
(dictionary-add! blowfish-ks2 242 '0xD83D7CD3)
(dictionary-add! blowfish-ks2 243 '0x4DAD0FC4)
(dictionary-add! blowfish-ks2 244 '0x1E50EF5E)
(dictionary-add! blowfish-ks2 245 '0xB161E6F8)
(dictionary-add! blowfish-ks2 246 '0xA28514D9)
(dictionary-add! blowfish-ks2 247 '0x6C51133C)
(dictionary-add! blowfish-ks2 248 '0x6FD5C7E7)
(dictionary-add! blowfish-ks2 249 '0x56E14EC4)
(dictionary-add! blowfish-ks2 250 '0x362ABFCE)
(dictionary-add! blowfish-ks2 251 '0xDDC6C837)
(dictionary-add! blowfish-ks2 252 '0xD79A3234)
(dictionary-add! blowfish-ks2 253 '0x92638212)
(dictionary-add! blowfish-ks2 254 '0x670EFA8E)
(dictionary-add! blowfish-ks2 255 '0x406000E0)
(define blowfish-ks3 (make-dictionary 256))
(dictionary-add! blowfish-ks3 0 '0x3A39CE37)
(dictionary-add! blowfish-ks3 1 '0xD3FAF5CF)
(dictionary-add! blowfish-ks3 2 '0xABC27737)
(dictionary-add! blowfish-ks3 3 '0x5AC52D1B)
(dictionary-add! blowfish-ks3 4 '0x5CB0679E)
(dictionary-add! blowfish-ks3 5 '0x4FA33742)
(dictionary-add! blowfish-ks3 6 '0xD3822740)
(dictionary-add! blowfish-ks3 7 '0x99BC9BBE)
(dictionary-add! blowfish-ks3 8 '0xD5118E9D)
(dictionary-add! blowfish-ks3 9 '0xBF0F7315)
(dictionary-add! blowfish-ks3 10 '0xD62D1C7E)
(dictionary-add! blowfish-ks3 11 '0xC700C47B)
(dictionary-add! blowfish-ks3 12 '0xB78C1B6B)
(dictionary-add! blowfish-ks3 13 '0x21A19045)
(dictionary-add! blowfish-ks3 14 '0xB26EB1BE)
(dictionary-add! blowfish-ks3 15 '0x6A366EB4)
(dictionary-add! blowfish-ks3 16 '0x5748AB2F)
(dictionary-add! blowfish-ks3 17 '0xBC946E79)
(dictionary-add! blowfish-ks3 18 '0xC6A376D2)
(dictionary-add! blowfish-ks3 19 '0x6549C2C8)
(dictionary-add! blowfish-ks3 20 '0x530FF8EE)
(dictionary-add! blowfish-ks3 21 '0x468DDE7D)
(dictionary-add! blowfish-ks3 22 '0xD5730A1D)
(dictionary-add! blowfish-ks3 23 '0x4CD04DC6)
(dictionary-add! blowfish-ks3 24 '0x2939BBDB)
(dictionary-add! blowfish-ks3 25 '0xA9BA4650)
(dictionary-add! blowfish-ks3 26 '0xAC9526E8)
(dictionary-add! blowfish-ks3 27 '0xBE5EE304)
(dictionary-add! blowfish-ks3 28 '0xA1FAD5F0)
(dictionary-add! blowfish-ks3 29 '0x6A2D519A)
(dictionary-add! blowfish-ks3 30 '0x63EF8CE2)
(dictionary-add! blowfish-ks3 31 '0x9A86EE22)
(dictionary-add! blowfish-ks3 32 '0xC089C2B8)
(dictionary-add! blowfish-ks3 33 '0x43242EF6)
(dictionary-add! blowfish-ks3 34 '0xA51E03AA)
(dictionary-add! blowfish-ks3 35 '0x9CF2D0A4)
(dictionary-add! blowfish-ks3 36 '0x83C061BA)
(dictionary-add! blowfish-ks3 37 '0x9BE96A4D)
(dictionary-add! blowfish-ks3 38 '0x8FE51550)
(dictionary-add! blowfish-ks3 39 '0xBA645BD6)
(dictionary-add! blowfish-ks3 40 '0x2826A2F9)
(dictionary-add! blowfish-ks3 41 '0xA73A3AE1)
(dictionary-add! blowfish-ks3 42 '0x4BA99586)
(dictionary-add! blowfish-ks3 43 '0xEF5562E9)
(dictionary-add! blowfish-ks3 44 '0xC72FEFD3)
(dictionary-add! blowfish-ks3 45 '0xF752F7DA)
(dictionary-add! blowfish-ks3 46 '0x3F046F69)
(dictionary-add! blowfish-ks3 47 '0x77FA0A59)
(dictionary-add! blowfish-ks3 48 '0x80E4A915)
(dictionary-add! blowfish-ks3 49 '0x87B08601)
(dictionary-add! blowfish-ks3 50 '0x9B09E6AD)
(dictionary-add! blowfish-ks3 51 '0x3B3EE593)
(dictionary-add! blowfish-ks3 52 '0xE990FD5A)
(dictionary-add! blowfish-ks3 53 '0x9E34D797)
(dictionary-add! blowfish-ks3 54 '0x2CF0B7D9)
(dictionary-add! blowfish-ks3 55 '0x022B8B51)
(dictionary-add! blowfish-ks3 56 '0x96D5AC3A)
(dictionary-add! blowfish-ks3 57 '0x017DA67D)
(dictionary-add! blowfish-ks3 58 '0xD1CF3ED6)
(dictionary-add! blowfish-ks3 59 '0x7C7D2D28)
(dictionary-add! blowfish-ks3 60 '0x1F9F25CF)
(dictionary-add! blowfish-ks3 61 '0xADF2B89B)
(dictionary-add! blowfish-ks3 62 '0x5AD6B472)
(dictionary-add! blowfish-ks3 63 '0x5A88F54C)
(dictionary-add! blowfish-ks3 64 '0xE029AC71)
(dictionary-add! blowfish-ks3 65 '0xE019A5E6)
(dictionary-add! blowfish-ks3 66 '0x47B0ACFD)
(dictionary-add! blowfish-ks3 67 '0xED93FA9B)
(dictionary-add! blowfish-ks3 68 '0xE8D3C48D)
(dictionary-add! blowfish-ks3 69 '0x283B57CC)
(dictionary-add! blowfish-ks3 70 '0xF8D56629)
(dictionary-add! blowfish-ks3 71 '0x79132E28)
(dictionary-add! blowfish-ks3 72 '0x785F0191)
(dictionary-add! blowfish-ks3 73 '0xED756055)
(dictionary-add! blowfish-ks3 74 '0xF7960E44)
(dictionary-add! blowfish-ks3 75 '0xE3D35E8C)
(dictionary-add! blowfish-ks3 76 '0x15056DD4)
(dictionary-add! blowfish-ks3 77 '0x88F46DBA)
(dictionary-add! blowfish-ks3 78 '0x03A16125)
(dictionary-add! blowfish-ks3 79 '0x0564F0BD)
(dictionary-add! blowfish-ks3 80 '0xC3EB9E15)
(dictionary-add! blowfish-ks3 81 '0x3C9057A2)
(dictionary-add! blowfish-ks3 82 '0x97271AEC)
(dictionary-add! blowfish-ks3 83 '0xA93A072A)
(dictionary-add! blowfish-ks3 84 '0x1B3F6D9B)
(dictionary-add! blowfish-ks3 85 '0x1E6321F5)
(dictionary-add! blowfish-ks3 86 '0xF59C66FB)
(dictionary-add! blowfish-ks3 87 '0x26DCF319)
(dictionary-add! blowfish-ks3 88 '0x7533D928)
(dictionary-add! blowfish-ks3 89 '0xB155FDF5)
(dictionary-add! blowfish-ks3 90 '0x03563482)
(dictionary-add! blowfish-ks3 91 '0x8ABA3CBB)
(dictionary-add! blowfish-ks3 92 '0x28517711)
(dictionary-add! blowfish-ks3 93 '0xC20AD9F8)
(dictionary-add! blowfish-ks3 94 '0xABCC5167)
(dictionary-add! blowfish-ks3 95 '0xCCAD925F)
(dictionary-add! blowfish-ks3 96 '0x4DE81751)
(dictionary-add! blowfish-ks3 97 '0x3830DC8E)
(dictionary-add! blowfish-ks3 98 '0x379D5862)
(dictionary-add! blowfish-ks3 99 '0x9320F991)
(dictionary-add! blowfish-ks3 100 '0xEA7A90C2)
(dictionary-add! blowfish-ks3 101 '0xFB3E7BCE)
(dictionary-add! blowfish-ks3 102 '0x5121CE64)
(dictionary-add! blowfish-ks3 103 '0x774FBE32)
(dictionary-add! blowfish-ks3 104 '0xA8B6E37E)
(dictionary-add! blowfish-ks3 105 '0xC3293D46)
(dictionary-add! blowfish-ks3 106 '0x48DE5369)
(dictionary-add! blowfish-ks3 107 '0x6413E680)
(dictionary-add! blowfish-ks3 108 '0xA2AE0810)
(dictionary-add! blowfish-ks3 109 '0xDD6DB224)
(dictionary-add! blowfish-ks3 110 '0x69852DFD)
(dictionary-add! blowfish-ks3 111 '0x09072166)
(dictionary-add! blowfish-ks3 112 '0xB39A460A)
(dictionary-add! blowfish-ks3 113 '0x6445C0DD)
(dictionary-add! blowfish-ks3 114 '0x586CDECF)
(dictionary-add! blowfish-ks3 115 '0x1C20C8AE)
(dictionary-add! blowfish-ks3 116 '0x5BBEF7DD)
(dictionary-add! blowfish-ks3 117 '0x1B588D40)
(dictionary-add! blowfish-ks3 118 '0xCCD2017F)
(dictionary-add! blowfish-ks3 119 '0x6BB4E3BB)
(dictionary-add! blowfish-ks3 120 '0xDDA26A7E)
(dictionary-add! blowfish-ks3 121 '0x3A59FF45)
(dictionary-add! blowfish-ks3 122 '0x3E350A44)
(dictionary-add! blowfish-ks3 123 '0xBCB4CDD5)
(dictionary-add! blowfish-ks3 124 '0x72EACEA8)
(dictionary-add! blowfish-ks3 125 '0xFA6484BB)
(dictionary-add! blowfish-ks3 126 '0x8D6612AE)
(dictionary-add! blowfish-ks3 127 '0xBF3C6F47)
(dictionary-add! blowfish-ks3 128 '0xD29BE463)
(dictionary-add! blowfish-ks3 129 '0x542F5D9E)
(dictionary-add! blowfish-ks3 130 '0xAEC2771B)
(dictionary-add! blowfish-ks3 131 '0xF64E6370)
(dictionary-add! blowfish-ks3 132 '0x740E0D8D)
(dictionary-add! blowfish-ks3 133 '0xE75B1357)
(dictionary-add! blowfish-ks3 134 '0xF8721671)
(dictionary-add! blowfish-ks3 135 '0xAF537D5D)
(dictionary-add! blowfish-ks3 136 '0x4040CB08)
(dictionary-add! blowfish-ks3 137 '0x4EB4E2CC)
(dictionary-add! blowfish-ks3 138 '0x34D2466A)
(dictionary-add! blowfish-ks3 139 '0x0115AF84)
(dictionary-add! blowfish-ks3 140 '0xE1B00428)
(dictionary-add! blowfish-ks3 141 '0x95983A1D)
(dictionary-add! blowfish-ks3 142 '0x06B89FB4)
(dictionary-add! blowfish-ks3 143 '0xCE6EA048)
(dictionary-add! blowfish-ks3 144 '0x6F3F3B82)
(dictionary-add! blowfish-ks3 145 '0x3520AB82)
(dictionary-add! blowfish-ks3 146 '0x011A1D4B)
(dictionary-add! blowfish-ks3 147 '0x277227F8)
(dictionary-add! blowfish-ks3 148 '0x611560B1)
(dictionary-add! blowfish-ks3 149 '0xE7933FDC)
(dictionary-add! blowfish-ks3 150 '0xBB3A792B)
(dictionary-add! blowfish-ks3 151 '0x344525BD)
(dictionary-add! blowfish-ks3 152 '0xA08839E1)
(dictionary-add! blowfish-ks3 153 '0x51CE794B)
(dictionary-add! blowfish-ks3 154 '0x2F32C9B7)
(dictionary-add! blowfish-ks3 155 '0xA01FBAC9)
(dictionary-add! blowfish-ks3 156 '0xE01CC87E)
(dictionary-add! blowfish-ks3 157 '0xBCC7D1F6)
(dictionary-add! blowfish-ks3 158 '0xCF0111C3)
(dictionary-add! blowfish-ks3 159 '0xA1E8AAC7)
(dictionary-add! blowfish-ks3 160 '0x1A908749)
(dictionary-add! blowfish-ks3 161 '0xD44FBD9A)
(dictionary-add! blowfish-ks3 162 '0xD0DADECB)
(dictionary-add! blowfish-ks3 163 '0xD50ADA38)
(dictionary-add! blowfish-ks3 164 '0x0339C32A)
(dictionary-add! blowfish-ks3 165 '0xC6913667)
(dictionary-add! blowfish-ks3 166 '0x8DF9317C)
(dictionary-add! blowfish-ks3 167 '0xE0B12B4F)
(dictionary-add! blowfish-ks3 168 '0xF79E59B7)
(dictionary-add! blowfish-ks3 169 '0x43F5BB3A)
(dictionary-add! blowfish-ks3 170 '0xF2D519FF)
(dictionary-add! blowfish-ks3 171 '0x27D9459C)
(dictionary-add! blowfish-ks3 172 '0xBF97222C)
(dictionary-add! blowfish-ks3 173 '0x15E6FC2A)
(dictionary-add! blowfish-ks3 174 '0x0F91FC71)
(dictionary-add! blowfish-ks3 175 '0x9B941525)
(dictionary-add! blowfish-ks3 176 '0xFAE59361)
(dictionary-add! blowfish-ks3 177 '0xCEB69CEB)
(dictionary-add! blowfish-ks3 178 '0xC2A86459)
(dictionary-add! blowfish-ks3 179 '0x12BAA8D1)
(dictionary-add! blowfish-ks3 180 '0xB6C1075E)
(dictionary-add! blowfish-ks3 181 '0xE3056A0C)
(dictionary-add! blowfish-ks3 182 '0x10D25065)
(dictionary-add! blowfish-ks3 183 '0xCB03A442)
(dictionary-add! blowfish-ks3 184 '0xE0EC6E0E)
(dictionary-add! blowfish-ks3 185 '0x1698DB3B)
(dictionary-add! blowfish-ks3 186 '0x4C98A0BE)
(dictionary-add! blowfish-ks3 187 '0x3278E964)
(dictionary-add! blowfish-ks3 188 '0x9F1F9532)
(dictionary-add! blowfish-ks3 189 '0xE0D392DF)
(dictionary-add! blowfish-ks3 190 '0xD3A0342B)
(dictionary-add! blowfish-ks3 191 '0x8971F21E)
(dictionary-add! blowfish-ks3 192 '0x1B0A7441)
(dictionary-add! blowfish-ks3 193 '0x4BA3348C)
(dictionary-add! blowfish-ks3 194 '0xC5BE7120)
(dictionary-add! blowfish-ks3 195 '0xC37632D8)
(dictionary-add! blowfish-ks3 196 '0xDF359F8D)
(dictionary-add! blowfish-ks3 197 '0x9B992F2E)
(dictionary-add! blowfish-ks3 198 '0xE60B6F47)
(dictionary-add! blowfish-ks3 199 '0x0FE3F11D)
(dictionary-add! blowfish-ks3 200 '0xE54CDA54)
(dictionary-add! blowfish-ks3 201 '0x1EDAD891)
(dictionary-add! blowfish-ks3 202 '0xCE6279CF)
(dictionary-add! blowfish-ks3 203 '0xCD3E7E6F)
(dictionary-add! blowfish-ks3 204 '0x1618B166)
(dictionary-add! blowfish-ks3 205 '0xFD2C1D05)
(dictionary-add! blowfish-ks3 206 '0x848FD2C5)
(dictionary-add! blowfish-ks3 207 '0xF6FB2299)
(dictionary-add! blowfish-ks3 208 '0xF523F357)
(dictionary-add! blowfish-ks3 209 '0xA6327623)
(dictionary-add! blowfish-ks3 210 '0x93A83531)
(dictionary-add! blowfish-ks3 211 '0x56CCCD02)
(dictionary-add! blowfish-ks3 212 '0xACF08162)
(dictionary-add! blowfish-ks3 213 '0x5A75EBB5)
(dictionary-add! blowfish-ks3 214 '0x6E163697)
(dictionary-add! blowfish-ks3 215 '0x88D273CC)
(dictionary-add! blowfish-ks3 216 '0xDE966292)
(dictionary-add! blowfish-ks3 217 '0x81B949D0)
(dictionary-add! blowfish-ks3 218 '0x4C50901B)
(dictionary-add! blowfish-ks3 219 '0x71C65614)
(dictionary-add! blowfish-ks3 220 '0xE6C6C7BD)
(dictionary-add! blowfish-ks3 221 '0x327A140A)
(dictionary-add! blowfish-ks3 222 '0x45E1D006)
(dictionary-add! blowfish-ks3 223 '0xC3F27B9A)
(dictionary-add! blowfish-ks3 224 '0xC9AA53FD)
(dictionary-add! blowfish-ks3 225 '0x62A80F00)
(dictionary-add! blowfish-ks3 226 '0xBB25BFE2)
(dictionary-add! blowfish-ks3 227 '0x35BDD2F6)
(dictionary-add! blowfish-ks3 228 '0x71126905)
(dictionary-add! blowfish-ks3 229 '0xB2040222)
(dictionary-add! blowfish-ks3 230 '0xB6CBCF7C)
(dictionary-add! blowfish-ks3 231 '0xCD769C2B)
(dictionary-add! blowfish-ks3 232 '0x53113EC0)
(dictionary-add! blowfish-ks3 233 '0x1640E3D3)
(dictionary-add! blowfish-ks3 234 '0x38ABBD60)
(dictionary-add! blowfish-ks3 235 '0x2547ADF0)
(dictionary-add! blowfish-ks3 236 '0xBA38209C)
(dictionary-add! blowfish-ks3 237 '0xF746CE76)
(dictionary-add! blowfish-ks3 238 '0x77AFA1C5)
(dictionary-add! blowfish-ks3 239 '0x20756060)
(dictionary-add! blowfish-ks3 240 '0x85CBFE4E)
(dictionary-add! blowfish-ks3 241 '0x8AE88DD8)
(dictionary-add! blowfish-ks3 242 '0x7AAAF9B0)
(dictionary-add! blowfish-ks3 243 '0x4CF9AA7E)
(dictionary-add! blowfish-ks3 244 '0x1948C25C)
(dictionary-add! blowfish-ks3 245 '0x02FB8A8C)
(dictionary-add! blowfish-ks3 246 '0x01C36AE4)
(dictionary-add! blowfish-ks3 247 '0xD6EBE1F9)
(dictionary-add! blowfish-ks3 248 '0x90D4F869)
(dictionary-add! blowfish-ks3 249 '0xA65CDEA0)
(dictionary-add! blowfish-ks3 250 '0x3F09252D)
(dictionary-add! blowfish-ks3 251 '0xC208E69F)
(dictionary-add! blowfish-ks3 252 '0xB74E6132)
(dictionary-add! blowfish-ks3 253 '0xCE77E25B)
(dictionary-add! blowfish-ks3 254 '0x578FDFE3)
(dictionary-add! blowfish-ks3 255 '0x3AC372E6)
(define (blowfish-hex-symbol->number sy) ;; FIXME refactor
(let ((colornumber 0))
(do ((i (- (string-length sy) 1) (- i 1)))
((< i 0) (- colornumber 1))
(let ((c (string-ref (if (number? sy)
(number->string sy)
(symbol->string sy)) i)))
(let ((n (cond ((or (eq? c #\a)(eq? c #\A))
10)
((or (eq? c #\b)(eq? c #\B))
11)
((or (eq? c #\c)(eq? c #\C))
12)
((or (eq? c #\d)(eq? c #\D))
13)
((or (eq? c #\e)(eq? c #\E))
14)
((or (eq? c #\f)(eq? c #\F))
15)
(else (string->number (string c))))))
(set! colornumber (+ (* (+ n 1) 16 i) colornumber)))))))
(define (blowfish-hex-char->number c) ;; FIXME refactor
(let ((n (cond ((or (eq? c #\a)(eq? c #\A))
10)
((or (eq? c #\b)(eq? c #\B))
11)
((or (eq? c #\c)(eq? c #\C))
12)
((or (eq? c #\d)(eq? c #\D))
13)
((or (eq? c #\e)(eq? c #\E))
14)
((or (eq? c #\f)(eq? c #\F))
15)
(else (char->integer c)))))
n))
(define :blowfish-record
(make-record-type 'blowfish-record
'(blowfish-s0 blowfish-s1 blowfish-s2 blowfish-s3 blowfish-p)))
(define make-blowfish-record
(record-constructor :blowfish-record
'(blowfish-s0 blowfish-s1 blowfish-s2 blowfish-s3 blowfish-p)))
(define blowfish-s0 (record-accessor :blowfish-record 'blowfish-s0))
(define blowfish-s1 (record-accessor :blowfish-record 'blowfish-s1))
(define blowfish-s2 (record-accessor :blowfish-record 'blowfish-s2))
(define blowfish-s3 (record-accessor :blowfish-record 'blowfish-s3))
(define blowfish-p (record-accessor :blowfish-record 'blowfish-p))
(define blowfish-rounds 16) ;;
(define blowfish-context (make-blowfish-record
(make-dictionary 256) ;; (make-vector 256)
(make-dictionary 256)
(make-dictionary 256)
(make-dictionary 256)
(make-dictionary 256)))
(define blowfish-ps (make-dictionary 256));;FIXME2
(dictionary-add! blowfish-ps 0 '243F6A88)
(dictionary-add! blowfish-ps 1 '85A308D3)
(dictionary-add! blowfish-ps 2 '13198A2E)
(dictionary-add! blowfish-ps 3 '03707344)
(dictionary-add! blowfish-ps 4 'A4093822)
(dictionary-add! blowfish-ps 5 '299F31D0)
(dictionary-add! blowfish-ps 6 '082EFA98)
(dictionary-add! blowfish-ps 7 'EC4E6C89)
(dictionary-add! blowfish-ps 8 '452821E6)
(dictionary-add! blowfish-ps 9 '38D01377)
(dictionary-add! blowfish-ps 10 'BE5466CF)
(dictionary-add! blowfish-ps 11 '34E90C6C)
(dictionary-add! blowfish-ps 12 'C0AC29B7)
(dictionary-add! blowfish-ps 13 'C97C50DD)
(dictionary-add! blowfish-ps 14 '3F84D5B5)
(dictionary-add! blowfish-ps 15 'B5470917)
(dictionary-add! blowfish-ps 16 '9216D5D9)
(dictionary-add! blowfish-ps 17 '8979FB1B)
(define (blowfish-F-be x)
(bitwise-xor (+ (vector-ref (blowfish-s0 blowfish-context) 0)
(vector-ref (blowfish-s1 blowfish-context) 1))
(+ (vector-ref (blowfish-s2 blowfish-context) 2)
(vector-ref (blowfish-s3 blowfish-context) 3))))
(define (blowfish-F-le x)
(bitwise-xor (+ (vector-ref (blowfish-s0 blowfish-context) 3)
(vector-ref (blowfish-s1 blowfish-context) 2))
(+ (vector-ref (blowfish-s2 blowfish-context) 1)
(vector-ref (blowfish-s3 blowfish-context) 0))))
(define blowfish-F (if BIG-ENDIAN-HOST blowfish-F-be blowfish-F-le)) ;; FIXME default is big endian
(define (blowfish-R l r i)
(set! l (bitwise-xor l (dictionary-ref (blowfish-p blowfish-context) i)))
(set! r (bitwise-xor r ((dictionary-ref (blowfish-p blowfish-context) blowfish-F l)))))
;; blowfish-rounds == 16 ->
(define (blowfish-encrypt bc ret_xl ret_xr) ;; NOTE bc = blowfish-context
(let ((xl ret_xl)
(xr ret_xr)
;;(p (blowfish-p bc))
;;(s0 (blowfish-s0 bc))
;;(s1 (blowfish-s1 bc))
;;(s2 (blowfish-s2 bc))
;;(s3 (blowfish-s3 bc))
)
(blowfish-R xl xr 0)
(blowfish-R xr xl 1)
(blowfish-R xl xr 2)
(blowfish-R xr xl 3)
(blowfish-R xl xr 4)
(blowfish-R xr xl 5)
(blowfish-R xl xr 6)
(blowfish-R xr xl 7)
(blowfish-R xl xr 8)
(blowfish-R xr xl 9)
(blowfish-R xl xr 10)
(blowfish-R xr xl 11)
(blowfish-R xl xr 12)
(blowfish-R xr xl 13)
(blowfish-R xl xr 14)
(blowfish-R xr xl 15)
(let ((xl (bitwise-xor xl (dictionary-ref-with-index (blowfish-p bc) blowfish-rounds)))
(xr (bitwise-xor xr (dictionary-ref-with-index p (+ blowfish-rounds 1)))))
(set! ret_xl xr)
(set! ret_xr xl)
(display "ENCRYPT done!")
)))
(define (blowfish-decrypt bc ret_xl ret_xr) ;; NOTE bc = blowfish-context
(let ((xl ret_xl)
(xr ret_xr)
(p (blowfish-p bc))
(s0 (blowfish-s0 bc))
(s1 (blowfish-s1 bc))
(s2 (blowfish-s2 bc))
(s3 (blowfish-s3 bc)))
(blowfish-R xl xr 17)
(blowfish-R xr xl 16)
(blowfish-R xl xr 15)
(blowfish-R xr xl 14)
(blowfish-R xl xr 13)
(blowfish-R xr xl 12)
(blowfish-R xl xr 11)
(blowfish-R xr xl 10)
(blowfish-R xl xr 9)
(blowfish-R xr xl 8)
(blowfish-R xl xr 7)
(blowfish-R xr xl 6)
(blowfish-R xl xr 5)
(blowfish-R xr xl 4)
(blowfish-R xl xr 3)
(blowfish-R xr xl 2)
(let ((xl (bitwise-xor xl (vector-ref p 1)))
(xr (bitwise-xor xr (vector-ref p 0))))
(set! ret_xl xr)
(set! ret_xr xl)
)))
(define (blowfish-set-key bc keyvec keylen) ;; NOTE key is a table
(let ((data (make-dictionary 256)))
(do ((i 0 (+ i 1)))
((>= i (+ blowfish-rounds 2))0)
(dictionary-set-with-index! (blowfish-p bc) i (dictionary-ref-with-index blowfish-ps i)))
(do ((i 0 (+ i 1)))
((>= i 256)0)
(dictionary-set-with-index! (blowfish-s0 bc) i (dictionary-ref-with-index blowfish-ks0 i))
(dictionary-set-with-index! (blowfish-s1 bc) i (dictionary-ref-with-index blowfish-ks1 i))
(dictionary-set-with-index! (blowfish-s2 bc) i (dictionary-ref-with-index blowfish-ks2 i))
(dictionary-set-with-index! (blowfish-s3 bc) i (dictionary-ref-with-index blowfish-ks3 i))
)
(do ((i 0 (+ i 1))
(j 0 (+ j 1)))
((>= i (+ blowfish-rounds 2))0)
(if BIG-ENDIAN-HOST
(begin
(dictionary-set-with-index! data 0 (vector-ref keyvec j))
(dictionary-set-with-index! data 1 (vector-ref keyvec (remainder (+ j 1) keylen)))
(dictionary-set-with-index! data 2 (vector-ref keyvec (remainder (+ j 2) keylen)))
(dictionary-set-with-index! data 3 (vector-ref keyvec (remainder (+ j 3) keylen)))
)
(begin
(dictionary-set-with-index! data 3 (vector-ref keyvec j))
(dictionary-set-with-index! data 2 (vector-ref keyvec (remainder (+ j 1) keylen)))
(dictionary-set-with-index! data 1 (vector-ref keyvec (remainder (+ j 2) keylen)))
(dictionary-set-with-index! data 0 (vector-ref keyvec (remainder (+ j 3) keylen)))
))
(dictionary-set-with-index! (blowfish-p bc) i
(bitwise-xor
(dictionary-ref-with-index (blowfish-p bc) i)
(+ (blowfish-hex-char->number (dictionary-ref-with-index data 0))
(blowfish-hex-char->number (dictionary-ref-with-index data 1))
(blowfish-hex-char->number (dictionary-ref-with-index data 2))
(blowfish-hex-char->number (dictionary-ref-with-index data 3)))))
(set! j (remainder (+ j 4) keylen))
)
(display "FOO!")
(let ((datal 0)
(datar 0))
(do ((i 0 (+ 2)))
((>= i (+ blowfish-rounds 2))0)
(blowfish-encrypt bc datal datar)
(dictionary-set-with-index! (blowfish-p bc) i datal)
(dictionary-set-with-index! (blowfish-p bc) (+ i 1) datar)
)
(do ((i 0 (+ 2)))
((>= i 256)0)
(blowfish-encrypt bc datal datar)
(dictionary-set-with-index! (blowfish-s0 bc) i datal)
(dictionary-set-with-index! (blowfish-s0 bc) (+ i 1) datar))
(do ((i 0 (+ 2)))
((>= i 256)0)
(blowfish-encrypt bc datal datar)
(dictionary-set-with-index! (blowfish-s1 bc) i datal)
(dictionary-set-with-index! (blowfish-s1 bc) (+ i 1) datar))
(do ((i 0 (+ 2)))
((>= i 256)0)
(blowfish-encrypt bc datal datar)
(dictionary-set-with-index! (blowfish-s2 bc) i datal)
(dictionary-set-with-index! (blowfish-s2 bc) (+ i 1) datar))
(do ((i 0 (+ 2)))
((>= i 256)0)
(blowfish-encrypt bc datal datar)
(dictionary-set-with-index! (blowfish-s3 bc) i datal)
(dictionary-set-with-index! (blowfish-s3 bc) (+ i 1) datar))
(display "BAR!")
(do ((i 0 (+ i 1)))
((>= i 255)0);;
(do ((j (+ i 1) (+ j 1)))
(if (or (= (dictionary-ref-with-index (blowfish-s0 bc) i)
(dictionary-ref-with-index (blowfish-s0 bc) j))
(= (vector-ref (blowfish-s1 bc) i)
(vector-ref (blowfish-s1 bc) j))
(= (vector-ref (blowfish-s2 bc) i)
(vector-ref (blowfish-s2 bc) j))
(= (vector-ref (blowfish-s3 bc) i)
(vector-ref (blowfish-s3 bc) j)))
(begin
(display "Weak key.")
-1))
)))))
;; outbuf and inbuf are vectors
(define (blowfish-encrypt-block bc outbuf inbuf)
(let ((d1 0)
(d2 0))
(set! d1 (bitwise-ior (arithmetic-shift (vector-ref inbuf 0) 24)
(arithmetic-shift (vector-ref inbuf 1) 16)
(arithmetic-shift (vector-ref inbuf 2) 8)
(vector-ref inbuf 3)))
(set! d2 (bitwise-ior (arithmetic-shift (vector-ref inbuf 4) 24)
(arithmetic-shift (vector-ref inbuf 5) 16)
(arithmetic-shift (vector-ref inbuf 6) 8)
(vector-ref inbuf 7)))
(blowfish-encrypt bc d1 d2)
(vector-set! outbuf 0 (bitwise-and (arithmetic-shift d1 -24) 271)) ;;271==0xff
(vector-set! outbuf 1 (bitwise-and (arithmetic-shift d1 -16) 271)) ;;271==0xff
(vector-set! outbuf 2 (bitwise-and (arithmetic-shift d1 -8) 271)) ;;271==0xff
(vector-set! outbuf 3 (bitwise-and d1 271)) ;;271==0xff
(vector-set! outbuf 4 (bitwise-and (arithmetic-shift d2 -24) 271)) ;;271==0xff
(vector-set! outbuf 5 (bitwise-and (arithmetic-shift d2 -16) 271)) ;;271==0xff
(vector-set! outbuf 6 (bitwise-and (arithmetic-shift d2 -8) 271)) ;;271==0xff
(vector-set! outbuf 7 (bitwise-and d2 271)) ;;271==0xff
))
;; outbuf and inbuf are vectors
(define (blowfish-decrypt-block bc outbuf inbuf)
(let ((d1 0)
(d2 0))
(set! d1 (bitwise-ior (arithmetic-shift (vector-ref inbuf 0) 24)
(arithmetic-shift (vector-ref inbuf 1) 16)
(arithmetic-shift (vector-ref inbuf 2) 8)
(vector-ref inbuf 3)))
(set! d2 (bitwise-ior (arithmetic-shift (vector-ref inbuf 4) 24)
(arithmetic-shift (vector-ref inbuf 5) 16)
(arithmetic-shift (vector-ref inbuf 6) 8)
(vector-ref inbuf 7)))
(blowfish-decrypt bc d1 d2)
(vector-set! outbuf 0 (bitwise-and (arithmetic-shift d1 -24) 271)) ;;271==0xff
(vector-set! outbuf 1 (bitwise-and (arithmetic-shift d1 -16) 271)) ;;271==0xff
(vector-set! outbuf 2 (bitwise-and (arithmetic-shift d1 -8) 271)) ;;271==0xff
(vector-set! outbuf 3 (bitwise-and d1 271)) ;;271==0xff
(vector-set! outbuf 4 (bitwise-and (arithmetic-shift d2 -24) 271)) ;;271==0xff
(vector-set! outbuf 5 (bitwise-and (arithmetic-shift d2 -16) 271)) ;;271==0xff
(vector-set! outbuf 6 (bitwise-and (arithmetic-shift d2 -8) 271)) ;;271==0xff
(vector-set! outbuf 7 (bitwise-and d2 271)) ;;271==0xff
))
(define (blowfish-selftest)
(let ((plain (list->vector (string->list "BLOWFISH")))
(buffer (make-vector 8))
(plain3 (vector 'FE 'DC 'BA '98 '76 '54 '32 '10))
(key3 (vector '41 '79' '6E 'A0 '52 '62 '6E 'E4))
(cipher3 (vector 'E1 '13 'F4 '10 '2C 'FC 'CE '43)))
(let ((bc blowfish-context))
(display "starting test...")(newline)
(blowfish-set-key bc (list->vector (string->list "abcdefghijklmnopqrstuvwxyz")) 26)
(display "pass 1")(newline)
(blowfish-encrypt-block bc buffer plain) ;; should give \x32\x4e\xd0\xfe\xf4\x13\xa2\x03
(display "pass 2")(newline)
(blowfish-decrypt bc buffer buffer)
(display "pass 3")(newline)
(if (not (eq? buffer plain))
(display "Blowfish selftest failed - 1."))
(blowfish-set-key bc key3)
(blowfish-encrypt-block bc buffer plain3) ;; should give
(blowfish-decrypt bc buffer buffer)
(if (not (eq? buffer plain3))
(display "Blowfish selftest failed - 2."))
)))