From 2c65173c7183d955295ffee2c525636afae04c0d Mon Sep 17 00:00:00 2001 From: Danny Moesch Date: Sat, 7 Mar 2020 22:40:45 +0100 Subject: [PATCH] Use limited length for password generation --- passKit/Passwords/PasswordGenerator.swift | 6 +++--- .../Passwords/PasswordGeneratorTest.swift | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/passKit/Passwords/PasswordGenerator.swift b/passKit/Passwords/PasswordGenerator.swift index b850377..e53e704 100644 --- a/passKit/Passwords/PasswordGenerator.swift +++ b/passKit/Passwords/PasswordGenerator.swift @@ -83,17 +83,17 @@ public struct PasswordGenerator: Codable { private func generateRandom() -> String { let currentCharacters = characters if groups > 1, isAcceptable(groups: groups) { - return selectRandomly(count: length - groups + 1, from: currentCharacters) + return selectRandomly(count: limitedLength - groups + 1, from: currentCharacters) .slices(count: UInt(groups)) .map { String($0) } .joined(separator: "-") } - return String(selectRandomly(count: length, from: currentCharacters)) + return String(selectRandomly(count: limitedLength, from: currentCharacters)) } private func generateXkcd() -> String { let currentDelimiters = delimiters - return getRandomDelimiter(from: currentDelimiters) + (0 ..< length) + return getRandomDelimiter(from: currentDelimiters) + (0 ..< limitedLength) .map { _ in getRandomWord() + getRandomDelimiter(from: currentDelimiters) } .joined() } diff --git a/passKitTests/Passwords/PasswordGeneratorTest.swift b/passKitTests/Passwords/PasswordGeneratorTest.swift index ae38992..f85615b 100644 --- a/passKitTests/Passwords/PasswordGeneratorTest.swift +++ b/passKitTests/Passwords/PasswordGeneratorTest.swift @@ -55,6 +55,26 @@ class PasswordGeneratorTest: XCTestCase { XCTAssertFalse(generator.isAcceptable(groups: 4)) } + func testRandomGroupsCount() { + [ + PasswordGenerator(length: 15, groups: 4), + PasswordGenerator(length: 24, groups: 5), + PasswordGenerator(length: 63, groups: 8), + ].forEach { generator in + XCTAssertEqual(generator.generate().split(separator: "-").count, generator.groups) + } + } + + func testXKCDWordsCount() { + [ + PasswordGenerator(flavor: .xkcd, length: 4, useSpecialSymbols: false), + PasswordGenerator(flavor: .xkcd, length: 8, useSpecialSymbols: false), + PasswordGenerator(flavor: .xkcd, length: 1, useSpecialSymbols: false), + ].forEach { generator in + XCTAssertEqual(generator.generate().split(whereSeparator: { "0123456789".contains($0) }).count, generator.limitedLength) + } + } + func testRandomPasswordLength() { [ PasswordGenerator(),