107: def ssh_do_sign(data)
108: sig = sign( OpenSSL::Digest::DSS1.new, data)
109: a1sig = OpenSSL::ASN1.decode( sig )
110:
111: sig_r = a1sig.value[0].value.to_s(2)
112: sig_s = a1sig.value[1].value.to_s(2)
113:
114: if sig_r.length > 20 || sig_s.length > 20
115: raise OpenSSL::PKey::DSAError, "bad sig size"
116: end
117:
118: sig_r = "\0" * ( 20 - sig_r.length ) + sig_r if sig_r.length < 20
119: sig_s = "\0" * ( 20 - sig_s.length ) + sig_s if sig_s.length < 20
120:
121: return sig_r + sig_s
122: end