SRP::Authentication::Session holds the per session data
[ruby_srp.git] / lib / srp / authentication.rb
1 require File.expand_path(File.dirname(__FILE__) + '/util')
2
3 module SRP
4   module Authentication
5
6     include Util
7
8     class Session
9       include Util
10       attr_accessor :aa, :bb
11
12       def initialize(aa, verifier)
13         @aa = aa
14         @b = bigrand(32).hex
15         # B = g^b + k v (mod N)
16         @bb = (modpow(GENERATOR, @b, PRIME_N) + multiplier * verifier) % PRIME_N
17         @verifier = verifier
18       end
19
20       def u
21         calculate_u(aa, bb, PRIME_N)
22       end
23
24       def secret
25         @s ||= calculate_secret
26       end
27
28       def m1
29         calculate_m(aa, bb, secret)
30       end
31
32       def m2
33         calculate_m(aa, m1, secret)
34       end
35
36       protected
37
38       def calculate_secret
39         base = (modpow(@verifier, u, PRIME_N) * aa) % PRIME_N
40         modpow(base, @b, PRIME_N)
41       end
42     end
43
44     def initialize_auth(aa)
45       return Session.new(aa, verifier)
46     end
47
48     def authenticate(m, session)
49       if(m == session.m1)
50         return session.m2
51       end
52     end
53
54
55   end
56
57 end
58
59