summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzul <azul@leap.se>2012-07-26 10:51:42 +0200
committerAzul <azul@leap.se>2012-07-26 10:51:42 +0200
commit7de7a78668a83eaab58597ce655ba613d4b477fb (patch)
tree0de1e7bb7af165eb8d165dc4ba296acb7850fdc0
parent1481331f3827711c16a3bcfb0ae0c6e4afd788d9 (diff)
turned server class into authentication module - test green, example broken
The example seems to be broken due to changes in srp-js
-rw-r--r--example/http-srp.rb12
-rw-r--r--example/models/user.rb11
-rw-r--r--example/views/signup.erb2
-rw-r--r--lib/srp.rb2
-rw-r--r--lib/srp/authentication.rb (renamed from lib/srp/server.rb)12
-rw-r--r--test/auth_test.rb14
6 files changed, 31 insertions, 22 deletions
diff --git a/example/http-srp.rb b/example/http-srp.rb
index 2e50cc8..ed07896 100644
--- a/example/http-srp.rb
+++ b/example/http-srp.rb
@@ -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
diff --git a/example/models/user.rb b/example/models/user.rb
index 91bbffc..81104f4 100644
--- a/example/models/user.rb
+++ b/example/models/user.rb
@@ -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
diff --git a/example/views/signup.erb b/example/views/signup.erb
index 6e1bbf3..2b26820 100644
--- a/example/views/signup.erb
+++ b/example/views/signup.erb
@@ -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>
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/server.rb b/lib/srp/authentication.rb
index 30f5088..1f36dd7 100644
--- a/lib/srp/server.rb
+++ b/lib/srp/authentication.rb
@@ -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
diff --git a/test/auth_test.rb b/test/auth_test.rb
index f93445f..b8c3c05 100644
--- a/test/auth_test.rb
+++ b/test/auth_test.rb
@@ -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