diff --git a/SecretAgentKitTests/StubStore.swift b/SecretAgentKitTests/StubStore.swift index 00c814c..8a22ef5 100644 --- a/SecretAgentKitTests/StubStore.swift +++ b/SecretAgentKitTests/StubStore.swift @@ -1,15 +1,96 @@ import SecretKit +import CryptoKit -class StubStore: SecretStore { +struct Stub {} - var isAvailable: Bool = true - let id = UUID() - let name = "Stub Store" - var secrets: [SmartCard.Secret] = [] - fileprivate var smartCardStore = SmartCard.Store() +extension Stub { + + public class Store: SecretStore { + + public let isAvailable = true + public let id = UUID() + public let name = "Stub" + public var secrets: [Secret] = [] + + public init() { + try! create(size: 256) + } + + public func create(size: Int) throws { + let flags: SecAccessControlCreateFlags = [] + let access = + SecAccessControlCreateWithFlags(kCFAllocatorDefault, + kSecAttrAccessibleWhenUnlockedThisDeviceOnly, + flags, + nil) as Any + + let attributes = [ + kSecAttrLabel: name, + kSecAttrKeyType: kSecAttrKeyTypeECSECPrimeRandom, + kSecAttrKeySizeInBits: size, + kSecPrivateKeyAttrs: [ + kSecAttrIsPermanent: true, + kSecAttrAccessControl: access + ] + ] as CFDictionary + + var privateKey: SecKey! = nil + var publicKey: SecKey! = nil + SecKeyGeneratePair(attributes, &publicKey, &privateKey) + let publicAttributes = SecKeyCopyAttributes(publicKey) as! [CFString: Any] + let privateAttributes = SecKeyCopyAttributes(privateKey) as! [CFString: Any] + let publicData = (publicAttributes[kSecValueData] as! Data) + let privateData = (privateAttributes[kSecValueData] as! Data) + let secret = Secret(keySize: size, publicKey: publicData, privateKey: privateData) + print(secret) + print("Public Key OpenSSH: \(OpenSSHKeyWriter().openSSHString(secret: secret))") + } + + public func delete(secret: Secret) throws { + } + + public func sign(data: Data, with secret: Secret) throws -> Data { + return Data() + } - func sign(data: Data, with secret: SmartCard.Secret) throws -> Data { - try smartCardStore.sign(data: data, with: secret) + } + +} + +extension Stub { + + struct Secret: SecretKit.Secret, CustomDebugStringConvertible { + + let id = UUID().uuidString.data(using: .utf8)! + let name = UUID().uuidString + let algorithm = Algorithm.ellipticCurve + + let keySize: Int + let publicKey: Data + let privateKey: Data + + init(keySize: Int, publicKey: Data, privateKey: Data) { + self.keySize = keySize + self.publicKey = publicKey + self.privateKey = privateKey + } + + var debugDescription: String { + """ + Key Size \(keySize) + Private: \(privateKey.base64EncodedString()) + Public: \(publicKey.base64EncodedString()) + """ + } + + } + +} + + +extension Stub.Store { + + struct StubError: Error { } } diff --git a/Secretive.xcodeproj/project.pbxproj b/Secretive.xcodeproj/project.pbxproj index 3bb3897..daa9155 100644 --- a/Secretive.xcodeproj/project.pbxproj +++ b/Secretive.xcodeproj/project.pbxproj @@ -49,6 +49,7 @@ 507EE34624281F89003C4FE3 /* StubFileHandleReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34524281F89003C4FE3 /* StubFileHandleReader.swift */; }; 507EE34824281FB8003C4FE3 /* StubFileHandleWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34724281FB8003C4FE3 /* StubFileHandleWriter.swift */; }; 507EE34A2428263B003C4FE3 /* StubStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE3492428263B003C4FE3 /* StubStore.swift */; }; + 507EE34C24282B4C003C4FE3 /* StubStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE3492428263B003C4FE3 /* StubStore.swift */; }; 508A58AA241E06B40069DC07 /* PreviewUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58A9241E06B40069DC07 /* PreviewUpdater.swift */; }; 508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */; }; 508A58B5241ED48F0069DC07 /* PreviewAgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B4241ED48F0069DC07 /* PreviewAgentStatusChecker.swift */; }; @@ -995,6 +996,7 @@ buildActionMask = 2147483647; files = ( 50020BB024064869003D4025 /* AppDelegate.swift in Sources */, + 507EE34C24282B4C003C4FE3 /* StubStore.swift in Sources */, 5018F54F24064786002EB505 /* Notifier.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0;