def verify(self, rawdata, signature): try: binary_sign = base64.b64decode(signature) except binasciiError: return False blocks = split(rawdata.encode(), BLOCK_SIZE) signature_blocks = split(binary_sign, 256) verified_block = [] for raw_block, sign_block in zip(blocks, signature_blocks): c = int.from_bytes(sign_block, 'big') original = pow(c, self.e, self.n) signed = _int2Bytes(original) verified_block.append(signed) assembled = assemble(verified_block) return assembled == bytes(rawdata.encode())
def test_long_word(self): rawdata = bytes(randomword(30).encode()) blocks = split(rawdata, 15) self.assertEqual(assemble(blocks), rawdata) self.assertNotEqual(assemble(blocks[:-1]), rawdata)
def test_no_padd(self): rawdata = bytes(randomword(30).encode()) blocks = split(rawdata, 10) self.assertEqual(assemble(blocks), rawdata)
def test_all_word(self): for i in range(1, 2 ** 10): rawdata = bytes(randomword(i).encode()) blocks = split(rawdata, 15) self.assertEqual(assemble(blocks), rawdata)