from: github.com/remko/age-plugin-se
This commit is contained in:
75
Tests/DummyCrypto.swift
Normal file
75
Tests/DummyCrypto.swift
Normal file
@@ -0,0 +1,75 @@
|
||||
import Foundation
|
||||
|
||||
@testable import age_plugin_se
|
||||
|
||||
#if !os(Linux) && !os(Windows)
|
||||
import CryptoKit
|
||||
#else
|
||||
import Crypto
|
||||
#endif
|
||||
|
||||
class DummyCrypto: Crypto {
|
||||
// If more keys are needed, add them to the front
|
||||
var dummyKeys = [
|
||||
"t8Y0uUHLtBvCtuUz0Hdw2lqbwZf6TgYzYKFWMEEFSs8",
|
||||
"HxEmObcQ6bcAUC8w6kPWrnlUIwBQoi66ZNpQZ0cAXww",
|
||||
"dCDteyAKpkwYd8jCunOz0mvWmy+24zvWV41YBD+Pkeg",
|
||||
"NkkLXSZ+yhx9imKKw9cOsbey4C1XZAPuSDMCgTLENrY",
|
||||
"bQrp04tXb+diJ6x28Kd8EDt9sCmI5diS36Zy3n49DHg",
|
||||
"m8/qMMkYDelvL+ihdUFYyKXBn+7We21fZ5zH/I61y3M",
|
||||
"lQq/Pq0GA2QFGTEiNMQIxZHzBnt+nPRXK5gL3X6nnJY",
|
||||
"VoUn+n/vzkuDzWgMV9n3e1L+tTSIl0Sg7lXSNDR5XqY",
|
||||
"3naom0zZxBZcSZCfoNzyjLVmG6hyRKX8bCU3wukusFI",
|
||||
"N2WRutxd1Ed0l4piqArI2gKYSTG7peE8BYBrLLV7YjQ",
|
||||
].map { Data(base64RawEncoded: $0)! }
|
||||
|
||||
var isSecureEnclaveAvailable = true
|
||||
var failingOperations = false
|
||||
|
||||
func newSecureEnclavePrivateKey(dataRepresentation: Data) throws -> SecureEnclavePrivateKey {
|
||||
return DummySecureEnclavePrivateKey(
|
||||
key: try P256.KeyAgreement.PrivateKey(rawRepresentation: dataRepresentation), crypto: self)
|
||||
}
|
||||
|
||||
func newSecureEnclavePrivateKey(accessControl: SecAccessControl) throws -> SecureEnclavePrivateKey
|
||||
{
|
||||
return DummySecureEnclavePrivateKey(
|
||||
key: try P256.KeyAgreement.PrivateKey(rawRepresentation: dummyKeys.popLast()!), crypto: self)
|
||||
}
|
||||
|
||||
func newEphemeralPrivateKey() -> P256.KeyAgreement.PrivateKey {
|
||||
return try! P256.KeyAgreement.PrivateKey(rawRepresentation: dummyKeys.popLast()!)
|
||||
}
|
||||
}
|
||||
|
||||
struct DummySecureEnclavePrivateKey: SecureEnclavePrivateKey {
|
||||
var key: P256.KeyAgreement.PrivateKey
|
||||
var crypto: DummyCrypto
|
||||
|
||||
var publicKey: P256.KeyAgreement.PublicKey {
|
||||
return key.publicKey
|
||||
}
|
||||
|
||||
var dataRepresentation: Data {
|
||||
return key.rawRepresentation
|
||||
}
|
||||
|
||||
func sharedSecretFromKeyAgreement(with publicKeyShare: P256.KeyAgreement.PublicKey) throws
|
||||
-> SharedSecret
|
||||
{
|
||||
if crypto.failingOperations {
|
||||
throw DummyCryptoError.dummyError
|
||||
}
|
||||
return try key.sharedSecretFromKeyAgreement(with: publicKeyShare)
|
||||
}
|
||||
}
|
||||
|
||||
enum DummyCryptoError: LocalizedError {
|
||||
case dummyError
|
||||
|
||||
public var errorDescription: String? {
|
||||
switch self {
|
||||
case .dummyError: return "dummy error"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user