Skip to content

Support OpenSSH key for ECDSA algorithm #115

@jamesic

Description

@jamesic

Is your feature request related to a problem? Please describe.
Could you kindly help support OpenSSH key for ECDSA algorithms?

Describe alternatives you've considered
Currently, I can only use the OpenSSH key for the Ed25519 algorithm.

Additional context
Below is the code I am trying to implement:

        let sshKeyContent = try String(contentsOf: sshFileUrl)
        print("ssh key content: \(sshKeyContent)")
        let sshKeyType = try SSHKeyDetection.detectPrivateKeyType(from: sshKeyContent)
        print("sshKeyType = \(sshKeyType)")
        switch sshKeyType {
        case .rsa:
            print("RSA key detected")
            let privateKey = try Insecure.RSA.PrivateKey(sshRsa: sshKeyContent)
            sshAuthenticationMethod = .rsa(username: username, privateKey: privateKey)
        case .ed25519:
            print("Ed25519 key detected")
            let privateKey = try Curve25519.Signing.PrivateKey(sshEd25519: sshKeyContent)
            sshAuthenticationMethod = .ed25519(username: username, privateKey: privateKey)
        case .ecdsaP256:
            print("ecdsaP256 key detected")
            let privateKey = try P256.Signing.PrivateKey(pemRepresentation: sshKeyContent) // Does it support OpenSSH key?
            sshAuthenticationMethod = .p256(username: username, privateKey: privateKey)
        case .ecdsaP384:
            print("ecdsaP384 key detected")
            let privateKey = try P384.Signing.PrivateKey(pemRepresentation: sshKeyContent) // Does it support OpenSSH key?
            sshAuthenticationMethod = .p384(username: username, privateKey: privateKey)
        case .ecdsaP521:
            print("ecdsaP521 key detected")
            let privateKey = try P521.Signing.PrivateKey(pemRepresentation: sshKeyContent) // Does it support OpenSSH key?
            sshAuthenticationMethod = .p521(username: username, privateKey: privateKey)
        default:
            print("unsupported key type = \(sshKeyType)")
        }

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions