From be37c4efb9d2acba4401afbdd34e5b5a303838c5 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Fri, 20 Jun 2025 14:43:50 +0100 Subject: [PATCH] asdfjkhadsjkghkjaehgf --- ShhShell/Host/Host.swift | 2 +- ShhShell/Keys/KeyManager.swift | 27 ++++++++++++++++++++++++++- ShhShell/Keys/KeychainLayer.swift | 9 ++++++++- ShhShell/Views/HostsView.swift | 3 +++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/ShhShell/Host/Host.swift b/ShhShell/Host/Host.swift index 32bece4..4b4b89f 100644 --- a/ShhShell/Host/Host.swift +++ b/ShhShell/Host/Host.swift @@ -7,7 +7,7 @@ import Foundation -protocol HostPr: Codable, Identifiable { +protocol HostPr: Codable, Identifiable, Equatable { var id: UUID { get set } var address: String { get set } var port: Int { get set } diff --git a/ShhShell/Keys/KeyManager.swift b/ShhShell/Keys/KeyManager.swift index 9369690..cfeac45 100644 --- a/ShhShell/Keys/KeyManager.swift +++ b/ShhShell/Keys/KeyManager.swift @@ -17,6 +17,25 @@ struct Key: Identifiable, Hashable { } class KeyManager: ObservableObject { + private let userdefaults = NSUbiquitousKeyValueStore.default + + var tags: [String] = [] + + func loadTags() { + let decoder = JSONDecoder() + guard let data = userdefaults.data(forKey: "keyTags") else { return } + guard let decoded = try? decoder.decode([String].self, from: data) else { return } + tags = decoded + } + + func saveTags() { + let encoder = JSONEncoder() + guard let encoded = try? encoder.encode(tags) else { return } + userdefaults.set(encoded, forKey: "keyTags") + userdefaults.synchronize() + } + + //MARK: generate keys func generateEd25519() { let privateKey = Curve25519.Signing.PrivateKey() let publicKeyData = privateKey.publicKey @@ -26,7 +45,8 @@ class KeyManager: ObservableObject { func generateRSA() throws { let type = kSecAttrKeyTypeRSA - let tag = "com.neon443.ShhSell.keys.\(Date().timeIntervalSince1970)".data(using: .utf8)! + let label = Date().ISO8601Format() + let tag = label.data(using: .utf8)! let attributes: [String: Any] = [kSecAttrKeyType as String: type, kSecAttrKeySizeInBits as String: 4096, @@ -42,5 +62,10 @@ class KeyManager: ObservableObject { print(privateKey) print(SecKeyCopyPublicKey(privateKey)) +// do { +// try storeKey(privateKey, label: label) +// } catch { +// print(error.localizedDescription) +// } } } diff --git a/ShhShell/Keys/KeychainLayer.swift b/ShhShell/Keys/KeychainLayer.swift index e0cf5e7..888288e 100644 --- a/ShhShell/Keys/KeychainLayer.swift +++ b/ShhShell/Keys/KeychainLayer.swift @@ -91,5 +91,12 @@ kSecUseDataProtectionKeychain: true, case errSecItemNotFound: return nil case let status: throw KeyStoreError.KeyStoreError("keychain read failed") } - return secKey +// return secKey + + var error: Unmanaged? + guard let data = SecKeyCopyExternalRepresentation(secKey, &error) as Data? else { + throw KeyStoreError.KeyStoreError(error.debugDescription) + } +// let key = try T(x963Representation: data) + return nil } diff --git a/ShhShell/Views/HostsView.swift b/ShhShell/Views/HostsView.swift index 12f2076..89e9b7f 100644 --- a/ShhShell/Views/HostsView.swift +++ b/ShhShell/Views/HostsView.swift @@ -25,6 +25,9 @@ struct HostsView: View { } label: { Text(host.address) } + .onChange(of: host) { _ in + hostsManager.saveSavedHosts() + } } } .toolbar {