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