📄 digest_func.c
字号:
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 != MD5_HASH_LEN) { 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_MD5_HMAC_GENERAL( void ){ CK_SESSION_HANDLE session; CK_SLOT_ID slot_id; CK_MECHANISM mech; CK_ULONG flags; CK_ULONG hmac_size; CK_RV rc; printf("do_SignVerify_MD5_HMAC_GENERAL...\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; } hmac_size = 4; mech.mechanism = CKM_MD5_HMAC_GENERAL; mech.ulParameterLen = sizeof(CK_ULONG); mech.pParameter = &hmac_size; // 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[MD5_HASH_LEN]; CK_BYTE data[10]; CK_BYTE expect[] = { 0x92, 0x94, 0x72, 0x7a, 0x36, 0x38, 0xBB, 0x1C, 0x13, 0xf4, 0x8E, 0xf8, 0x15, 0x8b, 0xfc, 0x9d }; CK_BYTE key_data[] = { 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 != hmac_size) { 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, hmac_size ); 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[MD5_HASH_LEN]; CK_BYTE data[40]; CK_BYTE expect[] = { 0x75, 0x0c, 0x78, 0x3e, 0x6a, 0xb0, 0xb5, 0x03, 0xea, 0xa8, 0x6e, 0x31, 0x0a, 0x5d, 0xb7, 0x38 }; 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 != hmac_size) { 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[MD5_HASH_LEN]; CK_BYTE data[50]; CK_BYTE expect[] = { 0x56, 0xbe, 0x34, 0x52, 0x1d, 0x14, 0x4c, 0x88, 0xdb, 0xb8, 0xc7, 0x33, 0xf0, 0xe8, 0xb3, 0xf6 }; CK_BYTE key_data[] = { 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 ); 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 #3", rc ); return FALSE; } if (hash_len != hmac_size) { printf(" Error: C_Sign #3 generated bad HMAC length\n"); return FALSE; } if (memcmp(hash, expect, hash_len) != 0) { printf(" Error: C_Sign #3 generated bad HMAC\n"); return FALSE; } rc = funcs->C_VerifyInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_VerifyInit #3", rc ); return FALSE; } rc = funcs->C_Verify( session, data, data_len, hash, hash_len ); if (rc != CKR_OK) { show_error(" C_Verify #3", rc ); return FALSE; } rc = funcs->C_DestroyObject( session, h_key ); if (rc != CKR_OK) { show_error(" C_DestroyObject #3", rc ); return FALSE; } } // test 4 // { 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[50]; CK_BYTE expect[] = { 0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea, 0x3a, 0x75, 0x16, 0x47, 0x46, 0xff, 0xaa, 0x79 }; CK_BYTE key_data[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19 }; 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, 0xCD, 50 ); data_len = 50; rc = funcs->C_CreateObject( session, key_attribs, 4, &h_key ); if (rc != CKR_OK) { show_error(" C_CreateObject #4", rc ); return FALSE; } rc = funcs->C_SignInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_SignInit #4", 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 #4", rc ); return FALSE; } if (hash_len != hmac_size) { printf(" Error: C_Sign #4 generated bad HMAC length\n"); return FALSE; } if (memcmp(hash, expect, hash_len) != 0) { printf(" Error: C_Sign #4 generated bad HMAC\n"); return FALSE; } rc = funcs->C_VerifyInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_VerifyInit #4", rc ); return FALSE; } rc = funcs->C_Verify( session, data, data_len, hash, hash_len ); if (rc != CKR_OK) { show_error(" C_Verify #4", rc ); return FALSE; } rc = funcs->C_DestroyObject( session, h_key ); if (rc != CKR_OK) { show_error(" C_DestroyObject #4", rc ); return FALSE; } } // test 5 // { 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[50]; CK_BYTE expect[] = { 0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00, 0xf9, 0xba, 0xb9, 0x95, 0x69, 0x0e, 0xfd, 0x4c }; CK_BYTE key_data[] = { 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c }; 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 With Truncation" ); data_len = 20; rc = funcs->C_CreateObject( session, key_attribs, 4, &h_key ); if (rc != CKR_OK) { show_error(" C_CreateObject #5", rc ); return FALSE; } rc = funcs->C_SignInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_SignInit #5", rc ); return FALSE; } hash_len = sizeof(hash);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -