53 lines
1.7 KiB
Swift
53 lines
1.7 KiB
Swift
|
|
//
|
||
|
|
// ScannedPGPKey.swift
|
||
|
|
// pass
|
||
|
|
//
|
||
|
|
// Created by Danny Moesch on 05.07.20.
|
||
|
|
// Copyright © 2020 Bob Sun. All rights reserved.
|
||
|
|
//
|
||
|
|
|
||
|
|
class ScannedPGPKey {
|
||
|
|
enum KeyType {
|
||
|
|
case publicKey, privateKey
|
||
|
|
}
|
||
|
|
|
||
|
|
var keyType = KeyType.publicKey
|
||
|
|
var segments = [String]()
|
||
|
|
var message = ""
|
||
|
|
|
||
|
|
func reset(keytype: KeyType) {
|
||
|
|
keyType = keytype
|
||
|
|
segments.removeAll()
|
||
|
|
message = "LookingForStartingFrame.".localize()
|
||
|
|
}
|
||
|
|
|
||
|
|
func addSegment(segment: String) -> (accept: Bool, message: String) {
|
||
|
|
let keyTypeStr = keyType == .publicKey ? "Public" : "Private"
|
||
|
|
let theOtherKeyTypeStr = keyType == .publicKey ? "Private" : "Public"
|
||
|
|
|
||
|
|
// Skip duplicated segments.
|
||
|
|
guard segment != segments.last else {
|
||
|
|
return (accept: false, message: message)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Check whether we have found the first block.
|
||
|
|
guard !segments.isEmpty || segment.contains("-----BEGIN PGP \(keyTypeStr.uppercased()) KEY BLOCK-----") else {
|
||
|
|
// Check whether we are scanning the wrong key type.
|
||
|
|
if segment.contains("-----BEGIN PGP \(theOtherKeyTypeStr.uppercased()) KEY BLOCK-----") {
|
||
|
|
message = "Scan\(keyTypeStr)Key.".localize()
|
||
|
|
}
|
||
|
|
return (accept: false, message: message)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Update the list of scanned segment and return.
|
||
|
|
segments.append(segment)
|
||
|
|
if segment.contains("-----END PGP \(keyTypeStr.uppercased()) KEY BLOCK-----") {
|
||
|
|
message = "Done".localize()
|
||
|
|
return (accept: true, message: message)
|
||
|
|
} else {
|
||
|
|
message = "ScannedQrCodes(%d)".localize(segments.count)
|
||
|
|
return (accept: false, message: message)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|