void GameStateGame::LoadGameSettings() { std::ifstream file; file.open(std::string("media/Game.cfg")); if (!file.is_open()) { std::cout << "Failed loading Game.cfg" << std::endl; } std::string line; while (std::getline(file, line)) { if (line[0] == '|') { continue; } std::stringstream keystream(line); std::string type; keystream >> type; if (type == "Map") { keystream >> m_mapName; } else {
bool SpriteSheet::LoadSheet(const std::string& l_file){ std::ifstream sheet; sheet.open(Utils::GetWorkingDirectory() + l_file); if (!sheet.is_open()){ std::cout << "! Failed loading spritesheet: " << l_file << std::endl; return false; } // Release the current spritesheet resources. ReleaseSheet(); std::string line; while(std::getline(sheet,line)){ if (line[0] == '|'){ continue; } std::stringstream keystream(line); std::string type; keystream >> type; if(type == "Texture"){ if (m_texture != ""){ std::cout << "! Duplicate texture entries in: " << l_file << std::endl; continue; } std::string texture; keystream >> texture; if(!m_textureManager->RequireResource(texture)) { std::cout << "! Could not set up the texture: " << texture << std::endl; continue; } m_texture = texture; m_sprite.setTexture(*m_textureManager->GetResource(m_texture)); } else if(type == "Size"){ keystream >> m_spriteSize.x >> m_spriteSize.y; SetSpriteSize(m_spriteSize); } else if(type == "Scale"){
void exercise19(){ // vector.push_back() is busted /* Exercise 19 */ Xstr keystream("Z/kf0FmwkR2EwZr1qdZfgqaoWbSlLy/QGY/VRRhA9LAAA===", Xstr::BASE64_ENCODED); string strings[38] = { "SSBoYXZlIG1ldCB0aGVtIGF0IGNsb3NlIG9mIGRheQ==", "Q29taW5nIHdpdGggdml2aWQgZmFjZXM=", "RnJvbSBjb3VudGVyIG9yIGRlc2sgYW1vbmcgZ3JleQ==", "RWlnaHRlZW50aC1jZW50dXJ5IGhvdXNlcy4=", "SSBoYXZlIHBhc3NlZCB3aXRoIGEgbm9kIG9mIHRoZSBoZWFk", "T3IgcG9saXRlIG1lYW5pbmdsZXNzIHdvcmRzLA==", "T3IgaGF2ZSBsaW5nZXJlZCBhd2hpbGUgYW5kIHNhaWQ=", "UG9saXRlIG1lYW5pbmdsZXNzIHdvcmRzLA==", "QW5kIHRob3VnaHQgYmVmb3JlIEkgaGFkIGRvbmU=", "T2YgYSBtb2NraW5nIHRhbGUgb3IgYSBnaWJl", "VG8gcGxlYXNlIGEgY29tcGFuaW9u", "QXJvdW5kIHRoZSBmaXJlIGF0IHRoZSBjbHViLA==", "QmVpbmcgY2VydGFpbiB0aGF0IHRoZXkgYW5kIEk=", "QnV0IGxpdmVkIHdoZXJlIG1vdGxleSBpcyB3b3JuOg==", "QWxsIGNoYW5nZWQsIGNoYW5nZWQgdXR0ZXJseTo=", "QSB0ZXJyaWJsZSBiZWF1dHkgaXMgYm9ybi4=", "VGhhdCB3b21hbidzIGRheXMgd2VyZSBzcGVudA==", "VW50aWwgaGVyIHZvaWNlIGdyZXcgc2hyaWxsLg==", "V2hhdCB2b2ljZSBtb3JlIHN3ZWV0IHRoYW4gaGVycw==", "V2hlbiB5b3VuZyBhbmQgYmVhdXRpZnVsLA==", "U2hlIHJvZGUgdG8gaGFycmllcnM/", "VGhpcyBtYW4gaGFkIGtlcHQgYSBzY2hvb2w=", "QW5kIHJvZGUgb3VyIHdpbmdlZCBob3JzZS4=", "VGhpcyBvdGhlciBoaXMgaGVscGVyIGFuZCBmcmllbmQ=", "V2FzIGNvbWluZyBpbnRvIGhpcyBmb3JjZTs=", "SGUgbWlnaHQgaGF2ZSB3b24gZmFtZSBpbiB0aGUgZW5kLA==", "U28gc2Vuc2l0aXZlIGhpcyBuYXR1cmUgc2VlbWVkLA==", "U28gZGFyaW5nIGFuZCBzd2VldCBoaXMgdGhvdWdodC4=", "VGhpcyBvdGhlciBtYW4gSSBoYWQgZHJlYW1lZA==", "QSBkcnVua2VuLCB2YWluLWdsb3Jpb3VzIGxvdXQu", "SGUgaGFkIGRvbmUgbW9zdCBiaXR0ZXIgd3Jvbmc=", "VG8gc29tZSB3aG8gYXJlIG5lYXIgbXkgaGVhcnQs", "WWV0IEkgbnVtYmVyIGhpbSBpbiB0aGUgc29uZzs=", "SGUsIHRvbywgaGFzIHJlc2lnbmVkIGhpcyBwYXJ0", "SW4gdGhlIGNhc3VhbCBjb21lZHk7", "VHJhbnNmb3JtZWQgdXR0ZXJseTo=", "QSB0ZXJyaWJsZSBiZWF1dHkgaXMgYm9ybi4=", }; vector<Xstr> ciphers; Xstr random_key("Rfh9orvO75Iba9PsvseQPg==", Xstr::BASE64_ENCODED); /* Make 8-byte nonce for CTR, fill with 0's * We use the same nonce for all encryptions, which is where the * weakness is */ Xstr nonce; nonce.resize(AES::CTR_NONCE_SIZE, 0); Xstr next_str; Xstr next_cipher; Xstr newstr; string s; // encrypt the strings for(int i = 0; i < 37; i++){ newstr = Xstr(strings[i], Xstr::BASE64_ENCODED); next_cipher = BlockCipher::encrypt(EncryptType::CTR_ENCRYPT, newstr, random_key, nonce); ciphers.push_back( next_cipher ); } // get keystream with partially solved characters Xstr cracked_keystream = break_fixed_nonce_CTR_by_substituting(ciphers); // I could waste my time guessing and complete the keystream, but I // have better things to do :) crypto_exercise_test(19, keystream == cracked_keystream ); }