Fix a decryption bug
This commit is contained in:
parent
3de2dbf8dc
commit
6b00d4911b
2 changed files with 21 additions and 7 deletions
|
|
@ -47,10 +47,12 @@ struct GopenPgp: PgpInterface {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func createPgpMessage(from encryptedData: Data) -> CryptoPGPMessage? {
|
private func createPgpMessage(from encryptedData: Data) -> CryptoPGPMessage? {
|
||||||
if SharedDefaults[.encryptInArmored] {
|
// Important note:
|
||||||
var error: NSError?
|
// Even if SharedDefaults[.encryptInArmored] is true now, it could be different during the encryption.
|
||||||
let message = CryptoNewPGPMessageFromArmored(String(data: encryptedData, encoding: .ascii), &error)
|
var error: NSError?
|
||||||
return error == nil ? message : nil
|
let message = CryptoNewPGPMessageFromArmored(String(data: encryptedData, encoding: .ascii), &error)
|
||||||
|
if error == nil {
|
||||||
|
return message
|
||||||
}
|
}
|
||||||
return CryptoNewPGPMessage(encryptedData.mutable as Data)
|
return CryptoNewPGPMessage(encryptedData.mutable as Data)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,14 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import XCTest
|
import XCTest
|
||||||
|
import SwiftyUserDefaults
|
||||||
|
|
||||||
@testable import passKit
|
@testable import passKit
|
||||||
|
|
||||||
class PGPAgentTest: XCTestCase {
|
class PGPAgentTest: XCTestCase {
|
||||||
|
enum ValidationError: Error {
|
||||||
|
case emptyName
|
||||||
|
}
|
||||||
private var keychain: KeyStore!
|
private var keychain: KeyStore!
|
||||||
private var pgpAgent: PGPAgent!
|
private var pgpAgent: PGPAgent!
|
||||||
|
|
||||||
|
|
@ -21,15 +24,20 @@ class PGPAgentTest: XCTestCase {
|
||||||
super.setUp()
|
super.setUp()
|
||||||
keychain = DictBasedKeychain()
|
keychain = DictBasedKeychain()
|
||||||
pgpAgent = PGPAgent(keyStore: keychain)
|
pgpAgent = PGPAgent(keyStore: keychain)
|
||||||
|
UserDefaults().removePersistentDomain(forName: "SharedDefaultsForPGPAgentTest")
|
||||||
|
SharedDefaults = UserDefaults(suiteName: "SharedDefaultsForPGPAgentTest")!
|
||||||
}
|
}
|
||||||
|
|
||||||
override func tearDown() {
|
override func tearDown() {
|
||||||
keychain.removeAllContent()
|
keychain.removeAllContent()
|
||||||
|
UserDefaults().removePersistentDomain(forName: "SharedDefaultsForPGPAgentTest")
|
||||||
super.tearDown()
|
super.tearDown()
|
||||||
}
|
}
|
||||||
|
|
||||||
func basicEncryptDecrypt(using pgpAgent: PGPAgent, requestPassphrase: () -> String = requestPGPKeyPassphrase) throws -> Data? {
|
func basicEncryptDecrypt(using pgpAgent: PGPAgent, requestPassphrase: () -> String = requestPGPKeyPassphrase, encryptInArmored: Bool = true, encryptInArmoredNow: Bool = true) throws -> Data? {
|
||||||
|
SharedDefaults[.encryptInArmored] = encryptInArmored
|
||||||
let encryptedData = try pgpAgent.encrypt(plainData: testData)
|
let encryptedData = try pgpAgent.encrypt(plainData: testData)
|
||||||
|
SharedDefaults[.encryptInArmored] = encryptInArmoredNow
|
||||||
return try pgpAgent.decrypt(encryptedData: encryptedData, requestPGPKeyPassphrase: requestPassphrase)
|
return try pgpAgent.decrypt(encryptedData: encryptedData, requestPGPKeyPassphrase: requestPassphrase)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -47,7 +55,11 @@ class PGPAgentTest: XCTestCase {
|
||||||
XCTAssert(pgpAgent.isPrepared)
|
XCTAssert(pgpAgent.isPrepared)
|
||||||
try pgpAgent.initKeys()
|
try pgpAgent.initKeys()
|
||||||
XCTAssert(pgpAgent.keyId!.lowercased().hasSuffix(keyTriple.fingerprint))
|
XCTAssert(pgpAgent.keyId!.lowercased().hasSuffix(keyTriple.fingerprint))
|
||||||
XCTAssertEqual(try basicEncryptDecrypt(using: pgpAgent), testData)
|
try [
|
||||||
|
(true, true), (true, false), (false, true), (false, false)
|
||||||
|
].forEach{ a, b in
|
||||||
|
XCTAssertEqual(try basicEncryptDecrypt(using: pgpAgent, encryptInArmored: a, encryptInArmoredNow: b), testData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue