diff --git a/CHANGELOG.txt b/CHANGELOG.txt index f6adf77..5fcb20b 100755 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -12,10 +12,10 @@ v0.1.8-not-yet-released< *Added different colors to the plugboard-/pluggable reflector dialog. This helps to differentiate connections. *Reworked InputPreparer using decorator pattern and added options to customize input preparation *Reworked Reflector-/Rotor creation/management +*Added Button to set the Enigma into a random configuration *TODO: Add Enigma Z (Probably wont happen due to lack of information :/) *TODO: Add multi-Enigma (select any rotor/reflector etc. Probably wont happen too soon) -*TODO: Button to set the Enigma into a random configuration -*TODO: Enigma configuration from seed (text or qr code) +*TODO: Enigma configuration from/to seed (text or qr code) v0.1.7-15.09.2015< *Added Enigma K diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java b/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java index 4809070..91b7454 100755 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java @@ -287,6 +287,14 @@ public class MainActivity extends Activity Toast.LENGTH_SHORT).show(); return true; } + else if (id == R.id.action_random_configuration) + { + layoutContainer.getEnigma().randomState(); + layoutContainer.setLayoutState(layoutContainer.getEnigma().getState()); + Toast.makeText(getApplicationContext(), R.string.message_random, + Toast.LENGTH_SHORT).show(); + return true; + } else if (id == R.id.action_choose_ringstellung) { layoutContainer.showRingSettingsDialog(); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma.java index 2b99936..0aaa148 100755 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma.java @@ -65,6 +65,13 @@ public abstract class Enigma */ public abstract void nextState(); + /** + * Set the enigma to a random state. + * Don not choose a rotor twice, set random rotations, ringSettings, ukw and possibly + * plugboard / rewirable ukw configurations. + */ + public abstract void randomState(); + /** * Substitute char k by sending the signal through the enigma. * The signal passes the plugboard, the rotors and returns back after going through the diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_D.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_D.java index 19bf136..e1beb4f 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_D.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_D.java @@ -1,10 +1,14 @@ package de.vanitasvitae.enigmandroid.enigma; +import java.security.SecureRandom; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; /** - * Concrete implementation of an enigma machine of type I + * Concrete implementation of an enigma machine of type D + * This machine has a rewirable UKW, non changeable rotors. * Copyright (C) 2015 Paul Schaub This program is free software; you can redistribute it and/or modify @@ -61,6 +65,27 @@ public class Enigma_D extends Enigma { } } + @Override + public void randomState() + { + Random rand = new SecureRandom(); + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int rotRef = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + int ringRef = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(70, rot1, ring1); + this.rotor2 = Rotor.createRotor(71, rot2, ring2); + this.rotor3 = Rotor.createRotor(72, rot3, ring3); + this.reflector = (Reflector.ReflectorEnigma_D_KD_G31) Reflector.createReflector(70); + this.reflector.setRotation(rotRef); + this.reflector.setRingSetting(ringRef); + } + @Override public char encryptChar(char k) { diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G260.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G260.java index acad081..4270eba 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G260.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G260.java @@ -1,5 +1,8 @@ package de.vanitasvitae.enigmandroid.enigma; +import java.security.SecureRandom; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -38,4 +41,31 @@ public class Enigma_G260 extends Enigma_G31 this.rotor3 = Rotor.createRotor(62, 0, 0); this.reflector = Reflector.createReflector(60); } + + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + rotor1 = rand.nextInt(3); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3); + rotor3 = 3 - rotor1 - rotor2; + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int rotRef = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + int ringRef = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(60 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(60 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(60 + rotor3, rot3, ring3); + this.reflector = Reflector.createReflector(60); + reflector.setRotation(rotRef); + reflector.setRingSetting(ringRef); + } } diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G31.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G31.java index 0b0a517..32771c1 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G31.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G31.java @@ -2,6 +2,9 @@ package de.vanitasvitae.enigmandroid.enigma; import android.util.Log; +import java.security.SecureRandom; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -67,6 +70,33 @@ public class Enigma_G31 extends Enigma } } + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + rotor1 = rand.nextInt(3); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3); + rotor3 = 3 - rotor1 - rotor2; + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int rotRef = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + int ringRef = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(40 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(40 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(40 + rotor3, rot3, ring3); + this.reflector = Reflector.createReflector(40); + reflector.setRotation(rotRef); + reflector.setRingSetting(ringRef); + } + @Override public char encryptChar(char k) { nextState(); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G312.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G312.java index 7ddac0d..59140e7 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G312.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G312.java @@ -1,6 +1,8 @@ package de.vanitasvitae.enigmandroid.enigma; +import java.security.SecureRandom; import java.sql.Ref; +import java.util.Random; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -40,4 +42,31 @@ public class Enigma_G312 extends Enigma_G31 this.rotor3 = Rotor.createRotor(52, 0, 0); this.reflector = Reflector.createReflector(50); } + + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + rotor1 = rand.nextInt(3); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3); + rotor3 = 3 - rotor1 - rotor2; + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int rotRef = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + int ringRef = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(50 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(50 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(50 + rotor3, rot3, ring3); + this.reflector = Reflector.createReflector(50); + reflector.setRotation(rotRef); + reflector.setRingSetting(ringRef); + } } diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_I.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_I.java index a9f3add..0bd597a 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_I.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_I.java @@ -1,5 +1,8 @@ package de.vanitasvitae.enigmandroid.enigma; +import java.security.SecureRandom; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -63,6 +66,30 @@ public class Enigma_I extends Enigma } } + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + rotor1 = rand.nextInt(5); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(5); + while(rotor3 == -1 || rotor3 == rotor2 || rotor3 == rotor1) rotor3 = rand.nextInt(5); + int ref = rand.nextInt(3); + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(10 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(10 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(10 + rotor3, rot3, ring3); + this.reflector = Reflector.createReflector(10 + ref); + } + @Override public char encryptChar(char k) { diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K.java index 3b20e48..271fbbe 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K.java @@ -1,5 +1,8 @@ package de.vanitasvitae.enigmandroid.enigma; +import java.security.SecureRandom; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -61,6 +64,33 @@ public class Enigma_K extends Enigma } } + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + rotor1 = rand.nextInt(3); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3); + rotor3 = 3 - rotor1 - rotor2; + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int rotRef = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + int ringRef = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(80 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(80 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(80 + rotor3, rot3, ring3); + this.reflector = Reflector.createReflector(80); + reflector.setRotation(rotRef); + reflector.setRingSetting(ringRef); + } + @Override public char encryptChar(char k) { nextState(); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Airforce.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Airforce.java index 8d3efa8..c944b5e 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Airforce.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Airforce.java @@ -1,5 +1,8 @@ package de.vanitasvitae.enigmandroid.enigma; +import java.security.SecureRandom; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -61,6 +64,33 @@ public class Enigma_K_Swiss_Airforce extends Enigma_K } } + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + rotor1 = rand.nextInt(3); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3); + rotor3 = 3 - rotor1 - rotor2; + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int rotRef = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + int ringRef = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(100 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(100 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(100 + rotor3, rot3, ring3); + this.reflector = Reflector.createReflector(100); + reflector.setRotation(rotRef); + reflector.setRingSetting(ringRef); + } + @Override public char encryptChar(char k) { nextState(); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Standard.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Standard.java index 8336e38..5e7d919 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Standard.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Standard.java @@ -1,5 +1,8 @@ package de.vanitasvitae.enigmandroid.enigma; +import java.security.SecureRandom; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -61,6 +64,33 @@ public class Enigma_K_Swiss_Standard extends Enigma_K } } + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + rotor1 = rand.nextInt(3); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3); + rotor3 = 3 - rotor1 - rotor2; + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int rotRef = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + int ringRef = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(90 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(90 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(90 + rotor3, rot3, ring3); + this.reflector = Reflector.createReflector(90); + reflector.setRotation(rotRef); + reflector.setRingSetting(ringRef); + } + @Override public char encryptChar(char k) { nextState(); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M3.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M3.java index 2104f2c..26a95be 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M3.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M3.java @@ -1,5 +1,9 @@ package de.vanitasvitae.enigmandroid.enigma; +import java.security.SecureRandom; +import java.sql.Ref; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -37,4 +41,28 @@ public class Enigma_M3 extends Enigma_I this.rotor3 = Rotor.createRotor(22, 0, 0); this.reflector = Reflector.createReflector(20); } + + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + rotor1 = rand.nextInt(8); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(8); + while(rotor3 == -1 || rotor3 == rotor2 || rotor3 == rotor1) rotor3 = rand.nextInt(8); + int ref = rand.nextInt(2); + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(20 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(20 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(20 + rotor3, rot3, ring3); + this.reflector = Reflector.createReflector(20 + ref); + } } diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M4.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M4.java index dac411b..5f1c082 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M4.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M4.java @@ -1,5 +1,8 @@ package de.vanitasvitae.enigmandroid.enigma; +import java.security.SecureRandom; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -75,6 +78,40 @@ public class Enigma_M4 extends Enigma } } + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + int rotor4; + int ref; + rotor1 = rand.nextInt(8); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(8); + while(rotor3 == -1 || rotor3 == rotor2 || rotor3 == rotor1) rotor3 = rand.nextInt(8); + rotor4 = rand.nextInt(2); + ref = rand.nextInt(2); + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int rot4 = rand.nextInt(26); + int rotRef = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + int ring4 = rand.nextInt(26); + int ringRef = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(30 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(30 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(30 + rotor3, rot3, ring3); + this.rotor4 = Rotor.createRotor(38 + rotor4, rot4, ring4); + this.reflector = Reflector.createReflector(30 + ref); + reflector.setRotation(rotRef); + reflector.setRingSetting(ringRef); + } + @Override /** * Substitute char k by sending the signal through the enigma. diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_R.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_R.java index 077cf52..8f2826b 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_R.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_R.java @@ -1,5 +1,8 @@ package de.vanitasvitae.enigmandroid.enigma; +import java.security.SecureRandom; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -61,6 +64,33 @@ public class Enigma_R extends Enigma } } + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + rotor1 = rand.nextInt(3); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3); + rotor3 = 3 - rotor1 - rotor2; + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int rotRef = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + int ringRef = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(110 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(110 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(110 + rotor3, rot3, ring3); + this.reflector = Reflector.createReflector(110); + reflector.setRotation(rotRef); + reflector.setRingSetting(ringRef); + } + @Override public char encryptChar(char k) { nextState(); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_T.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_T.java index 7f59fde..e10b96d 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_T.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_T.java @@ -2,6 +2,9 @@ package de.vanitasvitae.enigmandroid.enigma; import android.util.Log; +import java.security.SecureRandom; +import java.util.Random; + import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -62,6 +65,33 @@ public class Enigma_T extends Enigma } } + @Override + public void randomState() + { + Random rand = new SecureRandom(); + + int rotor1, rotor2=-1, rotor3=-1; + rotor1 = rand.nextInt(8); + while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(8); + while(rotor3 == -1 || rotor3 == rotor2 || rotor3 == rotor1) rotor3 = rand.nextInt(8); + + int rot1 = rand.nextInt(26); + int rot2 = rand.nextInt(26); + int rot3 = rand.nextInt(26); + int rotRef = rand.nextInt(26); + int ring1 = rand.nextInt(26); + int ring2 = rand.nextInt(26); + int ring3 = rand.nextInt(26); + int ringRef = rand.nextInt(26); + + this.rotor1 = Rotor.createRotor(120 + rotor1, rot1, ring1); + this.rotor2 = Rotor.createRotor(120 + rotor2, rot2, ring2); + this.rotor3 = Rotor.createRotor(120 + rotor3, rot3, ring3); + this.reflector = Reflector.createReflector(120); + reflector.setRotation(rotRef); + reflector.setRingSetting(ringRef); + } + @Override public char encryptChar(char k) { nextState(); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java index 910280a..3784f08 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java @@ -45,7 +45,7 @@ public abstract class LayoutContainer public abstract Enigma getEnigma(); protected abstract void initializeLayout(); public abstract void resetLayout(); - protected abstract void setLayoutState(EnigmaStateBundle state); + public abstract void setLayoutState(EnigmaStateBundle state); protected abstract void refreshState(); public abstract void showRingSettingsDialog(); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_D.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_D.java index fc3d4a2..9b5956c 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_D.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_D.java @@ -95,7 +95,7 @@ public class LayoutContainer_D extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1PositionView.setSelection(state.getRotationRotor1()); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G260.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G260.java index 4d2a5f8..71dd37d 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G260.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G260.java @@ -113,7 +113,7 @@ public class LayoutContainer_G260 extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - offsetRot); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G31.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G31.java index b576482..ff2d4f8 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G31.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G31.java @@ -113,7 +113,7 @@ public class LayoutContainer_G31 extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - offsetRot); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G312.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G312.java index 9251355..baa1ee8 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G312.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G312.java @@ -113,7 +113,7 @@ public class LayoutContainer_G312 extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - offsetRot); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_I.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_I.java index 4cb4a86..099e113 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_I.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_I.java @@ -114,7 +114,7 @@ public class LayoutContainer_I extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - 10); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K.java index cbc0f3a..0b2c49c 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K.java @@ -112,7 +112,7 @@ public class LayoutContainer_K extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - 80); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss.java index b72f822..87c929c 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss.java @@ -112,7 +112,7 @@ public class LayoutContainer_K_Swiss extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - 90); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss_Airforce.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss_Airforce.java index b2b29ed..0ab9125 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss_Airforce.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss_Airforce.java @@ -112,7 +112,7 @@ public class LayoutContainer_K_Swiss_Airforce extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - 100); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M3.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M3.java index 68b71c7..5cdc021 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M3.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M3.java @@ -106,7 +106,7 @@ public class LayoutContainer_M3 extends LayoutContainer_I } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - 20); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M4.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M4.java index c6d1ede..a80c446 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M4.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M4.java @@ -139,7 +139,7 @@ public class LayoutContainer_M4 extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) { + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - 30); this.rotor2View.setSelection(state.getTypeRotor2() - 30); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_R.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_R.java index 4d7c496..a19b099 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_R.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_R.java @@ -111,7 +111,7 @@ public class LayoutContainer_R extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - 110); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_T.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_T.java index ac47f1f..bef43a0 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_T.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_T.java @@ -111,7 +111,7 @@ public class LayoutContainer_T extends LayoutContainer } @Override - protected void setLayoutState(EnigmaStateBundle state) + public void setLayoutState(EnigmaStateBundle state) { this.state = state; this.rotor1View.setSelection(state.getTypeRotor1() - 120); diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml index 4639283..158c299 100755 --- a/app/src/main/res/menu/main.xml +++ b/app/src/main/res/menu/main.xml @@ -3,14 +3,18 @@ tools:context=".MainActivity" > + EnigmAndroid Version Zurücksetzen + Zufällige Konfiguration Einstellungen Ringstellung Senden @@ -39,5 +40,6 @@ Steckbrett gesteckert. Keine Änderungen Enigma zurückgesetzt + Enigma auf zufällige Konfiguration gesetzt diff --git a/app/src/main/res/values-de/strings_activity_settings.xml b/app/src/main/res/values-de/strings_activity_settings.xml index ee65914..13c0980 100755 --- a/app/src/main/res/values-de/strings_activity_settings.xml +++ b/app/src/main/res/values-de/strings_activity_settings.xml @@ -12,8 +12,8 @@ G260 (Abwehr) D (Kommerziell) K - K (Schweiz) - K (Schweiz, Luftwaffe) + Swiss-K (Schweiz) + Swiss-K (Schweiz, Luftwaffe) R (\"Rocket\", Reichsbahn) T (\"Tirpitz\", Japan) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9973cf7..27e122e 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,6 +5,7 @@ EnigmAndroid Version Reset + Random configuration Ring-Settings Settings Send @@ -40,6 +41,7 @@ Plugged Plugboard. No changes Enigma reset + Enigma set to random configuration I diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml index a2d1377..892e63b 100755 --- a/app/src/main/res/values/strings_activity_settings.xml +++ b/app/src/main/res/values/strings_activity_settings.xml @@ -13,8 +13,8 @@ G260 (Defense) D (Commercial) K - K (Swiss) - K (Swiss, Airforce) + Swiss-K + Swiss-K (Airforce) R (\"Rocket\", Railway) T (\"Tirpitz\", Japan)