passforios/passKitTests/Crypto/CryptoFrameworkTest.swift

60 lines
2.1 KiB
Swift

//
// 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())
}
}
}