Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / socket.io-client / lib / vendor / web-socket-js / flash-src / com / hurlant / crypto / symmetric / BlowFishKey.as
1 /**\r
2  * BlowFishKey\r
3  * \r
4  * An Actionscript 3 implementation of the BlowFish encryption algorithm,\r
5  * as documented at http://www.schneier.com/blowfish.html\r
6  * Copyright (c) 2007 Henri Torgemane\r
7  * \r
8  * Derived from:\r
9  *              The Bouncy Castle Crypto package, \r
10  *              Copyright (c) 2000-2004 The Legion Of The Bouncy Castle\r
11  *              (http://www.bouncycastle.org)\r
12  * \r
13  * See LICENSE.txt for full license information.\r
14  */\r
15 package com.hurlant.crypto.symmetric\r
16 {\r
17         import flash.utils.ByteArray;\r
18         import com.hurlant.util.Memory;\r
19 \r
20         public class BlowFishKey implements ISymmetricKey\r
21         {\r
22 \r
23                 private static const KP:Array = [ 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0,\r
24                         0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5,\r
25                         0xB5470917, 0x9216D5D9, 0x8979FB1B ];\r
26 \r
27                 private static const KS0:Array = [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, 0x24A19947,\r
28                         0xB3916CF7, 0x0801F2E2, 0x858EFC16, 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, 0x0D95748F, 0x728EB658,\r
29                         0x718BCD58, 0x82154AEE, 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, 0xC5D1B023, 0x286085F0, 0xCA417918,\r
30                         0xB8DB38EF, 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\r
31                         0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, 0xA15486AF,\r
32                         0x7C72E993, 0xB3EE1411, 0x636FBC2A, 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, 0xAFD6BA33, 0x6C24CF5C,\r
33                         0x7A325381, 0x28958677, 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, 0x61D809CC, 0xFB21A991, 0x487CAC60,\r
34                         0x5DEC8032, 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\r
35                         0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, 0x6A51A0D2,\r
36                         0xD8542F68, 0x960FA728, 0xAB5133A3, 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, 0xA1F1651D, 0x39AF0176,\r
37                         0x66CA593E, 0x82430E88, 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, 0xE06F75D8, 0x85C12073, 0x401A449F,\r
38                         0x56C16AA6, 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\r
39                         0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, 0xC1A94FB6,\r
40                         0x409F60C4, 0x5E5C9EC2, 0x196A2463, 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, 0x6DFC511F, 0x9B30952C,\r
41                         0xCC814544, 0xAF5EBD09, 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, 0xC0CBA857, 0x45C8740F, 0xD20B5F39,\r
42                         0xB9D3FBDB, 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\r
43                         0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, 0x9E5C57BB,\r
44                         0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, 0x695B27B0, 0xBBCA58C8,\r
45                         0xE1FFA35D, 0xB8F011A0, 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, 0x9A53E479, 0xB6F84565, 0xD28E49BC,\r
46                         0x4BFB9790, 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\r
47                         0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, 0x8FF6E2FB,\r
48                         0xF2122B64, 0x8888B812, 0x900DF01C, 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, 0x2F2F2218, 0xBE0E1777,\r
49                         0xEA752DFE, 0x8B021FA1, 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81,\r
50                         0xD2ADA8D9, 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\r
51                         0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, 0x2464369B,\r
52                         0xF009B91E, 0x5563911D, 0x59DFA6AA, 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, 0x83260376, 0x6295CFA9,\r
53                         0x11C81968, 0x4E734A41, 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, 0xD60F573F, 0xBC9BC6E4, 0x2B60A476,\r
54                         0x81E67400, 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\r
55                         0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ];\r
56 \r
57                 private static const KS1:Array = [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, 0xECAA8C71,\r
58                         0x699A17FF, 0x5664526C, 0xC2B19EE1, 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, 0x3F54989A, 0x5B429D65,\r
59                         0x6B8FE4D6, 0x99F73FD6, 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, 0x4CDD2086, 0x8470EB26, 0x6382E9C6,\r
60                         0x021ECC5E, 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\r
61                         0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, 0xAE0CF51A,\r
62                         0x3CB574B2, 0x25837A58, 0xDC0921BD, 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, 0x3AE5E581, 0x37C2DADC,\r
63                         0xC8B57634, 0x9AF3DDA7, 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1,\r
64                         0x183EB331, 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\r
65                         0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, 0x7A584718,\r
66                         0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, 0xEF1C1847, 0x3215D908,\r
67                         0xDD433B37, 0x24C2BA16, 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, 0x71DFF89E, 0x10314E55, 0x81AC77D6,\r
68                         0x5F11199B, 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\r
69                         0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, 0x803E89D6,\r
70                         0x5266C825, 0x2E4CC978, 0x9C10B36A, 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, 0xF2F74EA7, 0x361D2B3D,\r
71                         0x1939260F, 0x19C27960, 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, 0xE3BC4595, 0xA67BC883, 0xB17F37D1,\r
72                         0x018CFF28, 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\r
73                         0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, 0xB5735C90,\r
74                         0x4C70A239, 0xD59E9E0B, 0xCBAADE14, 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, 0x648B1EAF, 0x19BDF0CA,\r
75                         0xA02369B9, 0x655ABB50, 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, 0x9B540B19, 0x875FA099, 0x95F7997E,\r
76                         0x623D7DA8, 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\r
77                         0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, 0x58EBF2EF,\r
78                         0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, 0x45EEE2B6, 0xA3AAABEA,\r
79                         0xDB6C4F15, 0xFACB4FD0, 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, 0xD81E799E, 0x86854DC7, 0xE44B476A,\r
80                         0x3D816250, 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\r
81                         0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, 0x3372F092,\r
82                         0x8D937E41, 0xD65FECF1, 0x6C223BDB, 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, 0xA6078084, 0x19F8509E,\r
83                         0xE8EFD855, 0x61D99735, 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, 0x9E447A2E, 0xC3453484, 0xFDD56705,\r
84                         0x0E1E9EC9, 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\r
85                         0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ];\r
86 \r
87                 private static const KS2:Array = [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, 0xD4082471,\r
88                         0x3320F46A, 0x43B7D4B7, 0x500061AF, 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, 0x4D95FC1D, 0x96B591AF,\r
89                         0x70F4DDD3, 0x66A02F45, 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, 0x96EB27B3, 0x55FD3941, 0xDA2547E6,\r
90                         0xABCA0A9A, 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\r
91                         0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, 0x20FE9E35,\r
92                         0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, 0x3A6EFA74, 0xDD5B4332,\r
93                         0x6841E7F7, 0xCA7820FB, 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, 0x55533A3A, 0x20838D87, 0xFE6BA9B7,\r
94                         0xD096954B, 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\r
95                         0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, 0x07F9C9EE,\r
96                         0x41041F0F, 0x404779A4, 0x5D886E17, 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, 0x257B7834, 0x602A9C60,\r
97                         0xDFF8E8A3, 0x1F636C1B, 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, 0x6B2395E0, 0x333E92E1, 0x3B240B62,\r
98                         0xEEBEB922, 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\r
99                         0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, 0xA812DC60,\r
100                         0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, 0xF1290DC7, 0xCC00FFA3,\r
101                         0xB5390F92, 0x690FED0B, 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, 0xBB132F88, 0x515BAD24, 0x7B9479BF,\r
102                         0x763BD6EB, 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\r
103                         0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, 0x44421659,\r
104                         0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, 0x9DBC8057, 0xF0F7C086,\r
105                         0x60787BF8, 0x6003604D, 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, 0x83426B33, 0xF01EAB71, 0xB0804187,\r
106                         0x3C005E5F, 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\r
107                         0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, 0x466E598E,\r
108                         0x20B45770, 0x8CD55591, 0xC902DE4C, 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, 0xB77F19B6, 0xE0A9DC09,\r
109                         0x662D09A1, 0xC4324633, 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F,\r
110                         0x2868F169, 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\r
111                         0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, 0x11E69ED7,\r
112                         0x2338EA63, 0x53C2DD94, 0xC2C21634, 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, 0x6F05E409, 0x4B7C0188,\r
113                         0x39720A3D, 0x7C927C24, 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, 0xED545578, 0x08FCA5B5, 0xD83D7CD3,\r
114                         0x4DAD0FC4, 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\r
115                         0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ];\r
116 \r
117                 private static const KS3:Array = [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, 0xD5118E9D,\r
118                         0xBF0F7315, 0xD62D1C7E, 0xC700C47B, 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, 0x5748AB2F, 0xBC946E79,\r
119                         0xC6A376D2, 0x6549C2C8, 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, 0x2939BBDB, 0xA9BA4650, 0xAC9526E8,\r
120                         0xBE5EE304, 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\r
121                         0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, 0xC72FEFD3,\r
122                         0xF752F7DA, 0x3F046F69, 0x77FA0A59, 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, 0xE990FD5A, 0x9E34D797,\r
123                         0x2CF0B7D9, 0x022B8B51, 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472,\r
124                         0x5A88F54C, 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\r
125                         0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, 0xC3EB9E15,\r
126                         0x3C9057A2, 0x97271AEC, 0xA93A072A, 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, 0x7533D928, 0xB155FDF5,\r
127                         0x03563482, 0x8ABA3CBB, 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, 0x4DE81751, 0x3830DC8E, 0x379D5862,\r
128                         0x9320F991, 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\r
129                         0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, 0x5BBEF7DD,\r
130                         0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, 0x72EACEA8, 0xFA6484BB,\r
131                         0x8D6612AE, 0xBF3C6F47, 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, 0x740E0D8D, 0xE75B1357, 0xF8721671,\r
132                         0xAF537D5D, 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\r
133                         0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, 0xA08839E1,\r
134                         0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, 0x1A908749, 0xD44FBD9A,\r
135                         0xD0DADECB, 0xD50ADA38, 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF,\r
136                         0x27D9459C, 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\r
137                         0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, 0x9F1F9532,\r
138                         0xE0D392DF, 0xD3A0342B, 0x8971F21E, 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, 0xDF359F8D, 0x9B992F2E,\r
139                         0xE60B6F47, 0x0FE3F11D, 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, 0x1618B166, 0xFD2C1D05, 0x848FD2C5,\r
140                         0xF6FB2299, 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\r
141                         0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, 0xC9AA53FD,\r
142                         0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, 0x53113EC0, 0x1640E3D3,\r
143                         0x38ABBD60, 0x2547ADF0, 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0,\r
144                         0x4CF9AA7E, 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\r
145                         0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ];\r
146 \r
147                 // ====================================\r
148                 // Useful constants\r
149                 // ====================================\r
150         \r
151                 private static const ROUNDS:uint = 16;\r
152                 private static const BLOCK_SIZE:uint = 8; // bytes = 64 bits\r
153                 private static const SBOX_SK:uint = 256;\r
154                 private static const P_SZ:uint = ROUNDS + 2;\r
155         \r
156                 private var S0:Array;\r
157                 private var S1:Array;\r
158                 private var S2:Array;\r
159                 private var S3:Array; // the s-boxes\r
160                 private var P:Array; // the p-array\r
161         \r
162                 private var key:ByteArray = null;\r
163 \r
164                 public function BlowFishKey(key:ByteArray) {\r
165                         this.key = key;\r
166                         setKey(key);\r
167                 }\r
168 \r
169                 public function getBlockSize():uint\r
170                 {\r
171                         return BLOCK_SIZE;\r
172                 }\r
173                 \r
174                 public function decrypt(block:ByteArray, index:uint=0):void\r
175                 {\r
176                         decryptBlock(block, index, block, index);\r
177                 }\r
178                 \r
179                 public function dispose():void\r
180                 {\r
181                         var i:uint=0;\r
182                         for (i=0;i<S0.length;i++) { S0[i]=0; }\r
183                         for (i=0;i<S1.length;i++) { S1[i]=0; }\r
184                         for (i=0;i<S2.length;i++) { S2[i]=0; }\r
185                         for (i=0;i<S3.length;i++) { S3[i]=0; }\r
186                         for (i=0;i<P.length;i++) { P[i]=0; }\r
187                         S0 = null;\r
188                         S1 = null;\r
189                         S2 = null;\r
190                         S3 = null;\r
191                         P = null;\r
192                         for (i=0;i<key.length;i++) {\r
193                                 key[i]=0;\r
194                         }\r
195                         key.length = 0;\r
196                         key = null;\r
197                         Memory.gc();\r
198                 }\r
199                 \r
200                 public function encrypt(block:ByteArray, index:uint=0):void\r
201                 {\r
202                         encryptBlock(block, index, block, index);\r
203                 }\r
204 \r
205                 // ==================================\r
206                 // Private Implementation\r
207                 // ==================================\r
208         \r
209                 private function F(x:uint):uint\r
210                 {\r
211                         return (((S0[(x >>> 24)] + S1[(x >>> 16) & 0xff]) ^ S2[(x >>> 8) & 0xff]) + S3[x & 0xff]);\r
212                 }\r
213 \r
214                 /**\r
215                  * apply the encryption cycle to each value pair in the table.\r
216                  */\r
217                 private function processTable(xl:uint, xr:uint, table:Array):void\r
218                 {\r
219                         var size:uint = table.length;\r
220         \r
221                         for (var s:uint = 0; s < size; s += 2)\r
222                         {\r
223                                 xl ^= P[0];\r
224         \r
225                                 for (var i:uint = 1; i < ROUNDS; i += 2)\r
226                                 {\r
227                                         xr ^= F(xl) ^ P[i];\r
228                                         xl ^= F(xr) ^ P[i + 1];\r
229                                 }\r
230         \r
231                                 xr ^= P[ROUNDS + 1];\r
232         \r
233                                 table[s] = xr;\r
234                                 table[s + 1] = xl;\r
235         \r
236                                 xr = xl; // end of cycle swap\r
237                                 xl = table[s];\r
238                         }\r
239                 }\r
240         \r
241                 private function setKey(key:ByteArray):void\r
242                 {\r
243                         /*\r
244                          * - comments are from _Applied Crypto_, Schneier, p338 please be\r
245                          * careful comparing the two, AC numbers the arrays from 1, the enclosed\r
246                          * code from 0.\r
247                          * \r
248                          * (1) Initialise the S-boxes and the P-array, with a fixed string This\r
249                          * string contains the hexadecimal digits of pi (3.141...)\r
250                          */\r
251                         S0 = KS0.concat();\r
252                         S1 = KS1.concat();\r
253                         S2 = KS2.concat();\r
254                         S3 = KS3.concat();\r
255                         P = KP.concat();\r
256         \r
257                         /*\r
258                          * (2) Now, XOR P[0] with the first 32 bits of the key, XOR P[1] with\r
259                          * the second 32-bits of the key, and so on for all bits of the key (up\r
260                          * to P[17]). Repeatedly cycle through the key bits until the entire\r
261                          * P-array has been XOR-ed with the key bits\r
262                          */\r
263                         var keyLength:uint= key.length;\r
264                         var keyIndex:uint = 0;\r
265         \r
266                         for (var i:uint = 0; i < P_SZ; i++)\r
267                         {\r
268                                 // get the 32 bits of the key, in 4 * 8 bit chunks\r
269                                 var data:uint = 0x0000000;\r
270                                 for (var j:uint = 0; j < 4; j++)\r
271                                 {\r
272                                         // create a 32 bit block\r
273                                         data = (data << 8) | (key[keyIndex++] & 0xff);\r
274         \r
275                                         // wrap when we get to the end of the key\r
276                                         if (keyIndex >= keyLength)\r
277                                         {\r
278                                                 keyIndex = 0;\r
279                                         }\r
280                                 }\r
281                                 // XOR the newly created 32 bit chunk onto the P-array\r
282                                 P[i] ^= data;\r
283                         }\r
284         \r
285                         /*\r
286                          * (3) Encrypt the all-zero string with the Blowfish algorithm, using\r
287                          * the subkeys described in (1) and (2)\r
288                          * \r
289                          * (4) Replace P1 and P2 with the output of step (3)\r
290                          * \r
291                          * (5) Encrypt the output of step(3) using the Blowfish algorithm, with\r
292                          * the modified subkeys.\r
293                          * \r
294                          * (6) Replace P3 and P4 with the output of step (5)\r
295                          * \r
296                          * (7) Continue the process, replacing all elements of the P-array and\r
297                          * then all four S-boxes in order, with the output of the continuously\r
298                          * changing Blowfish algorithm\r
299                          */\r
300         \r
301                         processTable(0, 0, P);\r
302                         processTable(P[P_SZ - 2], P[P_SZ - 1], S0);\r
303                         processTable(S0[SBOX_SK - 2], S0[SBOX_SK - 1], S1);\r
304                         processTable(S1[SBOX_SK - 2], S1[SBOX_SK - 1], S2);\r
305                         processTable(S2[SBOX_SK - 2], S2[SBOX_SK - 1], S3);\r
306                 }\r
307         \r
308                 /**\r
309                  * Encrypt the given input starting at the given offset and place the result\r
310                  * in the provided buffer starting at the given offset. The input will be an\r
311                  * exact multiple of our blocksize.\r
312                  */\r
313                 private function encryptBlock(src:ByteArray, srcIndex:uint, dst:ByteArray, dstIndex:uint):void\r
314                 {\r
315                         var xl:uint = BytesTo32bits(src, srcIndex);\r
316                         var xr:uint = BytesTo32bits(src, srcIndex + 4);\r
317         \r
318                         xl ^= P[0];\r
319         \r
320                         for (var i:uint = 1; i < ROUNDS; i += 2)\r
321                         {\r
322                                 xr ^= F(xl) ^ P[i];\r
323                                 xl ^= F(xr) ^ P[i + 1];\r
324                         }\r
325         \r
326                         xr ^= P[ROUNDS + 1];\r
327         \r
328                         Bits32ToBytes(xr, dst, dstIndex);\r
329                         Bits32ToBytes(xl, dst, dstIndex + 4);\r
330                 }\r
331         \r
332                 /**\r
333                  * Decrypt the given input starting at the given offset and place the result\r
334                  * in the provided buffer starting at the given offset. The input will be an\r
335                  * exact multiple of our blocksize.\r
336                  */\r
337                 private function decryptBlock(src:ByteArray, srcIndex:uint, dst:ByteArray, dstIndex:uint):void\r
338                 {\r
339                         var xl:uint = BytesTo32bits(src, srcIndex);\r
340                         var xr:uint = BytesTo32bits(src, srcIndex + 4);\r
341         \r
342                         xl ^= P[ROUNDS + 1];\r
343         \r
344                         for (var i:uint = ROUNDS; i > 0; i -= 2)\r
345                         {\r
346                                 xr ^= F(xl) ^ P[i];\r
347                                 xl ^= F(xr) ^ P[i - 1];\r
348                         }\r
349         \r
350                         xr ^= P[0];\r
351         \r
352                         Bits32ToBytes(xr, dst, dstIndex);\r
353                         Bits32ToBytes(xl, dst, dstIndex + 4);\r
354                 }\r
355         \r
356                 private function BytesTo32bits(b:ByteArray, i:uint):uint\r
357                 {\r
358                         return ((b[i] & 0xff) << 24) | ((b[i + 1] & 0xff) << 16) | ((b[i + 2] & 0xff) << 8) | ((b[i + 3] & 0xff));\r
359                 }\r
360         \r
361                 private function Bits32ToBytes(i:uint, b:ByteArray, offset:uint):void\r
362                 {\r
363                         b[offset + 3] = i;\r
364                         b[offset + 2] = (i >> 8);\r
365                         b[offset + 1] = (i >> 16);\r
366                         b[offset] = (i >> 24);\r
367                 }\r
368                 \r
369                 public function toString():String {\r
370                         return "blowfish";\r
371                 }\r
372         \r
373         }\r
374                 \r
375 }\r