YESSSSSSSSSSSSSSSSSSSSSSSSSSSSS

OPENSSH PRIVATE KEY EXPORTING
This commit is contained in:
neon443
2025-06-30 20:05:00 +01:00
parent 0f646f6fb9
commit 40f27d3ead
2 changed files with 16 additions and 46 deletions

View File

@@ -23,9 +23,11 @@ class KeyManager: ObservableObject {
var tags: [String] = [] var tags: [String] = []
init() { init() {
let key = try! Curve25519.Signing.PrivateKey(rawRepresentation: generateEd25519()) let key = Curve25519.Signing.PrivateKey()
let pubpem = makeSSHPubkey(pub: key.publicKey.rawRepresentation, comment: "ShhShell Test!") let privatekeyData = key.rawRepresentation
let privpem = makeSSHPrivkey(pub: key.publicKey.rawRepresentation, priv: key.rawRepresentation, comment: "ShhShell Test!") let publickeyData = key.publicKey.rawRepresentation
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(String(data: pubpem, encoding: .utf8)!)
print() print()
print(String(data: privpem, encoding: .utf8)!) print(String(data: privpem, encoding: .utf8)!)
@@ -51,45 +53,12 @@ class KeyManager: ObservableObject {
func generateKey(type: KeyType, SEPKeyTag: String, comment: String, passphrase: String) -> Keypair? { func generateKey(type: KeyType, SEPKeyTag: String, comment: String, passphrase: String) -> Keypair? {
switch type { switch type {
case .ecdsa(let inSEP): case .ecdsa(let inSEP):
generateEd25519() fatalError("unimplemented")
return nil
case .rsa(let rsaSize): case .rsa(let rsaSize):
guard let keyData = try? generateRSA(size: rsaSize) else { return nil } fatalError("unimplemented")
fatalError()
// return Keypair(
// type: .rsa(rsaSize),
// name: comment,
// publicKey: keyData.base64EncodedString(),
// privateKey: keyData.priv.base64EncodedString(),
// passphrase: ""
// )
} }
} }
func generateEd25519() -> Data {
return Curve25519.Signing.PrivateKey().rawRepresentation
}
func generateRSA(size: Int) throws -> SecKey {
let header = "ssh-ed25519 "
let type = kSecAttrKeyTypeRSA
let tag = Date().ISO8601Format().data(using: .utf8)!
let attributes: [String: Any] =
[kSecAttrKeyType as String: type,
kSecAttrKeySizeInBits as String: size,
kSecPrivateKeyAttrs as String:
[kSecAttrIsPermanent as String: true,
kSecAttrApplicationTag as String: tag]
]
var error: Unmanaged<CFError>?
guard let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error) else {
throw error!.takeRetainedValue() as Error
}
return privateKey
}
func makeSSHPubkey(pub: Data, comment: String) -> Data { func makeSSHPubkey(pub: Data, comment: String) -> Data {
let header = "ssh-ed25519" let header = "ssh-ed25519"
var keyBlob: Data = Data() var keyBlob: Data = Data()
@@ -114,17 +83,20 @@ class KeyManager: ObservableObject {
content += header.data(using: .utf8)! content += header.data(using: .utf8)!
//add the magik prefix //add the magik prefix
blob += encode(str: "openssh-key-v1\0") blob += Data("openssh-key-v1\0".utf8)
//add encryption info //add encryption info
blob += encode(str: "none") blob += encode(str: "none")
//add kdf info //add kdf info
blob += encode(str: "none") + encode(data: Data()) blob += encode(str: "none") + encode(data: Data())
//add key count //add key count
blob += encode(int: 1) blob += encode(int: 1)
//add atual key //add atual key
var pubkeyBlob = Data()
let keyType = "ssh-ed25519" let keyType = "ssh-ed25519"
blob += encode(str: keyType) pubkeyBlob += encode(str: keyType)
blob += encode(data: pub) pubkeyBlob += encode(data: pub)
blob += encode(data: pubkeyBlob)
//priv //priv
var privBlob = Data() var privBlob = Data()
@@ -167,7 +139,7 @@ class KeyManager: ObservableObject {
} }
func encode(int: Int) -> Data { func encode(int: Int) -> Data {
var bigEndian = Int32(int).bigEndian var bigEndian = UInt32(int).bigEndian
return Data(bytes: &bigEndian, count: 4) // 32bits / 8 bitsperbyte return Data(bytes: &bigEndian, count: 4) // 32bits / 8 bitsperbyte
} }
} }

View File

@@ -30,13 +30,11 @@ struct KeyManagerView: View {
} }
Button("ed25519") { Button("ed25519") {
keyManager.generateEd25519()
} }
Button("genereate rsa") { Button("genereate rsa") {
let key = keyManager.generateKey(type: .rsa(4096), SEPKeyTag: "", comment: "jaklsd", passphrase: "")
print(String(data: key!.privateKey!, encoding: .utf8) ?? "asd")
print(String(data: key!.publicKey!, encoding: .utf8) ?? "asd")
} }
} }
.scrollContentBackground(.hidden) .scrollContentBackground(.hidden)