static DWORD WINAPI generate_rsa_key_thread(void *param) { struct rsa_key_thread_params *params = (struct rsa_key_thread_params *) param; struct progress prog; prog.progbar = params->progressbar; progress_update(&prog, PROGFN_INITIALISE, 0, 0); if (params->is_dsa) dsa_generate(params->dsskey, params->keysize, progress_update, &prog); else rsa_generate(params->key, params->keysize, progress_update, &prog); PostMessage(params->dialog, WM_DONEKEY, 0, 0); sfree(params); return 0; }
virtual void __fastcall Execute() { try { ProgressUpdate(PROGFN_INITIALISE, 0, 0); if (FGenerator->KeyType == ktDSA) { dsa_generate(FGenerator->FDSSKey, FGenerator->KeySize, KeyGenerationProgressUpdate, this); } else { rsa_generate(FGenerator->FRSAKey, FGenerator->KeySize, KeyGenerationProgressUpdate, this); } Progress.Complete = kgSuccess; } catch(...) { Progress.Complete = kgFailure; } Synchronize(DistributeProgressUpdate); }