├── passwordmaker ├── .gitignore ├── libs │ └── tasermonkeys-gjson-1.7.1.jar ├── src │ ├── main │ │ ├── res │ │ │ ├── drawable-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_menu_copy_holo_light.png │ │ │ │ ├── ic_action_av_add_to_queue.png │ │ │ │ ├── ic_action_collections_labels.png │ │ │ │ └── ic_action_content_import_export.png │ │ │ ├── drawable-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_menu_copy_holo_light.png │ │ │ │ ├── ic_action_av_add_to_queue.png │ │ │ │ ├── ic_action_collections_labels.png │ │ │ │ └── ic_action_content_import_export.png │ │ │ ├── values-large │ │ │ │ ├── strings.xml │ │ │ │ └── refs.xml │ │ │ ├── drawable-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_action_av_add_to_queue.png │ │ │ │ ├── ic_menu_copy_holo_light.png │ │ │ │ ├── ic_action_collections_labels.png │ │ │ │ └── ic_action_content_import_export.png │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_menu_copy_holo_light.png │ │ │ │ ├── ic_action_av_add_to_queue.png │ │ │ │ ├── ic_action_collections_labels.png │ │ │ │ └── ic_action_content_import_export.png │ │ │ ├── values │ │ │ │ ├── dimens.xml │ │ │ │ ├── styles.xml │ │ │ │ └── strings.xml │ │ │ ├── values-w820dp │ │ │ │ └── dimens.xml │ │ │ ├── layout │ │ │ │ ├── activity_account_detail.xml │ │ │ │ ├── activity_patterndata_detail.xml │ │ │ │ ├── activity_patterndata_list.xml │ │ │ │ ├── toolbar.xml │ │ │ │ ├── fragment_account_list.xml │ │ │ │ ├── activity_account_list.xml │ │ │ │ ├── activity_edit_favorites.xml │ │ │ │ ├── dialog_set_pwd_hash.xml │ │ │ │ ├── activity_patterndata_twopane.xml │ │ │ │ ├── activity_account_twopane.xml │ │ │ │ ├── activity_import_export_rdf.xml │ │ │ │ ├── fragment_patterndata_detail.xml │ │ │ │ ├── activity_main.xml │ │ │ │ └── fragment_account_detail.xml │ │ │ ├── drawable │ │ │ │ └── list_item_account_selector.xml │ │ │ ├── menu │ │ │ │ ├── edit_favorites.xml │ │ │ │ ├── pattern_data_list.xml │ │ │ │ ├── account_list.xml │ │ │ │ ├── account_list_menu.xml │ │ │ │ └── main.xml │ │ │ ├── values-sw600dp │ │ │ │ └── refs.xml │ │ │ └── xml │ │ │ │ └── preferences.xml │ │ ├── java │ │ │ └── org │ │ │ │ └── passwordmaker │ │ │ │ ├── android │ │ │ │ ├── preferences │ │ │ │ │ ├── SettingsFragment.java │ │ │ │ │ └── MasterPasswordPreference.java │ │ │ │ ├── TextWatcherAdapter.java │ │ │ │ ├── AndroidGlobalSettings.java │ │ │ │ ├── Logtags.java │ │ │ │ ├── AndroidRDFDatabaseWriter.java │ │ │ │ ├── EditFavoritesFragment.java │ │ │ │ ├── SettingsActivity.java │ │ │ │ ├── AlgorithmSelectionValues.java │ │ │ │ ├── adapters │ │ │ │ │ └── SubstringArrayAdapter.java │ │ │ │ ├── PatternDataDetailActivity.java │ │ │ │ ├── AccountDetailActivity.java │ │ │ │ ├── EditFavoritesActivity.java │ │ │ │ ├── ImportExportRdf.java │ │ │ │ ├── xmlwrappers │ │ │ │ │ └── AndroidXmlStreamWriter.java │ │ │ │ ├── PatternDataListActivity.java │ │ │ │ ├── PatternDataDetailFragment.java │ │ │ │ ├── PatternDataListFragment.java │ │ │ │ ├── AccountListActivity.java │ │ │ │ ├── ClassicSettingsImporter.java │ │ │ │ ├── PwmApplication.java │ │ │ │ ├── AccountListFragment.java │ │ │ │ └── widgets │ │ │ │ │ └── SwipeDismissListViewTouchListener.java │ │ │ │ └── AccountManagerSamples.java │ │ └── AndroidManifest.xml │ └── androidTest │ │ ├── java │ │ └── org │ │ │ └── passwordmaker │ │ │ ├── TestUtils.java │ │ │ └── PwmTest.java │ │ └── resources │ │ └── test.xml ├── lint.xml ├── proguard-rules.txt ├── set_signing_env_vars.sh └── build.gradle ├── settings.gradle ├── assets └── store │ ├── pwm-ring.png │ ├── pwm-feature.jpg │ ├── pwm-promo-graphic.png │ └── store-listing.txt ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── gradle.properties ├── gradlew.bat ├── gradlew └── README.md /passwordmaker/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':passwordmaker' 2 | -------------------------------------------------------------------------------- /assets/store/pwm-ring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/assets/store/pwm-ring.png -------------------------------------------------------------------------------- /assets/store/pwm-feature.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/assets/store/pwm-feature.jpg -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /assets/store/pwm-promo-graphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/assets/store/pwm-promo-graphic.png -------------------------------------------------------------------------------- /passwordmaker/libs/tasermonkeys-gjson-1.7.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/libs/tasermonkeys-gjson-1.7.1.jar -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/values-large/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Password Maker Pro 4 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-hdpi/ic_menu_copy_holo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-hdpi/ic_menu_copy_holo_light.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-mdpi/ic_menu_copy_holo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-mdpi/ic_menu_copy_holo_light.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-hdpi/ic_action_av_add_to_queue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-hdpi/ic_action_av_add_to_queue.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-mdpi/ic_action_av_add_to_queue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-mdpi/ic_action_av_add_to_queue.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-xhdpi/ic_action_av_add_to_queue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-xhdpi/ic_action_av_add_to_queue.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-xhdpi/ic_menu_copy_holo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-xhdpi/ic_menu_copy_holo_light.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-xxhdpi/ic_menu_copy_holo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-xxhdpi/ic_menu_copy_holo_light.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | gen 2 | bin 3 | out 4 | build/ 5 | .classpath 6 | .settings 7 | .project 8 | .metadata 9 | .DS_Store 10 | .idea 11 | *.iml 12 | proguard_logs 13 | .gradle 14 | local.properties 15 | release/ 16 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-hdpi/ic_action_collections_labels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-hdpi/ic_action_collections_labels.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-mdpi/ic_action_collections_labels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-mdpi/ic_action_collections_labels.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-xxhdpi/ic_action_av_add_to_queue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-xxhdpi/ic_action_av_add_to_queue.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-hdpi/ic_action_content_import_export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-hdpi/ic_action_content_import_export.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-mdpi/ic_action_content_import_export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-mdpi/ic_action_content_import_export.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-xhdpi/ic_action_collections_labels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-xhdpi/ic_action_collections_labels.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-xxhdpi/ic_action_collections_labels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-xxhdpi/ic_action_collections_labels.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-xhdpi/ic_action_content_import_export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-xhdpi/ic_action_content_import_export.png -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable-xxhdpi/ic_action_content_import_export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/passwordmaker/android-passwordmaker/HEAD/passwordmaker/src/main/res/drawable-xxhdpi/ic_action_content_import_export.png -------------------------------------------------------------------------------- /passwordmaker/lint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Feb 11 20:01:53 EST 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip 7 | -------------------------------------------------------------------------------- /passwordmaker/src/androidTest/java/org/passwordmaker/TestUtils.java: -------------------------------------------------------------------------------- 1 | package org.passwordmaker; 2 | 3 | import org.daveware.passwordmaker.SecureCharArray; 4 | 5 | public class TestUtils { 6 | public static String saToString(SecureCharArray arr) { 7 | return new String(arr.getData()); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/activity_account_detail.xml: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/drawable/list_item_account_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/activity_patterndata_detail.xml: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/menu/edit_favorites.xml: -------------------------------------------------------------------------------- 1 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/menu/pattern_data_list.xml: -------------------------------------------------------------------------------- 1 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /passwordmaker/src/main/java/org/passwordmaker/android/preferences/SettingsFragment.java: -------------------------------------------------------------------------------- 1 | package org.passwordmaker.android.preferences; 2 | 3 | import android.os.Bundle; 4 | import android.preference.PreferenceFragment; 5 | import org.passwordmaker.android.R; 6 | 7 | public class SettingsFragment extends PreferenceFragment { 8 | @Override 9 | public void onCreate(Bundle savedInstanceState) { 10 | super.onCreate(savedInstanceState); 11 | 12 | // Load the preferences from an XML resource 13 | addPreferencesFromResource(R.xml.preferences); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/activity_patterndata_list.xml: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /passwordmaker/src/main/java/org/passwordmaker/android/TextWatcherAdapter.java: -------------------------------------------------------------------------------- 1 | package org.passwordmaker.android; 2 | 3 | import android.text.Editable; 4 | import android.text.TextWatcher; 5 | 6 | public abstract class TextWatcherAdapter implements TextWatcher { 7 | @Override 8 | public void beforeTextChanged(CharSequence s, int start, int count, int after) { 9 | 10 | } 11 | 12 | @Override 13 | public void onTextChanged(CharSequence s, int start, int before, int count) { 14 | 15 | } 16 | 17 | @Override 18 | public void afterTextChanged(Editable s) { 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/values-large/refs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | @layout/activity_account_twopane 12 | @layout/activity_patterndata_twopane 13 | 14 | 15 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/values-sw600dp/refs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | @layout/activity_account_twopane 12 | @layout/activity_patterndata_twopane 13 | 14 | 15 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/fragment_account_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | -------------------------------------------------------------------------------- /passwordmaker/src/main/java/org/passwordmaker/android/AndroidGlobalSettings.java: -------------------------------------------------------------------------------- 1 | package org.passwordmaker.android; 2 | 3 | import org.daveware.passwordmaker.GlobalSettingKey; 4 | 5 | public class AndroidGlobalSettings { 6 | public final static GlobalSettingKey FAVORITES = new GlobalSettingKey("NS1:favorites", ""); 7 | public final static GlobalSettingKey MASTER_PASSWORD_HASH = new GlobalSettingKey("NS1:MASTER_PWD_HASH", ""); 8 | public final static GlobalSettingKey STORE_MASTER_PASSWORD_HASH = new GlobalSettingKey("NS1:STORE_MASTER_PWD_HASH", "false"); 9 | public final static GlobalSettingKey MASTER_PASSWORD_SALT = new GlobalSettingKey("NS1:MASTER_PWD_SALT", ""); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/activity_account_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | 15 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/menu/account_list.xml: -------------------------------------------------------------------------------- 1 | 4 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /passwordmaker/src/main/java/org/passwordmaker/android/Logtags.java: -------------------------------------------------------------------------------- 1 | package org.passwordmaker.android; 2 | 3 | public enum Logtags { 4 | 5 | 6 | MAIN_ACTIVITY("MAIN"), 7 | ACCOUNT_DETAIL_ACTIVITY("ADA"), 8 | ACCOUNT_DETAIL_FRAGMENT("ADF"), 9 | ACCOUNT_LIST_ACTIVITY("ALA"), 10 | ACCOUNT_LIST_FRAGMENT("ALF"), 11 | CLASSIC_SETTINGS_IMPORTER("CSI"), 12 | IMPORT_EXPORT_RDF("IMEX"), 13 | PATTERN_DATA_DETAIL_ACTIVITY("PDDA"), 14 | PATTERN_DATA_DETAIL_FRAGMENT("PDDF"), 15 | PATTERN_DATA_LIST_ACTIVITY("PDLA"), 16 | PATTERN_DATA_LIST_FRAGMENT("PDLF"), 17 | PWM_APPLICATION("PAPP") 18 | ; 19 | 20 | private final String tag; 21 | Logtags(String tag) { 22 | this.tag = "PWM/" + tag; 23 | } 24 | 25 | 26 | public String getTag() { 27 | return tag; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /passwordmaker/src/main/java/org/passwordmaker/android/AndroidRDFDatabaseWriter.java: -------------------------------------------------------------------------------- 1 | package org.passwordmaker.android; 2 | 3 | import org.daveware.passwordmaker.RDFDatabaseWriter; 4 | import org.daveware.passwordmaker.xmlwrappers.XmlIOException; 5 | import org.daveware.passwordmaker.xmlwrappers.XmlStreamWriter; 6 | import org.passwordmaker.android.xmlwrappers.AndroidXmlStreamWriter; 7 | 8 | import java.io.Writer; 9 | 10 | /** 11 | * This is a specialized version of the default RDFDatabaseWriter that just changes the underlining XMLStreamWriter 12 | * to one that exist in the Android ecosystem. 13 | */ 14 | public class AndroidRDFDatabaseWriter extends RDFDatabaseWriter { 15 | @Override 16 | protected XmlStreamWriter newXmlStreamWriter(Writer writer) throws XmlIOException { 17 | return new AndroidXmlStreamWriter(writer); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /passwordmaker/proguard-rules.txt: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /opt/android-sdk-macosx/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the ProGuard 5 | # include property in project.properties. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -dontobfuscate 12 | 13 | # If your project uses WebView with JS, uncomment the following 14 | # and specify the fully qualified class name to the JavaScript interface 15 | # class: 16 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 17 | # public *; 18 | #} 19 | -dontwarn javax.naming.** 20 | -dontwarn javax.annotation.** 21 | -dontwarn javax.xml.stream.** 22 | -dontwarn sun.misc.Unsafe 23 | -keep class org.spongycastle.** -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/activity_edit_favorites.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 20 | 21 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/menu/account_list_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 15 | 20 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/menu/main.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 15 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/xml/preferences.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 16 | 20 | 24 | 28 | -------------------------------------------------------------------------------- /passwordmaker/set_signing_env_vars.sh: -------------------------------------------------------------------------------- 1 | # this file must not be ran as a separate process in order to modify your environment. 2 | # intead use this file at the CLI by doing: source set_signing_env_vars.sh 3 | echo -n "Keystore file: " 4 | if [ -n "$PASSWORDMAKER_KEYSTORE_FILE" ]; then 5 | echo -n "($PASSWORDMAKER_KEYSTORE_FILE) " 6 | fi 7 | read PASSWORDMAKER_KEYSTORE_FILE_TMP 8 | if [ -n "$PASSWORDMAKER_KEYSTORE_FILE_TMP" ]; then 9 | PASSWORDMAKER_KEYSTORE_FILE=$PASSWORDMAKER_KEYSTORE_FILE_TMP 10 | unset PASSWORDMAKER_KEYSTORE_FILE_TMP 11 | fi 12 | echo "File set to: $PASSWORDMAKER_KEYSTORE_FILE" 13 | echo -n "Keystore password: " 14 | read -s PASSWORDMAKER_KEYSTORE_PASSWORD 15 | echo -n "\nKey alias: " 16 | 17 | if [ -n "$PASSWORDMAKER_KEYSTORE_KEY_ALIAS" ]; then 18 | echo -n "($PASSWORDMAKER_KEYSTORE_KEY_ALIAS) " 19 | fi 20 | read PASSWORDMAKER_KEYSTORE_KEY_ALIAS_TMP 21 | if [ -n "$PASSWORDMAKER_KEYSTORE_KEY_ALIAS_TMP" ]; then 22 | PASSWORDMAKER_KEYSTORE_KEY_ALIAS=$PASSWORDMAKER_KEYSTORE_KEY_ALIAS_TMP 23 | unset PASSWORDMAKER_KEYSTORE_KEY_ALIAS_TMP 24 | fi 25 | echo "Key alias set to: $PASSWORDMAKER_KEYSTORE_KEY_ALIAS" 26 | echo -n "Key password: " 27 | read -s PASSWORDMAKER_KEYSTORE_KEY_PASSWORD 28 | echo 29 | 30 | export PASSWORDMAKER_KEYSTORE_FILE 31 | export PASSWORDMAKER_KEYSTORE_PASSWORD 32 | export PASSWORDMAKER_KEYSTORE_KEY_ALIAS 33 | export PASSWORDMAKER_KEYSTORE_KEY_PASSWORD 34 | -------------------------------------------------------------------------------- /assets/store/store-listing.txt: -------------------------------------------------------------------------------- 1 | #Title 2 | PasswordMaker Pro 3 | 4 | #Short Description 5 | PasswordMaker creates unique, secure passwords that are not needed to be saved. 6 | 7 | #Full Description 8 | ONE PASSWORD TO RULE THEM ALL 9 | 10 | PasswordMaker creates unique, secure passwords that are very easy for you to retrieve but no one else. Nothing is stored anywhere, anytime, so there's nothing to be hacked, lost, or stolen. 11 | 12 | You provide PasswordMaker two pieces of information: a "master password" -- that one, single password you like -- and the URL of the website requiring a password. PasswordMaker will then generate a unique password using a one-way hash, which will protect your master password. 13 | 14 | Compatible with the other versions of Passwordmaker for other devices and computers. 15 | 16 | See http://android.passwordmaker.org/ for more information on PasswordMaker. 17 | 18 | If you have questions, comments or concerns please post them on them on the github issue tracker by following the link above. I do not monitor the ratings and comments here. Also go to the page: http://passwordmaker.org to find other versions for other platforms like the chrome or firefox versions of passwordmaker. 19 | 20 | # Categorization 21 | Application Type: Applications 22 | Category: Tools 23 | Content rating: Everyone 24 | Website: http://android.passwordmaker.org 25 | Email: pwmp.for.android@gmail.com -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/dialog_set_pwd_hash.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 12 | 22 | 32 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/activity_patterndata_twopane.xml: -------------------------------------------------------------------------------- 1 | 12 | 13 | 23 | 24 | 31 | 32 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /passwordmaker/src/main/java/org/passwordmaker/android/EditFavoritesFragment.java: -------------------------------------------------------------------------------- 1 | package org.passwordmaker.android; 2 | 3 | import android.app.ListFragment; 4 | import android.os.Bundle; 5 | import android.widget.ArrayAdapter; 6 | import android.widget.ListView; 7 | import org.passwordmaker.android.widgets.SwipeDismissListViewTouchListener; 8 | 9 | public class EditFavoritesFragment extends ListFragment implements SwipeDismissListViewTouchListener.DismissCallbacks { 10 | 11 | private ArrayAdapter favorites; 12 | // We require to keep a reference for the listener 13 | @SuppressWarnings("FieldCanBeLocal") 14 | private SwipeDismissListViewTouchListener touchListener; 15 | 16 | 17 | @Override 18 | public void onCreate(Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | 21 | favorites = new ArrayAdapter( 22 | getActivity(), 23 | android.R.layout.simple_list_item_activated_1, 24 | android.R.id.text1, PwmApplication.getInstance().getAccountManager().getFavoriteUrls()); 25 | setListAdapter(favorites); 26 | } 27 | 28 | @Override 29 | public void onStart() { 30 | super.onStart(); 31 | ListView listView = getListView(); 32 | touchListener = new SwipeDismissListViewTouchListener(listView, this); 33 | listView.setOnTouchListener(touchListener); 34 | listView.setOnScrollListener(touchListener.makeScrollListener()); 35 | } 36 | 37 | public void addItem(String title) { 38 | favorites.add(title); 39 | } 40 | 41 | @Override 42 | public boolean canDismiss(int position) { 43 | return true; 44 | } 45 | 46 | @Override 47 | public void onDismiss(ListView listView, int[] reverseSortedPositions) { 48 | for (int position : reverseSortedPositions) { 49 | favorites.remove(favorites.getItem(position)); 50 | } 51 | favorites.notifyDataSetChanged(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/activity_account_twopane.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 20 | 21 | 31 | 32 | 39 | 40 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /passwordmaker/src/main/java/org/passwordmaker/android/preferences/MasterPasswordPreference.java: -------------------------------------------------------------------------------- 1 | package org.passwordmaker.android.preferences; 2 | 3 | import android.content.Context; 4 | import android.preference.DialogPreference; 5 | import android.util.AttributeSet; 6 | import android.view.View; 7 | import android.widget.EditText; 8 | import android.widget.Toast; 9 | import org.daveware.passwordmaker.AccountManager; 10 | import org.jetbrains.annotations.NotNull; 11 | import org.passwordmaker.android.PwmApplication; 12 | import org.passwordmaker.android.R; 13 | 14 | public class MasterPasswordPreference extends DialogPreference { 15 | private View dlgView; 16 | public MasterPasswordPreference(Context context, AttributeSet attrs) { 17 | super(context, attrs); 18 | setDialogLayoutResource(R.layout.dialog_set_pwd_hash); 19 | setPositiveButtonText(android.R.string.ok); 20 | setNegativeButtonText(android.R.string.cancel); 21 | 22 | setDialogIcon(null); 23 | } 24 | 25 | @Override 26 | protected void onBindDialogView(@NotNull View view) { 27 | super.onBindDialogView(view); 28 | dlgView = view; 29 | } 30 | 31 | @Override 32 | protected void onDialogClosed(boolean positiveResult) { 33 | // When the user selects "OK", persist the new value 34 | if (positiveResult) { 35 | EditText password = (EditText)dlgView.findViewById(R.id.password); 36 | EditText confirmed = (EditText)dlgView.findViewById(R.id.confirm_password); 37 | if ( ! password.getText().toString().equals(confirmed.getText().toString())) { 38 | Toast.makeText(getContext(), "Password Mismatch", Toast.LENGTH_SHORT).show(); 39 | return; 40 | } 41 | AccountManager accountManager = PwmApplication.getInstance().getAccountManager(); 42 | if ( password.getText().length() == 0 ) { 43 | accountManager.disablePasswordHash(); 44 | persistBoolean(false); 45 | } else { 46 | accountManager.setCurrentPasswordHashPassword(password.getText().toString()); 47 | persistBoolean(true); 48 | } 49 | PwmApplication.getInstance().saveSettings(getContext()); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /passwordmaker/src/androidTest/resources/test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 13 | 19 | 25 | 26 | -------------------------------------------------------------------------------- /passwordmaker/src/main/java/org/passwordmaker/android/SettingsActivity.java: -------------------------------------------------------------------------------- 1 | package org.passwordmaker.android; 2 | 3 | import android.app.ActionBar; 4 | import android.app.Activity; 5 | import android.os.Bundle; 6 | import android.support.v4.app.NavUtils; 7 | import android.view.MenuItem; 8 | import org.passwordmaker.android.preferences.SettingsFragment; 9 | 10 | // Unused is suppressed just to have a reference for preferences 11 | @SuppressWarnings("UnusedDeclaration") 12 | public class SettingsActivity extends Activity { 13 | 14 | public static final String KEY_SHOW_USERNAME = "pref_showUsername"; 15 | public static final String KEY_SAVED_LENGTH = "pref_saveInputs"; 16 | public static final String KEY_SHOW_PASS_STRENGTH = "pref_showPasswordStrength"; 17 | public static final String KEY_MASTER_PASSWORD_HASH = "pref_masterPasswordHash"; 18 | public static final String KEY_AUTO_ADD_INPUT_FAVS = "pref_AutoAddTextToFavorites"; 19 | 20 | @Override 21 | protected void onCreate(Bundle savedInstanceState) { 22 | super.onCreate(savedInstanceState); 23 | // Show the Up button in the action bar. 24 | setDisplayHomeAsUpEnabled(); 25 | 26 | getFragmentManager().beginTransaction() 27 | .replace(android.R.id.content, new SettingsFragment()) 28 | .commit(); 29 | } 30 | 31 | private void setDisplayHomeAsUpEnabled() { 32 | // prevent the possible nullpointer if getActionBar returns null. 33 | ActionBar actionBar = getActionBar(); 34 | if ( actionBar != null ) actionBar.setDisplayHomeAsUpEnabled(true); 35 | } 36 | 37 | @Override 38 | public boolean onOptionsItemSelected(MenuItem item) { 39 | int id = item.getItemId(); 40 | if (id == android.R.id.home) { 41 | // This ID represents the Home or Up button. In the case of this 42 | // activity, the Up button is shown. Use NavUtils to allow users 43 | // to navigate up one level in the application structure. For 44 | // more details, see the Navigation pattern on Android Design: 45 | // 46 | // http://developer.android.com/design/patterns/navigation.html#up-vs-back 47 | // 48 | NavUtils.navigateUpFromSameTask(this); 49 | return true; 50 | } 51 | return super.onOptionsItemSelected(item); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /passwordmaker/src/androidTest/java/org/passwordmaker/PwmTest.java: -------------------------------------------------------------------------------- 1 | package org.passwordmaker; 2 | 3 | import org.daveware.passwordmaker.*; 4 | 5 | import java.security.Security; 6 | 7 | import static org.passwordmaker.TestUtils.saToString; 8 | 9 | /** 10 | * The purpose of this test is to make sure that the hash functions are available on the Android Emulator. 11 | * 12 | * The real unit tests for this functionality is in the passwordmaker-je-lib 13 | * 14 | */ 15 | public class PwmTest extends junit.framework.TestCase { 16 | static { 17 | PasswordMaker.setDefaultCryptoProvider("SC"); 18 | Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1); 19 | } 20 | 21 | protected void performTest(AlgorithmType algorithmType, boolean useHMac, String expected) throws Exception { 22 | Account profile = new Account(); 23 | profile.setCharacterSet(CharacterSets.ALPHANUMERIC); 24 | profile.setAlgorithm(algorithmType); 25 | profile.setHmac(useHMac); 26 | profile.setLength(8); 27 | profile.clearUrlComponents(); 28 | profile.addUrlComponent(Account.UrlComponents.Domain); 29 | 30 | SecureUTF8String masterPassword = new SecureUTF8String("happy"); 31 | 32 | PasswordMaker pwm = new PasswordMaker(); 33 | assertEquals(expected, saToString(pwm.makePassword(masterPassword, profile, "google.com"))); 34 | } 35 | 36 | public void testMD5() throws Exception { 37 | performTest(AlgorithmType.MD5, false, "HRdgNiyh"); 38 | } 39 | public void testMD4() throws Exception { 40 | performTest(AlgorithmType.MD4, false, "HtzLxeLD"); 41 | } 42 | public void testRIPEMD160() throws Exception { 43 | performTest(AlgorithmType.RIPEMD160, false, "joh9YCZc"); 44 | } 45 | public void testSHA1() throws Exception { 46 | performTest(AlgorithmType.SHA1, false, "iEXyQtf6"); 47 | } 48 | public void testSHA256() throws Exception { 49 | performTest(AlgorithmType.SHA256, false, "w8BStwWP"); 50 | } 51 | public void testMD5HMac() throws Exception { 52 | performTest(AlgorithmType.MD5, true, "BdVB2Ye3"); 53 | } 54 | public void testMD4HMac() throws Exception { 55 | performTest(AlgorithmType.MD4, true, "FYrXl6y9"); 56 | } 57 | public void testRIPEMD160HMac() throws Exception { 58 | performTest(AlgorithmType.RIPEMD160, true, "IeMWw25Q"); 59 | } 60 | public void testSHA1HMac() throws Exception { 61 | performTest(AlgorithmType.SHA1, true, "YqVH5OAk"); 62 | } 63 | public void testSHA256HMac() throws Exception { 64 | performTest(AlgorithmType.SHA256, true, "Qljpvcsf"); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /passwordmaker/src/main/res/layout/activity_import_export_rdf.xml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 20 | 21 |