bcrypt-ts 7.1.0 → 8.0.1

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/README.md CHANGED
@@ -11,10 +11,10 @@ Optimized bcrypt in TypeScript with zero dependencies. Compatible to the C++ [bc
11
11
 
12
12
  ## Why bcrypt-ts instead of bcrypt.js
13
13
 
14
- - bcrypt-ts is fully written in TypeScript
15
- - bcrypt-ts provides dual ESM/cjs mode for both Node.js and browser environments
14
+ - Fully written in TypeScript
15
+ - Provides separate ESM modules for Node.js and browser environments
16
16
  - Minified output
17
- - Tree shakable
17
+ - Better tree-shaking
18
18
 
19
19
  ## Security considerations
20
20
 
@@ -170,10 +170,7 @@ export const compare: (
170
170
  * @param salt Salt length to generate or salt to use, default to 10
171
171
  * @returns Resulting hash
172
172
  */
173
- export const hashSync: (
174
- contentString: string,
175
- salt?: string | number,
176
- ) => string;
173
+ export const hashSync: (contentString: string, salt?: string | number) => string;
177
174
  /**
178
175
  * Asynchronously generates a hash for the given string.
179
176
  *
@@ -224,6 +221,5 @@ export const genSalt: (rounds?: number) => Promise<string>;
224
221
  ## Credits
225
222
 
226
223
  - Based on [bcrypt.js](https://github.com/dcodeIO/bcrypt.js)
227
-
228
224
  - Based on work started by Shane Girish at [bcrypt-nodejs](https://github.com/shaneGirish/bcrypt-nodejs)
229
225
  - Based on [javascript-bcrypt](http://code.google.com/p/javascript-bcrypt/) (New BSD-licensed).
@@ -1,8 +1,11 @@
1
+ //#region src/compare.d.ts
1
2
  /**
2
3
  * Synchronously tests a string against a hash.
3
4
  *
4
5
  * @param content String to compare
5
6
  * @param hash Hash to test against
7
+ *
8
+ * @returns `true` if the string matches the hash, `false` otherwise
6
9
  */
7
10
  declare const compareSync: (content: string, hash: string) => boolean;
8
11
  /**
@@ -12,9 +15,12 @@ declare const compareSync: (content: string, hash: string) => boolean;
12
15
  * @param hash Data to be compared to
13
16
  * @param progressCallback Callback successively called with the percentage of rounds completed
14
17
  * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
18
+ *
19
+ * @returns Promise resolving to `true` if the data matches the hash, `false` otherwise
15
20
  */
16
21
  declare const compare: (content: string, hash: string, progressCallback?: (percent: number) => void) => Promise<boolean>;
17
-
22
+ //#endregion
23
+ //#region src/hash.d.ts
18
24
  /**
19
25
  * Synchronously generates a hash for the given string.
20
26
  *
@@ -30,9 +36,12 @@ declare const hashSync: (contentString: string, salt?: string | number) => strin
30
36
  * @param salt Salt length to generate or salt to use
31
37
  * @param progressCallback Callback successively called with the percentage of rounds completed
32
38
  * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
39
+ *
40
+ * @returns Promise resolving to the resulting hash
33
41
  */
34
42
  declare const hash: (contentString: string, salt: number | string, progressCallback?: (progress: number) => void) => Promise<string>;
35
-
43
+ //#endregion
44
+ //#region src/helpers.d.ts
36
45
  /**
37
46
  * Gets the number of rounds used to encrypt the specified hash.
38
47
  *
@@ -56,7 +65,8 @@ declare const getSalt: (hash: string) => string;
56
65
  * @returns `true` if truncated, otherwise `false`
57
66
  */
58
67
  declare const truncates: (content: string) => boolean;
59
-
68
+ //#endregion
69
+ //#region src/salt.d.ts
60
70
  /**
61
71
  * Synchronously generates a salt.
62
72
  *
@@ -69,7 +79,9 @@ declare const genSaltSync: (rounds?: number) => string;
69
79
  * Asynchronously generates a salt.
70
80
  *
71
81
  * @param rounds Number of rounds to use, defaults to 10 if omitted
82
+ * @returns Promise resolving to the resulting salt
72
83
  */
73
84
  declare const genSalt: (rounds?: number) => Promise<string>;
74
-
85
+ //#endregion
75
86
  export { compare, compareSync, genSalt, genSaltSync, getRounds, getSalt, hash, hashSync, truncates };
87
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1,2 @@
1
+ const e=typeof scheduler==`object`&&typeof scheduler.postTask==`function`?scheduler.postTask.bind(scheduler):setTimeout,t=[...`./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`],n=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,54,55,56,57,58,59,60,61,62,63,-1,-1,-1,-1,-1,-1,-1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,-1,-1,-1,-1,-1,-1,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,-1,-1,-1,-1,-1],r=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],i=[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946,1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055,3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504,976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462],a=[1332899944,1700884034,1701343084,1684370003,1668446532,1869963892],o=(e,n)=>{if(n<=0||n>e.length)throw Error(`Illegal length: ${n}`);let r=0,i,a,o=[];for(;r<n;){if(i=e[r++]&255,o.push(t[i>>2&63]),i=(i&3)<<4,r>=n){o.push(t[i&63]);break}if(a=e[r++]&255,i|=a>>4&15,o.push(t[i&63]),i=(a&15)<<2,r>=n){o.push(t[i&63]);break}a=e[r++]&255,i|=a>>6&3,o.push(t[i&63]),o.push(t[a&63])}return o.join(``)},s=(e,t)=>{if(t<=0)throw Error(`Illegal length: ${t}`);let r=e.length,i=0,a=0,o,s,c,l,u,d,f=[];for(;i<r-1&&a<t&&(d=e.charCodeAt(i++),o=d<n.length?n[d]:-1,d=e.charCodeAt(i++),s=d<n.length?n[d]:-1,!(o===-1||s===-1||(u=o<<2>>>0,u|=(s&48)>>4,f.push(String.fromCharCode(u)),++a>=t||i>=r)||(d=e.charCodeAt(i++),c=d<n.length?n[d]:-1,c===-1)||(u=(s&15)<<4>>>0,u|=(c&60)>>2,f.push(String.fromCharCode(u)),++a>=t||i>=r)));)d=e.charCodeAt(i++),l=d<n.length?n[d]:-1,u=(c&3)<<6>>>0,u|=l,f.push(String.fromCharCode(u)),++a;return f.map(e=>e.charCodeAt(0))},c=(e,t,n,r)=>{let i,a=e[t],o=e[t+1];return a^=n[0],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[1],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[2],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[3],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[4],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[5],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[6],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[7],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[8],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[9],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[10],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[11],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[12],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[13],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[14],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[15],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[16],e[t]=o^n[17],e[t+1]=a,e},l=(e,t)=>{let n=0;for(let r=0;r<4;++r)n=n<<8|e[t]&255,t=(t+1)%e.length;return{key:n,offp:t}},u=(e,t,n)=>{let r=t.length,i=n.length,a=0,o=new Int32Array([0,0]),s;for(let n=0;n<r;n++)s=l(e,a),{offp:a}=s,t[n]^=s.key;for(let e=0;e<r;e+=2)o=c(o,0,t,n),t[e]=o[0],t[e+1]=o[1];for(let e=0;e<i;e+=2)o=c(o,0,t,n),n[e]=o[0],n[e+1]=o[1]},d=(e,t,n,r)=>{let i=n.length,a=r.length,o=0,s=new Int32Array([0,0]),u;for(let e=0;e<i;e++)u=l(t,o),{offp:o}=u,n[e]^=u.key;o=0;for(let t=0;t<i;t+=2)u=l(e,o),{offp:o}=u,s[0]^=u.key,u=l(e,o),{offp:o}=u,s[1]^=u.key,s=c(s,0,n,r),n[t]=s[0],n[t+1]=s[1];for(let t=0;t<a;t+=2)u=l(e,o),{offp:o}=u,s[0]^=u.key,u=l(e,o),{offp:o}=u,s[1]^=u.key,s=c(s,0,n,r),r[t]=s[0],r[t+1]=s[1]},f=(t,n,o,s,l)=>{let f=new Int32Array(a),p=f.length;o=1<<o>>>0;let m=new Int32Array(r),h=new Int32Array(i);d(n,t,m,h);let g=0,_=()=>{if(l&&l(g/o),g<o){let e=Date.now();for(;g<o&&(g+=1,u(t,m,h),u(n,m,h),!(Date.now()-e>100)););}else{for(let e=0;e<64;e++)for(let e=0;e<p>>1;e++)c(f,e<<1,m,h);let e=[];for(let t=0;t<p;t++)e.push(f[t]>>24&255),e.push(f[t]>>16&255),e.push(f[t]>>8&255),e.push(f[t]&255);return s?e:Promise.resolve(e)}if(!s)return new Promise(t=>e(()=>{_().then(t)}))};if(!s)return _();let v;do v=_();while(!v);return v},p=e=>{try{let t=new Uint32Array(e);return globalThis.crypto.getRandomValues(t),[...t]}catch{throw Error(`WebCryptoAPI / globalThis is not available`)}},m=(...e)=>Error(`Illegal arguments: ${e.map(e=>typeof e).join(`, `)}`),h=(e=10)=>{if(typeof e!=`number`)throw m(e);return e=e<4?4:Math.min(31,e),`$2b$${e<10?`0`:``}${e}$${o(p(16),16)}`},g=(t=10)=>new Promise((n,r)=>e(()=>{try{n(h(t))}catch(e){r(e)}})),_=e=>{let t=0,n=0;for(let r=0;r<e.length;++r)t=e.charCodeAt(r),t<128?n+=1:t<2048?n+=2:(t&64512)==55296&&(e.charCodeAt(r+1)&64512)==56320?(r++,n+=4):n+=3;return n},v=e=>{let t=0,n,r,i=Array(_(e));for(let a=0,o=e.length;a<o;++a)n=e.charCodeAt(a),n<128?i[t++]=n:n<2048?(i[t++]=n>>6|192,i[t++]=n&63|128):(n&64512)==55296&&((r=e.charCodeAt(a+1))&64512)==56320?(n=65536+((n&1023)<<10)+(r&1023),++a,i[t++]=n>>18|240,i[t++]=n>>12&63|128,i[t++]=n>>6&63|128,i[t++]=n&63|128):(i[t++]=n>>12|224,i[t++]=n>>6&63|128,i[t++]=n&63|128);return i},y=(e,t,n,r)=>{if(typeof e!=`string`||typeof t!=`string`){let e=Error(`Invalid content / salt: not a string`);if(!n)return Promise.reject(e);throw e}let i,c;if(t.charAt(0)!==`$`||t.charAt(1)!==`2`){let e=Error(`Invalid salt version: ${t.slice(0,2)}`);if(!n)return Promise.reject(e);throw e}if(t.charAt(2)===`$`)i=`\0`,c=3;else{if(i=t.charAt(2),i!==`a`&&i!==`b`&&i!==`y`||t.charAt(3)!==`$`){let e=Error(`Invalid salt revision: ${t.slice(2,4)}`);if(!n)return Promise.reject(e);throw e}c=4}let l=t.slice(c,c+2),u=/\d\d/.test(l)?Number(l):null;if(u===null){let e=Error(`Missing salt rounds`);if(!n)return Promise.reject(e);throw e}if(u<4||u>31){let e=Error(`Illegal number of rounds (4-31): ${u}`);if(!n)return Promise.reject(e);throw e}let d=t.slice(c+3,c+25);e+=i>=`a`?`\0`:``;let p=v(e),m=s(d,16);if(m.length!==16){let e=Error(`Illegal salt: ${d}`);if(!n)return Promise.reject(e);throw e}let h=e=>`$2${i>=`a`?i:``}$${u<10?`0`:``}${u}$${o(m,16)}${o(e,a.length*4-1)}`;return n?h(f(p,m,u,!0,r)):f(p,m,u,!1,r).then(e=>h(e))},b=(e,t=10)=>y(e,typeof t==`number`?h(t):t,!0),x=async(e,t,n)=>y(e,typeof t==`number`?await g(t):t,!1,n),S=(e,t)=>{if(typeof e!=`string`||typeof t!=`string`)throw m(e,t);return t.length===60?b(e,t.slice(0,29))===t:!1},C=(t,n,r)=>new Promise((i,a)=>{if(typeof t!=`string`||typeof n!=`string`){e(()=>a(Error(`Illegal arguments: ${typeof t}, ${typeof n}`)));return}if(n.length!==60){e(()=>i(!1));return}x(t,n.slice(0,29),r).then(e=>i(e===n)).catch(e=>a(e))}),w=e=>{if(typeof e!=`string`)throw m(e);return parseInt(e.split(`$`)[2],10)},T=e=>{if(typeof e!=`string`)throw m(e);if(e.length!==60)throw Error(`Illegal hash length: ${e.length} != 60`);return e.slice(0,29)},E=e=>{if(typeof e!=`string`)throw m(e);return _(e)>72};export{C as compare,S as compareSync,g as genSalt,h as genSaltSync,w as getRounds,T as getSalt,x as hash,b as hashSync,E as truncates};
2
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","names":["hash"],"sources":["../src/nextTick/browser.ts","../src/constant.ts","../src/base64.ts","../src/crypt.ts","../src/random/browser.ts","../src/utils.ts","../src/salt.ts","../src/uft8.ts","../src/hash.ts","../src/compare.ts","../src/helpers.ts"],"sourcesContent":["interface SchedulerPostTaskOptions {\n priority?: \"user-blocking\" | \"user-visible\" | \"background\";\n delay?: number;\n signal?: AbortSignal;\n}\n\ninterface Scheduler {\n postTask<T>(callback: () => T | Promise<T>, options?: SchedulerPostTaskOptions): Promise<T>;\n\n yield?(): Promise<void>;\n}\n\ndeclare global {\n const scheduler: Scheduler | undefined;\n}\n\n/**\n * Continues with the callback on the next tick.\n */\nexport const nextTick: (callback: () => void) => unknown =\n typeof scheduler === \"object\" && typeof scheduler.postTask === \"function\"\n ? scheduler.postTask.bind(scheduler)\n : setTimeout;\n","// oxlint-disable no-magic-numbers\n\nexport const BCRYPT_SALT_LEN = 16;\n\nexport const GENERATE_SALT_DEFAULT_LOG2_ROUNDS = 10;\n\nexport const BLOWFISH_NUM_ROUNDS = 16;\n\nexport const MAX_EXECUTION_TIME = 100;\n\nexport const BASE64_CODE = [...\"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"];\n\nexport const BASE64_INDEX = [\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 54,\n 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,\n 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29,\n 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,\n -1, -1, -1, -1, -1,\n];\n\nexport const P_ORIG = [\n 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,\n 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,\n 0x9216d5d9, 0x8979fb1b,\n];\n\nexport const S_ORIG = [\n 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,\n 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,\n 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,\n 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,\n 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,\n 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,\n 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,\n 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,\n 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,\n 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,\n 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,\n 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,\n 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,\n 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,\n 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,\n 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,\n 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,\n 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,\n 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,\n 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,\n 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,\n 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,\n 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,\n 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,\n 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\n 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,\n 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,\n 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,\n 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,\n 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,\n 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,\n 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,\n 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,\n 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,\n 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,\n 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,\n 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,\n 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,\n 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,\n 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\n 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,\n 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,\n 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,\n 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,\n 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,\n 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,\n 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,\n 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,\n 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,\n 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,\n 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,\n 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,\n 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,\n 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,\n 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,\n 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,\n 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,\n 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,\n 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,\n 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\n 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,\n 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,\n 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,\n 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,\n 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,\n 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,\n 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,\n 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,\n 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,\n 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,\n 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,\n 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,\n 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,\n 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,\n 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\n 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,\n 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,\n 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,\n 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,\n 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,\n 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,\n 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,\n 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,\n 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,\n 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,\n 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,\n 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,\n 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,\n 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,\n 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,\n 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,\n 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,\n 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,\n 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,\n 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,\n 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,\n 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,\n 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,\n 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,\n 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,\n 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,\n 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,\n 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,\n 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,\n 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,\n 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,\n 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,\n 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,\n];\n\nexport const C_ORIG = [0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944, 0x6f756274];\n","// oxlint-disable unicorn/prefer-code-point unicorn/prefer-math-trunc\nimport { BASE64_CODE, BASE64_INDEX } from \"./constant.js\";\n\n/**\n * Encodes a byte array to base64 with up to length bytes of input, using the custom bcrypt alphabet.\n *\n * @param byteArray Byte array\n * @param length Maximum input length\n *\n * @returns Encoded string\n */\nexport const encodeBase64 = (byteArray: number[] | Buffer, length: number): string => {\n if (length <= 0 || length > byteArray.length) throw new Error(`Illegal length: ${length}`);\n\n let off = 0;\n let c1: number;\n let c2: number;\n const result: string[] = [];\n\n while (off < length) {\n c1 = byteArray[off++] & 0xff;\n result.push(BASE64_CODE[(c1 >> 2) & 0x3f]);\n c1 = (c1 & 0x03) << 4;\n if (off >= length) {\n result.push(BASE64_CODE[c1 & 0x3f]);\n break;\n }\n c2 = byteArray[off++] & 0xff;\n c1 |= (c2 >> 4) & 0x0f;\n result.push(BASE64_CODE[c1 & 0x3f]);\n c1 = (c2 & 0x0f) << 2;\n if (off >= length) {\n result.push(BASE64_CODE[c1 & 0x3f]);\n break;\n }\n c2 = byteArray[off++] & 0xff;\n c1 |= (c2 >> 6) & 0x03;\n result.push(BASE64_CODE[c1 & 0x3f]);\n result.push(BASE64_CODE[c2 & 0x3f]);\n }\n\n return result.join(\"\");\n};\n\n/**\n * Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.\n *\n * @param contentString String to decode\n * @param length Maximum output length\n *\n * @returns Decoded bytes\n */\n// oxlint-disable-next-line max-statements\nexport const decodeBase64 = (contentString: string, length: number): number[] => {\n if (length <= 0) throw new Error(`Illegal length: ${length}`);\n\n const stringLength = contentString.length;\n let off = 0;\n let olen = 0;\n let c1: number;\n let c2: number;\n let c3: number;\n let c4: number;\n let o: number;\n let code: number;\n const result: string[] = [];\n\n while (off < stringLength - 1 && olen < length) {\n code = contentString.charCodeAt(off++);\n c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n code = contentString.charCodeAt(off++);\n c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n\n if (c1 === -1 || c2 === -1) break;\n\n o = (c1 << 2) >>> 0;\n o |= (c2 & 0x30) >> 4;\n result.push(String.fromCharCode(o));\n\n if (++olen >= length || off >= stringLength) break;\n\n code = contentString.charCodeAt(off++);\n c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n if (c3 === -1) break;\n o = ((c2 & 0x0f) << 4) >>> 0;\n o |= (c3 & 0x3c) >> 2;\n result.push(String.fromCharCode(o));\n\n if (++olen >= length || off >= stringLength) break;\n\n code = contentString.charCodeAt(off++);\n c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n o = ((c3 & 0x03) << 6) >>> 0;\n o |= c4;\n result.push(String.fromCharCode(o));\n\n ++olen;\n }\n\n return result.map((item) => item.charCodeAt(0));\n};\n","// oxlint-disable prefer-destructuring\nimport { nextTick } from \"nextTick\";\n\nimport { BLOWFISH_NUM_ROUNDS, C_ORIG, MAX_EXECUTION_TIME, P_ORIG, S_ORIG } from \"./constant.js\";\n\n// A base64 implementation for the bcrypt algorithm. This is partly non-standard.\n\n// oxlint-disable-next-line max-statements\nconst encipher = (\n lr: Int32Array<ArrayBuffer>,\n off: number,\n P: Int32Array<ArrayBuffer>,\n S: Int32Array<ArrayBuffer>,\n): Int32Array<ArrayBuffer> => {\n // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt\n let n: number;\n let l = lr[off];\n let r = lr[off + 1];\n\n l ^= P[0];\n\n //The following is an unrolled version of the above loop.\n //Iteration 0\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[1];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[2];\n //Iteration 1\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[3];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[4];\n //Iteration 2\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[5];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[6];\n //Iteration 3\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[7];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[8];\n //Iteration 4\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[9];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[10];\n //Iteration 5\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[11];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[12];\n //Iteration 6\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[13];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[14];\n //Iteration 7\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[15];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[16];\n\n lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];\n lr[off + 1] = l;\n\n return lr;\n};\n\nconst streamToWord = (data: number[], offp: number): { key: number; offp: number } => {\n let word = 0;\n\n for (let i = 0; i < 4; ++i) {\n word = (word << 8) | (data[offp] & 0xff);\n offp = (offp + 1) % data.length;\n }\n\n return { key: word, offp };\n};\n\nconst key = (key: number[], P: Int32Array<ArrayBuffer>, S: Int32Array<ArrayBuffer>): void => {\n const pLength = P.length;\n const sLength = S.length;\n let offp = 0;\n let lr = new Int32Array([0, 0]);\n let sw: {\n key: number;\n offp: number;\n };\n\n for (let i = 0; i < pLength; i++) {\n sw = streamToWord(key, offp);\n ({ offp } = sw);\n P[i] ^= sw.key;\n }\n\n for (let i = 0; i < pLength; i += 2) {\n lr = encipher(lr, 0, P, S);\n P[i] = lr[0];\n P[i + 1] = lr[1];\n }\n\n for (let i = 0; i < sLength; i += 2) {\n lr = encipher(lr, 0, P, S);\n S[i] = lr[0];\n S[i + 1] = lr[1];\n }\n};\n\n/**\n * Expensive key schedule Blowfish.\n *\n * @param data Data bytes\n * @param key Key bytes\n * @param P P-array\n * @param S S-boxes\n */\nconst expensiveKeyScheduleBlowFish = (\n data: number[],\n key: number[],\n P: Int32Array<ArrayBuffer>,\n S: Int32Array<ArrayBuffer>,\n): void => {\n const pLength = P.length;\n const sLength = S.length;\n let offp = 0;\n let lr = new Int32Array([0, 0]);\n let sw: {\n key: number;\n offp: number;\n };\n\n for (let i = 0; i < pLength; i++) {\n sw = streamToWord(key, offp);\n ({ offp } = sw);\n P[i] ^= sw.key;\n }\n\n offp = 0;\n\n for (let i = 0; i < pLength; i += 2) {\n sw = streamToWord(data, offp);\n ({ offp } = sw);\n lr[0] ^= sw.key;\n sw = streamToWord(data, offp);\n ({ offp } = sw);\n lr[1] ^= sw.key;\n lr = encipher(lr, 0, P, S);\n P[i] = lr[0];\n P[i + 1] = lr[1];\n }\n\n for (let i = 0; i < sLength; i += 2) {\n sw = streamToWord(data, offp);\n ({ offp } = sw);\n lr[0] ^= sw.key;\n sw = streamToWord(data, offp);\n ({ offp } = sw);\n lr[1] ^= sw.key;\n lr = encipher(lr, 0, P, S);\n S[i] = lr[0];\n S[i + 1] = lr[1];\n }\n};\n\n/**\n * Internally crypts a string.\n *\n * @param bytes Bytes to crypt\n * @param salt Salt bytes to use\n * @param rounds Number of rounds\n * @param progressCallback Callback called with the current progress\n * @param sync Whether to run synchronously\n *\n * @returns Crypted bytes\n */\n// oxlint-disable-next-line max-params\nexport const crypt = (\n bytes: number[],\n salt: number[],\n rounds: number,\n sync: boolean,\n progressCallback?: (progress: number) => void,\n): Promise<number[]> | number[] => {\n const cdata = new Int32Array(C_ORIG);\n const cLength = cdata.length;\n\n // oxlint-disable-next-line unicorn/prefer-math-trunc\n rounds = (1 << rounds) >>> 0;\n\n const P = new Int32Array(P_ORIG);\n const S = new Int32Array(S_ORIG);\n\n expensiveKeyScheduleBlowFish(salt, bytes, P, S);\n\n let round = 0;\n\n /**\n * Calculates the next round.\n *\n * @returns Next round or result\n */\n const next = (): Promise<number[] | void> | number[] | void => {\n if (progressCallback) progressCallback(round / rounds);\n\n if (round < rounds) {\n const start = Date.now();\n\n while (round < rounds) {\n round += 1;\n key(bytes, P, S);\n key(salt, P, S);\n if (Date.now() - start > MAX_EXECUTION_TIME) break;\n }\n } else {\n for (let i = 0; i < 64; i++) {\n for (let j = 0; j < cLength >> 1; j++) encipher(cdata, j << 1, P, S);\n }\n const result: number[] = [];\n\n for (let i = 0; i < cLength; i++) {\n result.push((cdata[i] >> 24) & 0xff);\n result.push((cdata[i] >> 16) & 0xff);\n result.push((cdata[i] >> 8) & 0xff);\n result.push(cdata[i] & 0xff);\n }\n\n if (!sync) return Promise.resolve(result);\n\n return result;\n }\n\n if (!sync) {\n return new Promise((resolve) =>\n // oxlint-disable-next-line no-promise-executor-return\n nextTick(() => {\n void (next() as Promise<number[] | undefined>).then(resolve);\n }),\n );\n }\n };\n\n if (!sync) return next() as Promise<number[]>;\n\n let result;\n\n do {\n result = next() as number[] | undefined;\n } while (!result);\n\n return result;\n};\n","/**\n * Generates cryptographically secure random bytes.\n *\n * @param length Bytes length\n * @returns Random bytes\n * @throws {Error} If no random implementation is available\n */\nexport const random = (length: number): number[] => {\n try {\n const array = new Uint32Array(length);\n\n globalThis.crypto.getRandomValues(array);\n\n return [...array];\n } catch {\n throw new Error(\"WebCryptoAPI / globalThis is not available\");\n }\n};\n","export const getIllegalArgumentsTypeError = (...args: unknown[]): Error =>\n new Error(`Illegal arguments: ${args.map((arg) => typeof arg).join(\", \")}`);\n","import { nextTick } from \"nextTick\";\nimport { random } from \"random\";\n\nimport { encodeBase64 } from \"./base64.js\";\nimport { BCRYPT_SALT_LEN, GENERATE_SALT_DEFAULT_LOG2_ROUNDS } from \"./constant.js\";\nimport { getIllegalArgumentsTypeError } from \"./utils.js\";\n\n/**\n * Synchronously generates a salt.\n *\n * @param rounds Number of rounds to use, defaults to 10 if omitted\n * @returns Resulting salt\n * @throws {Error} If a random fallback is required but not set\n */\nexport const genSaltSync = (rounds = GENERATE_SALT_DEFAULT_LOG2_ROUNDS): string => {\n if (typeof rounds !== \"number\") throw getIllegalArgumentsTypeError(rounds);\n\n rounds = rounds < 4 ? 4 : Math.min(31, rounds);\n\n return `$2b$${rounds < 10 ? \"0\" : \"\"}${rounds}$${encodeBase64(random(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)}`;\n};\n\n/**\n * Asynchronously generates a salt.\n *\n * @param rounds Number of rounds to use, defaults to 10 if omitted\n * @returns Promise resolving to the resulting salt\n */\nexport const genSalt = (rounds = GENERATE_SALT_DEFAULT_LOG2_ROUNDS): Promise<string> =>\n new Promise((resolve, reject) =>\n // oxlint-disable-next-line no-promise-executor-return\n nextTick(() => {\n try {\n resolve(genSaltSync(rounds));\n } catch (err) {\n reject(err as Error);\n }\n }),\n );\n","// oxlint-disable unicorn/prefer-code-point\n\n/**\n * Calculates the byte length of a string encoded as UTF8.\n *\n * @param content String to measure\n * @returns Byte length\n */\nexport const getUTF8ByteLength = (content: string): number => {\n let charCodePoint = 0;\n let length = 0;\n\n for (let i = 0; i < content.length; ++i) {\n charCodePoint = content.charCodeAt(i);\n if (charCodePoint < 128) length += 1;\n else if (charCodePoint < 2048) length += 2;\n else if (\n (charCodePoint & 0xfc00) === 0xd800 &&\n (content.charCodeAt(i + 1) & 0xfc00) === 0xdc00\n ) {\n i++;\n length += 4;\n } else length += 3;\n }\n\n return length;\n};\n\n/**\n * Converts a string to an array of UTF8 bytes.\n *\n * @param content String to convert\n * @returns Byte array\n */\nexport const convertToUFT8Bytes = (content: string): number[] => {\n let offset = 0;\n let c1;\n let c2;\n\n // oxlint-disable-next-line unicorn/no-new-array\n const buffer = new Array<number>(getUTF8ByteLength(content));\n\n for (let i = 0, k = content.length; i < k; ++i) {\n c1 = content.charCodeAt(i);\n if (c1 < 128) {\n buffer[offset++] = c1;\n } else if (c1 < 2048) {\n buffer[offset++] = (c1 >> 6) | 192;\n buffer[offset++] = (c1 & 63) | 128;\n } else if ((c1 & 0xfc00) === 0xd800 && ((c2 = content.charCodeAt(i + 1)) & 0xfc00) === 0xdc00) {\n c1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff);\n ++i;\n buffer[offset++] = (c1 >> 18) | 240;\n buffer[offset++] = ((c1 >> 12) & 63) | 128;\n buffer[offset++] = ((c1 >> 6) & 63) | 128;\n buffer[offset++] = (c1 & 63) | 128;\n } else {\n buffer[offset++] = (c1 >> 12) | 224;\n buffer[offset++] = ((c1 >> 6) & 63) | 128;\n buffer[offset++] = (c1 & 63) | 128;\n }\n }\n\n return buffer;\n};\n","// oxlint-disable unicorn/prefer-code-point\n\nimport { decodeBase64, encodeBase64 } from \"./base64.js\";\nimport { BCRYPT_SALT_LEN, C_ORIG, GENERATE_SALT_DEFAULT_LOG2_ROUNDS } from \"./constant.js\";\nimport { crypt } from \"./crypt.js\";\nimport { genSalt, genSaltSync } from \"./salt.js\";\nimport { convertToUFT8Bytes } from \"./uft8.js\";\n\n/**\n * Internally hashes a string.\n *\n * @param content String to hash\n * @param salt Salt to use\n * @param progressCallback Callback called with the current progress\n * @param sync Whether to run synchronously\n *\n * @returns Resulting hash\n */\n// oxlint-disable-next-line max-statements\nconst _hash = (\n content: string,\n salt: string,\n sync: boolean,\n progressCallback?: (progress: number) => void,\n): Promise<string> | string => {\n if (typeof content !== \"string\" || typeof salt !== \"string\") {\n const err = new Error(\"Invalid content / salt: not a string\");\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n\n // Validate the salt\n let minor: string;\n let offset: number;\n\n if (salt.charAt(0) !== \"$\" || salt.charAt(1) !== \"2\") {\n const err = new Error(`Invalid salt version: ${salt.slice(0, 2)}`);\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n\n if (salt.charAt(2) === \"$\") {\n minor = String.fromCharCode(0);\n offset = 3;\n } else {\n minor = salt.charAt(2);\n if ((minor !== \"a\" && minor !== \"b\" && minor !== \"y\") || salt.charAt(3) !== \"$\") {\n const err = new Error(`Invalid salt revision: ${salt.slice(2, 4)}`);\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n offset = 4;\n }\n\n const roundText = salt.slice(offset, offset + 2);\n const rounds = /\\d\\d/.test(roundText) ? Number(roundText) : null;\n\n // Extract number of rounds\n if (rounds === null) {\n const err = new Error(\"Missing salt rounds\");\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n\n if (rounds < 4 || rounds > 31) {\n const err = new Error(`Illegal number of rounds (4-31): ${rounds}`);\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n\n const realSalt = salt.slice(offset + 3, offset + 25);\n\n content += minor >= \"a\" ? \"\\u0000\" : \"\";\n\n const passwordBytes = convertToUFT8Bytes(content),\n saltBytes = decodeBase64(realSalt, BCRYPT_SALT_LEN);\n\n if (saltBytes.length !== BCRYPT_SALT_LEN) {\n const err = new Error(`Illegal salt: ${realSalt}`);\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n\n /**\n * Finishes hashing.\n * @param bytes Byte array\n *\n * @returns Resulting hash\n */\n const finish = (bytes: number[]): string =>\n `$2${minor >= \"a\" ? minor : \"\"}$${rounds < 10 ? \"0\" : \"\"}${rounds}$${encodeBase64(\n saltBytes,\n BCRYPT_SALT_LEN,\n )}${encodeBase64(bytes, C_ORIG.length * 4 - 1)}`;\n\n // Sync\n if (!sync) {\n return (\n crypt(passwordBytes, saltBytes, rounds, false, progressCallback) as Promise<number[]>\n ).then((bytes) => finish(bytes));\n }\n\n return finish(crypt(passwordBytes, saltBytes, rounds, true, progressCallback) as number[]);\n};\n\n/**\n * Synchronously generates a hash for the given string.\n *\n * @param contentString String to hash\n * @param salt Salt length to generate or salt to use, default to 10\n * @returns Resulting hash\n */\nexport const hashSync = (\n contentString: string,\n salt: string | number = GENERATE_SALT_DEFAULT_LOG2_ROUNDS,\n): string =>\n _hash(contentString, typeof salt === \"number\" ? genSaltSync(salt) : salt, true) as string;\n\n/**\n * Asynchronously generates a hash for the given string.\n *\n * @param contentString String to hash\n * @param salt Salt length to generate or salt to use\n * @param progressCallback Callback successively called with the percentage of rounds completed\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\n *\n * @returns Promise resolving to the resulting hash\n */\nexport const hash = async (\n contentString: string,\n salt: number | string,\n progressCallback?: (progress: number) => void,\n): Promise<string> =>\n _hash(\n contentString,\n typeof salt === \"number\" ? await genSalt(salt) : salt,\n false,\n progressCallback,\n ) as Promise<string>;\n","import { nextTick } from \"nextTick\";\n\nimport { hash as hashAsync, hashSync } from \"./hash.js\";\nimport { getIllegalArgumentsTypeError } from \"./utils.js\";\n\n/**\n * Synchronously tests a string against a hash.\n *\n * @param content String to compare\n * @param hash Hash to test against\n *\n * @returns `true` if the string matches the hash, `false` otherwise\n */\nexport const compareSync = (content: string, hash: string): boolean => {\n if (typeof content !== \"string\" || typeof hash !== \"string\") {\n throw getIllegalArgumentsTypeError(content, hash);\n }\n\n if (hash.length !== 60) return false;\n\n return hashSync(content, hash.slice(0, 29)) === hash;\n};\n\n/**\n * Asynchronously compares the given data against the given hash.\n *\n * @param content Data to compare\n * @param hash Data to be compared to\n * @param progressCallback Callback successively called with the percentage of rounds completed\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\n *\n * @returns Promise resolving to `true` if the data matches the hash, `false` otherwise\n */\nexport const compare = (\n content: string,\n hash: string,\n progressCallback?: (percent: number) => void,\n): Promise<boolean> =>\n new Promise((resolve, reject) => {\n if (typeof content !== \"string\" || typeof hash !== \"string\") {\n nextTick(() => reject(new Error(`Illegal arguments: ${typeof content}, ${typeof hash}`)));\n\n return;\n }\n\n if (hash.length !== 60) {\n nextTick(() => resolve(false));\n\n return;\n }\n\n hashAsync(content, hash.slice(0, 29), progressCallback)\n .then((comp) => resolve(comp === hash))\n // oxlint-disable-next-line promise/prefer-await-to-callbacks\n .catch((err: unknown) => reject(err as Error));\n });\n","import { getUTF8ByteLength } from \"./uft8.js\";\nimport { getIllegalArgumentsTypeError } from \"./utils.js\";\n\n/**\n * Gets the number of rounds used to encrypt the specified hash.\n *\n * @param hash Hash to extract the used number of rounds from\n * @returns Number of rounds used\n * @throws {Error} If `hash` is not a string\n */\nexport const getRounds = (hash: string): number => {\n if (typeof hash !== \"string\") throw getIllegalArgumentsTypeError(hash);\n\n return parseInt(hash.split(\"$\")[2], 10);\n};\n\n/**\n * Gets the salt portion from a hash. Does not validate the hash.\n *\n * @param hash Hash to extract the salt from\n * @returns Extracted salt part\n * @throws {Error} If `hash` is not a string or otherwise invalid\n */\nexport const getSalt = (hash: string): string => {\n if (typeof hash !== \"string\") throw getIllegalArgumentsTypeError(hash);\n\n if (hash.length !== 60) throw new Error(`Illegal hash length: ${hash.length} != 60`);\n\n return hash.slice(0, 29);\n};\n\n/**\n * Tests if a content will be truncated when hashed, that is its length is\n * greater than 72 bytes when converted to UTF-8.\n * @param content The content to test\n * @returns `true` if truncated, otherwise `false`\n */\nexport const truncates = (content: string): boolean => {\n if (typeof content !== \"string\") throw getIllegalArgumentsTypeError(content);\n\n return getUTF8ByteLength(content) > 72;\n};\n"],"mappings":"AAmBA,MAAa,EACX,OAAO,WAAc,UAAY,OAAO,UAAU,UAAa,WAC3D,UAAU,SAAS,KAAK,UAAU,CAClC,WCZO,EAAc,CAAC,GAAG,mEAAmE,CAErF,EAAe,CAC1B,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5F,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAC9F,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAC5F,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5F,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5F,GAAI,GAAI,GAAI,GAAI,GACjB,CAEY,EAAS,CACpB,UAAY,WAAY,UAAY,SAAY,WAAY,UAAY,UAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WACb,CAEY,EAAS,CACpB,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,QAAY,UAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UACpF,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UACpF,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,SAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,QAAY,UACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,SACpF,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,SAAY,SACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UACpF,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,SAAY,UAAY,WAAY,UAAY,WACpF,WAAY,UAAY,SAAY,UAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY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"}
@@ -1,8 +1,11 @@
1
+ //#region src/compare.d.ts
1
2
  /**
2
3
  * Synchronously tests a string against a hash.
3
4
  *
4
5
  * @param content String to compare
5
6
  * @param hash Hash to test against
7
+ *
8
+ * @returns `true` if the string matches the hash, `false` otherwise
6
9
  */
