⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 misc_func.c

📁 IBM的Linux上的PKCS#11实现
💻 C
📖 第 1 页 / 共 2 页
字号:
// File: driver.c// G//// Test driver.  In-depth regression test for PKCS #11//#include <windows.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <memory.h>#include "pkcs11types.h"#include "regress.h"// Purpose:  to cause a variety of crashes to test that the Cryptoki.DLL//           DLL Init-Term routine properly detaches from the coprocessor//           in the event of a abnormal program termination.//CK_BYTEdo_crash(){   // dereferencing a NULL pointer detaches correctly   CK_BYTE *ptr = NULL;   CK_BYTE  a;   a = *ptr;   return a;}////int do_DummySpeed( void ){   CK_SLOT_ID        slot_id;   CK_ULONG          i;   CK_RV             rc;   printf("do_DummySpeed.  1000 iterations to the card...\n");#if 0   slot_id = SLOT_ID;   for (i=0; i < 1000; i++) {      rc = DummyFunction( slot_id );      if (rc != CKR_OK) {         show_error("   DummyFunction", rc );         return FALSE;      }   }#endif   printf("Done...\n");   return TRUE;}////int do_GetInfo( void ){   CK_INFO info;   CK_RV   rc;   printf("do_GetInfo...\n");   rc = funcs->C_GetInfo( &info );   if (rc != CKR_OK) {      show_error("   C_GetInfo", rc );      return FALSE;   }   printf("Looks okay...\n");   return TRUE;}////int do_GetSlotList( void ){   CK_BBOOL        tokenPresent;   CK_SLOT_ID_PTR  pSlotList;   CK_ULONG        ulCount;   CK_RV           rc;   printf("do_GetSlotList...\n");   // first, get the count   //   tokenPresent = TRUE;  // this is the only case with this implementation   rc = funcs->C_GetSlotList( tokenPresent, NULL, &ulCount );   if (rc != CKR_OK) {      show_error("   C_GetSlotList", rc );      return FALSE;   }   pSlotList = (CK_SLOT_ID *)malloc( ulCount * sizeof(CK_SLOT_ID) );   if (!pSlotList) {      printf("   DRIVER ERROR:  CANNOT ALLOCATE MEMORY FOR SLOT LIST\n");      return FALSE;   }   // now, get the slots   //   rc = funcs->C_GetSlotList( tokenPresent, pSlotList, &ulCount );   if (rc != CKR_OK) {      show_error("   C_GetSlotList", rc );      return FALSE;   }   free( pSlotList );   printf("Looks okay...\n");   return TRUE;}////int do_GetSlotInfo( void ){   CK_SLOT_ID    slot_id;   CK_SLOT_INFO  info;   CK_RV         rc;   printf("do_GetSlotInfo...\n");   slot_id = SLOT_ID;   rc = funcs->C_GetSlotInfo( slot_id, &info );   if (rc != CKR_OK) {      show_error("   C_GetSlotInfo", rc );      return FALSE;   }   printf("   CK_SLOT_INFO for slot #1:  \n");   printf("      slotDescription:  %64.64s\n",  info.slotDescription );   printf("      manufacturerID:   %32.32s\n",  info.manufacturerID );   printf("      flags:            0x%0x\n",    info.flags );   printf("      hardwareVersion:  %d.%d\n",    info.hardwareVersion.major, info.hardwareVersion.minor );   printf("      firmwareVersion:  %d.%d\n",    info.firmwareVersion.major, info.firmwareVersion.minor );   printf("Looks Okay...\n");   return TRUE;}////int do_GetTokenInfo( void ){   CK_SLOT_ID     slot_id;   CK_TOKEN_INFO  info;   CK_RV          rc;   printf("do_GetTokenInfo...\n");   slot_id = SLOT_ID;   rc = funcs->C_GetTokenInfo( slot_id, &info );   if (rc != CKR_OK) {      show_error("   C_GetTokenInfo", rc );      return FALSE;   }   printf("   CK_TOKEN_INFO for slot #1:  \n");   printf("      label:                   %32.32s\n",  info.label );   printf("      manufacturerID:          %32.32s\n",  info.manufacturerID );   printf("      model:                   %16.16s\n",  info.model );   printf("      serialNumber:            %16.16s\n",  info.serialNumber );   printf("      flags:                   %0x\n",      info.flags );   printf("      ulMaxSessionCount:       %d\n",       info.ulMaxSessionCount );   printf("      ulSessionCount:          %d\n",       info.ulSessionCount );   printf("      ulMaxRwSessionCount:     %d\n",       info.ulMaxRwSessionCount );   printf("      ulRwSessionCount:        %d\n",       info.ulRwSessionCount );   printf("      ulMaxPinLen:             %d\n",       info.ulMaxPinLen );   printf("      ulMinPinLen:             %d\n",       info.ulMinPinLen );   printf("      ulTotalPublicMemory:     %d\n",       info.ulTotalPublicMemory );   printf("      ulFreePublicMemory:      %d\n",       info.ulFreePublicMemory );   printf("      ulTotalPrivateMemory:    %d\n",       info.ulTotalPrivateMemory );   printf("      ulFreePrivateMemory:     %d\n",       info.ulFreePrivateMemory );   printf("      hardwareVersion:         %d.%d\n",    info.hardwareVersion.major, info.hardwareVersion.minor );   printf("      firmwareVersion:         %d.%d\n",    info.firmwareVersion.major, info.firmwareVersion.minor );   printf("      time:                    %16.16s\n",  info.utcTime );   printf("Looks okay...\n");   return TRUE;}////int do_GetMechanismList( void ){   CK_SLOT_ID         slot_id;   CK_ULONG           count;   CK_MECHANISM_TYPE *mech_list;   CK_RV              rc;   printf("do_GetMechanismList...\n");   slot_id = SLOT_ID;   rc = funcs->C_GetMechanismList( slot_id, NULL, &count );   if (rc != CKR_OK) {      show_error("   C_GetMechanismList #1", rc );      return FALSE;   }   printf("   C_GetMechanismList #1 returned %d mechanisms\n", count );   mech_list = (CK_MECHANISM_TYPE *)malloc( count * sizeof(CK_MECHANISM_TYPE) );   if (!mech_list)      return CKR_HOST_MEMORY;   rc = funcs->C_GetMechanismList( slot_id, mech_list, &count );   if (rc != CKR_OK) {      show_error("   C_GetMechanismList #2", rc );      return FALSE;   }   free( mech_list );   printf("Looks okay...\n");   return TRUE;}////int do_GetMechanismInfo( void ){   CK_ULONG           count;   CK_MECHANISM_TYPE *mech_list;   CK_RV              rc;   CK_SLOT_ID         slot_id;   CK_MECHANISM_INFO  info;   CK_ULONG           i;   printf("do_GetMechanismInfo...\n");   slot_id = SLOT_ID;   rc = funcs->C_GetMechanismList( slot_id, NULL, &count );   if (rc != CKR_OK) {      show_error("   C_GetMechanismList #1", rc );      return FALSE;   }   mech_list = (CK_MECHANISM_TYPE *)malloc( count * sizeof(CK_MECHANISM_TYPE) );   if (!mech_list)      return CKR_HOST_MEMORY;   rc = funcs->C_GetMechanismList( slot_id, mech_list, &count );   if (rc != CKR_OK) {      show_error("   C_GetMechanismList #2", rc );      return FALSE;   }   for (i=0; i < count; i++) {      rc = funcs->C_GetMechanismInfo( slot_id, mech_list[i], &info );      if (rc != CKR_OK) {         show_error("   C_GetMechanismInfo", rc );         printf("   Tried to get info on mechanism # %d\n", mech_list[i] );         return FALSE;      }      printf("   Mechanism #%d\n",  mech_list[i] );      printf("      ulMinKeySize:  %d\n",  info.ulMinKeySize );      printf("      ulMaxKeySize:  %d\n",  info.ulMaxKeySize );      printf("      flags:         %0x\n", info.flags );   }   free( mech_list );   printf("Looks okay...\n");   return TRUE;}////int do_InitPIN( void ){   CK_SLOT_ID         slot_id;   CK_FLAGS           flags;   CK_SESSION_HANDLE  session;   CK_CHAR            so_pin[8];   CK_CHAR            user_pin[8];   CK_ULONG           so_pin_len;   CK_ULONG           user_pin_len;   CK_RV              rc;   printf("do_InitPIN...\n");   memcpy( user_pin, "12345678", 8 );   memcpy( so_pin,   "87654321", 8 );   user_pin_len = 8;   so_pin_len   = 8;   slot_id = SLOT_ID;   flags   = CKF_SERIAL_SESSION | CKF_RW_SESSION;   // try to call C_InitPIN from a public session   //   rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );   if (rc != CKR_OK) {      show_error("   C_OpenSession #1", rc );      return FALSE;   }   rc = funcs->C_InitPIN( session, user_pin, user_pin_len );   if (rc != CKR_USER_NOT_LOGGED_IN) {      show_error("   C_InitPIN #1", rc );      printf("   Expected CKR_USER_NOT_LOGGED_IN\n" );      return FALSE;   }   // try to call C_InitPIN from an SO session   //   rc = funcs->C_Login( session, CKU_SO, so_pin, so_pin_len );   if (rc != CKR_OK) {      show_error("   C_Login #2", rc );      return FALSE;   }   rc = funcs->C_InitPIN( session, user_pin, user_pin_len );   if (rc != CKR_OK) {      show_error("   C_InitPIN #2", rc );      return FALSE;   }   rc = funcs->C_Logout( session );   if (rc != CKR_OK) {      show_error("   C_Logout #1", rc );      return FALSE;   }   // try to call C_InitPIN from a normal user session   //   rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len );   if (rc != CKR_OK) {      show_error("   C_Login #1", rc );      return FALSE;   }   rc = funcs->C_InitPIN( session, user_pin, user_pin_len );   if (rc != CKR_USER_NOT_LOGGED_IN) {      show_error("   C_InitPIN #2", rc );      printf("   Expected CKR_USER_NOT_LOGGED_IN\n" );      return FALSE;   }   rc = funcs->C_Logout( session );   if (rc != CKR_OK) {      show_error("   C_Logout #2", rc );      return FALSE;   }   rc = funcs->C_CloseAllSessions( slot_id );   if (rc != CKR_OK) {      show_error("   C_CloseAllSessions #1", rc );      return FALSE;   }   printf("Looks okay...\n");   return TRUE;}////int do_SetPIN( void ){   CK_SLOT_ID        slot_id;   CK_FLAGS          flags;   CK_SESSION_HANDLE session;   CK_CHAR           old_pin[8];   CK_CHAR           new_pin[8];   CK_ULONG          old_len;   CK_ULONG          new_len;   CK_RV             rc;   printf("do_SetPIN...\n");   // first, try to set the user PIN   //   memcpy( old_pin, "12345678", 8 );   memcpy( new_pin, "ABCDEF", 6 );   old_len = 8;   new_len = 6;   slot_id = SLOT_ID;   flags   = CKF_SERIAL_SESSION | CKF_RW_SESSION;   // try to call C_SetPIN from a public session   //   rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );   if (rc != CKR_OK) {      show_error("   C_OpenSession #1", rc );      return FALSE;   }   rc = funcs->C_SetPIN( session, old_pin, old_len, new_pin, new_len );   if (rc != CKR_SESSION_READ_ONLY) {      show_error("   C_SetPIN #1", rc );      printf("   Expected CKR_SESSION_READ_ONLY\n");      return FALSE;   }   // try to call C_SetPIN from a normal user session   //   rc = funcs->C_Login( session, CKU_USER, old_pin, old_len );   if (rc != CKR_OK) {      show_error("   C_Login #1", rc );      return FALSE;   }   rc = funcs->C_SetPIN( session, old_pin, old_len, new_pin, new_len );   if (rc != CKR_OK) {      show_error("   C_SetPIN #2", rc );      return FALSE;   }   rc = funcs->C_Logout( session );   if (rc != CKR_OK) {      show_error("   C_Logout #1", rc );      return FALSE;   }   // now, try to log in with the old PIN   //   rc = funcs->C_Login( session, CKU_USER, old_pin, old_len );   if (rc != CKR_PIN_INCORRECT) {      show_error("   C_Login #2", rc );      printf("   Expected CKR_PIN_INCORRECT\n");      return FALSE;   }   rc = funcs->C_Login( session, CKU_USER, new_pin, new_len );   if (rc != CKR_OK) {      show_error("   C_Login #3", rc );      return FALSE;   }   // change the PIN back to the original so the rest of this program   // doesn't break   //   rc = funcs->C_SetPIN( session, new_pin, new_len, old_pin, old_len );   if (rc != CKR_OK) {      show_error("   C_SetPIN #3", rc );      return FALSE;   }   rc = funcs->C_Logout( session );   if (rc != CKR_OK) {      show_error("   C_Logout #2", rc );      return FALSE;   }   //   // done with user tests...now try with the SO   //   memcpy( old_pin, "87654321", 8 );   // try to call C_SetPIN from a normal user session   //   rc = funcs->C_Login( session, CKU_SO, old_pin, old_len );   if (rc != CKR_OK) {      show_error("   C_Login #3", rc );      return FALSE;   }   rc = funcs->C_SetPIN( session, old_pin, old_len, new_pin, new_len );   if (rc != CKR_OK) {      show_error("   C_SetPIN #4", rc );      return FALSE;   }   rc = funcs->C_Logout( session );   if (rc != CKR_OK) {      show_error("   C_Logout #3", rc );      return FALSE;   }   // now, try to log in with the old PIN   //   rc = funcs->C_Login( session, CKU_SO, old_pin, old_len );   if (rc != CKR_PIN_INCORRECT) {      show_error("   C_Login #4", rc );      printf("   Expected CKR_PIN_INCORRECT\n");      return FALSE;   }   rc = funcs->C_Login( session, CKU_SO, new_pin, new_len );   if (rc != CKR_OK) {      show_error("   C_Login #5", rc );      return FALSE;   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -