⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crypto.js.svn-base

📁 Google浏览器V8内核代码
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
  for(i = 0; i < y.t; ++i) r_array[i+x.t] = x.am(0,y_array[i],r,i,0,x.t);  r.s = 0;  r.clamp();  if(this.s != a.s) BigInteger.ZERO.subTo(r,r);}// (protected) r = this^2, r != this (HAC 14.16)function bnpSquareTo(r) {  var x = this.abs();  var x_array = x.array;  var r_array = r.array;  var i = r.t = 2*x.t;  while(--i >= 0) r_array[i] = 0;  for(i = 0; i < x.t-1; ++i) {    var c = x.am(i,x_array[i],r,2*i,0,1);    if((r_array[i+x.t]+=x.am(i+1,2*x_array[i],r,2*i+1,c,x.t-i-1)) >= BI_DV) {      r_array[i+x.t] -= BI_DV;      r_array[i+x.t+1] = 1;    }  }  if(r.t > 0) r_array[r.t-1] += x.am(i,x_array[i],r,2*i,0,1);  r.s = 0;  r.clamp();}// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)// r != q, this != m.  q or r may be null.function bnpDivRemTo(m,q,r) {  var pm = m.abs();  if(pm.t <= 0) return;  var pt = this.abs();  if(pt.t < pm.t) {    if(q != null) q.fromInt(0);    if(r != null) this.copyTo(r);    return;  }  if(r == null) r = nbi();  var y = nbi(), ts = this.s, ms = m.s;  var pm_array = pm.array;  var nsh = BI_DB-nbits(pm_array[pm.t-1]);	// normalize modulus  if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }  else { pm.copyTo(y); pt.copyTo(r); }  var ys = y.t;  var y_array = y.array;  var y0 = y_array[ys-1];  if(y0 == 0) return;  var yt = y0*(1<<BI_F1)+((ys>1)?y_array[ys-2]>>BI_F2:0);  var d1 = BI_FV/yt, d2 = (1<<BI_F1)/yt, e = 1<<BI_F2;  var i = r.t, j = i-ys, t = (q==null)?nbi():q;  y.dlShiftTo(j,t);  var r_array = r.array;  if(r.compareTo(t) >= 0) {    r_array[r.t++] = 1;    r.subTo(t,r);  }  BigInteger.ONE.dlShiftTo(ys,t);  t.subTo(y,y);	// "negative" y so we can replace sub with am later  while(y.t < ys) y_array[y.t++] = 0;  while(--j >= 0) {    // Estimate quotient digit    var qd = (r_array[--i]==y0)?BI_DM:Math.floor(r_array[i]*d1+(r_array[i-1]+e)*d2);    if((r_array[i]+=y.am(0,qd,r,j,0,ys)) < qd) {	// Try it out      y.dlShiftTo(j,t);      r.subTo(t,r);      while(r_array[i] < --qd) r.subTo(t,r);    }  }  if(q != null) {    r.drShiftTo(ys,q);    if(ts != ms) BigInteger.ZERO.subTo(q,q);  }  r.t = ys;  r.clamp();  if(nsh > 0) r.rShiftTo(nsh,r);	// Denormalize remainder  if(ts < 0) BigInteger.ZERO.subTo(r,r);}// (public) this mod afunction bnMod(a) {  var r = nbi();  this.abs().divRemTo(a,null,r);  if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);  return r;}// Modular reduction using "classic" algorithmfunction Classic(m) { this.m = m; }function cConvert(x) {  if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);  else return x;}function cRevert(x) { return x; }function cReduce(x) { x.divRemTo(this.m,null,x); }function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }Classic.prototype.convert = cConvert;Classic.prototype.revert = cRevert;Classic.prototype.reduce = cReduce;Classic.prototype.mulTo = cMulTo;Classic.prototype.sqrTo = cSqrTo;// (protected) return "-1/this % 2^DB"; useful for Mont. reduction// justification://         xy == 1 (mod m)//         xy =  1+km//   xy(2-xy) = (1+km)(1-km)// x[y(2-xy)] = 1-k^2m^2// x[y(2-xy)] == 1 (mod m^2)// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.// JS multiply "overflows" differently from C/C++, so care is needed here.function bnpInvDigit() {  var this_array = this.array;  if(this.t < 1) return 0;  var x = this_array[0];  if((x&1) == 0) return 0;  var y = x&3;		// y == 1/x mod 2^2  y = (y*(2-(x&0xf)*y))&0xf;	// y == 1/x mod 2^4  y = (y*(2-(x&0xff)*y))&0xff;	// y == 1/x mod 2^8  y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;	// y == 1/x mod 2^16  // last step - calculate inverse mod DV directly;  // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints  y = (y*(2-x*y%BI_DV))%BI_DV;		// y == 1/x mod 2^dbits  // we really want the negative inverse, and -DV < y < DV  return (y>0)?BI_DV-y:-y;}// Montgomery reductionfunction Montgomery(m) {  this.m = m;  this.mp = m.invDigit();  this.mpl = this.mp&0x7fff;  this.mph = this.mp>>15;  this.um = (1<<(BI_DB-15))-1;  this.mt2 = 2*m.t;}// xR mod mfunction montConvert(x) {  var r = nbi();  x.abs().dlShiftTo(this.m.t,r);  r.divRemTo(this.m,null,r);  if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);  return r;}// x/R mod mfunction montRevert(x) {  var r = nbi();  x.copyTo(r);  this.reduce(r);  return r;}// x = x/R mod m (HAC 14.32)function montReduce(x) {  var x_array = x.array;  while(x.t <= this.mt2)	// pad x so am has enough room later    x_array[x.t++] = 0;  for(var i = 0; i < this.m.t; ++i) {    // faster way of calculating u0 = x[i]*mp mod DV    var j = x_array[i]&0x7fff;    var u0 = (j*this.mpl+(((j*this.mph+(x_array[i]>>15)*this.mpl)&this.um)<<15))&BI_DM;    // use am to combine the multiply-shift-add into one call    j = i+this.m.t;    x_array[j] += this.m.am(0,u0,x,i,0,this.m.t);    // propagate carry    while(x_array[j] >= BI_DV) { x_array[j] -= BI_DV; x_array[++j]++; }  }  x.clamp();  x.drShiftTo(this.m.t,x);  if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);}// r = "x^2/R mod m"; x != rfunction montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }// r = "xy/R mod m"; x,y != rfunction montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }Montgomery.prototype.convert = montConvert;Montgomery.prototype.revert = montRevert;Montgomery.prototype.reduce = montReduce;Montgomery.prototype.mulTo = montMulTo;Montgomery.prototype.sqrTo = montSqrTo;// (protected) true iff this is evenfunction bnpIsEven() {  var this_array = this.array;  return ((this.t>0)?(this_array[0]&1):this.s) == 0;}// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)function bnpExp(e,z) {  if(e > 0xffffffff || e < 1) return BigInteger.ONE;  var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;  g.copyTo(r);  while(--i >= 0) {    z.sqrTo(r,r2);    if((e&(1<<i)) > 0) z.mulTo(r2,g,r);    else { var t = r; r = r2; r2 = t; }  }  return z.revert(r);}// (public) this^e % m, 0 <= e < 2^32function bnModPowInt(e,m) {  var z;  if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);  return this.exp(e,z);}// protectedBigInteger.prototype.copyTo = bnpCopyTo;BigInteger.prototype.fromInt = bnpFromInt;BigInteger.prototype.fromString = bnpFromString;BigInteger.prototype.clamp = bnpClamp;BigInteger.prototype.dlShiftTo = bnpDLShiftTo;BigInteger.prototype.drShiftTo = bnpDRShiftTo;BigInteger.prototype.lShiftTo = bnpLShiftTo;BigInteger.prototype.rShiftTo = bnpRShiftTo;BigInteger.prototype.subTo = bnpSubTo;BigInteger.prototype.multiplyTo = bnpMultiplyTo;BigInteger.prototype.squareTo = bnpSquareTo;BigInteger.prototype.divRemTo = bnpDivRemTo;BigInteger.prototype.invDigit = bnpInvDigit;BigInteger.prototype.isEven = bnpIsEven;BigInteger.prototype.exp = bnpExp;// publicBigInteger.prototype.toString = bnToString;BigInteger.prototype.negate = bnNegate;BigInteger.prototype.abs = bnAbs;BigInteger.prototype.compareTo = bnCompareTo;BigInteger.prototype.bitLength = bnBitLength;BigInteger.prototype.mod = bnMod;BigInteger.prototype.modPowInt = bnModPowInt;// "constants"BigInteger.ZERO = nbv(0);BigInteger.ONE = nbv(1);// Copyright (c) 2005  Tom Wu// All Rights Reserved.// See "LICENSE" for details.// Extended JavaScript BN functions, required for RSA private ops.// (public)function bnClone() { var r = nbi(); this.copyTo(r); return r; }// (public) return value as integerfunction bnIntValue() {  var this_array = this.array;  if(this.s < 0) {    if(this.t == 1) return this_array[0]-BI_DV;    else if(this.t == 0) return -1;  }  else if(this.t == 1) return this_array[0];  else if(this.t == 0) return 0;  // assumes 16 < DB < 32  return ((this_array[1]&((1<<(32-BI_DB))-1))<<BI_DB)|this_array[0];}// (public) return value as bytefunction bnByteValue() {  var this_array = this.array;  return (this.t==0)?this.s:(this_array[0]<<24)>>24;}// (public) return value as short (assumes DB>=16)function bnShortValue() {  var this_array = this.array;  return (this.t==0)?this.s:(this_array[0]<<16)>>16;}// (protected) return x s.t. r^x < DVfunction bnpChunkSize(r) { return Math.floor(Math.LN2*BI_DB/Math.log(r)); }// (public) 0 if this == 0, 1 if this > 0function bnSigNum() {  var this_array = this.array;  if(this.s < 0) return -1;  else if(this.t <= 0 || (this.t == 1 && this_array[0] <= 0)) return 0;  else return 1;}// (protected) convert to radix stringfunction bnpToRadix(b) {  if(b == null) b = 10;  if(this.signum() == 0 || b < 2 || b > 36) return "0";  var cs = this.chunkSize(b);  var a = Math.pow(b,cs);  var d = nbv(a), y = nbi(), z = nbi(), r = "";  this.divRemTo(d,y,z);  while(y.signum() > 0) {    r = (a+z.intValue()).toString(b).substr(1) + r;    y.divRemTo(d,y,z);  }  return z.intValue().toString(b) + r;}// (protected) convert from radix stringfunction bnpFromRadix(s,b) {  this.fromInt(0);  if(b == null) b = 10;  var cs = this.chunkSize(b);  var d = Math.pow(b,cs), mi = false, j = 0, w = 0;  for(var i = 0; i < s.length; ++i) {    var x = intAt(s,i);    if(x < 0) {      if(s.charAt(i) == "-" && this.signum() == 0) mi = true;      continue;    }    w = b*w+x;    if(++j >= cs) {      this.dMultiply(d);      this.dAddOffset(w,0);      j = 0;      w = 0;    }  }  if(j > 0) {    this.dMultiply(Math.pow(b,j));    this.dAddOffset(w,0);  }  if(mi) BigInteger.ZERO.subTo(this,this);}// (protected) alternate constructorfunction bnpFromNumber(a,b,c) {  if("number" == typeof b) {    // new BigInteger(int,int,RNG)    if(a < 2) this.fromInt(1);    else {      this.fromNumber(a,c);      if(!this.testBit(a-1))	// force MSB set        this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);      if(this.isEven()) this.dAddOffset(1,0); // force odd      while(!this.isProbablePrime(b)) {        this.dAddOffset(2,0);        if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);      }    }  }  else {    // new BigInteger(int,RNG)    var x = new Array(), t = a&7;    x.length = (a>>3)+1;    b.nextBytes(x);    if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;    this.fromString(x,256);  }}// (public) convert to bigendian byte arrayfunction bnToByteArray() {  var this_array = this.array;  var i = this.t, r = new Array();  r[0] = this.s;  var p = BI_DB-(i*BI_DB)%8, d, k = 0;  if(i-- > 0) {    if(p < BI_DB && (d = this_array[i]>>p) != (this.s&BI_DM)>>p)      r[k++] = d|(this.s<<(BI_DB-p));    while(i >= 0) {      if(p < 8) {        d = (this_array[i]&((1<<p)-1))<<(8-p);        d |= this_array[--i]>>(p+=BI_DB-8);      }      else {        d = (this_array[i]>>(p-=8))&0xff;        if(p <= 0) { p += BI_DB; --i; }      }      if((d&0x80) != 0) d |= -256;      if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;      if(k > 0 || d != this.s) r[k++] = d;    }  }  return r;}function bnEquals(a) { return(this.compareTo(a)==0); }function bnMin(a) { return(this.compareTo(a)<0)?this:a; }function bnMax(a) { return(this.compareTo(a)>0)?this:a; }// (protected) r = this op a (bitwise)function bnpBitwiseTo(a,op,r) {  var this_array = this.array;  var a_array    = a.array;  var r_array    = r.array;  var i, f, m = Math.min(a.t,this.t);  for(i = 0; i < m; ++i) r_array[i] = op(this_array[i],a_array[i]);  if(a.t < this.t) {    f = a.s&BI_DM;    for(i = m; i < this.t; ++i) r_array[i] = op(this_array[i],f);    r.t = this.t;  }  else {    f = this.s&BI_DM;    for(i = m; i < a.t; ++i) r_array[i] = op(f,a_array[i]);    r.t = a.t;  }  r.s = op(this.s,a.s);  r.clamp();}// (public) this & afunction op_and(x,y) { return x&y; }function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }// (public) this | afunction op_or(x,y) { return x|y; }function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }// (public) this ^ afunction op_xor(x,y) { return x^y; }function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }// (public) this & ~afunction op_andnot(x,y) { return x&~y; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -