59 lines
1.3 KiB
Swift
59 lines
1.3 KiB
Swift
//
|
|
// Copyright 2026 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import SignalServiceKit
|
|
import SignalUI
|
|
|
|
struct DisplayableAccountEntropyPool {
|
|
let rawValue: AccountEntropyPool
|
|
|
|
init(aep: AccountEntropyPool) {
|
|
self.rawValue = aep
|
|
}
|
|
|
|
init(displayString: String) throws {
|
|
let swizzledString = String(displayString.map { char in
|
|
return switch char {
|
|
case "=": "0"
|
|
case "#": "O"
|
|
default: char
|
|
}
|
|
})
|
|
|
|
self.init(aep: try AccountEntropyPool(key: swizzledString))
|
|
}
|
|
|
|
var displayString: String {
|
|
String(
|
|
rawValue.rawString
|
|
.uppercased()
|
|
.map { char in
|
|
switch char {
|
|
case "0": "="
|
|
case "O", "o": "#"
|
|
default: char
|
|
}
|
|
},
|
|
)
|
|
}
|
|
|
|
// MARK: -
|
|
|
|
static let allowedCharacters = FormattedNumberField.AllowedCharacters(
|
|
keyboardType: .asciiCapable,
|
|
stringFilter: {
|
|
return $0.isAsciiAlphanumeric || $0 == "=" || $0 == "#"
|
|
},
|
|
)
|
|
}
|
|
|
|
// MARK: -
|
|
|
|
extension AccountEntropyPool {
|
|
var forDisplay: DisplayableAccountEntropyPool {
|
|
DisplayableAccountEntropyPool(aep: self)
|
|
}
|
|
}
|