wasmium_random/wordlists/
random_generator.rs

1use crate::{WasmiumRandom, BIP39_WORDLIST, EFF_LARGE, EFF_SHORT};
2use nanorand::{ChaCha8, Rng, WyRand};
3
4impl WasmiumRandom {
5    /// Generate BIP39 phrase `6` words long`
6    pub fn secure_bip39() -> [&'static str; 6] {
7        let mut rng = ChaCha8::new();
8        let mut random = 0_u16;
9        let mut random_str: [&'static str; 6] = ["TRY_GENERATING_SOMETHING_RANDOM"; 6];
10
11        (0..6).for_each(|index| {
12            random = rng.generate_range(0_u16..BIP39_WORDLIST.len() as u16);
13            random_str[index as usize] = BIP39_WORDLIST[random as usize];
14        });
15
16        random_str
17    }
18
19    /// Generate BIP39 phrase `8` words long`
20    pub fn secure_bip39_8words() -> [&'static str; 8] {
21        let mut rng = ChaCha8::new();
22        let mut random = 0_u16;
23        let mut random_str: [&'static str; 8] = ["TRY_GENERATING_SOMETHING_RANDOM"; 8];
24
25        (0..8).for_each(|index| {
26            random = rng.generate_range(0_u16..BIP39_WORDLIST.len() as u16);
27            random_str[index as usize] = BIP39_WORDLIST[random as usize];
28        });
29
30        random_str
31    }
32
33    /// Generate BIP39 phrase `12` words long`
34    pub fn secure_bip39_12words() -> [&'static str; 12] {
35        let mut rng = ChaCha8::new();
36        let mut random = 0_u16;
37        let mut random_str: [&'static str; 12] = ["TRY_GENERATING_SOMETHING_RANDOM"; 12];
38
39        (0..12).for_each(|index| {
40            random = rng.generate_range(0_u16..BIP39_WORDLIST.len() as u16);
41            random_str[index as usize] = BIP39_WORDLIST[random as usize];
42        });
43
44        random_str
45    }
46
47    /// Generate BIP39 phrase `16` words long`
48    pub fn secure_bip39_16words() -> [&'static str; 16] {
49        let mut rng = ChaCha8::new();
50        let mut random = 0_u16;
51        let mut random_str: [&'static str; 16] = ["TRY_GENERATING_SOMETHING_RANDOM"; 16];
52
53        (0..16).for_each(|index| {
54            random = rng.generate_range(0_u16..BIP39_WORDLIST.len() as u16);
55            random_str[index as usize] = BIP39_WORDLIST[random as usize];
56        });
57
58        random_str
59    }
60
61    /// Generate EFF Short word list phrase `6` words long`
62    pub fn secure_eff_shortlist() -> [&'static str; 6] {
63        let mut rng = ChaCha8::new();
64        let mut random = 0_u16;
65        let mut random_str: [&'static str; 6] = ["TRY_GENERATING_SOMETHING_RANDOM"; 6];
66
67        (0..6).for_each(|index| {
68            random = rng.generate_range(0_u16..EFF_SHORT.len() as u16);
69            random_str[index as usize] = EFF_SHORT[random as usize];
70        });
71
72        random_str
73    }
74
75    /// Generate EFF short word list phrase `8` words long`
76    pub fn secure_eff_shortlist_8words() -> [&'static str; 8] {
77        let mut rng = ChaCha8::new();
78        let mut random = 0_u16;
79        let mut random_str: [&'static str; 8] = ["TRY_GENERATING_SOMETHING_RANDOM"; 8];
80
81        (0..8).for_each(|index| {
82            random = rng.generate_range(0_u16..EFF_SHORT.len() as u16);
83            random_str[index as usize] = EFF_SHORT[random as usize];
84        });
85
86        random_str
87    }
88
89    /// Generate EFF short word list phrase `12` words long`
90    pub fn secure_eff_shortlist_12words() -> [&'static str; 12] {
91        let mut rng = ChaCha8::new();
92        let mut random = 0_u16;
93        let mut random_str: [&'static str; 12] = ["TRY_GENERATING_SOMETHING_RANDOM"; 12];
94
95        (0..12).for_each(|index| {
96            random = rng.generate_range(0_u16..EFF_SHORT.len() as u16);
97            random_str[index as usize] = EFF_SHORT[random as usize];
98        });
99
100        random_str
101    }
102
103    /// Generate EFF short word list phrase `16` words long`
104    pub fn secure_eff_shortlist_16words() -> [&'static str; 16] {
105        let mut rng = ChaCha8::new();
106        let mut random = 0_u16;
107        let mut random_str: [&'static str; 16] = ["TRY_GENERATING_SOMETHING_RANDOM"; 16];
108
109        (0..16).for_each(|index| {
110            random = rng.generate_range(0_u16..EFF_SHORT.len() as u16);
111            random_str[index as usize] = EFF_SHORT[random as usize];
112        });
113
114        random_str
115    }
116
117    /// Generate EFF large word list phrase `4` words long`
118    pub fn secure_eff_largelist() -> [&'static str; 4] {
119        let mut rng = ChaCha8::new();
120        let mut random = 0_u16;
121        let mut random_str: [&'static str; 4] = ["TRY_GENERATING_SOMETHING_RANDOM"; 4];
122
123        (0..4).for_each(|index| {
124            random = rng.generate_range(0_u16..EFF_LARGE.len() as u16);
125            random_str[index as usize] = EFF_LARGE[random as usize];
126        });
127
128        random_str
129    }
130
131    /// Generate EFF large word list phrase `6` words long`
132    pub fn secure_eff_largelist_6words() -> [&'static str; 6] {
133        let mut rng = ChaCha8::new();
134        let mut random = 0_u16;
135        let mut random_str: [&'static str; 6] = ["TRY_GENERATING_SOMETHING_RANDOM"; 6];
136
137        (0..6).for_each(|index| {
138            random = rng.generate_range(0_u16..EFF_LARGE.len() as u16);
139            random_str[index as usize] = EFF_LARGE[random as usize];
140        });
141
142        random_str
143    }
144
145    /// Generate EFF large word list phrase `8` words long`
146    pub fn secure_eff_largelist_8words() -> [&'static str; 8] {
147        let mut rng = ChaCha8::new();
148        let mut random = 0_u16;
149        let mut random_str: [&'static str; 8] = ["TRY_GENERATING_SOMETHING_RANDOM"; 8];
150
151        (0..8).for_each(|index| {
152            random = rng.generate_range(0_u16..EFF_LARGE.len() as u16);
153            random_str[index as usize] = EFF_LARGE[random as usize];
154        });
155
156        random_str
157    }
158
159    /// Generate EFF large word list phrase `12` words long`
160    pub fn secure_eff_largelist_12words() -> [&'static str; 12] {
161        let mut rng = ChaCha8::new();
162        let mut random = 0_u16;
163        let mut random_str: [&'static str; 12] = ["TRY_GENERATING_SOMETHING_RANDOM"; 12];
164
165        (0..12).for_each(|index| {
166            random = rng.generate_range(0_u16..EFF_LARGE.len() as u16);
167            random_str[index as usize] = EFF_LARGE[random as usize];
168        });
169
170        random_str
171    }
172
173    /// Generate EFF large word list phrase `16` words long`
174    pub fn secure_eff_largelist_16words() -> [&'static str; 16] {
175        let mut rng = ChaCha8::new();
176        let mut random = 0_u16;
177        let mut random_str: [&'static str; 16] = ["TRY_GENERATING_SOMETHING_RANDOM"; 16];
178
179        (0..16).for_each(|index| {
180            random = rng.generate_range(0_u16..EFF_LARGE.len() as u16);
181            random_str[index as usize] = EFF_LARGE[random as usize];
182        });
183
184        random_str
185    }
186
187    /// Generate BIP39 phrase `6` words long`
188    pub fn wyrand_bip39() -> [&'static str; 6] {
189        let mut rng = WyRand::new();
190        let mut random = 0_u16;
191        let mut random_str: [&'static str; 6] = ["TRY_GENERATING_SOMETHING_RANDOM"; 6];
192
193        (0..6).for_each(|index| {
194            random = rng.generate_range(0_u16..BIP39_WORDLIST.len() as u16);
195            random_str[index as usize] = BIP39_WORDLIST[random as usize];
196        });
197
198        random_str
199    }
200
201    /// Generate BIP39 phrase `8` words long`
202    pub fn wyrand_bip39_8words() -> [&'static str; 8] {
203        let mut rng = WyRand::new();
204        let mut random = 0_u16;
205        let mut random_str: [&'static str; 8] = ["TRY_GENERATING_SOMETHING_RANDOM"; 8];
206
207        (0..8).for_each(|index| {
208            random = rng.generate_range(0_u16..BIP39_WORDLIST.len() as u16);
209            random_str[index as usize] = BIP39_WORDLIST[random as usize];
210        });
211
212        random_str
213    }
214
215    /// Generate BIP39 phrase `12` words long`
216    pub fn wyrand_bip39_12words() -> [&'static str; 12] {
217        let mut rng = WyRand::new();
218        let mut random = 0_u16;
219        let mut random_str: [&'static str; 12] = ["TRY_GENERATING_SOMETHING_RANDOM"; 12];
220
221        (0..12).for_each(|index| {
222            random = rng.generate_range(0_u16..BIP39_WORDLIST.len() as u16);
223            random_str[index as usize] = BIP39_WORDLIST[random as usize];
224        });
225
226        random_str
227    }
228
229    /// Generate BIP39 phrase `16` words long`
230    pub fn wyrand_bip39_16words() -> [&'static str; 16] {
231        let mut rng = WyRand::new();
232        let mut random = 0_u16;
233        let mut random_str: [&'static str; 16] = ["TRY_GENERATING_SOMETHING_RANDOM"; 16];
234
235        (0..16).for_each(|index| {
236            random = rng.generate_range(0_u16..BIP39_WORDLIST.len() as u16);
237            random_str[index as usize] = BIP39_WORDLIST[random as usize];
238        });
239
240        random_str
241    }
242
243    /// Generate EFF Short word list phrase `6` words long`
244    pub fn wyrand_eff_shortlist() -> [&'static str; 6] {
245        let mut rng = WyRand::new();
246        let mut random = 0_u16;
247        let mut random_str: [&'static str; 6] = ["TRY_GENERATING_SOMETHING_RANDOM"; 6];
248
249        (0..6).for_each(|index| {
250            random = rng.generate_range(0_u16..EFF_SHORT.len() as u16);
251            random_str[index as usize] = EFF_SHORT[random as usize];
252        });
253
254        random_str
255    }
256
257    /// Generate EFF short word list phrase `8` words long`
258    pub fn wyrand_eff_shortlist_8words() -> [&'static str; 8] {
259        let mut rng = WyRand::new();
260        let mut random = 0_u16;
261        let mut random_str: [&'static str; 8] = ["TRY_GENERATING_SOMETHING_RANDOM"; 8];
262
263        (0..8).for_each(|index| {
264            random = rng.generate_range(0_u16..EFF_SHORT.len() as u16);
265            random_str[index as usize] = EFF_SHORT[random as usize];
266        });
267
268        random_str
269    }
270
271    /// Generate EFF short word list phrase `12` words long`
272    pub fn wyrand_eff_shortlist_12words() -> [&'static str; 12] {
273        let mut rng = WyRand::new();
274        let mut random = 0_u16;
275        let mut random_str: [&'static str; 12] = ["TRY_GENERATING_SOMETHING_RANDOM"; 12];
276
277        (0..12).for_each(|index| {
278            random = rng.generate_range(0_u16..EFF_SHORT.len() as u16);
279            random_str[index as usize] = EFF_SHORT[random as usize];
280        });
281
282        random_str
283    }
284
285    /// Generate EFF short word list phrase `16` words long`
286    pub fn wyrand_eff_shortlist_16words() -> [&'static str; 16] {
287        let mut rng = WyRand::new();
288        let mut random = 0_u16;
289        let mut random_str: [&'static str; 16] = ["TRY_GENERATING_SOMETHING_RANDOM"; 16];
290
291        (0..16).for_each(|index| {
292            random = rng.generate_range(0_u16..EFF_SHORT.len() as u16);
293            random_str[index as usize] = EFF_SHORT[random as usize];
294        });
295
296        random_str
297    }
298
299    /// Generate EFF large word list phrase `4` words long`
300    pub fn wyrand_eff_largelist() -> [&'static str; 4] {
301        let mut rng = WyRand::new();
302        let mut random = 0_u16;
303        let mut random_str: [&'static str; 4] = ["TRY_GENERATING_SOMETHING_RANDOM"; 4];
304
305        (0..4).for_each(|index| {
306            random = rng.generate_range(0_u16..EFF_LARGE.len() as u16);
307            random_str[index as usize] = EFF_LARGE[random as usize];
308        });
309
310        random_str
311    }
312
313    /// Generate EFF large word list phrase `6` words long`
314    pub fn wyrand_eff_largelist_6words() -> [&'static str; 6] {
315        let mut rng = WyRand::new();
316        let mut random = 0_u16;
317        let mut random_str: [&'static str; 6] = ["TRY_GENERATING_SOMETHING_RANDOM"; 6];
318
319        (0..6).for_each(|index| {
320            random = rng.generate_range(0_u16..EFF_LARGE.len() as u16);
321            random_str[index as usize] = EFF_LARGE[random as usize];
322        });
323
324        random_str
325    }
326
327    /// Generate EFF large word list phrase `8` words long`
328    pub fn wyrand_eff_largelist_8words() -> [&'static str; 8] {
329        let mut rng = WyRand::new();
330        let mut random = 0_u16;
331        let mut random_str: [&'static str; 8] = ["TRY_GENERATING_SOMETHING_RANDOM"; 8];
332
333        (0..8).for_each(|index| {
334            random = rng.generate_range(0_u16..EFF_LARGE.len() as u16);
335            random_str[index as usize] = EFF_LARGE[random as usize];
336        });
337
338        random_str
339    }
340
341    /// Generate EFF large word list phrase `12` words long`
342    pub fn wyrand_eff_largelist_12words() -> [&'static str; 12] {
343        let mut rng = WyRand::new();
344        let mut random = 0_u16;
345        let mut random_str: [&'static str; 12] = ["TRY_GENERATING_SOMETHING_RANDOM"; 12];
346
347        (0..12).for_each(|index| {
348            random = rng.generate_range(0_u16..EFF_LARGE.len() as u16);
349            random_str[index as usize] = EFF_LARGE[random as usize];
350        });
351
352        random_str
353    }
354
355    /// Generate EFF large word list phrase `16` words long`
356    pub fn wyrand_eff_largelist_16words() -> [&'static str; 16] {
357        let mut rng = WyRand::new();
358        let mut random = 0_u16;
359        let mut random_str: [&'static str; 16] = ["TRY_GENERATING_SOMETHING_RANDOM"; 16];
360
361        (0..16).for_each(|index| {
362            random = rng.generate_range(0_u16..EFF_LARGE.len() as u16);
363            random_str[index as usize] = EFF_LARGE[random as usize];
364        });
365
366        random_str
367    }
368}
369
370#[cfg(test)]
371mod test_length {
372    use crate::WasmiumRandom;
373    #[test]
374    fn test_bip39_secure() {
375        assert_eq!(6_usize, WasmiumRandom::secure_bip39().len());
376        assert_eq!(8_usize, WasmiumRandom::secure_bip39_8words().len());
377        assert_eq!(12_usize, WasmiumRandom::secure_bip39_12words().len());
378        assert_eq!(16_usize, WasmiumRandom::secure_bip39_16words().len());
379    }
380
381    #[test]
382    fn test_eff_shortlist_secure() {
383        assert_eq!(6_usize, WasmiumRandom::secure_eff_shortlist().len());
384        assert_eq!(8_usize, WasmiumRandom::secure_eff_shortlist_8words().len());
385        assert_eq!(
386            12_usize,
387            WasmiumRandom::secure_eff_shortlist_12words().len()
388        );
389        assert_eq!(
390            16_usize,
391            WasmiumRandom::secure_eff_shortlist_16words().len()
392        );
393    }
394
395    #[test]
396    fn test_eff_largelist_secure() {
397        assert_eq!(4_usize, WasmiumRandom::secure_eff_largelist().len());
398        assert_eq!(6_usize, WasmiumRandom::secure_eff_largelist_6words().len());
399        assert_eq!(8_usize, WasmiumRandom::secure_eff_largelist_8words().len());
400        assert_eq!(
401            12_usize,
402            WasmiumRandom::secure_eff_largelist_12words().len()
403        );
404        assert_eq!(
405            16_usize,
406            WasmiumRandom::secure_eff_largelist_16words().len()
407        );
408    }
409
410    /************************* TEsts here */
411
412    #[test]
413    fn test_bip39_wyrand() {
414        assert_eq!(6_usize, WasmiumRandom::wyrand_bip39().len());
415        assert_eq!(8_usize, WasmiumRandom::wyrand_bip39_8words().len());
416        assert_eq!(12_usize, WasmiumRandom::wyrand_bip39_12words().len());
417        assert_eq!(16_usize, WasmiumRandom::wyrand_bip39_16words().len());
418    }
419
420    #[test]
421    fn test_eff_shortlist_wyrand() {
422        assert_eq!(6_usize, WasmiumRandom::wyrand_eff_shortlist().len());
423        assert_eq!(8_usize, WasmiumRandom::wyrand_eff_shortlist_8words().len());
424        assert_eq!(
425            12_usize,
426            WasmiumRandom::wyrand_eff_shortlist_12words().len()
427        );
428        assert_eq!(
429            16_usize,
430            WasmiumRandom::wyrand_eff_shortlist_16words().len()
431        );
432    }
433
434    #[test]
435    fn test_eff_largelist_wyrand() {
436        assert_eq!(4_usize, WasmiumRandom::wyrand_eff_largelist().len());
437        assert_eq!(6_usize, WasmiumRandom::wyrand_eff_largelist_6words().len());
438        assert_eq!(8_usize, WasmiumRandom::wyrand_eff_largelist_8words().len());
439        assert_eq!(
440            12_usize,
441            WasmiumRandom::wyrand_eff_shortlist_12words().len()
442        );
443        assert_eq!(
444            16_usize,
445            WasmiumRandom::wyrand_eff_shortlist_16words().len()
446        );
447    }
448}