Skip to content

Conversation

@bmwalters
Copy link

Fixes #211

Overview

  • Adds a new parameter to Generator named "Representation". This is an enum with two values: numeric and steamguard.
    • Steam Guard codes are 5 alphanumeric digits instead of base-10.
    • There is only one valid configuration of parameters to obtain a valid Steam Guard token generator: 30 second TOTP, sha1, 5 digits, steamguard representation.
      • To keep the interface more general, this is not enforced in the API contract (such as by adding a separate constructor init(steamGuardSecret:)). Instead, the user of the API is expected to pass the correct parameters.
  • Adds test for TOTP values and serialization.
  • Updates interface in a hopefully backwards compatible way.
  • Users are expected to figure out how to obtain their Steam Guard secret on their own.
  • Companion Authenticator PR

}
}

func testSteamGuardSerialization() {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Function Body Length Violation: Function body should span 40 lines or less excluding comments and whitespace: currently spans 50 lines (function_body_length)

1590895162: "RFQNR",
]

let generator = Generator(factor: .timer(period: 30), secret: secret, algorithm: .sha1, digits: 5, representation: .steamguard)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line Length Violation: Line should be 120 characters or less: currently 135 characters (line_length)

let secret = MF_Base32Codec.data(fromBase32String: "I6FMHELVR57Z2PCNB7D22MS6I2SRSQIB")!
let expectedValues: [TimeInterval: String] = [
1590895077: "Y4323",
1590895162: "RFQNR",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trailing Comma Violation: Collection literals should not have trailing commas. (trailing_comma)


for (algorithm, expectedPasswords) in expectedValues {
let generator = Generator(factor: .timer(period: 30), secret: secret, algorithm: algorithm, digits: 6)
let generator = Generator(factor: .timer(period: 30), secret: secret, algorithm: algorithm, digits: 6, representation: .numeric)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line Length Violation: Line should be 120 characters or less: currently 140 characters (line_length)

for (algorithm, secretKey) in secretKeys {
let secret = secretKey.data(using: String.Encoding.ascii)!
let generator = Generator(factor: .timer(period: 30), secret: secret, algorithm: algorithm, digits: 8)
let generator = Generator(factor: .timer(period: 30), secret: secret, algorithm: algorithm, digits: 8, representation: .numeric)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line Length Violation: Line should be 120 characters or less: currently 140 characters (line_length)


let algorithm = try queryItems.value(for: kQueryAlgorithmKey).map(algorithmFromString) ?? defaultAlgorithm
let digits = try queryItems.value(for: kQueryDigitsKey).map(parseDigits) ?? defaultDigits
let representation = try queryItems.value(for: kQueryRepresentationKey).map(representationFromString) ?? defaultRepresentation
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line Length Violation: Line should be 120 characters or less: currently 130 characters (line_length)

}
}

private func urlForToken(name: String, issuer: String, factor: Generator.Factor, algorithm: Generator.Algorithm, digits: Int, representation: Generator.Representation) throws -> URL {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Function Parameter Count Violation: Function should have 5 parameters or less: it currently has 6 (function_parameter_count)
Line Length Violation: Line should be 120 characters or less: currently 183 characters (line_length)

// same initializer signature with both throwing an failable versions, this new initializer is currently prefixed
// with an underscore and marked as internal.
internal init(_factor factor: Factor, secret: Data, algorithm: Algorithm, digits: Int) throws {
internal init(_factor factor: Factor, secret: Data, algorithm: Algorithm, digits: Int, representation: Representation) throws {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line Length Violation: Line should be 120 characters or less: currently 131 characters (line_length)

public init?(factor: Factor, secret: Data, algorithm: Algorithm, digits: Int) {
try? self.init(_factor: factor, secret: secret, algorithm: algorithm, digits: digits)
public init?(factor: Factor, secret: Data, algorithm: Algorithm, digits: Int, representation: Representation = .numeric) {
try? self.init(_factor: factor, secret: secret, algorithm: algorithm, digits: digits, representation: representation)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line Length Violation: Line should be 120 characters or less: currently 125 characters (line_length)

/// are invalid.
public init?(factor: Factor, secret: Data, algorithm: Algorithm, digits: Int) {
try? self.init(_factor: factor, secret: secret, algorithm: algorithm, digits: digits)
public init?(factor: Factor, secret: Data, algorithm: Algorithm, digits: Int, representation: Representation = .numeric) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line Length Violation: Line should be 120 characters or less: currently 126 characters (line_length)

@codecov
Copy link

codecov bot commented May 31, 2020

Codecov Report

Merging #225 into develop will decrease coverage by 0.42%.
The diff coverage is 96.72%.

Impacted file tree graph

@@             Coverage Diff             @@
##           develop     #225      +/-   ##
===========================================
- Coverage    97.38%   96.95%   -0.43%     
===========================================
  Files            6        6              
  Lines          420      427       +7     
===========================================
+ Hits           409      414       +5     
- Misses          11       13       +2     
Impacted Files Coverage Δ
Sources/Token+URL.swift 96.96% <90.00%> (-1.45%) ⬇️
Sources/Generator.swift 100.00% <100.00%> (ø)
Sources/Keychain.swift 91.89% <0.00%> (-0.68%) ⬇️
Sources/Crypto.swift 100.00% <0.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7af91b9...d00dd01. Read the comment docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Can you support steam totp?

1 participant