From 7de7a78668a83eaab58597ce655ba613d4b477fb Mon Sep 17 00:00:00 2001 From: Azul Date: Thu, 26 Jul 2012 10:51:42 +0200 Subject: turned server class into authentication module - test green, example broken The example seems to be broken due to changes in srp-js --- lib/srp.rb | 2 +- lib/srp/authentication.rb | 43 +++++++++++++++++++++++++++++++++++++++++++ lib/srp/server.rb | 47 ----------------------------------------------- 3 files changed, 44 insertions(+), 48 deletions(-) create mode 100644 lib/srp/authentication.rb delete mode 100644 lib/srp/server.rb (limited to 'lib') diff --git a/lib/srp.rb b/lib/srp.rb index 999f9b6..a008b82 100644 --- a/lib/srp.rb +++ b/lib/srp.rb @@ -9,5 +9,5 @@ $:.unshift File.dirname(__FILE__) module SRP autoload :Client, 'srp/client' - autoload :Server, 'srp/server' + autoload :Authentication, 'srp/authentication' end diff --git a/lib/srp/authentication.rb b/lib/srp/authentication.rb new file mode 100644 index 0000000..1f36dd7 --- /dev/null +++ b/lib/srp/authentication.rb @@ -0,0 +1,43 @@ +require File.expand_path(File.dirname(__FILE__) + '/util') + +module SRP + module Authentication + + include Util + + + def initialize_auth(aa) + @aa = aa + @b = bigrand(32).hex + # B = g^b + k v (mod N) + @bb = (modpow(GENERATOR, @b, PRIME_N) + multiplier * verifier) % PRIME_N + u = calculate_u(@aa, @bb, PRIME_N) + return @bb, u + end + + def authenticate(m) + u = calculate_u(@aa, @bb, PRIME_N) + base = (modpow(verifier, u, PRIME_N) * @aa) % PRIME_N + server_s = modpow(base, @b, PRIME_N) + if(m == calculate_m(@aa, @bb, server_s)) + return calculate_m(@aa, m, server_s) + end + end + + + protected + + def calculate_u(aa, bb, n) + nlen = 2 * ((('%x' % [n]).length * 4 + 7) >> 3) + aahex = '%x' % [aa] + bbhex = '%x' % [bb] + return sha256_str("%x%x" % [aa, bb]).hex + hashin = '0' * (nlen - aahex.length) + aahex \ + + '0' * (nlen - bbhex.length) + bbhex + sha256_str(hashin).hex + end + end + +end + + diff --git a/lib/srp/server.rb b/lib/srp/server.rb deleted file mode 100644 index 30f5088..0000000 --- a/lib/srp/server.rb +++ /dev/null @@ -1,47 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/util') - -module SRP - class Server - - include Util - - def initialize(salt, verifier) - @salt = salt - @verifier = verifier - end - - def initialize_auth(aa) - @aa = aa - @b = bigrand(32).hex - # B = g^b + k v (mod N) - @bb = (modpow(GENERATOR, @b, PRIME_N) + multiplier * @verifier) % PRIME_N - u = calculate_u(@aa, @bb, PRIME_N) - return @bb, u - end - - def authenticate(m) - u = calculate_u(@aa, @bb, PRIME_N) - base = (modpow(@verifier, u, PRIME_N) * @aa) % PRIME_N - server_s = modpow(base, @b, PRIME_N) - if(m == calculate_m(@aa, @bb, server_s)) - return calculate_m(@aa, m, server_s) - end - end - - - protected - - def calculate_u(aa, bb, n) - nlen = 2 * ((('%x' % [n]).length * 4 + 7) >> 3) - aahex = '%x' % [aa] - bbhex = '%x' % [bb] - return sha256_str("%x%x" % [aa, bb]).hex - hashin = '0' * (nlen - aahex.length) + aahex \ - + '0' * (nlen - bbhex.length) + bbhex - sha256_str(hashin).hex - end - - end -end - - -- cgit v1.2.3