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

📄 misc_func.c

📁 IBM的Linux上的PKCS#11实现
💻 C
📖 第 1 页 / 共 2 页
字号:
   // 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 #5", rc );      return FALSE;   }   rc = funcs->C_Logout( session );   if (rc != CKR_OK) {      show_error("   C_Logout #4", rc );      return FALSE;   }   printf("Looks okay...\n");   return TRUE;}////int do_GenerateRandomData( void ){   CK_SLOT_ID        slot_id;   CK_SESSION_HANDLE h1;   CK_FLAGS          flags;   CK_BYTE           rand_data1[8];   CK_BYTE           rand_data2[8192];   CK_BYTE	     rand_seed[1024];   CK_RV             rc;   printf("do_GenerateRandomData...\n");   slot_id = SLOT_ID;   flags = CKF_SERIAL_SESSION | CKF_RW_SESSION;   rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &h1 );   if (rc != CKR_OK) {      show_error("   C_OpenSession #2", rc );      return FALSE;   }   rc = funcs->C_SeedRandom(h1, rand_seed,sizeof(rand_seed));   if (rc != CKR_OK){      show_error("   C_SeedRandom #1",rc);      return FALSE;   }   rc = funcs->C_GenerateRandom( h1, rand_data1, sizeof(rand_data1) );   if (rc != CKR_OK) {      show_error("   C_GenerateRandom #1", rc );      return FALSE;   }   rc = funcs->C_GenerateRandom( h1, rand_data2, sizeof(rand_data2) );   if (rc != CKR_OK) {      show_error("   C_GenerateRandom #2", rc );      return FALSE;   }   rc = funcs->C_CloseSession( h1 );   if (rc != CKR_OK) {      show_error("   C_CloseSession #2", rc );      return FALSE;   }   printf("Looks okay...\n");   return TRUE;}//  //1) generate a DES key from a RO, PUBLIC session.  should fail//  //2) generate a DES key from a RW, PUBLIC session.  should fail//  3) generate a DES key from a RO, USER   session.//  4) generate a DES key from a RW, USER   session.////  5) generate a DES key from a RO, PUBLIC session.  specify template for PUBLIC object//  6) generate a DES key from a RO, PUBLIC session.  specify template for PUBLIC object////  7) generate a DES key from a RW, USER   session.  specify wrong class//  8) generate a DES key from a RW, USER   session.  specify right class//  9) generate a DES key from a RW, USER   session.  specify wrong key type// 10) generate a DES key from a RW, USER   session.  specify right key type////int do_GenerateKey( void ){   CK_SLOT_ID          slot_id;   CK_SESSION_HANDLE   session;   CK_MECHANISM        mech;   CK_OBJECT_HANDLE    h_key;   CK_FLAGS            flags;   CK_BYTE             user_pin[8];   CK_ULONG            user_pin_len;   CK_RV               rc;   printf("do_GenerateKey...\n");   slot_id = SLOT_ID;   memcpy( user_pin, "12345678", 8 );   user_pin_len = 8;   mech.mechanism      = CKM_DES_KEY_GEN;   mech.ulParameterLen = 0;   mech.pParameter     = NULL;//   ////   ////   flags = CKF_SERIAL_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_GenerateKey( session, &mech, NULL, 0, &h_key );//   if (rc != CKR_USER_NOT_LOGGED_IN) {//      show_error("   C_GenerateKey #1", rc );//      printf("   Expected CKR_USER_NOT_LOGGED_IN\n" );//      return FALSE;//   }////   rc = funcs->C_CloseSession( session );//   if (rc != CKR_OK) {//      show_error("   C_CloseSession #1", rc );//      return FALSE;//   }//////   // 2) generate a DES key from RW PUBLIC session.  this should also fail.//   ////   flags = CKF_SERIAL_SESSION | CKF_RW_SESSION;//   rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );//   if (rc != CKR_OK) {//      show_error("   C_OpenSession #2", rc );//      return FALSE;//   }////   rc = funcs->C_GenerateKey( session, &mech, NULL, 0, &h_key );//   if (rc != CKR_USER_NOT_LOGGED_IN) {//      show_error("   C_GenerateKey #2", rc );//      printf("   Expected CKR_USER_NOT_LOGGED_IN\n" );//      return FALSE;//   }////   rc = funcs->C_CloseSession( session );//   if (rc != CKR_OK) {//      show_error("   C_CloseSession #2", rc );//      return FALSE;//   }   // 3) generate a DES key from RO USER session   //   flags = CKF_SERIAL_SESSION;   rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );   if (rc != CKR_OK) {      show_error("   C_OpenSession #3", rc );      return FALSE;   }   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_GenerateKey( session, &mech, NULL, 0, &h_key );   if (rc != CKR_OK) {      show_error("   C_GenerateKey #3", rc );      return FALSE;   }   rc = funcs->C_CloseSession( session );   if (rc != CKR_OK) {      show_error("   C_CloseSession #3", rc );      return FALSE;   }   // 4) generate a DES key from RW USER session   //   flags = CKF_SERIAL_SESSION;   rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );   if (rc != CKR_OK) {      show_error("   C_OpenSession #4", rc );      return FALSE;   }   rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len );   if (rc != CKR_OK) {      show_error("   C_Login #2", rc );      return FALSE;   }   rc = funcs->C_GenerateKey( session, &mech, NULL, 0, &h_key );   if (rc != CKR_OK) {      show_error("   C_GenerateKey #4", rc );      return FALSE;   }   rc = funcs->C_CloseSession( session );   if (rc != CKR_OK) {      show_error("   C_CloseSession #4", rc );      return FALSE;   }   // 5) generate a DES key from a RO PUBLIC session.  specify a template   //    to indicate this is a public object   //   {      CK_BBOOL    false = FALSE;      CK_ATTRIBUTE  tmpl[] =      {         {CKA_PRIVATE,  &false, sizeof(CK_BBOOL) }      };      flags = CKF_SERIAL_SESSION;      rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );      if (rc != CKR_OK) {         show_error("   C_OpenSession #5", rc );         return FALSE;      }      rc = funcs->C_GenerateKey( session, &mech, tmpl, 1, &h_key );      if (rc != CKR_OK) {         show_error("   C_GenerateKey #5", rc );         return FALSE;      }      rc = funcs->C_CloseSession( session );      if (rc != CKR_OK) {         show_error("   C_CloseSession #5", rc );         return FALSE;      }   }   // 6) generate a DES key from a RW PUBLIC session.  specify a template   //    to indicate this is a public object   //   {      CK_BBOOL    false = FALSE;      CK_ATTRIBUTE  tmpl[] =      {         {CKA_PRIVATE,  &false, sizeof(CK_BBOOL) }      };      flags = CKF_SERIAL_SESSION | CKF_RW_SESSION;      rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );      if (rc != CKR_OK) {         show_error("   C_OpenSession #6", rc );         return FALSE;      }      rc = funcs->C_GenerateKey( session, &mech, tmpl, 1, &h_key );      if (rc != CKR_OK) {         show_error("   C_GenerateKey #6", rc );         return FALSE;      }      rc = funcs->C_CloseSession( session );      if (rc != CKR_OK) {         show_error("   C_CloseSession #6", rc );         return FALSE;      }   }   // 7) generate a DES key from a RW USER session.  specify a template   //    to that specifies the wrong CKA_CLASS   //   {      CK_OBJECT_CLASS   class = CKO_DATA;      CK_ATTRIBUTE  tmpl[] =      {         {CKA_CLASS,  &class, sizeof(class) }      };      flags = CKF_SERIAL_SESSION | CKF_RW_SESSION;      rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );      if (rc != CKR_OK) {         show_error("   C_OpenSession #7", rc );         return FALSE;      }      rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len );      if (rc != CKR_OK) {         show_error("   C_Login #3", rc );         return FALSE;      }      rc = funcs->C_GenerateKey( session, &mech, tmpl, 1, &h_key );      if (rc != CKR_TEMPLATE_INCONSISTENT) {         show_error("   C_GenerateKey #7", rc );         printf("   Expected CKR_TEMPLATE_INCONSISTENT\n");         return FALSE;      }      rc = funcs->C_CloseSession( session );      if (rc != CKR_OK) {         show_error("   C_CloseSession #7", rc );         return FALSE;      }   }   // 8) generate a DES key from a RW USER session.  specify a template   //    to that specifies the correct CKA_CLASS   //   {      CK_OBJECT_CLASS   class = CKO_SECRET_KEY;      CK_ATTRIBUTE  tmpl[] =      {         {CKA_CLASS,  &class, sizeof(class) }      };      flags = CKF_SERIAL_SESSION | CKF_RW_SESSION;      rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );      if (rc != CKR_OK) {         show_error("   C_OpenSession #8", rc );         return FALSE;      }      rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len );      if (rc != CKR_OK) {         show_error("   C_Login #4", rc );         return FALSE;      }      rc = funcs->C_GenerateKey( session, &mech, tmpl, 1, &h_key );      if (rc != CKR_OK) {         show_error("   C_GenerateKey #8", rc );         return FALSE;      }      rc = funcs->C_CloseSession( session );      if (rc != CKR_OK) {         show_error("   C_CloseSession #8", rc );         return FALSE;      }   }   // 9) generate a DES key from a RW USER session.  specify a template   //    to that specifies the wrong CKA_KEY_TYPE   //   {      CK_KEY_TYPE   keytype  = CKK_CAST5;      CK_ATTRIBUTE  tmpl[] =      {         {CKA_KEY_TYPE,  &keytype, sizeof(keytype) }      };      flags = CKF_SERIAL_SESSION | CKF_RW_SESSION;      rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );      if (rc != CKR_OK) {         show_error("   C_OpenSession #9", rc );         return FALSE;      }      rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len );      if (rc != CKR_OK) {         show_error("   C_Login #5", rc );         return FALSE;      }      rc = funcs->C_GenerateKey( session, &mech, tmpl, 1, &h_key );      if (rc != CKR_TEMPLATE_INCONSISTENT) {         show_error("   C_GenerateKey #9", rc );         printf("   Expected CKR_TEMPLATE_INCONSISTENT\n");         return FALSE;      }      rc = funcs->C_CloseSession( session );      if (rc != CKR_OK) {         show_error("   C_CloseSession #9", rc );         return FALSE;      }   }   // 10) generate a DES key from a RW USER session.  specify a template   //     to that specifies the correct CKA_KEY_TYPE   //   {      CK_KEY_TYPE   keytype  = CKK_DES;      CK_ATTRIBUTE  tmpl[] =      {         {CKA_KEY_TYPE,  &keytype, sizeof(keytype) }      };      flags = CKF_SERIAL_SESSION | CKF_RW_SESSION;      rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session );      if (rc != CKR_OK) {         show_error("   C_OpenSession #9", rc );         return FALSE;      }      rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len );      if (rc != CKR_OK) {         show_error("   C_Login #5", rc );         return FALSE;      }      rc = funcs->C_GenerateKey( session, &mech, tmpl, 1, &h_key );      if (rc != CKR_OK) {         show_error("   C_GenerateKey #9", rc );         return FALSE;      }      rc = funcs->C_CloseSession( session );      if (rc != CKR_OK) {         show_error("   C_CloseSession #9", 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 misc_functions(){   SYSTEMTIME  t1, t2;   int         rc;   GetSystemTime(&t1);   rc = do_GetInfo();   if (!rc)      return FALSE;   GetSystemTime(&t2);   process_time( t1, t2 );   GetSystemTime(&t1);   rc = do_GetSlotList();   if (!rc)      return FALSE;   GetSystemTime(&t2);   process_time( t1, t2 );   GetSystemTime(&t1);   rc = do_GetSlotInfo();   if (!rc)      return FALSE;   GetSystemTime(&t2);   process_time( t1, t2 );   GetSystemTime(&t1);   rc = do_GetTokenInfo();   if (!rc)      return FALSE;   GetSystemTime(&t2);   process_time( t1, t2 );   //   // C_WaitForSlotEvent should not be implemented   //   GetSystemTime(&t1);   rc = do_GetMechanismList();   if (!rc)      return FALSE;   GetSystemTime(&t2);   process_time( t1, t2 );   GetSystemTime(&t1);   rc = do_GetMechanismInfo();   if (!rc)      return FALSE;   GetSystemTime(&t2);   process_time( t1, t2 );   GetSystemTime(&t1);   rc = do_GenerateRandomData();   if (!rc)      return FALSE;   GetSystemTime(&t2);   process_time( t1, t2 );#if 0   GetSystemTime(&t1);   rc = do_GenerateKey();   if (!rc)      return FALSE;   GetSystemTime(&t2);   process_time( t1, t2 );#endif   if (skip_token_obj == TRUE) {      printf("Skipping do_InitPIN()...\n\n");   }   else {      rc = do_InitPIN();      if (!rc)         return FALSE;   }   if (skip_token_obj == TRUE) {      printf("Skipping do_SetPIN()...\n\n");   }   else {      rc = do_SetPIN();      if (!rc)         return FALSE;   }   return TRUE;}

⌨️ 快捷键说明

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