def test_str(self): with local(DefaultContext()) as default: self.mult.multiply(59) str(default) str(default.actions) with local(NullContext()) as null: self.mult.multiply(59) str(null)
def test_path(self): with local(PathContext([0, 1])) as ctx: key_generator = KeyGeneration(self.mult, self.secp128r1, True) key_generator.generate() self.assertIsInstance(ctx.value, ScalarMultiplicationAction) with local(PathContext([0, 1, 7])) as ctx: key_generator = KeyGeneration(self.mult, self.secp128r1, True) key_generator.generate()
def test_precomp(self): bnaf = BinaryNAFMultiplier(self.add, self.dbl, self.neg, self.scale) with local(MultipleContext()) as ctx: bnaf.init(self.secp128r1, self.base) muls = list(ctx.points.values()) self.assertListEqual(muls, [1, -1]) wnaf = WindowNAFMultiplier(self.add, self.dbl, self.neg, 3, self.scale) with local(MultipleContext()) as ctx: wnaf.init(self.secp128r1, self.base) muls = list(ctx.points.values()) self.assertListEqual(muls, [1, 2, 3, 5])
def test_window(self): mult = WindowNAFMultiplier( self.add, self.dbl, self.neg, 3, precompute_negation=True ) with local(MultipleContext()): mult.init(self.secp128r1, self.base) mult.multiply(5)
def test_ladder(self): curve25519 = get_params("other", "Curve25519", "xz") base = curve25519.generator coords = curve25519.curve.coordinate_model ladd = coords.formulas["ladd-1987-m"] dadd = coords.formulas["dadd-1987-m"] dbl = coords.formulas["dbl-1987-m"] scale = coords.formulas["scale"] ladd_mult = LadderMultiplier(ladd, dbl, scale) with local(MultipleContext()) as ctx: ladd_mult.init(curve25519, base) ladd_mult.multiply(1339278426732672313) muls = list(ctx.points.values()) self.assertEqual(muls[-2], 1339278426732672313) dadd_mult = DifferentialLadderMultiplier(dadd, dbl, scale) with local(MultipleContext()) as ctx: dadd_mult.init(curve25519, base) dadd_mult.multiply(1339278426732672313) muls = list(ctx.points.values()) self.assertEqual(muls[-2], 1339278426732672313)
def test_default(self): token = setcontext(DefaultContext()) self.addCleanup(resetcontext, token) with local(DefaultContext()) as ctx: result = self.mult.multiply(59) self.assertEqual(len(ctx.actions), 1) action = next(iter(ctx.actions.keys())) self.assertIsInstance(action, ScalarMultiplicationAction) self.assertEqual(len(getcontext().actions), 0) self.assertEqual(result, action.result)
def test_basic(self, name, scalar): mult = LTRMultiplier( self.add, self.dbl, self.scale, always=False, complete=False, short_circuit=True, ) with local(MultipleContext()) as ctx: mult.init(self.secp128r1, self.base) mult.multiply(scalar) muls = list(ctx.points.values()) self.assertEqual(muls[-1], scalar)
def test_default_no_enter(self): with local(DefaultContext()) as default: with self.assertRaises(ValueError): default.exit_action(RandomModAction(7))
def test_null(self): with local() as ctx: self.mult.multiply(59) self.assertIsInstance(ctx, NullContext)