[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/ -> blowfish.php (source)

   1  <?php
   2  /* vim: set expandtab sw=4 ts=4 sts=4: */
   3  /**
   4   * The Cipher_blowfish:: class implements the Cipher interface enryption data
   5   * using the Blowfish algorithm.
   6   *
   7   * $Horde: horde/lib/Cipher/blowfish.php,v 1.2.2.3 2003/01/03 13:23:22 jan Exp $
   8   *
   9   * Copyright 2002-2003 Mike Cochrane <mike@graftonhall.co.nz>
  10   *
  11   * See the enclosed file COPYING for license information (LGPL). If you
  12   * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
  13   *
  14   * @author  Mike Cochrane <mike@graftonhall.co.nz>
  15   * @version $Id: blowfish.php 11081 2008-01-25 09:35:48Z cybot_tm $
  16   * @since   Horde 2.2
  17   * @package horde.cipher
  18   */
  19  
  20  // Change for phpMyAdmin by lem9:
  21  //class Horde_Cipher_blowfish extends Horde_Cipher {
  22  class Horde_Cipher_blowfish
  23  {
  24      /* Pi Array */
  25      var $p = array(
  26              0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
  27              0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
  28              0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
  29              0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,
  30              0x9216D5D9, 0x8979FB1B);
  31  
  32      /* S Boxes */
  33      var $s1 = array(
  34              0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
  35              0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
  36              0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
  37              0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
  38              0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
  39              0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
  40              0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
  41              0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
  42              0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
  43              0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
  44              0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
  45              0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
  46              0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
  47              0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
  48              0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
  49              0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
  50              0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
  51              0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
  52              0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
  53              0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
  54              0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
  55              0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
  56              0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
  57              0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
  58              0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
  59              0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
  60              0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
  61              0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
  62              0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
  63              0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
  64              0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
  65              0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
  66              0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
  67              0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
  68              0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
  69              0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
  70              0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
  71              0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
  72              0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
  73              0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
  74              0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
  75              0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
  76              0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
  77              0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
  78              0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
  79              0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
  80              0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
  81              0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
  82              0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
  83              0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
  84              0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
  85              0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
  86              0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
  87              0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
  88              0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
  89              0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
  90              0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
  91              0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
  92              0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
  93              0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
  94              0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
  95              0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
  96              0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
  97              0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A);
  98      var $s2 = array(
  99              0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
 100              0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
 101              0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
 102              0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
 103              0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
 104              0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
 105              0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
 106              0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
 107              0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
 108              0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
 109              0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
 110              0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
 111              0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
 112              0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
 113              0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
 114              0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
 115              0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
 116              0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
 117              0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
 118              0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
 119              0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
 120              0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
 121              0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
 122              0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
 123              0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
 124              0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
 125              0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
 126              0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
 127              0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
 128              0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
 129              0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
 130              0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
 131              0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
 132              0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
 133              0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
 134              0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
 135              0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
 136              0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
 137              0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
 138              0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
 139              0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
 140              0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
 141              0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
 142              0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
 143              0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
 144              0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
 145              0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
 146              0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
 147              0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
 148              0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
 149              0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
 150              0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
 151              0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
 152              0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
 153              0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
 154              0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
 155              0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
 156              0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
 157              0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
 158              0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
 159              0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
 160              0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
 161              0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
 162              0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7);
 163      var $s3 = array(
 164              0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
 165              0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
 166              0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
 167              0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
 168              0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
 169              0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
 170              0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
 171              0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
 172              0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
 173              0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
 174              0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
 175              0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
 176              0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
 177              0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
 178              0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
 179              0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
 180              0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
 181              0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
 182              0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
 183              0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
 184              0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
 185              0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
 186              0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
 187              0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
 188              0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
 189              0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
 190              0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
 191              0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
 192              0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
 193              0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
 194              0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
 195              0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
 196              0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
 197              0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
 198              0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
 199              0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
 200              0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
 201              0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
 202              0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
 203              0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
 204              0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
 205              0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
 206              0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
 207              0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
 208              0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
 209              0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
 210              0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
 211              0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
 212              0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
 213              0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
 214              0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
 215              0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
 216              0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
 217              0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
 218              0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
 219              0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
 220              0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
 221              0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
 222              0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
 223              0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
 224              0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
 225              0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
 226              0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
 227              0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0);
 228      var $s4 = array(
 229              0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
 230              0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
 231              0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
 232              0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
 233              0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
 234              0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
 235              0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
 236              0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
 237              0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
 238              0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
 239              0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
 240              0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
 241              0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
 242              0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
 243              0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
 244              0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
 245              0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
 246              0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
 247              0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
 248              0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
 249              0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
 250              0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
 251              0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
 252              0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
 253              0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
 254              0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
 255              0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
 256              0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
 257              0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
 258              0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
 259              0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
 260              0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
 261              0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
 262              0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
 263              0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
 264              0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
 265              0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
 266              0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
 267              0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
 268              0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
 269              0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
 270              0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
 271              0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
 272              0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
 273              0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
 274              0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
 275              0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
 276              0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
 277              0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
 278              0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
 279              0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
 280              0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
 281              0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
 282              0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
 283              0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
 284              0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
 285              0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
 286              0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
 287              0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
 288              0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
 289              0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
 290              0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
 291              0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
 292              0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6);
 293  
 294      /* The number of rounds to do */
 295      var $_rounds = 16;
 296  
 297      /**
 298       * Set the key to be used for en/decryption
 299       *
 300       * @param String $key   The key to use
 301       */
 302      function setKey($key) {
 303          $key = $this->_formatKey($key);
 304          $keyPos = $keyXor = 0;
 305  
 306          $iMax = count($this->p);
 307          $keyLen = count($key);
 308          for ($i = 0; $i < $iMax; $i++) {
 309              for ($t = 0; $t < 4; $t++) {
 310                  $keyXor = ($keyXor << 8) | (($key[$keyPos]) & 0x0ff);
 311                  if (++$keyPos == $keyLen) {
 312                      $keyPos = 0;
 313                  }
 314              }
 315              $this->p[$i] = $this->p[$i] ^ $keyXor;
 316          }
 317  
 318          $encZero = array('L' => 0, 'R' => 0);
 319          for ($i = 0; $i + 1 < $iMax; $i += 2) {
 320              $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
 321              $this->p[$i] = $encZero['L'];
 322              $this->p[$i + 1] = $encZero['R'];
 323          }
 324  
 325          $iMax = count($this->s1);
 326          for ($i = 0; $i < $iMax; $i += 2) {
 327              $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
 328              $this->s1[$i] = $encZero['L'];
 329              $this->s1[$i + 1] = $encZero['R'];
 330          }
 331  
 332          $iMax = count($this->s2);
 333          for ($i = 0; $i < $iMax; $i += 2) {
 334              $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
 335              $this->s2[$i] = $encZero['L'];
 336              $this->s2[$i + 1] = $encZero['R'];
 337          }
 338  
 339          $iMax = count($this->s3);
 340          for ($i = 0; $i < $iMax; $i += 2) {
 341              $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
 342              $this->s3[$i] = $encZero['L'];
 343              $this->s3[$i + 1] = $encZero['R'];
 344          }
 345  
 346          $iMax = count($this->s4);
 347          for ($i = 0; $i < $iMax; $i += 2) {
 348              $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
 349              $this->s4[$i] = $encZero['L'];
 350              $this->s4[$i + 1] = $encZero['R'];
 351          }
 352  
 353      }
 354  
 355      /**
 356       * Encrypt a block on data.
 357       *
 358       * @param String $block         The data to encrypt
 359       * @param String $key  optional The key to use
 360       *
 361       * @return String the encrypted output
 362       */
 363      function encryptBlock($block, $key = null) {
 364          if (!is_null($key)) {
 365              $this->setKey($key);
 366          }
 367  
 368          list($L, $R) = array_values(unpack('N*', $block));
 369          $parts = $this->_encryptBlock($L, $R);
 370          return pack("NN", $parts['L'], $parts['R']);
 371      }
 372  
 373      /**
 374       * Encrypt a block on data.
 375       *
 376       * @param String $L  The data to encrypt.
 377       * @param String $R  The data to encrypt.
 378       *
 379       * @return String  The encrypted output.
 380       */
 381      function _encryptBlock($L, $R) {
 382          $L ^= $this->p[0];
 383          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[1];
 384          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[2];
 385          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[3];
 386          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[4];
 387          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[5];
 388          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[6];
 389          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[7];
 390          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[8];
 391          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[9];
 392          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[10];
 393          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[11];
 394          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[12];
 395          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[13];
 396          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[14];
 397          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[15];
 398          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[16];
 399          $R ^= $this->p[17];
 400  
 401          return array('L' => $R, 'R' => $L);
 402      }
 403  
 404      /**
 405       * Decrypt a block on data.
 406       *
 407       * @param String $block          The data to decrypt
 408       * @param String $key   optional The key to use
 409       *
 410       * @return String the decrypted output
 411       */
 412      function decryptBlock($block, $key = null) {
 413          if (!is_null($key)) {
 414              $this->setKey($key);
 415          }
 416  
 417          // change for phpMyAdmin
 418          $L = null;
 419          $R = null;
 420  
 421          $retarray = array_values(unpack('N*', $block));
 422          if (isset($retarray[0])) {
 423              $L = $retarray[0];
 424          }
 425          if (isset($retarray[1])) {
 426              $R = $retarray[1];
 427          }
 428          // end change for phpMyAdmin
 429  
 430          $L ^= $this->p[17];
 431          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[16];
 432          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[15];
 433          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[14];
 434          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[13];
 435          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[12];
 436          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[11];
 437          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[10];
 438          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[9];
 439          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[8];
 440          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[7];
 441          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[6];
 442          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[5];
 443          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[4];
 444          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[3];
 445          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[2];
 446          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[1];
 447  
 448          $decrypted = pack("NN", $R ^ $this->p[0], $L);
 449          return $decrypted;
 450      }
 451  
 452      /**
 453       * Converts a text key into an array.
 454       *
 455       * @param string $key
 456       * @return array  The key.
 457       */
 458      function _formatKey($key) {
 459          return array_values(unpack('C*', $key));
 460      }
 461  
 462  }
 463  
 464  // higher-level functions:
 465  /**
 466   * Encryption using blowfish algorithm
 467   *
 468   * @param   string  $data   original data
 469   * @param   string  $secret the secret
 470   *
 471   * @return  string  the encrypted result
 472   *
 473   * @access  public
 474   *
 475   * @author  lem9
 476   */
 477  function PMA_blowfish_encrypt($data, $secret) {
 478      $pma_cipher = new Horde_Cipher_blowfish;
 479      $encrypt = '';
 480  
 481      $data .= '_'; // triming fixed for DokuWiki FS#1690 FS#1713
 482      $mod = strlen($data) % 8;
 483  
 484      if ($mod > 0) {
 485          $data .= str_repeat("\0", 8 - $mod);
 486      }
 487  
 488      foreach (str_split($data, 8) as $chunk) {
 489          $encrypt .= $pma_cipher->encryptBlock($chunk, $secret);
 490      }
 491      return base64_encode($encrypt);
 492  }
 493  
 494  /**
 495   * Decryption using blowfish algorithm
 496   *
 497   * @param   string  $encdata encrypted data
 498   * @param   string  $secret  the secret
 499   *
 500   * @return  string  original data
 501   *
 502   * @access  public
 503   *
 504   * @author  lem9
 505   */
 506  function PMA_blowfish_decrypt($encdata, $secret) {
 507      $pma_cipher = new Horde_Cipher_blowfish;
 508      $decrypt = '';
 509      $data = base64_decode($encdata);
 510  
 511      foreach (str_split($data, 8) as $chunk) {
 512          $decrypt .= $pma_cipher->decryptBlock($chunk, $secret);
 513      }
 514      return substr(rtrim($decrypt, "\0"), 0, -1); // triming fixed for DokuWiki FS#1690 FS#1713
 515  }