Class: OpenSSL::PKey::DSA
- Inherits:
-
Object
- Object
- OpenSSL::PKey::DSA
- Defined in:
- lib/net/ssh/transport/openssl.rb
Overview
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.
Instance Method Summary collapse
-
#ssh_do_sign(data, sig_alg = nil) ⇒ Object
Signs the given data.
-
#ssh_do_verify(sig, data, options = {}) ⇒ Object
Verifies the given signature matches the given data.
-
#ssh_type ⇒ Object
(also: #ssh_signature_type)
Returns “ssh-dss”, which is the description of this key type used by the SSH2 protocol.
-
#to_blob ⇒ Object
Converts the key to a blob, according to the SSH2 protocol.
Instance Method Details
#ssh_do_sign(data, sig_alg = nil) ⇒ Object
Signs the given data.
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/net/ssh/transport/openssl.rb', line 120 def ssh_do_sign(data, sig_alg = nil) sig = sign(OpenSSL::Digest::SHA1.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) sig_size = params["q"].num_bits / 8 raise OpenSSL::PKey::DSAError, "bad sig size" if sig_r.length > sig_size || sig_s.length > sig_size sig_r = "\0" * (20 - sig_r.length) + sig_r if sig_r.length < 20 sig_s = "\0" * (20 - sig_s.length) + sig_s if sig_s.length < 20 return sig_r + sig_s end |
#ssh_do_verify(sig, data, options = {}) ⇒ Object
Verifies the given signature matches the given data.
109 110 111 112 113 114 115 116 117 |
# File 'lib/net/ssh/transport/openssl.rb', line 109 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::SHA1.new, a1sig.to_der, data) end |
#ssh_type ⇒ Object Also known as: ssh_signature_type
Returns “ssh-dss”, which is the description of this key type used by the SSH2 protocol.
96 97 98 |
# File 'lib/net/ssh/transport/openssl.rb', line 96 def ssh_type "ssh-dss" end |