7
10
  declare const compareSync: (content: string, hash: string) => boolean;
8
11
  /**
@@ -12,9 +15,12 @@ declare const compareSync: (content: string, hash: string) => boolean;
12
15
  * @param hash Data to be compared to
13
16
  * @param progressCallback Callback successively called with the percentage of rounds completed
14
17
  * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
18
+ *
19
+ * @returns Promise resolving to `true` if the data matches the hash, `false` otherwise
15
20
  */
16
21
  declare const compare: (content: string, hash: string, progressCallback?: (percent: number) => void) => Promise<boolean>;
17
-
22
+ //#endregion
23
+ //#region src/hash.d.ts
18
24
  /**
19
25
  * Synchronously generates a hash for the given string.
20
26
  *
@@ -30,9 +36,12 @@ declare const hashSync: (contentString: string, salt?: string | number) => strin
30
36
  * @param salt Salt length to generate or salt to use
31
37
  * @param progressCallback Callback successively called with the percentage of rounds completed
32
38
  * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
39
+ *
40
+ * @returns Promise resolving to the resulting hash
33
41
  */
34
42
  declare const hash: (contentString: string, salt: number | string, progressCallback?: (progress: number) => void) => Promise<string>;
35
-
43
+ //#endregion
44
+ //#region src/helpers.d.ts
36
45
  /**
37
46
  * Gets the number of rounds used to encrypt the specified hash.
38
47
  *
@@ -56,7 +65,8 @@ declare const getSalt: (hash: string) => string;
56
65
  * @returns `true` if truncated, otherwise `false`
57
66
  */
