Add general tests for basic encryption and decryption with Crypto framework
This commit is contained in:
parent
4c3aa4938d
commit
e2201ffa52
3 changed files with 104 additions and 0 deletions
60
passKitTests/Crypto/CryptoFrameworkTest.swift
Normal file
60
passKitTests/Crypto/CryptoFrameworkTest.swift
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
//
|
||||
// CryptoFrameworkTest.swift
|
||||
// passKitTests
|
||||
//
|
||||
// Created by Danny Moesch on 22.08.19.
|
||||
// Copyright © 2019 Bob Sun. All rights reserved.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
|
||||
@testable import passKit
|
||||
@testable import Crypto
|
||||
|
||||
class CryptoFrameworkTest: XCTestCase {
|
||||
|
||||
typealias MessageConverter = (CryptoPGPMessage, NSErrorPointer) -> CryptoPGPMessage?
|
||||
|
||||
private let testText = "Hello World!"
|
||||
|
||||
func testArmoredEncryptDecrypt() throws {
|
||||
let plainMessage = CryptoNewPlainMessageFromString(testText)
|
||||
let messageConverter: MessageConverter = { encryptedMessage, error in
|
||||
CryptoNewPGPMessageFromArmored(encryptedMessage.getArmored(error), error)
|
||||
}
|
||||
|
||||
try testInternal(plainMessage: plainMessage, messageConverter: messageConverter)
|
||||
}
|
||||
|
||||
func testDataBasedEncryptDecrypt() throws {
|
||||
let plainMessage = CryptoNewPlainMessage(testText.data(using: .utf8)!.mutable as Data)
|
||||
let messageConverter: MessageConverter = { encryptedMessage, _ in
|
||||
CryptoNewPGPMessage(encryptedMessage.getBinary()!.mutable as Data)
|
||||
}
|
||||
|
||||
try testInternal(plainMessage: plainMessage, messageConverter: messageConverter)
|
||||
}
|
||||
|
||||
private func testInternal(plainMessage: CryptoPlainMessage?, messageConverter: MessageConverter) throws {
|
||||
try [
|
||||
RSA2048,
|
||||
//RSA2048_SUB,
|
||||
ED25519,
|
||||
//ED25519_SUB,
|
||||
].forEach { keyTriple in
|
||||
let pgp = CryptoGetGopenPGP()!
|
||||
let publicKey = try pgp.buildKeyRingArmored(keyTriple.publicKey)
|
||||
let privateKey = try pgp.buildKeyRingArmored(keyTriple.privateKey)
|
||||
var error: NSError?
|
||||
|
||||
XCTAssert(publicKey.getFingerprint(&error).hasSuffix(keyTriple.fingerprint))
|
||||
XCTAssertNil(error)
|
||||
|
||||
try privateKey.unlock(withPassphrase: keyTriple.passphrase)
|
||||
let encryptedMessage = try publicKey.encrypt(plainMessage, privateKey: nil)
|
||||
let decryptedData = try privateKey.decrypt(messageConverter(encryptedMessage, &error), verifyKey: nil, verifyTime: 0)
|
||||
XCTAssertNil(error)
|
||||
XCTAssertEqual(testText, decryptedData.getString())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -10,6 +10,38 @@ import XCTest
|
|||
|
||||
@testable import passKit
|
||||
|
||||
struct PGPKeyTestTriple {
|
||||
let publicKey: String
|
||||
let privateKey: String
|
||||
let fingerprint: String
|
||||
|
||||
let passphrase = "passforios"
|
||||
}
|
||||
|
||||
let RSA2048 = PGPKeyTestTriple(
|
||||
publicKey: PGP_RSA2048_PUBLIC_KEY,
|
||||
privateKey: PGP_RSA2048_PRIVATE_KEY,
|
||||
fingerprint: "a1024dae"
|
||||
)
|
||||
|
||||
let RSA2048_SUB = PGPKeyTestTriple(
|
||||
publicKey: PGP_RSA2048_PUBLIC_KEY,
|
||||
privateKey: PGP_RSA2048_PRIVATE_SUBKEY,
|
||||
fingerprint: "a1024dae"
|
||||
)
|
||||
|
||||
let ED25519 = PGPKeyTestTriple(
|
||||
publicKey: PGP_ED25519_PUBLIC_KEY,
|
||||
privateKey: PGP_ED25519_PRIVATE_KEY,
|
||||
fingerprint: "e9444483"
|
||||
)
|
||||
|
||||
let ED25519_SUB = PGPKeyTestTriple(
|
||||
publicKey: PGP_ED25519_PUBLIC_KEY,
|
||||
privateKey: PGP_ED25519_PRIVATE_SUBKEY,
|
||||
fingerprint: "e9444483"
|
||||
)
|
||||
|
||||
func requestPGPKeyPassphrase() -> String {
|
||||
return "passforios"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue