csp.cpp
上传用户:filter2008
上传日期:2013-02-01
资源大小:101k
文件大小:21k
源码类别:

CA认证

开发平台:

C/C++

  1. /****************************************************************************
  2. * library : pkcs_csp.dll
  3. * Purpose : It is a cryptographic service provider which is an independent 
  4. * software module that actually performs cryptography algorithms for 
  5. * authentication, encoding, and encryption.
  6. * This DLL can be interfaced on any PKCS#11 module.  
  7. *
  8. * Copyright (C) 2003 Ilex Syst鑝es Informatiques
  9. *
  10. * This library is free software; you can redistribute it and/or
  11. * modify it under the terms of the GNU Lesser General Public
  12. * License as published by the Free Software Foundation; either
  13. * version 2.1 of the License, or (at your option) any later version.
  14. *
  15. * This library is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  18. * Lesser General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU Lesser General Public
  21. * License along with this library; if not, write to the Free Software
  22. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  23. *
  24. * Contact :
  25. * Ilex 
  26. * 51 boulevard Voltaire
  27. * 92600 Asni鑢es-sur-Seine
  28. * pkizy@ilex.fr
  29. *
  30. * Author: Delouvrier Antoine
  31. *
  32. *******************************************************************************/
  33. /*
  34. %----------------------------------------------------------------------------
  35. % PROJECT : CSP_PKCS
  36. %
  37. % MODULE : csp
  38. %
  39. % VERSION : 1.00
  40. %
  41. % FILE : csp.cpp
  42. %
  43. % Entrance points of the DLL:  all the entrance points are redirected towards handlecontainer which manages a container
  44. %----------------------------------------------------------------------------
  45. % Version 1.00
  46. % CPX-31/03/2003-Creation
  47. %----------------------------------------------------------------------------
  48. % The PKCS#11 module must be defined in the csp_pkcs.ini as below :
  49. % [CSP_PKCS]
  50. % Name=name of pkcs#11 module
  51. %
  52. %----------------------------------------------------------------------------
  53. % You can register the csp in Windows thanks to samples which one can find in 
  54. % the CSPDK which is downloadable at the adress :
  55. % http://www.microsoft.com/downloads/details.aspx?FamilyId=0F436C75-2304-42BB-B81A-BA0C2C47BAC2&displaylang=en
  56. %
  57. */ 
  58. #ifndef WIN32_LEAN_AND_MEAN
  59. #define WIN32_LEAN_AND_MEAN
  60. #endif
  61. /*
  62. % HEADER Files include
  63. %-----------------------
  64. */
  65. #include "handlecontainer.h"
  66. #include "csp_pkcs_const.h"
  67. #include "resource.h"
  68. /*
  69. %Declaration of the private static variables
  70. %-------------------------------------------
  71. */
  72. extern "C" HINSTANCE g_hModule = NULL;
  73. extern bool  already_initialized=false;
  74. extern int  pkcsInitialized=0;
  75. /*
  76. %--------------------------------------------------------------------------
  77. % DllMain
  78. %
  79. % Main of the dll
  80. %--------------------------------------------------------------------------
  81. */
  82. BOOL WINAPI
  83. DllMain(
  84.   HINSTANCE hinstanceDLL, 
  85.   DWORD ulRaison,     
  86.   LPVOID lpvReserve)  
  87. {
  88.     if (ulRaison == DLL_PROCESS_ATTACH)
  89.     {
  90. setTraceLevel();
  91.         TRACE(__LINE__,"DLL_PROCESS_ATTACH",NULL);
  92.         DisableThreadLibraryCalls(hinstanceDLL);
  93.         g_hModule = hinstanceDLL;
  94. }
  95. return TRUE;
  96. }
  97. /*------------------------------------------------------------------------*/
  98. /*
  99. Each of these functions can be found in MSDN.  Please refer there
  100. for additional information.
  101. */
  102. /*------------------------------------------------------------------------
  103. CPAcquireContext
  104. -------------------------------------------------------------------------*/
  105. BOOL WINAPI
  106. CPAcquireContext(
  107.     OUT HCRYPTPROV *phProv,
  108.     IN  CHAR *pszContainer,
  109.     IN  DWORD dwFlags,
  110.     IN  PVTableProvStruc pVTable)
  111. {
  112. BOOL rv=TRUE;
  113.     TRACE(__LINE__,"CPAcquireContext BEGIN :%d %s %d %d",phProv,pszContainer,dwFlags,pVTable);
  114. rv=Pkcs::Initialize();
  115. if(rv!=TRUE)
  116. return FALSE;
  117. if (((dwFlags & CRYPT_VERIFYCONTEXT) == CRYPT_VERIFYCONTEXT) &&
  118.         (NULL != pszContainer) && (0 != *pszContainer))
  119.     {
  120.         SetLastError((DWORD) NTE_BAD_FLAGS);
  121.     TRACE(__LINE__,"CPAcquireContext ERROR :%d %s %d %d",phProv,pszContainer,dwFlags,pVTable);
  122.         return FALSE;
  123.     }
  124. const CHAR * pszFinalContainer;
  125.     
  126. if(!pszContainer || (0 == *pszContainer))
  127. pszFinalContainer = DEFAULT_CONTAINER;
  128. else
  129. pszFinalContainer =pszContainer;
  130. HandleContainer* pHandleContainer = new HandleContainer();
  131. if(!pHandleContainer){
  132.     TRACE(__LINE__,"CPAcquireContext ERROR :%d %s %d %d",phProv,pszContainer,dwFlags,pVTable);
  133. return FALSE;
  134. }
  135. if(!pHandleContainer->CreateHandleContainer(pszFinalContainer, dwFlags, pVTable))
  136. {
  137. delete pHandleContainer;
  138.     TRACE(__LINE__,"CPAcquireContext ERROR :%d %s %d %d",phProv,pszContainer,dwFlags,pVTable);
  139. return FALSE;
  140. }
  141. if((dwFlags & CRYPT_DELETEKEYSET) == CRYPT_DELETEKEYSET)
  142. delete pHandleContainer;
  143. else
  144. *phProv = (HCRYPTPROV)pHandleContainer;
  145.     TRACE(__LINE__,"CPAcquireContext TRUE :%d %s %d %d",phProv,pszContainer,dwFlags,pVTable);
  146. return TRUE;
  147. }
  148. /*------------------------------------------------------------------------
  149. CPReleaseContext
  150. -------------------------------------------------------------------------*/
  151. BOOL WINAPI
  152. CPReleaseContext(
  153.     IN  HCRYPTPROV hProv,
  154.     IN  DWORD ulFlags)
  155. {
  156. TRACE(__LINE__,"CPReleaseContext : %d, %d",hProv,ulFlags);
  157. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  158. {
  159. TRACE(__LINE__,"CPReleaseContext ERROR: %d, %d",hProv,ulFlags);
  160. SetLastError(NTE_BAD_UID);
  161. return FALSE;
  162. }
  163. delete (HandleContainer*)hProv;
  164. Pkcs::FreePkcs();
  165. TRACE(__LINE__,"CPReleaseContext TRUE: %d, %d",hProv,ulFlags);
  166. return TRUE;
  167. }
  168. /*------------------------------------------------------------------------
  169. CPGenKey
  170. -------------------------------------------------------------------------*/
  171. BOOL WINAPI
  172. CPGenKey(
  173.     IN  HCRYPTPROV hProv,
  174.     IN  ALG_ID uiAlgid,
  175.     IN  DWORD ulFlags,
  176.     OUT HCRYPTKEY *phKey)
  177. {
  178. TRACE(__LINE__,"CPGenKey NOT IMPLEMENTED",NULL);
  179. SetLastError(E_NOTIMPL);
  180. return FALSE;
  181.     
  182. }
  183. /*------------------------------------------------------------------------
  184. CPDeriveKey
  185. -------------------------------------------------------------------------*/
  186. BOOL WINAPI
  187. CPDeriveKey(
  188.     IN  HCRYPTPROV hProv,
  189.     IN  ALG_ID Algid,
  190.     IN  HCRYPTHASH hHash,
  191.     IN  DWORD dwFlags,
  192.     OUT HCRYPTKEY *phKey)
  193. {
  194. TRACE(__LINE__,"CPDeriveKey NOT IMPLEMENTED",NULL);
  195. SetLastError(E_NOTIMPL);
  196. return FALSE;
  197. }
  198. /*------------------------------------------------------------------------
  199. CPDestroyKey
  200. -------------------------------------------------------------------------*/
  201. BOOL WINAPI
  202. CPDestroyKey(
  203.     IN  HCRYPTPROV hProv,
  204.     IN  HCRYPTKEY hKey)
  205. {
  206. TRACE(__LINE__,"CPDestroyKey NOT IMPLEMENTED",NULL);
  207.     return CryptDestroyKey(hKey);
  208. }
  209. /*------------------------------------------------------------------------
  210. CPSetKeyParam
  211. -------------------------------------------------------------------------*/
  212. BOOL WINAPI
  213. CPSetKeyParam(
  214.     IN  HCRYPTPROV hProv,
  215.     IN  HCRYPTKEY hKey,
  216.     IN  DWORD ulParametre,
  217.     IN  CONST BYTE *pucData,
  218.     IN  DWORD ulFlags)
  219. {
  220. BOOL result;
  221. TRACE(__LINE__,"CPSetKeyParam BEGIN: %d %d %x %d %d",hProv,hKey,ulParametre,pucData,ulFlags);
  222. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  223. {
  224. SetLastError(NTE_BAD_UID);
  225. TRACE(__LINE__,"CPSetKeyParam ERROR: %d %d %x %d %d",hProv,hKey,ulParametre,pucData,ulFlags);
  226. return FALSE;
  227. }
  228. result=((HandleContainer*)hProv)->SetKeyParam(hKey, ulParametre, pucData, ulFlags);
  229. if(!result)
  230. {
  231. TRACE(__LINE__,"CPSetKeyParam ERROR: %d %d %x %d %d",hProv,hKey,ulParametre,pucData,ulFlags);
  232. return FALSE;
  233. }
  234. TRACE(__LINE__,"CPSetKeyParam TRUE: %d %d %x %d %d",hProv,hKey,ulParametre,pucData,ulFlags);
  235. return TRUE;
  236. }
  237.    
  238. /*------------------------------------------------------------------------
  239. CPGetKeyParam
  240. -------------------------------------------------------------------------*/
  241. BOOL WINAPI
  242. CPGetKeyParam(
  243.     IN  HCRYPTPROV hProv,
  244.     IN  HCRYPTKEY hKey,
  245.     IN  DWORD ulParametre,
  246.     OUT LPBYTE pucData,
  247.     IN OUT LPDWORD pulDataLen,
  248.     IN  DWORD ulFlags)
  249. {
  250. BOOL result;
  251. TRACE(__LINE__,"CPGetKeyParam BEGIN :%d %d %d %d %d %d",hProv,hKey,ulParametre,pucData,pulDataLen,ulFlags);
  252. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  253. {
  254. SetLastError(NTE_BAD_UID);
  255. TRACE(__LINE__,"CPGetKeyParam ERROR :%d %d %d %d %d %d",hProv,hKey,ulParametre,pucData,pulDataLen,ulFlags);
  256. return FALSE;
  257. }
  258. result= ((HandleContainer*)hProv)->GetKeyParam(hKey, ulParametre, pucData, pulDataLen, ulFlags);
  259. if(!result)
  260. {
  261. TRACE(__LINE__,"CPGetKeyParam ERROR :%d %d %d %d %d %d",hProv,hKey,ulParametre,pucData,pulDataLen,ulFlags);
  262. return FALSE;
  263. }
  264. TRACE(__LINE__,"CPGetKeyParam TRUE :%d %d %d %d %d %d",hProv,hKey,ulParametre,pucData,pulDataLen,ulFlags);
  265. return TRUE;
  266. }
  267. /*------------------------------------------------------------------------
  268. CPSetProvParam
  269. -------------------------------------------------------------------------*/
  270. BOOL WINAPI
  271. CPSetProvParam(
  272.     IN  HCRYPTPROV hProv,
  273.     IN  DWORD ulParametre,
  274.     IN  CONST BYTE *pucData,
  275.     IN  DWORD ulFlags)
  276. {
  277. TRACE(__LINE__,"CPSetProvParam NOT IMPLEMENTED",NULL);
  278. SetLastError(E_NOTIMPL);
  279. return FALSE;
  280. }
  281. /*------------------------------------------------------------------------
  282. CPGetProvParam
  283. -------------------------------------------------------------------------*/
  284. BOOL WINAPI
  285. CPGetProvParam(
  286.     IN  HCRYPTPROV hProv,
  287.     IN  DWORD ulParametre,
  288.     OUT LPBYTE pucData,
  289.     IN OUT LPDWORD pulDataLen,
  290.     IN  DWORD ulFlags)
  291. {
  292. TRACE(__LINE__,"CPGetProvParam BEGIN :%d,%d;%d,%d,%d",hProv,ulParametre,pucData,pulDataLen,ulFlags);
  293. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  294. {
  295. SetLastError(NTE_BAD_UID);
  296. TRACE(__LINE__,"CPGetProvParam ERROR :%d,%d;%d,%d,%d",hProv,ulParametre,pucData,pulDataLen,ulFlags);
  297. return FALSE;
  298. }
  299. TRACE(__LINE__,"CPGetProvParam TRUE :%d,%d;%d,%d,%d",hProv,ulParametre,pucData,pulDataLen,ulFlags);
  300. return ((HandleContainer*)hProv)->GetProvParam(ulParametre, pucData, pulDataLen, ulFlags);
  301. }
  302. /*------------------------------------------------------------------------
  303. CPSetHashParam
  304. -------------------------------------------------------------------------*/
  305. BOOL WINAPI
  306. CPSetHashParam(
  307.     IN  HCRYPTPROV hProv,
  308.     IN  HCRYPTHASH hHash,
  309.     IN  DWORD ulParametre,
  310.     IN  BYTE *pucData,
  311.     IN  DWORD ulFlags)
  312. {
  313. TRACE(__LINE__,"CPSetHashParam BEGIN : %d %d %d %d %d",hProv,hHash,ulParametre,pucData,ulFlags);
  314. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  315. {
  316. SetLastError(NTE_BAD_UID);
  317. TRACE(__LINE__,"CPSetHashParam ERROR : %d %d %d %d %d",hProv,hHash,ulParametre,pucData,ulFlags);
  318. return FALSE;
  319. }
  320. TRACE(__LINE__,"CPSetHashParam TRUE : %d %d %d %d %d",hProv,hHash,ulParametre,pucData,ulFlags);
  321. return ((HandleContainer*)hProv)->SetHashParam(hHash, ulParametre, pucData, ulFlags);
  322. }
  323. /*------------------------------------------------------------------------
  324. CPGetHashParam
  325. -------------------------------------------------------------------------*/
  326. BOOL WINAPI
  327. CPGetHashParam(
  328.     IN  HCRYPTPROV hProv,
  329.     IN  HCRYPTHASH hHash,
  330.     IN  DWORD ulParametre,
  331.     OUT LPBYTE pucData,
  332.     IN OUT LPDWORD pulDataLen,
  333.     IN  DWORD ulFlags)
  334. {
  335. TRACE(__LINE__,"CPSetHashParam BEGIN : %d %d %d %d %d %d",hProv,hHash,ulParametre,pucData,pulDataLen,ulFlags);
  336. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  337. {
  338. SetLastError(NTE_BAD_UID);
  339. TRACE(__LINE__,"CPSetHashParam ERROR : %d %d %d %d %d %d",hProv,hHash,ulParametre,pucData,pulDataLen,ulFlags);
  340. return FALSE;
  341. }
  342. TRACE(__LINE__,"CPSetHashParam TRUE : %d %d %d %d %d %d",hProv,hHash,ulParametre,pucData,pulDataLen,ulFlags);
  343. return ((HandleContainer*)hProv)->GetHashParam(hHash, ulParametre, pucData, pulDataLen, ulFlags);
  344. }
  345. /*------------------------------------------------------------------------
  346. CPExportKey
  347. -------------------------------------------------------------------------*/
  348. BOOL WINAPI
  349. CPExportKey(
  350.     IN  HCRYPTPROV hProv,
  351.     IN  HCRYPTKEY hKey,
  352.     IN  HCRYPTKEY hPubKey,
  353.     IN  DWORD ulBlobType,
  354.     IN  DWORD ulFlags,
  355.     OUT LPBYTE pucData,
  356.     IN OUT LPDWORD pulDataLen)
  357. {
  358. TRACE(__LINE__,"CPExportKey NOT IMPLEMENTED",NULL);
  359. SetLastError(E_NOTIMPL);
  360. return FALSE;
  361. }
  362. /*------------------------------------------------------------------------
  363. CPImportKey
  364. -------------------------------------------------------------------------*/
  365. BOOL WINAPI
  366. CPImportKey(
  367.     IN  HCRYPTPROV hProv,
  368.     IN  CONST BYTE *pucData,
  369.     IN  DWORD pulDataLen,
  370.     IN  HCRYPTKEY hPubKey,
  371.     IN  DWORD ulFlags,
  372.     OUT HCRYPTKEY *phKey)
  373. {
  374. TRACE(__LINE__,"CPImportKey BEGIN : %d %d %d %d %d %d",hProv,pucData,pulDataLen,hPubKey,ulFlags,phKey);
  375. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  376. {
  377. SetLastError(NTE_BAD_UID);
  378. TRACE(__LINE__,"CPImportKey ERROR : %d %d %d %d %d %d",hProv,pucData,pulDataLen,hPubKey,ulFlags,phKey);
  379. return FALSE;
  380. }
  381. //
  382. TRACE(__LINE__,"CPImportKey TRUE : %d %d %d %d %d %d",hProv,pucData,pulDataLen,hPubKey,ulFlags,phKey);
  383. return ((HandleContainer*)hProv)->ImportKey((unsigned char * )pucData, pulDataLen, hPubKey, ulFlags, phKey);
  384. }
  385. /*------------------------------------------------------------------------
  386. CPEncrypt
  387. -------------------------------------------------------------------------*/
  388. BOOL WINAPI
  389. CPEncrypt(
  390.     IN  HCRYPTPROV hProv,
  391.     IN  HCRYPTKEY hKey,
  392.     IN  HCRYPTHASH hHash,
  393.     IN  BOOL fFinal,
  394.     IN  DWORD dwFlags,
  395.     IN OUT LPBYTE pbData,
  396.     IN OUT LPDWORD pcbDataLen,
  397.     IN  DWORD cbBufLen)
  398. {
  399. TRACE(__LINE__,"CPEncrypt BEGIN : %d %d %d %d %d %d %d %d",hProv,hKey,hHash,fFinal,dwFlags,pbData,pcbDataLen,cbBufLen );
  400. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  401. {
  402. SetLastError(NTE_BAD_UID);
  403. TRACE(__LINE__,"CPEncrypt ERROR: %d %d %d %d %d %d %d %d",hProv,hKey,hHash,fFinal,dwFlags,pbData,pcbDataLen,cbBufLen );
  404. return FALSE;
  405. }
  406. TRACE(__LINE__,"CPEncrypt TRUE : %d %d %d %d %d %d %d %d",hProv,hKey,hHash,fFinal,dwFlags,pbData,pcbDataLen,cbBufLen );
  407. return ((HandleContainer*)hProv)->Encrypt(hKey, hHash, fFinal, dwFlags, pbData, pcbDataLen, cbBufLen);
  408. }
  409. /*------------------------------------------------------------------------
  410. CPDecrypt
  411. -------------------------------------------------------------------------*/
  412. BOOL WINAPI
  413. CPDecrypt(
  414.     IN  HCRYPTPROV hProv,
  415.     IN  HCRYPTKEY hKey,
  416.     IN  HCRYPTHASH hHash,
  417.     IN  BOOL fFinal,
  418.     IN  DWORD dwFlags,
  419.     IN OUT LPBYTE pbData,
  420.     IN OUT LPDWORD pcbDataLen)
  421. {
  422. BOOL result;
  423. LPBYTE pbKeyMaterial  = NULL;
  424.    
  425. TRACE(__LINE__,"CPDecrypt BEGIN : %d %d %d %d %d %d %d",hProv,hKey,hHash,fFinal,dwFlags,pbData,pcbDataLen);
  426. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  427. {
  428. SetLastError(NTE_BAD_UID);
  429. TRACE(__LINE__,"CPDecrypt ERROR : %d %d %d %d %d %d %d",hProv,hKey,hHash,fFinal,dwFlags,pbData,pcbDataLen);
  430. return FALSE;
  431. }
  432. result=((HandleContainer*)hProv)->Decrypt(hKey, hHash, fFinal, dwFlags, pbData, pcbDataLen);
  433. if(!result)
  434. {
  435. TRACE(__LINE__,"CPDecrypt ERROR : %d %d %d %d %d %d %d error:%xn",hProv,hKey,hHash,fFinal,dwFlags,pbData,pcbDataLen,GetLastError());
  436. return FALSE;
  437. }
  438. TRACE(__LINE__,"CPDecrypt TRUE : %d %d %d %d %d %d %d",hProv,hKey,hHash,fFinal,dwFlags,pbData,pcbDataLen);
  439. return TRUE;
  440. }
  441. /*------------------------------------------------------------------------
  442. CPCreateHash
  443. -------------------------------------------------------------------------*/
  444. BOOL WINAPI
  445. CPCreateHash(
  446.     IN  HCRYPTPROV hProv,
  447.     IN  ALG_ID Algid,
  448.     IN  HCRYPTKEY hKey,
  449.     IN  DWORD dwFlags,
  450.     OUT HCRYPTHASH *phHash)
  451. {
  452. TRACE(__LINE__,"CPCreateHash BEGIN :%d %d %d %d %d",hProv,Algid,hKey,dwFlags,phHash);
  453. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  454. {
  455. SetLastError(NTE_BAD_UID);
  456. TRACE(__LINE__,"CPCreateHash ERROR :%d %d %d %d %d",hProv,Algid,hKey,dwFlags,phHash);
  457. return FALSE;
  458. }
  459. TRACE(__LINE__,"CPCreateHash TRUE :%d %d %d %d %d",hProv,Algid,hKey,dwFlags,phHash);
  460. return ((HandleContainer*)hProv)->CreateHash(Algid, hKey, dwFlags, phHash);
  461. }
  462. /*------------------------------------------------------------------------
  463. CPHashData
  464. -------------------------------------------------------------------------*/
  465. BOOL WINAPI
  466. CPHashData(
  467.     IN  HCRYPTPROV hProv,
  468.     IN  HCRYPTHASH hHash,
  469.     IN  CONST BYTE *pbData,
  470.     IN  DWORD cbDataLen,
  471.     IN  DWORD dwFlags)
  472. {
  473. TRACE(__LINE__,"CPHashData BEGIN : %d %d %d %d %d",hProv,hHash,pbData,cbDataLen,dwFlags);
  474. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  475. {
  476. SetLastError(NTE_BAD_UID);
  477. TRACE(__LINE__,"CPHashData ERROR : %d %d %d %d %d",hProv,hHash,pbData,cbDataLen,dwFlags);
  478. return FALSE;
  479. }
  480. TRACE(__LINE__,"CPHashData TRUE : %d %d %d %d %d",hProv,hHash,pbData,cbDataLen,dwFlags);
  481. return ((HandleContainer*)hProv)->HashData(hHash, pbData, cbDataLen, dwFlags);
  482. }
  483. /*------------------------------------------------------------------------
  484. CPHashSessionKey
  485. -------------------------------------------------------------------------*/
  486. BOOL WINAPI
  487. CPHashSessionKey(
  488.     IN  HCRYPTPROV hProv,
  489.     IN  HCRYPTHASH hHash,
  490.     IN  HCRYPTKEY hKey,
  491.     IN  DWORD dwFlags)
  492. {
  493. TRACE(__LINE__,"CPHashSessionKey NOT IMPLEMENTED",NULL);
  494. SetLastError(E_NOTIMPL);
  495. return FALSE;
  496. }
  497. /*------------------------------------------------------------------------
  498. CPSignHash
  499. -------------------------------------------------------------------------*/
  500. BOOL WINAPI
  501. CPSignHash(
  502.     IN  HCRYPTPROV hProv,
  503.     IN  HCRYPTHASH hHash,
  504.     IN  DWORD dwKeySpec,
  505.     IN  LPCWSTR szDescription,
  506.     IN  DWORD dwFlags,
  507.     OUT LPBYTE pbSignature,
  508.     IN OUT LPDWORD pcbSigLen)
  509. {
  510. TRACE(__LINE__,"CPSignHash BEGIN : %d %d %d %d %d %d %d",hProv,hHash,dwKeySpec,szDescription,dwFlags,pbSignature,pcbSigLen);
  511.     if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  512. {
  513. SetLastError(NTE_BAD_UID);
  514. TRACE(__LINE__,"CPSignHash ERROR : %d %d %d %d %d %d %d",hProv,hHash,dwKeySpec,szDescription,dwFlags,pbSignature,pcbSigLen);
  515. return FALSE;
  516. }
  517. TRACE(__LINE__,"CPSignHash TRUE : %d %d %d %d %d %d %d",hProv,hHash,dwKeySpec,szDescription,dwFlags,pbSignature,pcbSigLen);
  518. return ((HandleContainer*)hProv)->SignHash(hHash,dwKeySpec,szDescription,dwFlags,pbSignature, pcbSigLen);
  519.    
  520. }
  521. /*------------------------------------------------------------------------
  522. CPDestroyHash
  523. -------------------------------------------------------------------------*/
  524. BOOL WINAPI
  525. CPDestroyHash(
  526.     IN  HCRYPTPROV hProv,
  527.     IN  HCRYPTHASH hHash)
  528. {
  529. TRACE(__LINE__,"CPDestryHash BEGIN : %d %d",hProv,hHash);
  530. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  531. {
  532. SetLastError(NTE_BAD_UID);
  533. TRACE(__LINE__,"CPDestryHash ERROR : %d %d",hProv,hHash);
  534. return FALSE;
  535. }
  536. TRACE(__LINE__,"CPDestryHash TRUE : %d %d",hProv,hHash);
  537. return ((HandleContainer*)hProv)->DestroyHash(hHash);
  538. }
  539. /*------------------------------------------------------------------------
  540. CPVerifySignature
  541. -------------------------------------------------------------------------*/
  542. BOOL WINAPI
  543. CPVerifySignature(
  544.     IN  HCRYPTPROV hProv,
  545.     IN  HCRYPTHASH hHash,
  546.     IN  CONST BYTE *pbSignature,
  547.     IN  DWORD cbSigLen,
  548.     IN  HCRYPTKEY hPubKey,
  549.     IN  LPCTSTR szDescription,
  550.     IN  DWORD dwFlags)
  551. {
  552. TRACE(__LINE__,"CPVerifySignature BEGIN : %d %d %d %d %d %d %d",hProv,hHash,pbSignature,cbSigLen,hPubKey,szDescription,dwFlags);
  553. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  554. {
  555. SetLastError(NTE_BAD_UID);
  556. TRACE(__LINE__,"CPVerifySignature ERROR : %d %d %d %d %d %d %d",hProv,hHash,pbSignature,cbSigLen,hPubKey,szDescription,dwFlags);
  557. return FALSE;
  558. }
  559. TRACE(__LINE__,"CPVerifySignature TRUE : %d %d %d %d %d %d %d",hProv,hHash,pbSignature,cbSigLen,hPubKey,szDescription,dwFlags);
  560. return ((HandleContainer*)hProv)->VerifySignature(hHash, pbSignature, cbSigLen, hPubKey, szDescription, dwFlags);
  561. }
  562. /*------------------------------------------------------------------------
  563. CPGenRandom
  564. -------------------------------------------------------------------------*/
  565. BOOL WINAPI
  566. CPGenRandom(
  567.     IN  HCRYPTPROV hProv,
  568.     IN  DWORD cbLen,
  569.     OUT LPBYTE pbBuffer)
  570. {
  571. TRACE(__LINE__,"CPGenRandom NOT IMPLEMENTED",NULL);
  572.   SetLastError(E_NOTIMPL);
  573. return FALSE;
  574. }
  575. /*------------------------------------------------------------------------
  576. CPGetUserKey
  577. -------------------------------------------------------------------------*/
  578. BOOL WINAPI
  579. CPGetUserKey(
  580.     IN  HCRYPTPROV hProv,
  581.     IN  DWORD dwKeySpec,
  582.     OUT HCRYPTKEY *phUserKey)
  583. {
  584. TRACE(__LINE__,"CPGetUserKey BEGIN : %d %d %d",hProv,dwKeySpec,phUserKey);
  585. if(!HandleContainer::VerifyHandleContainer((HandleContainer*)hProv))
  586. {
  587. SetLastError(NTE_BAD_UID);
  588. TRACE(__LINE__,"CPGetUserKey ERROR : %d %d %d",hProv,dwKeySpec,phUserKey);
  589. return FALSE;
  590. }
  591. ((HandleContainer*)hProv)->GetUserKey(dwKeySpec,phUserKey);
  592. TRACE(__LINE__,"CPGetUserKey TRUE : %d %d %d",hProv,dwKeySpec,phUserKey);
  593.     return TRUE;
  594. }