def test_sha2state(self): testData = [b"test str", b"string longer than 512 bits" + b"A" * 512, b"very long" + b"X" * 3000, bytes(range(256))] for msg in testData: hash1 = sha1.sha1(msg) h0, h1, h2, h3, h4 = sha1.process_all(msg) a0, a1, a2, a3, a4 = sha1.sha2state(hash1) self.assertEqual(a0, h0) self.assertEqual(a1, h1) self.assertEqual(a2, h2) self.assertEqual(a3, h3) self.assertEqual(a4, h4)
def test_sha2state(self): testData = [ b"test str", b"string longer than 512 bits" + b"A" * 512, b"very long" + b"X" * 3000, bytes(range(256)) ] for msg in testData: hash1 = sha1.sha1(msg) h0, h1, h2, h3, h4 = sha1.process_all(msg) a0, a1, a2, a3, a4 = sha1.sha2state(hash1) self.assertEqual(a0, h0) self.assertEqual(a1, h1) self.assertEqual(a2, h2) self.assertEqual(a3, h3) self.assertEqual(a4, h4)
def atack(key_len, msg, mac_msg, msg_new): # compute glue padding and convert to bytes _, glue_padding = sha1.padding(b"X" * key_len + msg) gl = sha1.chunks(glue_padding, 8) glue_padding = bytes([int(i, 2) for i in gl]) msg_fake = msg + glue_padding + msg_new _, msg_new_pad = sha1.padding(b"X" * key_len + msg + glue_padding + msg_new) mnp = sha1.chunks(msg_new_pad, 8) msg_new_pad = bytes([int(i, 2) for i in mnp]) h0, h1, h2, h3, h4 = sha1.sha2state(mac_msg) m, _ = sha1.padding(msg_new + msg_new_pad) h0, h1, h2, h3, h4 = sha1.process(m, h0, h1, h2, h3, h4) mac_fake = "%08x%08x%08x%08x%08x" % (h0, h1, h2, h3, h4) return msg_fake, mac_fake
def atack(key_len, msg, mac_msg, msg_new): # compute glue padding and convert to bytes _, glue_padding = sha1.padding(b"X" * key_len + msg) gl = sha1.chunks(glue_padding, 8) glue_padding = bytes([int(i, 2) for i in gl]) msg_fake = msg + glue_padding + msg_new _, msg_new_pad = sha1.padding(b"X" * key_len + msg + glue_padding + msg_new) mnp = sha1.chunks(msg_new_pad, 8) msg_new_pad = bytes([int(i, 2) for i in mnp]) h0, h1, h2, h3, h4 = sha1.sha2state(mac_msg) m, _ = sha1.padding(msg_new + msg_new_pad) h0, h1, h2, h3, h4 = sha1.process(m, h0, h1, h2, h3, h4) mac_fake = '%08x%08x%08x%08x%08x' % (h0, h1, h2, h3, h4) return msg_fake, mac_fake