bn.js 4.11.2 → 4.11.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/bn.js CHANGED
@@ -55,8 +55,12 @@
55
55
  }
56
56
 
57
57
  BN.isBN = function isBN (num) {
58
+ if (num instanceof BN) {
59
+ return true;
60
+ }
61
+
58
62
  return num !== null && typeof num === 'object' &&
59
- num.constructor.name === 'BN' && Array.isArray(num.words);
63
+ num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
60
64
  };
61
65
 
62
66
  BN.max = function max (left, right) {
@@ -1103,478 +1107,478 @@
1103
1107
  /* k = 0 */
1104
1108
  lo = Math.imul(al0, bl0);
1105
1109
  mid = Math.imul(al0, bh0);
1106
- mid += Math.imul(ah0, bl0);
1110
+ mid = (mid + Math.imul(ah0, bl0)) | 0;
1107
1111
  hi = Math.imul(ah0, bh0);
1108
- var w0 = c + lo + ((mid & 0x1fff) << 13);
1109
- c = hi + (mid >>> 13) + (w0 >>> 26);
1112
+ var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1113
+ c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
1110
1114
  w0 &= 0x3ffffff;
1111
1115
  /* k = 1 */
1112
1116
  lo = Math.imul(al1, bl0);
1113
1117
  mid = Math.imul(al1, bh0);
1114
- mid += Math.imul(ah1, bl0);
1118
+ mid = (mid + Math.imul(ah1, bl0)) | 0;
1115
1119
  hi = Math.imul(ah1, bh0);
1116
- lo += Math.imul(al0, bl1);
1117
- mid += Math.imul(al0, bh1);
1118
- mid += Math.imul(ah0, bl1);
1119
- hi += Math.imul(ah0, bh1);
1120
- var w1 = c + lo + ((mid & 0x1fff) << 13);
1121
- c = hi + (mid >>> 13) + (w1 >>> 26);
1120
+ lo = (lo + Math.imul(al0, bl1)) | 0;
1121
+ mid = (mid + Math.imul(al0, bh1)) | 0;
1122
+ mid = (mid + Math.imul(ah0, bl1)) | 0;
1123
+ hi = (hi + Math.imul(ah0, bh1)) | 0;
1124
+ var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1125
+ c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
1122
1126
  w1 &= 0x3ffffff;
1123
1127
  /* k = 2 */
1124
1128
  lo = Math.imul(al2, bl0);
1125
1129
  mid = Math.imul(al2, bh0);
1126
- mid += Math.imul(ah2, bl0);
1130
+ mid = (mid + Math.imul(ah2, bl0)) | 0;
1127
1131
  hi = Math.imul(ah2, bh0);
1128
- lo += Math.imul(al1, bl1);
1129
- mid += Math.imul(al1, bh1);
1130
- mid += Math.imul(ah1, bl1);
1131
- hi += Math.imul(ah1, bh1);
1132
- lo += Math.imul(al0, bl2);
1133
- mid += Math.imul(al0, bh2);
1134
- mid += Math.imul(ah0, bl2);
1135
- hi += Math.imul(ah0, bh2);
1136
- var w2 = c + lo + ((mid & 0x1fff) << 13);
1137
- c = hi + (mid >>> 13) + (w2 >>> 26);
1132
+ lo = (lo + Math.imul(al1, bl1)) | 0;
1133
+ mid = (mid + Math.imul(al1, bh1)) | 0;
1134
+ mid = (mid + Math.imul(ah1, bl1)) | 0;
1135
+ hi = (hi + Math.imul(ah1, bh1)) | 0;
1136
+ lo = (lo + Math.imul(al0, bl2)) | 0;
1137
+ mid = (mid + Math.imul(al0, bh2)) | 0;
1138
+ mid = (mid + Math.imul(ah0, bl2)) | 0;
1139
+ hi = (hi + Math.imul(ah0, bh2)) | 0;
1140
+ var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1141
+ c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
1138
1142
  w2 &= 0x3ffffff;
1139
1143
  /* k = 3 */
1140
1144
  lo = Math.imul(al3, bl0);
1141
1145
  mid = Math.imul(al3, bh0);
1142
- mid += Math.imul(ah3, bl0);
1146
+ mid = (mid + Math.imul(ah3, bl0)) | 0;
1143
1147
  hi = Math.imul(ah3, bh0);
1144
- lo += Math.imul(al2, bl1);
1145
- mid += Math.imul(al2, bh1);
1146
- mid += Math.imul(ah2, bl1);
1147
- hi += Math.imul(ah2, bh1);
1148
- lo += Math.imul(al1, bl2);
1149
- mid += Math.imul(al1, bh2);
1150
- mid += Math.imul(ah1, bl2);
1151
- hi += Math.imul(ah1, bh2);
1152
- lo += Math.imul(al0, bl3);
1153
- mid += Math.imul(al0, bh3);
1154
- mid += Math.imul(ah0, bl3);
1155
- hi += Math.imul(ah0, bh3);
1156
- var w3 = c + lo + ((mid & 0x1fff) << 13);
1157
- c = hi + (mid >>> 13) + (w3 >>> 26);
1148
+ lo = (lo + Math.imul(al2, bl1)) | 0;
1149
+ mid = (mid + Math.imul(al2, bh1)) | 0;
1150
+ mid = (mid + Math.imul(ah2, bl1)) | 0;
1151
+ hi = (hi + Math.imul(ah2, bh1)) | 0;
1152
+ lo = (lo + Math.imul(al1, bl2)) | 0;
1153
+ mid = (mid + Math.imul(al1, bh2)) | 0;
1154
+ mid = (mid + Math.imul(ah1, bl2)) | 0;
1155
+ hi = (hi + Math.imul(ah1, bh2)) | 0;
1156
+ lo = (lo + Math.imul(al0, bl3)) | 0;
1157
+ mid = (mid + Math.imul(al0, bh3)) | 0;
1158
+ mid = (mid + Math.imul(ah0, bl3)) | 0;
1159
+ hi = (hi + Math.imul(ah0, bh3)) | 0;
1160
+ var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1161
+ c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
1158
1162
  w3 &= 0x3ffffff;
1159
1163
  /* k = 4 */
1160
1164
  lo = Math.imul(al4, bl0);
1161
1165
  mid = Math.imul(al4, bh0);
1162
- mid += Math.imul(ah4, bl0);
1166
+ mid = (mid + Math.imul(ah4, bl0)) | 0;
1163
1167
  hi = Math.imul(ah4, bh0);
1164
- lo += Math.imul(al3, bl1);
1165
- mid += Math.imul(al3, bh1);
1166
- mid += Math.imul(ah3, bl1);
1167
- hi += Math.imul(ah3, bh1);
1168
- lo += Math.imul(al2, bl2);
1169
- mid += Math.imul(al2, bh2);
1170
- mid += Math.imul(ah2, bl2);
1171
- hi += Math.imul(ah2, bh2);
1172
- lo += Math.imul(al1, bl3);
1173
- mid += Math.imul(al1, bh3);
1174
- mid += Math.imul(ah1, bl3);
1175
- hi += Math.imul(ah1, bh3);
1176
- lo += Math.imul(al0, bl4);
1177
- mid += Math.imul(al0, bh4);
1178
- mid += Math.imul(ah0, bl4);
1179
- hi += Math.imul(ah0, bh4);
1180
- var w4 = c + lo + ((mid & 0x1fff) << 13);
1181
- c = hi + (mid >>> 13) + (w4 >>> 26);
1168
+ lo = (lo + Math.imul(al3, bl1)) | 0;
1169
+ mid = (mid + Math.imul(al3, bh1)) | 0;
1170
+ mid = (mid + Math.imul(ah3, bl1)) | 0;
1171
+ hi = (hi + Math.imul(ah3, bh1)) | 0;
1172
+ lo = (lo + Math.imul(al2, bl2)) | 0;
1173
+ mid = (mid + Math.imul(al2, bh2)) | 0;
1174
+ mid = (mid + Math.imul(ah2, bl2)) | 0;
1175
+ hi = (hi + Math.imul(ah2, bh2)) | 0;
1176
+ lo = (lo + Math.imul(al1, bl3)) | 0;
1177
+ mid = (mid + Math.imul(al1, bh3)) | 0;
1178
+ mid = (mid + Math.imul(ah1, bl3)) | 0;
1179
+ hi = (hi + Math.imul(ah1, bh3)) | 0;
1180
+ lo = (lo + Math.imul(al0, bl4)) | 0;
1181
+ mid = (mid + Math.imul(al0, bh4)) | 0;
1182
+ mid = (mid + Math.imul(ah0, bl4)) | 0;
1183
+ hi = (hi + Math.imul(ah0, bh4)) | 0;
1184
+ var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1185
+ c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
1182
1186
  w4 &= 0x3ffffff;
1183
1187
  /* k = 5 */
1184
1188
  lo = Math.imul(al5, bl0);
1185
1189
  mid = Math.imul(al5, bh0);
1186
- mid += Math.imul(ah5, bl0);
1190
+ mid = (mid + Math.imul(ah5, bl0)) | 0;
1187
1191
  hi = Math.imul(ah5, bh0);
1188
- lo += Math.imul(al4, bl1);
1189
- mid += Math.imul(al4, bh1);
1190
- mid += Math.imul(ah4, bl1);
1191
- hi += Math.imul(ah4, bh1);
1192
- lo += Math.imul(al3, bl2);
1193
- mid += Math.imul(al3, bh2);
1194
- mid += Math.imul(ah3, bl2);
1195
- hi += Math.imul(ah3, bh2);
1196
- lo += Math.imul(al2, bl3);
1197
- mid += Math.imul(al2, bh3);
1198
- mid += Math.imul(ah2, bl3);
1199
- hi += Math.imul(ah2, bh3);
1200
- lo += Math.imul(al1, bl4);
1201
- mid += Math.imul(al1, bh4);
1202
- mid += Math.imul(ah1, bl4);
1203
- hi += Math.imul(ah1, bh4);
1204
- lo += Math.imul(al0, bl5);
1205
- mid += Math.imul(al0, bh5);
1206
- mid += Math.imul(ah0, bl5);
1207
- hi += Math.imul(ah0, bh5);
1208
- var w5 = c + lo + ((mid & 0x1fff) << 13);
1209
- c = hi + (mid >>> 13) + (w5 >>> 26);
1192
+ lo = (lo + Math.imul(al4, bl1)) | 0;
1193
+ mid = (mid + Math.imul(al4, bh1)) | 0;
1194
+ mid = (mid + Math.imul(ah4, bl1)) | 0;
1195
+ hi = (hi + Math.imul(ah4, bh1)) | 0;
1196
+ lo = (lo + Math.imul(al3, bl2)) | 0;
1197
+ mid = (mid + Math.imul(al3, bh2)) | 0;
1198
+ mid = (mid + Math.imul(ah3, bl2)) | 0;
1199
+ hi = (hi + Math.imul(ah3, bh2)) | 0;
1200
+ lo = (lo + Math.imul(al2, bl3)) | 0;
1201
+ mid = (mid + Math.imul(al2, bh3)) | 0;
1202
+ mid = (mid + Math.imul(ah2, bl3)) | 0;
1203
+ hi = (hi + Math.imul(ah2, bh3)) | 0;
1204
+ lo = (lo + Math.imul(al1, bl4)) | 0;
1205
+ mid = (mid + Math.imul(al1, bh4)) | 0;
1206
+ mid = (mid + Math.imul(ah1, bl4)) | 0;
1207
+ hi = (hi + Math.imul(ah1, bh4)) | 0;
1208
+ lo = (lo + Math.imul(al0, bl5)) | 0;
1209
+ mid = (mid + Math.imul(al0, bh5)) | 0;
1210
+ mid = (mid + Math.imul(ah0, bl5)) | 0;
1211
+ hi = (hi + Math.imul(ah0, bh5)) | 0;
1212
+ var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1213
+ c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
1210
1214
  w5 &= 0x3ffffff;
1211
1215
  /* k = 6 */
1212
1216
  lo = Math.imul(al6, bl0);
1213
1217
  mid = Math.imul(al6, bh0);
1214
- mid += Math.imul(ah6, bl0);
1218
+ mid = (mid + Math.imul(ah6, bl0)) | 0;
1215
1219
  hi = Math.imul(ah6, bh0);
1216
- lo += Math.imul(al5, bl1);
1217
- mid += Math.imul(al5, bh1);
1218
- mid += Math.imul(ah5, bl1);
1219
- hi += Math.imul(ah5, bh1);
1220
- lo += Math.imul(al4, bl2);
1221
- mid += Math.imul(al4, bh2);
1222
- mid += Math.imul(ah4, bl2);
1223
- hi += Math.imul(ah4, bh2);
1224
- lo += Math.imul(al3, bl3);
1225
- mid += Math.imul(al3, bh3);
1226
- mid += Math.imul(ah3, bl3);
1227
- hi += Math.imul(ah3, bh3);
1228
- lo += Math.imul(al2, bl4);
1229
- mid += Math.imul(al2, bh4);
1230
- mid += Math.imul(ah2, bl4);
1231
- hi += Math.imul(ah2, bh4);
1232
- lo += Math.imul(al1, bl5);
1233
- mid += Math.imul(al1, bh5);
1234
- mid += Math.imul(ah1, bl5);
1235
- hi += Math.imul(ah1, bh5);
1236
- lo += Math.imul(al0, bl6);
1237
- mid += Math.imul(al0, bh6);
1238
- mid += Math.imul(ah0, bl6);
1239
- hi += Math.imul(ah0, bh6);
1240
- var w6 = c + lo + ((mid & 0x1fff) << 13);
1241
- c = hi + (mid >>> 13) + (w6 >>> 26);
1220
+ lo = (lo + Math.imul(al5, bl1)) | 0;
1221
+ mid = (mid + Math.imul(al5, bh1)) | 0;
1222
+ mid = (mid + Math.imul(ah5, bl1)) | 0;
1223
+ hi = (hi + Math.imul(ah5, bh1)) | 0;
1224
+ lo = (lo + Math.imul(al4, bl2)) | 0;
1225
+ mid = (mid + Math.imul(al4, bh2)) | 0;
1226
+ mid = (mid + Math.imul(ah4, bl2)) | 0;
1227
+ hi = (hi + Math.imul(ah4, bh2)) | 0;
1228
+ lo = (lo + Math.imul(al3, bl3)) | 0;
1229
+ mid = (mid + Math.imul(al3, bh3)) | 0;
1230
+ mid = (mid + Math.imul(ah3, bl3)) | 0;
1231
+ hi = (hi + Math.imul(ah3, bh3)) | 0;
1232
+ lo = (lo + Math.imul(al2, bl4)) | 0;
1233
+ mid = (mid + Math.imul(al2, bh4)) | 0;
1234
+ mid = (mid + Math.imul(ah2, bl4)) | 0;
1235
+ hi = (hi + Math.imul(ah2, bh4)) | 0;
1236
+ lo = (lo + Math.imul(al1, bl5)) | 0;
1237
+ mid = (mid + Math.imul(al1, bh5)) | 0;
1238
+ mid = (mid + Math.imul(ah1, bl5)) | 0;
1239
+ hi = (hi + Math.imul(ah1, bh5)) | 0;
1240
+ lo = (lo + Math.imul(al0, bl6)) | 0;
1241
+ mid = (mid + Math.imul(al0, bh6)) | 0;
1242
+ mid = (mid + Math.imul(ah0, bl6)) | 0;
1243
+ hi = (hi + Math.imul(ah0, bh6)) | 0;
1244
+ var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1245
+ c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
1242
1246
  w6 &= 0x3ffffff;
1243
1247
  /* k = 7 */
1244
1248
  lo = Math.imul(al7, bl0);
1245
1249
  mid = Math.imul(al7, bh0);
1246
- mid += Math.imul(ah7, bl0);
1250
+ mid = (mid + Math.imul(ah7, bl0)) | 0;
1247
1251
  hi = Math.imul(ah7, bh0);
1248
- lo += Math.imul(al6, bl1);
1249
- mid += Math.imul(al6, bh1);
1250
- mid += Math.imul(ah6, bl1);
1251
- hi += Math.imul(ah6, bh1);
1252
- lo += Math.imul(al5, bl2);
1253
- mid += Math.imul(al5, bh2);
1254
- mid += Math.imul(ah5, bl2);
1255
- hi += Math.imul(ah5, bh2);
1256
- lo += Math.imul(al4, bl3);
1257
- mid += Math.imul(al4, bh3);
1258
- mid += Math.imul(ah4, bl3);
1259
- hi += Math.imul(ah4, bh3);
1260
- lo += Math.imul(al3, bl4);
1261
- mid += Math.imul(al3, bh4);
1262
- mid += Math.imul(ah3, bl4);
1263
- hi += Math.imul(ah3, bh4);
1264
- lo += Math.imul(al2, bl5);
1265
- mid += Math.imul(al2, bh5);
1266
- mid += Math.imul(ah2, bl5);
1267
- hi += Math.imul(ah2, bh5);
1268
- lo += Math.imul(al1, bl6);
1269
- mid += Math.imul(al1, bh6);
1270
- mid += Math.imul(ah1, bl6);
1271
- hi += Math.imul(ah1, bh6);
1272
- lo += Math.imul(al0, bl7);
1273
- mid += Math.imul(al0, bh7);
1274
- mid += Math.imul(ah0, bl7);
1275
- hi += Math.imul(ah0, bh7);
1276
- var w7 = c + lo + ((mid & 0x1fff) << 13);
1277
- c = hi + (mid >>> 13) + (w7 >>> 26);
1252
+ lo = (lo + Math.imul(al6, bl1)) | 0;
1253
+ mid = (mid + Math.imul(al6, bh1)) | 0;
1254
+ mid = (mid + Math.imul(ah6, bl1)) | 0;
1255
+ hi = (hi + Math.imul(ah6, bh1)) | 0;
1256
+ lo = (lo + Math.imul(al5, bl2)) | 0;
1257
+ mid = (mid + Math.imul(al5, bh2)) | 0;
1258
+ mid = (mid + Math.imul(ah5, bl2)) | 0;
1259
+ hi = (hi + Math.imul(ah5, bh2)) | 0;
1260
+ lo = (lo + Math.imul(al4, bl3)) | 0;
1261
+ mid = (mid + Math.imul(al4, bh3)) | 0;
1262
+ mid = (mid + Math.imul(ah4, bl3)) | 0;
1263
+ hi = (hi + Math.imul(ah4, bh3)) | 0;
1264
+ lo = (lo + Math.imul(al3, bl4)) | 0;
1265
+ mid = (mid + Math.imul(al3, bh4)) | 0;
1266
+ mid = (mid + Math.imul(ah3, bl4)) | 0;
1267
+ hi = (hi + Math.imul(ah3, bh4)) | 0;
1268
+ lo = (lo + Math.imul(al2, bl5)) | 0;
1269
+ mid = (mid + Math.imul(al2, bh5)) | 0;
1270
+ mid = (mid + Math.imul(ah2, bl5)) | 0;
1271
+ hi = (hi + Math.imul(ah2, bh5)) | 0;
1272
+ lo = (lo + Math.imul(al1, bl6)) | 0;
1273
+ mid = (mid + Math.imul(al1, bh6)) | 0;
1274
+ mid = (mid + Math.imul(ah1, bl6)) | 0;
1275
+ hi = (hi + Math.imul(ah1, bh6)) | 0;
1276
+ lo = (lo + Math.imul(al0, bl7)) | 0;
1277
+ mid = (mid + Math.imul(al0, bh7)) | 0;
1278
+ mid = (mid + Math.imul(ah0, bl7)) | 0;
1279
+ hi = (hi + Math.imul(ah0, bh7)) | 0;
1280
+ var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1281
+ c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
1278
1282
  w7 &= 0x3ffffff;
1279
1283
  /* k = 8 */
1280
1284
  lo = Math.imul(al8, bl0);
1281
1285
  mid = Math.imul(al8, bh0);
1282
- mid += Math.imul(ah8, bl0);
1286
+ mid = (mid + Math.imul(ah8, bl0)) | 0;
1283
1287
  hi = Math.imul(ah8, bh0);
1284
- lo += Math.imul(al7, bl1);
1285
- mid += Math.imul(al7, bh1);
1286
- mid += Math.imul(ah7, bl1);
1287
- hi += Math.imul(ah7, bh1);
1288
- lo += Math.imul(al6, bl2);
1289
- mid += Math.imul(al6, bh2);
1290
- mid += Math.imul(ah6, bl2);
1291
- hi += Math.imul(ah6, bh2);
1292
- lo += Math.imul(al5, bl3);
1293
- mid += Math.imul(al5, bh3);
1294
- mid += Math.imul(ah5, bl3);
1295
- hi += Math.imul(ah5, bh3);
1296
- lo += Math.imul(al4, bl4);
1297
- mid += Math.imul(al4, bh4);
1298
- mid += Math.imul(ah4, bl4);
1299
- hi += Math.imul(ah4, bh4);
1300
- lo += Math.imul(al3, bl5);
1301
- mid += Math.imul(al3, bh5);
1302
- mid += Math.imul(ah3, bl5);
1303
- hi += Math.imul(ah3, bh5);
1304
- lo += Math.imul(al2, bl6);
1305
- mid += Math.imul(al2, bh6);
1306
- mid += Math.imul(ah2, bl6);
1307
- hi += Math.imul(ah2, bh6);
1308
- lo += Math.imul(al1, bl7);
1309
- mid += Math.imul(al1, bh7);
1310
- mid += Math.imul(ah1, bl7);
1311
- hi += Math.imul(ah1, bh7);
1312
- lo += Math.imul(al0, bl8);
1313
- mid += Math.imul(al0, bh8);
1314
- mid += Math.imul(ah0, bl8);
1315
- hi += Math.imul(ah0, bh8);
1316
- var w8 = c + lo + ((mid & 0x1fff) << 13);
1317
- c = hi + (mid >>> 13) + (w8 >>> 26);
1288
+ lo = (lo + Math.imul(al7, bl1)) | 0;
1289
+ mid = (mid + Math.imul(al7, bh1)) | 0;
1290
+ mid = (mid + Math.imul(ah7, bl1)) | 0;
1291
+ hi = (hi + Math.imul(ah7, bh1)) | 0;
1292
+ lo = (lo + Math.imul(al6, bl2)) | 0;
1293
+ mid = (mid + Math.imul(al6, bh2)) | 0;
1294
+ mid = (mid + Math.imul(ah6, bl2)) | 0;
1295
+ hi = (hi + Math.imul(ah6, bh2)) | 0;
1296
+ lo = (lo + Math.imul(al5, bl3)) | 0;
1297
+ mid = (mid + Math.imul(al5, bh3)) | 0;
1298
+ mid = (mid + Math.imul(ah5, bl3)) | 0;
1299
+ hi = (hi + Math.imul(ah5, bh3)) | 0;
1300
+ lo = (lo + Math.imul(al4, bl4)) | 0;
1301
+ mid = (mid + Math.imul(al4, bh4)) | 0;
1302
+ mid = (mid + Math.imul(ah4, bl4)) | 0;
1303
+ hi = (hi + Math.imul(ah4, bh4)) | 0;
1304
+ lo = (lo + Math.imul(al3, bl5)) | 0;
1305
+ mid = (mid + Math.imul(al3, bh5)) | 0;
1306
+ mid = (mid + Math.imul(ah3, bl5)) | 0;
1307
+ hi = (hi + Math.imul(ah3, bh5)) | 0;
1308
+ lo = (lo + Math.imul(al2, bl6)) | 0;
1309
+ mid = (mid + Math.imul(al2, bh6)) | 0;
1310
+ mid = (mid + Math.imul(ah2, bl6)) | 0;
1311
+ hi = (hi + Math.imul(ah2, bh6)) | 0;
1312
+ lo = (lo + Math.imul(al1, bl7)) | 0;
1313
+ mid = (mid + Math.imul(al1, bh7)) | 0;
1314
+ mid = (mid + Math.imul(ah1, bl7)) | 0;
1315
+ hi = (hi + Math.imul(ah1, bh7)) | 0;
1316
+ lo = (lo + Math.imul(al0, bl8)) | 0;
1317
+ mid = (mid + Math.imul(al0, bh8)) | 0;
1318
+ mid = (mid + Math.imul(ah0, bl8)) | 0;
1319
+ hi = (hi + Math.imul(ah0, bh8)) | 0;
1320
+ var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1321
+ c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
1318
1322
  w8 &= 0x3ffffff;
1319
1323
  /* k = 9 */
1320
1324
  lo = Math.imul(al9, bl0);
1321
1325
  mid = Math.imul(al9, bh0);
1322
- mid += Math.imul(ah9, bl0);
1326
+ mid = (mid + Math.imul(ah9, bl0)) | 0;
1323
1327
  hi = Math.imul(ah9, bh0);
1324
- lo += Math.imul(al8, bl1);
1325
- mid += Math.imul(al8, bh1);
1326
- mid += Math.imul(ah8, bl1);
1327
- hi += Math.imul(ah8, bh1);
1328
- lo += Math.imul(al7, bl2);
1329
- mid += Math.imul(al7, bh2);
1330
- mid += Math.imul(ah7, bl2);
1331
- hi += Math.imul(ah7, bh2);
1332
- lo += Math.imul(al6, bl3);
1333
- mid += Math.imul(al6, bh3);
1334
- mid += Math.imul(ah6, bl3);
1335
- hi += Math.imul(ah6, bh3);
1336
- lo += Math.imul(al5, bl4);
1337
- mid += Math.imul(al5, bh4);
1338
- mid += Math.imul(ah5, bl4);
1339
- hi += Math.imul(ah5, bh4);
1340
- lo += Math.imul(al4, bl5);
1341
- mid += Math.imul(al4, bh5);
1342
- mid += Math.imul(ah4, bl5);
1343
- hi += Math.imul(ah4, bh5);
1344
- lo += Math.imul(al3, bl6);
1345
- mid += Math.imul(al3, bh6);
1346
- mid += Math.imul(ah3, bl6);
1347
- hi += Math.imul(ah3, bh6);
1348
- lo += Math.imul(al2, bl7);
1349
- mid += Math.imul(al2, bh7);
1350
- mid += Math.imul(ah2, bl7);
1351
- hi += Math.imul(ah2, bh7);
1352
- lo += Math.imul(al1, bl8);
1353
- mid += Math.imul(al1, bh8);
1354
- mid += Math.imul(ah1, bl8);
1355
- hi += Math.imul(ah1, bh8);
1356
- lo += Math.imul(al0, bl9);
1357
- mid += Math.imul(al0, bh9);
1358
- mid += Math.imul(ah0, bl9);
1359
- hi += Math.imul(ah0, bh9);
1360
- var w9 = c + lo + ((mid & 0x1fff) << 13);
1361
- c = hi + (mid >>> 13) + (w9 >>> 26);
1328
+ lo = (lo + Math.imul(al8, bl1)) | 0;
1329
+ mid = (mid + Math.imul(al8, bh1)) | 0;
1330
+ mid = (mid + Math.imul(ah8, bl1)) | 0;
1331
+ hi = (hi + Math.imul(ah8, bh1)) | 0;
1332
+ lo = (lo + Math.imul(al7, bl2)) | 0;
1333
+ mid = (mid + Math.imul(al7, bh2)) | 0;
1334
+ mid = (mid + Math.imul(ah7, bl2)) | 0;
1335
+ hi = (hi + Math.imul(ah7, bh2)) | 0;
1336
+ lo = (lo + Math.imul(al6, bl3)) | 0;
1337
+ mid = (mid + Math.imul(al6, bh3)) | 0;
1338
+ mid = (mid + Math.imul(ah6, bl3)) | 0;
1339
+ hi = (hi + Math.imul(ah6, bh3)) | 0;
1340
+ lo = (lo + Math.imul(al5, bl4)) | 0;
1341
+ mid = (mid + Math.imul(al5, bh4)) | 0;
1342
+ mid = (mid + Math.imul(ah5, bl4)) | 0;
1343
+ hi = (hi + Math.imul(ah5, bh4)) | 0;
1344
+ lo = (lo + Math.imul(al4, bl5)) | 0;
1345
+ mid = (mid + Math.imul(al4, bh5)) | 0;
1346
+ mid = (mid + Math.imul(ah4, bl5)) | 0;
1347
+ hi = (hi + Math.imul(ah4, bh5)) | 0;
1348
+ lo = (lo + Math.imul(al3, bl6)) | 0;
1349
+ mid = (mid + Math.imul(al3, bh6)) | 0;
1350
+ mid = (mid + Math.imul(ah3, bl6)) | 0;
1351
+ hi = (hi + Math.imul(ah3, bh6)) | 0;
1352
+ lo = (lo + Math.imul(al2, bl7)) | 0;
1353
+ mid = (mid + Math.imul(al2, bh7)) | 0;
1354
+ mid = (mid + Math.imul(ah2, bl7)) | 0;
1355
+ hi = (hi + Math.imul(ah2, bh7)) | 0;
1356
+ lo = (lo + Math.imul(al1, bl8)) | 0;
1357
+ mid = (mid + Math.imul(al1, bh8)) | 0;
1358
+ mid = (mid + Math.imul(ah1, bl8)) | 0;
1359
+ hi = (hi + Math.imul(ah1, bh8)) | 0;
1360
+ lo = (lo + Math.imul(al0, bl9)) | 0;
1361
+ mid = (mid + Math.imul(al0, bh9)) | 0;
1362
+ mid = (mid + Math.imul(ah0, bl9)) | 0;
1363
+ hi = (hi + Math.imul(ah0, bh9)) | 0;
1364
+ var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1365
+ c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
1362
1366
  w9 &= 0x3ffffff;
1363
1367
  /* k = 10 */
1364
1368
  lo = Math.imul(al9, bl1);
1365
1369
  mid = Math.imul(al9, bh1);
1366
- mid += Math.imul(ah9, bl1);
1370
+ mid = (mid + Math.imul(ah9, bl1)) | 0;
1367
1371
  hi = Math.imul(ah9, bh1);
1368
- lo += Math.imul(al8, bl2);
1369
- mid += Math.imul(al8, bh2);
1370
- mid += Math.imul(ah8, bl2);
1371
- hi += Math.imul(ah8, bh2);
1372
- lo += Math.imul(al7, bl3);
1373
- mid += Math.imul(al7, bh3);
1374
- mid += Math.imul(ah7, bl3);
1375
- hi += Math.imul(ah7, bh3);
1376
- lo += Math.imul(al6, bl4);
1377
- mid += Math.imul(al6, bh4);
1378
- mid += Math.imul(ah6, bl4);
1379
- hi += Math.imul(ah6, bh4);
1380
- lo += Math.imul(al5, bl5);
1381
- mid += Math.imul(al5, bh5);
1382
- mid += Math.imul(ah5, bl5);
1383
- hi += Math.imul(ah5, bh5);
1384
- lo += Math.imul(al4, bl6);
1385
- mid += Math.imul(al4, bh6);
1386
- mid += Math.imul(ah4, bl6);
1387
- hi += Math.imul(ah4, bh6);
1388
- lo += Math.imul(al3, bl7);
1389
- mid += Math.imul(al3, bh7);
1390
- mid += Math.imul(ah3, bl7);
1391
- hi += Math.imul(ah3, bh7);
1392
- lo += Math.imul(al2, bl8);
1393
- mid += Math.imul(al2, bh8);
1394
- mid += Math.imul(ah2, bl8);
1395
- hi += Math.imul(ah2, bh8);
1396
- lo += Math.imul(al1, bl9);
1397
- mid += Math.imul(al1, bh9);
1398
- mid += Math.imul(ah1, bl9);
1399
- hi += Math.imul(ah1, bh9);
1400
- var w10 = c + lo + ((mid & 0x1fff) << 13);
1401
- c = hi + (mid >>> 13) + (w10 >>> 26);
1372
+ lo = (lo + Math.imul(al8, bl2)) | 0;
1373
+ mid = (mid + Math.imul(al8, bh2)) | 0;
1374
+ mid = (mid + Math.imul(ah8, bl2)) | 0;
1375
+ hi = (hi + Math.imul(ah8, bh2)) | 0;
1376
+ lo = (lo + Math.imul(al7, bl3)) | 0;
1377
+ mid = (mid + Math.imul(al7, bh3)) | 0;
1378
+ mid = (mid + Math.imul(ah7, bl3)) | 0;
1379
+ hi = (hi + Math.imul(ah7, bh3)) | 0;
1380
+ lo = (lo + Math.imul(al6, bl4)) | 0;
1381
+ mid = (mid + Math.imul(al6, bh4)) | 0;
1382
+ mid = (mid + Math.imul(ah6, bl4)) | 0;
1383
+ hi = (hi + Math.imul(ah6, bh4)) | 0;
1384
+ lo = (lo + Math.imul(al5, bl5)) | 0;
1385
+ mid = (mid + Math.imul(al5, bh5)) | 0;
1386
+ mid = (mid + Math.imul(ah5, bl5)) | 0;
1387
+ hi = (hi + Math.imul(ah5, bh5)) | 0;
1388
+ lo = (lo + Math.imul(al4, bl6)) | 0;
1389
+ mid = (mid + Math.imul(al4, bh6)) | 0;
1390
+ mid = (mid + Math.imul(ah4, bl6)) | 0;
1391
+ hi = (hi + Math.imul(ah4, bh6)) | 0;
1392
+ lo = (lo + Math.imul(al3, bl7)) | 0;
1393
+ mid = (mid + Math.imul(al3, bh7)) | 0;
1394
+ mid = (mid + Math.imul(ah3, bl7)) | 0;
1395
+ hi = (hi + Math.imul(ah3, bh7)) | 0;
1396
+ lo = (lo + Math.imul(al2, bl8)) | 0;
1397
+ mid = (mid + Math.imul(al2, bh8)) | 0;
1398
+ mid = (mid + Math.imul(ah2, bl8)) | 0;
1399
+ hi = (hi + Math.imul(ah2, bh8)) | 0;
1400
+ lo = (lo + Math.imul(al1, bl9)) | 0;
1401
+ mid = (mid + Math.imul(al1, bh9)) | 0;
1402
+ mid = (mid + Math.imul(ah1, bl9)) | 0;
1403
+ hi = (hi + Math.imul(ah1, bh9)) | 0;
1404
+ var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1405
+ c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
1402
1406
  w10 &= 0x3ffffff;
1403
1407
  /* k = 11 */
1404
1408
  lo = Math.imul(al9, bl2);
1405
1409
  mid = Math.imul(al9, bh2);
1406
- mid += Math.imul(ah9, bl2);
1410
+ mid = (mid + Math.imul(ah9, bl2)) | 0;
1407
1411
  hi = Math.imul(ah9, bh2);
1408
- lo += Math.imul(al8, bl3);
1409
- mid += Math.imul(al8, bh3);
1410
- mid += Math.imul(ah8, bl3);
1411
- hi += Math.imul(ah8, bh3);
1412
- lo += Math.imul(al7, bl4);
1413
- mid += Math.imul(al7, bh4);
1414
- mid += Math.imul(ah7, bl4);
1415
- hi += Math.imul(ah7, bh4);
1416
- lo += Math.imul(al6, bl5);
1417
- mid += Math.imul(al6, bh5);
1418
- mid += Math.imul(ah6, bl5);
1419
- hi += Math.imul(ah6, bh5);
1420
- lo += Math.imul(al5, bl6);
1421
- mid += Math.imul(al5, bh6);
1422
- mid += Math.imul(ah5, bl6);
1423
- hi += Math.imul(ah5, bh6);
1424
- lo += Math.imul(al4, bl7);
1425
- mid += Math.imul(al4, bh7);
1426
- mid += Math.imul(ah4, bl7);
1427
- hi += Math.imul(ah4, bh7);
1428
- lo += Math.imul(al3, bl8);
1429
- mid += Math.imul(al3, bh8);
1430
- mid += Math.imul(ah3, bl8);
1431
- hi += Math.imul(ah3, bh8);
1432
- lo += Math.imul(al2, bl9);
1433
- mid += Math.imul(al2, bh9);
1434
- mid += Math.imul(ah2, bl9);
1435
- hi += Math.imul(ah2, bh9);
1436
- var w11 = c + lo + ((mid & 0x1fff) << 13);
1437
- c = hi + (mid >>> 13) + (w11 >>> 26);
1412
+ lo = (lo + Math.imul(al8, bl3)) | 0;
1413
+ mid = (mid + Math.imul(al8, bh3)) | 0;
1414
+ mid = (mid + Math.imul(ah8, bl3)) | 0;
1415
+ hi = (hi + Math.imul(ah8, bh3)) | 0;
1416
+ lo = (lo + Math.imul(al7, bl4)) | 0;
1417
+ mid = (mid + Math.imul(al7, bh4)) | 0;
1418
+ mid = (mid + Math.imul(ah7, bl4)) | 0;
1419
+ hi = (hi + Math.imul(ah7, bh4)) | 0;
1420
+ lo = (lo + Math.imul(al6, bl5)) | 0;
1421
+ mid = (mid + Math.imul(al6, bh5)) | 0;
1422
+ mid = (mid + Math.imul(ah6, bl5)) | 0;
1423
+ hi = (hi + Math.imul(ah6, bh5)) | 0;
1424
+ lo = (lo + Math.imul(al5, bl6)) | 0;
1425
+ mid = (mid + Math.imul(al5, bh6)) | 0;
1426
+ mid = (mid + Math.imul(ah5, bl6)) | 0;
1427
+ hi = (hi + Math.imul(ah5, bh6)) | 0;
1428
+ lo = (lo + Math.imul(al4, bl7)) | 0;
1429
+ mid = (mid + Math.imul(al4, bh7)) | 0;
1430
+ mid = (mid + Math.imul(ah4, bl7)) | 0;
1431
+ hi = (hi + Math.imul(ah4, bh7)) | 0;
1432
+ lo = (lo + Math.imul(al3, bl8)) | 0;
1433
+ mid = (mid + Math.imul(al3, bh8)) | 0;
1434
+ mid = (mid + Math.imul(ah3, bl8)) | 0;
1435
+ hi = (hi + Math.imul(ah3, bh8)) | 0;
1436
+ lo = (lo + Math.imul(al2, bl9)) | 0;
1437
+ mid = (mid + Math.imul(al2, bh9)) | 0;
1438
+ mid = (mid + Math.imul(ah2, bl9)) | 0;
1439
+ hi = (hi + Math.imul(ah2, bh9)) | 0;
1440
+ var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1441
+ c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
1438
1442
  w11 &= 0x3ffffff;
1439
1443
  /* k = 12 */
1440
1444
  lo = Math.imul(al9, bl3);
1441
1445
  mid = Math.imul(al9, bh3);
1442
- mid += Math.imul(ah9, bl3);
1446
+ mid = (mid + Math.imul(ah9, bl3)) | 0;
1443
1447
  hi = Math.imul(ah9, bh3);
1444
- lo += Math.imul(al8, bl4);
1445
- mid += Math.imul(al8, bh4);
1446
- mid += Math.imul(ah8, bl4);
1447
- hi += Math.imul(ah8, bh4);
1448
- lo += Math.imul(al7, bl5);
1449
- mid += Math.imul(al7, bh5);
1450
- mid += Math.imul(ah7, bl5);
1451
- hi += Math.imul(ah7, bh5);
1452
- lo += Math.imul(al6, bl6);
1453
- mid += Math.imul(al6, bh6);
1454
- mid += Math.imul(ah6, bl6);
1455
- hi += Math.imul(ah6, bh6);
1456
- lo += Math.imul(al5, bl7);
1457
- mid += Math.imul(al5, bh7);
1458
- mid += Math.imul(ah5, bl7);
1459
- hi += Math.imul(ah5, bh7);
1460
- lo += Math.imul(al4, bl8);
1461
- mid += Math.imul(al4, bh8);
1462
- mid += Math.imul(ah4, bl8);
1463
- hi += Math.imul(ah4, bh8);
1464
- lo += Math.imul(al3, bl9);
1465
- mid += Math.imul(al3, bh9);
1466
- mid += Math.imul(ah3, bl9);
1467
- hi += Math.imul(ah3, bh9);
1468
- var w12 = c + lo + ((mid & 0x1fff) << 13);
1469
- c = hi + (mid >>> 13) + (w12 >>> 26);
1448
+ lo = (lo + Math.imul(al8, bl4)) | 0;
1449
+ mid = (mid + Math.imul(al8, bh4)) | 0;
1450
+ mid = (mid + Math.imul(ah8, bl4)) | 0;
1451
+ hi = (hi + Math.imul(ah8, bh4)) | 0;
1452
+ lo = (lo + Math.imul(al7, bl5)) | 0;
1453
+ mid = (mid + Math.imul(al7, bh5)) | 0;
1454
+ mid = (mid + Math.imul(ah7, bl5)) | 0;
1455
+ hi = (hi + Math.imul(ah7, bh5)) | 0;
1456
+ lo = (lo + Math.imul(al6, bl6)) | 0;
1457
+ mid = (mid + Math.imul(al6, bh6)) | 0;
1458
+ mid = (mid + Math.imul(ah6, bl6)) | 0;
1459
+ hi = (hi + Math.imul(ah6, bh6)) | 0;
1460
+ lo = (lo + Math.imul(al5, bl7)) | 0;
1461
+ mid = (mid + Math.imul(al5, bh7)) | 0;
1462
+ mid = (mid + Math.imul(ah5, bl7)) | 0;
1463
+ hi = (hi + Math.imul(ah5, bh7)) | 0;
1464
+ lo = (lo + Math.imul(al4, bl8)) | 0;
1465
+ mid = (mid + Math.imul(al4, bh8)) | 0;
1466
+ mid = (mid + Math.imul(ah4, bl8)) | 0;
1467
+ hi = (hi + Math.imul(ah4, bh8)) | 0;
1468
+ lo = (lo + Math.imul(al3, bl9)) | 0;
1469
+ mid = (mid + Math.imul(al3, bh9)) | 0;
1470
+ mid = (mid + Math.imul(ah3, bl9)) | 0;
1471
+ hi = (hi + Math.imul(ah3, bh9)) | 0;
1472
+ var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1473
+ c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
1470
1474
  w12 &= 0x3ffffff;
1471
1475
  /* k = 13 */
1472
1476
  lo = Math.imul(al9, bl4);
1473
1477
  mid = Math.imul(al9, bh4);
1474
- mid += Math.imul(ah9, bl4);
1478
+ mid = (mid + Math.imul(ah9, bl4)) | 0;
1475
1479
  hi = Math.imul(ah9, bh4);
1476
- lo += Math.imul(al8, bl5);
1477
- mid += Math.imul(al8, bh5);
1478
- mid += Math.imul(ah8, bl5);
1479
- hi += Math.imul(ah8, bh5);
1480
- lo += Math.imul(al7, bl6);
1481
- mid += Math.imul(al7, bh6);
1482
- mid += Math.imul(ah7, bl6);
1483
- hi += Math.imul(ah7, bh6);
1484
- lo += Math.imul(al6, bl7);
1485
- mid += Math.imul(al6, bh7);
1486
- mid += Math.imul(ah6, bl7);
1487
- hi += Math.imul(ah6, bh7);
1488
- lo += Math.imul(al5, bl8);
1489
- mid += Math.imul(al5, bh8);
1490
- mid += Math.imul(ah5, bl8);
1491
- hi += Math.imul(ah5, bh8);
1492
- lo += Math.imul(al4, bl9);
1493
- mid += Math.imul(al4, bh9);
1494
- mid += Math.imul(ah4, bl9);
1495
- hi += Math.imul(ah4, bh9);
1496
- var w13 = c + lo + ((mid & 0x1fff) << 13);
1497
- c = hi + (mid >>> 13) + (w13 >>> 26);
1480
+ lo = (lo + Math.imul(al8, bl5)) | 0;
1481
+ mid = (mid + Math.imul(al8, bh5)) | 0;
1482
+ mid = (mid + Math.imul(ah8, bl5)) | 0;
1483
+ hi = (hi + Math.imul(ah8, bh5)) | 0;
1484
+ lo = (lo + Math.imul(al7, bl6)) | 0;
1485
+ mid = (mid + Math.imul(al7, bh6)) | 0;
1486
+ mid = (mid + Math.imul(ah7, bl6)) | 0;
1487
+ hi = (hi + Math.imul(ah7, bh6)) | 0;
1488
+ lo = (lo + Math.imul(al6, bl7)) | 0;
1489
+ mid = (mid + Math.imul(al6, bh7)) | 0;
1490
+ mid = (mid + Math.imul(ah6, bl7)) | 0;
1491
+ hi = (hi + Math.imul(ah6, bh7)) | 0;
1492
+ lo = (lo + Math.imul(al5, bl8)) | 0;
1493
+ mid = (mid + Math.imul(al5, bh8)) | 0;
1494
+ mid = (mid + Math.imul(ah5, bl8)) | 0;
1495
+ hi = (hi + Math.imul(ah5, bh8)) | 0;
1496
+ lo = (lo + Math.imul(al4, bl9)) | 0;
1497
+ mid = (mid + Math.imul(al4, bh9)) | 0;
1498
+ mid = (mid + Math.imul(ah4, bl9)) | 0;
1499
+ hi = (hi + Math.imul(ah4, bh9)) | 0;
1500
+ var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1501
+ c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
1498
1502
  w13 &= 0x3ffffff;
1499
1503
  /* k = 14 */
1500
1504
  lo = Math.imul(al9, bl5);
1501
1505
  mid = Math.imul(al9, bh5);
1502
- mid += Math.imul(ah9, bl5);
1506
+ mid = (mid + Math.imul(ah9, bl5)) | 0;
1503
1507
  hi = Math.imul(ah9, bh5);
1504
- lo += Math.imul(al8, bl6);
1505
- mid += Math.imul(al8, bh6);
1506
- mid += Math.imul(ah8, bl6);
1507
- hi += Math.imul(ah8, bh6);
1508
- lo += Math.imul(al7, bl7);
1509
- mid += Math.imul(al7, bh7);
1510
- mid += Math.imul(ah7, bl7);
1511
- hi += Math.imul(ah7, bh7);
1512
- lo += Math.imul(al6, bl8);
1513
- mid += Math.imul(al6, bh8);
1514
- mid += Math.imul(ah6, bl8);
1515
- hi += Math.imul(ah6, bh8);
1516
- lo += Math.imul(al5, bl9);
1517
- mid += Math.imul(al5, bh9);
1518
- mid += Math.imul(ah5, bl9);
1519
- hi += Math.imul(ah5, bh9);
1520
- var w14 = c + lo + ((mid & 0x1fff) << 13);
1521
- c = hi + (mid >>> 13) + (w14 >>> 26);
1508
+ lo = (lo + Math.imul(al8, bl6)) | 0;
1509
+ mid = (mid + Math.imul(al8, bh6)) | 0;
1510
+ mid = (mid + Math.imul(ah8, bl6)) | 0;
1511
+ hi = (hi + Math.imul(ah8, bh6)) | 0;
1512
+ lo = (lo + Math.imul(al7, bl7)) | 0;
1513
+ mid = (mid + Math.imul(al7, bh7)) | 0;
1514
+ mid = (mid + Math.imul(ah7, bl7)) | 0;
1515
+ hi = (hi + Math.imul(ah7, bh7)) | 0;
1516
+ lo = (lo + Math.imul(al6, bl8)) | 0;
1517
+ mid = (mid + Math.imul(al6, bh8)) | 0;
1518
+ mid = (mid + Math.imul(ah6, bl8)) | 0;
1519
+ hi = (hi + Math.imul(ah6, bh8)) | 0;
1520
+ lo = (lo + Math.imul(al5, bl9)) | 0;
1521
+ mid = (mid + Math.imul(al5, bh9)) | 0;
1522
+ mid = (mid + Math.imul(ah5, bl9)) | 0;
1523
+ hi = (hi + Math.imul(ah5, bh9)) | 0;
1524
+ var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1525
+ c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
1522
1526
  w14 &= 0x3ffffff;
1523
1527
  /* k = 15 */
1524
1528
  lo = Math.imul(al9, bl6);
1525
1529
  mid = Math.imul(al9, bh6);
1526
- mid += Math.imul(ah9, bl6);
1530
+ mid = (mid + Math.imul(ah9, bl6)) | 0;
1527
1531
  hi = Math.imul(ah9, bh6);
1528
- lo += Math.imul(al8, bl7);
1529
- mid += Math.imul(al8, bh7);
1530
- mid += Math.imul(ah8, bl7);
1531
- hi += Math.imul(ah8, bh7);
1532
- lo += Math.imul(al7, bl8);
1533
- mid += Math.imul(al7, bh8);
1534
- mid += Math.imul(ah7, bl8);
1535
- hi += Math.imul(ah7, bh8);
1536
- lo += Math.imul(al6, bl9);
1537
- mid += Math.imul(al6, bh9);
1538
- mid += Math.imul(ah6, bl9);
1539
- hi += Math.imul(ah6, bh9);
1540
- var w15 = c + lo + ((mid & 0x1fff) << 13);
1541
- c = hi + (mid >>> 13) + (w15 >>> 26);
1532
+ lo = (lo + Math.imul(al8, bl7)) | 0;
1533
+ mid = (mid + Math.imul(al8, bh7)) | 0;
1534
+ mid = (mid + Math.imul(ah8, bl7)) | 0;
1535
+ hi = (hi + Math.imul(ah8, bh7)) | 0;
1536
+ lo = (lo + Math.imul(al7, bl8)) | 0;
1537
+ mid = (mid + Math.imul(al7, bh8)) | 0;
1538
+ mid = (mid + Math.imul(ah7, bl8)) | 0;
1539
+ hi = (hi + Math.imul(ah7, bh8)) | 0;
1540
+ lo = (lo + Math.imul(al6, bl9)) | 0;
1541
+ mid = (mid + Math.imul(al6, bh9)) | 0;
1542
+ mid = (mid + Math.imul(ah6, bl9)) | 0;
1543
+ hi = (hi + Math.imul(ah6, bh9)) | 0;
1544
+ var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1545
+ c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
1542
1546
  w15 &= 0x3ffffff;
1543
1547
  /* k = 16 */
1544
1548
  lo = Math.imul(al9, bl7);
1545
1549
  mid = Math.imul(al9, bh7);
1546
- mid += Math.imul(ah9, bl7);
1550
+ mid = (mid + Math.imul(ah9, bl7)) | 0;
1547
1551
  hi = Math.imul(ah9, bh7);
1548
- lo += Math.imul(al8, bl8);
1549
- mid += Math.imul(al8, bh8);
1550
- mid += Math.imul(ah8, bl8);
1551
- hi += Math.imul(ah8, bh8);
1552
- lo += Math.imul(al7, bl9);
1553
- mid += Math.imul(al7, bh9);
1554
- mid += Math.imul(ah7, bl9);
1555
- hi += Math.imul(ah7, bh9);
1556
- var w16 = c + lo + ((mid & 0x1fff) << 13);
1557
- c = hi + (mid >>> 13) + (w16 >>> 26);
1552
+ lo = (lo + Math.imul(al8, bl8)) | 0;
1553
+ mid = (mid + Math.imul(al8, bh8)) | 0;
1554
+ mid = (mid + Math.imul(ah8, bl8)) | 0;
1555
+ hi = (hi + Math.imul(ah8, bh8)) | 0;
1556
+ lo = (lo + Math.imul(al7, bl9)) | 0;
1557
+ mid = (mid + Math.imul(al7, bh9)) | 0;
1558
+ mid = (mid + Math.imul(ah7, bl9)) | 0;
1559
+ hi = (hi + Math.imul(ah7, bh9)) | 0;
1560
+ var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1561
+ c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
1558
1562
  w16 &= 0x3ffffff;
1559
1563
  /* k = 17 */
1560
1564
  lo = Math.imul(al9, bl8);
1561
1565
  mid = Math.imul(al9, bh8);
1562
- mid += Math.imul(ah9, bl8);
1566
+ mid = (mid + Math.imul(ah9, bl8)) | 0;
1563
1567
  hi = Math.imul(ah9, bh8);
1564
- lo += Math.imul(al8, bl9);
1565
- mid += Math.imul(al8, bh9);
1566
- mid += Math.imul(ah8, bl9);
1567
- hi += Math.imul(ah8, bh9);
1568
- var w17 = c + lo + ((mid & 0x1fff) << 13);
1569
- c = hi + (mid >>> 13) + (w17 >>> 26);
1568
+ lo = (lo + Math.imul(al8, bl9)) | 0;
1569
+ mid = (mid + Math.imul(al8, bh9)) | 0;
1570
+ mid = (mid + Math.imul(ah8, bl9)) | 0;
1571
+ hi = (hi + Math.imul(ah8, bh9)) | 0;
1572
+ var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1573
+ c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
1570
1574
  w17 &= 0x3ffffff;
1571
1575
  /* k = 18 */
1572
1576
  lo = Math.imul(al9, bl9);
1573
1577
  mid = Math.imul(al9, bh9);
1574
- mid += Math.imul(ah9, bl9);
1578
+ mid = (mid + Math.imul(ah9, bl9)) | 0;
1575
1579
  hi = Math.imul(ah9, bh9);
1576
- var w18 = c + lo + ((mid & 0x1fff) << 13);
1577
- c = hi + (mid >>> 13) + (w18 >>> 26);
1580
+ var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
1581
+ c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
1578
1582
  w18 &= 0x3ffffff;
1579
1583
  o[0] = w0;
1580
1584
  o[1] = w1;
@@ -2097,6 +2101,10 @@
2097
2101
 
2098
2102
  assert(this.negative === 0, 'imaskn works only with positive numbers');
2099
2103
 
2104
+ if (this.length <= s) {
2105
+ return this;
2106
+ }
2107
+
2100
2108
  if (r !== 0) {
2101
2109
  s++;
2102
2110
  }
@@ -3118,6 +3126,7 @@
3118
3126
  this.m = prime.p;
3119
3127
  this.prime = prime;
3120
3128
  } else {
3129
+ assert(m.gtn(1), 'modulus must be greater than 1');
3121
3130
  this.m = m;
3122
3131
  this.prime = null;
3123
3132
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bn.js",
3
- "version": "4.11.2",
3
+ "version": "4.11.6",
4
4
  "description": "Big number implementation in pure javascript",
5
5
  "main": "lib/bn.js",
6
6
  "scripts": {
@@ -62,6 +62,11 @@ describe('BN.js/Binary', function () {
62
62
  assert.equal(new BN('123456789', 16).imaskn(16).toString(16), '6789');
63
63
  assert.equal(new BN('123456789', 16).imaskn(28).toString(16), '3456789');
64
64
  });
65
+
66
+ it('should not mask when number is bigger than length', function () {
67
+ assert.equal(new BN(0xe3).imaskn(56).toString(16), 'e3');
68
+ assert.equal(new BN(0xe3).imaskn(26).toString(16), 'e3');
69
+ });
65
70
  });
