void OTPGenerator_Reset (OTPGenerator *g) { DebugObject_Access(&g->d_obj); // free existing work if (g->tw_have) { BThreadWork_Free(&g->tw); g->tw_have = 0; } g->position = g->num_otps; }
void OTPChecker_RemoveSeeds (OTPChecker *mc) { DebugObject_Access(&mc->d_obj); // free existing work if (mc->tw_have) { BThreadWork_Free(&mc->tw); mc->tw_have = 0; } mc->tables_used = 0; mc->next_table = 0; }
void OTPGenerator_Free (OTPGenerator *g) { DebugObject_Free(&g->d_obj); // free work if (g->tw_have) { BThreadWork_Free(&g->tw); } // free calculator OTPCalculator_Free(&g->calc[1]); // free calculator OTPCalculator_Free(&g->calc[0]); }
static void work_done_handler (OTPGenerator *g) { ASSERT(g->tw_have) DebugObject_Access(&g->d_obj); // free work BThreadWork_Free(&g->tw); g->tw_have = 0; // use new OTPs g->cur_calc = !g->cur_calc; g->position = 0; // call handler g->handler(g->user); return; }
void OTPChecker_Free (OTPChecker *mc) { DebugObject_Free(&mc->d_obj); // free work if (mc->tw_have) { BThreadWork_Free(&mc->tw); } // free entries BFree(mc->entries); // free tables BFree(mc->tables); // free calculator OTPCalculator_Free(&mc->calc); }
void OTPGenerator_SetSeed (OTPGenerator *g, uint8_t *key, uint8_t *iv) { DebugObject_Access(&g->d_obj); // free existing work if (g->tw_have) { BThreadWork_Free(&g->tw); } // copy key and IV memcpy(g->tw_key, key, BEncryption_cipher_key_size(g->cipher)); memcpy(g->tw_iv, iv, BEncryption_cipher_block_size(g->cipher)); // start work BThreadWork_Init(&g->tw, g->twd, (BThreadWork_handler_done)work_done_handler, g, (BThreadWork_work_func)work_func, g); // set have work g->tw_have = 1; }
static void work_done_handler (OTPChecker *mc) { ASSERT(mc->tw_have) DebugObject_Access(&mc->d_obj); // free work BThreadWork_Free(&mc->tw); mc->tw_have = 0; // update next table number mc->next_table = bmodadd_int(mc->next_table, 1, mc->num_tables); // update number of used tables if not all are used yet if (mc->tables_used < mc->num_tables) { mc->tables_used++; } // call handler if (mc->handler) { mc->handler(mc->user); return; } }
void OTPChecker_AddSeed (OTPChecker *mc, uint16_t seed_id, uint8_t *key, uint8_t *iv) { ASSERT(mc->next_table >= 0) ASSERT(mc->next_table < mc->num_tables) DebugObject_Access(&mc->d_obj); // free existing work if (mc->tw_have) { BThreadWork_Free(&mc->tw); } // set table's seed ID mc->tables[mc->next_table].id = seed_id; // copy key and IV memcpy(mc->tw_key, key, BEncryption_cipher_key_size(mc->cipher)); memcpy(mc->tw_iv, iv, BEncryption_cipher_block_size(mc->cipher)); // start work BThreadWork_Init(&mc->tw, mc->twd, (BThreadWork_handler_done)work_done_handler, mc, (BThreadWork_work_func)work_func, mc); // set have work mc->tw_have = 1; }