int main() { Cnt = 0; MakePrime(); int N, M, i, j, Min, Sum; scanf("%d %d", &N, &M); for(i = 0; i < N; ++i) { for(j = 0; j < M; ++j) { scanf("%d", &Map[i][j]); Map[i][j] = Fun(Map[i][j]); } } Min = 0x7fffffff; for(i = 0; i < N; ++i) { for(Sum = j = 0; j < M; ++j) { Sum += Map[i][j]; } if(Sum < Min) { Min = Sum; } } for(j = 0; j < M; ++j) { for(Sum = i = 0; i < N; ++i) { Sum += Map[i][j]; } if(Sum < Min) { Min = Sum; } } printf("%d\n", Min); return 0; }
BOOL CALLBACK MainDlgProc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam) { WORD wmId; WORD wmEvent; MakePrimeParams Params; //---------------------------------------------------------------------------- //-- WM_INITDIALOG ----------------------------------------------------------- //---------------------------------------------------------------------------- if(wMsg==WM_INITDIALOG) { // ::SetWindowText(hDlg, TEXT(PROGRAM_NAME)); // IDC_BASE_LIST SendMessage(GetDlgItem(hDlg,IDC_BASE_LIST), LB_ADDSTRING, 0, (LPARAM)TEXT("10")); SendMessage(GetDlgItem(hDlg,IDC_BASE_LIST), LB_ADDSTRING, 1, (LPARAM)TEXT("16L")); SendMessage(GetDlgItem(hDlg,IDC_BASE_LIST), LB_ADDSTRING, 2, (LPARAM)TEXT("16U")); SendMessage(GetDlgItem(hDlg,IDC_BASE_LIST), LB_ADDSTRING, 3, (LPARAM)TEXT("32")); SendMessage(GetDlgItem(hDlg,IDC_BASE_LIST), LB_ADDSTRING, 4, (LPARAM)TEXT("62")); // // SendMessage(GetDlgItem(hDlg,IDC_BASE_LIST), LB_SETCURSEL, 1, (LPARAM)0); // IDC_EDIT1 SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_LIMITTEXT, 1023, (LPARAM)0); SendMessage(GetDlgItem(hDlg, IDC_EDIT1), WM_SETTEXT, 0, (LPARAM)TEXT(EDIT1_DEFAULT_VALUE_STR)); // IDC_BLUME_CHECK SendMessage(GetDlgItem(hDlg, IDC_BLUME_CHECK), BM_SETCHECK, BST_CHECKED, 0); // IDC_SAFE_CHECK SendMessage(GetDlgItem(hDlg, IDC_SAFE_CHECK), BM_SETCHECK, BST_UNCHECKED, 0); // SetLabelUI(hDlg, IDC_BITS_STT, 0xFFFFFFFF); SetLabelUI(hDlg, IDC_TRUES_STT, 0xFFFFFFFF); return TRUE; } //---------------------------------------------------------------------------- //-- WM_CLOSE ---------------------------------------------------------------- //---------------------------------------------------------------------------- else if(wMsg==WM_CLOSE) { if(!Busy) { EndDialog(hDlg, 0); } // PostQuitMessage(0);//if (wmId == IDOK || wmId == IDCANCEL){EndDialog(hDlg, wmId);} return !Busy; } //---------------------------------------------------------------------------- //-- WM_COMMAND -------------------------------------------------------------- //---------------------------------------------------------------------------- else if(wMsg==WM_COMMAND) { wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); //---------------------------------------------------------------------------- //-- WM_COMMAND:IDC_BASE_LIST:LBN_SELCHANGE ------------------------------------ //---------------------------------------------------------------------------- if(wmId==IDC_BASE_LIST&&(wmEvent==LBN_SELCHANGE)) { if(!Busy) { INT SLen=::SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_LINELENGTH, 0, 0); if((SLen>0)&&GetEdit1TextAsMPZ(hDlg, Params.mpzP)) { mpz_clear(Params.mpzP); } } } //---------------------------------------------------------------------------- //-- WM_COMMAND:IDC_SAFE_CHECK:BN_CLICKED ------------------------------------ //---------------------------------------------------------------------------- else if(wmId==IDC_SAFE_CHECK&&(wmEvent==BN_CLICKED)) { if(BST_CHECKED== (SendMessage(GetDlgItem(hDlg, IDC_SAFE_CHECK), BM_GETCHECK, 0, 0)) ) { SendMessage(GetDlgItem(hDlg, IDC_BLUME_CHECK), BM_SETCHECK, 1, 0); EnableWindow(GetDlgItem(hDlg, IDC_BLUME_CHECK), 0); } else { EnableWindow(GetDlgItem(hDlg, IDC_BLUME_CHECK), 1); } } //---------------------------------------------------------------------------- //-- WM_COMMAND:IDC_EDIT1:EN_CHANGE ------------------------------------------ //---------------------------------------------------------------------------- else if(wmId==IDC_EDIT1&&(wmEvent==EN_CHANGE)) { if(!Busy) { INT SLen=::SendMessage(GetDlgItem(hDlg, IDC_EDIT1), EM_LINELENGTH, 0, 0); if((SLen>0)&&GetEdit1TextAsMPZ(hDlg, Params.mpzP)) { mpz_clear(Params.mpzP); } else if(SLen>0) { ::MessageBox(hDlg,TEXT(ERR_BAD_INPUT_001_STR),TEXT(PROGRAM_NAME),MB_OK); } } } //---------------------------------------------------------------------------- //-- IDC_NEXT_PRIME_BUTTON --------------------------------------------------- //---------------------------------------------------------------------------- else if(wmId==IDC_NEXT_PRIME_BUTTON) { if(!Busy) { ::SetWindowText(GetDlgItem(hDlg, IDC_NEXT_PRIME_BUTTON), TEXT("Abort")); Busy=TRUE; SetLabelUI(hDlg, IDC_TEST1N_STT, 0xFFFFFFFF); SetLabelUI(hDlg, IDC_TEST2N_STT, 0xFFFFFFFF); SetLabelUI(hDlg, IDC_TEST3N_STT, 0xFFFFFFFF); EnableElements(hDlg, &InputGBList[0], ARRAYSIZE(InputGBList), 0); EnableElements(hDlg, &BaseGBList[0], ARRAYSIZE(BaseGBList), 0); EnableElements(hDlg, &OptsGBList[0], ARRAYSIZE(OptsGBList), 0); EnableElements(hDlg, &ParamsGBList[0], ARRAYSIZE(ParamsGBList), 0); memset(&Params, 0, sizeof(Params)); Params.Blum=IsChecked(hDlg, IDC_BLUME_CHECK); Params.hWnd=hDlg; if(GetEdit1TextAsMPZ(hDlg, Params.mpzP)) { if(mpz_sizeinbase(Params.mpzP, 2)>MAX_BITS) { ::MessageBox(hDlg,TEXT(ERR_TOO_BIG_001_STR),TEXT(PROGRAM_NAME),MB_OK); } else { if(IsChecked(hDlg, IDC_SAFE_CHECK)) { if(mpz_sizeinbase(Params.mpzP, 2)>MAX_BITS_FOR_SAFE) { ::MessageBox(hDlg,TEXT(ERR_TOO_BIG_002_STR),TEXT(PROGRAM_NAME),MB_OK); } else MakeSafePrime(&Params); } else {MakePrime(&Params);} SetEdit1TextFromMPZ(hDlg, Params.mpzP); } mpz_clear(Params.mpzP); } else { ::MessageBox(hDlg,TEXT(ERR_BAD_INPUT_001_STR),TEXT(PROGRAM_NAME),MB_OK); } if(Busy==FALSE) { ::MessageBox(hDlg,TEXT(ERR_ABORTED_001_STR),TEXT(PROGRAM_NAME),MB_OK); } EnableElements(hDlg, &InputGBList[0], ARRAYSIZE(InputGBList), 1); EnableElements(hDlg, &BaseGBList[0], ARRAYSIZE(BaseGBList), 1); EnableElements(hDlg, &OptsGBList[0], ARRAYSIZE(OptsGBList), 1); EnableElements(hDlg, &ParamsGBList[0], ARRAYSIZE(ParamsGBList), 1); SendMessage(GetDlgItem(hDlg, IDC_SAFE_CHECK), BM_SETCHECK, 0, 0); SetLabelUI(hDlg, IDC_TEST1N_STT, Params.Cnt[0]); SetLabelUI(hDlg, IDC_TEST2N_STT, Params.Cnt[1]); SetLabelUI(hDlg, IDC_TEST3N_STT, Params.Cnt[2]); SetLabelUI(hDlg, IDC_SECS_STT, Params.mSecs); ::SetWindowText(GetDlgItem(hDlg, IDC_NEXT_PRIME_BUTTON), TEXT("Make prime")); ::FlashWindow(hDlg, 1); Busy=FALSE; } else { Busy=FALSE; } } return TRUE; } return FALSE; }//--//
bool RsaDevice_GenEaSigningRequest(RsaDevice d, X509_REQ* req, BIGNUM* delta_x, BIGNUM* delta_y, BIGNUM* rand_n, ProductEvidence* ev) { BN_zero(delta_x); BN_zero(delta_y); PrintTime("Calculating x+x' and y+y'"); // p = x + x' CHECK_CALL(d->p = BN_dup(d->x)); CHECK_CALL(BN_add(d->p, d->p, d->x_prime)); // q = y + y' CHECK_CALL(d->q = BN_dup(d->y)); CHECK_CALL(BN_add(d->q, d->q, d->y_prime)); PrintTime("...done"); PrintTime("Making finding deltas to make p and q prime"); if(!MakePrime(d->params, d->p, &delta_x, RsaParams_GetCtx(d->params))) return false; if(!MakePrime(d->params, d->q, &delta_y, RsaParams_GetCtx(d->params))) return false; PrintTime("...done"); PrintTime("Adding deltas to p and q"); // p = x + x' + delta_x CHECK_CALL(BN_add(d->p, d->p, delta_x)); // q = y + y' + delta_y CHECK_CALL(BN_add(d->q, d->q, delta_y)); PrintTime("...done"); PrintTime("Calculating n"); // n = p*q CHECK_CALL(d->n = BN_new()); CHECK_CALL(BN_mul(d->n, d->p, d->q, RsaParams_GetCtx(d->params))); ASSERT(BN_cmp(d->n, IntegerGroup_GetQ(RsaParams_GetGroup(d->params))) == -1); PrintTime("...done"); const_IntegerGroup group = RsaParams_GetGroup(d->params); // Get randomness for commitment to n PrintTime("Picking r_n"); BIGNUM* r_n = IntegerGroup_RandomExponent(group); CHECK_CALL(r_n); CHECK_CALL(BN_copy(rand_n, r_n)); BN_clear_free(r_n); PrintTime("...done"); PrintTime("Generating commits to p,q,n"); // Commit to p BIGNUM* commit_p = IntegerGroup_Commit(group, d->p, d->rand_p); CHECK_CALL(commit_p); // Commit to q BIGNUM* commit_q = IntegerGroup_Commit(group, d->q, d->rand_q); // Commit to n BIGNUM* commit_n = IntegerGroup_Commit(group, d->n, rand_n); PrintTime("...done"); /* printf("C(p) = "); BN_print_fp(stdout, commit_p); puts(""); printf("C(q) = "); BN_print_fp(stdout, commit_q); puts(""); printf("C(n) = "); BN_print_fp(stdout, commit_n); puts(""); */ PrintTime("Generating prodproof"); ProductStatement st = ProductStatement_New(RsaParams_GetGroup(d->params), commit_p, commit_q, commit_n); PrintTime("...done"); // Generate proof that n = p*q PrintTime("Generating prodevidence"); *ev = ProductEvidence_New(st, d->p, d->rand_p, d->rand_q, rand_n); PrintTime("...done"); ProductStatement_Free(st); BN_clear_free(commit_p); BN_clear_free(commit_q); BN_clear_free(commit_n); CHECK_CALL(req); PrintTime("Generating certificate"); CHECK_CALL(GenerateCertRequest(d, req)); PrintTime("...done"); return true; }