mirror of
https://github.com/maxgoedjen/secretive.git
synced 2025-04-18 05:22:11 +00:00
Stub store
This commit is contained in:
parent
d2a6aefa2d
commit
1833063a49
@ -1,15 +1,96 @@
|
|||||||
import SecretKit
|
import SecretKit
|
||||||
|
import CryptoKit
|
||||||
|
|
||||||
class StubStore: SecretStore {
|
struct Stub {}
|
||||||
|
|
||||||
var isAvailable: Bool = true
|
extension Stub {
|
||||||
let id = UUID()
|
|
||||||
let name = "Stub Store"
|
public class Store: SecretStore {
|
||||||
var secrets: [SmartCard.Secret] = []
|
|
||||||
fileprivate var smartCardStore = SmartCard.Store()
|
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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
507EE34624281F89003C4FE3 /* StubFileHandleReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34524281F89003C4FE3 /* StubFileHandleReader.swift */; };
|
507EE34624281F89003C4FE3 /* StubFileHandleReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34524281F89003C4FE3 /* StubFileHandleReader.swift */; };
|
||||||
507EE34824281FB8003C4FE3 /* StubFileHandleWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34724281FB8003C4FE3 /* StubFileHandleWriter.swift */; };
|
507EE34824281FB8003C4FE3 /* StubFileHandleWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34724281FB8003C4FE3 /* StubFileHandleWriter.swift */; };
|
||||||
507EE34A2428263B003C4FE3 /* StubStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE3492428263B003C4FE3 /* StubStore.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 */; };
|
508A58AA241E06B40069DC07 /* PreviewUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58A9241E06B40069DC07 /* PreviewUpdater.swift */; };
|
||||||
508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */; };
|
508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */; };
|
||||||
508A58B5241ED48F0069DC07 /* PreviewAgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B4241ED48F0069DC07 /* PreviewAgentStatusChecker.swift */; };
|
508A58B5241ED48F0069DC07 /* PreviewAgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B4241ED48F0069DC07 /* PreviewAgentStatusChecker.swift */; };
|
||||||
@ -995,6 +996,7 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
50020BB024064869003D4025 /* AppDelegate.swift in Sources */,
|
50020BB024064869003D4025 /* AppDelegate.swift in Sources */,
|
||||||
|
507EE34C24282B4C003C4FE3 /* StubStore.swift in Sources */,
|
||||||
5018F54F24064786002EB505 /* Notifier.swift in Sources */,
|
5018F54F24064786002EB505 /* Notifier.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user