virtual QPair<QByteArray, bool> GetBulkData(int) { QByteArray data(1024, 0); CreateDescriptor(data); SetTriggered(); int my_idx = GetGroup().GetIndex(GetLocalId()); int bad = Random::GetInstance().GetInt(0, GetGroup().Count()); while(bad == my_idx) { bad = Random::GetInstance().GetInt(0, GetGroup().Count()); } qDebug() << my_idx << "setting bad hash at" << bad; const Descriptor &cdes = GetMyDescriptor(); QVector<QByteArray> hashes = cdes.XorMessageHashes(); Library *lib = CryptoFactory::GetInstance().GetLibrary(); QScopedPointer<Hash> hashalgo(lib->GetHashAlgorithm()); hashes[bad] = hashalgo->ComputeHash(data); Descriptor descriptor(cdes.Length(), cdes.PublicDh(), hashes, cdes.CleartextHash()); SetMyDescriptor(descriptor); QByteArray my_desc; QDataStream desstream(&my_desc, QIODevice::WriteOnly); desstream << GetMyDescriptor(); return QPair<QByteArray, bool>(my_desc, false); }
void ShuffleRoundBlame::VerifyInnerCiphertext() { Library *lib = CryptoFactory::GetInstance().GetLibrary(); QScopedPointer<Hash> hash(lib->GetHashAlgorithm()); for(int idx = 0; idx < _public_inner_keys.count(); idx++) { hash->Update(_public_inner_keys[idx]->GetByteArray()); hash->Update(_public_outer_keys[idx]->GetByteArray()); hash->Update(_encrypted_data[idx]); } _broadcast_hash = hash->ComputeHash(); }
int main(int argc, char **argv) { QxtCommandOptions options; options.add(CL_HELP, "display this help message", QxtCommandOptions::NoValue); options.add(CL_NKEYS, "number of keys to generate", QxtCommandOptions::ValueRequired); options.add(CL_PUBDIR, "directory in which to put public keys (default=./keys/pub)", QxtCommandOptions::ValueRequired); options.add(CL_PRIVDIR, "directory in which to put private keys (default=./keys/priv)", QxtCommandOptions::ValueRequired); options.add(CL_KEYTYPE, "specify the key type (default=dsa, options=dsa|rsa)", QxtCommandOptions::ValueRequired); options.add(CL_LIB, "specify the library (default=cryptopp, options=cryptopp)", QxtCommandOptions::ValueRequired); options.add(CL_RAND, "specify the base properties for the key (default=NULL)", QxtCommandOptions::ValueRequired); options.add(CL_DEBUG, "enable debugging", QxtCommandOptions::NoValue); options.parse(argc, argv); if(options.count(CL_HELP) || options.showUnrecognizedWarning()) { options.showUsage(); return -1; } QMultiHash<QString, QVariant> params = options.parameters(); int key_count = params.value(CL_NKEYS, 1).toInt(); if(key_count < 1) { ExitWithWarning(options, "Invalid nkeys"); } QString pubdir_path = params.value(CL_PUBDIR, DEFAULT_PUBDIR).toString(); QDir pubdir(pubdir_path); if(!pubdir.exists()) { pubdir.mkpath("."); } if(!pubdir.exists()) { ExitWithWarning(options, "Unable to create pubdir"); } QString privdir_path = params.value(CL_PRIVDIR, DEFAULT_PRIVDIR).toString(); QDir privdir(privdir_path); if(!privdir.exists()) { privdir.mkpath("."); } if(!privdir.exists()) { ExitWithWarning(options, "Unable to create privdir"); } if(params.contains(CL_DEBUG)) { Logging::UseStderr(); } QString lib_name = params.value(CL_LIB, "cryptopp").toString(); QString key = params.value(CL_KEYTYPE, "dsa").toString(); CryptoFactory &cf = CryptoFactory::GetInstance(); QSharedPointer<CreateKey> ck(new CreateKey()); if(lib_name == "cryptopp") { if(key == "dsa") { cf.SetLibrary(CryptoFactory::CryptoPPDsa); if(params.contains(CL_RAND)) { ck = QSharedPointer<CreateKey>( new CreateSeededDsaKey(params.value(CL_RAND).toString())); } } else if (key == "rsa") { cf.SetLibrary(CryptoFactory::CryptoPP); } else { ExitWithWarning(options, "Invalid key type"); } } else { ExitWithWarning(options, "Invalid library"); } Library *lib = cf.GetLibrary(); QSharedPointer<Hash> hash(lib->GetHashAlgorithm()); int count = 0; while(count < key_count) { QSharedPointer<AsymmetricKey> key((*ck)()); QSharedPointer<AsymmetricKey> pubkey(key->GetPublicKey()); QByteArray hvalue = hash->ComputeHash(pubkey->GetByteArray()); QString id = Integer(hvalue).ToString(); if(!key->Save(privdir_path + QDir::separator() + id)) { qFatal("Could not save private key"); } if(!pubkey->Save(pubdir_path + QDir::separator() + id + ".pub")) { qFatal("Could not save private key"); } count++; } return 0; }