1395 lines
62 KiB
Scheme
1395 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 (+ (dictionary-ref-with-index (blowfish-s0 blowfish-context) 3)
|
|
(dictionary-ref-with-index (blowfish-s1 blowfish-context) 2))
|
|
(+ (dictionary-ref-with-index (blowfish-s2 blowfish-context) 1)
|
|
(dictionary-ref-with-index (blowfish-s3 blowfish-context) 0))))
|
|
(define blowfish-F (if BIG-ENDIAN-HOST blowfish-F-le blowfish-F-be)) ;; FIXME2 default is big endian
|
|
|
|
(define (blowfish-R bc l r i)
|
|
(set! l (bitwise-xor l (dictionary-ref-with-index (blowfish-p bc) i)))
|
|
(set! r (bitwise-xor r (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 bc xl xr 0)
|
|
(blowfish-R bc xr xl 1)
|
|
(blowfish-R bc xl xr 2)
|
|
(blowfish-R bc xr xl 3)
|
|
(blowfish-R bc xl xr 4)
|
|
(blowfish-R bc xr xl 5)
|
|
(blowfish-R bc xl xr 6)
|
|
(blowfish-R bc xr xl 7)
|
|
(blowfish-R bc xl xr 8)
|
|
(blowfish-R bc xr xl 9)
|
|
(blowfish-R bc xl xr 10)
|
|
(blowfish-R bc xr xl 11)
|
|
(blowfish-R bc xl xr 12)
|
|
(blowfish-R bc xr xl 13)
|
|
(blowfish-R bc xl xr 14)
|
|
(blowfish-R bc 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 (blowfish-p bc) (+ blowfish-rounds 1)))))
|
|
(set! ret_xl xr)
|
|
(set! ret_xr xl)
|
|
|
|
)))
|
|
|
|
|
|
(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 bc xl xr 17)
|
|
(blowfish-R bc xr xl 16)
|
|
(blowfish-R bc xl xr 15)
|
|
(blowfish-R bc xr xl 14)
|
|
(blowfish-R bc xl xr 13)
|
|
(blowfish-R bc xr xl 12)
|
|
(blowfish-R bc xl xr 11)
|
|
(blowfish-R bc xr xl 10)
|
|
(blowfish-R bc xl xr 9)
|
|
(blowfish-R bc xr xl 8)
|
|
(blowfish-R bc xl xr 7)
|
|
(blowfish-R bc xr xl 6)
|
|
(blowfish-R bc xl xr 5)
|
|
(blowfish-R bc xr xl 4)
|
|
(blowfish-R bc xl xr 3)
|
|
(blowfish-R bc xr xl 2)
|
|
|
|
(let ((xl (bitwise-xor xl (vector-ref (blowfish-p bc) 1)))
|
|
(xr (bitwise-xor xr (vector-ref (blowfish-p bc) 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)
|
|
(+ (dictionary-ref-with-index data 0)
|
|
(dictionary-ref-with-index data 1)
|
|
(dictionary-ref-with-index data 2)
|
|
(dictionary-ref-with-index data 3))))
|
|
(set! j (remainder (+ j 4) keylen))
|
|
)
|
|
|
|
(let ((datal 0)
|
|
(datar 0))
|
|
|
|
(do ((i 0 (+ i 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))
|
|
|
|
(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))
|
|
|
|
(define (char->integer-vector vec)
|
|
(do ((i 0 (+ i 1)))
|
|
((>= i (vector-length vec))0)
|
|
(vector-set! vec i (char->integer (vector-ref vec i))))
|
|
vec)
|
|
(display "starting test...")(newline)
|
|
(blowfish-set-key bc (char->integer-vector
|
|
(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."))
|
|
|
|
))) |