vanitasvitae / enigmandroid Goto Github PK
View Code? Open in Web Editor NEWAndroid implementation of the famous Enigma machine
Home Page: https://blog.jabberhead.tk/enigmandroid/
License: GNU General Public License v3.0
Android implementation of the famous Enigma machine
Home Page: https://blog.jabberhead.tk/enigmandroid/
License: GNU General Public License v3.0
Steps to reproduce: Open the page https://f-droid.org/repository/browse/?fdid=de.vanitasvitae.enigmandroid
The problem: There is a sentence: "It has been broken by the great british mathematician Alan Turing."
The solution: Please have a look at the second paragraph of the page https://en.wikipedia.org/wiki/Enigma_machine
This is a potential issue: using lineage OS android 7.1.2 the ring settings reset to 111 after the dialog is closed.
Also the numbers in the drop down menus are in black on a dark grey background and can be hard to read.
Great application! Keep up the good work. Best wishes
Al from UK
Hi, you are wrong, Polish mathematics broke enigma, read wikipedia and edit your description please. Thanks
Thank you.
I have a new Issue with the Rotors. When I implement the historical turnover notches, the Enigma machine isn't compatible to the online simulator anymore. It seems to me, that the simulator turns over the next Rotor when turning from Z to A, no matter which rotor is selected. That is not historical correct according to Wikipedia.
Quote:
Rotor Turnover position(s) BP mnemonic
I R Royal
II F Flags
III W Wave
IV K Kings
V A Above
How should I deal with it?
Online Enigma Simulator: http://people.physik.hu-berlin.de/~palloks/js/enigma/enigma-u_v20.html
Hello
Maybe somebody knows, where the Rings of the enigma machine are for? I know how everything works, except for the rings. There are the rotors which can rotate and there is the plugboard, but on wikipedia there is mentioned some rings and (in german) "Ringstellung" (in english: ring settings, ring position). Unfortunately im not able to propper interpret the wikipedia article. Maybe the ring settings are used to configure the point where one rotor kicks of the next?
Would be cool if someone could help me on this.
Edit: I think I understood, how the Ringstellung should work in theorie.
Quote from Wikipedia:
"A later improvement was the ability to adjust the alphabet ring relative to the rotor disk. The position of the ring was known as the Ringstellung ("ring setting"), and was a part of the initial setting prior to an operating session."
So the Ringstellung is nothing but the rotation of the labeling of the rotors. I think I can implement this.
The version title is correct, but the listed changes are not the latest ones.
The program runs fine on my Android 10 and 6 devices, but on an Android 5 device (Sony M4 Aqua) it crashes at startup:
--------- beginning of crash
02-16 02:04:57.047 E/AndroidRuntime(9380): FATAL EXCEPTION: main
02-16 02:04:57.047 E/AndroidRuntime(9380): Process: de.vanitasvitae.enigmandroid, PID: 9380
02-16 02:04:57.047 E/AndroidRuntime(9380): java.lang.NoSuchMethodError: No virtual method setDropDownViewTheme(Landroid/content/res/Resources$Theme;)V in class Landroid/widget/ArrayAdapter; or its super classes (declaration of 'android.widget.ArrayAdapter' appears in /system/framework/framework.jar)
02-16 02:04:57.047 E/AndroidRuntime(9380): at de.vanitasvitae.enigmandroid.layout.LayoutContainer.prepareSpinnerAdapter(LayoutContainer.java:147)
02-16 02:04:57.047 E/AndroidRuntime(9380): at de.vanitasvitae.enigmandroid.layout.LayoutContainer_I.assembleLayout(LayoutContainer_I.java:78)
02-16 02:04:57.047 E/AndroidRuntime(9380): at de.vanitasvitae.enigmandroid.layout.LayoutContainer.<init>(LayoutContainer.java:68)
02-16 02:04:57.047 E/AndroidRuntime(9380): at de.vanitasvitae.enigmandroid.layout.LayoutContainer_I.<init>(LayoutContainer_I.java:46)
02-16 02:04:57.047 E/AndroidRuntime(9380): at de.vanitasvitae.enigmandroid.layout.LayoutContainer.createLayoutContainer(LayoutContainer.java:104)
02-16 02:04:57.047 E/AndroidRuntime(9380): at de.vanitasvitae.enigmandroid.layout.LayoutContainer.createLayoutContainer(LayoutContainer.java:97)
02-16 02:04:57.047 E/AndroidRuntime(9380): at de.vanitasvitae.enigmandroid.MainActivity.onCreate(MainActivity.java:78)
02-16 02:04:57.047 E/AndroidRuntime(9380): at android.app.Activity.performCreate(Activity.java:5976)
02-16 02:04:57.047 E/AndroidRuntime(9380): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
02-16 02:04:57.047 E/AndroidRuntime(9380): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2297)
02-16 02:04:57.047 E/AndroidRuntime(9380): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2404)
02-16 02:04:57.047 E/AndroidRuntime(9380): at android.app.ActivityThread.access$800(ActivityThread.java:145)
02-16 02:04:57.047 E/AndroidRuntime(9380): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
02-16 02:04:57.047 E/AndroidRuntime(9380): at android.os.Handler.dispatchMessage(Handler.java:102)
02-16 02:04:57.047 E/AndroidRuntime(9380): at android.os.Looper.loop(Looper.java:135)
02-16 02:04:57.047 E/AndroidRuntime(9380): at android.app.ActivityThread.main(ActivityThread.java:5319)
02-16 02:04:57.047 E/AndroidRuntime(9380): at java.lang.reflect.Method.invoke(Native Method)
02-16 02:04:57.047 E/AndroidRuntime(9380): at java.lang.reflect.Method.invoke(Method.java:372)
02-16 02:04:57.047 E/AndroidRuntime(9380): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
02-16 02:04:57.047 E/AndroidRuntime(9380): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
02-16 02:04:57.059 W/ActivityManager(889): Force finishing activity de.vanitasvitae.enigmandroid/.MainActivity
02-16 02:04:57.089 D/ForegroundUtils(1740): Foreground changed, PID: 1808 UID: 10091 foreground: true
02-16 02:04:57.089 D/ForegroundUtils(1740): Foreground UID/PID combinations:
02-16 02:04:57.089 D/ForegroundUtils(1740): UID: 10091 PID: 1808
02-16 02:04:57.089 D/ForegroundUtils(1740): UID: 10310 PID: 9380
02-16 02:04:57.090 I/Process (9380): Sending signal. PID: 9380 SIG: 9
EnigmAndroid crashes if the user inserts a number as "PlugBoard".
The StackTrace:
E/AndroidRuntime( 1930): FATAL EXCEPTION: main
E/AndroidRuntime( 1930): java.lang.IllegalStateException: Could not execute method of the activity
E/AndroidRuntime( 1930): at android.view.View$1.onClick(View.java:3591)
E/AndroidRuntime( 1930): at android.view.View.performClick(View.java:4084)
E/AndroidRuntime( 1930): at android.view.View$PerformClick.run(View.java:16966)
E/AndroidRuntime( 1930): at android.os.Handler.handleCallback(Handler.java:615)
E/AndroidRuntime( 1930): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 1930): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 1930): at android.app.ActivityThread.main(ActivityThread.java:4745)
E/AndroidRuntime( 1930): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1930): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 1930): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
E/AndroidRuntime( 1930): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime( 1930): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 1930): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime( 1930): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1930): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 1930): at android.view.View$1.onClick(View.java:3586)
E/AndroidRuntime( 1930): ... 11 more
E/AndroidRuntime( 1930): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=26; index=-9
E/AndroidRuntime( 1930): at de.vanitasvitae.enigmandroid.Plugboard.setPlugPair(Plugboard.java:64)
E/AndroidRuntime( 1930): at de.vanitasvitae.enigmandroid.Enigma.setPlugboard(Enigma.java:203)
E/AndroidRuntime( 1930): at de.vanitasvitae.enigmandroid.MainActivity.updateEnigma(MainActivity.java:117)
E/AndroidRuntime( 1930): at de.vanitasvitae.enigmandroid.MainActivity.doCrypto(MainActivity.java:134)
E/AndroidRuntime( 1930): ... 14 more
In the same way that the rotor numbers (I-II-III etc.) are displayed, showing the ringstellung numbers would improve the interface. If this display seems too crowded, a toggle to display/hide them could be used.
Also white on black for the drop down ringstellung menus would make them easier to see.
Great piece of software, keep up the good work!
F-Droid will update how we display summary text in our next app release. Summary text will now always be highlighted and prepended to the long app description.
Your long description text starts with the same text you've got in your summary. This will look redundant. I recommend to remove the summary text from your long description.
here are more infos/screenshots about this update: fdroidclient!855
Dear developers,
We have recently developed a state-of-the-art static analysis tool for uncovering API compatibility issues in Android apps. Applying this tool to open source apps on F-droid, we have exposed a few instances of compatibility issues and submitting them to development teams for a fix.
For your app, we have found that this project has accessed the following APIs which are available only on an API level higher than the declared minSdkVersion and which are accessed without proper protection. In other words, if those APIs get called at runtime, it will trigger a NoSuchMethodError and thus result in a crash of the running application.
<android.app.Fragment: void startActivityForResult(android.content.Intent,int)>:[11,25]
<android.app.Fragment: android.app.Activity getActivity()>:[11,25]
<android.app.Fragment: void startActivity(android.content.Intent)>:[11,25]
Note that, because of the nature of the static analysis, we cannot confirm whether the flagged APIs would actually be called at runtime (e.g., unreachable code). However, we still believe that those APIs, which may cause compatibility issues, should not be accessed or at least be accessed with proper protections.
In addition to the aforementioned APIs (i.e., backward-compatibility), which could cause app crashes if accessed, we have also identified that this project has also accessed some APIs that have been removed from the latest public SDK, making the app possibly suffer from forward-compatibility issues.
NONE
We would be very much appreciated if you can acknowledge to us that those reported APIs are indeed problematic for the project’s long-term stability. please let us know if you need any more information relating to this issue report.
Hello @vanitasvitae , I enjoy using this app, it is very useful for me! However, I found a misleading widget in this app. Maybe because I'm used to the "settings" button in other apps, I thought this widget would take me to a new page with various options. But I found a dialog popped up. I thought I had made some mistakes at first and it is confusing for me.
So, just as a personal suggestion, the "options" can be put on a new page so users will not be confused. To improve the user experience, could you try to redesign the widget? And thanks for your useful app!
Then it is easier to see the connections.
@afmachado since you contributed to the app by translating it to brazil, I'd like to ask, whether you would mind if I change the apps license from GPLv2-only to GPLv3+.
I think this would benefit the user, as well as developers since it would become easier to combine the software with other licenses such as Apache License v2 (see here).
See GCC geocache tool as a comparison.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.