package com.hurlant.math { use namespace bi_internal; /** * Modular reduction using "classic" algorithm */ internal class ClassicReduction implements IReduction { private var m:BigInteger; public function ClassicReduction(m:BigInteger) { this.m = m; } public function convert(x:BigInteger):BigInteger { if (x.s<0 || x.compareTo(m)>=0) { return x.mod(m); } return x; } public function revert(x:BigInteger):BigInteger { return x; } public function reduce(x:BigInteger):void { x.divRemTo(m, null,x); } public function mulTo(x:BigInteger, y:BigInteger, r:BigInteger):void { x.multiplyTo(y,r); reduce(r); } public function sqrTo(x:BigInteger, r:BigInteger):void { x.squareTo(r); reduce(r); } } }