58
67
  declare const truncates: (content: string) => boolean;
59
-
68
+ //#endregion
69
+ //#region src/salt.d.ts
60
70
  /**
61
71
  * Synchronously generates a salt.
62
72
  *
@@ -69,7 +79,9 @@ declare const genSaltSync: (rounds?: number) => string;
69
79
  * Asynchronously generates a salt.
70
80
  *
71
81
  * @param rounds Number of rounds to use, defaults to 10 if omitted
82
+ * @returns Promise resolving to the resulting salt
72
83
  */
73
84
  declare const genSalt: (rounds?: number) => Promise<string>;
74
-
85
+ //#endregion
75
86
  export { compare, compareSync, genSalt, genSaltSync, getRounds, getSalt, hash, hashSync, truncates };
87
+ //# sourceMappingURL=node.d.ts.map
package/dist/node.js ADDED
@@ -0,0 +1,2 @@
1
+ const e=process.env.NEXT_RUNTIME===`edge`?setTimeout:setImmediate,t=[...`./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`],n=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,54,55,56,57,58,59,60,61,62,63,-1,-1,-1,-1,-1,-1,-1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,-1,-1,-1,-1,-1,-1,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,-1,-1,-1,-1,-1],r=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],i=[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946,1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055,3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504,976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462],a=[1332899944,1700884034,1701343084,1684370003,1668446532,1869963892],o=(e,n)=>{if(n<=0||n>e.length)throw Error(`Illegal length: ${n}`);let r=0,i,a,o=[];for(;r<n;){if(i=e[r++]&255,o.push(t[i>>2&63]),i=(i&3)<<4,r>=n){o.push(t[i&63]);break}if(a=e[r++]&255,i|=a>>4&15,o.push(t[i&63]),i=(a&15)<<2,r>=n){o.push(t[i&63]);break}a=e[r++]&255,i|=a>>6&3,o.push(t[i&63]),o.push(t[a&63])}return o.join(``)},s=(e,t)=>{if(t<=0)throw Error(`Illegal length: ${t}`);let r=e.length,i=0,a=0,o,s,c,l,u,d,f=[];for(;i<r-1&&a<t&&(d=e.charCodeAt(i++),o=d<n.length?n[d]:-1,d=e.charCodeAt(i++),s=d<n.length?n[d]:-1,!(o===-1||s===-1||(u=o<<2>>>0,u|=(s&48)>>4,f.push(String.fromCharCode(u)),++a>=t||i>=r)||(d=e.charCodeAt(i++),c=d<n.length?n[d]:-1,c===-1)||(u=(s&15)<<4>>>0,u|=(c&60)>>2,f.push(String.fromCharCode(u)),++a>=t||i>=r)));)d=e.charCodeAt(i++),l=d<n.length?n[d]:-1,u=(c&3)<<6>>>0,u|=l,f.push(String.fromCharCode(u)),++a;return f.map(e=>e.charCodeAt(0))},c=(e,t,n,r)=>{let i,a=e[t],o=e[t+1];return a^=n[0],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[1],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[2],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[3],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[4],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[5],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[6],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[7],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[8],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[9],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[10],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[11],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[12],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[13],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[14],i=r[a>>>24],i+=r[256|a>>16&255],i^=r[512|a>>8&255],i+=r[768|a&255],o^=i^n[15],i=r[o>>>24],i+=r[256|o>>16&255],i^=r[512|o>>8&255],i+=r[768|o&255],a^=i^n[16],e[t]=o^n[17],e[t+1]=a,e},l=(e,t)=>{let n=0;for(let r=0;r<4;++r)n=n<<8|e[t]&255,t=(t+1)%e.length;return{key:n,offp:t}},u=(e,t,n)=>{let r=t.length,i=n.length,a=0,o=new Int32Array([0,0]),s;for(let n=0;n<r;n++)s=l(e,a),{offp:a}=s,t[n]^=s.key;for(let e=0;e<r;e+=2)o=c(o,0,t,n),t[e]=o[0],t[e+1]=o[1];for(let e=0;e<i;e+=2)o=c(o,0,t,n),n[e]=o[0],n[e+1]=o[1]},d=(e,t,n,r)=>{let i=n.length,a=r.length,o=0,s=new Int32Array([0,0]),u;for(let e=0;e<i;e++)u=l(t,o),{offp:o}=u,n[e]^=u.key;o=0;for(let t=0;t<i;t+=2)u=l(e,o),{offp:o}=u,s[0]^=u.key,u=l(e,o),{offp:o}=u,s[1]^=u.key,s=c(s,0,n,r),n[t]=s[0],n[t+1]=s[1];for(let t=0;t<a;t+=2)u=l(e,o),{offp:o}=u,s[0]^=u.key,u=l(e,o),{offp:o}=u,s[1]^=u.key,s=c(s,0,n,r),r[t]=s[0],r[t+1]=s[1]},f=(t,n,o,s,l)=>{let f=new Int32Array(a),p=f.length;o=1<<o>>>0;let m=new Int32Array(r),h=new Int32Array(i);d(n,t,m,h);let g=0,_=()=>{if(l&&l(g/o),g<o){let e=Date.now();for(;g<o&&(g+=1,u(t,m,h),u(n,m,h),!(Date.now()-e>100)););}else{for(let e=0;e<64;e++)for(let e=0;e<p>>1;e++)c(f,e<<1,m,h);let e=[];for(let t=0;t<p;t++)e.push(f[t]>>24&255),e.push(f[t]>>16&255),e.push(f[t]>>8&255),e.push(f[t]&255);return s?e:Promise.resolve(e)}if(!s)return new Promise(t=>e(()=>{_().then(t)}))};if(!s)return _();let v;do v=_();while(!v);return v},p=e=>globalThis.crypto.getRandomValues(new Uint8Array(e)),m=(...e)=>Error(`Illegal arguments: ${e.map(e=>typeof e).join(`, `)}`),h=(e=10)=>{if(typeof e!=`number`)throw m(e);return e=e<4?4:Math.min(31,e),`$2b$${e<10?`0`:``}${e}$${o(p(16),16)}`},g=(t=10)=>new Promise((n,r)=>e(()=>{try{n(h(t))}catch(e){r(e)}})),_=e=>{let t=0,n=0;for(let r=0;r<e.length;++r)t=e.charCodeAt(r),t<128?n+=1:t<2048?n+=2:(t&64512)==55296&&(e.charCodeAt(r+1)&64512)==56320?(r++,n+=4):n+=3;return n},v=e=>{let t=0,n,r,i=Array(_(e));for(let a=0,o=e.length;a<o;++a)n=e.charCodeAt(a),n<128?i[t++]=n:n<2048?(i[t++]=n>>6|192,i[t++]=n&63|128):(n&64512)==55296&&((r=e.charCodeAt(a+1))&64512)==56320?(n=65536+((n&1023)<<10)+(r&1023),++a,i[t++]=n>>18|240,i[t++]=n>>12&63|128,i[t++]=n>>6&63|128,i[t++]=n&63|128):(i[t++]=n>>12|224,i[t++]=n>>6&63|128,i[t++]=n&63|128);return i},y=(e,t,n,r)=>{if(typeof e!=`string`||typeof t!=`string`){let e=Error(`Invalid content / salt: not a string`);if(!n)return Promise.reject(e);throw e}let i,c;if(t.charAt(0)!==`$`||t.charAt(1)!==`2`){let e=Error(`Invalid salt version: ${t.slice(0,2)}`);if(!n)return Promise.reject(e);throw e}if(t.charAt(2)===`$`)i=`\0`,c=3;else{if(i=t.charAt(2),i!==`a`&&i!==`b`&&i!==`y`||t.charAt(3)!==`$`){let e=Error(`Invalid salt revision: ${t.slice(2,4)}`);if(!n)return Promise.reject(e);throw e}c=4}let l=t.slice(c,c+2),u=/\d\d/.test(l)?Number(l):null;if(u===null){let e=Error(`Missing salt rounds`);if(!n)return Promise.reject(e);throw e}if(u<4||u>31){let e=Error(`Illegal number of rounds (4-31): ${u}`);if(!n)return Promise.reject(e);throw e}let d=t.slice(c+3,c+25);e+=i>=`a`?`\0`:``;let p=v(e),m=s(d,16);if(m.length!==16){let e=Error(`Illegal salt: ${d}`);if(!n)return Promise.reject(e);throw e}let h=e=>`$2${i>=`a`?i:``}$${u<10?`0`:``}${u}$${o(m,16)}${o(e,a.length*4-1)}`;return n?h(f(p,m,u,!0,r)):f(p,m,u,!1,r).then(e=>h(e))},b=(e,t=10)=>y(e,typeof t==`number`?h(t):t,!0),x=async(e,t,n)=>y(e,typeof t==`number`?await g(t):t,!1,n),S=(e,t)=>{if(typeof e!=`string`||typeof t!=`string`)throw m(e,t);return t.length===60?b(e,t.slice(0,29))===t:!1},C=(t,n,r)=>new Promise((i,a)=>{if(typeof t!=`string`||typeof n!=`string`){e(()=>a(Error(`Illegal arguments: ${typeof t}, ${typeof n}`)));return}if(n.length!==60){e(()=>i(!1));return}x(t,n.slice(0,29),r).then(e=>i(e===n)).catch(e=>a(e))}),w=e=>{if(typeof e!=`string`)throw m(e);return parseInt(e.split(`$`)[2],10)},T=e=>{if(typeof e!=`string`)throw m(e);if(e.length!==60)throw Error(`Illegal hash length: ${e.length} != 60`);return e.slice(0,29)},E=e=>{if(typeof e!=`string`)throw m(e);return _(e)>72};export{C as compare,S as compareSync,g as genSalt,h as genSaltSync,w as getRounds,T as getSalt,x as hash,b as hashSync,E as truncates};
2
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","names":["hash"],"sources":["../src/nextTick/node.ts","../src/constant.ts","../src/base64.ts","../src/crypt.ts","../src/random/node.ts","../src/utils.ts","../src/salt.ts","../src/uft8.ts","../src/hash.ts","../src/compare.ts","../src/helpers.ts"],"sourcesContent":["/**\n * Continues with the callback on the next tick.\n */\nexport const nextTick: (callback: () => void) => void =\n process.env.NEXT_RUNTIME === \"edge\"\n ? /* istanbul ignore next -- @preserve */\n setTimeout\n : setImmediate;\n","// oxlint-disable no-magic-numbers\n\nexport const BCRYPT_SALT_LEN = 16;\n\nexport const GENERATE_SALT_DEFAULT_LOG2_ROUNDS = 10;\n\nexport const BLOWFISH_NUM_ROUNDS = 16;\n\nexport const MAX_EXECUTION_TIME = 100;\n\nexport const BASE64_CODE = [...\"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"];\n\nexport const BASE64_INDEX = [\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 54,\n 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,\n 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29,\n 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,\n -1, -1, -1, -1, -1,\n];\n\nexport const P_ORIG = [\n 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,\n 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,\n 0x9216d5d9, 0x8979fb1b,\n];\n\nexport const S_ORIG = [\n 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,\n 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,\n 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,\n 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,\n 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,\n 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,\n 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,\n 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,\n 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,\n 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,\n 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,\n 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,\n 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,\n 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,\n 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,\n 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,\n 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,\n 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,\n 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,\n 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,\n 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,\n 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,\n 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,\n 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,\n 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\n 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,\n 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,\n 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,\n 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,\n 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,\n 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,\n 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,\n 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,\n 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,\n 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,\n 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,\n 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,\n 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,\n 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,\n 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\n 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,\n 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,\n 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,\n 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,\n 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,\n 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,\n 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,\n 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,\n 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,\n 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,\n 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,\n 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,\n 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,\n 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,\n 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,\n 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,\n 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,\n 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,\n 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,\n 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\n 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,\n 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,\n 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,\n 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,\n 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,\n 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,\n 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,\n 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,\n 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,\n 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,\n 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,\n 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,\n 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,\n 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,\n 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\n 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,\n 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,\n 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,\n 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,\n 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,\n 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,\n 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,\n 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,\n 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,\n 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,\n 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,\n 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,\n 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,\n 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,\n 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,\n 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,\n 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,\n 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,\n 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,\n 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,\n 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,\n 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,\n 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,\n 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,\n 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,\n 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,\n 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,\n 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,\n 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,\n 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,\n 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,\n 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,\n 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,\n];\n\nexport const C_ORIG = [0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944, 0x6f756274];\n","// oxlint-disable unicorn/prefer-code-point unicorn/prefer-math-trunc\nimport { BASE64_CODE, BASE64_INDEX } from \"./constant.js\";\n\n/**\n * Encodes a byte array to base64 with up to length bytes of input, using the custom bcrypt alphabet.\n *\n * @param byteArray Byte array\n * @param length Maximum input length\n *\n * @returns Encoded string\n */\nexport const encodeBase64 = (byteArray: number[] | Buffer, length: number): string => {\n if (length <= 0 || length > byteArray.length) throw new Error(`Illegal length: ${length}`);\n\n let off = 0;\n let c1: number;\n let c2: number;\n const result: string[] = [];\n\n while (off < length) {\n c1 = byteArray[off++] & 0xff;\n result.push(BASE64_CODE[(c1 >> 2) & 0x3f]);\n c1 = (c1 & 0x03) << 4;\n if (off >= length) {\n result.push(BASE64_CODE[c1 & 0x3f]);\n break;\n }\n c2 = byteArray[off++] & 0xff;\n c1 |= (c2 >> 4) & 0x0f;\n result.push(BASE64_CODE[c1 & 0x3f]);\n c1 = (c2 & 0x0f) << 2;\n if (off >= length) {\n result.push(BASE64_CODE[c1 & 0x3f]);\n break;\n }\n c2 = byteArray[off++] & 0xff;\n c1 |= (c2 >> 6) & 0x03;\n result.push(BASE64_CODE[c1 & 0x3f]);\n result.push(BASE64_CODE[c2 & 0x3f]);\n }\n\n return result.join(\"\");\n};\n\n/**\n * Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.\n *\n * @param contentString String to decode\n * @param length Maximum output length\n *\n * @returns Decoded bytes\n */\n// oxlint-disable-next-line max-statements\nexport const decodeBase64 = (contentString: string, length: number): number[] => {\n if (length <= 0) throw new Error(`Illegal length: ${length}`);\n\n const stringLength = contentString.length;\n let off = 0;\n let olen = 0;\n let c1: number;\n let c2: number;\n let c3: number;\n let c4: number;\n let o: number;\n let code: number;\n const result: string[] = [];\n\n while (off < stringLength - 1 && olen < length) {\n code = contentString.charCodeAt(off++);\n c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n code = contentString.charCodeAt(off++);\n c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n\n if (c1 === -1 || c2 === -1) break;\n\n o = (c1 << 2) >>> 0;\n o |= (c2 & 0x30) >> 4;\n result.push(String.fromCharCode(o));\n\n if (++olen >= length || off >= stringLength) break;\n\n code = contentString.charCodeAt(off++);\n c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n if (c3 === -1) break;\n o = ((c2 & 0x0f) << 4) >>> 0;\n o |= (c3 & 0x3c) >> 2;\n result.push(String.fromCharCode(o));\n\n if (++olen >= length || off >= stringLength) break;\n\n code = contentString.charCodeAt(off++);\n c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n o = ((c3 & 0x03) << 6) >>> 0;\n o |= c4;\n result.push(String.fromCharCode(o));\n\n ++olen;\n }\n\n return result.map((item) => item.charCodeAt(0));\n};\n","// oxlint-disable prefer-destructuring\nimport { nextTick } from \"nextTick\";\n\nimport { BLOWFISH_NUM_ROUNDS, C_ORIG, MAX_EXECUTION_TIME, P_ORIG, S_ORIG } from \"./constant.js\";\n\n// A base64 implementation for the bcrypt algorithm. This is partly non-standard.\n\n// oxlint-disable-next-line max-statements\nconst encipher = (\n lr: Int32Array<ArrayBuffer>,\n off: number,\n P: Int32Array<ArrayBuffer>,\n S: Int32Array<ArrayBuffer>,\n): Int32Array<ArrayBuffer> => {\n // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt\n let n: number;\n let l = lr[off];\n let r = lr[off + 1];\n\n l ^= P[0];\n\n //The following is an unrolled version of the above loop.\n //Iteration 0\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[1];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[2];\n //Iteration 1\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[3];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[4];\n //Iteration 2\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[5];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[6];\n //Iteration 3\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[7];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[8];\n //Iteration 4\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[9];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[10];\n //Iteration 5\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[11];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[12];\n //Iteration 6\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[13];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[14];\n //Iteration 7\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[15];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[16];\n\n lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];\n lr[off + 1] = l;\n\n return lr;\n};\n\nconst streamToWord = (data: number[], offp: number): { key: number; offp: number } => {\n let word = 0;\n\n for (let i = 0; i < 4; ++i) {\n word = (word << 8) | (data[offp] & 0xff);\n offp = (offp + 1) % data.length;\n }\n\n return { key: word, offp };\n};\n\nconst key = (key: number[], P: Int32Array<ArrayBuffer>, S: Int32Array<ArrayBuffer>): void => {\n const pLength = P.length;\n const sLength = S.length;\n let offp = 0;\n let lr = new Int32Array([0, 0]);\n let sw: {\n key: number;\n offp: number;\n };\n\n for (let i = 0; i < pLength; i++) {\n sw = streamToWord(key, offp);\n ({ offp } = sw);\n P[i] ^= sw.key;\n }\n\n for (let i = 0; i < pLength; i += 2) {\n lr = encipher(lr, 0, P, S);\n P[i] = lr[0];\n P[i + 1] = lr[1];\n }\n\n for (let i = 0; i < sLength; i += 2) {\n lr = encipher(lr, 0, P, S);\n S[i] = lr[0];\n S[i + 1] = lr[1];\n }\n};\n\n/**\n * Expensive key schedule Blowfish.\n *\n * @param data Data bytes\n * @param key Key bytes\n * @param P P-array\n * @param S S-boxes\n */\nconst expensiveKeyScheduleBlowFish = (\n data: number[],\n key: number[],\n P: Int32Array<ArrayBuffer>,\n S: Int32Array<ArrayBuffer>,\n): void => {\n const pLength = P.length;\n const sLength = S.length;\n let offp = 0;\n let lr = new Int32Array([0, 0]);\n let sw: {\n key: number;\n offp: number;\n };\n\n for (let i = 0; i < pLength; i++) {\n sw = streamToWord(key, offp);\n ({ offp } = sw);\n P[i] ^= sw.key;\n }\n\n offp = 0;\n\n for (let i = 0; i < pLength; i += 2) {\n sw = streamToWord(data, offp);\n ({ offp } = sw);\n lr[0] ^= sw.key;\n sw = streamToWord(data, offp);\n ({ offp } = sw);\n lr[1] ^= sw.key;\n lr = encipher(lr, 0, P, S);\n P[i] = lr[0];\n P[i + 1] = lr[1];\n }\n\n for (let i = 0; i < sLength; i += 2) {\n sw = streamToWord(data, offp);\n ({ offp } = sw);\n lr[0] ^= sw.key;\n sw = streamToWord(data, offp);\n ({ offp } = sw);\n lr[1] ^= sw.key;\n lr = encipher(lr, 0, P, S);\n S[i] = lr[0];\n S[i + 1] = lr[1];\n }\n};\n\n/**\n * Internally crypts a string.\n *\n * @param bytes Bytes to crypt\n * @param salt Salt bytes to use\n * @param rounds Number of rounds\n * @param progressCallback Callback called with the current progress\n * @param sync Whether to run synchronously\n *\n * @returns Crypted bytes\n */\n// oxlint-disable-next-line max-params\nexport const crypt = (\n bytes: number[],\n salt: number[],\n rounds: number,\n sync: boolean,\n progressCallback?: (progress: number) => void,\n): Promise<number[]> | number[] => {\n const cdata = new Int32Array(C_ORIG);\n const cLength = cdata.length;\n\n // oxlint-disable-next-line unicorn/prefer-math-trunc\n rounds = (1 << rounds) >>> 0;\n\n const P = new Int32Array(P_ORIG);\n const S = new Int32Array(S_ORIG);\n\n expensiveKeyScheduleBlowFish(salt, bytes, P, S);\n\n let round = 0;\n\n /**\n * Calculates the next round.\n *\n * @returns Next round or result\n */\n const next = (): Promise<number[] | void> | number[] | void => {\n if (progressCallback) progressCallback(round / rounds);\n\n if (round < rounds) {\n const start = Date.now();\n\n while (round < rounds) {\n round += 1;\n key(bytes, P, S);\n key(salt, P, S);\n if (Date.now() - start > MAX_EXECUTION_TIME) break;\n }\n } else {\n for (let i = 0; i < 64; i++) {\n for (let j = 0; j < cLength >> 1; j++) encipher(cdata, j << 1, P, S);\n }\n const result: number[] = [];\n\n for (let i = 0; i < cLength; i++) {\n result.push((cdata[i] >> 24) & 0xff);\n result.push((cdata[i] >> 16) & 0xff);\n result.push((cdata[i] >> 8) & 0xff);\n result.push(cdata[i] & 0xff);\n }\n\n if (!sync) return Promise.resolve(result);\n\n return result;\n }\n\n if (!sync) {\n return new Promise((resolve) =>\n // oxlint-disable-next-line no-promise-executor-return\n nextTick(() => {\n void (next() as Promise<number[] | undefined>).then(resolve);\n }),\n );\n }\n };\n\n if (!sync) return next() as Promise<number[]>;\n\n let result;\n\n do {\n result = next() as number[] | undefined;\n } while (!result);\n\n return result;\n};\n","/**\n * Generates cryptographically secure random bytes.\n *\n * @param length Bytes length\n * @returns Random bytes\n * @throws {Error} If no random implementation is available\n */\nexport const random = (length: number): Buffer | Uint8Array<ArrayBuffer> =>\n globalThis.crypto.getRandomValues(new Uint8Array(length));\n","export const getIllegalArgumentsTypeError = (...args: unknown[]): Error =>\n new Error(`Illegal arguments: ${args.map((arg) => typeof arg).join(\", \")}`);\n","import { nextTick } from \"nextTick\";\nimport { random } from \"random\";\n\nimport { encodeBase64 } from \"./base64.js\";\nimport { BCRYPT_SALT_LEN, GENERATE_SALT_DEFAULT_LOG2_ROUNDS } from \"./constant.js\";\nimport { getIllegalArgumentsTypeError } from \"./utils.js\";\n\n/**\n * Synchronously generates a salt.\n *\n * @param rounds Number of rounds to use, defaults to 10 if omitted\n * @returns Resulting salt\n * @throws {Error} If a random fallback is required but not set\n */\nexport const genSaltSync = (rounds = GENERATE_SALT_DEFAULT_LOG2_ROUNDS): string => {\n if (typeof rounds !== \"number\") throw getIllegalArgumentsTypeError(rounds);\n\n rounds = rounds < 4 ? 4 : Math.min(31, rounds);\n\n return `$2b$${rounds < 10 ? \"0\" : \"\"}${rounds}$${encodeBase64(random(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)}`;\n};\n\n/**\n * Asynchronously generates a salt.\n *\n * @param rounds Number of rounds to use, defaults to 10 if omitted\n * @returns Promise resolving to the resulting salt\n */\nexport const genSalt = (rounds = GENERATE_SALT_DEFAULT_LOG2_ROUNDS): Promise<string> =>\n new Promise((resolve, reject) =>\n // oxlint-disable-next-line no-promise-executor-return\n nextTick(() => {\n try {\n resolve(genSaltSync(rounds));\n } catch (err) {\n reject(err as Error);\n }\n }),\n );\n","// oxlint-disable unicorn/prefer-code-point\n\n/**\n * Calculates the byte length of a string encoded as UTF8.\n *\n * @param content String to measure\n * @returns Byte length\n */\nexport const getUTF8ByteLength = (content: string): number => {\n let charCodePoint = 0;\n let length = 0;\n\n for (let i = 0; i < content.length; ++i) {\n charCodePoint = content.charCodeAt(i);\n if (charCodePoint < 128) length += 1;\n else if (charCodePoint < 2048) length += 2;\n else if (\n (charCodePoint & 0xfc00) === 0xd800 &&\n (content.charCodeAt(i + 1) & 0xfc00) === 0xdc00\n ) {\n i++;\n length += 4;\n } else length += 3;\n }\n\n return length;\n};\n\n/**\n * Converts a string to an array of UTF8 bytes.\n *\n * @param content String to convert\n * @returns Byte array\n */\nexport const convertToUFT8Bytes = (content: string): number[] => {\n let offset = 0;\n let c1;\n let c2;\n\n // oxlint-disable-next-line unicorn/no-new-array\n const buffer = new Array<number>(getUTF8ByteLength(content));\n\n for (let i = 0, k = content.length; i < k; ++i) {\n c1 = content.charCodeAt(i);\n if (c1 < 128) {\n buffer[offset++] = c1;\n } else if (c1 < 2048) {\n buffer[offset++] = (c1 >> 6) | 192;\n buffer[offset++] = (c1 & 63) | 128;\n } else if ((c1 & 0xfc00) === 0xd800 && ((c2 = content.charCodeAt(i + 1)) & 0xfc00) === 0xdc00) {\n c1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff);\n ++i;\n buffer[offset++] = (c1 >> 18) | 240;\n buffer[offset++] = ((c1 >> 12) & 63) | 128;\n buffer[offset++] = ((c1 >> 6) & 63) | 128;\n buffer[offset++] = (c1 & 63) | 128;\n } else {\n buffer[offset++] = (c1 >> 12) | 224;\n buffer[offset++] = ((c1 >> 6) & 63) | 128;\n buffer[offset++] = (c1 & 63) | 128;\n }\n }\n\n return buffer;\n};\n","// oxlint-disable unicorn/prefer-code-point\n\nimport { decodeBase64, encodeBase64 } from \"./base64.js\";\nimport { BCRYPT_SALT_LEN, C_ORIG, GENERATE_SALT_DEFAULT_LOG2_ROUNDS } from \"./constant.js\";\nimport { crypt } from \"./crypt.js\";\nimport { genSalt, genSaltSync } from \"./salt.js\";\nimport { convertToUFT8Bytes } from \"./uft8.js\";\n\n/**\n * Internally hashes a string.\n *\n * @param content String to hash\n * @param salt Salt to use\n * @param progressCallback Callback called with the current progress\n * @param sync Whether to run synchronously\n *\n * @returns Resulting hash\n */\n// oxlint-disable-next-line max-statements\nconst _hash = (\n content: string,\n salt: string,\n sync: boolean,\n progressCallback?: (progress: number) => void,\n): Promise<string> | string => {\n if (typeof content !== \"string\" || typeof salt !== \"string\") {\n const err = new Error(\"Invalid content / salt: not a string\");\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n\n // Validate the salt\n let minor: string;\n let offset: number;\n\n if (salt.charAt(0) !== \"$\" || salt.charAt(1) !== \"2\") {\n const err = new Error(`Invalid salt version: ${salt.slice(0, 2)}`);\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n\n if (salt.charAt(2) === \"$\") {\n minor = String.fromCharCode(0);\n offset = 3;\n } else {\n minor = salt.charAt(2);\n if ((minor !== \"a\" && minor !== \"b\" && minor !== \"y\") || salt.charAt(3) !== \"$\") {\n const err = new Error(`Invalid salt revision: ${salt.slice(2, 4)}`);\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n offset = 4;\n }\n\n const roundText = salt.slice(offset, offset + 2);\n const rounds = /\\d\\d/.test(roundText) ? Number(roundText) : null;\n\n // Extract number of rounds\n if (rounds === null) {\n const err = new Error(\"Missing salt rounds\");\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n\n if (rounds < 4 || rounds > 31) {\n const err = new Error(`Illegal number of rounds (4-31): ${rounds}`);\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n\n const realSalt = salt.slice(offset + 3, offset + 25);\n\n content += minor >= \"a\" ? \"\\u0000\" : \"\";\n\n const passwordBytes = convertToUFT8Bytes(content),\n saltBytes = decodeBase64(realSalt, BCRYPT_SALT_LEN);\n\n if (saltBytes.length !== BCRYPT_SALT_LEN) {\n const err = new Error(`Illegal salt: ${realSalt}`);\n\n if (!sync) return Promise.reject(err);\n\n throw err;\n }\n\n /**\n * Finishes hashing.\n * @param bytes Byte array\n *\n * @returns Resulting hash\n */\n const finish = (bytes: number[]): string =>\n `$2${minor >= \"a\" ? minor : \"\"}$${rounds < 10 ? \"0\" : \"\"}${rounds}$${encodeBase64(\n saltBytes,\n BCRYPT_SALT_LEN,\n )}${encodeBase64(bytes, C_ORIG.length * 4 - 1)}`;\n\n // Sync\n if (!sync) {\n return (\n crypt(passwordBytes, saltBytes, rounds, false, progressCallback) as Promise<number[]>\n ).then((bytes) => finish(bytes));\n }\n\n return finish(crypt(passwordBytes, saltBytes, rounds, true, progressCallback) as number[]);\n};\n\n/**\n * Synchronously generates a hash for the given string.\n *\n * @param contentString String to hash\n * @param salt Salt length to generate or salt to use, default to 10\n * @returns Resulting hash\n */\nexport const hashSync = (\n contentString: string,\n salt: string | number = GENERATE_SALT_DEFAULT_LOG2_ROUNDS,\n): string =>\n _hash(contentString, typeof salt === \"number\" ? genSaltSync(salt) : salt, true) as string;\n\n/**\n * Asynchronously generates a hash for the given string.\n *\n * @param contentString String to hash\n * @param salt Salt length to generate or salt to use\n * @param progressCallback Callback successively called with the percentage of rounds completed\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\n *\n * @returns Promise resolving to the resulting hash\n */\nexport const hash = async (\n contentString: string,\n salt: number | string,\n progressCallback?: (progress: number) => void,\n): Promise<string> =>\n _hash(\n contentString,\n typeof salt === \"number\" ? await genSalt(salt) : salt,\n false,\n progressCallback,\n ) as Promise<string>;\n","import { nextTick } from \"nextTick\";\n\nimport { hash as hashAsync, hashSync } from \"./hash.js\";\nimport { getIllegalArgumentsTypeError } from \"./utils.js\";\n\n/**\n * Synchronously tests a string against a hash.\n *\n * @param content String to compare\n * @param hash Hash to test against\n *\n * @returns `true` if the string matches the hash, `false` otherwise\n */\nexport const compareSync = (content: string, hash: string): boolean => {\n if (typeof content !== \"string\" || typeof hash !== \"string\") {\n throw getIllegalArgumentsTypeError(content, hash);\n }\n\n if (hash.length !== 60) return false;\n\n return hashSync(content, hash.slice(0, 29)) === hash;\n};\n\n/**\n * Asynchronously compares the given data against the given hash.\n *\n * @param content Data to compare\n * @param hash Data to be compared to\n * @param progressCallback Callback successively called with the percentage of rounds completed\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\n *\n * @returns Promise resolving to `true` if the data matches the hash, `false` otherwise\n */\nexport const compare = (\n content: string,\n hash: string,\n progressCallback?: (percent: number) => void,\n): Promise<boolean> =>\n new Promise((resolve, reject) => {\n if (typeof content !== \"string\" || typeof hash !== \"string\") {\n nextTick(() => reject(new Error(`Illegal arguments: ${typeof content}, ${typeof hash}`)));\n\n return;\n }\n\n if (hash.length !== 60) {\n nextTick(() => resolve(false));\n\n return;\n }\n\n hashAsync(content, hash.slice(0, 29), progressCallback)\n .then((comp) => resolve(comp === hash))\n // oxlint-disable-next-line promise/prefer-await-to-callbacks\n .catch((err: unknown) => reject(err as Error));\n });\n","import { getUTF8ByteLength } from \"./uft8.js\";\nimport { getIllegalArgumentsTypeError } from \"./utils.js\";\n\n/**\n * Gets the number of rounds used to encrypt the specified hash.\n *\n * @param hash Hash to extract the used number of rounds from\n * @returns Number of rounds used\n * @throws {Error} If `hash` is not a string\n */\nexport const getRounds = (hash: string): number => {\n if (typeof hash !== \"string\") throw getIllegalArgumentsTypeError(hash);\n\n return parseInt(hash.split(\"$\")[2], 10);\n};\n\n/**\n * Gets the salt portion from a hash. Does not validate the hash.\n *\n * @param hash Hash to extract the salt from\n * @returns Extracted salt part\n * @throws {Error} If `hash` is not a string or otherwise invalid\n */\nexport const getSalt = (hash: string): string => {\n if (typeof hash !== \"string\") throw getIllegalArgumentsTypeError(hash);\n\n if (hash.length !== 60) throw new Error(`Illegal hash length: ${hash.length} != 60`);\n\n return hash.slice(0, 29);\n};\n\n/**\n * Tests if a content will be truncated when hashed, that is its length is\n * greater than 72 bytes when converted to UTF-8.\n * @param content The content to test\n * @returns `true` if truncated, otherwise `false`\n */\nexport const truncates = (content: string): boolean => {\n if (typeof content !== \"string\") throw getIllegalArgumentsTypeError(content);\n\n return getUTF8ByteLength(content) > 72;\n};\n"],"mappings":"AAGA,MAAa,EACX,QAAQ,IAAI,eAAiB,OAEzB,WACA,aCGO,EAAc,CAAC,GAAG,mEAAmE,CAErF,EAAe,CAC1B,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5F,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAC9F,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAC5F,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5F,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5F,GAAI,GAAI,GAAI,GAAI,GACjB,CAEY,EAAS,CACpB,UAAY,WAAY,UAAY,SAAY,WAAY,UAAY,UAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WACb,CAEY,EAAS,CACpB,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,QAAY,UAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UACpF,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UACpF,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,SAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,QAAY,UACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,SACpF,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,SAAY,SACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UACpF,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,SAAY,UAAY,WAAY,UAAY,WACpF,WAAY,UAAY,SAAY,UAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,UAAY,UAAY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"}