From c3332737c42f04665056a20e49701324beeed4c4 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Tue, 1 Jul 2025 09:18:41 +0100 Subject: [PATCH] added importsshpubkey to get the raw key bytes from an openssh format pubkey ssh-ed25519 --- ShhShell/Keys/KeyManager.swift | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ShhShell/Keys/KeyManager.swift b/ShhShell/Keys/KeyManager.swift index c367f88..6d3b5b5 100644 --- a/ShhShell/Keys/KeyManager.swift +++ b/ShhShell/Keys/KeyManager.swift @@ -26,12 +26,15 @@ class KeyManager: ObservableObject { let key = Curve25519.Signing.PrivateKey() let privatekeyData = key.rawRepresentation let publickeyData = key.publicKey.rawRepresentation + print(publickeyData.base64EncodedString()) let pubpem = makeSSHPubkey(pub: publickeyData, comment: "neon443@m") let privpem = makeSSHPrivkey(pub: publickeyData, priv: privatekeyData, comment: "neon443@m") print(String(data: pubpem, encoding: .utf8)!) print() print(String(data: privpem, encoding: .utf8)!) print() + + print(importSSHPubkey(pub: String(data: pubpem, encoding: .utf8)!).base64EncodedString()) } func loadTags() { @@ -59,6 +62,19 @@ class KeyManager: ObservableObject { } } + func importSSHPubkey(pub: String) -> Data { + let split = pub.split(separator: " ") + guard split.count == 3 else { return Data() } + + var pubdata = Data(base64Encoded: String(split[1]))! + while pubdata.count != 36 { + let lengthOfField = Int(pubdata[3]) + pubdata.removeFirst(4 + lengthOfField) + } + pubdata.removeFirst(4) + return pubdata + } + func makeSSHPubkey(pub: Data, comment: String) -> Data { let header = "ssh-ed25519" var keyBlob: Data = Data()