summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Schmeckpeper <ben.schmeckpeper@gmail.com>2022-07-14 15:51:38 -0500
committerFlorian Wininger <fw.centrale@gmail.com>2023-02-08 11:31:04 +0100
commitd9b259c242bc012289cb8ea134ff04b89c72e325 (patch)
tree69fda53914688ca0be2371e5a75f45d48307f248
parentab74b03cc168856b32744562b8982609b990e5f1 (diff)
downloadnet-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.rb42
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