aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd
diff options
context:
space:
mode:
authorHarsh Shandilya <me@msfjarvis.dev>2021-03-09 14:53:11 +0530
committerHarsh Shandilya <me@msfjarvis.dev>2021-03-18 11:40:30 +0530
commit774fda83ac276a635e3402034b1eedbd10be916f (patch)
tree57783a953fcd193d32f1e3dc8df26e07f03df328 /app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd
parentbe31ae37f443982b377d027cd613f04d0926568d (diff)
downloadHardenedPass-774fda83ac276a635e3402034b1eedbd10be916f.tar.gz
HardenedPass-774fda83ac276a635e3402034b1eedbd10be916f.zip
all: reformat with ktfmt
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
Diffstat (limited to 'app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd')
-rw-r--r--app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/CapsType.kt6
-rw-r--r--app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/PasswordBuilder.kt219
-rw-r--r--app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/XkpwdDictionary.kt48
3 files changed, 135 insertions, 138 deletions
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/CapsType.kt b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/CapsType.kt
index 4b398f06..69a4692d 100644
--- a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/CapsType.kt
+++ b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/CapsType.kt
@@ -5,5 +5,9 @@
package dev.msfjarvis.aps.util.pwgenxkpwd
enum class CapsType {
- lowercase, UPPERCASE, TitleCase, Sentence, As_iS
+ lowercase,
+ UPPERCASE,
+ TitleCase,
+ Sentence,
+ As_iS
}
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/PasswordBuilder.kt b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/PasswordBuilder.kt
index 41860293..cc8257b4 100644
--- a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/PasswordBuilder.kt
+++ b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/PasswordBuilder.kt
@@ -16,127 +16,120 @@ import java.util.Locale
class PasswordBuilder(ctx: Context) {
- private var numSymbols = 0
- private var isAppendSymbolsSeparator = false
- private var context = ctx
- private var numWords = 3
- private var maxWordLength = 9
- private var minWordLength = 5
- private var separator = "."
- private var capsType = CapsType.Sentence
- private var prependDigits = 0
- private var numDigits = 0
- private var isPrependWithSeparator = false
- private var isAppendNumberSeparator = false
-
- fun setNumberOfWords(amount: Int) = apply {
- numWords = amount
+ private var numSymbols = 0
+ private var isAppendSymbolsSeparator = false
+ private var context = ctx
+ private var numWords = 3
+ private var maxWordLength = 9
+ private var minWordLength = 5
+ private var separator = "."
+ private var capsType = CapsType.Sentence
+ private var prependDigits = 0
+ private var numDigits = 0
+ private var isPrependWithSeparator = false
+ private var isAppendNumberSeparator = false
+
+ fun setNumberOfWords(amount: Int) = apply { numWords = amount }
+
+ fun setMinimumWordLength(min: Int) = apply { minWordLength = min }
+
+ fun setMaximumWordLength(max: Int) = apply { maxWordLength = max }
+
+ fun setSeparator(separator: String) = apply { this.separator = separator }
+
+ fun setCapitalization(capitalizationScheme: CapsType) = apply { capsType = capitalizationScheme }
+
+ @JvmOverloads
+ fun prependNumbers(numDigits: Int, addSeparator: Boolean = true) = apply {
+ prependDigits = numDigits
+ isPrependWithSeparator = addSeparator
+ }
+
+ @JvmOverloads
+ fun appendNumbers(numDigits: Int, addSeparator: Boolean = false) = apply {
+ this.numDigits = numDigits
+ isAppendNumberSeparator = addSeparator
+ }
+
+ @JvmOverloads
+ fun appendSymbols(numSymbols: Int, addSeparator: Boolean = false) = apply {
+ this.numSymbols = numSymbols
+ isAppendSymbolsSeparator = addSeparator
+ }
+
+ private fun generateRandomNumberSequence(totalNumbers: Int): String {
+ val numbers = StringBuilder(totalNumbers)
+ for (i in 0 until totalNumbers) {
+ numbers.append(secureRandomNumber(10))
}
+ return numbers.toString()
+ }
- fun setMinimumWordLength(min: Int) = apply {
- minWordLength = min
+ private fun generateRandomSymbolSequence(numSymbols: Int): String {
+ val numbers = StringBuilder(numSymbols)
+ for (i in 0 until numSymbols) {
+ numbers.append(SYMBOLS.secureRandomCharacter())
}
-
- fun setMaximumWordLength(max: Int) = apply {
- maxWordLength = max
- }
-
- fun setSeparator(separator: String) = apply {
- this.separator = separator
- }
-
- fun setCapitalization(capitalizationScheme: CapsType) = apply {
- capsType = capitalizationScheme
+ return numbers.toString()
+ }
+
+ @OptIn(ExperimentalStdlibApi::class)
+ fun create(): Result<String, Throwable> {
+ val wordBank = mutableListOf<String>()
+ val password = StringBuilder()
+
+ if (prependDigits != 0) {
+ password.append(generateRandomNumberSequence(prependDigits))
+ if (isPrependWithSeparator) {
+ password.append(separator)
+ }
}
-
- @JvmOverloads
- fun prependNumbers(numDigits: Int, addSeparator: Boolean = true) = apply {
- prependDigits = numDigits
- isPrependWithSeparator = addSeparator
- }
-
- @JvmOverloads
- fun appendNumbers(numDigits: Int, addSeparator: Boolean = false) = apply {
- this.numDigits = numDigits
- isAppendNumberSeparator = addSeparator
- }
-
- @JvmOverloads
- fun appendSymbols(numSymbols: Int, addSeparator: Boolean = false) = apply {
- this.numSymbols = numSymbols
- isAppendSymbolsSeparator = addSeparator
- }
-
- private fun generateRandomNumberSequence(totalNumbers: Int): String {
- val numbers = StringBuilder(totalNumbers)
- for (i in 0 until totalNumbers) {
- numbers.append(secureRandomNumber(10))
+ return runCatching {
+ val dictionary = XkpwdDictionary(context)
+ val words = dictionary.words
+ for (wordLength in minWordLength..maxWordLength) {
+ wordBank.addAll(words[wordLength] ?: emptyList())
+ }
+
+ if (wordBank.size == 0) {
+ throw PasswordGeneratorException(
+ context.getString(R.string.xkpwgen_builder_error, minWordLength, maxWordLength)
+ )
+ }
+
+ for (i in 0 until numWords) {
+ val candidate = wordBank.secureRandomElement()
+ val s =
+ when (capsType) {
+ CapsType.UPPERCASE -> candidate.toUpperCase(Locale.getDefault())
+ CapsType.Sentence -> if (i == 0) candidate.capitalize(Locale.getDefault()) else candidate
+ CapsType.TitleCase -> candidate.capitalize(Locale.getDefault())
+ CapsType.lowercase -> candidate.toLowerCase(Locale.getDefault())
+ CapsType.As_iS -> candidate
+ }
+ password.append(s)
+ if (i + 1 < numWords) {
+ password.append(separator)
}
- return numbers.toString()
- }
-
- private fun generateRandomSymbolSequence(numSymbols: Int): String {
- val numbers = StringBuilder(numSymbols)
- for (i in 0 until numSymbols) {
- numbers.append(SYMBOLS.secureRandomCharacter())
+ }
+ if (numDigits != 0) {
+ if (isAppendNumberSeparator) {
+ password.append(separator)
}
- return numbers.toString()
- }
-
- @OptIn(ExperimentalStdlibApi::class)
- fun create(): Result<String, Throwable> {
- val wordBank = mutableListOf<String>()
- val password = StringBuilder()
-
- if (prependDigits != 0) {
- password.append(generateRandomNumberSequence(prependDigits))
- if (isPrependWithSeparator) {
- password.append(separator)
- }
- }
- return runCatching {
- val dictionary = XkpwdDictionary(context)
- val words = dictionary.words
- for (wordLength in minWordLength..maxWordLength) {
- wordBank.addAll(words[wordLength] ?: emptyList())
- }
-
- if (wordBank.size == 0) {
- throw PasswordGeneratorException(context.getString(R.string.xkpwgen_builder_error, minWordLength, maxWordLength))
- }
-
- for (i in 0 until numWords) {
- val candidate = wordBank.secureRandomElement()
- val s = when (capsType) {
- CapsType.UPPERCASE -> candidate.toUpperCase(Locale.getDefault())
- CapsType.Sentence -> if (i == 0) candidate.capitalize(Locale.getDefault()) else candidate
- CapsType.TitleCase -> candidate.capitalize(Locale.getDefault())
- CapsType.lowercase -> candidate.toLowerCase(Locale.getDefault())
- CapsType.As_iS -> candidate
- }
- password.append(s)
- if (i + 1 < numWords) {
- password.append(separator)
- }
- }
- if (numDigits != 0) {
- if (isAppendNumberSeparator) {
- password.append(separator)
- }
- password.append(generateRandomNumberSequence(numDigits))
- }
- if (numSymbols != 0) {
- if (isAppendSymbolsSeparator) {
- password.append(separator)
- }
- password.append(generateRandomSymbolSequence(numSymbols))
- }
- password.toString()
+ password.append(generateRandomNumberSequence(numDigits))
+ }
+ if (numSymbols != 0) {
+ if (isAppendSymbolsSeparator) {
+ password.append(separator)
}
+ password.append(generateRandomSymbolSequence(numSymbols))
+ }
+ password.toString()
}
+ }
- companion object {
+ companion object {
- private const val SYMBOLS = "!@\$%^&*-_+=:|~?/.;#"
- }
+ private const val SYMBOLS = "!@\$%^&*-_+=:|~?/.;#"
+ }
}
diff --git a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/XkpwdDictionary.kt b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/XkpwdDictionary.kt
index 1e44ab20..ab31892f 100644
--- a/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/XkpwdDictionary.kt
+++ b/app/src/main/java/dev/msfjarvis/aps/util/pwgenxkpwd/XkpwdDictionary.kt
@@ -13,28 +13,28 @@ import java.io.File
class XkpwdDictionary(context: Context) {
- val words: Map<Int, List<String>>
-
- init {
- val prefs = context.sharedPrefs
- val uri = prefs.getString(PreferenceKeys.PREF_KEY_CUSTOM_DICT) ?: ""
- val customDictFile = File(context.filesDir, XKPWD_CUSTOM_DICT_FILE)
-
- val lines = if (prefs.getBoolean(PreferenceKeys.PREF_KEY_IS_CUSTOM_DICT, false) &&
- uri.isNotEmpty() && customDictFile.canRead()) {
- customDictFile.readLines()
- } else {
- context.resources.openRawResource(R.raw.xkpwdict).bufferedReader().readLines()
- }
-
- words = lines.asSequence()
- .map { it.trim() }
- .filter { it.isNotEmpty() && !it.contains(' ') }
- .groupBy { it.length }
- }
-
- companion object {
-
- const val XKPWD_CUSTOM_DICT_FILE = "custom_dict.txt"
- }
+ val words: Map<Int, List<String>>
+
+ init {
+ val prefs = context.sharedPrefs
+ val uri = prefs.getString(PreferenceKeys.PREF_KEY_CUSTOM_DICT) ?: ""
+ val customDictFile = File(context.filesDir, XKPWD_CUSTOM_DICT_FILE)
+
+ val lines =
+ if (prefs.getBoolean(PreferenceKeys.PREF_KEY_IS_CUSTOM_DICT, false) &&
+ uri.isNotEmpty() &&
+ customDictFile.canRead()
+ ) {
+ customDictFile.readLines()
+ } else {
+ context.resources.openRawResource(R.raw.xkpwdict).bufferedReader().readLines()
+ }
+
+ words = lines.asSequence().map { it.trim() }.filter { it.isNotEmpty() && !it.contains(' ') }.groupBy { it.length }
+ }
+
+ companion object {
+
+ const val XKPWD_CUSTOM_DICT_FILE = "custom_dict.txt"
+ }
}