module SSHData::PublicKey

Constants

ALGOS
ALGO_DSA
ALGO_ECDSA256
ALGO_ECDSA384
ALGO_ECDSA521
ALGO_ED25519
ALGO_RSA

Public key algorithm identifiers

ALGO_RSA_SHA2_256

RSA SHA2 signature algorithms used with ALGO_RSA keys. tools.ietf.org/html/draft-rsa-dsa-sha2-256-02

ALGO_RSA_SHA2_512
ALGO_SKECDSA256
ALGO_SKED25519

Public Class Methods

from_data(data) click to toggle source
# File lib/ssh_data/public_key.rb, line 59
def self.from_data(data)
  case data[:algo]
  when ALGO_RSA
    RSA.new(**data)
  when ALGO_DSA
    DSA.new(**data)
  when ALGO_ECDSA256, ALGO_ECDSA384, ALGO_ECDSA521
    ECDSA.new(**data)
  when ALGO_ED25519
    ED25519.new(**data)
  when ALGO_SKED25519
    SKED25519.new(**data)
  when ALGO_SKECDSA256
    SKECDSA.new(**data)
  else
    raise DecodeError, "unkown algo: #{data[:algo].inspect}"
  end
end
parse_openssh(key) click to toggle source

Parse an OpenSSH public key in authorized_keys format (see sshd(8) manual page).

key - An OpenSSH formatted public key, including algo, base64 encoded key

and optional comment.

Returns a PublicKey::Base subclass instance.

# File lib/ssh_data/public_key.rb, line 30
def self.parse_openssh(key)
  algo, raw, _ = SSHData.key_parts(key)
  parsed = parse_rfc4253(raw)

  if parsed.algo != algo
    raise DecodeError, "algo mismatch: #{parsed.algo.inspect}!=#{algo.inspect}"
  end

  parsed
end
parse_rfc4253(raw) click to toggle source

Parse an RFC 4253 binary SSH public key.

key - A RFC 4253 binary public key String.

Returns a PublicKey::Base subclass instance.

# File lib/ssh_data/public_key.rb, line 49
def self.parse_rfc4253(raw)
  data, read = Encoding.decode_public_key(raw)

  if read != raw.bytesize
    raise DecodeError, "unexpected trailing data"
  end

  from_data(data)
end