class Net::SSH::Buffer

def read_private_keyblob(type)

def read_private_keyblob(type)
  case type
  when /^ssh-rsa$/
    n = read_bignum
    e = read_bignum
    d = read_bignum
    iqmp = read_bignum
    p = read_bignum
    q = read_bignum
    _unkown1 = read_bignum
    _unkown2 = read_bignum
    dmp1 = d % (p - 1)
    dmq1 = d % (q - 1)
    # Public key
    data_sequence = OpenSSL::ASN1::Sequence([
                                              OpenSSL::ASN1::Integer(n),
                                              OpenSSL::ASN1::Integer(e)
                                            ])
    if d && p && q && dmp1 && dmq1 && iqmp
      data_sequence = OpenSSL::ASN1::Sequence([
                                                OpenSSL::ASN1::Integer(0),
                                                OpenSSL::ASN1::Integer(n),
                                                OpenSSL::ASN1::Integer(e),
                                                OpenSSL::ASN1::Integer(d),
                                                OpenSSL::ASN1::Integer(p),
                                                OpenSSL::ASN1::Integer(q),
                                                OpenSSL::ASN1::Integer(dmp1),
                                                OpenSSL::ASN1::Integer(dmq1),
                                                OpenSSL::ASN1::Integer(iqmp)
                                              ])
    end
    asn1 = OpenSSL::ASN1::Sequence(data_sequence)
    OpenSSL::PKey::RSA.new(asn1.to_der)
  when /^ecdsa\-sha2\-(\w*)$/
    OpenSSL::PKey::EC.read_keyblob($1, self)
  else
    raise Exception, "Cannot decode private key of type #{type}"
  end
end