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
|
|
@ -51,6 +51,7 @@
|
||||||
30A1D2A821B2D53200E2D1F7 /* PasswordChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D2A721B2D53200E2D1F7 /* PasswordChange.swift */; };
|
30A1D2A821B2D53200E2D1F7 /* PasswordChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D2A721B2D53200E2D1F7 /* PasswordChange.swift */; };
|
||||||
30A1D2AA21B32A0100E2D1F7 /* OtpTypeTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D2A921B32A0100E2D1F7 /* OtpTypeTest.swift */; };
|
30A1D2AA21B32A0100E2D1F7 /* OtpTypeTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D2A921B32A0100E2D1F7 /* OtpTypeTest.swift */; };
|
||||||
30A1D2AC21B32C2A00E2D1F7 /* TokenBuilderTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D2AB21B32C2A00E2D1F7 /* TokenBuilderTest.swift */; };
|
30A1D2AC21B32C2A00E2D1F7 /* TokenBuilderTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A1D2AB21B32C2A00E2D1F7 /* TokenBuilderTest.swift */; };
|
||||||
|
30A86F95230F237000F821A4 /* CryptoFrameworkTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A86F94230F237000F821A4 /* CryptoFrameworkTest.swift */; };
|
||||||
30B04860209A5141001013CA /* PasswordTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B0485F209A5141001013CA /* PasswordTest.swift */; };
|
30B04860209A5141001013CA /* PasswordTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B0485F209A5141001013CA /* PasswordTest.swift */; };
|
||||||
30BAC8C622E3BAAF00438475 /* TestBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30BAC8C422E3BAAF00438475 /* TestBase.swift */; };
|
30BAC8C622E3BAAF00438475 /* TestBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30BAC8C422E3BAAF00438475 /* TestBase.swift */; };
|
||||||
30BAC8C722E3BAAF00438475 /* TestPGPKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30BAC8C522E3BAAF00438475 /* TestPGPKeys.swift */; };
|
30BAC8C722E3BAAF00438475 /* TestPGPKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30BAC8C522E3BAAF00438475 /* TestPGPKeys.swift */; };
|
||||||
|
|
@ -262,6 +263,7 @@
|
||||||
30A1D2A721B2D53200E2D1F7 /* PasswordChange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordChange.swift; sourceTree = "<group>"; };
|
30A1D2A721B2D53200E2D1F7 /* PasswordChange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordChange.swift; sourceTree = "<group>"; };
|
||||||
30A1D2A921B32A0100E2D1F7 /* OtpTypeTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OtpTypeTest.swift; sourceTree = "<group>"; };
|
30A1D2A921B32A0100E2D1F7 /* OtpTypeTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OtpTypeTest.swift; sourceTree = "<group>"; };
|
||||||
30A1D2AB21B32C2A00E2D1F7 /* TokenBuilderTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenBuilderTest.swift; sourceTree = "<group>"; };
|
30A1D2AB21B32C2A00E2D1F7 /* TokenBuilderTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenBuilderTest.swift; sourceTree = "<group>"; };
|
||||||
|
30A86F94230F237000F821A4 /* CryptoFrameworkTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CryptoFrameworkTest.swift; sourceTree = "<group>"; };
|
||||||
30B0485F209A5141001013CA /* PasswordTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordTest.swift; sourceTree = "<group>"; };
|
30B0485F209A5141001013CA /* PasswordTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordTest.swift; sourceTree = "<group>"; };
|
||||||
30BAC8C422E3BAAF00438475 /* TestBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestBase.swift; sourceTree = "<group>"; };
|
30BAC8C422E3BAAF00438475 /* TestBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestBase.swift; sourceTree = "<group>"; };
|
||||||
30BAC8C522E3BAAF00438475 /* TestPGPKeys.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestPGPKeys.swift; sourceTree = "<group>"; };
|
30BAC8C522E3BAAF00438475 /* TestPGPKeys.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestPGPKeys.swift; sourceTree = "<group>"; };
|
||||||
|
|
@ -463,6 +465,14 @@
|
||||||
path = Extensions;
|
path = Extensions;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
30A86F93230F235800F821A4 /* Crypto */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
30A86F94230F237000F821A4 /* CryptoFrameworkTest.swift */,
|
||||||
|
);
|
||||||
|
path = Crypto;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
30B6AABA21F49095006B352D /* Extensions */ = {
|
30B6AABA21F49095006B352D /* Extensions */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
|
@ -585,6 +595,7 @@
|
||||||
A26075861EEC6F34005DB03E /* passKitTests */ = {
|
A26075861EEC6F34005DB03E /* passKitTests */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
30A86F93230F235800F821A4 /* Crypto */,
|
||||||
30BAC8C322E3BA4300438475 /* Testbase */,
|
30BAC8C322E3BA4300438475 /* Testbase */,
|
||||||
30697C5521F63F870064FCAC /* Extensions */,
|
30697C5521F63F870064FCAC /* Extensions */,
|
||||||
301F6464216164670071A4CE /* Helpers */,
|
301F6464216164670071A4CE /* Helpers */,
|
||||||
|
|
@ -1303,6 +1314,7 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
30A86F95230F237000F821A4 /* CryptoFrameworkTest.swift in Sources */,
|
||||||
30A1D2AC21B32C2A00E2D1F7 /* TokenBuilderTest.swift in Sources */,
|
30A1D2AC21B32C2A00E2D1F7 /* TokenBuilderTest.swift in Sources */,
|
||||||
301F646D216166AA0071A4CE /* AdditionFieldTest.swift in Sources */,
|
301F646D216166AA0071A4CE /* AdditionFieldTest.swift in Sources */,
|
||||||
30BAC8CB22E3BB6C00438475 /* DictBasedKeychain.swift in Sources */,
|
30BAC8CB22E3BB6C00438475 /* DictBasedKeychain.swift in Sources */,
|
||||||
|
|
|
||||||
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
|
@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 {
|
func requestPGPKeyPassphrase() -> String {
|
||||||
return "passforios"
|
return "passforios"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue