summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklós Fazekas <mfazekas@szemafor.com>2020-02-06 12:28:50 +0100
committerGitHub <noreply@github.com>2020-02-06 12:28:50 +0100
commit4d2142cc5bd0889cd5465dfd371ef7a521376835 (patch)
tree38fccde1c1f9eb9a46109ed89544e0de99fc2a03
parentf710a280a60ea852e88c6037c6087a50d4da1ebe (diff)
parent5277b94e323854132eec142a318ff504f38fd848 (diff)
downloadnet-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.rb3
-rw-r--r--test/authentication/test_ed25519.rb32
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