📄 digest_func.c
字号:
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 + -