00001 #include "../../config.h"
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <string.h>
00005
00006 #if !defined(ENABLE_PKCS11H_SLOTEVENT)
00007 int main () {
00008 printf ("!win32, certificate, enum and crypto engine interfaces should be enabled for this test");
00009 exit (0);
00010 return 0;
00011 }
00012 #else
00013
00014 #if defined(_WIN32)
00015 #include <windows.h>
00016 #else
00017 #include <unistd.h>
00018 #endif
00019
00020 #include <pkcs11-helper-1.0/pkcs11h-core.h>
00021
00022 static
00023 void
00024 fatal (const char * const m, CK_RV rv) {
00025 fprintf (stderr, "%s - %08lu - %s\n", m, rv, pkcs11h_getMessage (rv));
00026 exit (1);
00027 }
00028
00029 static
00030 void
00031 mypause (const char * const m) {
00032 char temp[10];
00033
00034 fprintf (stdout, "%s", m);
00035 fflush (stdout);
00036 fgets (temp, sizeof (temp), stdin);
00037 }
00038
00039 static
00040 void
00041 _pkcs11h_hooks_log (
00042 IN void * const global_data,
00043 IN unsigned flags,
00044 IN const char * const format,
00045 IN va_list args
00046 ) {
00047 vfprintf (stdout, format, args);
00048 fprintf (stdout, "\n");
00049 fflush (stdout);
00050 }
00051
00052 static
00053 void
00054 _pkcs11h_hooks_slotevent (
00055 IN void * const global_data
00056 ) {
00057 printf ("slotevent\n");
00058 }
00059
00060 int main () {
00061 CK_RV rv;
00062
00063 printf ("Initializing pkcs11-helper\n");
00064
00065 if ((rv = pkcs11h_initialize ()) != CKR_OK) {
00066 fatal ("pkcs11h_initialize failed", rv);
00067 }
00068
00069 printf ("Registering pkcs11-helper hooks\n");
00070
00071 if ((rv = pkcs11h_setLogHook (_pkcs11h_hooks_log, NULL)) != CKR_OK) {
00072 fatal ("pkcs11h_setLogHook failed", rv);
00073 }
00074
00075 pkcs11h_setLogLevel (TEST_LOG_LEVEL);
00076
00077 if ((rv = pkcs11h_setSlotEventHook (_pkcs11h_hooks_slotevent, NULL)) != CKR_OK) {
00078 fatal ("pkcs11h_setSlotEventHook failed", rv);
00079 }
00080
00081 printf ("Adding provider '%s' as auto\n", TEST_PROVIDER);
00082
00083 if (
00084 (rv = pkcs11h_addProvider (
00085 TEST_PROVIDER,
00086 TEST_PROVIDER,
00087 FALSE,
00088 PKCS11H_PRIVATEMODE_MASK_AUTO,
00089 PKCS11H_SLOTEVENT_METHOD_AUTO,
00090 0,
00091 FALSE
00092 )) != CKR_OK
00093 ) {
00094 fatal ("pkcs11h_addProvider failed", rv);
00095 }
00096
00097 printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00098
00099 #if defined(_WIN32)
00100 Sleep (30*1024);
00101 #else
00102 sleep (30);
00103 #endif
00104
00105 if ((rv = pkcs11h_removeProvider (TEST_PROVIDER)) != CKR_OK) {
00106 fatal ("pkcs11h_removeProvider failed", rv);
00107 }
00108
00109 printf ("Adding provider '%s' as trigger\n", TEST_PROVIDER);
00110
00111 if (
00112 (rv = pkcs11h_addProvider (
00113 TEST_PROVIDER,
00114 TEST_PROVIDER,
00115 FALSE,
00116 PKCS11H_PRIVATEMODE_MASK_AUTO,
00117 PKCS11H_SLOTEVENT_METHOD_TRIGGER,
00118 0,
00119 FALSE
00120 )) != CKR_OK
00121 ) {
00122 fatal ("pkcs11h_addProvider failed", rv);
00123 }
00124
00125 printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00126
00127 #if defined(_WIN32)
00128 Sleep (30*1024);
00129 #else
00130 sleep (30);
00131 #endif
00132
00133 if ((rv = pkcs11h_removeProvider (TEST_PROVIDER)) != CKR_OK) {
00134 fatal ("pkcs11h_removeProvider failed", rv);
00135 }
00136
00137 printf ("Adding provider '%s' as poll\n", TEST_PROVIDER);
00138
00139 if (
00140 (rv = pkcs11h_addProvider (
00141 TEST_PROVIDER,
00142 TEST_PROVIDER,
00143 FALSE,
00144 PKCS11H_PRIVATEMODE_MASK_AUTO,
00145 PKCS11H_SLOTEVENT_METHOD_POLL,
00146 0,
00147 FALSE
00148 )) != CKR_OK
00149 ) {
00150 fatal ("pkcs11h_addProvider failed", rv);
00151 }
00152
00153 printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00154
00155 #if defined(_WIN32)
00156 Sleep (30*1024);
00157 #else
00158 sleep (30);
00159 #endif
00160
00161 if ((rv = pkcs11h_removeProvider (TEST_PROVIDER)) != CKR_OK) {
00162 fatal ("pkcs11h_removeProvider failed", rv);
00163 }
00164
00165 printf ("Adding provider '%s' as fetch\n", TEST_PROVIDER);
00166
00167 if (
00168 (rv = pkcs11h_addProvider (
00169 TEST_PROVIDER,
00170 TEST_PROVIDER,
00171 FALSE,
00172 PKCS11H_PRIVATEMODE_MASK_AUTO,
00173 PKCS11H_SLOTEVENT_METHOD_FETCH,
00174 0,
00175 FALSE
00176 )) != CKR_OK
00177 ) {
00178 fatal ("pkcs11h_addProvider failed", rv);
00179 }
00180
00181 printf ("Please remove and insert tokens (pause for 30 seconds)\n");
00182
00183 #if defined(_WIN32)
00184 Sleep (30*1024);
00185 #else
00186 sleep (30);
00187 #endif
00188
00189 printf ("Terminating pkcs11-helper\n");
00190
00191 if ((rv = pkcs11h_terminate ()) != CKR_OK) {
00192 fatal ("pkcs11h_terminate failed", rv);
00193 }
00194
00195 exit (0);
00196 return 0;
00197 }
00198
00199 #endif