Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

437 lines
9.8 KiB

  1. /*++
  2. Copyright (C) 1999-2001 Microsoft Corporation
  3. Module Name:
  4. Abstract:
  5. History:
  6. --*/
  7. #include <windows.h>
  8. #include <stdio.h>
  9. DWORD g_aData[] =
  10. {
  11. 787298196, 389638077,
  12. 341926582, 774741813,
  13. 93260522, 163092950,
  14. 1990849060, 347345683,
  15. 877836976, 1572821297,
  16. 648067937, 2085921890,
  17. 185524536, 456812682,
  18. 0, 757935405,
  19. 0, 757935405,
  20. 0, 757935405,
  21. 0, 757935405,
  22. 137293882, 647272253,
  23. 926837903, 691288938,
  24. 2110722223, 753493867,
  25. 1158850856, 231595791,
  26. 891966499, 1864871608,
  27. 369617977, 1136871300,
  28. 1171009120, 869085779,
  29. 1450103344, 1086868440,
  30. 1961959123, 1059058093,
  31. 1935842809, 802291789,
  32. 67991817, 981707677,
  33. 1259917513, 326492489,
  34. 1576246720, 1771986875,
  35. 0, 757935405,
  36. 0, 757935405,
  37. 0, 757935405,
  38. 0, 757935405,
  39. 923580586, 196610576,
  40. 422396857, 1268611680,
  41. 612189215, 1446180055,
  42. 273627650, 1037431929,
  43. 1582243822, 530725520,
  44. 802440210, 1390869936,
  45. 1406698670, 882125910,
  46. 1438991232, 560627627,
  47. 519127596, 452431388,
  48. 247297193, 1875650637,
  49. 1095739709, 1333936659,
  50. 488415888, 58615958,
  51. 2113012991, 1738890481,
  52. 1232434023, 576968899,
  53. 408785170, 2004132969,
  54. 1072488881, 1949997283,
  55. 686278613, 103342821,
  56. 1802391228, 1692614641,
  57. 1467267833, 20439818,
  58. 1881687054, 139215331,
  59. 883980780, 1810507476,
  60. 328677840, 457133755,
  61. 142591755, 1983286802,
  62. 1996404059, 1271126329,
  63. 1134573462, 762500247,
  64. 1814903789, 840278466,
  65. 1546035302, 748041854,
  66. 1627769996, 1594286475,
  67. 485134963, 1356626587,
  68. 985018630, 725840743,
  69. 894740359, 1781303086,
  70. 191459340, 113223348,
  71. 1637410797, 99004090,
  72. 1314737521, 1672532217,
  73. 1668536725, 1304979453,
  74. 1000359187, 88572926,
  75. 940387879, 86954543,
  76. 581549221, 1279191550,
  77. 582252523, 1728435494,
  78. 1684935272, 658131775,
  79. 120729547, 480600746,
  80. 1434799119, 1826855997,
  81. 132314003, 890416705,
  82. 1550628941, 1593392703,
  83. 212468432, 1977475751,
  84. 145875476, 1283143786,
  85. 339648658, 1258446305,
  86. 1259855840, 1196087906,
  87. 74939557, 525823171,
  88. 282953689, 879773678,
  89. 702241042, 1008129545,
  90. 529353019, 143169584,
  91. 0, 543978849,
  92. 0, 1701604417,
  93. 371789987, 422923611,
  94. 1151970391, 221238405,
  95. 1680390471, 894991504,
  96. 1173777616, 157967432,
  97. 1766201693, 1082091029,
  98. 961250332, 418310210,
  99. 2064488210, 1090270119,
  100. 2001088245, 1778413437,
  101. 791205667, 120892331,
  102. 425237262, 1210731199,
  103. 905501056, 1963224902,
  104. 1495907077, 1762779656,
  105. 1793196122, 900671011,
  106. 565554614, 877067351,
  107. 1684925417, 1390111021,
  108. 1324408981, 1523119716,
  109. 1985677317, 1014717431,
  110. 2058211074, 325132225,
  111. 1158869461, 1242277359,
  112. 940757120, 1456714425,
  113. 1912286107, 1599660744,
  114. 1030658283, 1328068605,
  115. 1672026279, 818606002,
  116. 1811916152, 731129312,
  117. 62148729, 371093903,
  118. 300023322, 1713323730,
  119. 1016690981, 453549345,
  120. 1591860349, 929856991,
  121. 1154873655, 1234446286,
  122. 1969529918, 889192916,
  123. 506902349, 1583269362,
  124. 596405421, 29222317,
  125. 1957020972, 428224461,
  126. 705503535, 1900946280,
  127. 1636949272, 753322603,
  128. 1574175218, 74107011,
  129. 620920752, 2000334733,
  130. 286975576, 1272973499,
  131. 832394219, 1049983536,
  132. 719744492, 863138508,
  133. 152013962, 961843672,
  134. 92216887, 220011621,
  135. 2005324671, 676471875,
  136. 801005260, 2107228857,
  137. 1417629424, 1535412939,
  138. 927485975, 971812307,
  139. 440891913, 2031435089,
  140. 2075684028, 1235594918,
  141. 15075279, 255504492,
  142. 1292850514, 1653838496,
  143. 1575207405, 771884304,
  144. 762297916, 113481758,
  145. 1344439445, 1543107246,
  146. 852400584, 1804221292,
  147. 1525438309, 110908311,
  148. 86765426, 771128997,
  149. 697445823, 961217353,
  150. 21213263, 1351154252,
  151. 10599418, 1651444261,
  152. 35441527, 1052114448,
  153. 1590203695, 1004220318,
  154. 526682473, 905611632,
  155. 1769355382, 1506382359,
  156. 44165446, 222203003,
  157. 1796395753, 236997150,
  158. 1183262379, 1958681932,
  159. 874728503, 1225185820,
  160. 570241278, 732193933,
  161. 858685714, 2074455587,
  162. 1560512242, 570149966,
  163. 951907138, 1616617795,
  164. 1487056392, 1358244054,
  165. 970286561, 92310071,
  166. 756933636, 1110268445,
  167. 1440979143, 1265100897,
  168. 2084942205, 818510862,
  169. 1320638918, 823264617,
  170. 1971233622, 1847199921,
  171. 95431188, 242470127,
  172. 856458457, 897727972,
  173. 329752498, 468812383,
  174. 144227962, 769935106,
  175. 144227962, 769935106,
  176. 144227962, 769935106,
  177. 144227962, 769935106,
  178. 534716163, 1761870124,
  179. 1020475911, 15843303,
  180. 144227962, 769935106,
  181. 144227962, 769935106,
  182. 144227962, 769935106,
  183. 144227962, 769935106,
  184. 1067808548, 208610277,
  185. 211579674, 1653240566,
  186. 239108456, 885154717,
  187. 21370838, 1331889325,
  188. 981841190, 31603421,
  189. 776487910, 155411510,
  190. 2071731226, 122456632,
  191. 124476971, 416326125,
  192. 763251302, 178690314,
  193. 1119537894, 126896069,
  194. 806112306, 1933102105,
  195. 364993844, 1805041121,
  196. 1424534966, 727711589,
  197. 2077763860, 274369686,
  198. 2093089868, 1733803912,
  199. 84954222, 1079628647,
  200. 264022324, 2037751576,
  201. 1024375655, 434843389,
  202. 1902071860, 2111102903,
  203. 695270825, 1907355848,
  204. 1911415748, 1337430371,
  205. 971966920, 1236686408,
  206. 2033536277, 945241688,
  207. 1505165919, 920928449,
  208. 1140463463, 867695560,
  209. 425854658, 1224833536,
  210. 1898028372, 1356457614,
  211. 1790370482, 816827286,
  212. 451463270, 1522918624,
  213. 1281670814, 931443332,
  214. 405066436, 2107792490,
  215. 261570442, 204422508,
  216. 1182010752, 1359667668,
  217. 520647196, 199392831,
  218. 1232260743, 1016215239,
  219. 1066977689, 1846685821,
  220. 1393055485, 1149327626,
  221. 728869925, 1227807534,
  222. 1223562861, 1215769115,
  223. 1234782934, 1500675318,
  224. 1670384851, 1546713131,
  225. 680528633, 517371164,
  226. 1190806955, 761856969,
  227. 2145532613, 1742670338,
  228. 1002949577, 295468350,
  229. 538754217, 2099052296,
  230. 1487886738, 1318580638,
  231. 1540413980, 1248769325,
  232. 203789634, 144460909,
  233. 1948818884, 1383042119,
  234. 1106605766, 249692350,
  235. 1654887685, 799220325,
  236. 266335729, 1064242885,
  237. 935948902, 1729316369,
  238. 1904596453, 602576498,
  239. 1393926903, 1868790805,
  240. 999121367, 1482517664,
  241. 1106424117, 1619863692,
  242. 475802887, 1065758854,
  243. 1578128863, 1073664523,
  244. 1902406644, 1490177493,
  245. 189884687, 370196266,
  246. 2067425084, 1295173952,
  247. 719320527, 1966542348,
  248. 1402266308, 627647129,
  249. 321290752, 563241132,
  250. 1055096585, 1304486941,
  251. 923108668, 487059104,
  252. 344621029, 714650744,
  253. 1350621712, 1393479868,
  254. 496766707, 337566155,
  255. 1398161423, 1065556157,
  256. 1637951588, 1664109644,
  257. 1897844973, 39233871,
  258. 738269405, 2096910723,
  259. 92694589, 236509435,
  260. 1190806955, 761856969,
  261. 338757023, 812768206,
  262. 1849559800, 854377249,
  263. 1404336425, 1207126318,
  264. 1662034928, 342925931,
  265. 658926774, 426922867,
  266. 1729186771, 1061508106,
  267. 563502611, 1697133477,
  268. 840094768, 1210950740,
  269. 1835414483, 769859538,
  270. 747821704, 1438378136,
  271. 2126687472, 278562278,
  272. 1238007326, 59100431,
  273. 1897844973, 39233871,
  274. 450014323, 1915307751,
  275. 1426814736, 286322278,
  276. 846462709, 324087749,
  277. 1264181614, 609866356,
  278. 537228654, 1155735254,
  279. 1669911731, 295201152,
  280. 2051750308, 1634959694,
  281. 2037895850, 1121635198,
  282. 1191562139, 871349233,
  283. 384085527, 1485591712,
  284. 593489313, 1334053277,
  285. 1201558042, 1284197474,
  286. 1267301451, 1295178886,
  287. 712333739, 1466813771,
  288. 1382958161, 55608330,
  289. 1404336425, 1207126318,
  290. 1420100579, 1516550283,
  291. 1034307423, 253077413,
  292. 364993844, 1805041121,
  293. 2107257906, 1288714714,
  294. 2127080717, 1122861179,
  295. 496953976, 480397759,
  296. 1539886260, 2049877054,
  297. 1458240017, 1918020923,
  298. 1736195893, 934320622,
  299. 270972983, 295012450,
  300. 1020551866, 2134232563,
  301. 673302697, 1363075082,
  302. 329752498, 468812383,
  303. 144227962, 769935106,
  304. 144227962, 769935106,
  305. 144227962, 769935106,
  306. 144227962, 769935106,
  307. 1764104557, 547082180,
  308. 497927576, 24480816,
  309. 589828949, 1975205479,
  310. 144227962, 769935106,
  311. 144227962, 769935106,
  312. 144227962, 769935106,
  313. 144227962, 769935106,
  314. 144227962, 769935106,
  315. 602187998, 287638516,
  316. 2008233392, 1060225789,
  317. 1192430968, 1339353572,
  318. 1428531475, 1905392579,
  319. 1670384851, 1546713131,
  320. 680528633, 517371164,
  321. 330641664, 1605658617,
  322. 664197573, 1993238793,
  323. 329752498, 468812383,
  324. 144227962, 769935106,
  325. 144227962, 769935106,
  326. 144227962, 769935106,
  327. 144227962, 769935106,
  328. 337739951, 76463872,
  329. 1786957427, 416636494,
  330. 144227962, 769935106,
  331. 144227962, 769935106,
  332. 144227962, 769935106,
  333. 144227962, 769935106,
  334. 144227962, 769935106,
  335. 363957482, 713099117,
  336. 715207258, 1444991911,
  337. 906492934, 201308803,
  338. 549588084, 1261979109,
  339. 1198999088, 295629922,
  340. 1456701468, 2004408543,
  341. 1587159928, 1248983505,
  342. 144227962, 769935106,
  343. 144227962, 769935106,
  344. 144227962, 769935106,
  345. 144227962, 769935106,
  346. 1067808548, 208610277,
  347. 156509796, 1042008667,
  348. 426198684, 1629282820,
  349. 301389858, 1871183307,
  350. 593620859, 1798829104,
  351. 144227962, 769935106,
  352. 144227962, 769935106,
  353. 144227962, 769935106,
  354. 144227962, 769935106,
  355. 1067808548, 208610277,
  356. 941907548, 507139560,
  357. 1042233049, 945161939,
  358. 807955139, 99055478,
  359. 999121367, 1482517664,
  360. 1308773551, 1409554373,
  361. 1523086598, 413771652,
  362. 52391019, 1186011222,
  363. 563372826, 1525327567,
  364. 2102151822, 1136009315,
  365. 1574765603, 1457921496,
  366. 867496441, 1693047572,
  367. 407929249, 542656253,
  368. 1795844148, 255267812,
  369. 1218529061, 1059803448,
  370. 39529162, 1398686543,
  371. 490430000, 1686718086,
  372. 489233830, 1863308304
  373. };
  374. #define NUM_DATA (sizeof(g_aData)/sizeof(DWORD))
  375. #define LARGE_PRIME 2147483659
  376. DWORD HashKey(char* szKey)
  377. {
  378. DWORD n = 1;
  379. while(*szKey)
  380. {
  381. n = n * (2*(DWORD)*szKey + 1);
  382. szKey++;
  383. }
  384. return n % LARGE_PRIME;
  385. }
  386. LPSTR GetText(LPSTR szKey)
  387. {
  388. LPSTR szResult = new char[NUM_DATA*2+4];
  389. DWORD* pdwResult = (DWORD*)szResult;
  390. DWORD dwKey = HashKey(szKey);
  391. for(int i = 0; i < NUM_DATA; i+=2)
  392. {
  393. __int64 i64A = g_aData[i];
  394. __int64 i64B = g_aData[i+1];
  395. __int64 i64Res = (i64A*dwKey + i64B) % LARGE_PRIME;
  396. *pdwResult = (DWORD)i64Res;
  397. pdwResult++;
  398. }
  399. *pdwResult = 0;
  400. return szResult;
  401. }
  402. BOOL CheckText(char* szText)
  403. {
  404. while(*szText)
  405. {
  406. if (*szText < 8 || *szText > 127)
  407. return FALSE;
  408. szText++;
  409. }
  410. return TRUE;
  411. }
  412. void main()
  413. {
  414. printf("Key: ");
  415. char szKey[100];
  416. scanf("%s", szKey);
  417. LPSTR szResult = GetText(szKey);
  418. if(!CheckText(szResult))
  419. printf("INVALID!\n");
  420. else
  421. printf("%s\n", szResult);
  422. }