initial commit - testing srp auth
[ruby_srp.git] / lib / srp / server.rb
1 require File.expand_path(File.dirname(__FILE__) + '/util')
2
3 module SRP
4   class Server
5
6     include Util
7
8     def initialize(salt, verifier)
9       @salt = salt
10       @verifier = verifier
11     end
12
13     def initialize_auth(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       u = calculate_u(aa, @bb, PRIME_N)
18       return @bb, u
19     end
20
21     def authenticate(aa, client_s)
22       u = calculate_u(aa, @bb, PRIME_N)
23       base = (modpow(@verifier, u, PRIME_N) * aa) % PRIME_N
24       server_s = modpow(base, @b, PRIME_N)
25       return client_s == server_s
26     end
27
28
29     protected
30
31     def calculate_u(aa, bb, n)
32       nlen = 2 * ((('%x' % [n]).length * 4 + 7) >> 3)
33       aahex = '%x' % [aa]
34       bbhex = '%x' % [bb]
35       hashin = '0' * (nlen - aahex.length) + aahex \
36         + '0' * (nlen - bbhex.length) + bbhex
37       sha1_hex(hashin).hex
38     end
39   end
40 end
41
42