class OpenSSL::PKey::DSA

  1. lib/net/ssh/transport/openssl.rb
Parent: PKey

This class is originally defined in the OpenSSL module. As needed, methods have been added to it by the Net::SSH module for convenience in dealing with SSH functionality.

Methods

Public Instance

  1. ssh_do_sign
  2. ssh_do_verify
  3. ssh_type
  4. to_blob

Public Instance methods

ssh_do_sign (data)

Signs the given data.

[show source]
# File lib/net/ssh/transport/openssl.rb, line 107
def ssh_do_sign(data)
  sig = sign( OpenSSL::Digest::DSS1.new, data)
  a1sig = OpenSSL::ASN1.decode( sig )

  sig_r = a1sig.value[0].value.to_s(2)
  sig_s = a1sig.value[1].value.to_s(2)

  if sig_r.length > 20 || sig_s.length > 20
    raise OpenSSL::PKey::DSAError, "bad sig size"
  end

  sig_r = "\00"" * ( 20 - sig_r.length ) + sig_r if sig_r.length < 20
  sig_s = "\00"" * ( 20 - sig_s.length ) + sig_s if sig_s.length < 20

  return sig_r + sig_s
end
ssh_do_verify (sig, data)

Verifies the given signature matches the given data.

[show source]
# File lib/net/ssh/transport/openssl.rb, line 96
def ssh_do_verify(sig, data)
  sig_r = sig[0,20].unpack("H*")[0].to_i(16)
  sig_s = sig[20,20].unpack("H*")[0].to_i(16)
  a1sig = OpenSSL::ASN1::Sequence([
     OpenSSL::ASN1::Integer(sig_r),
     OpenSSL::ASN1::Integer(sig_s)
  ])
  return verify(OpenSSL::Digest::DSS1.new, a1sig.to_der, data)
end
ssh_type ()

Returns "ssh-dss", which is the description of this key type used by the SSH2 protocol.

[show source]
# File lib/net/ssh/transport/openssl.rb, line 85
def ssh_type
  "ssh-dss"
end
to_blob ()

Converts the key to a blob, according to the SSH2 protocol.

[show source]
# File lib/net/ssh/transport/openssl.rb, line 90
def to_blob
  @blob ||= Net::SSH::Buffer.from(:string, ssh_type,
    :bignum, p, :bignum, q, :bignum, g, :bignum, pub_key).to_s
end