bool BBSValidate() { cout << "\nBlumBlumShub validation suite running...\n\n"; Integer p("212004934506826557583707108431463840565872545889679278744389317666981496005411448865750399674653351"); Integer q("100677295735404212434355574418077394581488455772477016953458064183204108039226017738610663984508231"); Integer seed("63239752671357255800299643604761065219897634268887145610573595874544114193025997412441121667211431"); BlumBlumShub bbs(p, q, seed); bool pass = true, fail; int j; const byte output1[] = { 0x49,0xEA,0x2C,0xFD,0xB0,0x10,0x64,0xA0,0xBB,0xB9, 0x2A,0xF1,0x01,0xDA,0xC1,0x8A,0x94,0xF7,0xB7,0xCE}; const byte output2[] = { 0x74,0x45,0x48,0xAE,0xAC,0xB7,0x0E,0xDF,0xAF,0xD7, 0xD5,0x0E,0x8E,0x29,0x83,0x75,0x6B,0x27,0x46,0xA1}; byte buf[20]; bbs.GetBlock(buf, 20); fail = memcmp(output1, buf, 20) != 0; pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); for (j=0;j<20;j++) cout << setw(2) << setfill('0') << hex << (int)buf[j]; cout << endl; bbs.Seek(10); bbs.GetBlock(buf, 10); fail = memcmp(output1+10, buf, 10) != 0; pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); for (j=0;j<10;j++) cout << setw(2) << setfill('0') << hex << (int)buf[j]; cout << endl; bbs.Seek(1234567); bbs.GetBlock(buf, 20); fail = memcmp(output2, buf, 20) != 0; pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); for (j=0;j<20;j++) cout << setw(2) << setfill('0') << hex << (int)buf[j]; cout << endl; return pass; }
void invokeTestSuite(int option, char *streamFile) { fprintf(freqfp, "________________________________________________________________________________\n\n"); fprintf(freqfp, "\t\tFILE = %s\t\tALPHA = %6.4f\n", streamFile, ALPHA); fprintf(freqfp, "________________________________________________________________________________\n\n"); if ( option != 0 ) printf(" Statistical Testing In Progress.........\n\n"); switch( option ) { case 0: fileBasedBitStreams(streamFile); break; case 1: lcg(); break; case 2: quadRes1(); break; case 3: quadRes2(); break; case 4: cubicRes(); break; case 5: exclusiveOR(); break; case 6: modExp(); break; case 7: bbs(); break; case 8: micali_schnorr(); break; case 9: SHA1(); break; /* INTRODUCE NEW PSEUDO RANDOM NUMBER GENERATORS HERE */ default: printf("Error in invokeTestSuite!\n"); break; } printf(" Statistical Testing Complete!!!!!!!!!!!!\n\n"); }
unsigned int BlumGoldwasserPrivateKey::Decrypt(const byte *input, unsigned int cipherTextLength, byte *output) { if (cipherTextLength <= modulusLen) return 0; Integer xt(input, modulusLen); PublicBlumBlumShub bbs(n, Integer::Zero()); unsigned int plainTextLength = cipherTextLength - modulusLen; unsigned int t = ((plainTextLength)*8 + bbs.maxBits-1) / bbs.maxBits; Integer dp = a_exp_b_mod_c((p+1)/4, t, p-1); Integer dq = a_exp_b_mod_c((q+1)/4, t, q-1); Integer xp = a_exp_b_mod_c(xt%p, dp, p); Integer xq = a_exp_b_mod_c(xt%q, dq, q); bbs.current = CRT(xp, p, xq, q, u); bbs.bitsLeft = bbs.maxBits; bbs.ProcessString(output, input+modulusLen, plainTextLength); return plainTextLength; }
ParticlePairsTemp get_possible_interactions(const ParticlesTemp &ps, double max_distance, ParticleStatesTable *pst) { if (ps.empty()) return ParticlePairsTemp(); ParticleStatesList psl; ParticlesTemp all= pst->get_particles(); unsigned int max=0; for (unsigned int i=0; i< all.size(); ++i) { psl.push_back( pst->get_particle_states(all[i])); max= std::max(psl[i]->get_number_of_particle_states(), max); } algebra::BoundingBox3Ds bbs(ps.size()); for (unsigned int i=0; i< max; ++i) { for (unsigned int j=0; j< all.size(); ++j) { psl[j]->load_particle_state(std::min(i, psl[j]->get_number_of_particle_states()-1), all[j]); } ps[0]->get_model()->update(); for (unsigned int j=0; j< ps.size(); ++j) { core::XYZ d(ps[j]); bbs[j]+= d.get_coordinates(); } } for (unsigned int j=0; j< ps.size(); ++j) { core::XYZR d(ps[j]); bbs[j]+= d.get_radius() + max_distance; } IMP_NEW(core::GridClosePairsFinder, gcpf, ()); gcpf->set_distance(max_distance); IntPairs ips= gcpf->get_close_pairs(bbs); ParticlePairsTemp ret(ips.size()); for (unsigned int i=0; i< ips.size(); ++i) { ret[i]= ParticlePair(ps[ips[i].first], ps[ips[i].second]); } return ret; }