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
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
diff --git a/spectre/src/template.rs b/spectre/src/template.rs
index b68d429f5a3cc3534be604b162b65cfe4de4330a..9ecac4cf57373d95f1e91c5e39ac121736e5f04a 100644
--- a/spectre/src/template.rs
+++ b/spectre/src/template.rs
@@ -1,3 +1,4 @@
+/// The template to use for secret generation, patterns are described in [`templates`]
#[derive(Debug)]
pub enum Template {
Maximum,
@@ -10,6 +11,7 @@ Phrase,
Basic,
}
+/// Any error from parsing a Template from a string
#[derive(Debug)]
pub enum ParseTemplateError {
Invalid,
@@ -33,52 +35,54 @@ }
}
}
-pub(crate) fn templates(t: Template) -> Vec<String> {
+/// The list of templates for Spectre generation, the mapping for each char is found in [`chars`]
+pub(crate) fn templates<'s>(t: Template) -> Vec<&'s str> {
match t {
Template::Maximum => vec![
- "anoxxxxxxxxxxxxxxxxx".to_string(),
- "axxxxxxxxxxxxxxxxxno".to_string(),
+ "anoxxxxxxxxxxxxxxxxx",
+ "axxxxxxxxxxxxxxxxxno",
],
Template::Long => vec![
- "CvcvnoCvcvCvcv".to_string(),
- "CvcvCvcvnoCvcv".to_string(),
- "CvcvCvcvCvcvno".to_string(),
- "CvccnoCvcvCvcv".to_string(),
- "CvccCvcvnoCvcv".to_string(),
- "CvccCvcvCvcvno".to_string(),
- "CvcvnoCvccCvcv".to_string(),
- "CvcvCvccnoCvcv".to_string(),
- "CvcvCvccCvcvno".to_string(),
- "CvcvnoCvcvCvcc".to_string(),
- "CvcvCvcvnoCvcc".to_string(),
- "CvcvCvcvCvccno".to_string(),
- "CvccnoCvccCvcv".to_string(),
- "CvccCvccnoCvcv".to_string(),
- "CvccCvccCvcvno".to_string(),
- "CvcvnoCvccCvcc".to_string(),
- "CvcvCvccnoCvcc".to_string(),
- "CvcvCvccCvccno".to_string(),
- "CvccnoCvcvCvcc".to_string(),
- "CvccCvcvnoCvcc".to_string(),
- "CvccCvcvCvccno".to_string(),
+ "CvcvnoCvcvCvcv",
+ "CvcvCvcvnoCvcv",
+ "CvcvCvcvCvcvno",
+ "CvccnoCvcvCvcv",
+ "CvccCvcvnoCvcv",
+ "CvccCvcvCvcvno",
+ "CvcvnoCvccCvcv",
+ "CvcvCvccnoCvcv",
+ "CvcvCvccCvcvno",
+ "CvcvnoCvcvCvcc",
+ "CvcvCvcvnoCvcc",
+ "CvcvCvcvCvccno",
+ "CvccnoCvccCvcv",
+ "CvccCvccnoCvcv",
+ "CvccCvccCvcvno",
+ "CvcvnoCvccCvcc",
+ "CvcvCvccnoCvcc",
+ "CvcvCvccCvccno",
+ "CvccnoCvcvCvcc",
+ "CvccCvcvnoCvcc",
+ "CvccCvcvCvccno",
],
- Template::Medium => vec!["CvcnoCvc".to_string(), "CvcCvcno".to_string()],
- Template::Short => vec!["Cvcn".to_string()],
- Template::Pin => vec!["nnnn".to_string()],
- Template::Name => vec!["cvccvcvcv".to_string()],
+ Template::Medium => vec!["CvcnoCvc", "CvcCvcno"],
+ Template::Short => vec!["Cvcn"],
+ Template::Pin => vec!["nnnn"],
+ Template::Name => vec!["cvccvcvcv"],
Template::Phrase => vec![
- "cvcc cvc cvccvcv cvc".to_string(),
- "cvc cvccvcvcv cvcv".to_string(),
- "cv cvccv cvc cvcvccv".to_string(),
+ "cvcc cvc cvccvcv cvc",
+ "cvc cvccvcvcv cvcv",
+ "cv cvccv cvc cvcvccv",
],
Template::Basic => vec![
- "aaanaaan".to_string(),
- "aannaaan".to_string(),
- "aaannaaa".to_string(),
+ "aaanaaan",
+ "aannaaan",
+ "aaannaaa",
],
}
}
+/// A mapping of each template char to a set of possible characters
pub(crate) fn chars(u: &u8) -> &str {
match *u as char {
'V' => "AEIOU",
|