49 lines
1.6 KiB
Swift
49 lines
1.6 KiB
Swift
|
|
//
|
||
|
|
// ObjectivePgp.swift
|
||
|
|
// passKit
|
||
|
|
//
|
||
|
|
// Created by Danny Moesch on 08.09.19.
|
||
|
|
// Copyright © 2019 Bob Sun. All rights reserved.
|
||
|
|
//
|
||
|
|
|
||
|
|
import ObjectivePGP
|
||
|
|
|
||
|
|
struct ObjectivePgp: PgpInterface {
|
||
|
|
|
||
|
|
private let publicKey: Key
|
||
|
|
private let privateKey: Key
|
||
|
|
|
||
|
|
private let keyring = ObjectivePGP.defaultKeyring
|
||
|
|
|
||
|
|
init(publicArmoredKey: String, privateArmoredKey: String) throws {
|
||
|
|
guard let publicKeyData = publicArmoredKey.data(using: .ascii), let privateKeyData = privateArmoredKey.data(using: .ascii) else {
|
||
|
|
throw AppError.KeyImport
|
||
|
|
}
|
||
|
|
let publicKeys = try ObjectivePGP.readKeys(from: publicKeyData)
|
||
|
|
let privateKeys = try ObjectivePGP.readKeys(from: privateKeyData)
|
||
|
|
keyring.import(keys: publicKeys)
|
||
|
|
keyring.import(keys: privateKeys)
|
||
|
|
guard let publicKey = publicKeys.first, let privateKey = privateKeys.first else {
|
||
|
|
throw AppError.KeyImport
|
||
|
|
}
|
||
|
|
self.publicKey = publicKey
|
||
|
|
self.privateKey = privateKey
|
||
|
|
}
|
||
|
|
|
||
|
|
func decrypt(encryptedData: Data, passphrase: String) throws -> Data? {
|
||
|
|
return try ObjectivePGP.decrypt(encryptedData, andVerifySignature: false, using: keyring.keys) { _ in passphrase }
|
||
|
|
}
|
||
|
|
|
||
|
|
func encrypt(plainData: Data) throws -> Data {
|
||
|
|
let encryptedData = try ObjectivePGP.encrypt(plainData, addSignature: false, using: keyring.keys, passphraseForKey: nil)
|
||
|
|
if SharedDefaults[.encryptInArmored] {
|
||
|
|
return Armor.armored(encryptedData, as: .message).data(using: .ascii)!
|
||
|
|
}
|
||
|
|
return encryptedData
|
||
|
|
}
|
||
|
|
|
||
|
|
var keyId: String {
|
||
|
|
return publicKey.keyID.shortIdentifier
|
||
|
|
}
|
||
|
|
}
|