def test_fpe(self): modulus = botan2.MPI('1000000000') key = b'001122334455' fpe = botan2.FormatPreservingEncryptionFE1(modulus, key) value = botan2.MPI('392910392') tweak = 'tweak value' ctext = fpe.encrypt(value, tweak) ptext = fpe.decrypt(ctext, tweak) self.assertEqual(value, ptext)
def test_mpi(self): # pylint: disable=too-many-statements z = botan2.MPI() self.assertEqual(z.bit_count(), 0) five = botan2.MPI('5') self.assertEqual(five.bit_count(), 3) big = botan2.MPI('0x85839682368923476892367235') self.assertEqual(big.bit_count(), 104) small = botan2.MPI(0xDEADBEEF) self.assertEqual(hex_encode(small.to_bytes()), "deadbeef") self.assertEqual(hex_encode(big.to_bytes()), "85839682368923476892367235") self.assertEqual(int(small), 0xDEADBEEF) self.assertEqual(int(small >> 16), 0xDEAD) small >>= 15 self.assertEqual(int(small), 0x1BD5B) small <<= 15 self.assertEqual(int(small), 0xDEAD8000) ten = botan2.MPI(10) self.assertEqual(ten, five + five) self.assertNotEqual(ten, five) self.assertLess(five, ten) self.assertLessEqual(five, ten) x = botan2.MPI(five) self.assertEqual(x, five) x += botan2.MPI(1) self.assertNotEqual(x, five) self.assertEqual(int(x * five), 30) x *= five x *= five self.assertEqual(int(x), 150) self.assertTrue(not x.is_negative()) x.flip_sign() self.assertTrue(x.is_negative()) self.assertEqual(int(x), -150) x.flip_sign() x.set_bit(0) self.assertTrue(int(x), 151) self.assertTrue(x.get_bit(0)) self.assertTrue(x.get_bit(4)) self.assertFalse(x.get_bit(6)) x.clear_bit(4) self.assertEqual(int(x), 135) rng = botan2.RandomNumberGenerator() self.assertFalse(x.is_prime(rng)) two = botan2.MPI(2) x += two self.assertTrue(x.is_prime(rng)) mod = x + two inv = x.inverse_mod(mod) self.assertEqual(int(inv), 69) self.assertEqual(int((inv * x) % mod), 1) p = inv.pow_mod(botan2.MPI(46), mod) self.assertEqual(int(p), 42)