PageRenderTime 57ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 1ms

/security/nss/lib/pk11wrap/debug_module.c

http://github.com/zpao/v8monkey
C | 2765 lines | 2515 code | 191 blank | 59 comment | 69 complexity | 63f8023c3ca2eeba4114bd52dbfae15b MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, LGPL-3.0, AGPL-1.0, LGPL-2.1, BSD-3-Clause, GPL-2.0, JSON, Apache-2.0, 0BSD
  1. /* ***** BEGIN LICENSE BLOCK *****
  2. * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3. *
  4. * The contents of this file are subject to the Mozilla Public License Version
  5. * 1.1 (the "License"); you may not use this file except in compliance with
  6. * the License. You may obtain a copy of the License at
  7. * http://www.mozilla.org/MPL/
  8. *
  9. * Software distributed under the License is distributed on an "AS IS" basis,
  10. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11. * for the specific language governing rights and limitations under the
  12. * License.
  13. *
  14. * The Original Code is the Netscape security libraries.
  15. *
  16. * The Initial Developer of the Original Code is
  17. * Netscape Communications Corporation.
  18. * Portions created by the Initial Developer are Copyright (C) 1994-2000
  19. * the Initial Developer. All Rights Reserved.
  20. *
  21. * Contributor(s):
  22. *
  23. * Alternatively, the contents of this file may be used under the terms of
  24. * either the GNU General Public License Version 2 or later (the "GPL"), or
  25. * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26. * in which case the provisions of the GPL or the LGPL are applicable instead
  27. * of those above. If you wish to allow use of your version of this file only
  28. * under the terms of either the GPL or the LGPL, and not to allow others to
  29. * use your version of this file under the terms of the MPL, indicate your
  30. * decision by deleting the provisions above and replace them with the notice
  31. * and other provisions required by the GPL or the LGPL. If you do not delete
  32. * the provisions above, a recipient may use your version of this file under
  33. * the terms of any one of the MPL, the GPL or the LGPL.
  34. *
  35. * ***** END LICENSE BLOCK ***** */
  36. #include "prlog.h"
  37. #include <stdio.h>
  38. #include "cert.h" /* for CERT_DerNameToAscii & CERT_Hexify */
  39. static PRLogModuleInfo *modlog = NULL;
  40. static CK_FUNCTION_LIST_PTR module_functions;
  41. static CK_FUNCTION_LIST debug_functions;
  42. static void print_final_statistics(void);
  43. #define STRING static const char
  44. STRING fmt_flags[] = " flags = 0x%x";
  45. STRING fmt_hKey[] = " hKey = 0x%x";
  46. STRING fmt_hObject[] = " hObject = 0x%x";
  47. STRING fmt_hSession[] = " hSession = 0x%x";
  48. STRING fmt_manufacturerID[] = " manufacturerID = \"%.32s\"";
  49. STRING fmt_pData[] = " pData = 0x%p";
  50. STRING fmt_pDigest[] = " pDigest = 0x%p";
  51. STRING fmt_pEncryptedData[] = " pEncryptedData = 0x%p";
  52. STRING fmt_pEncryptedPart[] = " pEncryptedPart = 0x%p";
  53. STRING fmt_pInfo[] = " pInfo = 0x%p";
  54. STRING fmt_pMechanism[] = " pMechanism = 0x%p";
  55. STRING fmt_pOperationState[] = " pOperationState = 0x%p";
  56. STRING fmt_pPart[] = " pPart = 0x%p";
  57. STRING fmt_pPin[] = " pPin = 0x%p";
  58. STRING fmt_pSignature[] = " pSignature = 0x%p";
  59. STRING fmt_pTemplate[] = " pTemplate = 0x%p";
  60. STRING fmt_pWrappedKey[] = " pWrappedKey = 0x%p";
  61. STRING fmt_phKey[] = " phKey = 0x%p";
  62. STRING fmt_phObject[] = " phObject = 0x%p";
  63. STRING fmt_pulCount[] = " pulCount = 0x%p";
  64. STRING fmt_pulDataLen[] = " pulDataLen = 0x%p";
  65. STRING fmt_pulDigestLen[] = " pulDigestLen = 0x%p";
  66. STRING fmt_pulEncryptedPartLen[] = " pulEncryptedPartLen = 0x%p";
  67. STRING fmt_pulPartLen[] = " pulPartLen = 0x%p";
  68. STRING fmt_pulSignatureLen[] = " pulSignatureLen = 0x%p";
  69. STRING fmt_slotID[] = " slotID = 0x%x";
  70. STRING fmt_sphKey[] = " *phKey = 0x%x";
  71. STRING fmt_spulCount[] = " *pulCount = 0x%x";
  72. STRING fmt_spulDataLen[] = " *pulDataLen = 0x%x";
  73. STRING fmt_spulDigestLen[] = " *pulDigestLen = 0x%x";
  74. STRING fmt_spulEncryptedPartLen[] = " *pulEncryptedPartLen = 0x%x";
  75. STRING fmt_spulPartLen[] = " *pulPartLen = 0x%x";
  76. STRING fmt_spulSignatureLen[] = " *pulSignatureLen = 0x%x";
  77. STRING fmt_ulAttributeCount[] = " ulAttributeCount = %d";
  78. STRING fmt_ulCount[] = " ulCount = %d";
  79. STRING fmt_ulDataLen[] = " ulDataLen = %d";
  80. STRING fmt_ulEncryptedPartLen[] = " ulEncryptedPartLen = %d";
  81. STRING fmt_ulPartLen[] = " ulPartLen = %d";
  82. STRING fmt_ulPinLen[] = " ulPinLen = %d";
  83. STRING fmt_ulSignatureLen[] = " ulSignatureLen = %d";
  84. STRING fmt_fwVersion[] = " firmware version: %d.%d";
  85. STRING fmt_hwVersion[] = " hardware version: %d.%d";
  86. STRING fmt_s_qsq_d[] = " %s = \"%s\" [%d]";
  87. STRING fmt_s_s_d[] = " %s = %s [%d]";
  88. STRING fmt_s_lu[] = " %s = %lu";
  89. STRING fmt_invalid_handle[] = " (CK_INVALID_HANDLE)";
  90. static void get_attr_type_str(CK_ATTRIBUTE_TYPE atype, char *str, int len)
  91. {
  92. #define CASE(attr) case attr: a = #attr ; break
  93. const char * a = NULL;
  94. switch (atype) {
  95. CASE(CKA_CLASS);
  96. CASE(CKA_TOKEN);
  97. CASE(CKA_PRIVATE);
  98. CASE(CKA_LABEL);
  99. CASE(CKA_APPLICATION);
  100. CASE(CKA_VALUE);
  101. CASE(CKA_OBJECT_ID);
  102. CASE(CKA_CERTIFICATE_TYPE);
  103. CASE(CKA_CERTIFICATE_CATEGORY);
  104. CASE(CKA_ISSUER);
  105. CASE(CKA_SERIAL_NUMBER);
  106. CASE(CKA_AC_ISSUER);
  107. CASE(CKA_OWNER);
  108. CASE(CKA_ATTR_TYPES);
  109. CASE(CKA_TRUSTED);
  110. CASE(CKA_KEY_TYPE);
  111. CASE(CKA_SUBJECT);
  112. CASE(CKA_ID);
  113. CASE(CKA_SENSITIVE);
  114. CASE(CKA_ENCRYPT);
  115. CASE(CKA_DECRYPT);
  116. CASE(CKA_WRAP);
  117. CASE(CKA_UNWRAP);
  118. CASE(CKA_SIGN);
  119. CASE(CKA_SIGN_RECOVER);
  120. CASE(CKA_VERIFY);
  121. CASE(CKA_VERIFY_RECOVER);
  122. CASE(CKA_DERIVE);
  123. CASE(CKA_START_DATE);
  124. CASE(CKA_END_DATE);
  125. CASE(CKA_MODULUS);
  126. CASE(CKA_MODULUS_BITS);
  127. CASE(CKA_PUBLIC_EXPONENT);
  128. CASE(CKA_PRIVATE_EXPONENT);
  129. CASE(CKA_PRIME_1);
  130. CASE(CKA_PRIME_2);
  131. CASE(CKA_EXPONENT_1);
  132. CASE(CKA_EXPONENT_2);
  133. CASE(CKA_COEFFICIENT);
  134. CASE(CKA_PRIME);
  135. CASE(CKA_SUBPRIME);
  136. CASE(CKA_BASE);
  137. CASE(CKA_PRIME_BITS);
  138. CASE(CKA_SUBPRIME_BITS);
  139. CASE(CKA_VALUE_BITS);
  140. CASE(CKA_VALUE_LEN);
  141. CASE(CKA_EXTRACTABLE);
  142. CASE(CKA_LOCAL);
  143. CASE(CKA_NEVER_EXTRACTABLE);
  144. CASE(CKA_ALWAYS_SENSITIVE);
  145. CASE(CKA_KEY_GEN_MECHANISM);
  146. CASE(CKA_MODIFIABLE);
  147. CASE(CKA_ECDSA_PARAMS);
  148. CASE(CKA_EC_POINT);
  149. CASE(CKA_SECONDARY_AUTH);
  150. CASE(CKA_AUTH_PIN_FLAGS);
  151. CASE(CKA_HW_FEATURE_TYPE);
  152. CASE(CKA_RESET_ON_INIT);
  153. CASE(CKA_HAS_RESET);
  154. CASE(CKA_VENDOR_DEFINED);
  155. CASE(CKA_NSS_URL);
  156. CASE(CKA_NSS_EMAIL);
  157. CASE(CKA_NSS_SMIME_INFO);
  158. CASE(CKA_NSS_SMIME_TIMESTAMP);
  159. CASE(CKA_NSS_PKCS8_SALT);
  160. CASE(CKA_NSS_PASSWORD_CHECK);
  161. CASE(CKA_NSS_EXPIRES);
  162. CASE(CKA_NSS_KRL);
  163. CASE(CKA_NSS_PQG_COUNTER);
  164. CASE(CKA_NSS_PQG_SEED);
  165. CASE(CKA_NSS_PQG_H);
  166. CASE(CKA_NSS_PQG_SEED_BITS);
  167. CASE(CKA_TRUST);
  168. CASE(CKA_TRUST_DIGITAL_SIGNATURE);
  169. CASE(CKA_TRUST_NON_REPUDIATION);
  170. CASE(CKA_TRUST_KEY_ENCIPHERMENT);
  171. CASE(CKA_TRUST_DATA_ENCIPHERMENT);
  172. CASE(CKA_TRUST_KEY_AGREEMENT);
  173. CASE(CKA_TRUST_KEY_CERT_SIGN);
  174. CASE(CKA_TRUST_CRL_SIGN);
  175. CASE(CKA_TRUST_SERVER_AUTH);
  176. CASE(CKA_TRUST_CLIENT_AUTH);
  177. CASE(CKA_TRUST_CODE_SIGNING);
  178. CASE(CKA_TRUST_EMAIL_PROTECTION);
  179. CASE(CKA_TRUST_IPSEC_END_SYSTEM);
  180. CASE(CKA_TRUST_IPSEC_TUNNEL);
  181. CASE(CKA_TRUST_IPSEC_USER);
  182. CASE(CKA_TRUST_TIME_STAMPING);
  183. CASE(CKA_CERT_SHA1_HASH);
  184. CASE(CKA_CERT_MD5_HASH);
  185. CASE(CKA_NETSCAPE_DB);
  186. CASE(CKA_NETSCAPE_TRUST);
  187. default: break;
  188. }
  189. if (a)
  190. PR_snprintf(str, len, "%s", a);
  191. else
  192. PR_snprintf(str, len, "0x%p", atype);
  193. }
  194. static void get_obj_class(CK_OBJECT_CLASS objClass, char *str, int len)
  195. {
  196. const char * a = NULL;
  197. switch (objClass) {
  198. CASE(CKO_DATA);
  199. CASE(CKO_CERTIFICATE);
  200. CASE(CKO_PUBLIC_KEY);
  201. CASE(CKO_PRIVATE_KEY);
  202. CASE(CKO_SECRET_KEY);
  203. CASE(CKO_HW_FEATURE);
  204. CASE(CKO_DOMAIN_PARAMETERS);
  205. CASE(CKO_NSS_CRL);
  206. CASE(CKO_NSS_SMIME);
  207. CASE(CKO_NSS_TRUST);
  208. CASE(CKO_NSS_BUILTIN_ROOT_LIST);
  209. default: break;
  210. }
  211. if (a)
  212. PR_snprintf(str, len, "%s", a);
  213. else
  214. PR_snprintf(str, len, "0x%p", objClass);
  215. }
  216. static void get_trust_val(CK_TRUST trust, char *str, int len)
  217. {
  218. const char * a = NULL;
  219. switch (trust) {
  220. CASE(CKT_NSS_TRUSTED);
  221. CASE(CKT_NSS_TRUSTED_DELEGATOR);
  222. CASE(CKT_NSS_NOT_TRUSTED);
  223. CASE(CKT_NSS_MUST_VERIFY_TRUST);
  224. CASE(CKT_NSS_TRUST_UNKNOWN);
  225. CASE(CKT_NSS_VALID_DELEGATOR);
  226. default: break;
  227. }
  228. if (a)
  229. PR_snprintf(str, len, "%s", a);
  230. else
  231. PR_snprintf(str, len, "0x%p", trust);
  232. }
  233. static void log_rv(CK_RV rv)
  234. {
  235. const char * a = NULL;
  236. switch (rv) {
  237. CASE(CKR_OK);
  238. CASE(CKR_CANCEL);
  239. CASE(CKR_HOST_MEMORY);
  240. CASE(CKR_SLOT_ID_INVALID);
  241. CASE(CKR_GENERAL_ERROR);
  242. CASE(CKR_FUNCTION_FAILED);
  243. CASE(CKR_ARGUMENTS_BAD);
  244. CASE(CKR_NO_EVENT);
  245. CASE(CKR_NEED_TO_CREATE_THREADS);
  246. CASE(CKR_CANT_LOCK);
  247. CASE(CKR_ATTRIBUTE_READ_ONLY);
  248. CASE(CKR_ATTRIBUTE_SENSITIVE);
  249. CASE(CKR_ATTRIBUTE_TYPE_INVALID);
  250. CASE(CKR_ATTRIBUTE_VALUE_INVALID);
  251. CASE(CKR_DATA_INVALID);
  252. CASE(CKR_DATA_LEN_RANGE);
  253. CASE(CKR_DEVICE_ERROR);
  254. CASE(CKR_DEVICE_MEMORY);
  255. CASE(CKR_DEVICE_REMOVED);
  256. CASE(CKR_ENCRYPTED_DATA_INVALID);
  257. CASE(CKR_ENCRYPTED_DATA_LEN_RANGE);
  258. CASE(CKR_FUNCTION_CANCELED);
  259. CASE(CKR_FUNCTION_NOT_PARALLEL);
  260. CASE(CKR_FUNCTION_NOT_SUPPORTED);
  261. CASE(CKR_KEY_HANDLE_INVALID);
  262. CASE(CKR_KEY_SIZE_RANGE);
  263. CASE(CKR_KEY_TYPE_INCONSISTENT);
  264. CASE(CKR_KEY_NOT_NEEDED);
  265. CASE(CKR_KEY_CHANGED);
  266. CASE(CKR_KEY_NEEDED);
  267. CASE(CKR_KEY_INDIGESTIBLE);
  268. CASE(CKR_KEY_FUNCTION_NOT_PERMITTED);
  269. CASE(CKR_KEY_NOT_WRAPPABLE);
  270. CASE(CKR_KEY_UNEXTRACTABLE);
  271. CASE(CKR_MECHANISM_INVALID);
  272. CASE(CKR_MECHANISM_PARAM_INVALID);
  273. CASE(CKR_OBJECT_HANDLE_INVALID);
  274. CASE(CKR_OPERATION_ACTIVE);
  275. CASE(CKR_OPERATION_NOT_INITIALIZED);
  276. CASE(CKR_PIN_INCORRECT);
  277. CASE(CKR_PIN_INVALID);
  278. CASE(CKR_PIN_LEN_RANGE);
  279. CASE(CKR_PIN_EXPIRED);
  280. CASE(CKR_PIN_LOCKED);
  281. CASE(CKR_SESSION_CLOSED);
  282. CASE(CKR_SESSION_COUNT);
  283. CASE(CKR_SESSION_HANDLE_INVALID);
  284. CASE(CKR_SESSION_PARALLEL_NOT_SUPPORTED);
  285. CASE(CKR_SESSION_READ_ONLY);
  286. CASE(CKR_SESSION_EXISTS);
  287. CASE(CKR_SESSION_READ_ONLY_EXISTS);
  288. CASE(CKR_SESSION_READ_WRITE_SO_EXISTS);
  289. CASE(CKR_SIGNATURE_INVALID);
  290. CASE(CKR_SIGNATURE_LEN_RANGE);
  291. CASE(CKR_TEMPLATE_INCOMPLETE);
  292. CASE(CKR_TEMPLATE_INCONSISTENT);
  293. CASE(CKR_TOKEN_NOT_PRESENT);
  294. CASE(CKR_TOKEN_NOT_RECOGNIZED);
  295. CASE(CKR_TOKEN_WRITE_PROTECTED);
  296. CASE(CKR_UNWRAPPING_KEY_HANDLE_INVALID);
  297. CASE(CKR_UNWRAPPING_KEY_SIZE_RANGE);
  298. CASE(CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT);
  299. CASE(CKR_USER_ALREADY_LOGGED_IN);
  300. CASE(CKR_USER_NOT_LOGGED_IN);
  301. CASE(CKR_USER_PIN_NOT_INITIALIZED);
  302. CASE(CKR_USER_TYPE_INVALID);
  303. CASE(CKR_USER_ANOTHER_ALREADY_LOGGED_IN);
  304. CASE(CKR_USER_TOO_MANY_TYPES);
  305. CASE(CKR_WRAPPED_KEY_INVALID);
  306. CASE(CKR_WRAPPED_KEY_LEN_RANGE);
  307. CASE(CKR_WRAPPING_KEY_HANDLE_INVALID);
  308. CASE(CKR_WRAPPING_KEY_SIZE_RANGE);
  309. CASE(CKR_WRAPPING_KEY_TYPE_INCONSISTENT);
  310. CASE(CKR_RANDOM_SEED_NOT_SUPPORTED);
  311. CASE(CKR_RANDOM_NO_RNG);
  312. CASE(CKR_DOMAIN_PARAMS_INVALID);
  313. CASE(CKR_BUFFER_TOO_SMALL);
  314. CASE(CKR_SAVED_STATE_INVALID);
  315. CASE(CKR_INFORMATION_SENSITIVE);
  316. CASE(CKR_STATE_UNSAVEABLE);
  317. CASE(CKR_CRYPTOKI_NOT_INITIALIZED);
  318. CASE(CKR_CRYPTOKI_ALREADY_INITIALIZED);
  319. CASE(CKR_MUTEX_BAD);
  320. CASE(CKR_MUTEX_NOT_LOCKED);
  321. CASE(CKR_FUNCTION_REJECTED);
  322. CASE(CKR_KEY_PARAMS_INVALID);
  323. default: break;
  324. }
  325. if (a)
  326. PR_LOG(modlog, 1, (" rv = %s\n", a));
  327. else
  328. PR_LOG(modlog, 1, (" rv = 0x%x\n", rv));
  329. }
  330. static void log_state(CK_STATE state)
  331. {
  332. const char * a = NULL;
  333. switch (state) {
  334. CASE(CKS_RO_PUBLIC_SESSION);
  335. CASE(CKS_RO_USER_FUNCTIONS);
  336. CASE(CKS_RW_PUBLIC_SESSION);
  337. CASE(CKS_RW_USER_FUNCTIONS);
  338. CASE(CKS_RW_SO_FUNCTIONS);
  339. default: break;
  340. }
  341. if (a)
  342. PR_LOG(modlog, 1, (" state = %s\n", a));
  343. else
  344. PR_LOG(modlog, 1, (" state = 0x%x\n", state));
  345. }
  346. static void log_handle(int level, const char * format, CK_ULONG handle)
  347. {
  348. char fmtBuf[80];
  349. if (handle)
  350. PR_LOG(modlog, level, (format, handle));
  351. else {
  352. PL_strncpyz(fmtBuf, format, sizeof fmtBuf);
  353. PL_strcatn(fmtBuf, sizeof fmtBuf, fmt_invalid_handle);
  354. PR_LOG(modlog, level, (fmtBuf, handle));
  355. }
  356. }
  357. static void print_mechanism(CK_MECHANISM_PTR m)
  358. {
  359. const char * a = NULL;
  360. switch (m->mechanism) {
  361. CASE(CKM_AES_CBC);
  362. CASE(CKM_AES_CBC_ENCRYPT_DATA);
  363. CASE(CKM_AES_CBC_PAD);
  364. CASE(CKM_AES_ECB);
  365. CASE(CKM_AES_ECB_ENCRYPT_DATA);
  366. CASE(CKM_AES_KEY_GEN);
  367. CASE(CKM_AES_MAC);
  368. CASE(CKM_AES_MAC_GENERAL);
  369. CASE(CKM_CAMELLIA_CBC);
  370. CASE(CKM_CAMELLIA_CBC_ENCRYPT_DATA);
  371. CASE(CKM_CAMELLIA_CBC_PAD);
  372. CASE(CKM_CAMELLIA_ECB);
  373. CASE(CKM_CAMELLIA_ECB_ENCRYPT_DATA);
  374. CASE(CKM_CAMELLIA_KEY_GEN);
  375. CASE(CKM_CAMELLIA_MAC);
  376. CASE(CKM_CAMELLIA_MAC_GENERAL);
  377. CASE(CKM_CDMF_CBC);
  378. CASE(CKM_CDMF_CBC_PAD);
  379. CASE(CKM_CDMF_ECB);
  380. CASE(CKM_CDMF_KEY_GEN);
  381. CASE(CKM_CDMF_MAC);
  382. CASE(CKM_CDMF_MAC_GENERAL);
  383. CASE(CKM_CMS_SIG);
  384. CASE(CKM_CONCATENATE_BASE_AND_DATA);
  385. CASE(CKM_CONCATENATE_BASE_AND_KEY);
  386. CASE(CKM_CONCATENATE_DATA_AND_BASE);
  387. CASE(CKM_DES2_KEY_GEN);
  388. CASE(CKM_DES3_CBC);
  389. CASE(CKM_DES3_CBC_ENCRYPT_DATA);
  390. CASE(CKM_DES3_CBC_PAD);
  391. CASE(CKM_DES3_ECB);
  392. CASE(CKM_DES3_ECB_ENCRYPT_DATA);
  393. CASE(CKM_DES3_KEY_GEN);
  394. CASE(CKM_DES3_MAC);
  395. CASE(CKM_DES3_MAC_GENERAL);
  396. CASE(CKM_DES_CBC);
  397. CASE(CKM_DES_CBC_ENCRYPT_DATA);
  398. CASE(CKM_DES_CBC_PAD);
  399. CASE(CKM_DES_CFB64);
  400. CASE(CKM_DES_CFB8);
  401. CASE(CKM_DES_ECB);
  402. CASE(CKM_DES_ECB_ENCRYPT_DATA);
  403. CASE(CKM_DES_KEY_GEN);
  404. CASE(CKM_DES_MAC);
  405. CASE(CKM_DES_MAC_GENERAL);
  406. CASE(CKM_DES_OFB64);
  407. CASE(CKM_DES_OFB8);
  408. CASE(CKM_DH_PKCS_DERIVE);
  409. CASE(CKM_DH_PKCS_KEY_PAIR_GEN);
  410. CASE(CKM_DH_PKCS_PARAMETER_GEN);
  411. CASE(CKM_DSA);
  412. CASE(CKM_DSA_KEY_PAIR_GEN);
  413. CASE(CKM_DSA_PARAMETER_GEN);
  414. CASE(CKM_DSA_SHA1);
  415. CASE(CKM_ECDH1_COFACTOR_DERIVE);
  416. CASE(CKM_ECDH1_DERIVE);
  417. CASE(CKM_ECDSA);
  418. CASE(CKM_ECDSA_SHA1);
  419. CASE(CKM_ECMQV_DERIVE);
  420. CASE(CKM_EC_KEY_PAIR_GEN); /* also CASE(CKM_ECDSA_KEY_PAIR_GEN); */
  421. CASE(CKM_EXTRACT_KEY_FROM_KEY);
  422. CASE(CKM_FASTHASH);
  423. CASE(CKM_FORTEZZA_TIMESTAMP);
  424. CASE(CKM_GENERIC_SECRET_KEY_GEN);
  425. CASE(CKM_IDEA_CBC);
  426. CASE(CKM_IDEA_CBC_PAD);
  427. CASE(CKM_IDEA_ECB);
  428. CASE(CKM_IDEA_KEY_GEN);
  429. CASE(CKM_IDEA_MAC);
  430. CASE(CKM_IDEA_MAC_GENERAL);
  431. CASE(CKM_KEA_KEY_DERIVE);
  432. CASE(CKM_KEA_KEY_PAIR_GEN);
  433. CASE(CKM_KEY_WRAP_LYNKS);
  434. CASE(CKM_KEY_WRAP_SET_OAEP);
  435. CASE(CKM_MD2);
  436. CASE(CKM_MD2_HMAC);
  437. CASE(CKM_MD2_HMAC_GENERAL);
  438. CASE(CKM_MD2_KEY_DERIVATION);
  439. CASE(CKM_MD2_RSA_PKCS);
  440. CASE(CKM_MD5);
  441. CASE(CKM_MD5_HMAC);
  442. CASE(CKM_MD5_HMAC_GENERAL);
  443. CASE(CKM_MD5_KEY_DERIVATION);
  444. CASE(CKM_MD5_RSA_PKCS);
  445. CASE(CKM_PBA_SHA1_WITH_SHA1_HMAC);
  446. CASE(CKM_PBE_MD2_DES_CBC);
  447. CASE(CKM_PBE_MD5_DES_CBC);
  448. CASE(CKM_PBE_SHA1_DES2_EDE_CBC);
  449. CASE(CKM_PBE_SHA1_DES3_EDE_CBC);
  450. CASE(CKM_PBE_SHA1_RC2_128_CBC);
  451. CASE(CKM_PBE_SHA1_RC2_40_CBC);
  452. CASE(CKM_PBE_SHA1_RC4_128);
  453. CASE(CKM_PBE_SHA1_RC4_40);
  454. CASE(CKM_PKCS5_PBKD2);
  455. CASE(CKM_RC2_CBC);
  456. CASE(CKM_RC2_CBC_PAD);
  457. CASE(CKM_RC2_ECB);
  458. CASE(CKM_RC2_KEY_GEN);
  459. CASE(CKM_RC2_MAC);
  460. CASE(CKM_RC2_MAC_GENERAL);
  461. CASE(CKM_RC4);
  462. CASE(CKM_RC4_KEY_GEN);
  463. CASE(CKM_RC5_CBC);
  464. CASE(CKM_RC5_CBC_PAD);
  465. CASE(CKM_RC5_ECB);
  466. CASE(CKM_RC5_KEY_GEN);
  467. CASE(CKM_RC5_MAC);
  468. CASE(CKM_RC5_MAC_GENERAL);
  469. CASE(CKM_RIPEMD128);
  470. CASE(CKM_RIPEMD128_HMAC);
  471. CASE(CKM_RIPEMD128_HMAC_GENERAL);
  472. CASE(CKM_RIPEMD128_RSA_PKCS);
  473. CASE(CKM_RIPEMD160);
  474. CASE(CKM_RIPEMD160_HMAC);
  475. CASE(CKM_RIPEMD160_HMAC_GENERAL);
  476. CASE(CKM_RIPEMD160_RSA_PKCS);
  477. CASE(CKM_RSA_9796);
  478. CASE(CKM_RSA_PKCS);
  479. CASE(CKM_RSA_PKCS_KEY_PAIR_GEN);
  480. CASE(CKM_RSA_PKCS_OAEP);
  481. CASE(CKM_RSA_PKCS_PSS);
  482. CASE(CKM_RSA_X9_31);
  483. CASE(CKM_RSA_X9_31_KEY_PAIR_GEN);
  484. CASE(CKM_RSA_X_509);
  485. CASE(CKM_SHA1_KEY_DERIVATION);
  486. CASE(CKM_SHA1_RSA_PKCS);
  487. CASE(CKM_SHA1_RSA_PKCS_PSS);
  488. CASE(CKM_SHA1_RSA_X9_31);
  489. CASE(CKM_SHA224);
  490. CASE(CKM_SHA224_HMAC);
  491. CASE(CKM_SHA224_HMAC_GENERAL);
  492. CASE(CKM_SHA224_KEY_DERIVATION);
  493. CASE(CKM_SHA224_RSA_PKCS);
  494. CASE(CKM_SHA224_RSA_PKCS_PSS);
  495. CASE(CKM_SHA256);
  496. CASE(CKM_SHA256_HMAC);
  497. CASE(CKM_SHA256_HMAC_GENERAL);
  498. CASE(CKM_SHA256_KEY_DERIVATION);
  499. CASE(CKM_SHA256_RSA_PKCS);
  500. CASE(CKM_SHA256_RSA_PKCS_PSS);
  501. CASE(CKM_SHA384);
  502. CASE(CKM_SHA384_HMAC);
  503. CASE(CKM_SHA384_HMAC_GENERAL);
  504. CASE(CKM_SHA384_KEY_DERIVATION);
  505. CASE(CKM_SHA384_RSA_PKCS);
  506. CASE(CKM_SHA384_RSA_PKCS_PSS);
  507. CASE(CKM_SHA512);
  508. CASE(CKM_SHA512_HMAC);
  509. CASE(CKM_SHA512_HMAC_GENERAL);
  510. CASE(CKM_SHA512_KEY_DERIVATION);
  511. CASE(CKM_SHA512_RSA_PKCS);
  512. CASE(CKM_SHA512_RSA_PKCS_PSS);
  513. CASE(CKM_SHA_1);
  514. CASE(CKM_SHA_1_HMAC);
  515. CASE(CKM_SHA_1_HMAC_GENERAL);
  516. CASE(CKM_SKIPJACK_CBC64);
  517. CASE(CKM_SKIPJACK_CFB16);
  518. CASE(CKM_SKIPJACK_CFB32);
  519. CASE(CKM_SKIPJACK_CFB64);
  520. CASE(CKM_SKIPJACK_CFB8);
  521. CASE(CKM_SKIPJACK_ECB64);
  522. CASE(CKM_SKIPJACK_KEY_GEN);
  523. CASE(CKM_SKIPJACK_OFB64);
  524. CASE(CKM_SKIPJACK_PRIVATE_WRAP);
  525. CASE(CKM_SKIPJACK_RELAYX);
  526. CASE(CKM_SKIPJACK_WRAP);
  527. CASE(CKM_SSL3_KEY_AND_MAC_DERIVE);
  528. CASE(CKM_SSL3_MASTER_KEY_DERIVE);
  529. CASE(CKM_SSL3_MASTER_KEY_DERIVE_DH);
  530. CASE(CKM_SSL3_MD5_MAC);
  531. CASE(CKM_SSL3_PRE_MASTER_KEY_GEN);
  532. CASE(CKM_SSL3_SHA1_MAC);
  533. CASE(CKM_TLS_KEY_AND_MAC_DERIVE);
  534. CASE(CKM_TLS_MASTER_KEY_DERIVE);
  535. CASE(CKM_TLS_MASTER_KEY_DERIVE_DH);
  536. CASE(CKM_TLS_PRE_MASTER_KEY_GEN);
  537. CASE(CKM_TLS_PRF);
  538. CASE(CKM_TWOFISH_CBC);
  539. CASE(CKM_TWOFISH_KEY_GEN);
  540. CASE(CKM_X9_42_DH_DERIVE);
  541. CASE(CKM_X9_42_DH_HYBRID_DERIVE);
  542. CASE(CKM_X9_42_DH_KEY_PAIR_GEN);
  543. CASE(CKM_X9_42_DH_PARAMETER_GEN);
  544. CASE(CKM_X9_42_MQV_DERIVE);
  545. CASE(CKM_XOR_BASE_AND_DATA);
  546. default: break;
  547. }
  548. if (a)
  549. PR_LOG(modlog, 4, (" mechanism = %s", a));
  550. else
  551. PR_LOG(modlog, 4, (" mechanism = 0x%p", m->mechanism));
  552. }
  553. static void get_key_type(CK_KEY_TYPE keyType, char *str, int len)
  554. {
  555. const char * a = NULL;
  556. switch (keyType) {
  557. CASE(CKK_AES);
  558. CASE(CKK_CAMELLIA);
  559. CASE(CKK_CDMF);
  560. CASE(CKK_DES);
  561. CASE(CKK_DES2);
  562. CASE(CKK_DES3);
  563. CASE(CKK_DH);
  564. CASE(CKK_DSA);
  565. CASE(CKK_EC); /* also CASE(CKK_ECDSA); */
  566. CASE(CKK_GENERIC_SECRET);
  567. CASE(CKK_IDEA);
  568. CASE(CKK_INVALID_KEY_TYPE);
  569. CASE(CKK_KEA);
  570. CASE(CKK_RC2);
  571. CASE(CKK_RC4);
  572. CASE(CKK_RC5);
  573. CASE(CKK_RSA);
  574. CASE(CKK_SKIPJACK);
  575. CASE(CKK_TWOFISH);
  576. CASE(CKK_X9_42_DH);
  577. default: break;
  578. }
  579. if (a)
  580. PR_snprintf(str, len, "%s", a);
  581. else
  582. PR_snprintf(str, len, "0x%p", keyType);
  583. }
  584. static void print_attr_value(CK_ATTRIBUTE_PTR attr)
  585. {
  586. char atype[48];
  587. char valstr[49];
  588. int len;
  589. get_attr_type_str(attr->type, atype, sizeof atype);
  590. switch (attr->type) {
  591. case CKA_ALWAYS_SENSITIVE:
  592. case CKA_DECRYPT:
  593. case CKA_DERIVE:
  594. case CKA_ENCRYPT:
  595. case CKA_EXTRACTABLE:
  596. case CKA_LOCAL:
  597. case CKA_MODIFIABLE:
  598. case CKA_NEVER_EXTRACTABLE:
  599. case CKA_PRIVATE:
  600. case CKA_SENSITIVE:
  601. case CKA_SIGN:
  602. case CKA_SIGN_RECOVER:
  603. case CKA_TOKEN:
  604. case CKA_UNWRAP:
  605. case CKA_VERIFY:
  606. case CKA_VERIFY_RECOVER:
  607. case CKA_WRAP:
  608. if (attr->ulValueLen > 0 && attr->pValue) {
  609. CK_BBOOL tf = *((CK_BBOOL *)attr->pValue);
  610. PR_LOG(modlog, 4, (fmt_s_s_d,
  611. atype, tf ? "CK_TRUE" : "CK_FALSE", attr->ulValueLen));
  612. break;
  613. }
  614. case CKA_CLASS:
  615. if (attr->ulValueLen > 0 && attr->pValue) {
  616. CK_OBJECT_CLASS objClass = *((CK_OBJECT_CLASS *)attr->pValue);
  617. get_obj_class(objClass, valstr, sizeof valstr);
  618. PR_LOG(modlog, 4, (fmt_s_s_d,
  619. atype, valstr, attr->ulValueLen));
  620. break;
  621. }
  622. case CKA_TRUST_CLIENT_AUTH:
  623. case CKA_TRUST_CODE_SIGNING:
  624. case CKA_TRUST_EMAIL_PROTECTION:
  625. case CKA_TRUST_SERVER_AUTH:
  626. if (attr->ulValueLen > 0 && attr->pValue) {
  627. CK_TRUST trust = *((CK_TRUST *)attr->pValue);
  628. get_trust_val(trust, valstr, sizeof valstr);
  629. PR_LOG(modlog, 4, (fmt_s_s_d,
  630. atype, valstr, attr->ulValueLen));
  631. break;
  632. }
  633. case CKA_KEY_TYPE:
  634. if (attr->ulValueLen > 0 && attr->pValue) {
  635. CK_KEY_TYPE keyType = *((CK_KEY_TYPE *)attr->pValue);
  636. get_key_type(keyType, valstr, sizeof valstr);
  637. PR_LOG(modlog, 4, (fmt_s_s_d,
  638. atype, valstr, attr->ulValueLen));
  639. break;
  640. }
  641. case CKA_PIXEL_X:
  642. case CKA_PIXEL_Y:
  643. case CKA_RESOLUTION:
  644. case CKA_CHAR_ROWS:
  645. case CKA_CHAR_COLUMNS:
  646. case CKA_BITS_PER_PIXEL:
  647. case CKA_CERTIFICATE_CATEGORY: /* should print as enum/string */
  648. case CKA_JAVA_MIDP_SECURITY_DOMAIN: /* should print as enum/string */
  649. case CKA_MODULUS_BITS:
  650. case CKA_PRIME_BITS:
  651. case CKA_SUBPRIME_BITS:
  652. case CKA_VALUE_BITS:
  653. case CKA_VALUE_LEN:
  654. if (attr->ulValueLen > 0 && attr->pValue) {
  655. CK_ULONG valueLen = *((CK_ULONG *)attr->pValue);
  656. /* XXX check for the special value CK_UNAVAILABLE_INFORMATION */
  657. PR_LOG(modlog, 4, (fmt_s_lu, atype, (PRUint32)valueLen));
  658. break;
  659. }
  660. case CKA_LABEL:
  661. case CKA_NSS_EMAIL:
  662. case CKA_NSS_URL:
  663. if (attr->ulValueLen > 0 && attr->pValue) {
  664. len = PR_MIN(attr->ulValueLen + 1, sizeof valstr);
  665. PR_snprintf(valstr, len, "%s", attr->pValue);
  666. PR_LOG(modlog, 4, (fmt_s_qsq_d,
  667. atype, valstr, attr->ulValueLen));
  668. break;
  669. }
  670. case CKA_ISSUER:
  671. case CKA_SUBJECT:
  672. if (attr->ulValueLen > 0 && attr->pValue) {
  673. char * asciiName;
  674. SECItem derName;
  675. derName.type = siDERNameBuffer;
  676. derName.data = attr->pValue;
  677. derName.len = attr->ulValueLen;
  678. asciiName = CERT_DerNameToAscii(&derName);
  679. if (asciiName) {
  680. PR_LOG(modlog, 4, (fmt_s_s_d,
  681. atype, asciiName, attr->ulValueLen));
  682. PORT_Free(asciiName);
  683. break;
  684. }
  685. /* else treat like a binary buffer */
  686. goto binary_buffer;
  687. }
  688. case CKA_ID:
  689. if (attr->ulValueLen > 0 && attr->pValue) {
  690. unsigned char * pV = attr->pValue;
  691. for (len = (int)attr->ulValueLen; len > 0; --len) {
  692. unsigned int ch = *pV++;
  693. if (ch >= 0x20 && ch < 0x7f)
  694. continue;
  695. if (!ch && len == 1) /* will ignore NUL if last character */
  696. continue;
  697. break;
  698. }
  699. if (!len) { /* entire string is printable */
  700. len = PR_MIN(attr->ulValueLen + 1, sizeof valstr);
  701. PR_snprintf(valstr, len, "%s", attr->pValue);
  702. PR_LOG(modlog, 4, (fmt_s_qsq_d,
  703. atype, valstr, attr->ulValueLen));
  704. break;
  705. }
  706. /* else fall through and treat like a binary buffer */
  707. }
  708. binary_buffer:
  709. case CKA_SERIAL_NUMBER:
  710. default:
  711. if (attr->ulValueLen > 0 && attr->pValue) {
  712. char * hexBuf;
  713. SECItem attrBuf;
  714. attrBuf.type = siDERNameBuffer;
  715. attrBuf.data = attr->pValue;
  716. attrBuf.len = PR_MIN(attr->ulValueLen, (sizeof valstr)/2);
  717. hexBuf = CERT_Hexify(&attrBuf, PR_FALSE);
  718. if (hexBuf) {
  719. PR_LOG(modlog, 4, (fmt_s_s_d,
  720. atype, hexBuf, attr->ulValueLen));
  721. PORT_Free(hexBuf);
  722. break;
  723. }
  724. /* else fall through and show only the address. :( */
  725. }
  726. PR_LOG(modlog, 4, (" %s = [0x%p] [%d]",
  727. atype, attr->pValue, attr->ulValueLen));
  728. break;
  729. }
  730. }
  731. static void print_template(CK_ATTRIBUTE_PTR templ, CK_ULONG tlen)
  732. {
  733. CK_ULONG i;
  734. for (i=0; i<tlen; i++) {
  735. print_attr_value(&templ[i]);
  736. }
  737. }
  738. struct nssdbg_prof_str {
  739. PRUint32 time;
  740. PRUint32 calls;
  741. char *function;
  742. };
  743. #define NSSDBG_DEFINE(func) { 0, 0, #func }
  744. struct nssdbg_prof_str nssdbg_prof_data[] = {
  745. #define FUNC_C_INITIALIZE 0
  746. NSSDBG_DEFINE(C_Initialize),
  747. #define FUNC_C_FINALIZE 1
  748. NSSDBG_DEFINE(C_Finalize),
  749. #define FUNC_C_GETINFO 2
  750. NSSDBG_DEFINE(C_GetInfo),
  751. #define FUNC_C_GETFUNCITONLIST 3
  752. NSSDBG_DEFINE(C_GetFunctionList),
  753. #define FUNC_C_GETSLOTLIST 4
  754. NSSDBG_DEFINE(C_GetSlotList),
  755. #define FUNC_C_GETSLOTINFO 5
  756. NSSDBG_DEFINE(C_GetSlotInfo),
  757. #define FUNC_C_GETTOKENINFO 6
  758. NSSDBG_DEFINE(C_GetTokenInfo),
  759. #define FUNC_C_GETMECHANISMLIST 7
  760. NSSDBG_DEFINE(C_GetMechanismList),
  761. #define FUNC_C_GETMECHANISMINFO 8
  762. NSSDBG_DEFINE(C_GetMechanismInfo),
  763. #define FUNC_C_INITTOKEN 9
  764. NSSDBG_DEFINE(C_InitToken),
  765. #define FUNC_C_INITPIN 10
  766. NSSDBG_DEFINE(C_InitPIN),
  767. #define FUNC_C_SETPIN 11
  768. NSSDBG_DEFINE(C_SetPIN),
  769. #define FUNC_C_OPENSESSION 12
  770. NSSDBG_DEFINE(C_OpenSession),
  771. #define FUNC_C_CLOSESESSION 13
  772. NSSDBG_DEFINE(C_CloseSession),
  773. #define FUNC_C_CLOSEALLSESSIONS 14
  774. NSSDBG_DEFINE(C_CloseAllSessions),
  775. #define FUNC_C_GETSESSIONINFO 15
  776. NSSDBG_DEFINE(C_GetSessionInfo),
  777. #define FUNC_C_GETOPERATIONSTATE 16
  778. NSSDBG_DEFINE(C_GetOperationState),
  779. #define FUNC_C_SETOPERATIONSTATE 17
  780. NSSDBG_DEFINE(C_SetOperationState),
  781. #define FUNC_C_LOGIN 18
  782. NSSDBG_DEFINE(C_Login),
  783. #define FUNC_C_LOGOUT 19
  784. NSSDBG_DEFINE(C_Logout),
  785. #define FUNC_C_CREATEOBJECT 20
  786. NSSDBG_DEFINE(C_CreateObject),
  787. #define FUNC_C_COPYOBJECT 21
  788. NSSDBG_DEFINE(C_CopyObject),
  789. #define FUNC_C_DESTROYOBJECT 22
  790. NSSDBG_DEFINE(C_DestroyObject),
  791. #define FUNC_C_GETOBJECTSIZE 23
  792. NSSDBG_DEFINE(C_GetObjectSize),
  793. #define FUNC_C_GETATTRIBUTEVALUE 24
  794. NSSDBG_DEFINE(C_GetAttributeValue),
  795. #define FUNC_C_SETATTRIBUTEVALUE 25
  796. NSSDBG_DEFINE(C_SetAttributeValue),
  797. #define FUNC_C_FINDOBJECTSINIT 26
  798. NSSDBG_DEFINE(C_FindObjectsInit),
  799. #define FUNC_C_FINDOBJECTS 27
  800. NSSDBG_DEFINE(C_FindObjects),
  801. #define FUNC_C_FINDOBJECTSFINAL 28
  802. NSSDBG_DEFINE(C_FindObjectsFinal),
  803. #define FUNC_C_ENCRYPTINIT 29
  804. NSSDBG_DEFINE(C_EncryptInit),
  805. #define FUNC_C_ENCRYPT 30
  806. NSSDBG_DEFINE(C_Encrypt),
  807. #define FUNC_C_ENCRYPTUPDATE 31
  808. NSSDBG_DEFINE(C_EncryptUpdate),
  809. #define FUNC_C_ENCRYPTFINAL 32
  810. NSSDBG_DEFINE(C_EncryptFinal),
  811. #define FUNC_C_DECRYPTINIT 33
  812. NSSDBG_DEFINE(C_DecryptInit),
  813. #define FUNC_C_DECRYPT 34
  814. NSSDBG_DEFINE(C_Decrypt),
  815. #define FUNC_C_DECRYPTUPDATE 35
  816. NSSDBG_DEFINE(C_DecryptUpdate),
  817. #define FUNC_C_DECRYPTFINAL 36
  818. NSSDBG_DEFINE(C_DecryptFinal),
  819. #define FUNC_C_DIGESTINIT 37
  820. NSSDBG_DEFINE(C_DigestInit),
  821. #define FUNC_C_DIGEST 38
  822. NSSDBG_DEFINE(C_Digest),
  823. #define FUNC_C_DIGESTUPDATE 39
  824. NSSDBG_DEFINE(C_DigestUpdate),
  825. #define FUNC_C_DIGESTKEY 40
  826. NSSDBG_DEFINE(C_DigestKey),
  827. #define FUNC_C_DIGESTFINAL 41
  828. NSSDBG_DEFINE(C_DigestFinal),
  829. #define FUNC_C_SIGNINIT 42
  830. NSSDBG_DEFINE(C_SignInit),
  831. #define FUNC_C_SIGN 43
  832. NSSDBG_DEFINE(C_Sign),
  833. #define FUNC_C_SIGNUPDATE 44
  834. NSSDBG_DEFINE(C_SignUpdate),
  835. #define FUNC_C_SIGNFINAL 45
  836. NSSDBG_DEFINE(C_SignFinal),
  837. #define FUNC_C_SIGNRECOVERINIT 46
  838. NSSDBG_DEFINE(C_SignRecoverInit),
  839. #define FUNC_C_SIGNRECOVER 47
  840. NSSDBG_DEFINE(C_SignRecover),
  841. #define FUNC_C_VERIFYINIT 48
  842. NSSDBG_DEFINE(C_VerifyInit),
  843. #define FUNC_C_VERIFY 49
  844. NSSDBG_DEFINE(C_Verify),
  845. #define FUNC_C_VERIFYUPDATE 50
  846. NSSDBG_DEFINE(C_VerifyUpdate),
  847. #define FUNC_C_VERIFYFINAL 51
  848. NSSDBG_DEFINE(C_VerifyFinal),
  849. #define FUNC_C_VERIFYRECOVERINIT 52
  850. NSSDBG_DEFINE(C_VerifyRecoverInit),
  851. #define FUNC_C_VERIFYRECOVER 53
  852. NSSDBG_DEFINE(C_VerifyRecover),
  853. #define FUNC_C_DIGESTENCRYPTUPDATE 54
  854. NSSDBG_DEFINE(C_DigestEncryptUpdate),
  855. #define FUNC_C_DECRYPTDIGESTUPDATE 55
  856. NSSDBG_DEFINE(C_DecryptDigestUpdate),
  857. #define FUNC_C_SIGNENCRYPTUPDATE 56
  858. NSSDBG_DEFINE(C_SignEncryptUpdate),
  859. #define FUNC_C_DECRYPTVERIFYUPDATE 57
  860. NSSDBG_DEFINE(C_DecryptVerifyUpdate),
  861. #define FUNC_C_GENERATEKEY 58
  862. NSSDBG_DEFINE(C_GenerateKey),
  863. #define FUNC_C_GENERATEKEYPAIR 59
  864. NSSDBG_DEFINE(C_GenerateKeyPair),
  865. #define FUNC_C_WRAPKEY 60
  866. NSSDBG_DEFINE(C_WrapKey),
  867. #define FUNC_C_UNWRAPKEY 61
  868. NSSDBG_DEFINE(C_UnWrapKey),
  869. #define FUNC_C_DERIVEKEY 62
  870. NSSDBG_DEFINE(C_DeriveKey),
  871. #define FUNC_C_SEEDRANDOM 63
  872. NSSDBG_DEFINE(C_SeedRandom),
  873. #define FUNC_C_GENERATERANDOM 64
  874. NSSDBG_DEFINE(C_GenerateRandom),
  875. #define FUNC_C_GETFUNCTIONSTATUS 65
  876. NSSDBG_DEFINE(C_GetFunctionStatus),
  877. #define FUNC_C_CANCELFUNCTION 66
  878. NSSDBG_DEFINE(C_CancelFunction),
  879. #define FUNC_C_WAITFORSLOTEVENT 67
  880. NSSDBG_DEFINE(C_WaitForSlotEvent)
  881. };
  882. int nssdbg_prof_size = sizeof(nssdbg_prof_data)/sizeof(nssdbg_prof_data[0]);
  883. static void nssdbg_finish_time(PRInt32 fun_number, PRIntervalTime start)
  884. {
  885. PRIntervalTime ival;
  886. PRIntervalTime end = PR_IntervalNow();
  887. ival = end-start;
  888. /* sigh, lie to PRAtomic add and say we are using signed values */
  889. PR_ATOMIC_ADD((PRInt32 *)&nssdbg_prof_data[fun_number].time, (PRInt32)ival);
  890. }
  891. static void nssdbg_start_time(PRInt32 fun_number, PRIntervalTime *start)
  892. {
  893. PR_ATOMIC_INCREMENT((PRInt32 *)&nssdbg_prof_data[fun_number].calls);
  894. *start = PR_IntervalNow();
  895. }
  896. #define COMMON_DEFINITIONS \
  897. CK_RV rv; \
  898. PRIntervalTime start
  899. CK_RV NSSDBGC_Initialize(
  900. CK_VOID_PTR pInitArgs
  901. )
  902. {
  903. COMMON_DEFINITIONS;
  904. PR_LOG(modlog, 1, ("C_Initialize"));
  905. PR_LOG(modlog, 3, (" pInitArgs = 0x%p", pInitArgs));
  906. nssdbg_start_time(FUNC_C_INITIALIZE,&start);
  907. rv = module_functions->C_Initialize(pInitArgs);
  908. nssdbg_finish_time(FUNC_C_INITIALIZE,start);
  909. log_rv(rv);
  910. return rv;
  911. }
  912. CK_RV NSSDBGC_Finalize(
  913. CK_VOID_PTR pReserved
  914. )
  915. {
  916. COMMON_DEFINITIONS;
  917. PR_LOG(modlog, 1, ("C_Finalize"));
  918. PR_LOG(modlog, 3, (" pReserved = 0x%p", pReserved));
  919. nssdbg_start_time(FUNC_C_FINALIZE,&start);
  920. rv = module_functions->C_Finalize(pReserved);
  921. nssdbg_finish_time(FUNC_C_FINALIZE,start);
  922. log_rv(rv);
  923. return rv;
  924. }
  925. CK_RV NSSDBGC_GetInfo(
  926. CK_INFO_PTR pInfo
  927. )
  928. {
  929. COMMON_DEFINITIONS;
  930. PR_LOG(modlog, 1, ("C_GetInfo"));
  931. PR_LOG(modlog, 3, (fmt_pInfo, pInfo));
  932. nssdbg_start_time(FUNC_C_GETINFO,&start);
  933. rv = module_functions->C_GetInfo(pInfo);
  934. nssdbg_finish_time(FUNC_C_GETINFO,start);
  935. if (rv == CKR_OK) {
  936. PR_LOG(modlog, 4, (" cryptoki version: %d.%d",
  937. pInfo->cryptokiVersion.major,
  938. pInfo->cryptokiVersion.minor));
  939. PR_LOG(modlog, 4, (fmt_manufacturerID, pInfo->manufacturerID));
  940. PR_LOG(modlog, 4, (" library description = \"%.32s\"",
  941. pInfo->libraryDescription));
  942. PR_LOG(modlog, 4, (" library version: %d.%d",
  943. pInfo->libraryVersion.major,
  944. pInfo->libraryVersion.minor));
  945. }
  946. log_rv(rv);
  947. return rv;
  948. }
  949. CK_RV NSSDBGC_GetFunctionList(
  950. CK_FUNCTION_LIST_PTR_PTR ppFunctionList
  951. )
  952. {
  953. COMMON_DEFINITIONS;
  954. PR_LOG(modlog, 1, ("C_GetFunctionList"));
  955. PR_LOG(modlog, 3, (" ppFunctionList = 0x%p", ppFunctionList));
  956. nssdbg_start_time(FUNC_C_GETFUNCITONLIST,&start);
  957. rv = module_functions->C_GetFunctionList(ppFunctionList);
  958. nssdbg_finish_time(FUNC_C_GETFUNCITONLIST,start);
  959. log_rv(rv);
  960. return rv;
  961. }
  962. CK_RV NSSDBGC_GetSlotList(
  963. CK_BBOOL tokenPresent,
  964. CK_SLOT_ID_PTR pSlotList,
  965. CK_ULONG_PTR pulCount
  966. )
  967. {
  968. COMMON_DEFINITIONS;
  969. CK_ULONG i;
  970. PR_LOG(modlog, 1, ("C_GetSlotList"));
  971. PR_LOG(modlog, 3, (" tokenPresent = 0x%x", tokenPresent));
  972. PR_LOG(modlog, 3, (" pSlotList = 0x%p", pSlotList));
  973. PR_LOG(modlog, 3, (fmt_pulCount, pulCount));
  974. nssdbg_start_time(FUNC_C_GETSLOTLIST,&start);
  975. rv = module_functions->C_GetSlotList(tokenPresent, pSlotList, pulCount);
  976. nssdbg_finish_time(FUNC_C_GETSLOTLIST,start);
  977. PR_LOG(modlog, 4, (fmt_spulCount, *pulCount));
  978. if (pSlotList) {
  979. for (i=0; i<*pulCount; i++) {
  980. PR_LOG(modlog, 4, (" slotID[%d] = %x", i, pSlotList[i]));
  981. }
  982. }
  983. log_rv(rv);
  984. return rv;
  985. }
  986. CK_RV NSSDBGC_GetSlotInfo(
  987. CK_SLOT_ID slotID,
  988. CK_SLOT_INFO_PTR pInfo
  989. )
  990. {
  991. COMMON_DEFINITIONS;
  992. PR_LOG(modlog, 1, ("C_GetSlotInfo"));
  993. PR_LOG(modlog, 3, (fmt_slotID, slotID));
  994. PR_LOG(modlog, 3, (fmt_pInfo, pInfo));
  995. nssdbg_start_time(FUNC_C_GETSLOTINFO,&start);
  996. rv = module_functions->C_GetSlotInfo(slotID, pInfo);
  997. nssdbg_finish_time(FUNC_C_GETSLOTINFO,start);
  998. if (rv == CKR_OK) {
  999. PR_LOG(modlog, 4, (" slotDescription = \"%.64s\"",
  1000. pInfo->slotDescription));
  1001. PR_LOG(modlog, 4, (fmt_manufacturerID, pInfo->manufacturerID));
  1002. PR_LOG(modlog, 4, (" flags = %s %s %s",
  1003. pInfo->flags & CKF_HW_SLOT ? "CKF_HW_SLOT" : "",
  1004. pInfo->flags & CKF_REMOVABLE_DEVICE ? "CKF_REMOVABLE_DEVICE" : "",
  1005. pInfo->flags & CKF_TOKEN_PRESENT ? "CKF_TOKEN_PRESENT" : ""));
  1006. PR_LOG(modlog, 4, (fmt_hwVersion,
  1007. pInfo->hardwareVersion.major,
  1008. pInfo->hardwareVersion.minor));
  1009. PR_LOG(modlog, 4, (fmt_fwVersion,
  1010. pInfo->firmwareVersion.major,
  1011. pInfo->firmwareVersion.minor));
  1012. }
  1013. log_rv(rv);
  1014. return rv;
  1015. }
  1016. CK_RV NSSDBGC_GetTokenInfo(
  1017. CK_SLOT_ID slotID,
  1018. CK_TOKEN_INFO_PTR pInfo
  1019. )
  1020. {
  1021. COMMON_DEFINITIONS;
  1022. PR_LOG(modlog, 1, ("C_GetTokenInfo"));
  1023. PR_LOG(modlog, 3, (fmt_slotID, slotID));
  1024. PR_LOG(modlog, 3, (fmt_pInfo, pInfo));
  1025. nssdbg_start_time(FUNC_C_GETTOKENINFO,&start);
  1026. rv = module_functions->C_GetTokenInfo(slotID, pInfo);
  1027. nssdbg_finish_time(FUNC_C_GETTOKENINFO,start);
  1028. if (rv == CKR_OK) {
  1029. PR_LOG(modlog, 4, (" label = \"%.32s\"", pInfo->label));
  1030. PR_LOG(modlog, 4, (fmt_manufacturerID, pInfo->manufacturerID));
  1031. PR_LOG(modlog, 4, (" model = \"%.16s\"", pInfo->model));
  1032. PR_LOG(modlog, 4, (" serial = \"%.16s\"", pInfo->serialNumber));
  1033. PR_LOG(modlog, 4, (" flags = %s %s %s %s",
  1034. pInfo->flags & CKF_RNG ? "CKF_RNG" : "",
  1035. pInfo->flags & CKF_WRITE_PROTECTED ? "CKF_WRITE_PROTECTED" : "",
  1036. pInfo->flags & CKF_LOGIN_REQUIRED ? "CKF_LOGIN_REQUIRED" : "",
  1037. pInfo->flags & CKF_USER_PIN_INITIALIZED ? "CKF_USER_PIN_INIT" : ""));
  1038. PR_LOG(modlog, 4, (" maxSessions = %u, Sessions = %u",
  1039. pInfo->ulMaxSessionCount, pInfo->ulSessionCount));
  1040. PR_LOG(modlog, 4, (" maxRwSessions = %u, RwSessions = %u",
  1041. pInfo->ulMaxRwSessionCount,
  1042. pInfo->ulRwSessionCount));
  1043. /* ignore Max & Min Pin Len, Public and Private Memory */
  1044. PR_LOG(modlog, 4, (fmt_hwVersion,
  1045. pInfo->hardwareVersion.major,
  1046. pInfo->hardwareVersion.minor));
  1047. PR_LOG(modlog, 4, (fmt_fwVersion,
  1048. pInfo->firmwareVersion.major,
  1049. pInfo->firmwareVersion.minor));
  1050. }
  1051. log_rv(rv);
  1052. return rv;
  1053. }
  1054. CK_RV NSSDBGC_GetMechanismList(
  1055. CK_SLOT_ID slotID,
  1056. CK_MECHANISM_TYPE_PTR pMechanismList,
  1057. CK_ULONG_PTR pulCount
  1058. )
  1059. {
  1060. COMMON_DEFINITIONS;
  1061. PR_LOG(modlog, 1, ("C_GetMechanismList"));
  1062. PR_LOG(modlog, 3, (fmt_slotID, slotID));
  1063. PR_LOG(modlog, 3, (" pMechanismList = 0x%p", pMechanismList));
  1064. PR_LOG(modlog, 3, (fmt_pulCount, pulCount));
  1065. nssdbg_start_time(FUNC_C_GETMECHANISMLIST,&start);
  1066. rv = module_functions->C_GetMechanismList(slotID,
  1067. pMechanismList,
  1068. pulCount);
  1069. nssdbg_finish_time(FUNC_C_GETMECHANISMLIST,start);
  1070. PR_LOG(modlog, 4, (fmt_spulCount, *pulCount));
  1071. log_rv(rv);
  1072. return rv;
  1073. }
  1074. CK_RV NSSDBGC_GetMechanismInfo(
  1075. CK_SLOT_ID slotID,
  1076. CK_MECHANISM_TYPE type,
  1077. CK_MECHANISM_INFO_PTR pInfo
  1078. )
  1079. {
  1080. COMMON_DEFINITIONS;
  1081. PR_LOG(modlog, 1, ("C_GetMechanismInfo"));
  1082. PR_LOG(modlog, 3, (fmt_slotID, slotID));
  1083. PR_LOG(modlog, 3, (" type = 0x%x", type));
  1084. PR_LOG(modlog, 3, (fmt_pInfo, pInfo));
  1085. nssdbg_start_time(FUNC_C_GETMECHANISMINFO,&start);
  1086. rv = module_functions->C_GetMechanismInfo(slotID,
  1087. type,
  1088. pInfo);
  1089. nssdbg_finish_time(FUNC_C_GETMECHANISMINFO,start);
  1090. log_rv(rv);
  1091. return rv;
  1092. }
  1093. CK_RV NSSDBGC_InitToken(
  1094. CK_SLOT_ID slotID,
  1095. CK_CHAR_PTR pPin,
  1096. CK_ULONG ulPinLen,
  1097. CK_CHAR_PTR pLabel
  1098. )
  1099. {
  1100. COMMON_DEFINITIONS;
  1101. PR_LOG(modlog, 1, ("C_InitToken"));
  1102. PR_LOG(modlog, 3, (fmt_slotID, slotID));
  1103. PR_LOG(modlog, 3, (fmt_pPin, pPin));
  1104. PR_LOG(modlog, 3, (fmt_ulPinLen, ulPinLen));
  1105. PR_LOG(modlog, 3, (" pLabel = 0x%p", pLabel));
  1106. nssdbg_start_time(FUNC_C_INITTOKEN,&start);
  1107. rv = module_functions->C_InitToken(slotID,
  1108. pPin,
  1109. ulPinLen,
  1110. pLabel);
  1111. nssdbg_finish_time(FUNC_C_INITTOKEN,start);
  1112. log_rv(rv);
  1113. return rv;
  1114. }
  1115. CK_RV NSSDBGC_InitPIN(
  1116. CK_SESSION_HANDLE hSession,
  1117. CK_CHAR_PTR pPin,
  1118. CK_ULONG ulPinLen
  1119. )
  1120. {
  1121. COMMON_DEFINITIONS;
  1122. PR_LOG(modlog, 1, ("C_InitPIN"));
  1123. log_handle(3, fmt_hSession, hSession);
  1124. PR_LOG(modlog, 3, (fmt_pPin, pPin));
  1125. PR_LOG(modlog, 3, (fmt_ulPinLen, ulPinLen));
  1126. nssdbg_start_time(FUNC_C_INITPIN,&start);
  1127. rv = module_functions->C_InitPIN(hSession,
  1128. pPin,
  1129. ulPinLen);
  1130. nssdbg_finish_time(FUNC_C_INITPIN,start);
  1131. log_rv(rv);
  1132. return rv;
  1133. }
  1134. CK_RV NSSDBGC_SetPIN(
  1135. CK_SESSION_HANDLE hSession,
  1136. CK_CHAR_PTR pOldPin,
  1137. CK_ULONG ulOldLen,
  1138. CK_CHAR_PTR pNewPin,
  1139. CK_ULONG ulNewLen
  1140. )
  1141. {
  1142. COMMON_DEFINITIONS;
  1143. PR_LOG(modlog, 1, ("C_SetPIN"));
  1144. log_handle(3, fmt_hSession, hSession);
  1145. PR_LOG(modlog, 3, (" pOldPin = 0x%p", pOldPin));
  1146. PR_LOG(modlog, 3, (" ulOldLen = %d", ulOldLen));
  1147. PR_LOG(modlog, 3, (" pNewPin = 0x%p", pNewPin));
  1148. PR_LOG(modlog, 3, (" ulNewLen = %d", ulNewLen));
  1149. nssdbg_start_time(FUNC_C_SETPIN,&start);
  1150. rv = module_functions->C_SetPIN(hSession,
  1151. pOldPin,
  1152. ulOldLen,
  1153. pNewPin,
  1154. ulNewLen);
  1155. nssdbg_finish_time(FUNC_C_SETPIN,start);
  1156. log_rv(rv);
  1157. return rv;
  1158. }
  1159. static PRUint32 numOpenSessions = 0;
  1160. static PRUint32 maxOpenSessions = 0;
  1161. CK_RV NSSDBGC_OpenSession(
  1162. CK_SLOT_ID slotID,
  1163. CK_FLAGS flags,
  1164. CK_VOID_PTR pApplication,
  1165. CK_NOTIFY Notify,
  1166. CK_SESSION_HANDLE_PTR phSession
  1167. )
  1168. {
  1169. COMMON_DEFINITIONS;
  1170. PR_ATOMIC_INCREMENT((PRInt32 *)&numOpenSessions);
  1171. maxOpenSessions = PR_MAX(numOpenSessions, maxOpenSessions);
  1172. PR_LOG(modlog, 1, ("C_OpenSession"));
  1173. PR_LOG(modlog, 3, (fmt_slotID, slotID));
  1174. PR_LOG(modlog, 3, (fmt_flags, flags));
  1175. PR_LOG(modlog, 3, (" pApplication = 0x%p", pApplication));
  1176. PR_LOG(modlog, 3, (" Notify = 0x%x", Notify));
  1177. PR_LOG(modlog, 3, (" phSession = 0x%p", phSession));
  1178. nssdbg_start_time(FUNC_C_OPENSESSION,&start);
  1179. rv = module_functions->C_OpenSession(slotID,
  1180. flags,
  1181. pApplication,
  1182. Notify,
  1183. phSession);
  1184. nssdbg_finish_time(FUNC_C_OPENSESSION,start);
  1185. log_handle(4, " *phSession = 0x%x", *phSession);
  1186. log_rv(rv);
  1187. return rv;
  1188. }
  1189. CK_RV NSSDBGC_CloseSession(
  1190. CK_SESSION_HANDLE hSession
  1191. )
  1192. {
  1193. COMMON_DEFINITIONS;
  1194. PR_ATOMIC_DECREMENT((PRInt32 *)&numOpenSessions);
  1195. PR_LOG(modlog, 1, ("C_CloseSession"));
  1196. log_handle(3, fmt_hSession, hSession);
  1197. nssdbg_start_time(FUNC_C_CLOSESESSION,&start);
  1198. rv = module_functions->C_CloseSession(hSession);
  1199. nssdbg_finish_time(FUNC_C_CLOSESESSION,start);
  1200. log_rv(rv);
  1201. return rv;
  1202. }
  1203. CK_RV NSSDBGC_CloseAllSessions(
  1204. CK_SLOT_ID slotID
  1205. )
  1206. {
  1207. COMMON_DEFINITIONS;
  1208. PR_LOG(modlog, 1, ("C_CloseAllSessions"));
  1209. PR_LOG(modlog, 3, (fmt_slotID, slotID));
  1210. nssdbg_start_time(FUNC_C_CLOSEALLSESSIONS,&start);
  1211. rv = module_functions->C_CloseAllSessions(slotID);
  1212. nssdbg_finish_time(FUNC_C_CLOSEALLSESSIONS,start);
  1213. log_rv(rv);
  1214. return rv;
  1215. }
  1216. CK_RV NSSDBGC_GetSessionInfo(
  1217. CK_SESSION_HANDLE hSession,
  1218. CK_SESSION_INFO_PTR pInfo
  1219. )
  1220. {
  1221. COMMON_DEFINITIONS;
  1222. PR_LOG(modlog, 1, ("C_GetSessionInfo"));
  1223. log_handle(3, fmt_hSession, hSession);
  1224. PR_LOG(modlog, 3, (fmt_pInfo, pInfo));
  1225. nssdbg_start_time(FUNC_C_GETSESSIONINFO,&start);
  1226. rv = module_functions->C_GetSessionInfo(hSession,
  1227. pInfo);
  1228. nssdbg_finish_time(FUNC_C_GETSESSIONINFO,start);
  1229. if (rv == CKR_OK) {
  1230. PR_LOG(modlog, 4, (fmt_slotID, pInfo->slotID));
  1231. log_state(pInfo->state);
  1232. PR_LOG(modlog, 4, (" flags = %s %s",
  1233. pInfo->flags & CKF_RW_SESSION ? "CKF_RW_SESSION" : "",
  1234. pInfo->flags & CKF_SERIAL_SESSION ? "CKF_SERIAL_SESSION" : ""));
  1235. PR_LOG(modlog, 4, (" deviceError = 0x%x", pInfo->ulDeviceError));
  1236. }
  1237. log_rv(rv);
  1238. return rv;
  1239. }
  1240. CK_RV NSSDBGC_GetOperationState(
  1241. CK_SESSION_HANDLE hSession,
  1242. CK_BYTE_PTR pOperationState,
  1243. CK_ULONG_PTR pulOperationStateLen
  1244. )
  1245. {
  1246. COMMON_DEFINITIONS;
  1247. PR_LOG(modlog, 1, ("C_GetOperationState"));
  1248. log_handle(3, fmt_hSession, hSession);
  1249. PR_LOG(modlog, 3, (fmt_pOperationState, pOperationState));
  1250. PR_LOG(modlog, 3, (" pulOperationStateLen = 0x%p", pulOperationStateLen));
  1251. nssdbg_start_time(FUNC_C_GETOPERATIONSTATE,&start);
  1252. rv = module_functions->C_GetOperationState(hSession,
  1253. pOperationState,
  1254. pulOperationStateLen);
  1255. nssdbg_finish_time(FUNC_C_GETOPERATIONSTATE,start);
  1256. PR_LOG(modlog, 4, (" *pulOperationStateLen = 0x%x", *pulOperationStateLen));
  1257. log_rv(rv);
  1258. return rv;
  1259. }
  1260. CK_RV NSSDBGC_SetOperationState(
  1261. CK_SESSION_HANDLE hSession,
  1262. CK_BYTE_PTR pOperationState,
  1263. CK_ULONG ulOperationStateLen,
  1264. CK_OBJECT_HANDLE hEncryptionKey,
  1265. CK_OBJECT_HANDLE hAuthenticationKey
  1266. )
  1267. {
  1268. COMMON_DEFINITIONS;
  1269. PR_LOG(modlog, 1, ("C_SetOperationState"));
  1270. log_handle(3, fmt_hSession, hSession);
  1271. PR_LOG(modlog, 3, (fmt_pOperationState, pOperationState));
  1272. PR_LOG(modlog, 3, (" ulOperationStateLen = %d", ulOperationStateLen));
  1273. log_handle(3, " hEncryptionKey = 0x%x", hEncryptionKey);
  1274. log_handle(3, " hAuthenticationKey = 0x%x", hAuthenticationKey);
  1275. nssdbg_start_time(FUNC_C_SETOPERATIONSTATE,&start);
  1276. rv = module_functions->C_SetOperationState(hSession,
  1277. pOperationState,
  1278. ulOperationStateLen,
  1279. hEncryptionKey,
  1280. hAuthenticationKey);
  1281. nssdbg_finish_time(FUNC_C_SETOPERATIONSTATE,start);
  1282. log_rv(rv);
  1283. return rv;
  1284. }
  1285. CK_RV NSSDBGC_Login(
  1286. CK_SESSION_HANDLE hSession,
  1287. CK_USER_TYPE userType,
  1288. CK_CHAR_PTR pPin,
  1289. CK_ULONG ulPinLen
  1290. )
  1291. {
  1292. COMMON_DEFINITIONS;
  1293. PR_LOG(modlog, 1, ("C_Login"));
  1294. log_handle(3, fmt_hSession, hSession);
  1295. PR_LOG(modlog, 3, (" userType = 0x%x", userType));
  1296. PR_LOG(modlog, 3, (fmt_pPin, pPin));
  1297. PR_LOG(modlog, 3, (fmt_ulPinLen, ulPinLen));
  1298. nssdbg_start_time(FUNC_C_LOGIN,&start);
  1299. rv = module_functions->C_Login(hSession,
  1300. userType,
  1301. pPin,
  1302. ulPinLen);
  1303. nssdbg_finish_time(FUNC_C_LOGIN,start);
  1304. log_rv(rv);
  1305. return rv;
  1306. }
  1307. CK_RV NSSDBGC_Logout(
  1308. CK_SESSION_HANDLE hSession
  1309. )
  1310. {
  1311. COMMON_DEFINITIONS;
  1312. PR_LOG(modlog, 1, ("C_Logout"));
  1313. log_handle(3, fmt_hSession, hSession);
  1314. nssdbg_start_time(FUNC_C_LOGOUT,&start);
  1315. rv = module_functions->C_Logout(hSession);
  1316. nssdbg_finish_time(FUNC_C_LOGOUT,start);
  1317. log_rv(rv);
  1318. return rv;
  1319. }
  1320. CK_RV NSSDBGC_CreateObject(
  1321. CK_SESSION_HANDLE hSession,
  1322. CK_ATTRIBUTE_PTR pTemplate,
  1323. CK_ULONG ulCount,
  1324. CK_OBJECT_HANDLE_PTR phObject
  1325. )
  1326. {
  1327. COMMON_DEFINITIONS;
  1328. PR_LOG(modlog, 1, ("C_CreateObject"));
  1329. log_handle(3, fmt_hSession, hSession);
  1330. PR_LOG(modlog, 3, (fmt_pTemplate, pTemplate));
  1331. PR_LOG(modlog, 3, (fmt_ulCount, ulCount));
  1332. PR_LOG(modlog, 3, (fmt_phObject, phObject));
  1333. print_template(pTemplate, ulCount);
  1334. nssdbg_start_time(FUNC_C_CREATEOBJECT,&start);
  1335. rv = module_functions->C_CreateObject(hSession,
  1336. pTemplate,
  1337. ulCount,
  1338. phObject);
  1339. nssdbg_finish_time(FUNC_C_CREATEOBJECT,start);
  1340. log_handle(4, " *phObject = 0x%x", *phObject);
  1341. log_rv(rv);
  1342. return rv;
  1343. }
  1344. CK_RV NSSDBGC_CopyObject(
  1345. CK_SESSION_HANDLE hSession,
  1346. CK_OBJECT_HANDLE hObject,
  1347. CK_ATTRIBUTE_PTR pTemplate,
  1348. CK_ULONG ulCount,
  1349. CK_OBJECT_HANDLE_PTR phNewObject
  1350. )
  1351. {
  1352. COMMON_DEFINITIONS;
  1353. PR_LOG(modlog, 1, ("C_CopyObject"));
  1354. log_handle(3, fmt_hSession, hSession);
  1355. log_handle(3, fmt_hObject, hObject);
  1356. PR_LOG(modlog, 3, (fmt_pTemplate, pTemplate));
  1357. PR_LOG(modlog, 3, (fmt_ulCount, ulCount));
  1358. PR_LOG(modlog, 3, (" phNewObject = 0x%p", phNewObject));
  1359. print_template(pTemplate, ulCount);
  1360. nssdbg_start_time(FUNC_C_COPYOBJECT,&start);
  1361. rv = module_functions->C_CopyObject(hSession,
  1362. hObject,
  1363. pTemplate,
  1364. ulCount,
  1365. phNewObject);
  1366. nssdbg_finish_time(FUNC_C_COPYOBJECT,start);
  1367. log_handle(4, " *phNewObject = 0x%x", *phNewObject);
  1368. log_rv(rv);
  1369. return rv;
  1370. }
  1371. CK_RV NSSDBGC_DestroyObject(
  1372. CK_SESSION_HANDLE hSession,
  1373. CK_OBJECT_HANDLE hObject
  1374. )
  1375. {
  1376. COMMON_DEFINITIONS;
  1377. PR_LOG(modlog, 1, ("C_DestroyObject"));
  1378. log_handle(3, fmt_hSession, hSession);
  1379. log_handle(3, fmt_hObject, hObject);
  1380. nssdbg_start_time(FUNC_C_DESTROYOBJECT,&start);
  1381. rv = module_functions->C_DestroyObject(hSession,
  1382. hObject);
  1383. nssdbg_finish_time(FUNC_C_DESTROYOBJECT,start);
  1384. log_rv(rv);
  1385. return rv;
  1386. }
  1387. CK_RV NSSDBGC_GetObjectSize(
  1388. CK_SESSION_HANDLE hSession,
  1389. CK_OBJECT_HANDLE hObject,
  1390. CK_ULONG_PTR pulSize
  1391. )
  1392. {
  1393. COMMON_DEFINITIONS;
  1394. PR_LOG(modlog, 1, ("C_GetObjectSize"));
  1395. log_handle(3, fmt_hSession, hSession);
  1396. log_handle(3, fmt_hObject, hObject);
  1397. PR_LOG(modlog, 3, (" pulSize = 0x%p", pulSize));
  1398. nssdbg_start_time(FUNC_C_GETOBJECTSIZE,&start);
  1399. rv = module_functions->C_GetObjectSize(hSession,
  1400. hObject,
  1401. pulSize);
  1402. nssdbg_finish_time(FUNC_C_GETOBJECTSIZE,start);
  1403. PR_LOG(modlog, 4, (" *pulSize = 0x%x", *pulSize));
  1404. log_rv(rv);
  1405. return rv;
  1406. }
  1407. CK_RV NSSDBGC_GetAttributeValue(
  1408. CK_SESSION_HANDLE hSession,
  1409. CK_OBJECT_HANDLE hObject,
  1410. CK_ATTRIBUTE_PTR pTemplate,
  1411. CK_ULONG ulCount
  1412. )
  1413. {
  1414. COMMON_DEFINITIONS;
  1415. PR_LOG(modlog, 1, ("C_GetAttributeValue"));
  1416. log_handle(3, fmt_hSession, hSession);
  1417. log_handle(3, fmt_hObject, hObject);
  1418. PR_LOG(modlog, 3, (fmt_pTemplate, pTemplate));
  1419. PR_LOG(modlog, 3, (fmt_ulCount, ulCount));
  1420. nssdbg_start_time(FUNC_C_GETATTRIBUTEVALUE,&start);
  1421. rv = module_functions->C_GetAttributeValue(hSession,
  1422. hObject,
  1423. pTemplate,
  1424. ulCount);
  1425. nssdbg_finish_time(FUNC_C_GETATTRIBUTEVALUE,start);
  1426. print_template(pTemplate, ulCount);
  1427. log_rv(rv);
  1428. return rv;
  1429. }
  1430. CK_RV NSSDBGC_SetAttributeValue(
  1431. CK_SESSION_HANDLE hSession,
  1432. CK_OBJECT_HANDLE hObject,
  1433. CK_ATTRIBUTE_PTR pTemplate,
  1434. CK_ULONG ulCount
  1435. )
  1436. {
  1437. COMMON_DEFINITIONS;
  1438. PR_LOG(modlog, 1, ("C_SetAttributeValue"));
  1439. log_handle(3, fmt_hSession, hSession);
  1440. log_handle(3, fmt_hObject, hObject);
  1441. PR_LOG(modlog, 3, (fmt_pTemplate, pTemplate));
  1442. PR_LOG(modlog, 3, (fmt_ulCount, ulCount));
  1443. print_template(pTemplate, ulCount);
  1444. nssdbg_start_time(FUNC_C_SETATTRIBUTEVALUE,&start);
  1445. rv = module_functions->C_SetAttributeValue(hSession,
  1446. hObject,
  1447. pTemplate,
  1448. ulCount);
  1449. nssdbg_finish_time(FUNC_C_SETATTRIBUTEVALUE,start);
  1450. log_rv(rv);
  1451. return rv;
  1452. }
  1453. CK_RV NSSDBGC_FindObjectsInit(
  1454. CK_SESSION_HANDLE hSession,
  1455. CK_ATTRIBUTE_PTR pTemplate,
  1456. CK_ULONG ulCount
  1457. )
  1458. {
  1459. COMMON_DEFINITIONS;
  1460. PR_LOG(modlog, 1, ("C_FindObjectsInit"));
  1461. log_handle(3, fmt_hSession, hSession);
  1462. PR_LOG(modlog, 3, (fmt_pTemplate, pTemplate));
  1463. PR_LOG(modlog, 3, (fmt_ulCount, ulCount));
  1464. print_template(pTemplate, ulCount);
  1465. nssdbg_start_time(FUNC_C_FINDOBJECTSINIT,&start);
  1466. rv = module_functions->C_FindObjectsInit(hSession,
  1467. pTemplate,
  1468. ulCount);
  1469. nssdbg_finish_time(FUNC_C_FINDOBJECTSINIT,start);
  1470. log_rv(rv);
  1471. return rv;
  1472. }
  1473. CK_RV NSSDBGC_FindObjects(
  1474. CK_SESSION_HANDLE hSession,
  1475. CK_OBJECT_HANDLE_PTR phObject,
  1476. CK_ULONG ulMaxObjectCount,
  1477. CK_ULONG_PTR pulObjectCount
  1478. )
  1479. {
  1480. COMMON_DEFINITIONS;
  1481. CK_ULONG i;
  1482. PR_LOG(modlog, 1, ("C_FindObjects"));
  1483. log_handle(3, fmt_hSession, hSession);
  1484. PR_LOG(modlog, 3, (fmt_phObject, phObject));
  1485. PR_LOG(modlog, 3, (" ulMaxObjectCount = %d", ulMaxObjectCount));
  1486. PR_LOG(modlog, 3, (" pulObjectCount = 0x%p", pulObjectCount));
  1487. nssdbg_start_time(FUNC_C_FINDOBJECTS,&start);
  1488. rv = module_functions->C_FindObjects(hSession,
  1489. phObject,
  1490. ulMaxObjectCount,
  1491. pulObjectCount);
  1492. nssdbg_finish_time(FUNC_C_FINDOBJECTS,start);
  1493. PR_LOG(modlog, 4, (" *pulObjectCount = 0x%x", *pulObjectCount));
  1494. for (i=0; i<*pulObjectCount; i++) {
  1495. PR_LOG(modlog, 4, (" phObject[%d] = 0x%x%s", i, phObject[i],
  1496. phObject[i] ? "" : fmt_invalid_handle));
  1497. }
  1498. log_rv(rv);
  1499. return rv;
  1500. }
  1501. CK_RV NSSDBGC_FindObjectsFinal(
  1502. CK_SESSION_HANDLE hSession
  1503. )
  1504. {
  1505. COMMON_DEFINITIONS;
  1506. PR_LOG(modlog, 1, ("C_FindObjectsFinal"));
  1507. log_handle(3, fmt_hSession, hSession);
  1508. nssdbg_start_time(FUNC_C_FINDOBJECTSFINAL,&start);
  1509. rv = module_functions->C_FindObjectsFinal(hSession);
  1510. nssdbg_finish_time(FUNC_C_FINDOBJECTSFINAL,start);
  1511. log_rv(rv);
  1512. return rv;
  1513. }
  1514. CK_RV NSSDBGC_EncryptInit(
  1515. CK_SESSION_HANDLE hSession,
  1516. CK_MECHANISM_PTR pMechanism,
  1517. CK_OBJECT_HANDLE hKey
  1518. )
  1519. {
  1520. COMMON_DEFINITIONS;
  1521. PR_LOG(modlog, 1, ("C_EncryptInit"));
  1522. log_handle(3, fmt_hSession, hSession);
  1523. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  1524. log_handle(3, fmt_hKey, hKey);
  1525. print_mechanism(pMechanism);
  1526. nssdbg_start_time(FUNC_C_ENCRYPTINIT,&start);
  1527. rv = module_functions->C_EncryptInit(hSession,
  1528. pMechanism,
  1529. hKey);
  1530. nssdbg_finish_time(FUNC_C_ENCRYPTINIT,start);
  1531. log_rv(rv);
  1532. return rv;
  1533. }
  1534. CK_RV NSSDBGC_Encrypt(
  1535. CK_SESSION_HANDLE hSession,
  1536. CK_BYTE_PTR pData,
  1537. CK_ULONG ulDataLen,
  1538. CK_BYTE_PTR pEncryptedData,
  1539. CK_ULONG_PTR pulEncryptedDataLen
  1540. )
  1541. {
  1542. COMMON_DEFINITIONS;
  1543. PR_LOG(modlog, 1, ("C_Encrypt"));
  1544. log_handle(3, fmt_hSession, hSession);
  1545. PR_LOG(modlog, 3, (fmt_pData, pData));
  1546. PR_LOG(modlog, 3, (fmt_ulDataLen, ulDataLen));
  1547. PR_LOG(modlog, 3, (fmt_pEncryptedData, pEncryptedData));
  1548. PR_LOG(modlog, 3, (" pulEncryptedDataLen = 0x%p", pulEncryptedDataLen));
  1549. nssdbg_start_time(FUNC_C_ENCRYPT,&start);
  1550. rv = module_functions->C_Encrypt(hSession,
  1551. pData,
  1552. ulDataLen,
  1553. pEncryptedData,
  1554. pulEncryptedDataLen);
  1555. nssdbg_finish_time(FUNC_C_ENCRYPT,start);
  1556. PR_LOG(modlog, 4, (" *pulEncryptedDataLen = 0x%x", *pulEncryptedDataLen));
  1557. log_rv(rv);
  1558. return rv;
  1559. }
  1560. CK_RV NSSDBGC_EncryptUpdate(
  1561. CK_SESSION_HANDLE hSession,
  1562. CK_BYTE_PTR pPart,
  1563. CK_ULONG ulPartLen,
  1564. CK_BYTE_PTR pEncryptedPart,
  1565. CK_ULONG_PTR pulEncryptedPartLen
  1566. )
  1567. {
  1568. COMMON_DEFINITIONS;
  1569. PR_LOG(modlog, 1, ("C_EncryptUpdate"));
  1570. log_handle(3, fmt_hSession, hSession);
  1571. PR_LOG(modlog, 3, (fmt_pPart, pPart));
  1572. PR_LOG(modlog, 3, (fmt_ulPartLen, ulPartLen));
  1573. PR_LOG(modlog, 3, (fmt_pEncryptedPart, pEncryptedPart));
  1574. PR_LOG(modlog, 3, (fmt_pulEncryptedPartLen, pulEncryptedPartLen));
  1575. nssdbg_start_time(FUNC_C_ENCRYPTUPDATE,&start);
  1576. rv = module_functions->C_EncryptUpdate(hSession,
  1577. pPart,
  1578. ulPartLen,
  1579. pEncryptedPart,
  1580. pulEncryptedPartLen);
  1581. nssdbg_finish_time(FUNC_C_ENCRYPTUPDATE,start);
  1582. PR_LOG(modlog, 4, (fmt_spulEncryptedPartLen, *pulEncryptedPartLen));
  1583. log_rv(rv);
  1584. return rv;
  1585. }
  1586. CK_RV NSSDBGC_EncryptFinal(
  1587. CK_SESSION_HANDLE hSession,
  1588. CK_BYTE_PTR pLastEncryptedPart,
  1589. CK_ULONG_PTR pulLastEncryptedPartLen
  1590. )
  1591. {
  1592. COMMON_DEFINITIONS;
  1593. PR_LOG(modlog, 1, ("C_EncryptFinal"));
  1594. log_handle(3, fmt_hSession, hSession);
  1595. PR_LOG(modlog, 3, (" pLastEncryptedPart = 0x%p", pLastEncryptedPart));
  1596. PR_LOG(modlog, 3, (" pulLastEncryptedPartLen = 0x%p", pulLastEncryptedPartLen));
  1597. nssdbg_start_time(FUNC_C_ENCRYPTFINAL,&start);
  1598. rv = module_functions->C_EncryptFinal(hSession,
  1599. pLastEncryptedPart,
  1600. pulLastEncryptedPartLen);
  1601. nssdbg_finish_time(FUNC_C_ENCRYPTFINAL,start);
  1602. PR_LOG(modlog, 4, (" *pulLastEncryptedPartLen = 0x%x", *pulLastEncryptedPartLen));
  1603. log_rv(rv);
  1604. return rv;
  1605. }
  1606. CK_RV NSSDBGC_DecryptInit(
  1607. CK_SESSION_HANDLE hSession,
  1608. CK_MECHANISM_PTR pMechanism,
  1609. CK_OBJECT_HANDLE hKey
  1610. )
  1611. {
  1612. COMMON_DEFINITIONS;
  1613. PR_LOG(modlog, 1, ("C_DecryptInit"));
  1614. log_handle(3, fmt_hSession, hSession);
  1615. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  1616. log_handle(3, fmt_hKey, hKey);
  1617. print_mechanism(pMechanism);
  1618. nssdbg_start_time(FUNC_C_DECRYPTINIT,&start);
  1619. rv = module_functions->C_DecryptInit(hSession,
  1620. pMechanism,
  1621. hKey);
  1622. nssdbg_finish_time(FUNC_C_DECRYPTINIT,start);
  1623. log_rv(rv);
  1624. return rv;
  1625. }
  1626. CK_RV NSSDBGC_Decrypt(
  1627. CK_SESSION_HANDLE hSession,
  1628. CK_BYTE_PTR pEncryptedData,
  1629. CK_ULONG ulEncryptedDataLen,
  1630. CK_BYTE_PTR pData,
  1631. CK_ULONG_PTR pulDataLen
  1632. )
  1633. {
  1634. COMMON_DEFINITIONS;
  1635. PR_LOG(modlog, 1, ("C_Decrypt"));
  1636. log_handle(3, fmt_hSession, hSession);
  1637. PR_LOG(modlog, 3, (fmt_pEncryptedData, pEncryptedData));
  1638. PR_LOG(modlog, 3, (" ulEncryptedDataLen = %d", ulEncryptedDataLen));
  1639. PR_LOG(modlog, 3, (fmt_pData, pData));
  1640. PR_LOG(modlog, 3, (fmt_pulDataLen, pulDataLen));
  1641. nssdbg_start_time(FUNC_C_DECRYPT,&start);
  1642. rv = module_functions->C_Decrypt(hSession,
  1643. pEncryptedData,
  1644. ulEncryptedDataLen,
  1645. pData,
  1646. pulDataLen);
  1647. nssdbg_finish_time(FUNC_C_DECRYPT,start);
  1648. PR_LOG(modlog, 4, (fmt_spulDataLen, *pulDataLen));
  1649. log_rv(rv);
  1650. return rv;
  1651. }
  1652. CK_RV NSSDBGC_DecryptUpdate(
  1653. CK_SESSION_HANDLE hSession,
  1654. CK_BYTE_PTR pEncryptedPart,
  1655. CK_ULONG ulEncryptedPartLen,
  1656. CK_BYTE_PTR pPart,
  1657. CK_ULONG_PTR pulPartLen
  1658. )
  1659. {
  1660. COMMON_DEFINITIONS;
  1661. PR_LOG(modlog, 1, ("C_DecryptUpdate"));
  1662. log_handle(3, fmt_hSession, hSession);
  1663. PR_LOG(modlog, 3, (fmt_pEncryptedPart, pEncryptedPart));
  1664. PR_LOG(modlog, 3, (fmt_ulEncryptedPartLen, ulEncryptedPartLen));
  1665. PR_LOG(modlog, 3, (fmt_pPart, pPart));
  1666. PR_LOG(modlog, 3, (fmt_pulPartLen, pulPartLen));
  1667. nssdbg_start_time(FUNC_C_DECRYPTUPDATE,&start);
  1668. rv = module_functions->C_DecryptUpdate(hSession,
  1669. pEncryptedPart,
  1670. ulEncryptedPartLen,
  1671. pPart,
  1672. pulPartLen);
  1673. nssdbg_finish_time(FUNC_C_DECRYPTUPDATE,start);
  1674. PR_LOG(modlog, 4, (fmt_spulPartLen, *pulPartLen));
  1675. log_rv(rv);
  1676. return rv;
  1677. }
  1678. CK_RV NSSDBGC_DecryptFinal(
  1679. CK_SESSION_HANDLE hSession,
  1680. CK_BYTE_PTR pLastPart,
  1681. CK_ULONG_PTR pulLastPartLen
  1682. )
  1683. {
  1684. COMMON_DEFINITIONS;
  1685. PR_LOG(modlog, 1, ("C_DecryptFinal"));
  1686. log_handle(3, fmt_hSession, hSession);
  1687. PR_LOG(modlog, 3, (" pLastPart = 0x%p", pLastPart));
  1688. PR_LOG(modlog, 3, (" pulLastPartLen = 0x%p", pulLastPartLen));
  1689. nssdbg_start_time(FUNC_C_DECRYPTFINAL,&start);
  1690. rv = module_functions->C_DecryptFinal(hSession,
  1691. pLastPart,
  1692. pulLastPartLen);
  1693. nssdbg_finish_time(FUNC_C_DECRYPTFINAL,start);
  1694. PR_LOG(modlog, 4, (" *pulLastPartLen = 0x%x", *pulLastPartLen));
  1695. log_rv(rv);
  1696. return rv;
  1697. }
  1698. CK_RV NSSDBGC_DigestInit(
  1699. CK_SESSION_HANDLE hSession,
  1700. CK_MECHANISM_PTR pMechanism
  1701. )
  1702. {
  1703. COMMON_DEFINITIONS;
  1704. PR_LOG(modlog, 1, ("C_DigestInit"));
  1705. log_handle(3, fmt_hSession, hSession);
  1706. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  1707. print_mechanism(pMechanism);
  1708. nssdbg_start_time(FUNC_C_DIGESTINIT,&start);
  1709. rv = module_functions->C_DigestInit(hSession,
  1710. pMechanism);
  1711. nssdbg_finish_time(FUNC_C_DIGESTINIT,start);
  1712. log_rv(rv);
  1713. return rv;
  1714. }
  1715. CK_RV NSSDBGC_Digest(
  1716. CK_SESSION_HANDLE hSession,
  1717. CK_BYTE_PTR pData,
  1718. CK_ULONG ulDataLen,
  1719. CK_BYTE_PTR pDigest,
  1720. CK_ULONG_PTR pulDigestLen
  1721. )
  1722. {
  1723. COMMON_DEFINITIONS;
  1724. PR_LOG(modlog, 1, ("C_Digest"));
  1725. log_handle(3, fmt_hSession, hSession);
  1726. PR_LOG(modlog, 3, (fmt_pData, pData));
  1727. PR_LOG(modlog, 3, (fmt_ulDataLen, ulDataLen));
  1728. PR_LOG(modlog, 3, (fmt_pDigest, pDigest));
  1729. PR_LOG(modlog, 3, (fmt_pulDigestLen, pulDigestLen));
  1730. nssdbg_start_time(FUNC_C_DIGEST,&start);
  1731. rv = module_functions->C_Digest(hSession,
  1732. pData,
  1733. ulDataLen,
  1734. pDigest,
  1735. pulDigestLen);
  1736. nssdbg_finish_time(FUNC_C_DIGEST,start);
  1737. PR_LOG(modlog, 4, (fmt_spulDigestLen, *pulDigestLen));
  1738. log_rv(rv);
  1739. return rv;
  1740. }
  1741. CK_RV NSSDBGC_DigestUpdate(
  1742. CK_SESSION_HANDLE hSession,
  1743. CK_BYTE_PTR pPart,
  1744. CK_ULONG ulPartLen
  1745. )
  1746. {
  1747. COMMON_DEFINITIONS;
  1748. PR_LOG(modlog, 1, ("C_DigestUpdate"));
  1749. log_handle(3, fmt_hSession, hSession);
  1750. PR_LOG(modlog, 3, (fmt_pPart, pPart));
  1751. PR_LOG(modlog, 3, (fmt_ulPartLen, ulPartLen));
  1752. nssdbg_start_time(FUNC_C_DIGESTUPDATE,&start);
  1753. rv = module_functions->C_DigestUpdate(hSession,
  1754. pPart,
  1755. ulPartLen);
  1756. nssdbg_finish_time(FUNC_C_DIGESTUPDATE,start);
  1757. log_rv(rv);
  1758. return rv;
  1759. }
  1760. CK_RV NSSDBGC_DigestKey(
  1761. CK_SESSION_HANDLE hSession,
  1762. CK_OBJECT_HANDLE hKey
  1763. )
  1764. {
  1765. COMMON_DEFINITIONS;
  1766. PR_LOG(modlog, 1, ("C_DigestKey"));
  1767. log_handle(3, fmt_hSession, hSession);
  1768. nssdbg_start_time(FUNC_C_DIGESTKEY,&start);
  1769. rv = module_functions->C_DigestKey(hSession,
  1770. hKey);
  1771. nssdbg_finish_time(FUNC_C_DIGESTKEY,start);
  1772. log_rv(rv);
  1773. return rv;
  1774. }
  1775. CK_RV NSSDBGC_DigestFinal(
  1776. CK_SESSION_HANDLE hSession,
  1777. CK_BYTE_PTR pDigest,
  1778. CK_ULONG_PTR pulDigestLen
  1779. )
  1780. {
  1781. COMMON_DEFINITIONS;
  1782. PR_LOG(modlog, 1, ("C_DigestFinal"));
  1783. log_handle(3, fmt_hSession, hSession);
  1784. PR_LOG(modlog, 3, (fmt_pDigest, pDigest));
  1785. PR_LOG(modlog, 3, (fmt_pulDigestLen, pulDigestLen));
  1786. nssdbg_start_time(FUNC_C_DIGESTFINAL,&start);
  1787. rv = module_functions->C_DigestFinal(hSession,
  1788. pDigest,
  1789. pulDigestLen);
  1790. nssdbg_finish_time(FUNC_C_DIGESTFINAL,start);
  1791. PR_LOG(modlog, 4, (fmt_spulDigestLen, *pulDigestLen));
  1792. log_rv(rv);
  1793. return rv;
  1794. }
  1795. CK_RV NSSDBGC_SignInit(
  1796. CK_SESSION_HANDLE hSession,
  1797. CK_MECHANISM_PTR pMechanism,
  1798. CK_OBJECT_HANDLE hKey
  1799. )
  1800. {
  1801. COMMON_DEFINITIONS;
  1802. PR_LOG(modlog, 1, ("C_SignInit"));
  1803. log_handle(3, fmt_hSession, hSession);
  1804. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  1805. log_handle(3, fmt_hKey, hKey);
  1806. print_mechanism(pMechanism);
  1807. nssdbg_start_time(FUNC_C_SIGNINIT,&start);
  1808. rv = module_functions->C_SignInit(hSession,
  1809. pMechanism,
  1810. hKey);
  1811. nssdbg_finish_time(FUNC_C_SIGNINIT,start);
  1812. log_rv(rv);
  1813. return rv;
  1814. }
  1815. CK_RV NSSDBGC_Sign(
  1816. CK_SESSION_HANDLE hSession,
  1817. CK_BYTE_PTR pData,
  1818. CK_ULONG ulDataLen,
  1819. CK_BYTE_PTR pSignature,
  1820. CK_ULONG_PTR pulSignatureLen
  1821. )
  1822. {
  1823. COMMON_DEFINITIONS;
  1824. PR_LOG(modlog, 1, ("C_Sign"));
  1825. log_handle(3, fmt_hSession, hSession);
  1826. PR_LOG(modlog, 3, (fmt_pData, pData));
  1827. PR_LOG(modlog, 3, (fmt_ulDataLen, ulDataLen));
  1828. PR_LOG(modlog, 3, (fmt_pSignature, pSignature));
  1829. PR_LOG(modlog, 3, (fmt_pulSignatureLen, pulSignatureLen));
  1830. nssdbg_start_time(FUNC_C_SIGN,&start);
  1831. rv = module_functions->C_Sign(hSession,
  1832. pData,
  1833. ulDataLen,
  1834. pSignature,
  1835. pulSignatureLen);
  1836. nssdbg_finish_time(FUNC_C_SIGN,start);
  1837. PR_LOG(modlog, 4, (fmt_spulSignatureLen, *pulSignatureLen));
  1838. log_rv(rv);
  1839. return rv;
  1840. }
  1841. CK_RV NSSDBGC_SignUpdate(
  1842. CK_SESSION_HANDLE hSession,
  1843. CK_BYTE_PTR pPart,
  1844. CK_ULONG ulPartLen
  1845. )
  1846. {
  1847. COMMON_DEFINITIONS;
  1848. PR_LOG(modlog, 1, ("C_SignUpdate"));
  1849. log_handle(3, fmt_hSession, hSession);
  1850. PR_LOG(modlog, 3, (fmt_pPart, pPart));
  1851. PR_LOG(modlog, 3, (fmt_ulPartLen, ulPartLen));
  1852. nssdbg_start_time(FUNC_C_SIGNUPDATE,&start);
  1853. rv = module_functions->C_SignUpdate(hSession,
  1854. pPart,
  1855. ulPartLen);
  1856. nssdbg_finish_time(FUNC_C_SIGNUPDATE,start);
  1857. log_rv(rv);
  1858. return rv;
  1859. }
  1860. CK_RV NSSDBGC_SignFinal(
  1861. CK_SESSION_HANDLE hSession,
  1862. CK_BYTE_PTR pSignature,
  1863. CK_ULONG_PTR pulSignatureLen
  1864. )
  1865. {
  1866. COMMON_DEFINITIONS;
  1867. PR_LOG(modlog, 1, ("C_SignFinal"));
  1868. log_handle(3, fmt_hSession, hSession);
  1869. PR_LOG(modlog, 3, (fmt_pSignature, pSignature));
  1870. PR_LOG(modlog, 3, (fmt_pulSignatureLen, pulSignatureLen));
  1871. nssdbg_start_time(FUNC_C_SIGNFINAL,&start);
  1872. rv = module_functions->C_SignFinal(hSession,
  1873. pSignature,
  1874. pulSignatureLen);
  1875. nssdbg_finish_time(FUNC_C_SIGNFINAL,start);
  1876. PR_LOG(modlog, 4, (fmt_spulSignatureLen, *pulSignatureLen));
  1877. log_rv(rv);
  1878. return rv;
  1879. }
  1880. CK_RV NSSDBGC_SignRecoverInit(
  1881. CK_SESSION_HANDLE hSession,
  1882. CK_MECHANISM_PTR pMechanism,
  1883. CK_OBJECT_HANDLE hKey
  1884. )
  1885. {
  1886. COMMON_DEFINITIONS;
  1887. PR_LOG(modlog, 1, ("C_SignRecoverInit"));
  1888. log_handle(3, fmt_hSession, hSession);
  1889. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  1890. log_handle(3, fmt_hKey, hKey);
  1891. print_mechanism(pMechanism);
  1892. nssdbg_start_time(FUNC_C_SIGNRECOVERINIT,&start);
  1893. rv = module_functions->C_SignRecoverInit(hSession,
  1894. pMechanism,
  1895. hKey);
  1896. nssdbg_finish_time(FUNC_C_SIGNRECOVERINIT,start);
  1897. log_rv(rv);
  1898. return rv;
  1899. }
  1900. CK_RV NSSDBGC_SignRecover(
  1901. CK_SESSION_HANDLE hSession,
  1902. CK_BYTE_PTR pData,
  1903. CK_ULONG ulDataLen,
  1904. CK_BYTE_PTR pSignature,
  1905. CK_ULONG_PTR pulSignatureLen
  1906. )
  1907. {
  1908. COMMON_DEFINITIONS;
  1909. PR_LOG(modlog, 1, ("C_SignRecover"));
  1910. log_handle(3, fmt_hSession, hSession);
  1911. PR_LOG(modlog, 3, (fmt_pData, pData));
  1912. PR_LOG(modlog, 3, (fmt_ulDataLen, ulDataLen));
  1913. PR_LOG(modlog, 3, (fmt_pSignature, pSignature));
  1914. PR_LOG(modlog, 3, (fmt_pulSignatureLen, pulSignatureLen));
  1915. nssdbg_start_time(FUNC_C_SIGNRECOVER,&start);
  1916. rv = module_functions->C_SignRecover(hSession,
  1917. pData,
  1918. ulDataLen,
  1919. pSignature,
  1920. pulSignatureLen);
  1921. nssdbg_finish_time(FUNC_C_SIGNRECOVER,start);
  1922. PR_LOG(modlog, 4, (fmt_spulSignatureLen, *pulSignatureLen));
  1923. log_rv(rv);
  1924. return rv;
  1925. }
  1926. CK_RV NSSDBGC_VerifyInit(
  1927. CK_SESSION_HANDLE hSession,
  1928. CK_MECHANISM_PTR pMechanism,
  1929. CK_OBJECT_HANDLE hKey
  1930. )
  1931. {
  1932. COMMON_DEFINITIONS;
  1933. PR_LOG(modlog, 1, ("C_VerifyInit"));
  1934. log_handle(3, fmt_hSession, hSession);
  1935. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  1936. log_handle(3, fmt_hKey, hKey);
  1937. print_mechanism(pMechanism);
  1938. nssdbg_start_time(FUNC_C_VERIFYINIT,&start);
  1939. rv = module_functions->C_VerifyInit(hSession,
  1940. pMechanism,
  1941. hKey);
  1942. nssdbg_finish_time(FUNC_C_VERIFYINIT,start);
  1943. log_rv(rv);
  1944. return rv;
  1945. }
  1946. CK_RV NSSDBGC_Verify(
  1947. CK_SESSION_HANDLE hSession,
  1948. CK_BYTE_PTR pData,
  1949. CK_ULONG ulDataLen,
  1950. CK_BYTE_PTR pSignature,
  1951. CK_ULONG ulSignatureLen
  1952. )
  1953. {
  1954. COMMON_DEFINITIONS;
  1955. PR_LOG(modlog, 1, ("C_Verify"));
  1956. log_handle(3, fmt_hSession, hSession);
  1957. PR_LOG(modlog, 3, (fmt_pData, pData));
  1958. PR_LOG(modlog, 3, (fmt_ulDataLen, ulDataLen));
  1959. PR_LOG(modlog, 3, (fmt_pSignature, pSignature));
  1960. PR_LOG(modlog, 3, (fmt_ulSignatureLen, ulSignatureLen));
  1961. nssdbg_start_time(FUNC_C_VERIFY,&start);
  1962. rv = module_functions->C_Verify(hSession,
  1963. pData,
  1964. ulDataLen,
  1965. pSignature,
  1966. ulSignatureLen);
  1967. nssdbg_finish_time(FUNC_C_VERIFY,start);
  1968. log_rv(rv);
  1969. return rv;
  1970. }
  1971. CK_RV NSSDBGC_VerifyUpdate(
  1972. CK_SESSION_HANDLE hSession,
  1973. CK_BYTE_PTR pPart,
  1974. CK_ULONG ulPartLen
  1975. )
  1976. {
  1977. COMMON_DEFINITIONS;
  1978. PR_LOG(modlog, 1, ("C_VerifyUpdate"));
  1979. log_handle(3, fmt_hSession, hSession);
  1980. PR_LOG(modlog, 3, (fmt_pPart, pPart));
  1981. PR_LOG(modlog, 3, (fmt_ulPartLen, ulPartLen));
  1982. nssdbg_start_time(FUNC_C_VERIFYUPDATE,&start);
  1983. rv = module_functions->C_VerifyUpdate(hSession,
  1984. pPart,
  1985. ulPartLen);
  1986. nssdbg_finish_time(FUNC_C_VERIFYUPDATE,start);
  1987. log_rv(rv);
  1988. return rv;
  1989. }
  1990. CK_RV NSSDBGC_VerifyFinal(
  1991. CK_SESSION_HANDLE hSession,
  1992. CK_BYTE_PTR pSignature,
  1993. CK_ULONG ulSignatureLen
  1994. )
  1995. {
  1996. COMMON_DEFINITIONS;
  1997. PR_LOG(modlog, 1, ("C_VerifyFinal"));
  1998. log_handle(3, fmt_hSession, hSession);
  1999. PR_LOG(modlog, 3, (fmt_pSignature, pSignature));
  2000. PR_LOG(modlog, 3, (fmt_ulSignatureLen, ulSignatureLen));
  2001. nssdbg_start_time(FUNC_C_VERIFYFINAL,&start);
  2002. rv = module_functions->C_VerifyFinal(hSession,
  2003. pSignature,
  2004. ulSignatureLen);
  2005. nssdbg_finish_time(FUNC_C_VERIFYFINAL,start);
  2006. log_rv(rv);
  2007. return rv;
  2008. }
  2009. CK_RV NSSDBGC_VerifyRecoverInit(
  2010. CK_SESSION_HANDLE hSession,
  2011. CK_MECHANISM_PTR pMechanism,
  2012. CK_OBJECT_HANDLE hKey
  2013. )
  2014. {
  2015. COMMON_DEFINITIONS;
  2016. PR_LOG(modlog, 1, ("C_VerifyRecoverInit"));
  2017. log_handle(3, fmt_hSession, hSession);
  2018. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  2019. log_handle(3, fmt_hKey, hKey);
  2020. print_mechanism(pMechanism);
  2021. nssdbg_start_time(FUNC_C_VERIFYRECOVERINIT,&start);
  2022. rv = module_functions->C_VerifyRecoverInit(hSession,
  2023. pMechanism,
  2024. hKey);
  2025. nssdbg_finish_time(FUNC_C_VERIFYRECOVERINIT,start);
  2026. log_rv(rv);
  2027. return rv;
  2028. }
  2029. CK_RV NSSDBGC_VerifyRecover(
  2030. CK_SESSION_HANDLE hSession,
  2031. CK_BYTE_PTR pSignature,
  2032. CK_ULONG ulSignatureLen,
  2033. CK_BYTE_PTR pData,
  2034. CK_ULONG_PTR pulDataLen
  2035. )
  2036. {
  2037. COMMON_DEFINITIONS;
  2038. PR_LOG(modlog, 1, ("C_VerifyRecover"));
  2039. log_handle(3, fmt_hSession, hSession);
  2040. PR_LOG(modlog, 3, (fmt_pSignature, pSignature));
  2041. PR_LOG(modlog, 3, (fmt_ulSignatureLen, ulSignatureLen));
  2042. PR_LOG(modlog, 3, (fmt_pData, pData));
  2043. PR_LOG(modlog, 3, (fmt_pulDataLen, pulDataLen));
  2044. nssdbg_start_time(FUNC_C_VERIFYRECOVER,&start);
  2045. rv = module_functions->C_VerifyRecover(hSession,
  2046. pSignature,
  2047. ulSignatureLen,
  2048. pData,
  2049. pulDataLen);
  2050. nssdbg_finish_time(FUNC_C_VERIFYRECOVER,start);
  2051. PR_LOG(modlog, 4, (fmt_spulDataLen, *pulDataLen));
  2052. log_rv(rv);
  2053. return rv;
  2054. }
  2055. CK_RV NSSDBGC_DigestEncryptUpdate(
  2056. CK_SESSION_HANDLE hSession,
  2057. CK_BYTE_PTR pPart,
  2058. CK_ULONG ulPartLen,
  2059. CK_BYTE_PTR pEncryptedPart,
  2060. CK_ULONG_PTR pulEncryptedPartLen
  2061. )
  2062. {
  2063. COMMON_DEFINITIONS;
  2064. PR_LOG(modlog, 1, ("C_DigestEncryptUpdate"));
  2065. log_handle(3, fmt_hSession, hSession);
  2066. PR_LOG(modlog, 3, (fmt_pPart, pPart));
  2067. PR_LOG(modlog, 3, (fmt_ulPartLen, ulPartLen));
  2068. PR_LOG(modlog, 3, (fmt_pEncryptedPart, pEncryptedPart));
  2069. PR_LOG(modlog, 3, (fmt_pulEncryptedPartLen, pulEncryptedPartLen));
  2070. nssdbg_start_time(FUNC_C_DIGESTENCRYPTUPDATE,&start);
  2071. rv = module_functions->C_DigestEncryptUpdate(hSession,
  2072. pPart,
  2073. ulPartLen,
  2074. pEncryptedPart,
  2075. pulEncryptedPartLen);
  2076. nssdbg_finish_time(FUNC_C_DIGESTENCRYPTUPDATE,start);
  2077. PR_LOG(modlog, 4, (fmt_spulEncryptedPartLen, *pulEncryptedPartLen));
  2078. log_rv(rv);
  2079. return rv;
  2080. }
  2081. CK_RV NSSDBGC_DecryptDigestUpdate(
  2082. CK_SESSION_HANDLE hSession,
  2083. CK_BYTE_PTR pEncryptedPart,
  2084. CK_ULONG ulEncryptedPartLen,
  2085. CK_BYTE_PTR pPart,
  2086. CK_ULONG_PTR pulPartLen
  2087. )
  2088. {
  2089. COMMON_DEFINITIONS;
  2090. PR_LOG(modlog, 1, ("C_DecryptDigestUpdate"));
  2091. log_handle(3, fmt_hSession, hSession);
  2092. PR_LOG(modlog, 3, (fmt_pEncryptedPart, pEncryptedPart));
  2093. PR_LOG(modlog, 3, (fmt_ulEncryptedPartLen, ulEncryptedPartLen));
  2094. PR_LOG(modlog, 3, (fmt_pPart, pPart));
  2095. PR_LOG(modlog, 3, (fmt_pulPartLen, pulPartLen));
  2096. nssdbg_start_time(FUNC_C_DECRYPTDIGESTUPDATE,&start);
  2097. rv = module_functions->C_DecryptDigestUpdate(hSession,
  2098. pEncryptedPart,
  2099. ulEncryptedPartLen,
  2100. pPart,
  2101. pulPartLen);
  2102. nssdbg_finish_time(FUNC_C_DECRYPTDIGESTUPDATE,start);
  2103. PR_LOG(modlog, 4, (fmt_spulPartLen, *pulPartLen));
  2104. log_rv(rv);
  2105. return rv;
  2106. }
  2107. CK_RV NSSDBGC_SignEncryptUpdate(
  2108. CK_SESSION_HANDLE hSession,
  2109. CK_BYTE_PTR pPart,
  2110. CK_ULONG ulPartLen,
  2111. CK_BYTE_PTR pEncryptedPart,
  2112. CK_ULONG_PTR pulEncryptedPartLen
  2113. )
  2114. {
  2115. COMMON_DEFINITIONS;
  2116. PR_LOG(modlog, 1, ("C_SignEncryptUpdate"));
  2117. log_handle(3, fmt_hSession, hSession);
  2118. PR_LOG(modlog, 3, (fmt_pPart, pPart));
  2119. PR_LOG(modlog, 3, (fmt_ulPartLen, ulPartLen));
  2120. PR_LOG(modlog, 3, (fmt_pEncryptedPart, pEncryptedPart));
  2121. PR_LOG(modlog, 3, (fmt_pulEncryptedPartLen, pulEncryptedPartLen));
  2122. nssdbg_start_time(FUNC_C_SIGNENCRYPTUPDATE,&start);
  2123. rv = module_functions->C_SignEncryptUpdate(hSession,
  2124. pPart,
  2125. ulPartLen,
  2126. pEncryptedPart,
  2127. pulEncryptedPartLen);
  2128. nssdbg_finish_time(FUNC_C_SIGNENCRYPTUPDATE,start);
  2129. PR_LOG(modlog, 4, (fmt_spulEncryptedPartLen, *pulEncryptedPartLen));
  2130. log_rv(rv);
  2131. return rv;
  2132. }
  2133. CK_RV NSSDBGC_DecryptVerifyUpdate(
  2134. CK_SESSION_HANDLE hSession,
  2135. CK_BYTE_PTR pEncryptedPart,
  2136. CK_ULONG ulEncryptedPartLen,
  2137. CK_BYTE_PTR pPart,
  2138. CK_ULONG_PTR pulPartLen
  2139. )
  2140. {
  2141. COMMON_DEFINITIONS;
  2142. PR_LOG(modlog, 1, ("C_DecryptVerifyUpdate"));
  2143. log_handle(3, fmt_hSession, hSession);
  2144. PR_LOG(modlog, 3, (fmt_pEncryptedPart, pEncryptedPart));
  2145. PR_LOG(modlog, 3, (fmt_ulEncryptedPartLen, ulEncryptedPartLen));
  2146. PR_LOG(modlog, 3, (fmt_pPart, pPart));
  2147. PR_LOG(modlog, 3, (fmt_pulPartLen, pulPartLen));
  2148. nssdbg_start_time(FUNC_C_DECRYPTVERIFYUPDATE,&start);
  2149. rv = module_functions->C_DecryptVerifyUpdate(hSession,
  2150. pEncryptedPart,
  2151. ulEncryptedPartLen,
  2152. pPart,
  2153. pulPartLen);
  2154. nssdbg_finish_time(FUNC_C_DECRYPTVERIFYUPDATE,start);
  2155. PR_LOG(modlog, 4, (fmt_spulPartLen, *pulPartLen));
  2156. log_rv(rv);
  2157. return rv;
  2158. }
  2159. CK_RV NSSDBGC_GenerateKey(
  2160. CK_SESSION_HANDLE hSession,
  2161. CK_MECHANISM_PTR pMechanism,
  2162. CK_ATTRIBUTE_PTR pTemplate,
  2163. CK_ULONG ulCount,
  2164. CK_OBJECT_HANDLE_PTR phKey
  2165. )
  2166. {
  2167. COMMON_DEFINITIONS;
  2168. PR_LOG(modlog, 1, ("C_GenerateKey"));
  2169. log_handle(3, fmt_hSession, hSession);
  2170. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  2171. PR_LOG(modlog, 3, (fmt_pTemplate, pTemplate));
  2172. PR_LOG(modlog, 3, (fmt_ulCount, ulCount));
  2173. PR_LOG(modlog, 3, (fmt_phKey, phKey));
  2174. print_template(pTemplate, ulCount);
  2175. print_mechanism(pMechanism);
  2176. nssdbg_start_time(FUNC_C_GENERATEKEY,&start);
  2177. rv = module_functions->C_GenerateKey(hSession,
  2178. pMechanism,
  2179. pTemplate,
  2180. ulCount,
  2181. phKey);
  2182. nssdbg_finish_time(FUNC_C_GENERATEKEY,start);
  2183. log_handle(4, fmt_sphKey, *phKey);
  2184. log_rv(rv);
  2185. return rv;
  2186. }
  2187. CK_RV NSSDBGC_GenerateKeyPair(
  2188. CK_SESSION_HANDLE hSession,
  2189. CK_MECHANISM_PTR pMechanism,
  2190. CK_ATTRIBUTE_PTR pPublicKeyTemplate,
  2191. CK_ULONG ulPublicKeyAttributeCount,
  2192. CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
  2193. CK_ULONG ulPrivateKeyAttributeCount,
  2194. CK_OBJECT_HANDLE_PTR phPublicKey,
  2195. CK_OBJECT_HANDLE_PTR phPrivateKey
  2196. )
  2197. {
  2198. COMMON_DEFINITIONS;
  2199. PR_LOG(modlog, 1, ("C_GenerateKeyPair"));
  2200. log_handle(3, fmt_hSession, hSession);
  2201. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  2202. PR_LOG(modlog, 3, (" pPublicKeyTemplate = 0x%p", pPublicKeyTemplate));
  2203. PR_LOG(modlog, 3, (" ulPublicKeyAttributeCount = %d", ulPublicKeyAttributeCount));
  2204. PR_LOG(modlog, 3, (" pPrivateKeyTemplate = 0x%p", pPrivateKeyTemplate));
  2205. PR_LOG(modlog, 3, (" ulPrivateKeyAttributeCount = %d", ulPrivateKeyAttributeCount));
  2206. PR_LOG(modlog, 3, (" phPublicKey = 0x%p", phPublicKey));
  2207. print_template(pPublicKeyTemplate, ulPublicKeyAttributeCount);
  2208. PR_LOG(modlog, 3, (" phPrivateKey = 0x%p", phPrivateKey));
  2209. print_template(pPrivateKeyTemplate, ulPrivateKeyAttributeCount);
  2210. print_mechanism(pMechanism);
  2211. nssdbg_start_time(FUNC_C_GENERATEKEYPAIR,&start);
  2212. rv = module_functions->C_GenerateKeyPair(hSession,
  2213. pMechanism,
  2214. pPublicKeyTemplate,
  2215. ulPublicKeyAttributeCount,
  2216. pPrivateKeyTemplate,
  2217. ulPrivateKeyAttributeCount,
  2218. phPublicKey,
  2219. phPrivateKey);
  2220. nssdbg_finish_time(FUNC_C_GENERATEKEYPAIR,start);
  2221. log_handle(4, " *phPublicKey = 0x%x", *phPublicKey);
  2222. log_handle(4, " *phPrivateKey = 0x%x", *phPrivateKey);
  2223. log_rv(rv);
  2224. return rv;
  2225. }
  2226. CK_RV NSSDBGC_WrapKey(
  2227. CK_SESSION_HANDLE hSession,
  2228. CK_MECHANISM_PTR pMechanism,
  2229. CK_OBJECT_HANDLE hWrappingKey,
  2230. CK_OBJECT_HANDLE hKey,
  2231. CK_BYTE_PTR pWrappedKey,
  2232. CK_ULONG_PTR pulWrappedKeyLen
  2233. )
  2234. {
  2235. COMMON_DEFINITIONS;
  2236. PR_LOG(modlog, 1, ("C_WrapKey"));
  2237. log_handle(3, fmt_hSession, hSession);
  2238. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  2239. log_handle(3, " hWrappingKey = 0x%x", hWrappingKey);
  2240. log_handle(3, fmt_hKey, hKey);
  2241. PR_LOG(modlog, 3, (fmt_pWrappedKey, pWrappedKey));
  2242. PR_LOG(modlog, 3, (" pulWrappedKeyLen = 0x%p", pulWrappedKeyLen));
  2243. print_mechanism(pMechanism);
  2244. nssdbg_start_time(FUNC_C_WRAPKEY,&start);
  2245. rv = module_functions->C_WrapKey(hSession,
  2246. pMechanism,
  2247. hWrappingKey,
  2248. hKey,
  2249. pWrappedKey,
  2250. pulWrappedKeyLen);
  2251. nssdbg_finish_time(FUNC_C_WRAPKEY,start);
  2252. PR_LOG(modlog, 4, (" *pulWrappedKeyLen = 0x%x", *pulWrappedKeyLen));
  2253. log_rv(rv);
  2254. return rv;
  2255. }
  2256. CK_RV NSSDBGC_UnwrapKey(
  2257. CK_SESSION_HANDLE hSession,
  2258. CK_MECHANISM_PTR pMechanism,
  2259. CK_OBJECT_HANDLE hUnwrappingKey,
  2260. CK_BYTE_PTR pWrappedKey,
  2261. CK_ULONG ulWrappedKeyLen,
  2262. CK_ATTRIBUTE_PTR pTemplate,
  2263. CK_ULONG ulAttributeCount,
  2264. CK_OBJECT_HANDLE_PTR phKey
  2265. )
  2266. {
  2267. COMMON_DEFINITIONS;
  2268. PR_LOG(modlog, 1, ("C_UnwrapKey"));
  2269. log_handle(3, fmt_hSession, hSession);
  2270. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  2271. log_handle(3, " hUnwrappingKey = 0x%x", hUnwrappingKey);
  2272. PR_LOG(modlog, 3, (fmt_pWrappedKey, pWrappedKey));
  2273. PR_LOG(modlog, 3, (" ulWrappedKeyLen = %d", ulWrappedKeyLen));
  2274. PR_LOG(modlog, 3, (fmt_pTemplate, pTemplate));
  2275. PR_LOG(modlog, 3, (fmt_ulAttributeCount, ulAttributeCount));
  2276. PR_LOG(modlog, 3, (fmt_phKey, phKey));
  2277. print_template(pTemplate, ulAttributeCount);
  2278. print_mechanism(pMechanism);
  2279. nssdbg_start_time(FUNC_C_UNWRAPKEY,&start);
  2280. rv = module_functions->C_UnwrapKey(hSession,
  2281. pMechanism,
  2282. hUnwrappingKey,
  2283. pWrappedKey,
  2284. ulWrappedKeyLen,
  2285. pTemplate,
  2286. ulAttributeCount,
  2287. phKey);
  2288. nssdbg_finish_time(FUNC_C_UNWRAPKEY,start);
  2289. log_handle(4, fmt_sphKey, *phKey);
  2290. log_rv(rv);
  2291. return rv;
  2292. }
  2293. CK_RV NSSDBGC_DeriveKey(
  2294. CK_SESSION_HANDLE hSession,
  2295. CK_MECHANISM_PTR pMechanism,
  2296. CK_OBJECT_HANDLE hBaseKey,
  2297. CK_ATTRIBUTE_PTR pTemplate,
  2298. CK_ULONG ulAttributeCount,
  2299. CK_OBJECT_HANDLE_PTR phKey
  2300. )
  2301. {
  2302. COMMON_DEFINITIONS;
  2303. PR_LOG(modlog, 1, ("C_DeriveKey"));
  2304. log_handle(3, fmt_hSession, hSession);
  2305. PR_LOG(modlog, 3, (fmt_pMechanism, pMechanism));
  2306. log_handle(3, " hBaseKey = 0x%x", hBaseKey);
  2307. PR_LOG(modlog, 3, (fmt_pTemplate, pTemplate));
  2308. PR_LOG(modlog, 3, (fmt_ulAttributeCount, ulAttributeCount));
  2309. PR_LOG(modlog, 3, (fmt_phKey, phKey));
  2310. print_template(pTemplate, ulAttributeCount);
  2311. print_mechanism(pMechanism);
  2312. nssdbg_start_time(FUNC_C_DERIVEKEY,&start);
  2313. rv = module_functions->C_DeriveKey(hSession,
  2314. pMechanism,
  2315. hBaseKey,
  2316. pTemplate,
  2317. ulAttributeCount,
  2318. phKey);
  2319. nssdbg_finish_time(FUNC_C_DERIVEKEY,start);
  2320. log_handle(4, fmt_sphKey, *phKey);
  2321. log_rv(rv);
  2322. return rv;
  2323. }
  2324. CK_RV NSSDBGC_SeedRandom(
  2325. CK_SESSION_HANDLE hSession,
  2326. CK_BYTE_PTR pSeed,
  2327. CK_ULONG ulSeedLen
  2328. )
  2329. {
  2330. COMMON_DEFINITIONS;
  2331. PR_LOG(modlog, 1, ("C_SeedRandom"));
  2332. log_handle(3, fmt_hSession, hSession);
  2333. PR_LOG(modlog, 3, (" pSeed = 0x%p", pSeed));
  2334. PR_LOG(modlog, 3, (" ulSeedLen = %d", ulSeedLen));
  2335. nssdbg_start_time(FUNC_C_SEEDRANDOM,&start);
  2336. rv = module_functions->C_SeedRandom(hSession,
  2337. pSeed,
  2338. ulSeedLen);
  2339. nssdbg_finish_time(FUNC_C_SEEDRANDOM,start);
  2340. log_rv(rv);
  2341. return rv;
  2342. }
  2343. CK_RV NSSDBGC_GenerateRandom(
  2344. CK_SESSION_HANDLE hSession,
  2345. CK_BYTE_PTR RandomData,
  2346. CK_ULONG ulRandomLen
  2347. )
  2348. {
  2349. COMMON_DEFINITIONS;
  2350. PR_LOG(modlog, 1, ("C_GenerateRandom"));
  2351. log_handle(3, fmt_hSession, hSession);
  2352. PR_LOG(modlog, 3, (" RandomData = 0x%p", RandomData));
  2353. PR_LOG(modlog, 3, (" ulRandomLen = %d", ulRandomLen));
  2354. nssdbg_start_time(FUNC_C_GENERATERANDOM,&start);
  2355. rv = module_functions->C_GenerateRandom(hSession,
  2356. RandomData,
  2357. ulRandomLen);
  2358. nssdbg_finish_time(FUNC_C_GENERATERANDOM,start);
  2359. log_rv(rv);
  2360. return rv;
  2361. }
  2362. CK_RV NSSDBGC_GetFunctionStatus(
  2363. CK_SESSION_HANDLE hSession
  2364. )
  2365. {
  2366. COMMON_DEFINITIONS;
  2367. PR_LOG(modlog, 1, ("C_GetFunctionStatus"));
  2368. log_handle(3, fmt_hSession, hSession);
  2369. nssdbg_start_time(FUNC_C_GETFUNCTIONSTATUS,&start);
  2370. rv = module_functions->C_GetFunctionStatus(hSession);
  2371. nssdbg_finish_time(FUNC_C_GETFUNCTIONSTATUS,start);
  2372. log_rv(rv);
  2373. return rv;
  2374. }
  2375. CK_RV NSSDBGC_CancelFunction(
  2376. CK_SESSION_HANDLE hSession
  2377. )
  2378. {
  2379. COMMON_DEFINITIONS;
  2380. PR_LOG(modlog, 1, ("C_CancelFunction"));
  2381. log_handle(3, fmt_hSession, hSession);
  2382. nssdbg_start_time(FUNC_C_CANCELFUNCTION,&start);
  2383. rv = module_functions->C_CancelFunction(hSession);
  2384. nssdbg_finish_time(FUNC_C_CANCELFUNCTION,start);
  2385. log_rv(rv);
  2386. return rv;
  2387. }
  2388. CK_RV NSSDBGC_WaitForSlotEvent(
  2389. CK_FLAGS flags,
  2390. CK_SLOT_ID_PTR pSlot,
  2391. CK_VOID_PTR pRserved
  2392. )
  2393. {
  2394. COMMON_DEFINITIONS;
  2395. PR_LOG(modlog, 1, ("C_WaitForSlotEvent"));
  2396. PR_LOG(modlog, 3, (fmt_flags, flags));
  2397. PR_LOG(modlog, 3, (" pSlot = 0x%p", pSlot));
  2398. PR_LOG(modlog, 3, (" pRserved = 0x%p", pRserved));
  2399. nssdbg_start_time(FUNC_C_WAITFORSLOTEVENT,&start);
  2400. rv = module_functions->C_WaitForSlotEvent(flags,
  2401. pSlot,
  2402. pRserved);
  2403. nssdbg_finish_time(FUNC_C_WAITFORSLOTEVENT,start);
  2404. log_rv(rv);
  2405. return rv;
  2406. }
  2407. CK_FUNCTION_LIST_PTR nss_InsertDeviceLog(
  2408. CK_FUNCTION_LIST_PTR devEPV
  2409. )
  2410. {
  2411. module_functions = devEPV;
  2412. modlog = PR_NewLogModule("nss_mod_log");
  2413. debug_functions.C_Initialize = NSSDBGC_Initialize;
  2414. debug_functions.C_Finalize = NSSDBGC_Finalize;
  2415. debug_functions.C_GetInfo = NSSDBGC_GetInfo;
  2416. debug_functions.C_GetFunctionList = NSSDBGC_GetFunctionList;
  2417. debug_functions.C_GetSlotList = NSSDBGC_GetSlotList;
  2418. debug_functions.C_GetSlotInfo = NSSDBGC_GetSlotInfo;
  2419. debug_functions.C_GetTokenInfo = NSSDBGC_GetTokenInfo;
  2420. debug_functions.C_GetMechanismList = NSSDBGC_GetMechanismList;
  2421. debug_functions.C_GetMechanismInfo = NSSDBGC_GetMechanismInfo;
  2422. debug_functions.C_InitToken = NSSDBGC_InitToken;
  2423. debug_functions.C_InitPIN = NSSDBGC_InitPIN;
  2424. debug_functions.C_SetPIN = NSSDBGC_SetPIN;
  2425. debug_functions.C_OpenSession = NSSDBGC_OpenSession;
  2426. debug_functions.C_CloseSession = NSSDBGC_CloseSession;
  2427. debug_functions.C_CloseAllSessions = NSSDBGC_CloseAllSessions;
  2428. debug_functions.C_GetSessionInfo = NSSDBGC_GetSessionInfo;
  2429. debug_functions.C_GetOperationState = NSSDBGC_GetOperationState;
  2430. debug_functions.C_SetOperationState = NSSDBGC_SetOperationState;
  2431. debug_functions.C_Login = NSSDBGC_Login;
  2432. debug_functions.C_Logout = NSSDBGC_Logout;
  2433. debug_functions.C_CreateObject = NSSDBGC_CreateObject;
  2434. debug_functions.C_CopyObject = NSSDBGC_CopyObject;
  2435. debug_functions.C_DestroyObject = NSSDBGC_DestroyObject;
  2436. debug_functions.C_GetObjectSize = NSSDBGC_GetObjectSize;
  2437. debug_functions.C_GetAttributeValue = NSSDBGC_GetAttributeValue;
  2438. debug_functions.C_SetAttributeValue = NSSDBGC_SetAttributeValue;
  2439. debug_functions.C_FindObjectsInit = NSSDBGC_FindObjectsInit;
  2440. debug_functions.C_FindObjects = NSSDBGC_FindObjects;
  2441. debug_functions.C_FindObjectsFinal = NSSDBGC_FindObjectsFinal;
  2442. debug_functions.C_EncryptInit = NSSDBGC_EncryptInit;
  2443. debug_functions.C_Encrypt = NSSDBGC_Encrypt;
  2444. debug_functions.C_EncryptUpdate = NSSDBGC_EncryptUpdate;
  2445. debug_functions.C_EncryptFinal = NSSDBGC_EncryptFinal;
  2446. debug_functions.C_DecryptInit = NSSDBGC_DecryptInit;
  2447. debug_functions.C_Decrypt = NSSDBGC_Decrypt;
  2448. debug_functions.C_DecryptUpdate = NSSDBGC_DecryptUpdate;
  2449. debug_functions.C_DecryptFinal = NSSDBGC_DecryptFinal;
  2450. debug_functions.C_DigestInit = NSSDBGC_DigestInit;
  2451. debug_functions.C_Digest = NSSDBGC_Digest;
  2452. debug_functions.C_DigestUpdate = NSSDBGC_DigestUpdate;
  2453. debug_functions.C_DigestKey = NSSDBGC_DigestKey;
  2454. debug_functions.C_DigestFinal = NSSDBGC_DigestFinal;
  2455. debug_functions.C_SignInit = NSSDBGC_SignInit;
  2456. debug_functions.C_Sign = NSSDBGC_Sign;
  2457. debug_functions.C_SignUpdate = NSSDBGC_SignUpdate;
  2458. debug_functions.C_SignFinal = NSSDBGC_SignFinal;
  2459. debug_functions.C_SignRecoverInit = NSSDBGC_SignRecoverInit;
  2460. debug_functions.C_SignRecover = NSSDBGC_SignRecover;
  2461. debug_functions.C_VerifyInit = NSSDBGC_VerifyInit;
  2462. debug_functions.C_Verify = NSSDBGC_Verify;
  2463. debug_functions.C_VerifyUpdate = NSSDBGC_VerifyUpdate;
  2464. debug_functions.C_VerifyFinal = NSSDBGC_VerifyFinal;
  2465. debug_functions.C_VerifyRecoverInit = NSSDBGC_VerifyRecoverInit;
  2466. debug_functions.C_VerifyRecover = NSSDBGC_VerifyRecover;
  2467. debug_functions.C_DigestEncryptUpdate = NSSDBGC_DigestEncryptUpdate;
  2468. debug_functions.C_DecryptDigestUpdate = NSSDBGC_DecryptDigestUpdate;
  2469. debug_functions.C_SignEncryptUpdate = NSSDBGC_SignEncryptUpdate;
  2470. debug_functions.C_DecryptVerifyUpdate = NSSDBGC_DecryptVerifyUpdate;
  2471. debug_functions.C_GenerateKey = NSSDBGC_GenerateKey;
  2472. debug_functions.C_GenerateKeyPair = NSSDBGC_GenerateKeyPair;
  2473. debug_functions.C_WrapKey = NSSDBGC_WrapKey;
  2474. debug_functions.C_UnwrapKey = NSSDBGC_UnwrapKey;
  2475. debug_functions.C_DeriveKey = NSSDBGC_DeriveKey;
  2476. debug_functions.C_SeedRandom = NSSDBGC_SeedRandom;
  2477. debug_functions.C_GenerateRandom = NSSDBGC_GenerateRandom;
  2478. debug_functions.C_GetFunctionStatus = NSSDBGC_GetFunctionStatus;
  2479. debug_functions.C_CancelFunction = NSSDBGC_CancelFunction;
  2480. debug_functions.C_WaitForSlotEvent = NSSDBGC_WaitForSlotEvent;
  2481. return &debug_functions;
  2482. }
  2483. /*
  2484. * scale the time factor up accordingly.
  2485. * This routine tries to keep at least 2 significant figures on output.
  2486. * If the time is 0, then indicate that with a 'z' for units.
  2487. * If the time is greater than 10 minutes, output the time in minutes.
  2488. * If the time is less than 10 minutes but greater than 10 seconds output
  2489. * the time in second.
  2490. * If the time is less than 10 seconds but greater than 10 milliseconds
  2491. * output * the time in millisecond.
  2492. * If the time is less than 10 milliseconds but greater than 0 ticks output
  2493. * the time in microsecond.
  2494. *
  2495. */
  2496. static PRUint32 getPrintTime(PRIntervalTime time ,char **type)
  2497. {
  2498. PRUint32 prTime;
  2499. /* detect a programming error by outputting 'bu' to the output stream
  2500. * rather than crashing */
  2501. *type = "bug";
  2502. if (time == 0) {
  2503. *type = "z";
  2504. return 0;
  2505. }
  2506. prTime = PR_IntervalToSeconds(time);
  2507. if (prTime >= 600) {
  2508. *type="m";
  2509. return prTime/60;
  2510. }
  2511. if (prTime >= 10) {
  2512. *type="s";
  2513. return prTime;
  2514. }
  2515. prTime = PR_IntervalToMilliseconds(time);
  2516. if (prTime >= 10) {
  2517. *type="ms";
  2518. return prTime;
  2519. }
  2520. *type = "us";
  2521. return PR_IntervalToMicroseconds(time);
  2522. }
  2523. static void print_final_statistics(void)
  2524. {
  2525. int total_calls = 0;
  2526. PRIntervalTime total_time = 0;
  2527. PRUint32 pr_total_time;
  2528. char *type;
  2529. char *fname;
  2530. FILE *outfile = NULL;
  2531. int i;
  2532. fname = PR_GetEnv("NSS_OUTPUT_FILE");
  2533. if (fname) {
  2534. /* need to add an optional process id to the filename */
  2535. outfile = fopen(fname,"w+");
  2536. }
  2537. if (!outfile) {
  2538. outfile = stdout;
  2539. }
  2540. fprintf(outfile,"%-25s %10s %12s %12s %10s\n", "Function", "# Calls",
  2541. "Time", "Avg.", "% Time");
  2542. fprintf(outfile,"\n");
  2543. for (i=0; i < nssdbg_prof_size; i++) {
  2544. total_calls += nssdbg_prof_data[i].calls;
  2545. total_time += nssdbg_prof_data[i].time;
  2546. }
  2547. for (i=0; i < nssdbg_prof_size; i++) {
  2548. PRIntervalTime time = nssdbg_prof_data[i].time;
  2549. PRUint32 usTime = PR_IntervalToMicroseconds(time);
  2550. PRUint32 prTime = 0;
  2551. PRUint32 calls = nssdbg_prof_data[i].calls;
  2552. /* don't print out functions that weren't even called */
  2553. if (calls == 0) {
  2554. continue;
  2555. }
  2556. prTime = getPrintTime(time,&type);
  2557. fprintf(outfile,"%-25s %10d %10d%2s ", nssdbg_prof_data[i].function,
  2558. calls, prTime, type);
  2559. /* for now always output the average in microseconds */
  2560. fprintf(outfile,"%10.2f%2s", (float)usTime / (float)calls, "us" );
  2561. fprintf(outfile,"%10.2f%%", ((float)time / (float)total_time) * 100);
  2562. fprintf(outfile,"\n");
  2563. }
  2564. fprintf(outfile,"\n");
  2565. pr_total_time = getPrintTime(total_time,&type);
  2566. fprintf(outfile,"%25s %10d %10d%2s\n", "Totals", total_calls,
  2567. pr_total_time, type);
  2568. fprintf(outfile,"\n\nMaximum number of concurrent open sessions: %d\n\n",
  2569. maxOpenSessions);
  2570. fflush (outfile);
  2571. if (outfile != stdout) {
  2572. fclose(outfile);
  2573. }
  2574. }