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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
//! # `scream_cypher`
//!
//! In the **SCREAM CYPHER**, messages consist of all As with different letters
//! distinguished using diacritics. This is a tool that provides both a CLI
//! tool and a library to encrypt and decrypt text using the scream cypher.
//!
//! ## Acknowledgements
//!
//! This cypher originated from [XKCD](https://xkcd.com/3054/). Thank you,
//! Randall Munroe, for always bringing such beautiful things into this world.
//!
//! ## Command line installation and usage
//!
//! Install `scream_cypher` with Cargo:
//!
//! ```sh
//! cargo install scream_cypher
//! ```
//!
//! You can then use the `scream` command to encrypt and decrypt messages:
//!
//! ```sh
//! scream encrypt "This is a test."
//! # Āa̰ảã ảã a āáãā.
//!
//! scream decrypt "Āa̰ảã ảã a āáãā."
//! # This is a test.
//! ```
//!
//! ## Library installation and usage
//!
//! Add `scream_cypher` to your project:
//!
//! ```sh
//! cargo add scream_cypher
//! ```
//!
//! You can then use `scream_cypher::encrypt` and `scream_cypher::encrypt` to
//! encrypt and decrypt messages:
//!
//! ```rs
//! let ciphertext = scream_cypher::encrypt("This is a test.");
//!
//! println!("Your message: \"{}\"", ciphertext);
//! // Your message: "Āa̰ảã ảã a āáãā."
//!
//! let plaintext = scream_cypher::decrypt(cyphertext);
//!
//! println!("Your message: \"{}\"", plaintext);
//! // Your message: "This is a test."
//! ```
use ;
/// A map of alpha characters to their corresponding scream cypher encoding.
///
/// See: <https://xkcd.com/3054/>
pub const CYPHER_MAP: = phf_map! ;
/// Encrypts the given plaintext using the scream cypher.
///
/// See: <https://xkcd.com/3054/>
///
/// ## Example
///
/// ```
/// let ciphertext = scream_cypher::encrypt("This is a test.");
///
/// println!("Your message: \"{}\"", ciphertext);
/// /// Your message: "Āa̰ảã ảã a āáãā."
/// # assert_eq!("Āa̰ảã ảã a āáãā.", ciphertext);
/// ```
/// Decrypts the given cyphertext using the scream cypher.
///
/// See: <https://xkcd.com/3054/>
///
/// ## Example
///
/// ```
/// let plaintext = scream_cypher::decrypt("Āa̰ảã ảã a āáãā.");
///
/// println!("Your message: \"{}\"", plaintext);
/// /// Your message: "This is a test."
/// # assert_eq!("This is a test.", plaintext);
/// ```