summaryrefslogtreecommitdiff
path: root/lib/srp/client.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/srp/client.rb')
-rw-r--r--lib/srp/client.rb27
1 files changed, 8 insertions, 19 deletions
diff --git a/lib/srp/client.rb b/lib/srp/client.rb
index de17fb3..94e36af 100644
--- a/lib/srp/client.rb
+++ b/lib/srp/client.rb
@@ -5,23 +5,23 @@ module SRP
include Util
- attr_reader :salt, :verifier
+ attr_reader :salt, :verifier, :username
def initialize(username, password, salt = nil)
@username = username
@password = password
@salt = salt || bigrand(4).hex
- @multiplier = multiplier # let's cache it
calculate_verifier
end
def authenticate(server)
- a = bigrand(32).hex
- aa = modpow(GENERATOR, a) # A = g^a (mod N)
- bb = server.handshake(@username, aa)
- u = calculate_u(aa, bb)
- client_s = calculate_client_s(private_key, a, bb, u)
- server.validate(calculate_m(aa, bb, client_s))
+ @session = SRP::Session.new(self)
+ @session.handshake(server)
+ @session.validate(server)
+ end
+
+ def private_key
+ @private_key ||= calculate_private_key
end
protected
@@ -30,23 +30,12 @@ module SRP
@verifier ||= modpow(GENERATOR, private_key)
end
- def private_key
- @private_key ||= calculate_private_key
- end
-
def calculate_private_key
shex = '%x' % [@salt]
inner = sha256_str([@username, @password].join(':'))
sha256_hex(shex, inner).hex
end
- def calculate_client_s(x, a, bb, u)
- base = bb
- base += BIG_PRIME_N * @multiplier
- base -= modpow(GENERATOR, x) * @multiplier
- base = base % BIG_PRIME_N
- modpow(base, x * u + a)
- end
end
end