193: def ssh_do_verify(sig, data)
194: digest = digester.digest(data)
195: a1sig = nil
196:
197: begin
198: sig_r_len = sig[0,4].unpack("H*")[0].to_i(16)
199: sig_l_len = sig[4+sig_r_len,4].unpack("H*")[0].to_i(16)
200:
201: sig_r = sig[4,sig_r_len].unpack("H*")[0]
202: sig_s = sig[4+sig_r_len+4,sig_l_len].unpack("H*")[0]
203:
204: a1sig = OpenSSL::ASN1::Sequence([
205: OpenSSL::ASN1::Integer(sig_r.to_i(16)),
206: OpenSSL::ASN1::Integer(sig_s.to_i(16)),
207: ])
208: rescue
209: end
210:
211: if a1sig == nil
212: return false
213: else
214: dsa_verify_asn1(digest, a1sig.to_der)
215: end
216: end