メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcBlowfish.c

説明を見る。
00001 
00011 #define DKUTIL_C_BLOWFISH_C
00012 
00013 #include "dkcBlowfish.h"
00014 
00015 
00016 
00017 #define S(SBox_,x,i) (SBox_[i][x.w.byte##i])
00018 #define bf_F(SBox_,x) (((S(SBox_,x,0) + S(SBox_,x,1)) ^ S(SBox_,x,2)) + S(SBox_,x,3))
00019 #define ROUND(PArray_,SBox_,a,b,n) (a.dword ^= bf_F(SBox_,b) ^ PArray_[n])
00020 
00021 
00022 const static DWORD bf_P[NPASS + 2] = {
00023   0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
00024   0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
00025   0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
00026   0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
00027   0x9216d5d9, 0x8979fb1b,
00028 };
00029 const static DWORD bf_S[4][256] = {
00030   0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
00031   0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
00032   0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
00033   0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
00034   0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
00035   0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
00036   0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
00037   0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
00038   0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
00039   0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
00040   0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
00041   0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
00042   0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
00043   0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
00044   0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
00045   0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
00046   0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
00047   0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
00048   0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
00049   0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
00050   0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
00051   0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
00052   0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
00053   0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
00054   0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
00055   0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
00056   0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
00057   0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
00058   0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
00059   0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
00060   0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
00061   0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
00062   0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
00063   0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
00064   0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
00065   0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
00066   0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
00067   0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
00068   0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
00069   0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
00070   0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
00071   0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
00072   0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
00073   0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
00074   0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
00075   0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
00076   0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
00077   0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
00078   0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
00079   0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
00080   0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
00081   0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
00082   0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
00083   0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
00084   0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
00085   0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
00086   0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
00087   0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
00088   0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
00089   0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
00090   0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
00091   0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
00092   0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
00093   0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,
00094   0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
00095   0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
00096   0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
00097   0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
00098   0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
00099   0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
00100   0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
00101   0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
00102   0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
00103   0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
00104   0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
00105   0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
00106   0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
00107   0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
00108   0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
00109   0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
00110   0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
00111   0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
00112   0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
00113   0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
00114   0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
00115   0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
00116   0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
00117   0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
00118   0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
00119   0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
00120   0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
00121   0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
00122   0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
00123   0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
00124   0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
00125   0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
00126   0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
00127   0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
00128   0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
00129   0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
00130   0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
00131   0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
00132   0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
00133   0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
00134   0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
00135   0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
00136   0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
00137   0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
00138   0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
00139   0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
00140   0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
00141   0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
00142   0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
00143   0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
00144   0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
00145   0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
00146   0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
00147   0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
00148   0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
00149   0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
00150   0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
00151   0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
00152   0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
00153   0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
00154   0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
00155   0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
00156   0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
00157   0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,
00158   0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
00159   0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
00160   0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
00161   0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
00162   0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
00163   0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
00164   0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
00165   0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
00166   0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
00167   0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
00168   0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
00169   0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
00170   0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
00171   0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
00172   0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
00173   0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
00174   0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
00175   0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
00176   0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
00177   0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
00178   0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
00179   0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
00180   0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
00181   0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
00182   0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
00183   0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
00184   0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
00185   0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
00186   0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
00187   0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
00188   0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
00189   0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
00190   0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
00191   0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
00192   0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
00193   0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
00194   0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
00195   0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
00196   0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
00197   0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
00198   0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
00199   0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
00200   0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
00201   0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
00202   0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
00203   0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
00204   0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
00205   0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
00206   0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
00207   0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
00208   0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
00209   0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
00210   0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
00211   0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
00212   0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
00213   0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
00214   0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
00215   0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
00216   0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
00217   0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
00218   0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
00219   0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
00220   0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
00221   0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,
00222   0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
00223   0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
00224   0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
00225   0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
00226   0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
00227   0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
00228   0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
00229   0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
00230   0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
00231   0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
00232   0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
00233   0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
00234   0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
00235   0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
00236   0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
00237   0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
00238   0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
00239   0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
00240   0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
00241   0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
00242   0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
00243   0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
00244   0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
00245   0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
00246   0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
00247   0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
00248   0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
00249   0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
00250   0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
00251   0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
00252   0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
00253   0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
00254   0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
00255   0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
00256   0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
00257   0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
00258   0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
00259   0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
00260   0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
00261   0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
00262   0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
00263   0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
00264   0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
00265   0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
00266   0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
00267   0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
00268   0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
00269   0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
00270   0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
00271   0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
00272   0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
00273   0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
00274   0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
00275   0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
00276   0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
00277   0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
00278   0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
00279   0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
00280   0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
00281   0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
00282   0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
00283   0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
00284   0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
00285   0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,
00286 };
00287 
00288 
00289 DKC_BLOWFISH *WINAPI dkcAllocBlowfish(BYTE *key,int keysize){
00290     DKC_BLOWFISH *p = (DKC_BLOWFISH *)dkcAllocate(sizeof(DKC_BLOWFISH));
00291     if(NULL==p){
00292         return NULL;
00293     }
00294     p->PArray = (DWORD *)malloc( sizeof(DWORD) * 18) ;
00295     if(NULL==p->PArray){
00296         goto Error;
00297     }
00298     p->SBoxes = (DKC_BLOWFISH_SBOX_TYPE)malloc( sizeof(DWORD) * 4 * 256) ;
00299     if(NULL==p->SBoxes){
00300         goto Error;
00301     }
00302     if(DKUTIL_FAILED(dkcBlowfishInit(p,key,keysize))){
00303         goto Error;
00304     }
00305     return p;
00306 Error:
00307     dkcFreeBlowfish(&p);
00308     return NULL;
00309 }
00310 
00311 
00312 int WINAPI dkcFreeBlowfish(DKC_BLOWFISH **p){
00313     if(NULL==p){
00314         return edk_FAILED;
00315     }
00316     if((*p)->SBoxes){
00317         free((*p)->SBoxes);
00318     }
00319     if((*p)->PArray){
00320         free((*p)->PArray);
00321     }
00322     return dkcFree((void **)p);
00323 }
00324 
00325 
00326     // the low level (private) encryption function
00327 static void Blowfish_encipher (DKC_BLOWFISH *p,DWORD *xl, DWORD *xr)
00328 {
00329     union aword  Xl, Xr ;
00330 
00331     Xl.dword = *xl ;
00332     Xr.dword = *xr ;
00333 
00334     Xl.dword ^= p->PArray [0];
00335     ROUND (p->PArray,p->SBoxes,Xr, Xl, 1) ;  ROUND (p->PArray,p->SBoxes,Xl, Xr, 2) ;
00336     ROUND (p->PArray,p->SBoxes,Xr, Xl, 3) ;  ROUND (p->PArray,p->SBoxes,Xl, Xr, 4) ;
00337     ROUND (p->PArray,p->SBoxes,Xr, Xl, 5) ;  ROUND (p->PArray,p->SBoxes,Xl, Xr, 6) ;
00338     ROUND (p->PArray,p->SBoxes,Xr, Xl, 7) ;  ROUND (p->PArray,p->SBoxes,Xl, Xr, 8) ;
00339     ROUND (p->PArray,p->SBoxes,Xr, Xl, 9) ;  ROUND (p->PArray,p->SBoxes,Xl, Xr, 10) ;
00340     ROUND (p->PArray,p->SBoxes,Xr, Xl, 11) ; ROUND (p->PArray,p->SBoxes,Xl, Xr, 12) ;
00341     ROUND (p->PArray,p->SBoxes,Xr, Xl, 13) ; ROUND (p->PArray,p->SBoxes,Xl, Xr, 14) ;
00342     ROUND (p->PArray,p->SBoxes,Xr, Xl, 15) ; ROUND (p->PArray,p->SBoxes,Xl, Xr, 16) ;
00343     Xr.dword ^= p->PArray [17] ;
00344 
00345     *xr = Xl.dword ;
00346     *xl = Xr.dword ;
00347 }
00348 
00349     // the low level (private) decryption function
00350 static void Blowfish_decipher (DKC_BLOWFISH *p,DWORD *xl, DWORD *xr)
00351 {
00352    union aword  Xl ;
00353    union aword  Xr ;
00354 
00355    Xl.dword = *xl ;
00356    Xr.dword = *xr ;
00357 
00358    Xl.dword ^= p->PArray [17] ;
00359    ROUND (p->PArray,p->SBoxes,Xr, Xl, 16) ;  ROUND (p->PArray,p->SBoxes,Xl, Xr, 15) ;
00360    ROUND (p->PArray,p->SBoxes,Xr, Xl, 14) ;  ROUND (p->PArray,p->SBoxes,Xl, Xr, 13) ;
00361    ROUND (p->PArray,p->SBoxes,Xr, Xl, 12) ;  ROUND (p->PArray,p->SBoxes,Xl, Xr, 11) ;
00362    ROUND (p->PArray,p->SBoxes,Xr, Xl, 10) ;  ROUND (p->PArray,p->SBoxes,Xl, Xr, 9) ;
00363    ROUND (p->PArray,p->SBoxes,Xr, Xl, 8) ;   ROUND (p->PArray,p->SBoxes,Xl, Xr, 7) ;
00364    ROUND (p->PArray,p->SBoxes,Xr, Xl, 6) ;   ROUND (p->PArray,p->SBoxes,Xl, Xr, 5) ;
00365    ROUND (p->PArray,p->SBoxes,Xr, Xl, 4) ;   ROUND (p->PArray,p->SBoxes,Xl, Xr, 3) ;
00366    ROUND (p->PArray,p->SBoxes,Xr, Xl, 2) ;   ROUND (p->PArray,p->SBoxes,Xl, Xr, 1) ;
00367    Xr.dword ^= p->PArray[0];
00368 
00369    *xl = Xr.dword;
00370    *xr = Xl.dword;
00371 }
00372 
00373 
00374 int WINAPI dkcBlowfishInit(DKC_BLOWFISH *p,BYTE *key, int keybytes)
00375 {
00376     
00377     int         i, j ;
00378     DWORD       data, datal, datar ;
00379     union aword temp ;
00380 
00381     if(dkcd_BLOWFISH_MAX_KEY_SIZE < keybytes){
00382         return edk_FAILED;
00383     }
00384 
00385     // first fill arrays from data tables
00386     for (i = 0 ; i < 18 ; i++)
00387         p->PArray[i] = bf_P [i] ;
00388 
00389     for (i = 0 ; i < 4 ; i++)
00390     {
00391         for (j = 0 ; j < 256 ; j++)
00392             p->SBoxes [i][j] = bf_S [i][j] ;
00393     }
00394 
00395 
00396     j = 0 ;
00397     for (i = 0 ; i < NPASS + 2 ; ++i)
00398     {
00399         temp.dword = 0 ;
00400         temp.w.byte0 = key[j];
00401         temp.w.byte1 = key[(j+1) % keybytes] ;
00402         temp.w.byte2 = key[(j+2) % keybytes] ;
00403         temp.w.byte3 = key[(j+3) % keybytes] ;
00404         data = temp.dword ;
00405         p->PArray[i] ^= data ;
00406         j = (j + 4) % keybytes ;
00407     }
00408 
00409     datal = 0 ;
00410     datar = 0 ;
00411 
00412     for (i = 0 ; i < NPASS + 2 ; i += 2)
00413     {
00414         Blowfish_encipher (p,&datal, &datar) ;
00415         p->PArray[i] = datal ;
00416         p->PArray[i + 1] = datar ;
00417     }
00418 
00419     for (i = 0 ; i < 4 ; ++i)
00420     {
00421         for (j = 0 ; j < 256 ; j += 2)
00422         {
00423           Blowfish_encipher (p,&datal, &datar) ;
00424           p->SBoxes [i][j] = datal ;
00425           p->SBoxes [i][j + 1] = datar ;
00426         }
00427     }
00428 
00429     return edk_SUCCEEDED;
00430 }
00431 
00432 DWORD WINAPI dkcBlowfishGetOutputLength (DWORD lInputLong)
00433 {
00434     DWORD   lVal ;
00435 
00436     lVal = lInputLong % 8 ; // find out if uneven number of bytes at
00437 //the end
00438     if (lVal != 0)
00439         return lInputLong + 8 - lVal ;
00440     else
00441         return lInputLong ;
00442 }
00443 
00444 
00445 DWORD WINAPI dkcBlowfishEncrypt (DKC_BLOWFISH *p,BYTE * pInput, BYTE * pOutput, DWORD lSize)
00446 {
00447     DWORD   lCount, lOutSize, lGoodBytes ;
00448     BYTE    *pi, *po ;
00449     int     i, j ;
00450     int     SameDest = (pInput == pOutput ? 1 : 0) ;
00451 
00452     lOutSize = dkcBlowfishGetOutputLength (lSize) ;
00453     for (lCount = 0 ; lCount < lOutSize ; lCount += 8)
00454     {
00455         if (SameDest)   // if encoded data is being written into inputbuffer
00456         {
00457             if (lCount < lSize - 7) // if not dealing with unevenbytes at end
00458             {
00459                 Blowfish_encipher (p,(DWORD *) pInput,
00460                     (DWORD *) (pInput + 4)) ;
00461             }
00462             else        // pad end of data with null bytes tocomplete encryption
00463             {
00464                 po = pInput + lSize ;   // point at bytepast theend of actual data
00465                 j = (int) (lOutSize - lSize) ;  // number ofbytes to set to null
00466                 for (i = 0 ; i < j ; i++)
00467                     *po++ = 0 ;
00468                 Blowfish_encipher (p,(DWORD *) pInput,
00469                     (DWORD *) (pInput + 4)) ;
00470             }
00471             pInput += 8 ;
00472         }
00473         else            // output buffer not equal to inputbuffer, so must copy
00474         {               // input to output buffer prior to encrypting
00475             if (lCount < lSize - 7) // if not dealing with unevenbytes at end
00476             {
00477                 pi = pInput ;
00478                 po = pOutput ;
00479                 for (i = 0 ; i < 8 ; i++)
00480 // copy bytes to output
00481                     *po++ = *pi++ ;
00482                 Blowfish_encipher (p,(DWORD *) pOutput, // nowencrypt them
00483                     (DWORD *) (pOutput + 4)) ;
00484             }
00485             else        // pad end of data with null bytes tocomplete encryption
00486             {
00487                 lGoodBytes = lSize - lCount ;   // number ofremaining data bytes
00488                 po = pOutput ;
00489                 for (i = 0 ; i < (int) lGoodBytes ; i++)
00490                     *po++ = *pInput++ ;
00491                 for (j = i ; j < 8 ; j++)
00492                     *po++ = 0 ;
00493                 Blowfish_encipher (p,(DWORD *) pOutput,
00494                     (DWORD *) (pOutput + 4)) ;
00495             }
00496             pInput += 8 ;
00497             pOutput += 8 ;
00498         }
00499     }
00500     return lOutSize ;
00501  }
00502 
00503 
00504 void WINAPI dkcBlowfishDecrypt (DKC_BLOWFISH *p,BYTE * pInput, BYTE * pOutput, DWORD lSize)
00505 {
00506     DWORD   lCount ;
00507     BYTE    *pi, *po ;
00508     int     i ;
00509     int     SameDest = (pInput == pOutput ? 1 : 0) ;
00510 
00511     for (lCount = 0 ; lCount < lSize ; lCount += 8)
00512     {
00513         if (SameDest)   // if encoded data is being written into inputbuffer
00514         {
00515             Blowfish_decipher (p,(DWORD *) pInput,
00516                 (DWORD *) (pInput + 4)) ;
00517             pInput += 8 ;
00518         }
00519         else            // output buffer not equal to inputbuffer
00520         {               // so copy input to output before decoding
00521             pi = pInput ;
00522             po = pOutput ;
00523             for (i = 0 ; i < 8 ; i++)
00524                 *po++ = *pi++ ;
00525             Blowfish_decipher (p,(DWORD *) pOutput,
00526                 (DWORD *) (pOutput + 4)) ;
00527             pInput += 8 ;
00528             pOutput += 8 ;
00529         }
00530     }
00531 }
00532 #undef S
00533 #undef bf_F
00534 #undef ROUND

dkutil_cに対してTue Dec 7 01:09:56 2004に生成されました。 doxygen 1.3.6