1+ 'use strict' ;
2+
3+ Object . defineProperty ( exports , "__esModule" , {
4+ value : true
5+ } ) ;
6+
7+ var _log = require ( 'babel-runtime/core-js/math/log10' ) ;
8+
9+ var _log2 = _interopRequireDefault ( _log ) ;
10+
11+ var _log3 = require ( 'babel-runtime/core-js/math/log2' ) ;
12+
13+ var _log4 = _interopRequireDefault ( _log3 ) ;
14+
15+ var _charSet = require ( './charSet' ) ;
16+
17+ var _charSet2 = _interopRequireDefault ( _charSet ) ;
18+
19+ var _lcm = require ( './lcm' ) ;
20+
21+ var _lcm2 = _interopRequireDefault ( _lcm ) ;
22+
23+ function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { default : obj } ; }
24+
25+ var crypto = require ( 'crypto' ) ;
26+
27+ var log2 = _log4 . default ;
28+ var log10 = _log2 . default ;
29+ var log2_10 = log2 ( 10 ) ;
30+
31+ var bits = function bits ( total , risk ) {
32+ if ( total == 0 ) {
33+ return 0 ;
34+ }
35+
36+ var N = 0 ;
37+ if ( total < 10001 ) {
38+ N = log2 ( total ) + log2 ( total - 1 ) + log2_10 * log10 ( risk ) - 1 ;
39+ } else {
40+ var n = 2 * log10 ( total ) + log10 ( risk ) ;
41+ N = n * log2_10 - 1 ;
42+ }
43+ return N ;
44+ } ;
45+
46+ var bitsWithRiskPower = function bitsWithRiskPower ( total , rPower ) {
47+ if ( total == 0 ) {
48+ return 0 ;
49+ }
50+
51+ var N = 0 ;
52+ if ( total < 10001 ) {
53+ N = log2 ( total ) + log2 ( total - 1 ) + log2_10 * rPower - 1 ;
54+ } else {
55+ var n = 2 * log10 ( total ) + rPower ;
56+ N = n * log2_10 - 1 ;
57+ }
58+ return N ;
59+ } ;
60+
61+ var bitsWithPowers = function bitsWithPowers ( tPower , rPower ) {
62+ var N = 0 ;
63+ if ( tPower < 5 ) {
64+ return bitsWithRiskPower ( Math . pow ( 10 , tPower ) , rPower ) ;
65+ } else {
66+ var n = 2 * tPower + rPower ;
67+ N = n * log2_10 - 1 ;
68+ }
69+ return N ;
70+ } ;
71+
72+ var randomString = function randomString ( bits , charSet ) {
73+ if ( ! _charSet2 . default . isValid ( charSet ) ) {
74+ throw new Error ( 'Invalid CharSet' ) ;
75+ }
76+
77+ var count = Math . ceil ( bits / charSet . entropyPerChar ) ;
78+ if ( count <= 0 ) {
79+ return '' ;
80+ }
81+
82+ var bytes = randomBytes ( count , charSet ) ;
83+
84+ return randomStringWithBytes ( bits , charSet , bytes ) ;
85+ } ;
86+
87+ var randomStringWithBytes = function randomStringWithBytes ( bits , charSet , bytes ) {
88+ if ( ! _charSet2 . default . isValid ( charSet ) ) {
89+ console . log ( 'WTF?' ) ;
90+ throw new Error ( 'Invalid CharSet' ) ;
91+ }
92+
93+ if ( bits <= 0 ) {
94+ return '' ;
95+ }
96+
97+ var count = Math . ceil ( bits / charSet . entropyPerChar ) ;
98+ if ( count <= 0 ) {
99+ return '' ;
100+ }
101+
102+ var needed = Math . ceil ( count * ( charSet . entropyPerChar / 8 ) ) ;
103+ if ( bytes . length < needed ) {
104+ throw new Error ( 'Insufficient bytes' ) ;
105+ }
106+
107+ var chunks = Math . floor ( count / charSet . charsPerChunk ) ;
108+ var partials = count % charSet . charsPerChunk ;
109+
110+ var chars = void 0 ,
111+ ndxFn = void 0 ;
112+ switch ( charSet ) {
113+ case _charSet2 . default . charSet64 :
114+ chars = _charSet2 . default . charSet64 . chars ;
115+ ndxFn = ndx64 ;
116+ break ;
117+ case _charSet2 . default . charSet32 :
118+ chars = _charSet2 . default . charSet32 . chars ;
119+ ndxFn = ndx32 ;
120+ break ;
121+ case _charSet2 . default . charSet16 :
122+ chars = _charSet2 . default . charSet16 . chars ;
123+ ndxFn = ndx16 ;
124+ break ;
125+ case _charSet2 . default . charSet8 :
126+ chars = _charSet2 . default . charSet8 . chars ;
127+ ndxFn = ndx8 ;
128+ break ;
129+ case _charSet2 . default . charSet4 :
130+ chars = _charSet2 . default . charSet4 . chars ;
131+ ndxFn = ndx4 ;
132+ break ;
133+ case _charSet2 . default . charSet2 :
134+ chars = _charSet2 . default . charSet2 . chars ;
135+ ndxFn = ndx2 ;
136+ break ;
137+ default :
138+ break ;
139+ }
140+
141+ var string = '' ;
142+ for ( var chunk = 0 ; chunk < chunks ; chunk ++ ) {
143+ for ( var slice = 0 ; slice < charSet . charsPerChunk ; slice ++ ) {
144+ var ndx = ndxFn ( chunk , slice , bytes ) ;
145+ string += chars [ ndx ] ;
146+ }
147+ }
148+ for ( var _slice = 0 ; _slice < partials ; _slice ++ ) {
149+ var _ndx = ndxFn ( chunks , _slice , bytes ) ;
150+ string += chars [ _ndx ] ;
151+ }
152+ return string ;
153+ } ;
154+
155+ var randomBytes = function randomBytes ( count , charSet ) {
156+ var bytesPerSlice = charSet . entropyPerChar / 8 ;
157+ var bytesNeeded = Math . ceil ( count * bytesPerSlice ) ;
158+ return Buffer . from ( crypto . randomBytes ( bytesNeeded ) ) ;
159+ } ;
160+
161+ var ndx64 = function ndx64 ( chunk , slice , bytes ) {
162+ return ndxGen ( chunk , slice , bytes , 6 ) ;
163+ } ;
164+
165+ var ndx32 = function ndx32 ( chunk , slice , bytes ) {
166+ return ndxGen ( chunk , slice , bytes , 5 ) ;
167+ } ;
168+
169+ var ndx16 = function ndx16 ( chunk , slice , bytes ) {
170+ return ( bytes [ chunk ] << 4 * slice & 0xff ) >> 4 ;
171+ } ;
172+
173+ var ndx8 = function ndx8 ( chunk , slice , bytes ) {
174+ return ndxGen ( chunk , slice , bytes , 3 ) ;
175+ } ;
176+
177+ var ndx4 = function ndx4 ( chunk , slice , bytes ) {
178+ return ( bytes [ chunk ] << 2 * slice & 0xff ) >> 6 ;
179+ } ;
180+
181+ var ndx2 = function ndx2 ( chunk , slice , bytes ) {
182+ return ( bytes [ chunk ] << slice & 0xff ) >> 7 ;
183+ } ;
184+
185+ var ndxGen = function ndxGen ( chunk , slice , bytes , bitsPerSlice ) {
186+ var bitsPerByte = 8 ;
187+ var slicesPerChunk = ( 0 , _lcm2 . default ) ( bitsPerSlice , bitsPerByte ) / bitsPerByte ;
188+
189+ var bNum = chunk * slicesPerChunk ;
190+
191+ var rShift = bitsPerByte - bitsPerSlice ;
192+
193+ var lOffset = Math . floor ( slice * bitsPerSlice / bitsPerByte ) ;
194+ var lShift = slice * bitsPerSlice % bitsPerByte ;
195+
196+ var ndx = ( bytes [ bNum + lOffset ] << lShift & 0xff ) >> rShift ;
197+
198+ var rOffset = Math . ceil ( slice * bitsPerSlice / bitsPerByte ) ;
199+ var rShiftIt = ( ( rOffset + 1 ) * bitsPerByte - ( slice + 1 ) * bitsPerSlice ) % bitsPerByte ;
200+ if ( rShift < rShiftIt ) {
201+ ndx += bytes [ bNum + rOffset ] >> rShiftIt ;
202+ }
203+ return ndx ;
204+ } ;
205+
206+ exports . default = {
207+ bits : bits ,
208+ bitsWithRiskPower : bitsWithRiskPower ,
209+ bitsWithPowers : bitsWithPowers ,
210+ randomString : randomString ,
211+ randomStringWithBytes : randomStringWithBytes ,
212+
213+ charSet64 : _charSet2 . default . charSet64 ,
214+ charSet32 : _charSet2 . default . charSet32 ,
215+ charSet16 : _charSet2 . default . charSet16 ,
216+ charSet8 : _charSet2 . default . charSet8 ,
217+ charSet4 : _charSet2 . default . charSet4 ,
218+ charSet2 : _charSet2 . default . charSet2
219+ } ;
0 commit comments