hawq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cjcjame...@apache.org
Subject [60/80] [abbrv] incubator-hawq git commit: HAWQ-863. Add python module pycrypto
Date Wed, 29 Jun 2016 01:23:53 GMT
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/2c87cdcb/tools/bin/pythonSrc/pycrypto-2.0.1/src/Blowfish.c
----------------------------------------------------------------------
diff --git a/tools/bin/pythonSrc/pycrypto-2.0.1/src/Blowfish.c b/tools/bin/pythonSrc/pycrypto-2.0.1/src/Blowfish.c
new file mode 100644
index 0000000..df69afa
--- /dev/null
+++ b/tools/bin/pythonSrc/pycrypto-2.0.1/src/Blowfish.c
@@ -0,0 +1,499 @@
+
+/*
+ *  blowfish.c : Source code for the Blowfish block cipher
+ *
+ * Part of the Python Cryptography Toolkit
+ *
+ * Distribute and use freely; there are no restrictions on further 
+ * dissemination and usage except those imposed by the laws of your 
+ * country of residence.
+ *
+ */
+
+/*************************************************************************/
+/* File: bf.c
+   Blowfish cipher by Bruce Schneier,
+   Code by Bryan Olson, based partly on Schneier's.
+*/
+
+#include "Python.h"
+
+#define MODULE_NAME Blowfish
+#define BLOCK_SIZE 8
+#define KEY_SIZE 0
+  
+/* Define IntU32 to be an unsigned in 32 bits long */
+typedef unsigned int IntU32 ;
+typedef unsigned char IntU8 ;
+#define NROUNDS         16
+
+
+
+/* Define IntP to be an integer which
+   is the same size as a pointer. */
+typedef unsigned long IntP ;
+
+
+typedef struct
+{
+	IntU32 p[2][NROUNDS+2],
+		sbox[4][256] ;
+} BFkey_type ; 
+
+typedef struct 
+{
+	BFkey_type bfkey;
+} block_state;
+
+/*  File bfinit.h
+    Data to initialize P and S in BlowFish.
+*/
+
+static IntU32 p_init[NROUNDS+2] = 
+{
+	608135816UL, 2242054355UL,  320440878UL,   57701188UL,
+	2752067618UL,  698298832UL,  137296536UL, 3964562569UL,
+	1160258022UL,  953160567UL, 3193202383UL,  887688300UL,
+	3232508343UL, 3380367581UL, 1065670069UL, 3041331479UL,
+	2450970073UL, 2306472731UL
+} ;
+
+static IntU32  s_init[4][256] = {
+	{3509652390UL, 2564797868UL,  805139163UL, 3491422135UL,
+	 3101798381UL, 1780907670UL, 3128725573UL, 4046225305UL,
+	 614570311UL, 3012652279UL,  134345442UL, 2240740374UL,
+	 1667834072UL, 1901547113UL, 2757295779UL, 4103290238UL,
+	 227898511UL, 1921955416UL, 1904987480UL, 2182433518UL,
+	 2069144605UL, 3260701109UL, 2620446009UL,  720527379UL,
+	 3318853667UL,  677414384UL, 3393288472UL, 3101374703UL,
+	 2390351024UL, 1614419982UL, 1822297739UL, 2954791486UL,
+	 3608508353UL, 3174124327UL, 2024746970UL, 1432378464UL,
+	 3864339955UL, 2857741204UL, 1464375394UL, 1676153920UL,
+	 1439316330UL,  715854006UL, 3033291828UL,  289532110UL,
+	 2706671279UL, 2087905683UL, 3018724369UL, 1668267050UL,
+	 732546397UL, 1947742710UL, 3462151702UL, 2609353502UL,
+	 2950085171UL, 1814351708UL, 2050118529UL,  680887927UL,
+	 999245976UL, 1800124847UL, 3300911131UL, 1713906067UL,
+	 1641548236UL, 4213287313UL, 1216130144UL, 1575780402UL,
+	 4018429277UL, 3917837745UL, 3693486850UL, 3949271944UL,
+	 596196993UL, 3549867205UL,  258830323UL, 2213823033UL,
+	 772490370UL, 2760122372UL, 1774776394UL, 2652871518UL,
+	 566650946UL, 4142492826UL, 1728879713UL, 2882767088UL,
+	 1783734482UL, 3629395816UL, 2517608232UL, 2874225571UL,
+	 1861159788UL,  326777828UL, 3124490320UL, 2130389656UL,
+	 2716951837UL,  967770486UL, 1724537150UL, 2185432712UL,
+	 2364442137UL, 1164943284UL, 2105845187UL,  998989502UL,
+	 3765401048UL, 2244026483UL, 1075463327UL, 1455516326UL,
+	 1322494562UL,  910128902UL,  469688178UL, 1117454909UL,
+	 936433444UL, 3490320968UL, 3675253459UL, 1240580251UL,
+	 122909385UL, 2157517691UL,  634681816UL, 4142456567UL,
+	 3825094682UL, 3061402683UL, 2540495037UL,   79693498UL,
+	 3249098678UL, 1084186820UL, 1583128258UL,  426386531UL,
+	 1761308591UL, 1047286709UL,  322548459UL,  995290223UL,
+	 1845252383UL, 2603652396UL, 3431023940UL, 2942221577UL,
+	 3202600964UL, 3727903485UL, 1712269319UL,  422464435UL,
+	 3234572375UL, 1170764815UL, 3523960633UL, 3117677531UL,
+	 1434042557UL,  442511882UL, 3600875718UL, 1076654713UL,
+	 1738483198UL, 4213154764UL, 2393238008UL, 3677496056UL,
+	 1014306527UL, 4251020053UL,  793779912UL, 2902807211UL,
+	 842905082UL, 4246964064UL, 1395751752UL, 1040244610UL,
+	 2656851899UL, 3396308128UL,  445077038UL, 3742853595UL,
+	 3577915638UL,  679411651UL, 2892444358UL, 2354009459UL,
+	 1767581616UL, 3150600392UL, 3791627101UL, 3102740896UL,
+	 284835224UL, 4246832056UL, 1258075500UL,  768725851UL,
+	 2589189241UL, 3069724005UL, 3532540348UL, 1274779536UL,
+	 3789419226UL, 2764799539UL, 1660621633UL, 3471099624UL,
+	 4011903706UL,  913787905UL, 3497959166UL,  737222580UL,
+	 2514213453UL, 2928710040UL, 3937242737UL, 1804850592UL,
+	 3499020752UL, 2949064160UL, 2386320175UL, 2390070455UL,
+	 2415321851UL, 4061277028UL, 2290661394UL, 2416832540UL,
+	 1336762016UL, 1754252060UL, 3520065937UL, 3014181293UL,
+	 791618072UL, 3188594551UL, 3933548030UL, 2332172193UL,
+	 3852520463UL, 3043980520UL,  413987798UL, 3465142937UL,
+	 3030929376UL, 4245938359UL, 2093235073UL, 3534596313UL,
+	 375366246UL, 2157278981UL, 2479649556UL,  555357303UL,
+	 3870105701UL, 2008414854UL, 3344188149UL, 4221384143UL,
+	 3956125452UL, 2067696032UL, 3594591187UL, 2921233993UL,
+	 2428461UL,  544322398UL,  577241275UL, 1471733935UL,
+	 610547355UL, 4027169054UL, 1432588573UL, 1507829418UL,
+	 2025931657UL, 3646575487UL,  545086370UL,   48609733UL,
+	 2200306550UL, 1653985193UL,  298326376UL, 1316178497UL,
+	 3007786442UL, 2064951626UL,  458293330UL, 2589141269UL,
+	 3591329599UL, 3164325604UL,  727753846UL, 2179363840UL,
+	 146436021UL, 1461446943UL, 4069977195UL,  705550613UL,
+	 3059967265UL, 3887724982UL, 4281599278UL, 3313849956UL,
+	 1404054877UL, 2845806497UL,  146425753UL, 1854211946UL},
+
+	{ 1266315497UL, 3048417604UL, 3681880366UL, 3289982499UL,
+	  2909710000UL, 1235738493UL, 2632868024UL, 2414719590UL,
+	  3970600049UL, 1771706367UL, 1449415276UL, 3266420449UL,
+	  422970021UL, 1963543593UL, 2690192192UL, 3826793022UL,
+	  1062508698UL, 1531092325UL, 1804592342UL, 2583117782UL,
+	  2714934279UL, 4024971509UL, 1294809318UL, 4028980673UL,
+	  1289560198UL, 2221992742UL, 1669523910UL,   35572830UL,
+	  157838143UL, 1052438473UL, 1016535060UL, 1802137761UL,
+	  1753167236UL, 1386275462UL, 3080475397UL, 2857371447UL,
+	  1040679964UL, 2145300060UL, 2390574316UL, 1461121720UL,
+	  2956646967UL, 4031777805UL, 4028374788UL,   33600511UL,
+	  2920084762UL, 1018524850UL,  629373528UL, 3691585981UL,
+	  3515945977UL, 2091462646UL, 2486323059UL,  586499841UL,
+	  988145025UL,  935516892UL, 3367335476UL, 2599673255UL,
+	  2839830854UL,  265290510UL, 3972581182UL, 2759138881UL,
+	  3795373465UL, 1005194799UL,  847297441UL,  406762289UL,
+	  1314163512UL, 1332590856UL, 1866599683UL, 4127851711UL,
+	  750260880UL,  613907577UL, 1450815602UL, 3165620655UL,
+	  3734664991UL, 3650291728UL, 3012275730UL, 3704569646UL,
+	  1427272223UL,  778793252UL, 1343938022UL, 2676280711UL,
+	  2052605720UL, 1946737175UL, 3164576444UL, 3914038668UL,
+	  3967478842UL, 3682934266UL, 1661551462UL, 3294938066UL,
+	  4011595847UL,  840292616UL, 3712170807UL,  616741398UL,
+	  312560963UL,  711312465UL, 1351876610UL,  322626781UL,
+	  1910503582UL,  271666773UL, 2175563734UL, 1594956187UL,
+	  70604529UL, 3617834859UL, 1007753275UL, 1495573769UL,
+	  4069517037UL, 2549218298UL, 2663038764UL,  504708206UL,
+	  2263041392UL, 3941167025UL, 2249088522UL, 1514023603UL,
+	  1998579484UL, 1312622330UL,  694541497UL, 2582060303UL,
+	  2151582166UL, 1382467621UL,  776784248UL, 2618340202UL,
+	  3323268794UL, 2497899128UL, 2784771155UL,  503983604UL,
+	  4076293799UL,  907881277UL,  423175695UL,  432175456UL,
+	  1378068232UL, 4145222326UL, 3954048622UL, 3938656102UL,
+	  3820766613UL, 2793130115UL, 2977904593UL,   26017576UL,
+	  3274890735UL, 3194772133UL, 1700274565UL, 1756076034UL,
+	  4006520079UL, 3677328699UL,  720338349UL, 1533947780UL,
+	  354530856UL,  688349552UL, 3973924725UL, 1637815568UL,
+	  332179504UL, 3949051286UL,   53804574UL, 2852348879UL,
+	  3044236432UL, 1282449977UL, 3583942155UL, 3416972820UL,
+	  4006381244UL, 1617046695UL, 2628476075UL, 3002303598UL,
+	  1686838959UL,  431878346UL, 2686675385UL, 1700445008UL,
+	  1080580658UL, 1009431731UL,  832498133UL, 3223435511UL,
+	  2605976345UL, 2271191193UL, 2516031870UL, 1648197032UL,
+	  4164389018UL, 2548247927UL,  300782431UL,  375919233UL,
+	  238389289UL, 3353747414UL, 2531188641UL, 2019080857UL,
+	  1475708069UL,  455242339UL, 2609103871UL,  448939670UL,
+	  3451063019UL, 1395535956UL, 2413381860UL, 1841049896UL,
+	  1491858159UL,  885456874UL, 4264095073UL, 4001119347UL,
+	  1565136089UL, 3898914787UL, 1108368660UL,  540939232UL,
+	  1173283510UL, 2745871338UL, 3681308437UL, 4207628240UL,
+	  3343053890UL, 4016749493UL, 1699691293UL, 1103962373UL,
+	  3625875870UL, 2256883143UL, 3830138730UL, 1031889488UL,
+	  3479347698UL, 1535977030UL, 4236805024UL, 3251091107UL,
+	  2132092099UL, 1774941330UL, 1199868427UL, 1452454533UL,
+	  157007616UL, 2904115357UL,  342012276UL,  595725824UL,
+	  1480756522UL,  206960106UL,  497939518UL,  591360097UL,
+	  863170706UL, 2375253569UL, 3596610801UL, 1814182875UL,
+	  2094937945UL, 3421402208UL, 1082520231UL, 3463918190UL,
+	  2785509508UL,  435703966UL, 3908032597UL, 1641649973UL,
+	  2842273706UL, 3305899714UL, 1510255612UL, 2148256476UL,
+	  2655287854UL, 3276092548UL, 4258621189UL,  236887753UL,
+	  3681803219UL,  274041037UL, 1734335097UL, 3815195456UL,
+	  3317970021UL, 1899903192UL, 1026095262UL, 4050517792UL,
+	  356393447UL, 2410691914UL, 3873677099UL, 3682840055UL},
+
+	{ 3913112168UL, 2491498743UL, 4132185628UL, 2489919796UL,
+	  1091903735UL, 1979897079UL, 3170134830UL, 3567386728UL,
+	  3557303409UL,  857797738UL, 1136121015UL, 1342202287UL,
+	  507115054UL, 2535736646UL,  337727348UL, 3213592640UL,
+	  1301675037UL, 2528481711UL, 1895095763UL, 1721773893UL,
+	  3216771564UL,   62756741UL, 2142006736UL,  835421444UL,
+	  2531993523UL, 1442658625UL, 3659876326UL, 2882144922UL,
+	  676362277UL, 1392781812UL,  170690266UL, 3921047035UL,
+	  1759253602UL, 3611846912UL, 1745797284UL,  664899054UL,
+	  1329594018UL, 3901205900UL, 3045908486UL, 2062866102UL,
+	  2865634940UL, 3543621612UL, 3464012697UL, 1080764994UL,
+	  553557557UL, 3656615353UL, 3996768171UL,  991055499UL,
+	  499776247UL, 1265440854UL,  648242737UL, 3940784050UL,
+	  980351604UL, 3713745714UL, 1749149687UL, 3396870395UL,
+	  4211799374UL, 3640570775UL, 1161844396UL, 3125318951UL,
+	  1431517754UL,  545492359UL, 4268468663UL, 3499529547UL,
+	  1437099964UL, 2702547544UL, 3433638243UL, 2581715763UL,
+	  2787789398UL, 1060185593UL, 1593081372UL, 2418618748UL,
+	  4260947970UL,   69676912UL, 2159744348UL,   86519011UL,
+	  2512459080UL, 3838209314UL, 1220612927UL, 3339683548UL,
+	  133810670UL, 1090789135UL, 1078426020UL, 1569222167UL,
+	  845107691UL, 3583754449UL, 4072456591UL, 1091646820UL,
+	  628848692UL, 1613405280UL, 3757631651UL,  526609435UL,
+	  236106946UL,   48312990UL, 2942717905UL, 3402727701UL,
+	  1797494240UL,  859738849UL,  992217954UL, 4005476642UL,
+	  2243076622UL, 3870952857UL, 3732016268UL,  765654824UL,
+	  3490871365UL, 2511836413UL, 1685915746UL, 3888969200UL,
+	  1414112111UL, 2273134842UL, 3281911079UL, 4080962846UL,
+	  172450625UL, 2569994100UL,  980381355UL, 4109958455UL,
+	  2819808352UL, 2716589560UL, 2568741196UL, 3681446669UL,
+	  3329971472UL, 1835478071UL,  660984891UL, 3704678404UL,
+	  4045999559UL, 3422617507UL, 3040415634UL, 1762651403UL,
+	  1719377915UL, 3470491036UL, 2693910283UL, 3642056355UL,
+	  3138596744UL, 1364962596UL, 2073328063UL, 1983633131UL,
+	  926494387UL, 3423689081UL, 2150032023UL, 4096667949UL,
+	  1749200295UL, 3328846651UL,  309677260UL, 2016342300UL,
+	  1779581495UL, 3079819751UL,  111262694UL, 1274766160UL,
+	  443224088UL,  298511866UL, 1025883608UL, 3806446537UL,
+	  1145181785UL,  168956806UL, 3641502830UL, 3584813610UL,
+	  1689216846UL, 3666258015UL, 3200248200UL, 1692713982UL,
+	  2646376535UL, 4042768518UL, 1618508792UL, 1610833997UL,
+	  3523052358UL, 4130873264UL, 2001055236UL, 3610705100UL,
+	  2202168115UL, 4028541809UL, 2961195399UL, 1006657119UL,
+	  2006996926UL, 3186142756UL, 1430667929UL, 3210227297UL,
+	  1314452623UL, 4074634658UL, 4101304120UL, 2273951170UL,
+	  1399257539UL, 3367210612UL, 3027628629UL, 1190975929UL,
+	  2062231137UL, 2333990788UL, 2221543033UL, 2438960610UL,
+	  1181637006UL,  548689776UL, 2362791313UL, 3372408396UL,
+	  3104550113UL, 3145860560UL,  296247880UL, 1970579870UL,
+	  3078560182UL, 3769228297UL, 1714227617UL, 3291629107UL,
+	  3898220290UL,  166772364UL, 1251581989UL,  493813264UL,
+	  448347421UL,  195405023UL, 2709975567UL,  677966185UL,
+	  3703036547UL, 1463355134UL, 2715995803UL, 1338867538UL,
+	  1343315457UL, 2802222074UL, 2684532164UL,  233230375UL,
+	  2599980071UL, 2000651841UL, 3277868038UL, 1638401717UL,
+	  4028070440UL, 3237316320UL,    6314154UL,  819756386UL,
+	  300326615UL,  590932579UL, 1405279636UL, 3267499572UL,
+	  3150704214UL, 2428286686UL, 3959192993UL, 3461946742UL,
+	  1862657033UL, 1266418056UL,  963775037UL, 2089974820UL,
+	  2263052895UL, 1917689273UL,  448879540UL, 3550394620UL,
+	  3981727096UL,  150775221UL, 3627908307UL, 1303187396UL,
+	  508620638UL, 2975983352UL, 2726630617UL, 1817252668UL,
+	  1876281319UL, 1457606340UL,  908771278UL, 3720792119UL,
+	  3617206836UL, 2455994898UL, 1729034894UL, 1080033504UL},
+
+	{  976866871UL, 3556439503UL, 2881648439UL, 1522871579UL,
+	   1555064734UL, 1336096578UL, 3548522304UL, 2579274686UL,
+	   3574697629UL, 3205460757UL, 3593280638UL, 3338716283UL,
+	   3079412587UL,  564236357UL, 2993598910UL, 1781952180UL,
+	   1464380207UL, 3163844217UL, 3332601554UL, 1699332808UL,
+	   1393555694UL, 1183702653UL, 3581086237UL, 1288719814UL,
+	   691649499UL, 2847557200UL, 2895455976UL, 3193889540UL,
+	   2717570544UL, 1781354906UL, 1676643554UL, 2592534050UL,
+	   3230253752UL, 1126444790UL, 2770207658UL, 2633158820UL,
+	   2210423226UL, 2615765581UL, 2414155088UL, 3127139286UL,
+	   673620729UL, 2805611233UL, 1269405062UL, 4015350505UL,
+	   3341807571UL, 4149409754UL, 1057255273UL, 2012875353UL,
+	   2162469141UL, 2276492801UL, 2601117357UL,  993977747UL,
+	   3918593370UL, 2654263191UL,  753973209UL,   36408145UL,
+	   2530585658UL,   25011837UL, 3520020182UL, 2088578344UL,
+	   530523599UL, 2918365339UL, 1524020338UL, 1518925132UL,
+	   3760827505UL, 3759777254UL, 1202760957UL, 3985898139UL,
+	   3906192525UL,  674977740UL, 4174734889UL, 2031300136UL,
+	   2019492241UL, 3983892565UL, 4153806404UL, 3822280332UL,
+	   352677332UL, 2297720250UL,   60907813UL,   90501309UL,
+	   3286998549UL, 1016092578UL, 2535922412UL, 2839152426UL,
+	   457141659UL,  509813237UL, 4120667899UL,  652014361UL,
+	   1966332200UL, 2975202805UL,   55981186UL, 2327461051UL,
+	   676427537UL, 3255491064UL, 2882294119UL, 3433927263UL,
+	   1307055953UL,  942726286UL,  933058658UL, 2468411793UL,
+	   3933900994UL, 4215176142UL, 1361170020UL, 2001714738UL,
+	   2830558078UL, 3274259782UL, 1222529897UL, 1679025792UL,
+	   2729314320UL, 3714953764UL, 1770335741UL,  151462246UL,
+	   3013232138UL, 1682292957UL, 1483529935UL,  471910574UL,
+	   1539241949UL,  458788160UL, 3436315007UL, 1807016891UL,
+	   3718408830UL,  978976581UL, 1043663428UL, 3165965781UL,
+	   1927990952UL, 4200891579UL, 2372276910UL, 3208408903UL,
+	   3533431907UL, 1412390302UL, 2931980059UL, 4132332400UL,
+	   1947078029UL, 3881505623UL, 4168226417UL, 2941484381UL,
+	   1077988104UL, 1320477388UL,  886195818UL,   18198404UL,
+	   3786409000UL, 2509781533UL,  112762804UL, 3463356488UL,
+	   1866414978UL,  891333506UL,   18488651UL,  661792760UL,
+	   1628790961UL, 3885187036UL, 3141171499UL,  876946877UL,
+	   2693282273UL, 1372485963UL,  791857591UL, 2686433993UL,
+	   3759982718UL, 3167212022UL, 3472953795UL, 2716379847UL,
+	   445679433UL, 3561995674UL, 3504004811UL, 3574258232UL,
+	   54117162UL, 3331405415UL, 2381918588UL, 3769707343UL,
+	   4154350007UL, 1140177722UL, 4074052095UL,  668550556UL,
+	   3214352940UL,  367459370UL,  261225585UL, 2610173221UL,
+	   4209349473UL, 3468074219UL, 3265815641UL,  314222801UL,
+	   3066103646UL, 3808782860UL,  282218597UL, 3406013506UL,
+	   3773591054UL,  379116347UL, 1285071038UL,  846784868UL,
+	   2669647154UL, 3771962079UL, 3550491691UL, 2305946142UL,
+	   453669953UL, 1268987020UL, 3317592352UL, 3279303384UL,
+	   3744833421UL, 2610507566UL, 3859509063UL,  266596637UL,
+	   3847019092UL,  517658769UL, 3462560207UL, 3443424879UL,
+	   370717030UL, 4247526661UL, 2224018117UL, 4143653529UL,
+	   4112773975UL, 2788324899UL, 2477274417UL, 1456262402UL,
+	   2901442914UL, 1517677493UL, 1846949527UL, 2295493580UL,
+	   3734397586UL, 2176403920UL, 1280348187UL, 1908823572UL,
+	   3871786941UL,  846861322UL, 1172426758UL, 3287448474UL,
+	   3383383037UL, 1655181056UL, 3139813346UL,  901632758UL,
+	   1897031941UL, 2986607138UL, 3066810236UL, 3447102507UL,
+	   1393639104UL,  373351379UL,  950779232UL,  625454576UL,
+	   3124240540UL, 4148612726UL, 2007998917UL,  544563296UL,
+	   2244738638UL, 2330496472UL, 2058025392UL, 1291430526UL,
+	   424198748UL,   50039436UL,   29584100UL, 3605783033UL,
+	   2429876329UL, 2791104160UL, 1057563949UL, 3255363231UL,
+	   3075367218UL, 3463963227UL, 1469046755UL,  985887462UL}
+} ;
+
+/* sLb(s,n) allows us to subsript s by byte offsets, which
+   allows us to avoid a subscript scaling.
+*/
+#define sub(s,n) *((IntU32 *)((IntP)s+(n)))
+
+/* Below is one BlowFish round including the F function 
+*/
+#define bf_round(l,r,n) \
+       l ^= P[n]; \
+       r ^= ( (sub(S[0],l>>22 & 0x3fc) + sub(S[1],l>>14 & 0x3fc)) \
+	      ^ sub(S[2],l>>6 & 0x3fc) ) +S[3][l & 0xff] 
+
+
+
+/* This function requires the block to be two 32 bit integers, in 
+whatever endian form the machine uses.  On little endian machines 
+use crypt_8bytes() on user data.  make_bfkey should call crypt_block
+on either endian machine.  Pass direction 0 to encrypt, 1 to decrypt.
+*/
+static void crypt_block(IntU32 block[2], BFkey_type *bfkey, int direction) 
+{
+	register IntU32 left, right, 
+		(*S)[256], 
+		*P ; 
+                  
+	left = block[0] ; right = block[1] ; 
+
+	S = bfkey->sbox ; 
+	P = bfkey->p[direction] ;
+
+	bf_round( left, right,  0 ) ;   bf_round( right, left,  1 ) ;  
+	bf_round( left, right,  2 ) ;   bf_round( right, left,  3 ) ;
+	bf_round( left, right,  4 ) ;   bf_round( right, left,  5 ) ;
+	bf_round( left, right,  6 ) ;   bf_round( right, left,  7 ) ;
+	bf_round( left, right,  8 ) ;   bf_round( right, left,  9 ) ;
+	bf_round( left, right, 10 ) ;   bf_round( right, left, 11 ) ;
+	bf_round( left, right, 12 ) ;   bf_round( right, left, 13 ) ;
+	bf_round( left, right, 14 ) ;   bf_round( right, left, 15 ) ;
+
+	left = left ^ P[NROUNDS] ;
+	right = right ^ P[NROUNDS+1] ;
+	block[0] = right ;
+	block[1] = left ;
+}
+
+/* The following should be allignment and endian independent.
+   I have not tested it on a little-endian machine.
+   It takes the input block from source, and puts the output
+   in dest.  They can be the same.  It takes the same direction
+   parameter as crypt_block().
+*/
+static void crypt_8bytes(IntU8 *source, IntU8 *dest, BFkey_type *bfkey, 
+			 int direction)
+{
+	IntU32  block[2] ;
+
+	block[0] = source[3] | source[2]<<8 | source[1]<<16 | source[0]<<24 ;
+	block[1] = source[7] | source[6]<<8 | source[5]<<16 | source[4]<<24 ;
+
+	crypt_block( block, bfkey, direction ) ;
+
+	dest[0]= block[0]>>24 ;
+	dest[1]= block[0]>>16 & 0xff ;
+	dest[2]= block[0]>>8  & 0xff ;
+	dest[3]= block[0]     & 0xff ;
+	dest[4]= block[1]>>24 ;
+	dest[5]= block[1]>>16 & 0xff ;
+	dest[6]= block[1]>> 8 & 0xff ;
+	dest[7]= block[1]     & 0xff ;
+}
+
+/* make_bfkey() takes the address of the key data as a char*,
+   and the length of the key in bytes.  It generates and returns
+   a pointer to an object of BFkey_type, which can be passed
+   to the crypt functions.  It does some simple testing of the
+   init data and crypt routine, and returns 0 on error.
+*/
+static void make_bfkey(unsigned char *key_string, int keylength, 
+		       BFkey_type *bfkey)
+{
+	int       i, j, k ;
+	IntU32      dspace[2],
+		checksum=0 ;
+
+	/* Copy constant initial data to P vector */
+	for( i=0 ; i<NROUNDS+2 ; ++i )
+	{
+		bfkey->p[0][i] = p_init[i] ;
+		bfkey->p[1][NROUNDS+1-i] = p_init[i] ;
+		checksum = (checksum<<1 | checksum>>31)+p_init[i] ;
+	}
+
+	/* Copy constant initial data to sboxes */
+	for( i=0 ; i<4 ; ++i )
+		for( j=0 ; j<256 ; ++j )
+		{
+			bfkey->sbox[i][j] = s_init[i][j] ;
+			checksum = ((checksum*13)<<11 | (checksum*13)>>21)
+				+ s_init[i][j] ;	 
+		}
+
+	/* Test init data. */
+	if( checksum != 0x55861a61 )
+	{
+		PyErr_SetString(PyExc_SystemError,
+				"Blowfish: Bad initialization data");
+		return;
+	}
+
+	dspace[0] = 0 ;
+	dspace[1] = 0 ;
+
+	/* Test the crypt_block() routine. */
+	for( i=0 ; i<10 ; ++i )
+		crypt_block( dspace, bfkey, 0 ) ;
+	checksum = dspace[0] ;
+	for( i=0 ; i<10 ; ++i )
+		crypt_block( dspace, bfkey, 1 ) ;
+	if( (checksum!=0xaafe4ebd) || dspace[0] || dspace[1] )
+	{
+		PyErr_SetString(PyExc_SystemError,
+				"Blowfish: Error in crypt_block routine");
+		return;
+	}
+
+   
+	/* Xor key string into encryption key vector */
+	j = 0 ;
+	for (i=0 ; i<NROUNDS+2 ; ++i) 
+	{
+		IntU32 data;
+		data = 0 ;
+		for (k=0 ; k<4 ; ++k ) 
+			data = (data << 8) | key_string[j++ % keylength];
+		(bfkey->p)[0][i] ^= data; 
+	}
+
+
+	for (i = 0 ; i<NROUNDS+2 ; i+=2) 
+	{
+		crypt_block( dspace, bfkey, 0 ) ;
+		bfkey->p[0][i] = dspace[0] ;
+		bfkey->p[1][NROUNDS+1-i] = dspace[0] ;
+		bfkey->p[0][i+1] = dspace[1] ;
+		bfkey->p[1][NROUNDS-i] = dspace[1] ;
+	}
+   
+	for ( i=0 ; i<4 ; ++i )
+		for ( j=0 ; j<256 ; j+=2 ) 
+		{
+			crypt_block( dspace, bfkey, 0 ) ;
+			bfkey->sbox[i][j] = dspace[0] ;
+			bfkey->sbox[i][j+1] = dspace[1] ;
+		}
+}
+
+
+static void
+block_encrypt(block_state *self, unsigned char *in, unsigned char *out)
+{
+	crypt_8bytes(in, out, &(self->bfkey), 0);
+}
+
+
+static void
+block_decrypt(block_state *self, unsigned char *in, unsigned char *out)
+{
+	crypt_8bytes(in, out, &(self->bfkey), 1);
+}
+
+static void 
+block_init(block_state *self, unsigned char *key, int keylength)
+{
+	make_bfkey(key, keylength, &(self->bfkey));
+}
+
+#include "block_template.c"

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/2c87cdcb/tools/bin/pythonSrc/pycrypto-2.0.1/src/CAST.c
----------------------------------------------------------------------
diff --git a/tools/bin/pythonSrc/pycrypto-2.0.1/src/CAST.c b/tools/bin/pythonSrc/pycrypto-2.0.1/src/CAST.c
new file mode 100644
index 0000000..395318d
--- /dev/null
+++ b/tools/bin/pythonSrc/pycrypto-2.0.1/src/CAST.c
@@ -0,0 +1,436 @@
+/*
+   cast.c -- implementation of CAST-128 (aka CAST5) as described in RFC2144
+   
+   compile -DTEST to include main() which performs the tests
+       specified in RFC2144
+
+   Written by Wim Lewis <wiml@hhhh.org> based entirely on RFC2144. This code
+   is in the public domain. Consult your local laws for possible restrictions
+   on use, distribution, and import/export. RFC2144 states that this
+   algorithm "is available worldwide on a royalty-free basis for commercial
+   and non-commercial uses".
+
+   This code is a pretty straightforward transliteration of the RFC into C.
+   It has not been optimized much at all: byte-order-independent arithmetic
+   operations are used where order-dependent pointer ops or unions might be
+   faster; the code could be rearranged to give the optimizer a better
+   chance to speed things up; etc.
+
+   This code requires a vaguely ANSI-ish compiler.
+
+   Tested with gcc 2.5.8 on i486, i586, i686, hp pa-risc, mc68040, sparc;
+   also with gcc 2.7.2 and (with minor changes) native Sun compiler on sparc
+
+   History:
+     21 Jul 1997: wiml     : first working version & Python module
+*/
+
+#include "Python.h"
+
+#define MODULE_NAME CAST
+#define BLOCK_SIZE 8
+#define KEY_SIZE 0
+
+/* adjust these according to your compiler/platform. On some machines
+   uint32 will have to be a long. It's OK if uint32 is more than 32 bits. */
+typedef unsigned int uint32;
+typedef unsigned char uint8;
+
+/* this struct probably belongs in cast.h */
+typedef struct {
+	/* masking and rotate keys */
+	uint32 Km[16];
+	uint8 Kr[16];
+	/* number of rounds (depends on original unpadded keylength) */
+	int rounds;
+} block_state;
+
+/* these are the eight 32*256 S-boxes */
+#include "cast5.c"
+
+/* fetch a uint32 from an array of uint8s (with a given offset) */
+#define fetch(ptr, base)   (((((( ptr[base]<< 8 ) | ptr[base+1] )<< 8 ) | ptr[base+2] )<< 8 ) | ptr[base+3])
+
+/* this is the round function f(D, Km, Kr) */
+static uint32 castfunc(uint32 D, uint32 Kmi, uint8 Kri, int type)
+{
+	uint32 I, f;
+	short Ia, Ib, Ic, Id;
+    
+	switch(type) {
+	case 0:
+		I = (Kmi + D) ;
+		break;
+	case 1:
+		I = (Kmi ^ D) ;
+		break;
+	default:
+	case 2:
+		I = (Kmi - D) ;
+		break;
+	}
+    
+	I &= 0xFFFFFFFF;
+	I = ( I << Kri ) | ( I >> ( 32-Kri ) );
+	Ia = ( I >> 24 ) & 0xFF;
+	Ib = ( I >> 16 ) & 0xFF;
+	Ic = ( I >>  8 ) & 0xFF;
+	Id = ( I       ) & 0xFF;
+    
+	switch(type) {
+	case 0:
+		f = ((S1[Ia] ^ S2[Ib]) - S3[Ic]) + S4[Id];
+		break;
+	case 1:
+		f = ((S1[Ia] - S2[Ib]) + S3[Ic]) ^ S4[Id];
+		break;
+	default:
+	case 2:
+		f = ((S1[Ia] + S2[Ib]) ^ S3[Ic]) - S4[Id];
+		break;
+	}
+
+	return f;
+}
+
+/* encrypts/decrypts one block of data according to the key schedule
+   pointed to by `key'. Encrypts if decrypt=0, otherwise decrypts. */
+static void castcrypt(block_state *key, uint8 *block, int decrypt)
+{
+	uint32 L, R, tmp, f;
+	uint32 Kmi;
+	uint8  Kri;
+	short functype, round;
+    
+	L = fetch(block, 0);
+	R = fetch(block, 4);
+    
+/*  printf("L0 = %08x R0 = %08x\n", L, R); */
+
+	for(round = 0; round < key->rounds; round ++) {
+	
+		if (!decrypt) {
+			Kmi = key->Km[round];
+			Kri = key->Kr[round];
+			functype = round % 3;
+		} else {
+			Kmi = key->Km[(key->rounds) - round - 1];
+			Kri = key->Kr[(key->rounds) - round - 1];
+			functype = (((key->rounds) - round - 1) % 3);
+		}
+	
+		f = castfunc(R, Kmi, Kri, functype);
+	
+		tmp = L;
+		L = R;
+		R = tmp ^ f;
+
+/*	printf("L%d = %08x R%d = %08x\n", round+1, L, round+1, R); */
+	}
+    
+	block[0] = ( R & 0xFF000000 ) >> 24;
+	block[1] = ( R & 0x00FF0000 ) >> 16;
+	block[2] = ( R & 0x0000FF00 ) >> 8;
+	block[3] = ( R & 0x000000FF );
+	block[4] = ( L & 0xFF000000 ) >> 24;
+	block[5] = ( L & 0x00FF0000 ) >> 16;
+	block[6] = ( L & 0x0000FF00 ) >> 8;
+	block[7] = ( L & 0x000000FF );
+}
+
+/* fetch a uint8 from an array of uint32s */
+#define b(a,n) (((a)[n/4] >> (24-((n&3)*8))) & 0xFF)
+
+/* key schedule round functions */
+
+#define XZRound(T, F, ki1, ki2, ki3, ki4, \
+		si11, si12, si13, si14, si15,\
+		                        si25,\
+	                                si35,\
+	                                si45 ) \
+    T[0] = F[ki1] ^ S5[si11   ] ^ S6[si12  ] ^ S7[si13   ] ^ S8[si14  ] ^ S7[si15];\
+    T[1] = F[ki2] ^ S5[b(T, 0)] ^ S6[b(T,2)] ^ S7[b(T, 1)] ^ S8[b(T,3)] ^ S8[si25];\
+    T[2] = F[ki3] ^ S5[b(T, 7)] ^ S6[b(T,6)] ^ S7[b(T, 5)] ^ S8[b(T,4)] ^ S5[si35];\
+    T[3] = F[ki4] ^ S5[b(T,10)] ^ S6[b(T,9)] ^ S7[b(T,11)] ^ S8[b(T,8)] ^ S6[si45];
+
+#define zxround() XZRound(z, x, 0, 2, 3, 1, \
+			b(x,13), b(x,15), b(x,12), b(x,14),\
+			b(x, 8), b(x,10), b(x, 9), b(x,11))
+
+#define xzround() XZRound(x, z, 2, 0, 1, 3, \
+			b(z,5), b(z,7), b(z,4), b(z,6), \
+			b(z,0), b(z,2), b(z,1), b(z,3))
+
+#define Kround(T, base, F,\
+	       i11, i12, i13, i14, i15,\
+	       i21, i22, i23, i24, i25,\
+	       i31, i32, i33, i34, i35,\
+	       i41, i42, i43, i44, i45)\
+    T[base+0] = S5[b(F,i11)] ^ S6[b(F,i12)] ^ S7[b(F,i13)] ^ S8[b(F,i14)] ^ S5[b(F,i15)];\
+    T[base+1] = S5[b(F,i21)] ^ S6[b(F,i22)] ^ S7[b(F,i23)] ^ S8[b(F,i24)] ^ S6[b(F,i25)];\
+    T[base+2] = S5[b(F,i31)] ^ S6[b(F,i32)] ^ S7[b(F,i33)] ^ S8[b(F,i34)] ^ S7[b(F,i35)];\
+    T[base+3] = S5[b(F,i41)] ^ S6[b(F,i42)] ^ S7[b(F,i43)] ^ S8[b(F,i44)] ^ S8[b(F,i45)];
+
+/* generates sixteen 32-bit subkeys based on a 4x32-bit input key;
+   modifies the input key *in as well. */
+static void schedulekeys_half(uint32 *in, uint32 *keys)
+{
+	uint32 x[4], z[4];
+    
+	x[0] = in[0];
+	x[1] = in[1];
+	x[2] = in[2];
+	x[3] = in[3];
+    
+	zxround();
+	Kround(keys, 0, z,
+	       8,  9, 7, 6,  2,
+	       10, 11, 5, 4,  6,
+	       12, 13, 3, 2,  9,
+	       14, 15, 1, 0, 12);
+	xzround();
+	Kround(keys, 4, x,
+	       3,  2, 12, 13,  8,
+	       1,  0, 14, 15, 13,
+	       7,  6,  8,  9,  3,
+	       5,  4, 10, 11,  7);
+	zxround();
+	Kround(keys, 8, z,
+	       3,  2, 12, 13,  9,
+	       1,  0, 14, 15, 12,
+	       7,  6,  8,  9,  2,
+	       5,  4, 10, 11,  6);
+	xzround();
+	Kround(keys, 12, x,
+	       8,  9, 7, 6,  3,
+	       10, 11, 5, 4,  7,
+	       12, 13, 3, 2,  8,
+	       14, 15, 1, 0, 13);
+	   
+	in[0] = x[0];
+	in[1] = x[1];
+	in[2] = x[2];
+	in[3] = x[3];
+}
+
+/* generates a key schedule from an input key */
+static void castschedulekeys(block_state *schedule, uint8 *key, int keybytes)
+{
+	uint32 x[4];
+	uint8  paddedkey[16];
+	uint32 Kr_wide[16];
+	int i;
+    
+	for(i = 0; i < keybytes; i++)
+		paddedkey[i] = key[i];
+	for(     ; i < 16      ; i++)
+		paddedkey[i] = 0;
+    
+	if (keybytes <= 10)
+		schedule->rounds = 12;
+	else
+		schedule->rounds = 16;
+    
+	x[0] = fetch(paddedkey, 0);
+	x[1] = fetch(paddedkey, 4);
+	x[2] = fetch(paddedkey, 8);
+	x[3] = fetch(paddedkey, 12);
+    
+	schedulekeys_half(x, schedule->Km);
+	schedulekeys_half(x, Kr_wide);
+    
+	for(i = 0; i < 16; i ++) {
+		/* The Kr[] subkeys are used for 32-bit circular shifts,
+		   so we only need to keep them modulo 32 */
+		schedule->Kr[i] = (uint8)(Kr_wide[i] & 0x1F);
+	}
+}
+
+#ifdef TEST
+
+/* This performs a variety of encryptions and verifies that the results
+   match those specified in RFC2144 appendix B. Also verifies that
+   decryption restores the original data. */
+
+#include <stdio.h>
+
+static block_state sched;
+
+void encrypt(key, keylen, in, out)
+	uint8 *key;
+	int keylen;
+	uint8 *in, *out;
+{
+	int i;
+	uint8 k[16];
+    
+	castschedulekeys(&sched, key, keylen);
+    
+	for(i = 0; i < 8; i++)
+		out[i] = in[i];
+	castcrypt(&sched, out, 0);
+}
+
+void tst(key, keylen, data, result)
+	uint8 *key;
+	int keylen;
+	uint8 *data, *result;
+{
+	uint8 d[8];
+	int i;
+    
+	encrypt(key, keylen, data, d);
+    
+	for(i = 0; i < 8; i++)
+		if (d[i] != result[i])
+			break;
+    
+	if (i == 8) {
+		printf("-- test ok (encrypt)\n");
+	} else {
+		for(i = 0; i < 8; i++)
+			printf(" %02x", d[i]);
+		printf("   (computed)\n");
+		for(i = 0; i < 8; i++)
+			printf(" %02x", result[i]);
+		printf("   (expected)\n");
+	}
+    
+	/* uses key schedule already set up */
+	castcrypt(&sched, d, 1);
+	if (bcmp(d, data, 8))
+		printf("   test FAILED (decrypt)\n");
+	else
+		printf("   test ok (decrypt)\n");
+    
+}
+
+uint8 key[16] = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
+		  0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A };
+uint8 data[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };
+
+/* expected results of encrypting the above with 128, 80, and 40
+   bits of key length */
+uint8 out1[8] =  { 0x23, 0x8B, 0x4F, 0xE5, 0x84, 0x7E, 0x44, 0xB2 };
+uint8 out2[8] =  { 0xEB, 0x6A, 0x71, 0x1A, 0x2C, 0x02, 0x27, 0x1B };
+uint8 out3[8] =  { 0x7A, 0xC8, 0x16, 0xD1, 0x6E, 0x9B, 0x30, 0x2E };
+
+/* expected results of the "full maintenance test" */
+uint8 afinal[16] = { 0xEE, 0xA9, 0xD0, 0xA2, 0x49, 0xFD, 0x3B, 0xA6,
+		     0xB3, 0x43, 0x6F, 0xB8, 0x9D, 0x6D, 0xCA, 0x92 };
+uint8 bfinal[16] = { 0xB2, 0xC9, 0x5E, 0xB0, 0x0C, 0x31, 0xAD, 0x71,
+		     0x80, 0xAC, 0x05, 0xB8, 0xE8, 0x3D, 0x69, 0x6E };
+
+main()
+{
+	/* Appendix B.1 : Single Plaintext-Key-Ciphertext Sets */
+	tst(key, 16, data, out1);
+	tst(key, 10, data, out2);
+	tst(key,  5, data, out3);
+
+    /* Appendix B.2 : Full Maintenance Test */
+	{
+		uint8 abuf[16];
+		uint8 bbuf[16];
+		int i;
+
+		bcopy(key, abuf, 16);
+		bcopy(key, bbuf, 16);
+
+		printf("\nrunning full maintenance test...\n");
+
+		for(i = 0; i < 1000000; i++) {
+			castschedulekeys(&sched, bbuf, 16);
+			castcrypt(&sched, abuf, 0);
+			castcrypt(&sched, abuf+8, 0);
+
+			castschedulekeys(&sched, abuf, 16);
+			castcrypt(&sched, bbuf, 0);
+			castcrypt(&sched, bbuf+8, 0);
+
+			if (!(i % 10000)) {
+				fprintf(stdout, "\r%d%%   ", i / 10000);
+				fflush(stdout);
+			}
+		}
+
+		printf("\r        \r");
+
+		for(i = 0; i < 16; i ++)
+			if (abuf[i] != afinal[i] || bbuf[i] != bfinal[i])
+				break;
+
+		if(i == 16) {
+			printf("-- full maintenance test ok\n");
+		} else {
+			for(i = 0; i < 16; i++)
+				printf(" %02x", abuf[i]);
+			printf("\n");
+			for(i = 0; i < 16; i++)
+				printf(" %02x", bbuf[i]);
+			printf("\n");
+		}
+
+		printf("running maintenance test in reverse...\n");
+		for(i = 0; i < 1000000; i++) {
+			castschedulekeys(&sched, abuf, 16);
+			castcrypt(&sched, bbuf+8, 1);
+			castcrypt(&sched, bbuf, 1);
+
+			castschedulekeys(&sched, bbuf, 16);
+			castcrypt(&sched, abuf+8, 1);
+			castcrypt(&sched, abuf, 1);
+
+			if (!(i % 10000)) {
+				fprintf(stdout, "\r%d%%   ", i / 10000);
+				fflush(stdout);
+			}
+		}
+
+		printf("\r       \r");
+		if (bcmp(abuf, key, 16) || bcmp(bbuf, key, 16)) 
+			printf("-- reverse maintenance test FAILED\n");
+		else
+			printf("-- reverse maintenance test ok\n");
+	}
+}
+
+#endif
+
+static void
+block_init(block_state *self, unsigned char *key, int keylength)
+{
+	/* presumably this will optimize out */
+	if (sizeof(uint32) < 4 || sizeof(uint8) != 1) {
+		PyErr_SetString(PyExc_SystemError,
+				"CAST module compiled with bad typedefs!");
+	}
+
+	/* make sure the key length is within bounds */
+	if (keylength < 5 || keylength > 16) {
+		PyErr_SetString(PyExc_ValueError, "CAST key must be "
+				"at least 5 bytes and no more than 16 bytes long");
+		return;
+	}
+
+	/* do the actual key schedule setup */
+	castschedulekeys(self, key, keylength);
+}
+
+static void
+block_encrypt(block_state *self, unsigned char *in,
+	      unsigned char *out)
+{
+	memcpy(out, in, 8);
+	castcrypt(self, out, 0);
+}
+
+static void block_decrypt(block_state *self, 
+			  unsigned char *in,
+			  unsigned char *out)
+{
+	memcpy(out, in, 8);
+	castcrypt(self, out, 1);
+}
+
+#include "block_template.c"

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/2c87cdcb/tools/bin/pythonSrc/pycrypto-2.0.1/src/DES.c
----------------------------------------------------------------------
diff --git a/tools/bin/pythonSrc/pycrypto-2.0.1/src/DES.c b/tools/bin/pythonSrc/pycrypto-2.0.1/src/DES.c
new file mode 100644
index 0000000..e35699f
--- /dev/null
+++ b/tools/bin/pythonSrc/pycrypto-2.0.1/src/DES.c
@@ -0,0 +1,665 @@
+/*
+ *  des.c : Source code for the DES block cipher
+ *
+ * Part of the Python Cryptography Toolkit
+ *
+ * Distribute and use freely; there are no restrictions on further 
+ * dissemination and usage except those imposed by the laws of your 
+ * country of residence.
+ *
+ */
+
+#include "Python.h"
+  
+/* des.c */
+/* Copyright (C) 1993 Eric Young */
+/* Integrated into the PCT by A.M. Kuchling, November 1994 */
+
+#define MODULE_NAME DES
+#define BLOCK_SIZE 8
+#define KEY_SIZE 8
+
+
+typedef unsigned char des_cblock[8];
+
+/* ecb_enc.c */
+/* Copyright (C) 1993 Eric Young - see README for more details */
+
+#define c2l(c,l)	(l =((unsigned long)(*((c)++)))    , \
+			 l|=((unsigned long)(*((c)++)))<< 8, \
+			 l|=((unsigned long)(*((c)++)))<<16, \
+			 l|=((unsigned long)(*((c)++)))<<24)
+
+/* NOTE - c is not incremented as per c2l */
+#define c2ln(c,l1,l2,n)	{ \
+			c+=n; \
+			l1=l2=0; \
+			switch (n) { \
+			case 8: l2|=((unsigned long)(*(--(c))))<<24; \
+			case 7: l2|=((unsigned long)(*(--(c))))<<16; \
+			case 6: l2|=((unsigned long)(*(--(c))))<< 8; \
+			case 5: l2|=((unsigned long)(*(--(c))));     \
+			case 4: l1|=((unsigned long)(*(--(c))))<<24; \
+			case 3: l1|=((unsigned long)(*(--(c))))<<16; \
+			case 2: l1|=((unsigned long)(*(--(c))))<< 8; \
+			case 1: l1|=((unsigned long)(*(--(c))));     \
+				} \
+			}
+
+#define l2c(l,c)	(*((c)++)=(unsigned char)(((l)    )&0xff), \
+			 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
+			 *((c)++)=(unsigned char)(((l)>>16)&0xff), \
+			 *((c)++)=(unsigned char)(((l)>>24)&0xff))
+
+/* replacements for htonl and ntohl since I have no idea what to do
+ * when faced with machines with 8 byte longs. */
+#define HDRSIZE 4
+
+#define n2l(c,l)	(l =((unsigned long)(*((c)++)))<<24, \
+			 l|=((unsigned long)(*((c)++)))<<16, \
+			 l|=((unsigned long)(*((c)++)))<< 8, \
+			 l|=((unsigned long)(*((c)++))))
+
+#define l2n(l,c)	(*((c)++)=(unsigned char)(((l)>>24)&0xff), \
+			 *((c)++)=(unsigned char)(((l)>>16)&0xff), \
+			 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
+			 *((c)++)=(unsigned char)(((l)    )&0xff))
+
+/* NOTE - c is not incremented as per l2c */
+#define l2cn(l1,l2,c,n)	{ \
+			c+=n; \
+			switch (n) { \
+			case 8: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
+			case 7: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
+			case 6: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
+			case 5: *(--(c))=(unsigned char)(((l2)    )&0xff); \
+			case 4: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
+			case 3: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
+			case 2: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
+			case 1: *(--(c))=(unsigned char)(((l1)    )&0xff); \
+				} \
+			}
+
+#define D_ENCRYPT(L,R,S)	\
+	u=(R^s[S  ]); \
+	t=R^s[S+1]; \
+	t=((t>>4)+(t<<28)); \
+	L^=	des_SPtrans[1][(t    )&0x3f]| \
+		des_SPtrans[3][(t>> 8)&0x3f]| \
+		des_SPtrans[5][(t>>16)&0x3f]| \
+		des_SPtrans[7][(t>>24)&0x3f]| \
+		des_SPtrans[0][(u    )&0x3f]| \
+		des_SPtrans[2][(u>> 8)&0x3f]| \
+		des_SPtrans[4][(u>>16)&0x3f]| \
+		des_SPtrans[6][(u>>24)&0x3f];
+
+	/* IP and FP
+	 * The problem is more of a geometric problem that random bit fiddling.
+	 0  1  2  3  4  5  6  7      62 54 46 38 30 22 14  6
+	 8  9 10 11 12 13 14 15      60 52 44 36 28 20 12  4
+	16 17 18 19 20 21 22 23      58 50 42 34 26 18 10  2
+	24 25 26 27 28 29 30 31  to  56 48 40 32 24 16  8  0
+
+	32 33 34 35 36 37 38 39      63 55 47 39 31 23 15  7
+	40 41 42 43 44 45 46 47      61 53 45 37 29 21 13  5
+	48 49 50 51 52 53 54 55      59 51 43 35 27 19 11  3
+	56 57 58 59 60 61 62 63      57 49 41 33 25 17  9  1
+
+	The output has been subject to swaps of the form
+	0 1 -> 3 1 but the odd and even bits have been put into
+	2 3    2 0
+	different words.  The main trick is to remember that
+	t=((l>>size)^r)&(mask);
+	r^=t;
+	l^=(t<<size);
+	can be used to swap and move bits between words.
+
+	So l =  0  1  2  3  r = 16 17 18 19
+	        4  5  6  7      20 21 22 23
+	        8  9 10 11      24 25 26 27
+	       12 13 14 15      28 29 30 31
+	becomes (for size == 2 and mask == 0x3333)
+	   t =   2^16  3^17 -- --   l =  0  1 16 17  r =  2  3 18 19
+		 6^20  7^21 -- --        4  5 20 21       6  7 22 23
+		10^24 11^25 -- --        8  9 24 25      10 11 24 25
+		14^28 15^29 -- --       12 13 28 29      14 15 28 29
+
+	Thanks for hints from Richard Outerbridge - he told me IP&FP
+	could be done in 15 xor, 10 shifts and 5 ands.
+	When I finally started to think of the problem in 2D
+	I first got ~42 operations without xors.  When I remembered
+	how to use xors :-) I got it to its final state.
+	*/
+#define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
+	(b)^=(t),\
+	(a)^=((t)<<(n)))
+
+
+
+/* spr.h */
+/* Copyright (C) 1993 Eric Young - see README for more details */
+static unsigned long des_SPtrans[8][64]={
+/* nibble 0 */
+	{0x00820200, 0x00020000, 0x80800000, 0x80820200,
+	 0x00800000, 0x80020200, 0x80020000, 0x80800000,
+	 0x80020200, 0x00820200, 0x00820000, 0x80000200,
+	 0x80800200, 0x00800000, 0x00000000, 0x80020000,
+	 0x00020000, 0x80000000, 0x00800200, 0x00020200,
+	 0x80820200, 0x00820000, 0x80000200, 0x00800200,
+	 0x80000000, 0x00000200, 0x00020200, 0x80820000,
+	 0x00000200, 0x80800200, 0x80820000, 0x00000000,
+	 0x00000000, 0x80820200, 0x00800200, 0x80020000,
+	 0x00820200, 0x00020000, 0x80000200, 0x00800200,
+	 0x80820000, 0x00000200, 0x00020200, 0x80800000,
+	 0x80020200, 0x80000000, 0x80800000, 0x00820000,
+	 0x80820200, 0x00020200, 0x00820000, 0x80800200,
+	 0x00800000, 0x80000200, 0x80020000, 0x00000000,
+	 0x00020000, 0x00800000, 0x80800200, 0x00820200,
+	 0x80000000, 0x80820000, 0x00000200, 0x80020200},
+
+/* nibble 1 */
+	{0x10042004, 0x00000000, 0x00042000, 0x10040000,
+	 0x10000004, 0x00002004, 0x10002000, 0x00042000,
+	 0x00002000, 0x10040004, 0x00000004, 0x10002000,
+	 0x00040004, 0x10042000, 0x10040000, 0x00000004,
+	 0x00040000, 0x10002004, 0x10040004, 0x00002000,
+	 0x00042004, 0x10000000, 0x00000000, 0x00040004,
+	 0x10002004, 0x00042004, 0x10042000, 0x10000004,
+	 0x10000000, 0x00040000, 0x00002004, 0x10042004,
+	 0x00040004, 0x10042000, 0x10002000, 0x00042004,
+	 0x10042004, 0x00040004, 0x10000004, 0x00000000,
+	 0x10000000, 0x00002004, 0x00040000, 0x10040004,
+	 0x00002000, 0x10000000, 0x00042004, 0x10002004,
+	 0x10042000, 0x00002000, 0x00000000, 0x10000004,
+	 0x00000004, 0x10042004, 0x00042000, 0x10040000,
+	 0x10040004, 0x00040000, 0x00002004, 0x10002000,
+	 0x10002004, 0x00000004, 0x10040000, 0x00042000},
+
+/* nibble 2 */
+	{0x41000000, 0x01010040, 0x00000040, 0x41000040,
+	 0x40010000, 0x01000000, 0x41000040, 0x00010040,
+	 0x01000040, 0x00010000, 0x01010000, 0x40000000,
+	 0x41010040, 0x40000040, 0x40000000, 0x41010000,
+	 0x00000000, 0x40010000, 0x01010040, 0x00000040,
+	 0x40000040, 0x41010040, 0x00010000, 0x41000000,
+	 0x41010000, 0x01000040, 0x40010040, 0x01010000,
+	 0x00010040, 0x00000000, 0x01000000, 0x40010040,
+	 0x01010040, 0x00000040, 0x40000000, 0x00010000,
+	 0x40000040, 0x40010000, 0x01010000, 0x41000040,
+	 0x00000000, 0x01010040, 0x00010040, 0x41010000,
+	 0x40010000, 0x01000000, 0x41010040, 0x40000000,
+	 0x40010040, 0x41000000, 0x01000000, 0x41010040,
+	 0x00010000, 0x01000040, 0x41000040, 0x00010040,
+	 0x01000040, 0x00000000, 0x41010000, 0x40000040,
+	 0x41000000, 0x40010040, 0x00000040, 0x01010000},
+
+/* nibble 3 */
+	{0x00100402, 0x04000400, 0x00000002, 0x04100402,
+	 0x00000000, 0x04100000, 0x04000402, 0x00100002,
+	 0x04100400, 0x04000002, 0x04000000, 0x00000402,
+	 0x04000002, 0x00100402, 0x00100000, 0x04000000,
+	 0x04100002, 0x00100400, 0x00000400, 0x00000002,
+	 0x00100400, 0x04000402, 0x04100000, 0x00000400,
+	 0x00000402, 0x00000000, 0x00100002, 0x04100400,
+	 0x04000400, 0x04100002, 0x04100402, 0x00100000,
+	 0x04100002, 0x00000402, 0x00100000, 0x04000002,
+	 0x00100400, 0x04000400, 0x00000002, 0x04100000,
+	 0x04000402, 0x00000000, 0x00000400, 0x00100002,
+	 0x00000000, 0x04100002, 0x04100400, 0x00000400,
+	 0x04000000, 0x04100402, 0x00100402, 0x00100000,
+	 0x04100402, 0x00000002, 0x04000400, 0x00100402,
+	 0x00100002, 0x00100400, 0x04100000, 0x04000402,
+	 0x00000402, 0x04000000, 0x04000002, 0x04100400},
+
+/* nibble 4 */
+	{0x02000000, 0x00004000, 0x00000100, 0x02004108,
+	 0x02004008, 0x02000100, 0x00004108, 0x02004000,
+	 0x00004000, 0x00000008, 0x02000008, 0x00004100,
+	 0x02000108, 0x02004008, 0x02004100, 0x00000000,
+	 0x00004100, 0x02000000, 0x00004008, 0x00000108,
+	 0x02000100, 0x00004108, 0x00000000, 0x02000008,
+	 0x00000008, 0x02000108, 0x02004108, 0x00004008,
+	 0x02004000, 0x00000100, 0x00000108, 0x02004100,
+	 0x02004100, 0x02000108, 0x00004008, 0x02004000,
+	 0x00004000, 0x00000008, 0x02000008, 0x02000100,
+	 0x02000000, 0x00004100, 0x02004108, 0x00000000,
+	 0x00004108, 0x02000000, 0x00000100, 0x00004008,
+	 0x02000108, 0x00000100, 0x00000000, 0x02004108,
+	 0x02004008, 0x02004100, 0x00000108, 0x00004000,
+	 0x00004100, 0x02004008, 0x02000100, 0x00000108,
+	 0x00000008, 0x00004108, 0x02004000, 0x02000008},
+
+/* nibble 5 */
+	{0x20000010, 0x00080010, 0x00000000, 0x20080800,
+	 0x00080010, 0x00000800, 0x20000810, 0x00080000,
+	 0x00000810, 0x20080810, 0x00080800, 0x20000000,
+	 0x20000800, 0x20000010, 0x20080000, 0x00080810,
+	 0x00080000, 0x20000810, 0x20080010, 0x00000000,
+	 0x00000800, 0x00000010, 0x20080800, 0x20080010,
+	 0x20080810, 0x20080000, 0x20000000, 0x00000810,
+	 0x00000010, 0x00080800, 0x00080810, 0x20000800,
+	 0x00000810, 0x20000000, 0x20000800, 0x00080810,
+	 0x20080800, 0x00080010, 0x00000000, 0x20000800,
+	 0x20000000, 0x00000800, 0x20080010, 0x00080000,
+	 0x00080010, 0x20080810, 0x00080800, 0x00000010,
+	 0x20080810, 0x00080800, 0x00080000, 0x20000810,
+	 0x20000010, 0x20080000, 0x00080810, 0x00000000,
+	 0x00000800, 0x20000010, 0x20000810, 0x20080800,
+	 0x20080000, 0x00000810, 0x00000010, 0x20080010},
+
+/* nibble 6 */
+	{0x00001000, 0x00000080, 0x00400080, 0x00400001,
+	 0x00401081, 0x00001001, 0x00001080, 0x00000000,
+	 0x00400000, 0x00400081, 0x00000081, 0x00401000,
+	 0x00000001, 0x00401080, 0x00401000, 0x00000081,
+	 0x00400081, 0x00001000, 0x00001001, 0x00401081,
+	 0x00000000, 0x00400080, 0x00400001, 0x00001080,
+	 0x00401001, 0x00001081, 0x00401080, 0x00000001,
+	 0x00001081, 0x00401001, 0x00000080, 0x00400000,
+	 0x00001081, 0x00401000, 0x00401001, 0x00000081,
+	 0x00001000, 0x00000080, 0x00400000, 0x00401001,
+	 0x00400081, 0x00001081, 0x00001080, 0x00000000,
+	 0x00000080, 0x00400001, 0x00000001, 0x00400080,
+	 0x00000000, 0x00400081, 0x00400080, 0x00001080,
+	 0x00000081, 0x00001000, 0x00401081, 0x00400000,
+	 0x00401080, 0x00000001, 0x00001001, 0x00401081,
+	 0x00400001, 0x00401080, 0x00401000, 0x00001001},
+
+/* nibble 7 */
+	{0x08200020, 0x08208000, 0x00008020, 0x00000000,
+	 0x08008000, 0x00200020, 0x08200000, 0x08208020,
+	 0x00000020, 0x08000000, 0x00208000, 0x00008020,
+	 0x00208020, 0x08008020, 0x08000020, 0x08200000,
+	 0x00008000, 0x00208020, 0x00200020, 0x08008000,
+	 0x08208020, 0x08000020, 0x00000000, 0x00208000,
+	 0x08000000, 0x00200000, 0x08008020, 0x08200020,
+	 0x00200000, 0x00008000, 0x08208000, 0x00000020,
+	 0x00200000, 0x00008000, 0x08000020, 0x08208020,
+	 0x00008020, 0x08000000, 0x00000000, 0x00208000,
+	 0x08200020, 0x08008020, 0x08008000, 0x00200020,
+	 0x08208000, 0x00000020, 0x00200020, 0x08008000,
+	 0x08208020, 0x00200000, 0x08200000, 0x08000020,
+	 0x00208000, 0x00008020, 0x08008020, 0x08200000,
+	 0x00000020, 0x08208000, 0x00208020, 0x00000000,
+	 0x08000000, 0x08200020, 0x00008000, 0x00208020}};
+
+static unsigned long des_skb[8][64]={
+/* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
+	{0x00000000,0x00000010,0x20000000,0x20000010,
+	 0x00010000,0x00010010,0x20010000,0x20010010,
+	 0x00000800,0x00000810,0x20000800,0x20000810,
+	 0x00010800,0x00010810,0x20010800,0x20010810,
+	 0x00000020,0x00000030,0x20000020,0x20000030,
+	 0x00010020,0x00010030,0x20010020,0x20010030,
+	 0x00000820,0x00000830,0x20000820,0x20000830,
+	 0x00010820,0x00010830,0x20010820,0x20010830,
+	 0x00080000,0x00080010,0x20080000,0x20080010,
+	 0x00090000,0x00090010,0x20090000,0x20090010,
+	 0x00080800,0x00080810,0x20080800,0x20080810,
+	 0x00090800,0x00090810,0x20090800,0x20090810,
+	 0x00080020,0x00080030,0x20080020,0x20080030,
+	 0x00090020,0x00090030,0x20090020,0x20090030,
+	 0x00080820,0x00080830,0x20080820,0x20080830,
+	 0x00090820,0x00090830,0x20090820,0x20090830},
+/* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
+	{0x00000000,0x02000000,0x00002000,0x02002000,
+	 0x00200000,0x02200000,0x00202000,0x02202000,
+	 0x00000004,0x02000004,0x00002004,0x02002004,
+	 0x00200004,0x02200004,0x00202004,0x02202004,
+	 0x00000400,0x02000400,0x00002400,0x02002400,
+	 0x00200400,0x02200400,0x00202400,0x02202400,
+	 0x00000404,0x02000404,0x00002404,0x02002404,
+	 0x00200404,0x02200404,0x00202404,0x02202404,
+	 0x10000000,0x12000000,0x10002000,0x12002000,
+	 0x10200000,0x12200000,0x10202000,0x12202000,
+	 0x10000004,0x12000004,0x10002004,0x12002004,
+	 0x10200004,0x12200004,0x10202004,0x12202004,
+	 0x10000400,0x12000400,0x10002400,0x12002400,
+	 0x10200400,0x12200400,0x10202400,0x12202400,
+	 0x10000404,0x12000404,0x10002404,0x12002404,
+	 0x10200404,0x12200404,0x10202404,0x12202404},
+/* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
+	{0x00000000,0x00000001,0x00040000,0x00040001,
+	 0x01000000,0x01000001,0x01040000,0x01040001,
+	 0x00000002,0x00000003,0x00040002,0x00040003,
+	 0x01000002,0x01000003,0x01040002,0x01040003,
+	 0x00000200,0x00000201,0x00040200,0x00040201,
+	 0x01000200,0x01000201,0x01040200,0x01040201,
+	 0x00000202,0x00000203,0x00040202,0x00040203,
+	 0x01000202,0x01000203,0x01040202,0x01040203,
+	 0x08000000,0x08000001,0x08040000,0x08040001,
+	 0x09000000,0x09000001,0x09040000,0x09040001,
+	 0x08000002,0x08000003,0x08040002,0x08040003,
+	 0x09000002,0x09000003,0x09040002,0x09040003,
+	 0x08000200,0x08000201,0x08040200,0x08040201,
+	 0x09000200,0x09000201,0x09040200,0x09040201,
+	 0x08000202,0x08000203,0x08040202,0x08040203,
+	 0x09000202,0x09000203,0x09040202,0x09040203},
+/* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
+	{0x00000000,0x00100000,0x00000100,0x00100100,
+	 0x00000008,0x00100008,0x00000108,0x00100108,
+	 0x00001000,0x00101000,0x00001100,0x00101100,
+	 0x00001008,0x00101008,0x00001108,0x00101108,
+	 0x04000000,0x04100000,0x04000100,0x04100100,
+	 0x04000008,0x04100008,0x04000108,0x04100108,
+	 0x04001000,0x04101000,0x04001100,0x04101100,
+	 0x04001008,0x04101008,0x04001108,0x04101108,
+	 0x00020000,0x00120000,0x00020100,0x00120100,
+	 0x00020008,0x00120008,0x00020108,0x00120108,
+	 0x00021000,0x00121000,0x00021100,0x00121100,
+	 0x00021008,0x00121008,0x00021108,0x00121108,
+	 0x04020000,0x04120000,0x04020100,0x04120100,
+	 0x04020008,0x04120008,0x04020108,0x04120108,
+	 0x04021000,0x04121000,0x04021100,0x04121100,
+	 0x04021008,0x04121008,0x04021108,0x04121108},
+/* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
+	{0x00000000,0x10000000,0x00010000,0x10010000,
+	 0x00000004,0x10000004,0x00010004,0x10010004,
+	 0x20000000,0x30000000,0x20010000,0x30010000,
+	 0x20000004,0x30000004,0x20010004,0x30010004,
+	 0x00100000,0x10100000,0x00110000,0x10110000,
+	 0x00100004,0x10100004,0x00110004,0x10110004,
+	 0x20100000,0x30100000,0x20110000,0x30110000,
+	 0x20100004,0x30100004,0x20110004,0x30110004,
+	 0x00001000,0x10001000,0x00011000,0x10011000,
+	 0x00001004,0x10001004,0x00011004,0x10011004,
+	 0x20001000,0x30001000,0x20011000,0x30011000,
+	 0x20001004,0x30001004,0x20011004,0x30011004,
+	 0x00101000,0x10101000,0x00111000,0x10111000,
+	 0x00101004,0x10101004,0x00111004,0x10111004,
+	 0x20101000,0x30101000,0x20111000,0x30111000,
+	 0x20101004,0x30101004,0x20111004,0x30111004},
+/* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
+	{0x00000000,0x08000000,0x00000008,0x08000008,
+	 0x00000400,0x08000400,0x00000408,0x08000408,
+	 0x00020000,0x08020000,0x00020008,0x08020008,
+	 0x00020400,0x08020400,0x00020408,0x08020408,
+	 0x00000001,0x08000001,0x00000009,0x08000009,
+	 0x00000401,0x08000401,0x00000409,0x08000409,
+	 0x00020001,0x08020001,0x00020009,0x08020009,
+	 0x00020401,0x08020401,0x00020409,0x08020409,
+	 0x02000000,0x0A000000,0x02000008,0x0A000008,
+	 0x02000400,0x0A000400,0x02000408,0x0A000408,
+	 0x02020000,0x0A020000,0x02020008,0x0A020008,
+	 0x02020400,0x0A020400,0x02020408,0x0A020408,
+	 0x02000001,0x0A000001,0x02000009,0x0A000009,
+	 0x02000401,0x0A000401,0x02000409,0x0A000409,
+	 0x02020001,0x0A020001,0x02020009,0x0A020009,
+	 0x02020401,0x0A020401,0x02020409,0x0A020409},
+/* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
+	{0x00000000,0x00000100,0x00080000,0x00080100,
+	 0x01000000,0x01000100,0x01080000,0x01080100,
+	 0x00000010,0x00000110,0x00080010,0x00080110,
+	 0x01000010,0x01000110,0x01080010,0x01080110,
+	 0x00200000,0x00200100,0x00280000,0x00280100,
+	 0x01200000,0x01200100,0x01280000,0x01280100,
+	 0x00200010,0x00200110,0x00280010,0x00280110,
+	 0x01200010,0x01200110,0x01280010,0x01280110,
+	 0x00000200,0x00000300,0x00080200,0x00080300,
+	 0x01000200,0x01000300,0x01080200,0x01080300,
+	 0x00000210,0x00000310,0x00080210,0x00080310,
+	 0x01000210,0x01000310,0x01080210,0x01080310,
+	 0x00200200,0x00200300,0x00280200,0x00280300,
+	 0x01200200,0x01200300,0x01280200,0x01280300,
+	 0x00200210,0x00200310,0x00280210,0x00280310,
+	 0x01200210,0x01200310,0x01280210,0x01280310},
+/* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
+	{0x00000000,0x04000000,0x00040000,0x04040000,
+	 0x00000002,0x04000002,0x00040002,0x04040002,
+	 0x00002000,0x04002000,0x00042000,0x04042000,
+	 0x00002002,0x04002002,0x00042002,0x04042002,
+	 0x00000020,0x04000020,0x00040020,0x04040020,
+	 0x00000022,0x04000022,0x00040022,0x04040022,
+	 0x00002020,0x04002020,0x00042020,0x04042020,
+	 0x00002022,0x04002022,0x00042022,0x04042022,
+	 0x00000800,0x04000800,0x00040800,0x04040800,
+	 0x00000802,0x04000802,0x00040802,0x04040802,
+	 0x00002800,0x04002800,0x00042800,0x04042800,
+	 0x00002802,0x04002802,0x00042802,0x04042802,
+	 0x00000820,0x04000820,0x00040820,0x04040820,
+	 0x00000822,0x04000822,0x00040822,0x04040822,
+	 0x00002820,0x04002820,0x00042820,0x04042820,
+	 0x00002822,0x04002822,0x00042822,0x04042822}
+};
+
+typedef struct des_ks_struct
+{
+	union	{
+		des_cblock _;
+		/* make sure things are correct size on machines with
+		 * 8 byte longs */
+		unsigned long pad[2];
+	} ks;
+#define _	ks._
+} block_state[16];
+
+static int des_encrypt(unsigned long *input, unsigned long *output,
+                       block_state ks, int encrypt)
+{
+	unsigned long l,r,t,u;
+	int i;
+	unsigned long *s;
+
+	l=input[0];
+	r=input[1];
+
+	/* do IP */
+	PERM_OP(r,l,t, 4,0x0f0f0f0f);
+	PERM_OP(l,r,t,16,0x0000ffff);
+	PERM_OP(r,l,t, 2,0x33333333);
+	PERM_OP(l,r,t, 8,0x00ff00ff);
+	PERM_OP(r,l,t, 1,0x55555555);
+	/* r and l are reversed - remember that :-) - fix
+	 * it in the next step */
+
+	/* Things have been modified so that the initial rotate is
+	 * done outside the loop.  This required the
+	 * des_SPtrans values in sp.h to be rotated 1 bit to the right.
+	 * One perl script later and things have a 5% speed up on a sparc2.
+	 * Thanks to Richard Outerbridge <71755.204@CompuServe.COM>
+	 * for pointing this out. */
+	t=(r<<1)|(r>>31);
+	r=(l<<1)|(l>>31);
+	l=t;
+
+	/* clear the top bits on machines with 8byte longs */
+	l&=0xffffffff;
+	r&=0xffffffff;
+
+	s=(unsigned long *)ks;
+	/* I don't know if it is worth the effort of loop unrolling the
+	 * inner loop */
+	if (encrypt)
+	{
+		for (i=0; i<32; i+=4)
+		{
+			D_ENCRYPT(l,r,i+0); /*  1 */
+			D_ENCRYPT(r,l,i+2); /*  2 */
+		}
+	}
+	else
+	{
+		for (i=30; i>0; i-=4)
+		{
+			D_ENCRYPT(l,r,i-0); /* 16 */
+			D_ENCRYPT(r,l,i-2); /* 15 */
+		}
+	}
+	l=(l>>1)|(l<<31);
+	r=(r>>1)|(r<<31);
+	/* clear the top bits on machines with 8byte longs */
+	l&=0xffffffff;
+	r&=0xffffffff;
+
+	/* swap l and r
+	 * we will not do the swap so just remember they are
+	 * reversed for the rest of the subroutine
+	 * luckily FP fixes this problem :-) */
+
+	PERM_OP(r,l,t, 1,0x55555555);
+	PERM_OP(l,r,t, 8,0x00ff00ff);
+	PERM_OP(r,l,t, 2,0x33333333);
+	PERM_OP(l,r,t,16,0x0000ffff);
+	PERM_OP(r,l,t, 4,0x0f0f0f0f);
+
+	output[0]=l;
+	output[1]=r;
+	l=r=t=u=0;
+	return(0);
+}
+
+static int des_ecb_encrypt(des_cblock *input, des_cblock *output,
+                           block_state ks, int encrypt)
+{
+	register unsigned long l0,l1;
+	register unsigned char *in,*out;
+	unsigned long ll[2];
+
+	in=(unsigned char *)input;
+	out=(unsigned char *)output;
+	c2l(in,l0);
+	c2l(in,l1);
+	ll[0]=l0;
+	ll[1]=l1;
+	des_encrypt(ll,ll,ks,encrypt);
+	l0=ll[0];
+	l1=ll[1];
+	l2c(l0,out);
+	l2c(l1,out);
+	l0=l1=ll[0]=ll[1]=0;
+	return(0);
+}
+
+
+     
+static void block_decrypt(block_state *state, 
+			  unsigned char *in, 
+			  unsigned char *out)
+{
+	des_ecb_encrypt((des_cblock *)in, (des_cblock *)out, *state, 0);
+}
+
+static void block_encrypt(block_state *state, 
+			  unsigned char *in, 
+			  unsigned char *out)
+{
+	des_ecb_encrypt((des_cblock *)in, (des_cblock *)out, *state, 1);
+}
+
+/* NOW DEFINED IN des_local.h
+ * See ecb_encrypt.c for a pseudo description of these macros. 
+ * #define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
+ * 	(b)^=(t),\
+ * 	(a)=((a)^((t)<<(n))))
+ */
+
+#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\
+	(a)=(a)^(t)^(t>>(16-(n))))
+
+static char shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0};
+
+/* return 0 if key parity is odd (correct),
+ * return -1 if key parity error,
+ * return -2 if illegal weak key.
+ */
+static int des_set_key(des_cblock *key, block_state schedule)
+{
+	register unsigned long c,d,t,s;
+	register unsigned char *in;
+	register unsigned long *k;
+	register int i;
+
+	k=(unsigned long *)schedule;
+	in=(unsigned char *)key;
+
+	c2l(in,c);
+	c2l(in,d);
+
+	/* do PC1 in 60 simple operations */ 
+/*	PERM_OP(d,c,t,4,0x0f0f0f0f);
+	HPERM_OP(c,t,-2, 0xcccc0000);
+	HPERM_OP(c,t,-1, 0xaaaa0000);
+	HPERM_OP(c,t, 8, 0x00ff0000);
+	HPERM_OP(c,t,-1, 0xaaaa0000);
+	HPERM_OP(d,t,-8, 0xff000000);
+	HPERM_OP(d,t, 8, 0x00ff0000);
+	HPERM_OP(d,t, 2, 0x33330000);
+	d=((d&0x00aa00aa)<<7)|((d&0x55005500)>>7)|(d&0xaa55aa55);
+	d=(d>>8)|((c&0xf0000000)>>4);
+	c&=0x0fffffff; */
+
+	/* I now do it in 47 simple operations :-)
+	 * Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov)
+	 * for the inspiration. :-) */
+	PERM_OP (d,c,t,4,0x0f0f0f0f);
+	HPERM_OP(c,t,-2,0xcccc0000);
+	HPERM_OP(d,t,-2,0xcccc0000);
+	PERM_OP (d,c,t,1,0x55555555);
+	PERM_OP (c,d,t,8,0x00ff00ff);
+	PERM_OP (d,c,t,1,0x55555555);
+	d=	(((d&0x000000ff)<<16)| (d&0x0000ff00)     |
+		 ((d&0x00ff0000)>>16)|((c&0xf0000000)>>4));
+	c&=0x0fffffff;
+
+	for (i=0; i<16; i++)
+	{
+		if (shifts2[i])
+		{ c=((c>>2)|(c<<26)); d=((d>>2)|(d<<26)); }
+		else
+		{ c=((c>>1)|(c<<27)); d=((d>>1)|(d<<27)); }
+		c&=0x0fffffff;
+		d&=0x0fffffff;
+		/* could be a few less shifts but I am to lazy at this
+		 * point in time to investigate */
+		s=	des_skb[0][ (c    )&0x3f                ]|
+			des_skb[1][((c>> 6)&0x03)|((c>> 7)&0x3c)]|
+			des_skb[2][((c>>13)&0x0f)|((c>>14)&0x30)]|
+			des_skb[3][((c>>20)&0x01)|((c>>21)&0x06) |
+				  ((c>>22)&0x38)];
+		t=	des_skb[4][ (d    )&0x3f                ]|
+			des_skb[5][((d>> 7)&0x03)|((d>> 8)&0x3c)]|
+			des_skb[6][ (d>>15)&0x3f                ]|
+			des_skb[7][((d>>21)&0x0f)|((d>>22)&0x30)];
+
+		/* table contained 0213 4657 */
+		*(k++)=((t<<16)|(s&0x0000ffff))&0xffffffff;
+		s=     ((s>>16)|(t&0xffff0000));
+		
+		s=(s<<4)|(s>>28);
+		*(k++)=s&0xffffffff;
+	}
+	return(0);
+}
+
+static const unsigned char odd_parity[256]={
+	1,  1,  2,  2,  4,  4,  7,  7,  8,  8, 11, 11, 13, 13, 14, 14,
+	16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31,
+	32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47,
+	49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62,
+	64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79,
+	81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94,
+	97, 97, 98, 98,100,100,103,103,104,104,107,107,109,109,110,110,
+	112,112,115,115,117,117,118,118,121,121,122,122,124,124,127,127,
+	128,128,131,131,133,133,134,134,137,137,138,138,140,140,143,143,
+	145,145,146,146,148,148,151,151,152,152,155,155,157,157,158,158,
+	161,161,162,162,164,164,167,167,168,168,171,171,173,173,174,174,
+	176,176,179,179,181,181,182,182,185,185,186,186,188,188,191,191,
+	193,193,194,194,196,196,199,199,200,200,203,203,205,205,206,206,
+	208,208,211,211,213,213,214,214,217,217,218,218,220,220,223,223,
+	224,224,227,227,229,229,230,230,233,233,234,234,236,236,239,239,
+	241,241,242,242,244,244,247,247,248,248,251,251,253,253,254,254};
+
+static void block_init(block_state *state, unsigned char *key,
+		       int keylen)
+{
+	char oddkey[8];
+	int i;
+  
+	for (i=0; i<8; i++)
+	{
+		oddkey[i]=odd_parity[ key[i] ];
+	}
+	des_set_key((des_cblock *)oddkey, *state);
+}
+
+#include "block_template.c"

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/2c87cdcb/tools/bin/pythonSrc/pycrypto-2.0.1/src/DES3.c
----------------------------------------------------------------------
diff --git a/tools/bin/pythonSrc/pycrypto-2.0.1/src/DES3.c b/tools/bin/pythonSrc/pycrypto-2.0.1/src/DES3.c
new file mode 100644
index 0000000..49bf6f4
--- /dev/null
+++ b/tools/bin/pythonSrc/pycrypto-2.0.1/src/DES3.c
@@ -0,0 +1,688 @@
+
+/*
+ *  des.c : Source code for the DES block cipher
+ *
+ * Part of the Python Cryptography Toolkit
+ *
+ * Distribute and use freely; there are no restrictions on further 
+ * dissemination and usage except those imposed by the laws of your 
+ * country of residence.
+ *
+ */
+  
+/* des.c */
+/* Copyright (C) 1993 Eric Young */
+/* Integrated into the PCT by A.M. Kuchling, November 1994 */
+/* Fully independent key mode added by Wim Lewis, July 1997 */
+
+#include "Python.h"
+
+#define MODULE_NAME DES3
+#define BLOCK_SIZE 8
+#define KEY_SIZE 0
+
+typedef unsigned char des_cblock[8];
+
+/* ecb_enc.c */
+/* Copyright (C) 1993 Eric Young - see README for more details */
+
+#define c2l(c,l)	(l =((unsigned long)(*((c)++)))    , \
+			 l|=((unsigned long)(*((c)++)))<< 8, \
+			 l|=((unsigned long)(*((c)++)))<<16, \
+			 l|=((unsigned long)(*((c)++)))<<24)
+
+/* NOTE - c is not incremented as per c2l */
+#define c2ln(c,l1,l2,n)	{ \
+			c+=n; \
+			l1=l2=0; \
+			switch (n) { \
+			case 8: l2|=((unsigned long)(*(--(c))))<<24; \
+			case 7: l2|=((unsigned long)(*(--(c))))<<16; \
+			case 6: l2|=((unsigned long)(*(--(c))))<< 8; \
+			case 5: l2|=((unsigned long)(*(--(c))));     \
+			case 4: l1|=((unsigned long)(*(--(c))))<<24; \
+			case 3: l1|=((unsigned long)(*(--(c))))<<16; \
+			case 2: l1|=((unsigned long)(*(--(c))))<< 8; \
+			case 1: l1|=((unsigned long)(*(--(c))));     \
+				} \
+			}
+
+#define l2c(l,c)	(*((c)++)=(unsigned char)(((l)    )&0xff), \
+			 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
+			 *((c)++)=(unsigned char)(((l)>>16)&0xff), \
+			 *((c)++)=(unsigned char)(((l)>>24)&0xff))
+
+/* replacements for htonl and ntohl since I have no idea what to do
+ * when faced with machines with 8 byte longs. */
+#define HDRSIZE 4
+
+#define n2l(c,l)	(l =((unsigned long)(*((c)++)))<<24, \
+			 l|=((unsigned long)(*((c)++)))<<16, \
+			 l|=((unsigned long)(*((c)++)))<< 8, \
+			 l|=((unsigned long)(*((c)++))))
+
+#define l2n(l,c)	(*((c)++)=(unsigned char)(((l)>>24)&0xff), \
+			 *((c)++)=(unsigned char)(((l)>>16)&0xff), \
+			 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
+			 *((c)++)=(unsigned char)(((l)    )&0xff))
+
+/* NOTE - c is not incremented as per l2c */
+#define l2cn(l1,l2,c,n)	{ \
+			c+=n; \
+			switch (n) { \
+			case 8: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
+			case 7: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
+			case 6: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
+			case 5: *(--(c))=(unsigned char)(((l2)    )&0xff); \
+			case 4: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
+			case 3: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
+			case 2: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
+			case 1: *(--(c))=(unsigned char)(((l1)    )&0xff); \
+				} \
+			}
+
+#define D_ENCRYPT(L,R,S)	\
+	u=(R^s[S  ]); \
+	t=R^s[S+1]; \
+	t=((t>>4)+(t<<28)); \
+	L^=	des_SPtrans[1][(t    )&0x3f]| \
+		des_SPtrans[3][(t>> 8)&0x3f]| \
+		des_SPtrans[5][(t>>16)&0x3f]| \
+		des_SPtrans[7][(t>>24)&0x3f]| \
+		des_SPtrans[0][(u    )&0x3f]| \
+		des_SPtrans[2][(u>> 8)&0x3f]| \
+		des_SPtrans[4][(u>>16)&0x3f]| \
+		des_SPtrans[6][(u>>24)&0x3f];
+
+	/* IP and FP
+	 * The problem is more of a geometric problem that random bit fiddling.
+	 0  1  2  3  4  5  6  7      62 54 46 38 30 22 14  6
+	 8  9 10 11 12 13 14 15      60 52 44 36 28 20 12  4
+	16 17 18 19 20 21 22 23      58 50 42 34 26 18 10  2
+	24 25 26 27 28 29 30 31  to  56 48 40 32 24 16  8  0
+
+	32 33 34 35 36 37 38 39      63 55 47 39 31 23 15  7
+	40 41 42 43 44 45 46 47      61 53 45 37 29 21 13  5
+	48 49 50 51 52 53 54 55      59 51 43 35 27 19 11  3
+	56 57 58 59 60 61 62 63      57 49 41 33 25 17  9  1
+
+	The output has been subject to swaps of the form
+	0 1 -> 3 1 but the odd and even bits have been put into
+	2 3    2 0
+	different words.  The main trick is to remember that
+	t=((l>>size)^r)&(mask);
+	r^=t;
+	l^=(t<<size);
+	can be used to swap and move bits between words.
+
+	So l =  0  1  2  3  r = 16 17 18 19
+	        4  5  6  7      20 21 22 23
+	        8  9 10 11      24 25 26 27
+	       12 13 14 15      28 29 30 31
+	becomes (for size == 2 and mask == 0x3333)
+	   t =   2^16  3^17 -- --   l =  0  1 16 17  r =  2  3 18 19
+		 6^20  7^21 -- --        4  5 20 21       6  7 22 23
+		10^24 11^25 -- --        8  9 24 25      10 11 24 25
+		14^28 15^29 -- --       12 13 28 29      14 15 28 29
+
+	Thanks for hints from Richard Outerbridge - he told me IP&FP
+	could be done in 15 xor, 10 shifts and 5 ands.
+	When I finally started to think of the problem in 2D
+	I first got ~42 operations without xors.  When I remembered
+	how to use xors :-) I got it to its final state.
+	*/
+#define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
+	(b)^=(t),\
+	(a)^=((t)<<(n)))
+
+
+
+/* spr.h */
+/* Copyright (C) 1993 Eric Young - see README for more details */
+static unsigned long des_SPtrans[8][64]={
+/* nibble 0 */
+	{0x00820200, 0x00020000, 0x80800000, 0x80820200,
+	 0x00800000, 0x80020200, 0x80020000, 0x80800000,
+	 0x80020200, 0x00820200, 0x00820000, 0x80000200,
+	 0x80800200, 0x00800000, 0x00000000, 0x80020000,
+	 0x00020000, 0x80000000, 0x00800200, 0x00020200,
+	 0x80820200, 0x00820000, 0x80000200, 0x00800200,
+	 0x80000000, 0x00000200, 0x00020200, 0x80820000,
+	 0x00000200, 0x80800200, 0x80820000, 0x00000000,
+	 0x00000000, 0x80820200, 0x00800200, 0x80020000,
+	 0x00820200, 0x00020000, 0x80000200, 0x00800200,
+	 0x80820000, 0x00000200, 0x00020200, 0x80800000,
+	 0x80020200, 0x80000000, 0x80800000, 0x00820000,
+	 0x80820200, 0x00020200, 0x00820000, 0x80800200,
+	 0x00800000, 0x80000200, 0x80020000, 0x00000000,
+	 0x00020000, 0x00800000, 0x80800200, 0x00820200,
+	 0x80000000, 0x80820000, 0x00000200, 0x80020200},
+
+/* nibble 1 */
+	{0x10042004, 0x00000000, 0x00042000, 0x10040000,
+	 0x10000004, 0x00002004, 0x10002000, 0x00042000,
+	 0x00002000, 0x10040004, 0x00000004, 0x10002000,
+	 0x00040004, 0x10042000, 0x10040000, 0x00000004,
+	 0x00040000, 0x10002004, 0x10040004, 0x00002000,
+	 0x00042004, 0x10000000, 0x00000000, 0x00040004,
+	 0x10002004, 0x00042004, 0x10042000, 0x10000004,
+	 0x10000000, 0x00040000, 0x00002004, 0x10042004,
+	 0x00040004, 0x10042000, 0x10002000, 0x00042004,
+	 0x10042004, 0x00040004, 0x10000004, 0x00000000,
+	 0x10000000, 0x00002004, 0x00040000, 0x10040004,
+	 0x00002000, 0x10000000, 0x00042004, 0x10002004,
+	 0x10042000, 0x00002000, 0x00000000, 0x10000004,
+	 0x00000004, 0x10042004, 0x00042000, 0x10040000,
+	 0x10040004, 0x00040000, 0x00002004, 0x10002000,
+	 0x10002004, 0x00000004, 0x10040000, 0x00042000},
+
+/* nibble 2 */
+	{0x41000000, 0x01010040, 0x00000040, 0x41000040,
+	 0x40010000, 0x01000000, 0x41000040, 0x00010040,
+	 0x01000040, 0x00010000, 0x01010000, 0x40000000,
+	 0x41010040, 0x40000040, 0x40000000, 0x41010000,
+	 0x00000000, 0x40010000, 0x01010040, 0x00000040,
+	 0x40000040, 0x41010040, 0x00010000, 0x41000000,
+	 0x41010000, 0x01000040, 0x40010040, 0x01010000,
+	 0x00010040, 0x00000000, 0x01000000, 0x40010040,
+	 0x01010040, 0x00000040, 0x40000000, 0x00010000,
+	 0x40000040, 0x40010000, 0x01010000, 0x41000040,
+	 0x00000000, 0x01010040, 0x00010040, 0x41010000,
+	 0x40010000, 0x01000000, 0x41010040, 0x40000000,
+	 0x40010040, 0x41000000, 0x01000000, 0x41010040,
+	 0x00010000, 0x01000040, 0x41000040, 0x00010040,
+	 0x01000040, 0x00000000, 0x41010000, 0x40000040,
+	 0x41000000, 0x40010040, 0x00000040, 0x01010000},
+
+/* nibble 3 */
+	{0x00100402, 0x04000400, 0x00000002, 0x04100402,
+	 0x00000000, 0x04100000, 0x04000402, 0x00100002,
+	 0x04100400, 0x04000002, 0x04000000, 0x00000402,
+	 0x04000002, 0x00100402, 0x00100000, 0x04000000,
+	 0x04100002, 0x00100400, 0x00000400, 0x00000002,
+	 0x00100400, 0x04000402, 0x04100000, 0x00000400,
+	 0x00000402, 0x00000000, 0x00100002, 0x04100400,
+	 0x04000400, 0x04100002, 0x04100402, 0x00100000,
+	 0x04100002, 0x00000402, 0x00100000, 0x04000002,
+	 0x00100400, 0x04000400, 0x00000002, 0x04100000,
+	 0x04000402, 0x00000000, 0x00000400, 0x00100002,
+	 0x00000000, 0x04100002, 0x04100400, 0x00000400,
+	 0x04000000, 0x04100402, 0x00100402, 0x00100000,
+	 0x04100402, 0x00000002, 0x04000400, 0x00100402,
+	 0x00100002, 0x00100400, 0x04100000, 0x04000402,
+	 0x00000402, 0x04000000, 0x04000002, 0x04100400},
+
+/* nibble 4 */
+	{0x02000000, 0x00004000, 0x00000100, 0x02004108,
+	 0x02004008, 0x02000100, 0x00004108, 0x02004000,
+	 0x00004000, 0x00000008, 0x02000008, 0x00004100,
+	 0x02000108, 0x02004008, 0x02004100, 0x00000000,
+	 0x00004100, 0x02000000, 0x00004008, 0x00000108,
+	 0x02000100, 0x00004108, 0x00000000, 0x02000008,
+	 0x00000008, 0x02000108, 0x02004108, 0x00004008,
+	 0x02004000, 0x00000100, 0x00000108, 0x02004100,
+	 0x02004100, 0x02000108, 0x00004008, 0x02004000,
+	 0x00004000, 0x00000008, 0x02000008, 0x02000100,
+	 0x02000000, 0x00004100, 0x02004108, 0x00000000,
+	 0x00004108, 0x02000000, 0x00000100, 0x00004008,
+	 0x02000108, 0x00000100, 0x00000000, 0x02004108,
+	 0x02004008, 0x02004100, 0x00000108, 0x00004000,
+	 0x00004100, 0x02004008, 0x02000100, 0x00000108,
+	 0x00000008, 0x00004108, 0x02004000, 0x02000008},
+
+/* nibble 5 */
+	{0x20000010, 0x00080010, 0x00000000, 0x20080800,
+	 0x00080010, 0x00000800, 0x20000810, 0x00080000,
+	 0x00000810, 0x20080810, 0x00080800, 0x20000000,
+	 0x20000800, 0x20000010, 0x20080000, 0x00080810,
+	 0x00080000, 0x20000810, 0x20080010, 0x00000000,
+	 0x00000800, 0x00000010, 0x20080800, 0x20080010,
+	 0x20080810, 0x20080000, 0x20000000, 0x00000810,
+	 0x00000010, 0x00080800, 0x00080810, 0x20000800,
+	 0x00000810, 0x20000000, 0x20000800, 0x00080810,
+	 0x20080800, 0x00080010, 0x00000000, 0x20000800,
+	 0x20000000, 0x00000800, 0x20080010, 0x00080000,
+	 0x00080010, 0x20080810, 0x00080800, 0x00000010,
+	 0x20080810, 0x00080800, 0x00080000, 0x20000810,
+	 0x20000010, 0x20080000, 0x00080810, 0x00000000,
+	 0x00000800, 0x20000010, 0x20000810, 0x20080800,
+	 0x20080000, 0x00000810, 0x00000010, 0x20080010},
+
+/* nibble 6 */
+	{0x00001000, 0x00000080, 0x00400080, 0x00400001,
+	 0x00401081, 0x00001001, 0x00001080, 0x00000000,
+	 0x00400000, 0x00400081, 0x00000081, 0x00401000,
+	 0x00000001, 0x00401080, 0x00401000, 0x00000081,
+	 0x00400081, 0x00001000, 0x00001001, 0x00401081,
+	 0x00000000, 0x00400080, 0x00400001, 0x00001080,
+	 0x00401001, 0x00001081, 0x00401080, 0x00000001,
+	 0x00001081, 0x00401001, 0x00000080, 0x00400000,
+	 0x00001081, 0x00401000, 0x00401001, 0x00000081,
+	 0x00001000, 0x00000080, 0x00400000, 0x00401001,
+	 0x00400081, 0x00001081, 0x00001080, 0x00000000,
+	 0x00000080, 0x00400001, 0x00000001, 0x00400080,
+	 0x00000000, 0x00400081, 0x00400080, 0x00001080,
+	 0x00000081, 0x00001000, 0x00401081, 0x00400000,
+	 0x00401080, 0x00000001, 0x00001001, 0x00401081,
+	 0x00400001, 0x00401080, 0x00401000, 0x00001001},
+
+/* nibble 7 */
+	{0x08200020, 0x08208000, 0x00008020, 0x00000000,
+	 0x08008000, 0x00200020, 0x08200000, 0x08208020,
+	 0x00000020, 0x08000000, 0x00208000, 0x00008020,
+	 0x00208020, 0x08008020, 0x08000020, 0x08200000,
+	 0x00008000, 0x00208020, 0x00200020, 0x08008000,
+	 0x08208020, 0x08000020, 0x00000000, 0x00208000,
+	 0x08000000, 0x00200000, 0x08008020, 0x08200020,
+	 0x00200000, 0x00008000, 0x08208000, 0x00000020,
+	 0x00200000, 0x00008000, 0x08000020, 0x08208020,
+	 0x00008020, 0x08000000, 0x00000000, 0x00208000,
+	 0x08200020, 0x08008020, 0x08008000, 0x00200020,
+	 0x08208000, 0x00000020, 0x00200020, 0x08008000,
+	 0x08208020, 0x00200000, 0x08200000, 0x08000020,
+	 0x00208000, 0x00008020, 0x08008020, 0x08200000,
+	 0x00000020, 0x08208000, 0x00208020, 0x00000000,
+	 0x08000000, 0x08200020, 0x00008000, 0x00208020}};
+
+static unsigned long des_skb[8][64]={
+/* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
+	{0x00000000,0x00000010,0x20000000,0x20000010,
+	 0x00010000,0x00010010,0x20010000,0x20010010,
+	 0x00000800,0x00000810,0x20000800,0x20000810,
+	 0x00010800,0x00010810,0x20010800,0x20010810,
+	 0x00000020,0x00000030,0x20000020,0x20000030,
+	 0x00010020,0x00010030,0x20010020,0x20010030,
+	 0x00000820,0x00000830,0x20000820,0x20000830,
+	 0x00010820,0x00010830,0x20010820,0x20010830,
+	 0x00080000,0x00080010,0x20080000,0x20080010,
+	 0x00090000,0x00090010,0x20090000,0x20090010,
+	 0x00080800,0x00080810,0x20080800,0x20080810,
+	 0x00090800,0x00090810,0x20090800,0x20090810,
+	 0x00080020,0x00080030,0x20080020,0x20080030,
+	 0x00090020,0x00090030,0x20090020,0x20090030,
+	 0x00080820,0x00080830,0x20080820,0x20080830,
+	 0x00090820,0x00090830,0x20090820,0x20090830},
+/* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
+	{0x00000000,0x02000000,0x00002000,0x02002000,
+	 0x00200000,0x02200000,0x00202000,0x02202000,
+	 0x00000004,0x02000004,0x00002004,0x02002004,
+	 0x00200004,0x02200004,0x00202004,0x02202004,
+	 0x00000400,0x02000400,0x00002400,0x02002400,
+	 0x00200400,0x02200400,0x00202400,0x02202400,
+	 0x00000404,0x02000404,0x00002404,0x02002404,
+	 0x00200404,0x02200404,0x00202404,0x02202404,
+	 0x10000000,0x12000000,0x10002000,0x12002000,
+	 0x10200000,0x12200000,0x10202000,0x12202000,
+	 0x10000004,0x12000004,0x10002004,0x12002004,
+	 0x10200004,0x12200004,0x10202004,0x12202004,
+	 0x10000400,0x12000400,0x10002400,0x12002400,
+	 0x10200400,0x12200400,0x10202400,0x12202400,
+	 0x10000404,0x12000404,0x10002404,0x12002404,
+	 0x10200404,0x12200404,0x10202404,0x12202404},
+/* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
+	{0x00000000,0x00000001,0x00040000,0x00040001,
+	 0x01000000,0x01000001,0x01040000,0x01040001,
+	 0x00000002,0x00000003,0x00040002,0x00040003,
+	 0x01000002,0x01000003,0x01040002,0x01040003,
+	 0x00000200,0x00000201,0x00040200,0x00040201,
+	 0x01000200,0x01000201,0x01040200,0x01040201,
+	 0x00000202,0x00000203,0x00040202,0x00040203,
+	 0x01000202,0x01000203,0x01040202,0x01040203,
+	 0x08000000,0x08000001,0x08040000,0x08040001,
+	 0x09000000,0x09000001,0x09040000,0x09040001,
+	 0x08000002,0x08000003,0x08040002,0x08040003,
+	 0x09000002,0x09000003,0x09040002,0x09040003,
+	 0x08000200,0x08000201,0x08040200,0x08040201,
+	 0x09000200,0x09000201,0x09040200,0x09040201,
+	 0x08000202,0x08000203,0x08040202,0x08040203,
+	 0x09000202,0x09000203,0x09040202,0x09040203},
+/* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
+	{0x00000000,0x00100000,0x00000100,0x00100100,
+	 0x00000008,0x00100008,0x00000108,0x00100108,
+	 0x00001000,0x00101000,0x00001100,0x00101100,
+	 0x00001008,0x00101008,0x00001108,0x00101108,
+	 0x04000000,0x04100000,0x04000100,0x04100100,
+	 0x04000008,0x04100008,0x04000108,0x04100108,
+	 0x04001000,0x04101000,0x04001100,0x04101100,
+	 0x04001008,0x04101008,0x04001108,0x04101108,
+	 0x00020000,0x00120000,0x00020100,0x00120100,
+	 0x00020008,0x00120008,0x00020108,0x00120108,
+	 0x00021000,0x00121000,0x00021100,0x00121100,
+	 0x00021008,0x00121008,0x00021108,0x00121108,
+	 0x04020000,0x04120000,0x04020100,0x04120100,
+	 0x04020008,0x04120008,0x04020108,0x04120108,
+	 0x04021000,0x04121000,0x04021100,0x04121100,
+	 0x04021008,0x04121008,0x04021108,0x04121108},
+/* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
+	{0x00000000,0x10000000,0x00010000,0x10010000,
+	 0x00000004,0x10000004,0x00010004,0x10010004,
+	 0x20000000,0x30000000,0x20010000,0x30010000,
+	 0x20000004,0x30000004,0x20010004,0x30010004,
+	 0x00100000,0x10100000,0x00110000,0x10110000,
+	 0x00100004,0x10100004,0x00110004,0x10110004,
+	 0x20100000,0x30100000,0x20110000,0x30110000,
+	 0x20100004,0x30100004,0x20110004,0x30110004,
+	 0x00001000,0x10001000,0x00011000,0x10011000,
+	 0x00001004,0x10001004,0x00011004,0x10011004,
+	 0x20001000,0x30001000,0x20011000,0x30011000,
+	 0x20001004,0x30001004,0x20011004,0x30011004,
+	 0x00101000,0x10101000,0x00111000,0x10111000,
+	 0x00101004,0x10101004,0x00111004,0x10111004,
+	 0x20101000,0x30101000,0x20111000,0x30111000,
+	 0x20101004,0x30101004,0x20111004,0x30111004},
+/* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
+	{0x00000000,0x08000000,0x00000008,0x08000008,
+	 0x00000400,0x08000400,0x00000408,0x08000408,
+	 0x00020000,0x08020000,0x00020008,0x08020008,
+	 0x00020400,0x08020400,0x00020408,0x08020408,
+	 0x00000001,0x08000001,0x00000009,0x08000009,
+	 0x00000401,0x08000401,0x00000409,0x08000409,
+	 0x00020001,0x08020001,0x00020009,0x08020009,
+	 0x00020401,0x08020401,0x00020409,0x08020409,
+	 0x02000000,0x0A000000,0x02000008,0x0A000008,
+	 0x02000400,0x0A000400,0x02000408,0x0A000408,
+	 0x02020000,0x0A020000,0x02020008,0x0A020008,
+	 0x02020400,0x0A020400,0x02020408,0x0A020408,
+	 0x02000001,0x0A000001,0x02000009,0x0A000009,
+	 0x02000401,0x0A000401,0x02000409,0x0A000409,
+	 0x02020001,0x0A020001,0x02020009,0x0A020009,
+	 0x02020401,0x0A020401,0x02020409,0x0A020409},
+/* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
+	{0x00000000,0x00000100,0x00080000,0x00080100,
+	 0x01000000,0x01000100,0x01080000,0x01080100,
+	 0x00000010,0x00000110,0x00080010,0x00080110,
+	 0x01000010,0x01000110,0x01080010,0x01080110,
+	 0x00200000,0x00200100,0x00280000,0x00280100,
+	 0x01200000,0x01200100,0x01280000,0x01280100,
+	 0x00200010,0x00200110,0x00280010,0x00280110,
+	 0x01200010,0x01200110,0x01280010,0x01280110,
+	 0x00000200,0x00000300,0x00080200,0x00080300,
+	 0x01000200,0x01000300,0x01080200,0x01080300,
+	 0x00000210,0x00000310,0x00080210,0x00080310,
+	 0x01000210,0x01000310,0x01080210,0x01080310,
+	 0x00200200,0x00200300,0x00280200,0x00280300,
+	 0x01200200,0x01200300,0x01280200,0x01280300,
+	 0x00200210,0x00200310,0x00280210,0x00280310,
+	 0x01200210,0x01200310,0x01280210,0x01280310},
+/* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
+	{0x00000000,0x04000000,0x00040000,0x04040000,
+	 0x00000002,0x04000002,0x00040002,0x04040002,
+	 0x00002000,0x04002000,0x00042000,0x04042000,
+	 0x00002002,0x04002002,0x00042002,0x04042002,
+	 0x00000020,0x04000020,0x00040020,0x04040020,
+	 0x00000022,0x04000022,0x00040022,0x04040022,
+	 0x00002020,0x04002020,0x00042020,0x04042020,
+	 0x00002022,0x04002022,0x00042022,0x04042022,
+	 0x00000800,0x04000800,0x00040800,0x04040800,
+	 0x00000802,0x04000802,0x00040802,0x04040802,
+	 0x00002800,0x04002800,0x00042800,0x04042800,
+	 0x00002802,0x04002802,0x00042802,0x04042802,
+	 0x00000820,0x04000820,0x00040820,0x04040820,
+	 0x00000822,0x04000822,0x00040822,0x04040822,
+	 0x00002820,0x04002820,0x00042820,0x04042820,
+	 0x00002822,0x04002822,0x00042822,0x04042822}
+};
+
+typedef struct des_ks_struct
+{
+	union	{
+		des_cblock _;
+		/* make sure things are correct size on machines with
+		 * 8 byte longs */
+		unsigned long pad[2];
+	} ks;
+#define _	ks._
+} des_key_schedule[16];
+
+typedef struct 
+{
+	des_key_schedule KeySched1, KeySched2, KeySched3;
+} block_state;
+
+static int des_encrypt(unsigned long *input, unsigned long *output,
+		       des_key_schedule ks, int encrypt)
+{
+	register unsigned long l,r,t,u;
+	register int i;
+	register unsigned long *s;
+
+	l=input[0];
+	r=input[1];
+
+	/* do IP */
+	PERM_OP(r,l,t, 4,0x0f0f0f0f);
+	PERM_OP(l,r,t,16,0x0000ffff);
+	PERM_OP(r,l,t, 2,0x33333333);
+	PERM_OP(l,r,t, 8,0x00ff00ff);
+	PERM_OP(r,l,t, 1,0x55555555);
+	/* r and l are reversed - remember that :-) - fix
+	 * it in the next step */
+
+	/* Things have been modified so that the initial rotate is
+	 * done outside the loop.  This required the
+	 * des_SPtrans values in sp.h to be rotated 1 bit to the right.
+	 * One perl script later and things have a 5% speed up on a sparc2.
+	 * Thanks to Richard Outerbridge <71755.204@CompuServe.COM>
+	 * for pointing this out. */
+	t=(r<<1)|(r>>31);
+	r=(l<<1)|(l>>31);
+	l=t;
+
+	/* clear the top bits on machines with 8byte longs */
+	l&=0xffffffff;
+	r&=0xffffffff;
+
+	s=(unsigned long *)ks;
+	/* I don't know if it is worth the effort of loop unrolling the
+	 * inner loop */
+	if (encrypt)
+	{
+		for (i=0; i<32; i+=4)
+		{
+			D_ENCRYPT(l,r,i+0); /*  1 */
+			D_ENCRYPT(r,l,i+2); /*  2 */
+		}
+	}
+	else
+	{
+		for (i=30; i>0; i-=4)
+		{
+			D_ENCRYPT(l,r,i-0); /* 16 */
+			D_ENCRYPT(r,l,i-2); /* 15 */
+		}
+	}
+	l=(l>>1)|(l<<31);
+	r=(r>>1)|(r<<31);
+	/* clear the top bits on machines with 8byte longs */
+	l&=0xffffffff;
+	r&=0xffffffff;
+
+	/* swap l and r
+	 * we will not do the swap so just remember they are
+	 * reversed for the rest of the subroutine
+	 * luckily FP fixes this problem :-) */
+
+	PERM_OP(r,l,t, 1,0x55555555);
+	PERM_OP(l,r,t, 8,0x00ff00ff);
+	PERM_OP(r,l,t, 2,0x33333333);
+	PERM_OP(l,r,t,16,0x0000ffff);
+	PERM_OP(r,l,t, 4,0x0f0f0f0f);
+
+	output[0]=l;
+	output[1]=r;
+	l=r=t=u=0;
+	return(0);
+}
+
+static int des_ecb_encrypt(des_cblock *input, des_cblock *output,
+			   des_key_schedule ks, int encrypt)
+{
+	register unsigned long l0,l1;
+	register unsigned char *in,*out;
+	unsigned long ll[2];
+
+	in=(unsigned char *)input;
+	out=(unsigned char *)output;
+	c2l(in,l0);
+	c2l(in,l1);
+	ll[0]=l0;
+	ll[1]=l1;
+	des_encrypt(ll,ll,ks,encrypt);
+	l0=ll[0];
+	l1=ll[1];
+	l2c(l0,out);
+	l2c(l1,out);
+	l0=l1=ll[0]=ll[1]=0;
+	return(0);
+}
+
+
+     
+static void block_decrypt(block_state *self, 
+			  unsigned char *in,
+			  unsigned char *out)
+{
+	des_cblock output, output2;
+  
+	des_ecb_encrypt((des_cblock *)in, &output, self->KeySched3, 0);
+	des_ecb_encrypt(&output, &output2, self->KeySched2, 1);
+	des_ecb_encrypt(&output2, (des_cblock *)out, self->KeySched1, 0);
+}
+
+static void block_encrypt(block_state *self, 
+			  unsigned char *in,
+			  unsigned char *out)
+{
+	des_cblock output, output2;
+  
+	des_ecb_encrypt((des_cblock *)in, &output, self->KeySched1, 1);
+	des_ecb_encrypt(&output, &output2, self->KeySched2, 0);
+	des_ecb_encrypt(&output2, (des_cblock *)out, self->KeySched3, 1);
+}
+
+/* NOW DEFINED IN des_local.h
+ * See ecb_encrypt.c for a pseudo description of these macros. 
+ * #define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
+ * 	(b)^=(t),\
+ * 	(a)=((a)^((t)<<(n))))
+ */
+
+#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\
+	(a)=(a)^(t)^(t>>(16-(n))))
+
+static char shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0};
+
+static int des_set_key(des_cblock *key, des_key_schedule schedule)
+{
+	register unsigned long c,d,t,s;
+	register unsigned char *in;
+	register unsigned long *k;
+	register int i;
+
+	k=(unsigned long *)schedule;
+	in=(unsigned char *)key;
+
+	c2l(in,c);
+	c2l(in,d);
+
+	/* do PC1 in 60 simple operations */ 
+/*	PERM_OP(d,c,t,4,0x0f0f0f0f);
+	HPERM_OP(c,t,-2, 0xcccc0000);
+	HPERM_OP(c,t,-1, 0xaaaa0000);
+	HPERM_OP(c,t, 8, 0x00ff0000);
+	HPERM_OP(c,t,-1, 0xaaaa0000);
+	HPERM_OP(d,t,-8, 0xff000000);
+	HPERM_OP(d,t, 8, 0x00ff0000);
+	HPERM_OP(d,t, 2, 0x33330000);
+	d=((d&0x00aa00aa)<<7)|((d&0x55005500)>>7)|(d&0xaa55aa55);
+	d=(d>>8)|((c&0xf0000000)>>4);
+	c&=0x0fffffff; */
+
+	/* I now do it in 47 simple operations :-)
+	 * Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov)
+	 * for the inspiration. :-) */
+	PERM_OP (d,c,t,4,0x0f0f0f0f);
+	HPERM_OP(c,t,-2,0xcccc0000);
+	HPERM_OP(d,t,-2,0xcccc0000);
+	PERM_OP (d,c,t,1,0x55555555);
+	PERM_OP (c,d,t,8,0x00ff00ff);
+	PERM_OP (d,c,t,1,0x55555555);
+	d=	(((d&0x000000ff)<<16)| (d&0x0000ff00)     |
+		 ((d&0x00ff0000)>>16)|((c&0xf0000000)>>4));
+	c&=0x0fffffff;
+
+	for (i=0; i<16; i++)
+	{
+		if (shifts2[i])
+		{ c=((c>>2)|(c<<26)); d=((d>>2)|(d<<26)); }
+		else
+		{ c=((c>>1)|(c<<27)); d=((d>>1)|(d<<27)); }
+		c&=0x0fffffff;
+		d&=0x0fffffff;
+		/* could be a few less shifts but I am to lazy at this
+		 * point in time to investigate */
+		s=	des_skb[0][ (c    )&0x3f                ]|
+			des_skb[1][((c>> 6)&0x03)|((c>> 7)&0x3c)]|
+			des_skb[2][((c>>13)&0x0f)|((c>>14)&0x30)]|
+			des_skb[3][((c>>20)&0x01)|((c>>21)&0x06) |
+				  ((c>>22)&0x38)];
+		t=	des_skb[4][ (d    )&0x3f                ]|
+			des_skb[5][((d>> 7)&0x03)|((d>> 8)&0x3c)]|
+			des_skb[6][ (d>>15)&0x3f                ]|
+			des_skb[7][((d>>21)&0x0f)|((d>>22)&0x30)];
+
+		/* table contained 0213 4657 */
+		*(k++)=((t<<16)|(s&0x0000ffff))&0xffffffff;
+		s=     ((s>>16)|(t&0xffff0000));
+		
+		s=(s<<4)|(s>>28);
+		*(k++)=s&0xffffffff;
+	}
+	return(0);
+}
+
+static const unsigned char odd_parity[256]={
+	1,  1,  2,  2,  4,  4,  7,  7,  8,  8, 11, 11, 13, 13, 14, 14,
+	16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31,
+	32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47,
+	49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62,
+	64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79,
+	81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94,
+	97, 97, 98, 98,100,100,103,103,104,104,107,107,109,109,110,110,
+	112,112,115,115,117,117,118,118,121,121,122,122,124,124,127,127,
+	128,128,131,131,133,133,134,134,137,137,138,138,140,140,143,143,
+	145,145,146,146,148,148,151,151,152,152,155,155,157,157,158,158,
+	161,161,162,162,164,164,167,167,168,168,171,171,173,173,174,174,
+	176,176,179,179,181,181,182,182,185,185,186,186,188,188,191,191,
+	193,193,194,194,196,196,199,199,200,200,203,203,205,205,206,206,
+	208,208,211,211,213,213,214,214,217,217,218,218,220,220,223,223,
+	224,224,227,227,229,229,230,230,233,233,234,234,236,236,239,239,
+	241,241,242,242,244,244,247,247,248,248,251,251,253,253,254,254};
+
+static void block_init(block_state *self, unsigned char *key, 
+		       int keylength)
+{
+	char oddkey[24];
+	int i;
+  
+	if (keylength != 16 && keylength != 24) {
+		PyErr_SetString(PyExc_ValueError,
+				"DES3 key must be either 16 or 24 bytes long");
+		return;
+	}
+
+	for (i=0; i<keylength; i++)
+	{
+		oddkey[i]=odd_parity[ key[i] ];
+	}
+	des_set_key((des_cblock *)(oddkey+0), self->KeySched1);
+	des_set_key((des_cblock *)(oddkey+8), self->KeySched2);
+	if (keylength == 24) {
+		des_set_key((des_cblock *)(oddkey+16), self->KeySched3);
+	} else {
+                memcpy(self->KeySched3, self->KeySched1, 
+                       sizeof(self->KeySched3));
+	}
+}
+
+#include "block_template.c"

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/2c87cdcb/tools/bin/pythonSrc/pycrypto-2.0.1/src/IDEA.c
----------------------------------------------------------------------
diff --git a/tools/bin/pythonSrc/pycrypto-2.0.1/src/IDEA.c b/tools/bin/pythonSrc/pycrypto-2.0.1/src/IDEA.c
new file mode 100644
index 0000000..b9cec81
--- /dev/null
+++ b/tools/bin/pythonSrc/pycrypto-2.0.1/src/IDEA.c
@@ -0,0 +1,196 @@
+
+/*
+ *  idea.c : Source code for the IDEA block cipher
+ *
+ * Part of the Python Cryptography Toolkit
+ *
+ * Distribute and use freely; there are no restrictions on further 
+ * dissemination and usage except those imposed by the laws of your 
+ * country of residence.
+ *
+ */
+
+#include "Python.h"
+
+#ifdef MS_WIN32
+#include <winsock2.h>
+#else
+#include <sys/param.h>
+#include <netinet/in.h>
+#endif
+
+#define MODULE_NAME IDEA
+#define BLOCK_SIZE 8
+#define KEY_SIZE 16
+
+#define low16(x) ((x)/* & 0xFFFF*/)
+typedef unsigned short uint16;	/* at LEAST 16 bits, maybe more */
+typedef unsigned short word16;
+typedef unsigned long word32;
+typedef unsigned char byte;
+
+#define MUL(x,y) (x = low16(x-1), t16 = low16((y)-1), \
+		t32 = (word32)x*t16 + x + t16, x = low16(t32), \
+		t16 = t32>>16, x = (x-t16) + (x<t16) + 1)
+
+#ifdef _GNUC_
+/* __const__ simply means there are no side effects for this function,
+ * which is useful info for the gcc optimizer
+ */
+#define CONST __const__
+#else
+#define CONST
+#endif
+
+typedef struct 
+{
+	word16 EK[6*8+4], DK[6*8+4];
+} block_state;
+
+CONST static uint16
+mulInv(uint16 x)
+{
+	uint16 t0, t1;
+	uint16 q, y;
+
+	if (x <= 1)
+		return x;		/* 0 and 1 are self-inverse */
+	t1 = 0x10001L / x;		/* Since x >= 2, this fits into 16 bits */
+	y = 0x10001L % x;
+	if (y == 1)
+		return low16(1 - t1);
+	t0 = 1;
+	do {
+		q = x / y;
+		x = x % y;
+		t0 += q * t1;
+		if (x == 1)
+			return t0;
+		q = y / x;
+		y = y % x;
+		t1 += q * t0;
+	} while (y != 1);
+	return low16(1 - t1);
+}				/* mukInv */
+
+static void
+block_init(block_state *self, unsigned char *key, int dummy)
+{
+	int i, j;
+	uint16 t1, t2, t3;
+	word16 *DK, *EK;    
+
+	EK = self->EK;
+	for (j = 0; j < 8; j++) {
+		EK[j] = (key[0] << 8) + key[1];
+		key += 2;
+	}
+	for (i = 0; j < 6*8+4; j++) {
+		i++;
+		EK[i + 7] = (EK[i & 7] << 9) | (EK[(i + 1) & 7] >> 7);
+		EK += i & 8;
+		i &= 7;
+	}
+	EK = self->EK;
+	DK = self->DK+6*8+4;    
+	t1 = mulInv(*EK++);
+	t2 = -*EK++;
+	t3 = -*EK++;
+	*--DK = mulInv(*EK++);
+	*--DK = t3;
+	*--DK = t2;
+	*--DK = t1;
+
+	for (i = 0; i < 8 - 1; i++) {
+		t1 = *EK++;
+		*--DK = *EK++;
+		*--DK = t1;
+
+		t1 = mulInv(*EK++);
+		t2 = -*EK++;
+		t3 = -*EK++;
+		*--DK = mulInv(*EK++);
+		*--DK = t2;
+		*--DK = t3;
+		*--DK = t1;
+	}
+	t1 = *EK++;
+	*--DK = *EK++;
+	*--DK = t1;
+
+	t1 = mulInv(*EK++);
+	t2 = -*EK++;
+	t3 = -*EK++;
+	*--DK = mulInv(*EK++);
+	*--DK = t3;
+	*--DK = t2;
+	*--DK = t1;
+}
+
+/*      IDEA encryption/decryption algorithm */
+/* Note that in and out can be the same buffer */
+static void ideaCipher(block_state *self, byte *block_in, 
+		       byte *block_out, word16 const *key)
+{
+	register uint16 x1, x2, x3, x4, s2, s3;
+	word16 *in, *out;
+	register uint16 t16;	/* Temporaries needed by MUL macro */
+	register word32 t32;
+	int r = 8;
+
+	in = (word16 *) block_in;
+	x1 = ntohs(*in++);
+	x2 = ntohs(*in++);
+	x3 = ntohs(*in++);
+	x4 = ntohs(*in);
+	do {
+		MUL(x1, *key++);
+		x2 += *key++;
+		x3 += *key++;
+		MUL(x4, *key++);
+
+		s3 = x3;
+		x3 ^= x1;
+		MUL(x3, *key++);
+		s2 = x2;
+		x2 ^= x4;
+		x2 += x3;
+		MUL(x2, *key++);
+		x3 += x2;
+
+		x1 ^= x2;
+		x4 ^= x3;
+
+		x2 ^= s3;
+		x3 ^= s2;
+	} while (--r);
+	MUL(x1, *key++);
+	x3 += *key++;
+	x2 += *key++;
+	MUL(x4, *key);
+
+	out = (word16 *) block_out;
+
+	*out++ = htons(x1);
+	*out++ = htons(x3);
+	*out++ = htons(x2);
+	*out = htons(x4);
+
+}				/* ideaCipher */
+
+
+static void block_encrypt(block_state *self, 
+			  unsigned char *in, 
+			  unsigned char *out)
+{
+	ideaCipher(self, in, out, self->EK);
+}
+
+static void block_decrypt(block_state *self,
+			  unsigned char *in, 
+			  unsigned char *out)
+{
+	ideaCipher(self, in, out, self->DK);
+}
+   
+#include "block_template.c"



Mime
View raw message