security/nss/lib/pk11wrap/debug_module.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

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

mercurial