diff options
author | Ben Schmeckpeper <ben.schmeckpeper@gmail.com> | 2022-07-14 15:51:38 -0500 |
---|---|---|
committer | Florian Wininger <fw.centrale@gmail.com> | 2023-02-08 11:31:04 +0100 |
commit | d9b259c242bc012289cb8ea134ff04b89c72e325 (patch) | |
tree | 69fda53914688ca0be2371e5a75f45d48307f248 | |
parent | ab74b03cc168856b32744562b8982609b990e5f1 (diff) | |
download | net-ssh-d9b259c242bc012289cb8ea134ff04b89c72e325.tar.gz |
Don't use the deprecated set_XXX methods on RSA keys.
This code is taken from https://github.com/nov/json-jwt/pull/102/files
-rw-r--r-- | lib/net/ssh/buffer.rb | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/lib/net/ssh/buffer.rb b/lib/net/ssh/buffer.rb index e5d12eb..3d44f32 100644 --- a/lib/net/ssh/buffer.rb +++ b/lib/net/ssh/buffer.rb @@ -251,7 +251,6 @@ module Net def read_private_keyblob(type) case type when /^ssh-rsa$/ - key = OpenSSL::PKey::RSA.new n = read_bignum e = read_bignum d = read_bignum @@ -262,27 +261,28 @@ module Net _unkown2 = read_bignum dmp1 = d % (p - 1) dmq1 = d % (q - 1) - if key.respond_to?(:set_key) - key.set_key(n, e, d) - else - key.e = e - key.n = n - key.d = d - end - if key.respond_to?(:set_factors) - key.set_factors(p, q) - else - key.p = p - key.q = q + # 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 - if key.respond_to?(:set_crt_params) - key.set_crt_params(dmp1, dmq1, iqmp) - else - key.dmp1 = dmp1 - key.dmq1 = dmq1 - key.iqmp = iqmp - end - key + + 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 |