From c1aca87581f4f80f98c081a836f1c4ce4ef17f71 Mon Sep 17 00:00:00 2001 From: Jordan Sissel Date: Sun, 10 Oct 2010 23:12:35 -0700 Subject: [PATCH] - Add tests. --- test/keys/tester_nopassphrase_rsa | 27 +++++++++ test/keys/tester_nopassphrase_rsa.pub | 1 + test/keys/tester_withpassphrase_rsa | 30 ++++++++++ test/keys/tester_withpassphrase_rsa.pub | 1 + test/test_agent.rb | 73 +++++++++++++++++++++++++ 5 files changed, 132 insertions(+) create mode 100644 test/keys/tester_nopassphrase_rsa create mode 100644 test/keys/tester_nopassphrase_rsa.pub create mode 100644 test/keys/tester_withpassphrase_rsa create mode 100644 test/keys/tester_withpassphrase_rsa.pub create mode 100644 test/test_agent.rb diff --git a/test/keys/tester_nopassphrase_rsa b/test/keys/tester_nopassphrase_rsa new file mode 100644 index 0000000..842d49c --- /dev/null +++ b/test/keys/tester_nopassphrase_rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEoQIBAAKCAQEA8tpxavVG0N2T7dPKjSUZH12zwfyQkeH7HD8i7rv7/tXt0C+i +k4Vo8FubxBy1+dd5+/M/AcChlAfPhRhkt+5Ge0XGhjJ/nsWJAahEYJH1N5E6JQnU +VHSxYdDux76bUSEodfuskc/opmUaJ0Qbpw40OYe8e7VquL9pwAMHK6vUmfPfG0Jb +6AhwfDQ5nj/sZa3zs8GAueI4LD694oanm308vnDsrJuhfER4Hyiv89cega0k+gFk +CR5/2cn33XFzl8x+70Cvd0jxKwVhTEKF3Dg5W/nz+ilfEUvfSF7Z5Vp9mxvtECe9 +DPJiBAWtvZA4LcSct/KcQ/k1W6CZbYVnMe6llwIBIwKCAQB85V7mjMVVeUTDdDxI +lrx2h/YL/ju4vVySLxlHk+Cu8a2BAo4f+3fMEdsUZol5LPzn+XDcVHBawjA10gfp +kHwE4g5TpPEtFSHjmF2uAevTb0J5csT4PAN0Ik7qYga8AmyUcs3HVPtOQp+8bCt6 +fFVfamDvKhmg13g23PxfmjLS1DBv4Ibgpw/4Z9baYRNDEwNnB1McxAfLhsPoUirB +ByyAV333ZEMgpwv8NylqP5TT1jt2J4H9E4g9t8+YDC0QZZvTpnJzHS5MNTcdNOZU +pt0KDQPCQyXaXUhY2H/zxYOAEbx8MS0OrgDdfnm/9FUTNaNpcbmdYJyqVpe/LrYl +pOh7AoGBAPulbx9JTJnXt5kxODr9WlndyC9WOu6p1kzA+bGzoX1dnu1phPRJrG9W +NWZYbL6p/ZBf2p+Jf0Q68Qr+cfpKn1/n9WRcgASWx4Awb5tgw7uptGSmKmKtPs+J +MBT8AyS6IenyibmlSXktbJY2AjYQ8n66yM0AppNU/We6Z0enDoRFAoGBAPcOEG8/ +PhslCAzg2Shl54T/axNWYwF2qYJsCaLF3AVK0opT07jk4XF6+c5pRBPKAMumL0e+ +MiR8LGdwPSGtSxqy3PrJLKDHK70Nsyqd9yU7LEDofGutOzv1+5M6AfWg14ZlBYEg +cwOZsWOuwSPMzWA+WuZYbBwQwe4xJtnP5pYrAoGBAO1ENZKG8HPLY/bWortGpaUw +McY7XCLapXuRYHRY6LgH0FwwSigoNN4A00M9bdhXIkZLv4B6U2w3ks/Z9m+lcbIy +eafE7bsvE99DnG3thVkq+orIjl0JvuDvEBPJCkczJ0pLFCQQ3t/3oOVmH1eMUlo7 +FRkPPfiglydJWhBbrpn3AoGAP4dGDfpRzHc8lZjnYijVIjMM57cgxdyvPstS71dz +F03BHEFw9Qenr3dkzq1apgC+YECtEnK8b8gorOJY3MYpQWExglD82OLCGqvAW2py +wG5NNUMYrflYX+Aqv3VQ9gTJtNgl/KHxsHf6ahb+duuFRKJR43XSqCGQ9BtEgSbU +5MkCgYBKNuZaqkOMQ6lgdqOXRdKb54fQsgOAUUBi4dkscRjUtO9ukv4Cb1au27UC +lV3S5zXpBhxdgqzBzl/vMCF+rBbeamNxe9CdAd0eNzJtQvY2EjUUYsbkfSHy3QXU +0B2m7/UJ6RIhfmhOhnAG0POo7sy6oN1AmwwASAxFjZikkKq+vw== +-----END RSA PRIVATE KEY----- diff --git a/test/keys/tester_nopassphrase_rsa.pub b/test/keys/tester_nopassphrase_rsa.pub new file mode 100644 index 0000000..5f3456a --- /dev/null +++ b/test/keys/tester_nopassphrase_rsa.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA8tpxavVG0N2T7dPKjSUZH12zwfyQkeH7HD8i7rv7/tXt0C+ik4Vo8FubxBy1+dd5+/M/AcChlAfPhRhkt+5Ge0XGhjJ/nsWJAahEYJH1N5E6JQnUVHSxYdDux76bUSEodfuskc/opmUaJ0Qbpw40OYe8e7VquL9pwAMHK6vUmfPfG0Jb6AhwfDQ5nj/sZa3zs8GAueI4LD694oanm308vnDsrJuhfER4Hyiv89cega0k+gFkCR5/2cn33XFzl8x+70Cvd0jxKwVhTEKF3Dg5W/nz+ilfEUvfSF7Z5Vp9mxvtECe9DPJiBAWtvZA4LcSct/KcQ/k1W6CZbYVnMe6llw== jls@snack.home diff --git a/test/keys/tester_withpassphrase_rsa b/test/keys/tester_withpassphrase_rsa new file mode 100644 index 0000000..a585496 --- /dev/null +++ b/test/keys/tester_withpassphrase_rsa @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,89BA80483980E174 + +hFGVgynymna5kvscc7Xeks9MQ6rkHoJaZBW+y+R2YNxVh9nsmcSGqu1v1zOjsb7M +P8pUbPqPc44dVRbLTWjo2lecXl8Yf4krwOfZ3vfaqHJdDiyWMo0meB8r2LwK7GsG +qTogPRXYbElAYQcyCaPc0AuUgslxUkO1NHbq9KaQGiUsQSo2tD7BTJeZG+c1k0o1 +eW9F0oBfnTBbMAryd66rx68QJa+X/PAhY+g7qA8VFDSz08c6v/oupyB4orePdOKC +ICWyQNs/YZpKiuOyTRIvPSBkuwJmIy0oflXoAWVXcI32l+3p90DOWqJaf4ibWHXR +a9VFdiz/kwpy/kg1kIo+5UdkSNd0IgzwUqjsIOiJXHgZKxNtH/toNQ1PhYjtnrsd +3NRdr74nqcRfHMJxDDlMDOgK8TiqjvoOJ3kNs+Bc9hD2W89v38ybqFoMhWr8j7HA +8ZKcpWD2dQjo3FMu2NiEBzoozYkXwvxJhUC3Z3uFmRJSVByC82TyNLfGXe93mEn3 +UyJSpiwayi5Dy8TB2/KtFHOU6A6Q9ha6XwvJlgMynEG72m8UenINPYQqQGWxu2Ma +xxzxKWzD8FiJeSn9tRJEmvdXkI4kM4x0QcpQ7COYKD1E69W/uNi6cHTy/VA0fJd5 +LIcGx6L4HZvPu8qMZj6BWgOL8XuYlLWaXTgDAgbolxObr5xl/FgOcx+oKtIKqFx7 +geAtoFdEsVNLT5bohwgrJmTvWvi9AjAjHXRTDTHfTOsa6HePZUekrF/w2MmeKeg0 +JESIoIMaPErnA45b0X/kmYl90xNsPT7RdV7KwrjTS19CiNYgZ6DPoA/gJSjpMFOo +SKC2K9TLurmJfh20+9FrUJvDlwiwHkcsDkMwXICifqwJdjcLey8Ux7zPmAo9UzhS +h2Rdhqw77XGeGYwQbg+rvHFJdrxoTpc5HYb+K7VaR7cHZZo1oc2VUjhWMNpbxAIy +mRthnAqJ2aVhePRmwTFE8Ej6+tfS8ovQWFa1wl3EUJYVoGClPqj23tlnTQlL/Iiq +ZRbT+9Cn0o4xqcrpTDCWSWTsDTzvnx7u6cDd4S5C1UQMXIFju6gLTsXyWysL3tpD +wi02A1a1WI+kkN3CCTvOSH2CmdDzyZgKXU6p/CJ3/yMTvWh6zub17AkOCvWkmUXa +l0DvtsgKpEKVmoB0CYGGozYDoW1ncicITThAy07zD0BnymN4/c1VeWiGazrrUZPs +wE0eXV+NSDP/iTf0Wn4mR80vt/E3X6D7SlruFAcc3NwN5V/m9ldnpK0yKZ0Wt97X +L0bwLo9oBAHJ0EbFMhURrQQxBpWT73QmTJiPeB6R+AoVy/o7yjaRnhgf0YRAL1os +Dvl4vh00yqrs+sIm9AtL1dHJR1YmAREnNXB3HY88qirrJqMooR1IiJtPLCCJ3Wlm +XinASr6mx/wlaGRcQJlPs5NbL+VRv6r/coWEDFELZU2Q+ZOEmzQ8aNtO1uOQ2ADN +xOBYyraN/9kQMr/FzvQ9eRy+NTftXpZVoV7Z0j3c7rqXTNejuG+h2LR6A//d13RC +QhoYsXXls1sDX+x6nTNcxlmPucrAnJ8rC/XY0UNa0NjrNFKq7tFxsg== +-----END RSA PRIVATE KEY----- diff --git a/test/keys/tester_withpassphrase_rsa.pub b/test/keys/tester_withpassphrase_rsa.pub new file mode 100644 index 0000000..3a3446e --- /dev/null +++ b/test/keys/tester_withpassphrase_rsa.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzMth8xzMRlKZXB7DwwYf/JqChrV7d/s1IEoxvUH6bWIgv42DHI0pzeJeLcEdlNLPwu8wLGnx82Wlp0fwM1D+pOdFEErbMx2FHXA0dq0U69smRC1lc7OL64RG/u84vyXoFyFMZo5uyI2YlWf7cEZZVjy9ePBCDXutCuTDUrkolncLYd9FxY/SayxIwZRUZbuIRNhnX2v32ijYj8sMJLWl0jksGtOeNC7uEegrow10CHPrh2z07DZb2kLq75evsSTnLbQEsKrkMCMZLSZVp0ZehJb0pn1DEdbAWx8cG9b1NAEl/aLM/h565ExnWuP0i2ExETHh4c6BXLfxF9ybedtPDQ== jls@snack.home diff --git a/test/test_agent.rb b/test/test_agent.rb new file mode 100644 index 0000000..1669030 --- /dev/null +++ b/test/test_agent.rb @@ -0,0 +1,73 @@ + +require "test/unit" + +$:.unshift "#{File.dirname(__FILE__)}/../lib" +require "ssh/key/signer" +require "ssh/key/verifier" + +class TestAgent < Test::Unit::TestCase + def setup + # Ensure we don't accidentally use the caller's ssh agent + ENV.delete("SSH_AUTH_SOCK") + ENV.delete("SSH_AGENT_PID") + + # Run our own ssh-agent; it will output values and then fork/detach + values = %x{ssh-agent}.split("\n").grep(/^SSH[^=]+=/) + values.collect { |line| line.split("=", 2) }.each do |key, value| + value.gsub!(/; export.*/, "") + ENV[key] = value + #puts "ENV[#{key}] = #{value}" + end + end # def setup + + def teardown + # Should we use ssh-agent -k, instead? + Process.kill("KILL", ENV["SSH_AGENT_PID"].to_i) rescue nil + end # def teardown + + def test_no_keys + signer = SSH::Key::Signer.new + idcount = signer.signing_identities.length + assert_equal(0, idcount, + "A new signer with an empty ssh-agent should have no " \ + "identities, found #{idcount}") + end + + def test_with_rsa_key + system("ssh-add keys/tester_nopassphrase_rsa > /dev/null 2>&1") + + signer = SSH::Key::Signer.new + idcount = signer.signing_identities.length + assert_equal(1, idcount, "Expected 1 identity, found #{idcount}.") + end + + def test_sign_and_verify_with_rsa_key + system("ssh-add keys/tester_nopassphrase_rsa > /dev/null 2>&1") + signer = SSH::Key::Signer.new + verifier = SSH::Key::Verifier.new + + inputs = [ "hello", "foo bar 1 2 3 4", Marshal.dump({:test => :fizz}), + "", "1", " " ] + inputs.each do |data| + signatures = signer.sign(data) + assert(verifier.verify?(signatures, data), + "Signature verify failed against data '#{data.inspect}'") + end + end + + def test_sign_and_verify_with_rsa_key_fails_on_bad_data + system("ssh-add keys/tester_nopassphrase_rsa > /dev/null 2>&1") + signer = SSH::Key::Signer.new + verifier = SSH::Key::Verifier.new + + inputs = [ "hello", "foo bar 1 2 3 4", Marshal.dump({:test => :fizz}), + "", "1", " " ] + inputs.each do |data| + signatures = signer.sign(data) + assert(!verifier.verify?(signatures, data + "bad"), + "Signature verify expected to fail when verifying against altered data") + end + end +end # class TestAgent + +