66
71
 
67
72
  describe('.testn()', function () {
package/test/red-test.js CHANGED
@@ -141,6 +141,20 @@ describe('BN.js/Reduction context', function () {
141
141
  var a = new BN(0).toRed(BN.red('k256')).redNeg();
142
142
  assert.equal(a.isZero(), true);
143
143
  });
144
+
145
+ it('should not allow modulus <= 1', function () {
146
+ assert.throws(function () {
147
+ BN.red(new BN(0));
148
+ }, /^Error: modulus must be greater than 1$/);
149
+
150
+ assert.throws(function () {
151
+ BN.red(new BN(1));
152
+ }, /^Error: modulus must be greater than 1$/);
153
+
154
+ assert.doesNotThrow(function () {
155
+ BN.red(new BN(2));
156
+ });
157
+ });
144
158
  });
145
159
  }
146
160
 
@@ -32,20 +32,21 @@ function genCombMulTo (alen, blen) {
32
32
  src.push('\/* k = ' + k + ' *\/');
33
33
  src.push('lo = Math.imul(al' + (k - minJ) + ', bl' + minJ + ');');
34
34
  src.push('mid = Math.imul(al' + (k - minJ) + ', bh' + minJ + ');');
35
- src.push('mid += Math.imul(ah' + (k - minJ) + ', bl' + minJ + ');');
35
+ src.push(
36
+ 'mid = (mid + Math.imul(ah' + (k - minJ) + ', bl' + minJ + ')) | 0;');
36
37
  src.push('hi = Math.imul(ah' + (k - minJ) + ', bh' + minJ + ');');
37
38
 
38
39
  for (var j = minJ + 1; j <= maxJ; j++) {
39
40
  i = k - j;
40
41
 
41
- src.push('lo += Math.imul(al' + i + ', bl' + j + ');');
42
- src.push('mid += Math.imul(al' + i + ', bh' + j + ');');
43
- src.push('mid += Math.imul(ah' + i + ', bl' + j + ');');
44
- src.push('hi += Math.imul(ah' + i + ', bh' + j + ');');
42
+ src.push('lo = (lo + Math.imul(al' + i + ', bl' + j + ')) | 0;');
43
+ src.push('mid = (mid + Math.imul(al' + i + ', bh' + j + ')) | 0;');
44
+ src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;');
45
+ src.push('hi = (hi + Math.imul(ah' + i + ', bh' + j + ')) | 0;');
45
46
  }
46
47
 
47
- src.push('var w' + k + ' = c + lo + ((mid & 0x1fff) << 13);');
48
- src.push('c = hi + (mid >>> 13) + (w' + k + ' >>> 26);');
48
+ src.push('var w' + k + ' = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;');
49
+ src.push('c = (((hi + (mid >>> 13)) | 0) + (w' + k + ' >>> 26)) | 0;');
49
50
  src.push('w' + k + ' &= 0x3ffffff;');
50
51
  }
51
52
  // Store in separate step for better memory access