turned server class into authentication module - test green, example broken
authorAzul <azul@leap.se>
Thu, 26 Jul 2012 08:51:42 +0000 (10:51 +0200)
committerAzul <azul@leap.se>
Thu, 26 Jul 2012 08:51:42 +0000 (10:51 +0200)
The example seems to be broken due to changes in srp-js

example/http-srp.rb
example/models/user.rb
example/views/signup.erb
lib/srp.rb
lib/srp/authentication.rb [moved from lib/srp/server.rb with 77% similarity]
test/auth_test.rb

index 2e50cc8..ed07896 100644 (file)
@@ -2,9 +2,9 @@ require 'sinatra'
 require 'pp'
 require 'json'
 
+require '../lib/srp'
 require 'models/user'
 require 'models/log'
-require '../lib/srp'
 
 get '/' do
   @user = User.current
@@ -24,7 +24,7 @@ post '/register/salt/' do
   { :salt => @user.salt.to_s(16) }.to_json
 end
 
-post '/register/user/' do
+post '/register/user' do
   User.current.verifier = params.delete('v').hex
   content_type :json
   { :ok => true }.to_json
@@ -35,19 +35,19 @@ get '/login' do
   erb :login
 end
 
-post '/handshake/' do
+post '/handshake' do
   @user = User.current
   Log.log(:handshake, params)
-  @handshake = @user.initialize_auth(params)
+  @handshake = @user.handshake(params)
   Log.log(:init_auth, @handshake)
   content_type :json
   @handshake.to_json
 end
 
-post '/authenticate/' do
+post '/authenticate' do
   @user = User.current
   Log.log(:authenticate, params)
-  @auth = @user.authenticate(params)
+  @auth = @user.validate(params)
   Log.log(:confirm_authentication, @auth)
   content_type :json
   @auth.to_json
index 91bbffc..81104f4 100644 (file)
@@ -1,5 +1,7 @@
 class User
 
+  include SRP::Authentication
+
   def self.current
     @current
   end
@@ -22,14 +24,13 @@ class User
     User.current = self
   end
 
-  def initialize_auth(params)
-    self.srp = SRP::Server.new(self.salt, self.verifier)
-    bb, u = self.srp.initialize_auth(params.delete('A').hex)
+  def handshake(params)
+    bb, u = initialize_auth(params.delete('A').hex)
     return {:s => self.salt.to_s(16), :B => bb.to_s(16)}
   end
 
-  def authenticate(params)
-    if m2 = self.srp.authenticate(params.delete('M').hex)
+  def validate(params)
+    if m2 = authenticate(params.delete('M').hex)
       self.active = true
       return {:M => m2.to_s(16)}
     else
index 6e1bbf3..2b26820 100644 (file)
@@ -1,6 +1,6 @@
 
 <h2>1. Signup</h2>
-<form class="form-horizontal" action="/signup" method="POST">
+<form class="form-horizontal" action="/register/user" method="POST">
   <legend>Signup to test secure remote passwords</legend>
   <div class="control-group">
     <label class="control-label" for="login">Login</label>
index 999f9b6..a008b82 100644 (file)
@@ -9,5 +9,5 @@
 $:.unshift File.dirname(__FILE__)
 module SRP
   autoload :Client, 'srp/client'
-  autoload :Server, 'srp/server'
+  autoload :Authentication, 'srp/authentication'
 end
similarity index 77%
rename from lib/srp/server.rb
rename to lib/srp/authentication.rb
index 30f5088..1f36dd7 100644 (file)
@@ -1,27 +1,23 @@
 require File.expand_path(File.dirname(__FILE__) + '/util')
 
 module SRP
-  class Server
+  module Authentication
 
     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
+      @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
+      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)
@@ -40,8 +36,8 @@ module SRP
         + '0' * (nlen - bbhex.length) + bbhex
       sha256_str(hashin).hex
     end
-
   end
+
 end
 
 
index f93445f..b8c3c05 100644 (file)
@@ -1,12 +1,24 @@
 require File.expand_path(File.dirname(__FILE__) + '/test_helper')
 
+class User
+
+  include SRP::Authentication
+
+  attr_accessor :salt, :verifier
+
+  def initialize(salt, verifier)
+    @salt = salt
+    @verifier = verifier
+  end
+end
+
 class AuthTest < Test::Unit::TestCase
 
   def setup
     @username = 'user'
     @password = 'opensesami'
     @client = SRP::Client.new(@username, @password)
-    @server = SRP::Server.new(@client.salt, @client.verifier)
+    @server = User.new(@client.salt, @client.verifier)
   end
 
   def test_successful_auth