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

📄 digest_func.c

📁 IBM的Linux上的PKCS#11实现
💻 C
📖 第 1 页 / 共 5 页
字号:
      rc = funcs->C_Sign( session, data, data_len, hash, &hash_len );      if (rc != CKR_OK) {         show_error("  C_Sign #5", rc );         return FALSE;      }      if (hash_len != hmac_size) {         printf("   Error:  C_Sign #5 generated bad HMAC length\n");         return FALSE;      }      if (memcmp(hash, expect, hash_len) != 0) {         printf("   Error:  C_Sign #5 generated bad HMAC\n");         return FALSE;      }      rc = funcs->C_VerifyInit( session, &mech, h_key );      if (rc != CKR_OK) {         show_error("   C_VerifyInit #5", rc );         return FALSE;      }      rc = funcs->C_Verify( session, data, data_len, hash, hash_len );      if (rc != CKR_OK) {         show_error("   C_Verify #5", rc );         return FALSE;      }      rc = funcs->C_DestroyObject( session, h_key );      if (rc != CKR_OK) {         show_error("   C_DestroyObject #5", rc );         return FALSE;      }   }   // test 6   //   {      CK_OBJECT_HANDLE  h_key;      CK_OBJECT_CLASS   key_class  = CKO_SECRET_KEY;      CK_KEY_TYPE       key_type   = CKK_GENERIC_SECRET;      CK_BBOOL          false      = FALSE;      CK_BYTE           hash[MD5_HASH_LEN];      CK_BYTE           data[60];      CK_BYTE           expect[] = { 0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f,                                     0x0b, 0x62, 0xe6, 0xce, 0x61, 0xb9, 0xd0, 0xcd };      CK_BYTE           key_data[] = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };      CK_ULONG          hash_len;      CK_ULONG          data_len;      CK_ATTRIBUTE      key_attribs[] =      {          {CKA_CLASS,       &key_class,        sizeof(key_class)    },          {CKA_KEY_TYPE,    &key_type,         sizeof(key_type)     },          {CKA_TOKEN,       &false,            sizeof(false)        },          {CKA_VALUE,       &key_data,         sizeof(key_data)     }      };      strcpy( data, "Test Using Larger Than Block-Size Key - Hash Key First" );      data_len = 54;      rc = funcs->C_CreateObject( session, key_attribs, 4, &h_key );      if (rc != CKR_OK) {         show_error("   C_CreateObject #6", rc );         return FALSE;      }      rc = funcs->C_SignInit( session, &mech, h_key );      if (rc != CKR_OK) {         show_error("   C_SignInit #6", rc );         return FALSE;      }      hash_len = sizeof(hash);      rc = funcs->C_Sign( session, data, data_len, hash, &hash_len );      if (rc != CKR_OK) {         show_error("  C_Sign #6", rc );         return FALSE;      }      if (hash_len != hmac_size) {         printf("   Error:  C_Sign #6 generated bad HMAC length\n");         return FALSE;      }      if (memcmp(hash, expect, hash_len) != 0) {         printf("   Error:  C_Sign #6 generated bad HMAC\n");         return FALSE;      }      rc = funcs->C_VerifyInit( session, &mech, h_key );      if (rc != CKR_OK) {         show_error("   C_VerifyInit #6", rc );         return FALSE;      }      rc = funcs->C_Verify( session, data, data_len, hash, hash_len );      if (rc != CKR_OK) {         show_error("   C_Verify #6", rc );         return FALSE;      }      rc = funcs->C_DestroyObject( session, h_key );      if (rc != CKR_OK) {         show_error("   C_DestroyObject #6", rc );         return FALSE;      }   }   // test 7   //   {      CK_OBJECT_HANDLE  h_key;      CK_OBJECT_CLASS   key_class  = CKO_SECRET_KEY;      CK_KEY_TYPE       key_type   = CKK_GENERIC_SECRET;      CK_BBOOL          false      = FALSE;      CK_BYTE           hash[MD5_HASH_LEN];      CK_BYTE           data[80];      CK_BYTE           expect[] = { 0x6f, 0x63, 0x0f, 0xad, 0x67, 0xcd, 0xa0, 0xee,                                     0x1f, 0xb1, 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e };      CK_BYTE           key_data[] = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };      CK_ULONG          hash_len;      CK_ULONG          data_len;      CK_ATTRIBUTE      key_attribs[] =      {          {CKA_CLASS,       &key_class,        sizeof(key_class)    },          {CKA_KEY_TYPE,    &key_type,         sizeof(key_type)     },          {CKA_TOKEN,       &false,            sizeof(false)        },          {CKA_VALUE,       &key_data,         sizeof(key_data)     }      };      strcpy( data, "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data" );      data_len = 73;      rc = funcs->C_CreateObject( session, key_attribs, 4, &h_key );      if (rc != CKR_OK) {         show_error("   C_CreateObject #7", rc );         return FALSE;      }      rc = funcs->C_SignInit( session, &mech, h_key );      if (rc != CKR_OK) {         show_error("   C_SignInit #7", rc );         return FALSE;      }      hash_len = sizeof(hash);      rc = funcs->C_Sign( session, data, data_len, hash, &hash_len );      if (rc != CKR_OK) {         show_error("  C_Sign #7", rc );         return FALSE;      }      if (hash_len != hmac_size) {         printf("   Error:  C_Sign #7 generated bad HMAC length\n");         return FALSE;      }      if (memcmp(hash, expect, hash_len) != 0) {         printf("   Error:  C_Sign #7 generated bad HMAC\n");         return FALSE;      }      rc = funcs->C_VerifyInit( session, &mech, h_key );      if (rc != CKR_OK) {         show_error("   C_VerifyInit #7", rc );         return FALSE;      }      rc = funcs->C_Verify( session, data, data_len, hash, hash_len );      if (rc != CKR_OK) {         show_error("   C_Verify #7", rc );         return FALSE;      }      rc = funcs->C_DestroyObject( session, h_key );      if (rc != CKR_OK) {         show_error("   C_DestroyObject #7", 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_SignVerify_SHA1_HMAC( void ){   CK_SESSION_HANDLE session;   CK_SLOT_ID        slot_id;   CK_MECHANISM      mech;   CK_ULONG          flags;   CK_RV             rc;   printf("do_SignVerify_SHA1_HMAC...\n");   slot_id = SLOT_ID;   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 #1", rc );      return FALSE;   }   mech.mechanism      = CKM_SHA_1_HMAC;   mech.ulParameterLen = 0;   mech.pParameter     = NULL;   // test 1   //   {      CK_OBJECT_HANDLE  h_key;      CK_OBJECT_CLASS   key_class  = CKO_SECRET_KEY;      CK_KEY_TYPE       key_type   = CKK_GENERIC_SECRET;      CK_BBOOL          false      = FALSE;      CK_BYTE           hash[SHA1_HASH_LEN];      CK_BYTE           data[10];      CK_BYTE           expect[] ={ 0xb6, 0x17, 0x31, 0x86, 0x55, 0x05, 0x72, 0x64,                                    0xe2, 0x8b, 0xc0, 0xb6, 0xfb, 0x37, 0x8c, 0x8e,                                    0xf1, 0x46, 0xbe, 0x00 };      CK_BYTE           key_data[] = { 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb,                                       0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb,                                       0xb, 0xb, 0xb, 0xb };      CK_ULONG          hash_len;      CK_ULONG          data_len;      CK_ATTRIBUTE      key_attribs[] =      {          {CKA_CLASS,       &key_class,        sizeof(key_class)    },          {CKA_KEY_TYPE,    &key_type,         sizeof(key_type)     },          {CKA_TOKEN,       &false,            sizeof(false)        },          {CKA_VALUE,       &key_data,         sizeof(key_data)     }      };      memcpy( data, "Hi There", 8 );      data_len = 8;      rc = funcs->C_CreateObject( session, key_attribs, 4, &h_key );      if (rc != CKR_OK) {         show_error("   C_CreateObject #1", rc );         return FALSE;      }      rc = funcs->C_SignInit( session, &mech, h_key );      if (rc != CKR_OK) {         show_error("   C_SignInit #1", rc );         return FALSE;      }      hash_len = sizeof(hash);      rc = funcs->C_Sign( session, data, data_len, hash, &hash_len );      if (rc != CKR_OK) {         show_error("   C_Sign #1", rc );         return FALSE;      }      if (hash_len != SHA1_HASH_LEN) {         printf("   Error:  C_Sign #1 generated bad HMAC length\n");         return FALSE;      }      if (memcmp(hash, expect, hash_len) != 0) {         printf("   Error:  C_Sign #1 generated bad HMAC\n");         return FALSE;      }      rc = funcs->C_VerifyInit( session, &mech, h_key );      if (rc != CKR_OK) {         show_error("   C_VerifyInit #1", rc );         return FALSE;      }      rc = funcs->C_Verify( session, data, data_len, hash, hash_len );      if (rc != CKR_OK) {         show_error("   C_Verify #1", rc );         return FALSE;      }      rc = funcs->C_DestroyObject( session, h_key );      if (rc != CKR_OK) {         show_error("   C_DestroyObject #1", rc );         return FALSE;      }   }   // test 2   //   {      CK_OBJECT_HANDLE  h_key;      CK_OBJECT_CLASS   key_class  = CKO_SECRET_KEY;      CK_KEY_TYPE       key_type   = CKK_GENERIC_SECRET;      CK_BBOOL          false      = FALSE;      CK_BYTE           hash[SHA1_HASH_LEN];      CK_BYTE           data[40];      CK_BYTE           expect[] = { 0xef, 0xfc, 0xdf, 0x6a, 0xe5, 0xeb, 0x2f, 0xa2,                                     0xd2, 0x74, 0x16, 0xd5, 0xf1, 0x84, 0xdf, 0x9c,                                     0x25, 0x9a, 0x7c, 0x79 };      CK_BYTE           key_data[] = { 'J', 'e', 'f', 'e' };      CK_ULONG          hash_len;      CK_ULONG          data_len;      CK_ATTRIBUTE      key_attribs[] =      {          {CKA_CLASS,       &key_class,        sizeof(key_class)    },          {CKA_KEY_TYPE,    &key_type,         sizeof(key_type)     },          {CKA_TOKEN,       &false,            sizeof(false)        },          {CKA_VALUE,       &key_data,         sizeof(key_data)     }      };      memcpy( data, "what do ya want for nothing?", 28 );      data_len = 28;      rc = funcs->C_CreateObject( session, key_attribs, 4, &h_key );      if (rc != CKR_OK) {         show_error("   C_CreateObject #2", rc );         return FALSE;      }      rc = funcs->C_SignInit( session, &mech, h_key );      if (rc != CKR_OK) {         show_error("   C_SignInit #2", rc );         return FALSE;      }      hash_len = sizeof(hash);      rc = funcs->C_Sign( session, data, data_len, hash, &hash_len );      if (rc != CKR_OK) {         show_error("  C_Sign #2", rc );         return FALSE;      }      if (hash_len != SHA1_HASH_LEN) {         printf("   Error:  C_Sign #2 generated bad HMAC length\n");         return FALSE;      }      if (memcmp(hash, expect, hash_len) != 0) {         printf("   Error:  C_Sign #2 generated bad HMAC\n");         return FALSE;      }      rc = funcs->C_VerifyInit( session, &mech, h_key );      if (rc != CKR_OK) {         show_error("   C_VerifyInit #2", rc );         return FALSE;      }      rc = funcs->C_Verify( session, data, data_len, hash, hash_len );      if (rc != CKR_OK) {         show_error("   C_Verify #2", rc );         return FALSE;      }      rc = funcs->C_DestroyObject( session, h_key );      if (rc != CKR_OK) {         show_error("   C_DestroyObject #2", rc );         return FALSE;      }   }   // test 3   //   {      CK_OBJECT_HANDLE  h_key;      CK_OBJECT_CLASS   key_class  = CKO_SECRET_KEY;      CK_KEY_TYPE       key_type   = CKK_GENERIC_SECRET;      CK_BBOOL          false      = FALSE;      CK_BYTE           hash[SHA1_HASH_LEN];      CK_BYTE           data[50];      CK_BYTE           expect[] = { 0x12, 0x5d, 0x73, 0x42, 0xb9, 0xac, 0x11, 0xcd,                                     0x91, 0xa3, 0x9a, 0xf4, 0x8a, 0xa1, 0x7b, 0x4f,                                     0x63, 0xf1, 0x75, 0xd3 };      CK_BYTE           key_data[] = { 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,                                       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa };      CK_ULONG          hash_len;      CK_ULONG          data_len;      CK_ATTRIBUTE      key_attribs[] =      {          {CKA_CLASS,       &key_class,        sizeof(key_class)    },          {CKA_KEY_TYPE,    &key_type,         sizeof(key_type)     },          {CKA_TOKEN,       &false,            sizeof(false)        },          {CKA_VALUE,       &key_data,         sizeof(key_data)     }      };      memset( data, 0xDD, 50 );      data_len = 50;      rc = funcs->C_CreateObject( session, key_attribs, 4, &h_key );      if (rc != CKR_OK) {         show_error("   C_CreateObject #3", rc );         return FALSE;      }      rc = funcs->C_SignInit( session, &mech, h_key );      if (rc != CKR_OK) {         show_error("   C_SignInit #3", rc );     

⌨️ 快捷键说明

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