-------------------------------------------------------------------------- Subject: [CRUNCHY CONTEST] 1 and 2 rounds, width 1600, collision From: "GUO Jian" Date: Tue, August 2, 2011 16:36 To: keccak at noekeon org Cc: "Alexandre Duc" "#WEI LEI#" "Thomas Peyrin (Dr)" -------------------------------------------------------------------------- Dear Keccak Team, We Alexandre Duc, Ecole Polytechnique Federale de Lausanne, Switzerland Jian Guo, Institute for Infocomm Research, Singapore Thomas Peyrin, Nanyang Technological University, Singapore Lei Wei, Nanyang Technological University, Singapore found 1 and 2-round collisions for the Keccak contest variants with b = 1600. The details can be found in the modified "KeccakCrunchyContest.cpp" from KeccakTool version 3.1, as attached. The result runs on our machine, and they passed the verification. [...] Regards! Alexandre, Jian, Thomas, Lei /* KeccakTools The Keccak sponge function, designed by Guido Bertoni, Joan Daemen, Michaƫl Peeters and Gilles Van Assche. For more information, feedback or questions, please refer to our website: http://keccak.noekeon.org/ Implementation by the designers, hereby denoted as "the implementer". To the extent possible under law, the implementer has waived all copyright and related or neighboring rights to the source code in this file. http://creativecommons.org/publicdomain/zero/1.0/ */ #include #include "Keccak.h" #include "KeccakCrunchyContest.h" int verifyPreimageChallenge(int r, int c, int nr, const UINT8 image[], const UINT8 preimage[], const int preimageLength) { const int imageLength = 80; UINT8 output[10]; ReducedRoundKeccak keccakRR(r, c, nr); keccakRR.absorb(preimage, preimageLength); keccakRR.squeeze(output, imageLength); cout << "Preimage challenge on " << keccakRR << ": "; if (memcmp(output, image, (imageLength+7)/8) == 0) { cout << "OK!" << endl; return 1; } else { cout << "failed." << endl; return 0; } } int verifyCollisionChallenge(int r, int c, int nr, const UINT8 input1[], const int input1Length, const UINT8 input2[], const int input2Length) { const int imageLength = 160; UINT8 output1[20], output2[20]; { ReducedRoundKeccak keccakRR(r, c, nr); keccakRR.absorb(input1, input1Length); keccakRR.squeeze(output1, imageLength); } { ReducedRoundKeccak keccakRR(r, c, nr); keccakRR.absorb(input2, input2Length); keccakRR.squeeze(output2, imageLength); cout << "Collision challenge on " << keccakRR << ": "; } if (memcmp(output1, output2, (imageLength+7)/8) == 0) { cout << "OK!" << endl; return 1; } else { cout << "failed." << endl; return 0; } } void verifyPreimageChallenges() { int counter = 0; counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=1]: preimage challenge 40, 160, 1, (const UINT8*)"\xe9\xf5\x7f\x02\xa9\xb0\xeb\xd8\x44\x98", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=1]: preimage challenge 240, 160, 1, (const UINT8*)"\xd9\xd6\xd3\xc8\x4d\x1a\xc1\xd7\x5f\x96", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=1]: preimage challenge 640, 160, 1, (const UINT8*)"\x3f\x41\x9f\x88\x1c\x42\xcf\xfc\x5f\xd7", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=1]: preimage challenge 1440, 160, 1, (const UINT8*)"\x0f\x0a\xf7\x07\x4b\x6a\xbd\x48\x6f\x80", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=2]: preimage challenge 40, 160, 2, (const UINT8*)"\x02\x4a\x55\x18\xe1\xe9\x5d\xb5\x32\x19", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=2]: preimage challenge 240, 160, 2, (const UINT8*)"\x7a\xb8\x98\x1a\xda\x8f\xdb\x60\xae\xfd", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=2]: preimage challenge 640, 160, 2, (const UINT8*)"\x82\x8d\x4d\x09\x05\x0e\x06\x35\x07\x5e", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=2]: preimage challenge 1440, 160, 2, (const UINT8*)"\x63\x90\x22\x0e\x7b\x5d\x32\x84\xd2\x3e", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=3]: preimage challenge 40, 160, 3, (const UINT8*)"\xd8\xed\x85\x69\x2a\xfb\xee\x4c\x99\xce", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=3]: preimage challenge 240, 160, 3, (const UINT8*)"\x5c\x9d\x5e\x4b\x38\x5e\x9c\x4f\x8e\x2e", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=3]: preimage challenge 640, 160, 3, (const UINT8*)"\x00\x7b\xb5\xc5\x99\x80\x66\x0e\x02\x93", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=3]: preimage challenge 1440, 160, 3, (const UINT8*)"\x06\x25\xa3\x46\x28\xc0\xcf\xe7\x6c\x75", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=4]: preimage challenge 40, 160, 4, (const UINT8*)"\x74\x2c\x7e\x3c\xd9\x46\x1d\x0d\x03\x4e", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=4]: preimage challenge 240, 160, 4, (const UINT8*)"\x0d\xd2\x5e\x6d\xe2\x9a\x42\xad\xb3\x58", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=4]: preimage challenge 640, 160, 4, (const UINT8*)"\x75\x1a\x16\xe5\xe4\x95\xe1\xe2\xff\x22", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=4]: preimage challenge 1440, 160, 4, (const UINT8*)"\x7d\xaa\xd8\x07\xf8\x50\x6c\x9c\x02\x76", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=5]: preimage challenge 40, 160, 5, (const UINT8*)"\xe0\x53\xf9\x64\x4f\xaa\xb1\xda\x31\x1b", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=5]: preimage challenge 240, 160, 5, (const UINT8*)"\x8d\xf4\x44\x09\xb4\x6f\xb8\xc6\x1b\xc4", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=5]: preimage challenge 640, 160, 5, (const UINT8*)"\x6e\xf2\x61\x6f\xeb\xb9\x9b\x1f\x70\xed", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=5]: preimage challenge 1440, 160, 5, (const UINT8*)"\x65\x3b\xc0\xf8\x7d\x26\x4f\x08\x57\xd0", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=6]: preimage challenge 40, 160, 6, (const UINT8*)"\xe5\x1c\x00\xc4\x8e\xd5\xdb\x07\x02\xb3", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=6]: preimage challenge 240, 160, 6, (const UINT8*)"\x57\x16\xe7\x01\xef\x67\xcc\x04\x48\xb0", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=6]: preimage challenge 640, 160, 6, (const UINT8*)"\x5f\x9e\x63\x88\x4f\x2e\x94\xf1\xa1\x0e", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=6]: preimage challenge 1440, 160, 6, (const UINT8*)"\xd6\x05\x33\x5e\xdc\xe7\xd2\xca\xf4\x10", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=7]: preimage challenge 40, 160, 7, (const UINT8*)"\x95\x93\x25\xc5\x67\x73\xa7\x4a\x43\xc6", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=7]: preimage challenge 240, 160, 7, (const UINT8*)"\x9c\xec\xce\x92\x93\x8a\xea\xba\x26\xaf", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=7]: preimage challenge 640, 160, 7, (const UINT8*)"\xa4\xc1\x35\x21\x90\x12\xaa\xc8\x08\xed", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=7]: preimage challenge 1440, 160, 7, (const UINT8*)"\x5e\x0d\x17\x9c\x50\xc2\x93\x0c\x0d\x76", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=8]: preimage challenge 40, 160, 8, (const UINT8*)"\x05\x4d\xda\xf1\xb9\xb5\x9b\x9a\x60\xbf", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=8]: preimage challenge 240, 160, 8, (const UINT8*)"\x19\xc2\xd8\xff\x69\xe5\x66\xa5\x07\xc9", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=8]: preimage challenge 640, 160, 8, (const UINT8*)"\xf4\x83\x5d\x80\x2a\xab\xc5\xbe\x75\x8e", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=8]: preimage challenge 1440, 160, 8, (const UINT8*)"\x34\xe1\x81\x23\x29\xd5\xe8\x9d\x67\x1a", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=9]: preimage challenge 40, 160, 9, (const UINT8*)"\x5e\xd1\xa9\xc1\x84\xeb\x72\xb9\x45\x46", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=9]: preimage challenge 240, 160, 9, (const UINT8*)"\x78\xd6\x58\xde\xc5\x01\xee\xd6\x3b\x1e", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=9]: preimage challenge 640, 160, 9, (const UINT8*)"\x2e\xdd\x24\x58\x7f\x22\x5c\x69\x6e\x61", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=9]: preimage challenge 1440, 160, 9, (const UINT8*)"\xca\x18\x6a\x0f\xe1\x26\xed\xbe\x2c\xa6", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=10]: preimage challenge 40, 160, 10, (const UINT8*)"\xc3\x8f\x61\x8f\x53\xa9\x6e\x4f\xfd\x53", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=10]: preimage challenge 240, 160, 10, (const UINT8*)"\x46\x68\x1a\x4a\x3a\x97\x5b\x16\x2a\xc4", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=10]: preimage challenge 640, 160, 10, (const UINT8*)"\xb8\x6d\xb6\x0f\xf7\x23\x18\x76\x6e\xef", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=10]: preimage challenge 1440, 160, 10, (const UINT8*)"\xdf\x7b\xf3\x01\x7c\xd3\x22\xa4\x6c\x31", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=11]: preimage challenge 40, 160, 11, (const UINT8*)"\x19\xf8\xe6\xbc\x5d\x71\x41\x77\x65\x95", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=11]: preimage challenge 240, 160, 11, (const UINT8*)"\x12\x9e\x94\x0f\x63\x43\x00\xf6\xb4\x14", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=11]: preimage challenge 640, 160, 11, (const UINT8*)"\xa2\x49\x0a\x3e\x68\xd5\xd0\x2d\xd4\xaa", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=11]: preimage challenge 1440, 160, 11, (const UINT8*)"\x69\xc9\x4f\x0a\xe8\x30\x40\x26\xb3\xda", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=40, c=160, rounds=12]: preimage challenge 40, 160, 12, (const UINT8*)"\x20\x68\x65\xeb\x08\xb4\x2a\x66\x63\xe1", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=240, c=160, rounds=12]: preimage challenge 240, 160, 12, (const UINT8*)"\x85\x5a\x86\x45\x96\xc5\x1c\xaf\x7d\x3d", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=640, c=160, rounds=12]: preimage challenge 640, 160, 12, (const UINT8*)"\x68\xed\xde\x13\xa4\x79\xe1\x47\x71\xbd", (const UINT8*)"???", 24 // fill in this line ); counter += verifyPreimageChallenge( // Keccak[r=1440, c=160, rounds=12]: preimage challenge 1440, 160, 12, (const UINT8*)"\xbf\x8c\x82\x63\xa9\x87\x59\x5b\x21\xc0", (const UINT8*)"???", 24 // fill in this line ); cout << dec << counter << " correct preimage challenge(s)." << endl; } void verifyCollisionChallenges() { int counter = 0; counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=1]: collision challenge 40, 160, 1, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=1]: collision challenge 240, 160, 1, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=1]: collision challenge 640, 160, 1, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=1]: collision challenge 1440, 160, 1, (const UINT8*)"\xdd\xe5\x47\xb0\x7d\xc6\x48\xdd\x00\xdd\x58\xa2\x02\x64\x1f\x49\xce\x16\xb5\xb1\xe4\xd2\x12\x9d\xe3\x37\x14\xfc\x93\xd2\x79\x70\xb8\xc1\x20\x35\x87\x68\x12\x87\x45\x6a\x29\x47\xce\x48\x90\x9d\x5e\x45\x4e\x43\x18\x61\xe0\xfb\x98\xf5\xf7\x2b\xc7\x71\x9c\x7f\x32\xbc\xb4\xb9\x25\xc6\x40\x6a\x31\x69\xb2\xff\xb2\x42\x9c\x10\x88\xeb\x53\xa0\x4c\x34\x9b\xe4\x29\x93\x0f\xf0\x04\xab\x70\x36\x68\x24\xef\x8d\xeb\x2f\xf7\x1c\x98\xa9\x1b\x4a\xec\xb8\x5b\x74\xa3\xae\x14\xef\xe2\xaf\xd3\x0b\x42\xe2\xfc\x46\x8e\x6c\x7c\xf6\x90\x6b\x83\x7b\x9a\x7a\x97\x33\x24\xb3\x7d\x10\x6b\xd8\x84\x0e\x87\x98\xfd\x69\x47\xd0\x75\x8a\xb2\x71\xd0\x40\xdd\x4d\x36\x6d\xb8\xb9\xe9\x53\x34\x80\x86\x58\x33\x03\x68\x9e\xdc\xec\xac\x63\x84\xa9\xcc\xcb\x79\x41\x55\x2c\xb2\x26\x6c\x8f\x73\xa3\xfd\x2b\x5c\xe6\x7e\x90\x66\x04\xe8\x9a\x18\x50\x38\xe4\x3c\xe5\x47\xc0\x8e\x13\x8c\x08\x55\xe1\x34\x07\x07\xa0\x97\x7a\x43\x94\xa6\xa0\x7a\x24\x30\xe0\x29\x19\x7a\x31\x69\xb3\x15\xa6\x98\x5c\x66\x26\x6f\xf2\x2e\xc4\xd4\x62\xcc\xdb\x03\x63\x56\x46\xf7\xfc\xe6\x71\x20\x17\x51\x49\x30\xcc\x7a\x91\x7f\x8f\x3f\x17\xeb\xa6\x3d\x5b\x98\x6c\x1f\x6c\xce\xeb\x48\xd1\x4e\x9e\x18\x45\x9a\xff\xb6\xba\x15\x08\x04\x45\xd4\x7e\xdf\x53\x0e\x1e\x6a\xf9\xc4\xa7\x54\x55\x13\x74\xc9\xe2\x5f\x11\xb3\xae\xaf\xcb\xf3\x49\xca\xaa\x04\xdf\xa2\x08\x25\x86\x86\x05\xd9\x94\x22\x43\x8e\xe7\xea\xe2\x44\xfe\x56\x0d\xe0\xb6\x1f\x93\x64\xce\x5f\x57\x18\x29\x01\x1c\x08\xb3\x24\x2d\x39\xaa\x31\x12\x3f", 2872, // fill in this line (const UINT8*)"\xdd\xe5\x47\xb0\x7d\xc6\x48\xdd\x00\xdd\x58\xa2\x02\x64\x1f\x49\xce\x16\xb5\xb1\xe4\xd2\x12\x9d\xe3\x37\x14\xfc\x93\xd2\x79\x70\xb8\xc1\x20\x35\x87\x68\x12\x87\x45\x6a\x29\x47\xce\x48\x90\x9d\x5e\x45\x4e\x43\x18\x61\xe0\xfb\x98\xf5\xf7\x2b\xc7\x71\x9c\x7f\x32\xbc\xb4\xb9\x25\xc6\x40\x6a\x31\x69\xb2\xff\xb2\x42\x9c\x10\x88\xeb\x53\xa0\x4c\x34\x9b\xe4\x29\x93\x0f\xf0\x04\xab\x70\x36\x68\x24\xef\x8d\xeb\x2f\xf7\x1c\x98\xa9\x1b\x4a\xec\xb8\x5b\x74\xa3\xae\x14\xef\xe2\xaf\xd3\x0b\x42\xe2\xfc\x46\x8e\x6c\x7c\xf6\x90\x6b\x83\x7b\x9a\x7a\x97\x33\x24\xb3\x7d\x10\x6b\xd8\x84\x0e\x87\x98\xfd\x69\x47\xd0\x75\x8a\xb2\x71\xd0\x40\xdd\x4d\x36\x6d\xb8\xb9\xe9\x53\x34\x80\x86\x58\x33\x03\x68\x9e\xdc\xec\xac\x63\x84\xa9\xcc\xcb\x79\x41\x55\x2c\xb2\x26\x6c\x8f\x73\xa3\xfd\x2b\x5c\xe6\x7e\x90\x66\x04\xe8\x9a\x08\x50\x38\xe4\x3c\xe5\x47\xc0\x8e\x13\x8c\x08\x55\xe1\x34\x07\x07\xa0\x97\x7a\x43\x94\xa6\xa0\x7a\x24\x30\xe0\x29\x19\x7a\x31\x69\xb3\x15\xa6\x98\x5c\x66\x26\x6f\xf2\x2e\xc4\xd4\x62\xcc\xdb\x03\x63\x56\x46\xf7\xfc\xe6\x71\x20\x17\x51\x49\x30\xcc\x7a\x99\x7f\x8f\x3f\x17\xeb\xa6\x3d\x5b\x98\x6c\x1f\x6c\xce\xeb\x48\xd1\x4e\x9e\x18\x45\x9a\xfe\xb6\xba\x15\x08\x04\x45\xd4\x7e\xdf\x53\x0e\x1e\x6a\xf9\xc4\xa7\x54\x5d\x13\x74\xc9\xe2\x5f\x11\xb3\xae\xaf\xcb\xf3\x49\xca\xaa\x04\xdf\xb2\x08\x25\x86\x86\x04\xd9\x94\x22\x43\x8e\xe7\xea\xe2\x44\xfe\x56\x0d\xe0\xb6\x1f\x93\x64\xce\x5f\x57\x18\x29\x01\x1c\x08\xb3\x24\x2d\x39\xaa\x31\x12\x3f", 2872 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=2]: collision challenge 40, 160, 2, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=2]: collision challenge 240, 160, 2, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=2]: collision challenge 640, 160, 2, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=1]: collision challenge 1440, 160, 2, (const UINT8*)"\x90\xa9\x68\x63\x30\xa2\x23\x1c\xa5\x04\xb4\x3e\x47\x7d\xc8\x35\xd9\x8d\xe1\xb5\x62\x99\xc8\x28\x0c\x37\xf0\xb5\x94\xba\xc6\x24\x63\x2f\x87\x93\xd1\xaa\xaf\x76\xae\x63\xb4\xf5\xe1\x7c\x2a\xba\x09\x0c\x70\x6c\xa5\x38\x94\xb1\x70\x85\x66\x04\x3f\x2c\x28\xa3\x5b\xaf\x36\x2c\x59\xe6\xa3\x08\x49\x57\xfd\x2a\xd4\x28\xe5\xdd\x34\x55\x49\xd9\x8d\xde\x8a\xfd\x63\xf0\x01\xa2\x1c\x29\x45\x78\xd8\x7c\xa4\x32\x62\x47\x3a\xab\x9f\x37\xd6\x73\x5f\xbb\x50\x93\x10\x9a\x6c\x9d\x78\xf6\x9b\xdb\xe6\x9c\x7d\x03\xc6\xc3\x7b\x9e\x3f\x1f\xd0\xa1\x67\x0a\x4c\x06\x42\x22\x79\xa1\xdd\xc9\x35\xed\x63\xa1\x8b\xdb\x98\x26\xb6\x7e\xc2\x34\x81\x88\xf7\xfc\x27\x36\x1c\xf7\xd7\x83\x02\x23\x89\x44\x46\x02\xe5\x23\xcb\x1a\x11\x2f\xbc\x9c\x0a\x54\xc2\xc1\xd2\x84\xf5\x54\x0d\xec\x50\x34\x22\x68\x2b\xf9\xef\x2d\x1c\x78\x71\x62\x7a\x57\x86\x46\x71\x97\x75\x2d\x33\x7f\x81\xf5\x41\x54\x79\x35\xa8\x86\x21\xf8\xba\x43\x65\xe6\x3c\x54\x13\x59\xcd\x85\xbb\x47\xdc\x41\x8d\x4d\xd8\x02\x7b\x0b\x82\xfc\x00\xc2\x50\x7a\xf8\xf8\x00\x19\xf1\xbb\x5d\x56\xa1\x99\xaa\xb4\xf2\x77\x39\xae\xbf\x15\xef\x4c\x63\xc8\x4f\xde\xd3\xd5\xda\xd4\x93\x2b\x4e\x8b\x23\x4e\xa5\x14\x09\x00\x6a\xaa\x9b\x15\x5f\x8e\x8c\x98\x3c\x4b\xae\x2b\x98\x11\xf3\xe7\xef\xc7\xb8\xc9\x9b\x4b\xf4\xe9\xd7\x18\x37\x7c\x2c\x41\x7e\x97\xeb\x19\xac\x4a\xa7\x38\xe3\xe1\x84\x91\x0f\x1c\xa2\x02\x03\x91\xc8\xbb\x5a\x64\x06\x4f\x4d\xdd\x67\x85\x59\x93\xc6\xd7\x2a\xb1\xf1\xd6\xfc\x98\x0f\xdf\x7c\x93\x70\x8b\xaf", 2*1440-8, // fill in this line (const UINT8*)"\x90\xa9\x68\x63\x30\xa2\x23\x1c\xa5\x04\xb4\x3e\x47\x7d\xc8\x35\xd9\x8d\xe1\xb5\x62\x99\xc8\x28\x0c\x37\xf0\xb5\x94\xba\xc6\x24\x63\x2f\x87\x93\xd1\xaa\xaf\x76\xae\x63\xb4\xf5\xe1\x7c\x2a\xba\x09\x0c\x70\x6c\xa5\x38\x94\xb1\x70\x85\x66\x04\x3f\x2c\x28\xa3\x5b\xaf\x36\x2c\x59\xe6\xa3\x08\x49\x57\xfd\x2a\xd4\x28\xe5\xdd\x34\x55\x49\xd9\x8d\xde\x8a\xfd\x63\xf0\x01\xa2\x1c\x29\x45\x78\xd8\x7c\xa4\x32\x62\x47\x3a\xab\x9f\x37\xd6\x73\x5f\xbb\x50\x93\x10\x9a\x6c\x9d\x78\xf6\x9b\xdb\xe6\x9c\x7d\x03\xc6\xc3\x7b\x9e\x3f\x1f\xd0\xa1\x67\x0a\x4c\x06\x42\x22\x79\xa1\xdd\xc9\x35\xed\x63\xa1\x8b\xdb\x98\x26\xb6\x7e\xc2\x34\x81\x88\xf7\xfc\x27\x36\x1c\xf7\xd7\x83\x02\x23\x89\x44\x46\x02\xe5\x23\xcb\x1a\x11\x2f\xbc\x9c\x0a\x54\xc2\xc1\xd2\x84\xf5\x54\x0d\xec\x50\x34\x22\x6c\x2b\xf9\xef\x2d\x1c\x78\x71\x62\x7a\x57\x86\x46\x71\x97\x75\x2d\x33\x7f\x81\xf5\x40\x54\x79\x35\xa8\x86\x21\xf8\xba\x43\x65\xe6\x3c\x54\x13\x59\xcd\x85\xbb\x47\xdc\x41\x8d\x4d\xd8\x02\x7b\x0b\x82\xfc\x00\xc2\x50\x7a\xf8\xf8\x00\x19\xf1\xbb\x5d\x56\xa1\x99\xaa\xb4\xf2\x77\x39\xae\xbf\x15\xef\x4c\x63\xc8\x4f\xde\xd3\xd1\xda\xd4\x93\x2b\x4e\x8b\x23\x4e\xa5\x14\x09\x02\x6a\xaa\x9b\x15\x5f\x8e\x8c\x98\x3c\x4b\xae\x2b\x98\x11\xf3\xe7\xef\xc7\xb8\xc9\x9b\x4b\xf4\xe9\xd7\x18\x37\x7c\x2c\x41\x7e\x97\xeb\x19\xac\x4a\xa7\x38\xe3\xe3\x84\x91\x0f\x1c\xa2\x02\x03\x91\xc9\xbb\x5a\x64\x06\x4f\x4d\xdd\x67\x85\x59\x93\xc6\xd7\x2a\xb1\xf1\xd6\xfc\x98\x0f\xdf\x7c\x93\x70\x8b\xaf", 2*1440-8 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=3]: collision challenge 40, 160, 3, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=3]: collision challenge 240, 160, 3, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=3]: collision challenge 640, 160, 3, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=3]: collision challenge 1440, 160, 3, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=4]: collision challenge 40, 160, 4, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=4]: collision challenge 240, 160, 4, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=4]: collision challenge 640, 160, 4, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=4]: collision challenge 1440, 160, 4, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=5]: collision challenge 40, 160, 5, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=5]: collision challenge 240, 160, 5, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=5]: collision challenge 640, 160, 5, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=5]: collision challenge 1440, 160, 5, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=6]: collision challenge 40, 160, 6, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=6]: collision challenge 240, 160, 6, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=6]: collision challenge 640, 160, 6, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=6]: collision challenge 1440, 160, 6, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=7]: collision challenge 40, 160, 7, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=7]: collision challenge 240, 160, 7, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=7]: collision challenge 640, 160, 7, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=7]: collision challenge 1440, 160, 7, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=8]: collision challenge 40, 160, 8, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=8]: collision challenge 240, 160, 8, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=8]: collision challenge 640, 160, 8, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=8]: collision challenge 1440, 160, 8, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=9]: collision challenge 40, 160, 9, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=9]: collision challenge 240, 160, 9, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=9]: collision challenge 640, 160, 9, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=9]: collision challenge 1440, 160, 9, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=10]: collision challenge 40, 160, 10, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=10]: collision challenge 240, 160, 10, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=10]: collision challenge 640, 160, 10, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=10]: collision challenge 1440, 160, 10, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=11]: collision challenge 40, 160, 11, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=11]: collision challenge 240, 160, 11, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=11]: collision challenge 640, 160, 11, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=11]: collision challenge 1440, 160, 11, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=40, c=160, rounds=12]: collision challenge 40, 160, 12, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=240, c=160, rounds=12]: collision challenge 240, 160, 12, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=640, c=160, rounds=12]: collision challenge 640, 160, 12, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); counter += verifyCollisionChallenge( // Keccak[r=1440, c=160, rounds=12]: collision challenge 1440, 160, 12, (const UINT8*)"???", 24, // fill in this line (const UINT8*)"!!!!", 32 // and this line with a different input ); cout << dec << counter << " correct collision challenge(s)." << endl; } void verifyChallenges() { verifyPreimageChallenges(); verifyCollisionChallenges(); }