both sides calculate their own u
authorAzul <azul@leap.se>
Thu, 26 Jul 2012 08:58:28 +0000 (10:58 +0200)
committerAzul <azul@leap.se>
Thu, 26 Jul 2012 08:58:28 +0000 (10:58 +0200)
lib/srp/authentication.rb
lib/srp/client.rb
lib/srp/util.rb

index 1f36dd7..f4b2e70 100644 (file)
@@ -11,8 +11,7 @@ module SRP
       @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
+      return @bb
     end
 
     def authenticate(m)
@@ -25,17 +24,6 @@ module SRP
     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
index ba62993..1be2461 100644 (file)
@@ -19,7 +19,8 @@ module SRP
       x = calculate_x(username, password, salt)
       a = bigrand(32).hex
       aa = modpow(GENERATOR, a, PRIME_N) # A = g^a (mod N)
-      bb, u = server.initialize_auth(aa)
+      bb = server.initialize_auth(aa)
+      u = calculate_u(aa, bb, PRIME_N)
       client_s = calculate_client_s(x, a, bb, u)
       server.authenticate(calculate_m(aa,bb,client_s))
     end
index efbecaa..577977e 100644 (file)
@@ -66,6 +66,15 @@ d15dc7d7b46154d6b6ce8ef4ad69b15d4982559b297bcf1885c529f566660e5
       sha256_str(hashin).hex
     end
 
+    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