simplifying modpow to default to BIG_PRIME_N
authorAzul <azul@riseup.net>
Thu, 4 Oct 2012 08:32:39 +0000 (10:32 +0200)
committerAzul <azul@riseup.net>
Thu, 4 Oct 2012 08:32:39 +0000 (10:32 +0200)
lib/srp/authentication.rb
lib/srp/client.rb
lib/srp/util.rb

index 0fd275c..3428fd4 100644 (file)
@@ -13,7 +13,7 @@ module SRP
         @aa = aa
         @b = bigrand(32).hex
         # B = g^b + k v (mod N)
-        @bb = (modpow(GENERATOR, @b, BIG_PRIME_N) + multiplier * verifier) % BIG_PRIME_N
+        @bb = (modpow(GENERATOR, @b) + multiplier * verifier) % BIG_PRIME_N
       end
 
       def u
@@ -23,8 +23,8 @@ module SRP
       # do not cache this - it's secret and someone might store the
       # session in a CookieStore
       def secret(verifier)
-        base = (modpow(verifier, u, BIG_PRIME_N) * aa) % BIG_PRIME_N
-        modpow(base, @b, BIG_PRIME_N)
+        base = (modpow(verifier, u) * aa) % BIG_PRIME_N
+        modpow(base, @b)
       end
 
       def m1(verifier)
index 65052f5..22ed9f7 100644 (file)
@@ -18,7 +18,7 @@ module SRP
     def authenticate(server, username, password)
       x = calculate_x(username, password)
       a = bigrand(32).hex
-      aa = modpow(GENERATOR, a, BIG_PRIME_N) # A = g^a (mod N)
+      aa = modpow(GENERATOR, a) # A = g^a (mod N)
       bb = server.handshake(username, aa)
       u = calculate_u(aa, bb)
       client_s = calculate_client_s(x, a, bb, u)
@@ -28,7 +28,7 @@ module SRP
     protected
     def calculate_verifier
       x = calculate_x
-      @verifier = modpow(GENERATOR, x, BIG_PRIME_N)
+      @verifier = modpow(GENERATOR, x)
       @verifier
     end
 
@@ -41,9 +41,9 @@ module SRP
     def calculate_client_s(x, a, bb, u)
       base = bb
       base += BIG_PRIME_N * @multiplier
-      base -= modpow(GENERATOR, x, BIG_PRIME_N) * @multiplier
+      base -= modpow(GENERATOR, x) * @multiplier
       base = base % BIG_PRIME_N
-      modpow(base, x * u + a, BIG_PRIME_N)
+      modpow(base, x * u + a)
     end
   end
 end
index fcbab31..087ce5d 100644 (file)
@@ -20,7 +20,7 @@ d15dc7d7b46154d6b6ce8ef4ad69b15d4982559b297bcf1885c529f566660e5
     GENERATOR = 2 # g
 
     # a^n (mod m)
-    def modpow(a, n, m)
+    def modpow(a, n, m = BIG_PRIME_N)
       r = 1
       while true
         r = r * a % m if n[0] == 1