pub struct EnigmaMachine { /* private fields */ }
Expand description
An enigma machine with applied settings that can encrypt or decrypt text.
Implementations§
Source§impl EnigmaMachine
impl EnigmaMachine
Sourcepub fn new() -> impl EnigmaBuilder
pub fn new() -> impl EnigmaBuilder
Creates a new Enigma machine with blank settings. The settings for the machine must be added using the methods
of EnigmaBuilder
; See the README for an example.
The returned value from this will always be Ok
, and will be an Enigma machine with rotors 1, 1, 1, ring positions
1, 1, and 1, ring settings 1, 1, and 1, reflector A, and an empty plugboard.
This opts you into the safe and Rusty API; To use the unsafe maximum performance API, use
EnigmaMachine::unchecked()
. See the README
for more information.
Sourcepub fn unchecked() -> impl UncheckedEnigmaBuilder
pub fn unchecked() -> impl UncheckedEnigmaBuilder
Creates a new Enigma machine with blank settings. The settings for the machine must be added using the methods
of EnigmaBuilder
; See the README for an example.
The returned value from this will always be Ok
, and will be an Enigma machine with rotors 1, 1, 1, ring positions
1, 1, and 1, ring settings 1, 1, and 1, reflector A, and an empty plugboard.
This opts you into the unsafe API; To use the safer API at the expense of some performance, use
EnigmaMachine::new()
. See the README
for more information.
Sourcepub fn decrypt(&self, text: &str) -> String
pub fn decrypt(&self, text: &str) -> String
Decodes the given text using this Enigma machine.
The decryption process does the following for each letter in the ciphertext:
- Rotate the rotors
- Pass the letter through the plugboard
- Pass the letter through the rotors from right to left
- Pass the letter through the reflector
- Pass the letter back through the rotors from left to right
- Pass the letter through the plugboard again
The reflector maps each characters to different ones, meaning no character can be encrypted or decrypted into itself.
This is exactly the same as calling machine.encode(text)
, since the enigma cipher is
symmetric; The only difference is semantic meaning and intent, i.e.,
assert_eq!(text, machine.decrypt(machine.decrypt(text)));
assert_eq!(text, machine.encrypt(machine.encrypt(text)));
assert_eq!(text, machine.decrypt(machine.encrypt(text)));
assert_eq!(text, machine.encrypt(machine.decrypt(text)));
§Parameters
text
- The text to decode.
§Returns
The decoded text.
Sourcepub fn encrypt(&self, text: &str) -> String
pub fn encrypt(&self, text: &str) -> String
Encodes the given text using this Enigma machine.
The encryption process does the following for each letter in the plaintext:
- Rotate the rotors
- Pass the letter through the plugboard
- Pass the letter through the rotors from right to left
- Pass the letter through the reflector
- Pass the letter back through the rotors from left to right
- Pass the letter through the plugboard again
The reflector maps each characters to different ones, meaning no character can be encrypted or decrypted into itself.
This is exactly the same as calling machine.decode(text)
, since the enigma cipher is
symmetric; The only difference is semantic meaning and intent, i.e.,
assert_eq!(text, machine.decode(machine.decode(text)));
assert_eq!(text, machine.encode(machine.encode(text)));
assert_eq!(text, machine.decode(machine.encode(text)));
assert_eq!(text, machine.encode(machine.decode(text)));
§Parameters
text
- The text to encode.
§Returns
The encoded text.