diff options
author | Miklós Fazekas <mfazekas@szemafor.com> | 2020-02-06 12:28:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-06 12:28:50 +0100 |
commit | 4d2142cc5bd0889cd5465dfd371ef7a521376835 (patch) | |
tree | 38fccde1c1f9eb9a46109ed89544e0de99fc2a03 | |
parent | f710a280a60ea852e88c6037c6087a50d4da1ebe (diff) | |
parent | 5277b94e323854132eec142a318ff504f38fd848 (diff) | |
download | net-ssh-4d2142cc5bd0889cd5465dfd371ef7a521376835.tar.gz |
Merge pull request #736 from sawanoboly/issue_731
allow multiple newlines for OPENSSH PRIVATE KEY
-rw-r--r-- | lib/net/ssh/authentication/ed25519.rb | 3 | ||||
-rw-r--r-- | test/authentication/test_ed25519.rb | 32 |
2 files changed, 34 insertions, 1 deletions
diff --git a/lib/net/ssh/authentication/ed25519.rb b/lib/net/ssh/authentication/ed25519.rb index 981e522..0c5530c 100644 --- a/lib/net/ssh/authentication/ed25519.rb +++ b/lib/net/ssh/authentication/ed25519.rb @@ -26,7 +26,7 @@ module Net CipherFactory = Net::SSH::Transport::CipherFactory MBEGIN = "-----BEGIN OPENSSH PRIVATE KEY-----\n" - MEND = "-----END OPENSSH PRIVATE KEY-----\n" + MEND = "-----END OPENSSH PRIVATE KEY-----" MAGIC = "openssh-key-v1" class DecryptError < ArgumentError @@ -41,6 +41,7 @@ module Net end def self.read(datafull, password) + datafull = datafull.strip raise ArgumentError.new("Expected #{MBEGIN} at start of private key") unless datafull.start_with?(MBEGIN) raise ArgumentError.new("Expected #{MEND} at end of private key") unless datafull.end_with?(MEND) datab64 = datafull[MBEGIN.size...-MEND.size] diff --git a/test/authentication/test_ed25519.rb b/test/authentication/test_ed25519.rb index 1dcff2e..7430541 100644 --- a/test/authentication/test_ed25519.rb +++ b/test/authentication/test_ed25519.rb @@ -29,6 +29,23 @@ unless ENV['NET_SSH_NO_ED25519'] self.assert_equal(pub_key.fingerprint('sha256'), key_fingerprint_sha256_no_pwd) end + def test_no_pwd_key_with_newlines + pub = Net::SSH::Buffer.new(Base64.decode64(public_key_no_pwd.split(' ')[1])) + _type = pub.read_string + pub_data = pub.read_string + priv = private_key_no_pwd_with_newlines + + pub_key = Net::SSH::Authentication::ED25519::PubKey.new(pub_data) + priv_key = Net::SSH::Authentication::ED25519::PrivKey.read(priv, nil) + + shared_secret = "Hello" + signed = priv_key.ssh_do_sign(shared_secret) + self.assert_equal(true,pub_key.ssh_do_verify(signed,shared_secret)) + self.assert_equal(priv_key.public_key.fingerprint, pub_key.fingerprint) + self.assert_equal(pub_key.fingerprint, key_fingerprint_md5_no_pwd) + self.assert_equal(pub_key.fingerprint('sha256'), key_fingerprint_sha256_no_pwd) + end + def test_pwd_key if defined?(JRUBY_VERSION) puts "Skipping password protected ED25519 for JRuby" @@ -114,6 +131,21 @@ unless ENV['NET_SSH_NO_ED25519'] EOF end + def private_key_no_pwd_with_newlines + @anonymous_key = <<~EOF + -----BEGIN OPENSSH PRIVATE KEY----- + b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW + QyNTUxOQAAACAwdjQYeBiTz1DdZFzzLvG+t913L+eVqCgtzpAYxQG8yQAAAKjlHzLo5R8y + 6AAAAAtzc2gtZWQyNTUxOQAAACAwdjQYeBiTz1DdZFzzLvG+t913L+eVqCgtzpAYxQG8yQ + AAAEBPrD+n4901Y+NYJ2sry+EWRdltGFhMISvp91TywJ//mTB2NBh4GJPPUN1kXPMu8b63 + 3Xcv55WoKC3OkBjFAbzJAAAAIHZhZ3JhbnRAdmFncmFudC11YnVudHUtdHJ1c3R5LTY0AQ + IDBAU= + -----END OPENSSH PRIVATE KEY----- + + + EOF + end + def public_key_no_pwd 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDB2NBh4GJPPUN1kXPMu8b633Xcv55WoKC3OkBjFAbzJ vagrant@vagrant-ubuntu-trusty-64' end |