Fix decryption issue when key without passphrase set

This commit is contained in:
Mingshen Sun 2021-01-10 15:01:21 -08:00
parent 776884e894
commit 011762c4bd
No known key found for this signature in database
GPG key ID: 1F86BA2052FED3B4
4 changed files with 153 additions and 2 deletions

View file

@ -84,7 +84,14 @@ struct GopenPGPInterface: PGPInterface {
}
do {
let unlockedKey = try privateKey.unlock(passphrase.data(using: .utf8))
var isLocked: ObjCBool = false
try privateKey.isLocked(&isLocked)
var unlockedKey: CryptoKey!
if isLocked.boolValue {
unlockedKey = try privateKey.unlock(passphrase.data(using: .utf8))
} else {
unlockedKey = privateKey
}
var error: NSError?
guard let keyRing = CryptoNewKeyRing(unlockedKey, &error) else {

View file

@ -39,6 +39,7 @@ class CryptoFrameworkTest: XCTestCase {
try [
RSA2048,
RSA2048_SUB,
RSA3072_NO_PASSPHRASE,
RSA4096,
RSA4096_SUB,
ED25519,
@ -55,7 +56,14 @@ class CryptoFrameworkTest: XCTestCase {
XCTAssert(publicKey.getHexKeyID().hasSuffix(testKeyInfo.fingerprint))
XCTAssertNil(error)
let unlockedKey = try privateKey.unlock(testKeyInfo.passphrase.data(using: .utf8))
var isLocked: ObjCBool = false
try privateKey.isLocked(&isLocked)
var unlockedKey: CryptoKey!
if isLocked.boolValue {
unlockedKey = try privateKey.unlock(testKeyInfo.passphrase.data(using: .utf8))
} else {
unlockedKey = privateKey
}
let encryptedMessage = try CryptoNewKeyRing(publicKey, &error)?.encrypt(plainMessage, privateKey: nil)
let decryptedData = try CryptoNewKeyRing(unlockedKey, &error)?.decrypt(messageConverter(encryptedMessage!, &error), verifyKey: nil, verifyTime: 0)
XCTAssertNil(error)

View file

@ -64,6 +64,7 @@ class PGPAgentTest: XCTestCase {
try [
RSA2048,
RSA2048_SUB,
RSA3072_NO_PASSPHRASE,
RSA4096,
RSA4096_SUB,
ED25519,

View file

@ -45,6 +45,13 @@ let RSA2048_SUB = PGPTestSet(
passphrase: "passforios"
)
let RSA3072_NO_PASSPHRASE = PGPTestSet(
publicKey: PGP_RSA3072_PUBLIC_KEY_NO_PASSPHRASE,
privateKey: PGP_RSA3072_PRIVATE_KEY_NO_PASSPHRASE,
fingerprint: "be0f9402",
passphrase: ""
)
let RSA4096 = PGPTestSet(
publicKey: PGP_RSA4096_PUBLIC_KEY,
privateKey: PGP_RSA4096_PRIVATE_KEY,
@ -242,6 +249,134 @@ XY0AlWAbvH1ytWboh+CgS493JfZbNRCXTWA/BDE=
-----END PGP PRIVATE KEY BLOCK-----
"""
let PGP_RSA3072_PUBLIC_KEY_NO_PASSPHRASE = """
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
dsDN96T3b3dNsR/uHBUhQKv54B58lQ==
=w+7J
-----END PGP PUBLIC KEY BLOCK-----
"""
let PGP_RSA3072_PRIVATE_KEY_NO_PASSPHRASE = """
-----BEGIN PGP PRIVATE KEY BLOCK-----
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
=/IMN
-----END PGP PRIVATE KEY BLOCK-----
"""
let PGP_RSA4096_PUBLIC_KEY = """
-----BEGIN PGP PUBLIC KEY BLOCK-----