Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / socket.io-client / lib / vendor / web-socket-js / flash-src / com / hurlant / math / MontgomeryReduction.as
1 package com.hurlant.math\r
2 {\r
3         use namespace bi_internal;\r
4         /**\r
5          * Montgomery reduction\r
6          */\r
7         internal class MontgomeryReduction implements IReduction\r
8         {\r
9                 private var m:BigInteger;\r
10                 private var mp:int;\r
11                 private var mpl:int;\r
12                 private var mph:int;\r
13                 private var um:int;\r
14                 private var mt2:int;\r
15                 public function MontgomeryReduction(m:BigInteger) {\r
16                         this.m = m;\r
17                         mp = m.invDigit();\r
18                         mpl = mp & 0x7fff;\r
19                         mph = mp>>15;\r
20                         um = (1<<(BigInteger.DB-15))-1;\r
21                         mt2 = 2*m.t;\r
22                 }\r
23                 /**\r
24                  * xR mod m\r
25                  */\r
26                 public function convert(x:BigInteger):BigInteger {\r
27                         var r:BigInteger = new BigInteger;\r
28                         x.abs().dlShiftTo(m.t, r);\r
29                         r.divRemTo(m, null, r);\r
30                         if (x.s<0 && r.compareTo(BigInteger.ZERO)>0) {\r
31                                 m.subTo(r,r);\r
32                         }\r
33                         return r;\r
34                 }\r
35                 /**\r
36                  * x/R mod m\r
37                  */\r
38                 public function revert(x:BigInteger):BigInteger {\r
39                         var r:BigInteger = new BigInteger;\r
40                         x.copyTo(r);\r
41                         reduce(r);\r
42                         return r;\r
43                 }\r
44                 /**\r
45                  * x = x/R mod m (HAC 14.32)\r
46                  */\r
47                 public function reduce(x:BigInteger):void {\r
48                         while (x.t<=mt2) {              // pad x so am has enough room later\r
49                                 x.a[x.t++] = 0;\r
50                         }\r
51                         for (var i:int=0; i<m.t; ++i) {\r
52                                 // faster way of calculating u0 = x[i]*mp mod DV\r
53                                 var j:int = x.a[i]&0x7fff;\r
54                                 var u0:int = (j*mpl+(((j*mph+(x.a[i]>>15)*mpl)&um)<<15))&BigInteger.DM;\r
55                                 // use am to combine the multiply-shift-add into one call\r
56                                 j = i+m.t;\r
57                                 x.a[j] += m.am(0, u0, x, i, 0, m.t);\r
58                                 // propagate carry\r
59                                 while (x.a[j]>=BigInteger.DV) {\r
60                                         x.a[j] -= BigInteger.DV;\r
61                                         x.a[++j]++;\r
62                                 }\r
63                         }\r
64                         x.clamp();\r
65                         x.drShiftTo(m.t, x);\r
66                         if (x.compareTo(m)>=0) {\r
67                                 x.subTo(m,x);\r
68                         }\r
69                 }\r
70                 /**\r
71                  * r = "x^2/R mod m"; x != r\r
72                  */\r
73                 public function sqrTo(x:BigInteger, r:BigInteger):void {\r
74                         x.squareTo(r);\r
75                         reduce(r);\r
76                 }\r
77                 /**\r
78                  * r = "xy/R mod m"; x,y != r\r
79                  */\r
80                 public function mulTo(x:BigInteger, y:BigInteger, r:BigInteger):void {\r
81                         x.multiplyTo(y,r);\r
82                         reduce(r);\r
83                 }\r
84         }\r
85 }