From c3fdb32a13c0028536109c17fb6f75db8708a43f Mon Sep 17 00:00:00 2001 From: Azul Date: Wed, 6 Feb 2013 16:05:59 +0100 Subject: changed SRP:Client so it can be used to wrap a user record on the server --- lib/srp/client.rb | 13 +++++++++---- lib/srp/user.rb | 19 +++++++++++++++++++ test/auth_test.rb | 11 ++++++++--- test/client_test.rb | 8 ++++++-- test/session_test.rb | 8 ++++++-- 5 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 lib/srp/user.rb diff --git a/lib/srp/client.rb b/lib/srp/client.rb index 3882f1d..ebe158f 100644 --- a/lib/srp/client.rb +++ b/lib/srp/client.rb @@ -5,11 +5,16 @@ module SRP attr_reader :salt, :verifier, :username - def initialize(username, password, salt = nil) + def initialize(username, options) @username = username - @password = password - @salt = salt || bigrand(4).hex - calculate_verifier + if options[:password] + @password = options[:password] + @salt = options[:salt] || bigrand(4).hex + calculate_verifier + else + @verifier = options[:verifier] + @salt = options[:salt] + end end def authenticate(server) diff --git a/lib/srp/user.rb b/lib/srp/user.rb new file mode 100644 index 0000000..1330de7 --- /dev/null +++ b/lib/srp/user.rb @@ -0,0 +1,19 @@ +# +# SRP User on the server. +# +# This will be used in the session instead of the real user record so the +# session does not get cluttered with the whole user record. +# +module SRP + class User + + attr_reader :username, :salt, :verifier + + def initialize(user) + @username = user.username + @salt = user.salt + @verifier = user.verifier + end + + end +end diff --git a/test/auth_test.rb b/test/auth_test.rb index 24bc42f..a3d4dc0 100644 --- a/test/auth_test.rb +++ b/test/auth_test.rb @@ -29,7 +29,8 @@ class AuthTest < Test::Unit::TestCase def setup @username = 'user' @password = 'opensesami' - @client = SRP::Client.new(@username, @password) + @client = SRP::Client.new @username, + :password => @password @server = Server.new(@client.salt, @client.verifier, @username) end @@ -38,12 +39,16 @@ class AuthTest < Test::Unit::TestCase end def test_a_wrong_password - client = SRP::Client.new(@username, "wrong password", @client.salt) + client = SRP::Client.new @username, + :password => "wrong password", + :salt => @client.salt assert !client.authenticate(@server) end def test_wrong_username - client = SRP::Client.new("wrong username", @password, @client.salt) + client = SRP::Client.new "wrong username", + :password => @password, + :salt => @client.salt assert !client.authenticate(@server) end end diff --git a/test/client_test.rb b/test/client_test.rb index 3a191a8..7c453de 100644 --- a/test/client_test.rb +++ b/test/client_test.rb @@ -8,7 +8,9 @@ class ClientTest < Test::Unit::TestCase end def test_calculation_of_private_key - @client = SRP::Client.new(@login, @password, "7686acb8".hex) + @client = SRP::Client.new @login, + :password => @password, + :salt => "7686acb8".hex assert_equal "84d6bb567ddf584b1d8c8728289644d45dbfbb02deedd05c0f64db96740f0398", "%x" % @client.send(:private_key) end @@ -17,7 +19,9 @@ class ClientTest < Test::Unit::TestCase # s,V = pysrp.create_salted_verification_key("testuser", "password", pysrp.SHA256, pysrp.NG_1024) def test_verifier - @client = SRP::Client.new(@login, @password, '4c78c3f8'.hex) + @client = SRP::Client.new @login, + :password => @password, + :salt => '4c78c3f8'.hex v = '474c26aa42d11f20544a00f7bf9711c4b5cf7aab95ed448df82b95521b96668e7480b16efce81c861870302560ddf6604c67df54f1d04b99d5bb9d0f02c6051ada5dc9d594f0d4314e12f876cfca3dcd99fc9c98c2e6a5e04298b11061fb8549a22cde0564e91514080df79bca1c38c682214d65d590f66b3719f954b078b83c' assert_equal v, "%x" % @client.verifier end diff --git a/test/session_test.rb b/test/session_test.rb index 8327a63..a6e72a0 100644 --- a/test/session_test.rb +++ b/test/session_test.rb @@ -9,7 +9,9 @@ class SessionTest < Test::Unit::TestCase @username = "testuser" @password = "password" @salt = '4c78c3f8'.hex - @client = SRP::Client.new(@username, @password, @salt) + @client = SRP::Client.new @username, + :password => @password, + :salt => @salt @verifier = @client.verifier end @@ -35,7 +37,9 @@ class SessionTest < Test::Unit::TestCase b = "78e12fc099be1409e0fce3bf84484d89d58710bcc3d8a0e05227fb291be3fb28".hex bb = "d8d50a862b7e8a897f8b0554c4a474e8aa152bd08f23436773fbb977e81cbf5e8262937ffb7ad6b72e3aa7f72deec947cdb286ab466e490d7c544bf443331ad12657c8f9bb2aabf508b73ea1ed29d03a060f5f2a70baef858bdb79c5c878844c058fe10c2cc746b0fb701e98d8d6405ab7d0b65bb4f87cf8e47b25ae4ee6e53b".hex m = "d5cbec7254ce66f421ceddbfe8a0a8991b5be2aa9c25d868f073f4459dfc358b".hex - client = SRP::Client.new(@username, password, @salt) + client = SRP::Client.new @username, + :password => password, + :salt => @salt assert_equal @verifier.to_s(16), client.verifier.to_s(16) session = SRP::Session.new(self, aa) session.send(:initialize_server, aa, b) # seeding b to compare to py_srp -- cgit v1.2.3