Dart Documentationsolvr:bignumBarrett

Barrett Class

Barrett modular reduction

Constructors

Code new Barrett(BigInteger m) #

Barrett modular reduction

Barrett(this.m) {
  // setup Barrett
  this.r2 = BigInteger.nbi();
  this.q3 = BigInteger.nbi();
  BigInteger.ONE.dlShiftTo(2*m.t,this.r2);
  this.mu = this.r2.divide(m);
  
}

Methods

Code BigInteger convert(BigInteger x) #

BigInteger convert(BigInteger x) {
  if(x.s < 0 || x.t > 2*this.m.t)  {
    return x.mod(this.m);
  } else if(x.compareTo(this.m) < 0) { 
    return x;
  } else { 
    var r = BigInteger.nbi(); 
    x.copyTo(r); 
    this.reduce(r); 
    return r;  
  }
}

Code mulTo(x, y, r) #

r = x*y mod m; x,y != r

mulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }

Code void reduce(BigInteger x) #

x = x mod m (HAC 14.42)

void reduce(BigInteger x) {
  x.drShiftTo(this.m.t - 1, this.r2);
  if(x.t > this.m.t+1) { 
    x.t = this.m.t+1; 
    x.clamp();   
  }
  
  this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);
  this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);
  while(x.compareTo(this.r2) < 0) { 
    x.dAddOffset(1,this.m.t+1);
  }
  
  x.subTo(this.r2,x);
  
  while(x.compareTo(this.m) >= 0) { 
    x.subTo(this.m,x);
  }
}

Code revert(x) #

revert(x) { 
  return x;   
}

Code sqrTo(x, r) #

r = x^2 mod m; x != r

sqrTo(x,r) { x.squareTo(r); this.reduce(r); }

Fields

Code BigInteger m #

BigInteger m;

Code var mu #

var mu;

Code BigInteger q3 #

BigInteger q3;

Code BigInteger r2 #

BigInteger r2;