made the functions makeSSH[priv,pub]key take in a Keypair

This commit is contained in:
neon443
2025-07-01 16:23:00 +01:00
parent 89cac92d5a
commit 15bcd2b7e9
3 changed files with 18 additions and 18 deletions

View File

@@ -59,16 +59,16 @@ class KeyManager: ObservableObject {
return pubdata
}
static func makeSSHPubkey(pub: Data, comment: String) -> Data {
static func makeSSHPubkey(_ keypair: Keypair) -> Data {
let header = "ssh-ed25519"
var keyBlob: Data = Data()
//key type bit
keyBlob += encode(str: header)
//base64 blob bit
keyBlob += encode(data: pub)
keyBlob += encode(data: keypair.publicKey)
let b64key = keyBlob.base64EncodedString()
let pubkeyline = "\(header) \(b64key) \(comment)\n"
let pubkeyline = "\(header) \(b64key) \(keypair.publicKey)\n"
return Data(pubkeyline.utf8)
}
@@ -112,7 +112,7 @@ class KeyManager: ObservableObject {
return Keypair(type: .ecdsa, name: comment, privateKey: privatekeyData)
}
static func makeSSHPrivkey(pub: Data, priv: Data, comment: String) -> Data {
static func makeSSHPrivkey(_ keypair: Keypair) -> Data {
var content: Data = Data()
var blob: Data = Data()
@@ -135,7 +135,7 @@ class KeyManager: ObservableObject {
var pubkeyBlob = Data()
let keyType = "ssh-ed25519"
pubkeyBlob += encode(str: keyType)
pubkeyBlob += encode(data: pub)
pubkeyBlob += encode(data: keypair.publicKey)
blob += encode(data: pubkeyBlob)
//priv
@@ -144,9 +144,9 @@ class KeyManager: ObservableObject {
privBlob.append(contentsOf: withUnsafeBytes(of: checkint.bigEndian, Array.init))
privBlob.append(contentsOf: withUnsafeBytes(of: checkint.bigEndian, Array.init))
privBlob += encode(str: keyType)
privBlob += encode(data: pub)
privBlob += encode(data: priv + pub)
privBlob += encode(str: comment)
privBlob += encode(data: keypair.publicKey)
privBlob += encode(data: keypair.privateKey + keypair.publicKey)
privBlob += encode(str: keypair.name)
let padLegth = (8 - (privBlob.count % 8)) % 8
if padLegth > 0 {

View File

@@ -31,11 +31,11 @@ struct Keypair: KeypairProtocol {
var passphrase: String = ""
var openSshPubkey: String {
String(data: KeyManager.makeSSHPubkey(pub: publicKey, comment: name), encoding: .utf8) ?? "OpenSSH key format error"
String(data: KeyManager.makeSSHPubkey(self), encoding: .utf8) ?? "OpenSSH key format error"
}
var openSshPrivkey: String {
String(data: KeyManager.makeSSHPrivkey(pub: publicKey, priv: privateKey, comment: name), encoding: .utf8) ?? "OpenSSH key format error"
String(data: KeyManager.makeSSHPrivkey(self), encoding: .utf8) ?? "OpenSSH key format error"
}
init(

View File

@@ -12,13 +12,6 @@ struct KeyDetailView: View {
@State var keypair: Keypair
@State private var reveal: Bool = false
var publicKey: Data {
return keypair.publicKey ?? "".data(using: .utf8)!
}
var privateKey: Data {
return keypair.privateKey ?? "".data(using: .utf8)!
}
var body: some View {
ZStack {
hostsManager.selectedTheme.background.suiColor.opacity(0.7)
@@ -66,10 +59,17 @@ struct KeyDetailView: View {
}
}
Button {
UIPasteboard.general.string = String(data: KeyManager.makeSSHPubkey(keypair), encoding: .utf8) ?? ""
} label: {
CenteredLabel(title: "Copy private key", systemName: "document.on.document")
}
.listRowSeparator(.hidden)
Button {
Task {
guard await hostsManager.authWithBiometrics() else { return }
UIPasteboard.general.string = String(data: privateKey, encoding: .utf8)
UIPasteboard.general.string = String(data: KeyManager.makeSSHPrivkey(keypair), encoding: .utf8) ?? ""
}
} label: {
CenteredLabel(title: "Copy private key", systemName: "document.on.document")