diff options
Diffstat (limited to 'lib/srp.js')
-rw-r--r-- | lib/srp.js | 59 |
1 files changed, 38 insertions, 21 deletions
@@ -3,43 +3,60 @@ function SRP(remote, session) var srp = this; session = session || new this.Session(); remote = remote || new this.Remote(); + remote.onError = remote.onError || this.error; + session.onError = session.onError || this.error; + this.remote = remote; + this.session = session; // Start the login process by identifying the user this.identify = function() { remote.handshake(session, receive_salts); + + // Receive login salts from the server, start calculations + function receive_salts(response) + { + // B = 0 will make the algorithm always succeed + // -> refuse such a server answer + if(response.B == 0) { + srp.error("Server send random number 0 - this is not allowed"); + } else { + session.calculations(response.s, response.B); + remote.authenticate(session, confirm_authentication) + } + }; + + // Receive M2 from the server and verify it + // If an error occurs, raise it as an alert. + function confirm_authentication(response) + { + if (session.validate(response.M)) + srp.success(); + else + srp.error("Server key does not match"); + }; }; - // Receive login salts from the server, start calculations - function receive_salts(response) + // Initiate the registration process + this.register = function() { - // B = 0 will make the algorithm always succeed - // -> refuse such a server answer - if(response.B == 0) { - srp.error("Server send random number 0 - this is not allowed"); - } else { - session.calculations(response.s, response.B); - remote.authenticate(session, confirm_authentication) - } + remote.register(session, srp.registered_user); }; - // Receive M2 from the server and verify it - // If an error occurs, raise it as an alert. - function confirm_authentication(response) + // The user has been registered successfully, now login + this.registered_user = function(response) { - if (session.validate(response.M)) - srp.success(); - else - alertErrorMessage("Server key does not match"); - }; + if(response.ok) + { + srp.identify(); + } + }; // Minimal error handling - set remote.onError to sth better to overwrite. this.error = function(text) { alert(text); }; - remote.onError = remote.onError || this.error; - session.onError = session.onError || this.error; // This function is called when authentication is successful. // Developers can set this to other functions in specific implementations @@ -55,5 +72,5 @@ function SRP(remote, session) alert("Login successful."); } }; - }; + |