Secret.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:10k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /*
  2. Cross Platform Core Code.
  3. Copyright(R) 2001-2002 Balang Software.
  4. All rights reserved.
  5. Using:
  6. class CDView;
  7. class CDLocalView;
  8. */
  9. #ifndef __ND_SECRET_H__
  10. #define __ND_SECRET_H__
  11. /***
  12. 有关加密的部分,包括DES数据加密,RSA对称密钥加密,硬盘系列号读取等
  13. 如果希望脱离本软件单独使用secret.h, secret.inl, secret.cpp,将三个
  14. 文件中用到的所有CSPString替换成CString即可。
  15. */
  16. ///////////////////////////////////////////////////////////////
  17. // 32bit DES
  18. ///////////////////////////////////////////////////////////////
  19. #define DESLOCAL_PRODUCT_STOCKANA 0x1021
  20. #define DESLOCAL_DEFAULTKEY 0xE496A1B9
  21. class CDView : public CWnd
  22. {
  23. private:
  24. WORD m_SubKey[4];
  25. public:
  26. CDView( DWORD key = DESLOCAL_DEFAULTKEY );
  27. void Create( BYTE *pSrc, BYTE *pDest, DWORD len );
  28. protected:
  29. WORD m_awTable[ 256 ];
  30. void InitTable();
  31. WORD CalcTable(WORD dat,WORD genpoly,WORD accum);
  32. public:
  33. WORD Update( WORD crc,WORD byte );
  34. };
  35. #define DESLOCAL_KEY1 0xDEC3F075
  36. #define DESLOCAL_KEY2 0xABCD0123
  37. #define DESLOCAL_KEY3 0xDC03782A
  38. #define DESLOCAL_KEY4 0xEF00257D
  39. #define DESLOCAL_KEY5 0xACE02574
  40. #define DESLOCAL_KEY6 0xDEF03547
  41. #define DESLOCAL_KEY7 0xBCDEFACD
  42. #define DESLOCAL_KEY8 0x53796ACD
  43. ///////////////////////////////////////////////////////////////
  44. // 256bit DES
  45. ///////////////////////////////////////////////////////////////
  46. class CDLocalView : public CWnd
  47. {
  48. public:
  49. CDLocalView( );
  50. void Create( BYTE *pSrc, BYTE *pDest, DWORD len );
  51. void Destroy( BYTE *pSrc, BYTE *pDest, DWORD len );
  52. };
  53. ///////////////////////////////////////////////////////////////////////////////
  54. // RSA
  55. // RSA public key encryption
  56. class vlong // very long integer - can be used like long
  57. {
  58. public:
  59. // Standard arithmetic operators
  60. friend vlong operator +( const vlong& x, const vlong& y );
  61. friend vlong operator -( const vlong& x, const vlong& y );
  62. friend vlong operator *( const vlong& x, const vlong& y );
  63. friend vlong operator /( const vlong& x, const vlong& y );
  64. friend vlong operator %( const vlong& x, const vlong& y );
  65. vlong& operator +=( const vlong& x );
  66. vlong& operator -=( const vlong& x );
  67. // Standard comparison operators
  68. friend inline int operator !=( const vlong& x, const vlong& y ){ return x.cf( y ) != 0; }
  69. friend inline int operator ==( const vlong& x, const vlong& y ){ return x.cf( y ) == 0; }
  70. friend inline int operator >=( const vlong& x, const vlong& y ){ return x.cf( y ) >= 0; }
  71. friend inline int operator <=( const vlong& x, const vlong& y ){ return x.cf( y ) <= 0; }
  72. friend inline int operator > ( const vlong& x, const vlong& y ){ return x.cf( y ) > 0; }
  73. friend inline int operator < ( const vlong& x, const vlong& y ){ return x.cf( y ) < 0; }
  74. // Construction and conversion operations
  75. vlong ( unsigned x=0 );
  76. vlong ( const vlong& x );
  77. vlong ( const char * s, int len, int bSysStr );
  78. ~vlong();
  79. operator unsigned ();
  80. vlong& operator =(const vlong& x);
  81. static vlong from_str( const char * s, int len );
  82. static vlong from_sysstr( const char * s, int len );
  83. int to_str( char * s, int len );
  84. int to_sysstr( char * s, int len );
  85. private:
  86. class vlong_value * value;
  87. int negative;
  88. int cf( const vlong x ) const;
  89. void docopy();
  90. friend class monty;
  91. };
  92. vlong modexp( const vlong & x, const vlong & e, const vlong & m ); // m must be odd
  93. vlong gcd( const vlong &X, const vlong &Y ); // greatest common denominator
  94. vlong modinv( const vlong &a, const vlong &m ); // modular inverse
  95. class public_key
  96. {
  97. public:
  98. vlong m,e;
  99. vlong encrypt( const vlong& plain ); // Requires 0 <= plain < m
  100. };
  101. class private_key : public public_key
  102. {
  103. public:
  104. vlong p,q;
  105. vlong decrypt( const vlong& cipher );
  106. void create( const char * r1, const char * r2 );
  107. // r1 and r2 should be null terminated random strings
  108. // each of length around 35 characters (for a 500 bit modulus)
  109. };
  110. ///////////////////////////////////////////////////////////////////////////////
  111. // Disk Serial 
  112. #pragma pack(1)
  113. struct GDT_DESCRIPTOR 
  114. WORD Limit_0_15; 
  115. WORD Base_0_15; 
  116. BYTE Base_16_23; 
  117. BYTE Type : 4; 
  118. BYTE System : 1; 
  119. BYTE DPL : 2; 
  120. BYTE Present : 1; 
  121. BYTE Limit_16_19 : 4; 
  122. BYTE Available : 1; 
  123. BYTE Reserved : 1; 
  124. BYTE D_B : 1; 
  125. BYTE Granularity : 1; 
  126. BYTE Base_24_31; 
  127. }; 
  128. struct CALLGATE_DESCRIPTOR 
  129. WORD Offset_0_15; 
  130. WORD Selector; 
  131. WORD ParamCount : 5; 
  132. WORD Unused : 3; 
  133. WORD Type : 4; 
  134. WORD System : 1; 
  135. WORD DPL : 2; 
  136. WORD Present : 1; 
  137. WORD Offset_16_31; 
  138. }; 
  139. struct GDTR 
  140. WORD wGDTLimit; 
  141. DWORD dwGDTBase; 
  142. }; 
  143. #pragma pack() 
  144. //extern "C" 
  145. //{ 
  146. // PORT32API bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize); 
  147. // PORT32API bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize); 
  148. //} 
  149. //////////////////////////////////////////////////////////////////////
  150. //winio.h 
  151. // Define the various device type values. Note that values used by Microsoft 
  152. // Corporation are in the range 0-32767, and 32768-65535 are reserved for use 
  153. // by customers. 
  154. #define FILE_DEVICE_WINIO 0x00008010
  155. // Macro definition for defining IOCTL and FSCTL function control codes. 
  156. // Note that function codes 0-2047 are reserved for Microsoft Corporation, 
  157. // and 2048-4095 are reserved for customers. 
  158. #define WINIO_IOCTL_INDEX 0x810 
  159. // Define our own private IOCTL 
  160. #define IOCTL_WINIO_MAPPHYSTOLIN CTL_CODE(FILE_DEVICE_WINIO, 
  161. WINIO_IOCTL_INDEX, 
  162. METHOD_BUFFERED, 
  163. FILE_ANY_ACCESS)
  164. #define IOCTL_WINIO_UNMAPPHYSADDR CTL_CODE(FILE_DEVICE_WINIO, 
  165. WINIO_IOCTL_INDEX + 1, 
  166. METHOD_BUFFERED, 
  167. FILE_ANY_ACCESS)
  168. #define IOCTL_WINIO_WRITEPORT CTL_CODE(FILE_DEVICE_WINIO, 
  169. WINIO_IOCTL_INDEX + 2, 
  170. METHOD_BUFFERED, 
  171. FILE_ANY_ACCESS)
  172. #define IOCTL_WINIO_READPORT CTL_CODE(FILE_DEVICE_WINIO, 
  173. WINIO_IOCTL_INDEX + 3, 
  174. METHOD_BUFFERED, 
  175. FILE_ANY_ACCESS)
  176. struct tagPhys32Struct 
  177. HANDLE PhysicalMemoryHandle; 
  178. ULONG dwPhysMemSizeInBytes; 
  179. PVOID pvPhysAddress; 
  180. PVOID pvPhysMemLin; 
  181. }; 
  182. extern struct tagPhys32Struct Phys32Struct; 
  183. struct tagPort32Struct 
  184. USHORT wPortAddr; 
  185. ULONG dwPortVal; 
  186. UCHAR bSize; 
  187. }; 
  188. extern struct tagPort32Struct Port32Struct; 
  189. ///////////////////////////////////////////////////////////////
  190. // 硬盘系列号
  191. ///////////////////////////////////////////////////////////////
  192. long getHardDriveComputerID ();
  193. ///////////////////////////////////////////////////////////////////////////////
  194. // CSView
  195. #define SE_MIN_USERNAME 3
  196. #define SE_MAX_USERNAME 128
  197. #define SE_MIN_SOFTNO 4
  198. #define SE_MAX_SOFTNO 14
  199. #define SE_MIN_RSASTR 4
  200. #define SE_MAX_RSASTR 10
  201. #define SE_MIN_RSASYSSTR 8
  202. #define SE_MAX_RSASYSSTR 20
  203. #define SE_LEN_SEPREGCODE 5
  204. #define SE_MAX_RSAKEYLEN 64
  205. #define SE_LEN_SYSTEMSTR 20
  206. #define SE_SYSTEM20_CHAR "34579AEFHJKLMNPRSTWX"
  207. #define SE_MASK_SOFTNO 0x3D45C8A5
  208. #ifdef CLKVER_OEM
  209. #define SE_SEED_STD1 OEM_SEED_STD1
  210. #define SE_SEED_STD2 OEM_SEED_STD2
  211. #define SE_SEED_PROF1 OEM_SEED_PROF1
  212. #define SE_SEED_PROF2 OEM_SEED_PROF2
  213. #else
  214. #define SE_SEED_STD1 "x2&^0"
  215. #define SE_SEED_STD2 "c0-+5"
  216. #define SE_SEED_PROF1 "i0^&1"
  217. #define SE_SEED_PROF2 "h5(*8"
  218. #endif
  219. /***
  220. 软件注册类
  221. */
  222. class CSView : public CWnd
  223. {
  224. public:
  225. CSView( );
  226. virtual ~CSView( );
  227. static CSPString GetS( ); // Serial NO, from HardDisk Serial
  228. // operations
  229. BOOL Load( LPCTSTR lpszFileName );
  230. BOOL Store( LPCTSTR lpszFileName );
  231. static BOOL Valid( LPCTSTR lpszSrc, LPCTSTR lpszRegCode, public_key & rsapub );
  232. ////////////////////////////////////////////////////////////////////////////////////
  233. // Function Cannot Dispatched Begin
  234. static BOOL DumpEva( long tm, CSPString &strRegCode );
  235. static BOOL Dump( LPCTSTR lpszUser, CSPString &strRegCode, private_key & rsapri );
  236. static BOOL Dump( LPCTSTR lpszUser, LPCTSTR lpszSoftNO, CSPString &strRegCode, const char * r1, const char * r2 );
  237. static BOOL DumpStd( LPCTSTR lpszUser, LPCTSTR lpszSoftNO, CSPString &strRegCode );
  238. static BOOL DumpProf( LPCTSTR lpszUser, LPCTSTR lpszSoftNO, CSPString &strRegCode );
  239. BOOL SetME( );
  240. BOOL SetURDir( LPCTSTR lpszUserr, LPCTSTR lpszRegCode );
  241. // Function Cannot Dispatched Ended
  242. ////////////////////////////////////////////////////////////////////////////////////
  243. // Authorized User and RegCode
  244. CSPString GetU( );
  245. CSPString GetR( );
  246. BOOL SetUR( LPCTSTR lpszUser, LPCTSTR lpszRegCode );
  247. void SetInsTimeIfNull( );
  248. void ResetInsTime( );
  249. // evaluate version
  250. BOOL IsEva( );
  251. BOOL IsStd( );
  252. BOOL IsProf( );
  253. BOOL AssertValid( );
  254. // expired time
  255. int GetLeft( );
  256. BOOL SetEvaCode( LPCTSTR lpszRegCode );
  257. void SetMaxEvaDays( int nDays = 365 );
  258. int GetMaxEvaDays( );
  259. // agent enable
  260. CSPString GetNSAText( );
  261. void SetNSAText( LPCTSTR lpszNSAText );
  262. protected:
  263. // operations
  264. virtual void Serialize(CArchive& ar);
  265. BOOL ValidStd( LPCTSTR lpszUser, LPCTSTR lpszSoftNO, LPCTSTR lpszRegCode );
  266. BOOL ValidProf( LPCTSTR lpszUser, LPCTSTR lpszSoftNO, LPCTSTR lpszRegCode );
  267. protected:
  268. DWORD m_dwFileVersion;
  269. CString m_strU; // Authorized User
  270. CString m_strR; // Register Code
  271. char m_mStd[SE_MAX_RSAKEYLEN]; // RSA Public Key
  272. char m_eStd[SE_MAX_RSAKEYLEN]; // RSA Public Key
  273. int m_mStdlen;
  274. int m_eStdlen;
  275. char m_mProf[SE_MAX_RSAKEYLEN]; // RSA Public Key
  276. char m_eProf[SE_MAX_RSAKEYLEN]; // RSA Public Key
  277. int m_mProflen;
  278. int m_eProflen;
  279. CSPTime m_tmExp; // time Expired
  280. CSPTime m_tmIns; // time Install
  281. int m_nMaxEvaDays;
  282. CString m_strAR; // m_strAgentRegCode
  283. CString m_strNSAText;
  284. };
  285. // Get The Static CSView Object
  286. CSView &AfxGetSView( );
  287. #endif //__ND_SECRET_H__